1<!DOCTYPE html> 2<html lang="en-GB" dir="ltr"> 3<head> 4 <!-- Top.Mail.Ru counter -->
5<script type="text/javascript"> 6var _tmr = window._tmr || (window._tmr = []); 7_tmr.push({id: "3788553", type: "pageView", start: (new Date()).getTime(), pid: "USER_ID"}); 8(function (d, w, id) { 9if (d.getElementById(id)) return; 10var ts = d.createElement("script"); ts.type = "text/javascript"; ts.async = true; ts.id = id; 11ts.src = "https://top-fwz1.mail.ru/js/code.js"; 12var f = function () {var s = d.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ts, s);}; 13if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } 14})(document, window, "tmr-code"); 15</script>
15 16<noscript><div><img src="https://top-fwz1.mail.ru/counter?id=3788553;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div></noscript> 17<!-- /Top.Mail.Ru counter --> 18 19 <meta charset="utf-8"> 20 <meta name="viewport" content="width=device-width, initial-scale=1"> 21 <title>AI Music Video Generator for Finished Songs | ClipChat</title> 22 <meta name="description" content="ClipChat analyses the music, develops a concept, generates shots and edits a publication-ready music video" /> 23 24 <link rel="canonical" href="https://clipchat.ai/en-GB" /> 25 <meta property="og:type" content="website" /> 26 <meta property="og:title" content="AI Music Video Generator for Finished Songs | ClipChat" /> 27 <meta property="og:description" content="ClipChat analyses the music, develops a concept, generates shots and edits a publication-ready music video" /> 28 <meta property="og:url" content="https://clipchat.ai/en-GB" /> 29 <meta property="og:image" content="https://clipchat.ai/og/clipchat-og.png" /> 30 <meta name="twitter:card" content="summary_large_image" /> 31
31<script src="/lp/homepage-v5/desktop2/support.js?v=1786532709"></script>
31 32
32<script src="/lp/clipchat-media.js?v=1789575453"></script>
32 33
33<script defer src="/lp/clipchat-intro-offer.js?v=1789220134"></script>
33 34 <!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 34-35
34 35<script async src="https://www.googletagmanager.com/gtag/js?id=
35G-FMWKD01EQ9
vendor: 12 bytes, line 35
35"></script>
36<script> 37
vendor: 134 bytes, lines 37-41
37window.dataLayer = window.dataLayer || []; 38 function gtag(){dataLayer.push(arguments);} 39 gtag('js', new Date()); 40 41 gtag('config', '
41G-FMWKD01EQ9
vendor: 4 bytes, line 41
41');
42</script>
42 43 44 <!-- Google tag (gtag.js) - Google Ads -->
vendor: 64 bytes, lines 44-45
44 45<script async src="https://www.googletagmanager.com/gtag/js?id=
45AW-17789712385
vendor: 12 bytes, line 45
45"></script>
46<script> 47 window.dataLayer = window.dataLayer || []; 48 function gtag(){dataLayer.push(arguments);} 49 gtag('js', new Date()); 50 51 // conversion_linker: stores the gclid/wbraid in a first-party _gcl_* cookie so the 52 // click survives the landing -> /sign -> checkout hop (it is Google's default, set 53 // explicitly so nobody "cleans it up" later). 54 // allow_enhanced_conversions: lets us send hashed first-party data (email) alongside 55 // the click; the server-side twin (offline conversion upload) needs a Google 56 // Ads developer token, which we do not have yet â see the note above. 57 gtag('config', 'AW-17789712385', { 58 conversion_linker: true, 59 allow_enhanced_conversions: true 60 }); 61</script>
61 62 63 <!-- Meta Pixel Code -->
64<script>
vendor: 399 bytes, lines 64-73
64 65!function(f,b,e,v,n,t,s) 66{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 67n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 68if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 69n.queue=[];t=b.createElement(e);t.async=!0; 70t.src=v;s=b.getElementsByTagName(e)[0]; 71s.parentNode.insertBefore(t,s)}(window, document,'script', 72'https://connect.facebook.net/en_US/fbevents.js'); 73fbq('init', '
731060257096470271
vendor: 30 bytes, lines 73-74
73'); 74fbq('track', 'PageView');
75</script>
75 76<!-- End Meta Pixel Code --> 77 78 <!-- Yandex.Metrika counter -->
79<script type="text/javascript">
vendor: 430 bytes, lines 79-86
79 80 (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; 81 m[i].l=1*new Date(); 82 for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} 83 k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) 84 (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); 85 86 ym(
86111369311
vendor: 157 bytes, lines 86-92
86, "init", { 87 clickmap:true, 88 trackLinks:true, 89 accurateTrackBounce:true, 90 webvisor:true, 91 ecommerce:"dataLayer" 92 });
93</script>
93 94<!-- /Yandex.Metrika counter --> 95 96
96<script> 97 !function(w,d){ 98 if(!w.rdt){ 99 var p=w.rdt=function(){p.sendEvent?p.sendEvent.apply(p,arguments):p.callQueue.push(arguments)}; 100 p.callQueue=[]; 101 var t=d.createElement("script"); 102 t.src="https://www.redditstatic.com/ads/pixel.js";t.async=!0; 103 var s=d.getElementsByTagName("script")[0];s.parentNode.insertBefore(t,s) 104 } 105 }(window,document); 106 rdt('init','a2_gg0xwdw735in'); 107 rdt('track', 'PageVisit'); 108</script>
108 109 110 <style> 111 /* ===== Modal overlay wrapper (doitong auth) ===== */ 112 .dtam-overlay { 113 position: fixed; inset: 0; 114 z-index: 9999; 115 display: none; 116 align-items: center; justify-content: center; 117 background: rgba(0,0,0,0.72); 118 backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); 119 padding: 20px; 120 opacity: 0; 121 transition: opacity 0.2s ease; 122 } 123 .dtam-overlay.open { display: flex; opacity: 1; } 124 .dtam-card { 125 position: relative; 126 width: 100%; max-width: 420px; 127 background: #0E0E12; 128 border: 1px solid rgba(255,255,255,0.08); 129 border-radius: 24px; 130 padding: 36px 28px 28px; 131 display: flex; flex-direction: column; align-items: center; 132 max-height: 90vh; overflow-y: auto; 133 box-shadow: 0 32px 80px rgba(0,0,0,0.6); 134 transform: translateY(8px); 135 transition: transform 0.25s cubic-bezier(.4,0,.2,1); 136 } 137 .dtam-overlay.open .dtam-card { transform: translateY(0); } 138 .dtam-close { 139 position: absolute; top: 14px; right: 14px; 140 width: 32px; height: 32px; border-radius: 50%; 141 background: rgba(255,255,255,0.05); 142 border: 1px solid rgba(255,255,255,0.08); 143 color: rgba(255,255,255,0.6); 144 display: flex; align-items: center; justify-content: center; 145 cursor: pointer; transition: all 0.15s; 146 font-size: 16px; line-height: 1; 147 } 148 .dtam-close:hover { background: rgba(255,255,255,0.1); color: #fff; } 149 150 /* Lock icon on top */ 151 .paywall-lock-icon { 152 width: 64px; height: 64px; border-radius: 50%; 153 background: rgba(255,255,255,0.04); 154 border: 1.5px solid rgba(255,255,255,0.08); 155 display: flex; align-items: center; justify-content: center; 156 margin-bottom: 18px; 157 } 158 .paywall-title { 159 font-size: 20px; font-weight: 700; color: #fff; 160 margin-bottom: 6px; text-align: center; 161 font-family: 'Montserrat', 'Inter', -apple-system, sans-serif; 162 } 163 .paywall-subtitle { 164 font-size: 13px; color: rgba(255,255,255,0.6); 165 margin-bottom: 22px; text-align: center; 166 max-width: 320px; line-height: 1.5; 167 } 168 169 /* Button base */ 170 .pw-btn { 171 display: flex; align-items: center; justify-content: center; 172 gap: 8px; width: 100%; padding: 13px 20px; 173 border-radius: 12px; font-weight: 600; font-size: 14.5px; 174 cursor: pointer; transition: all 0.2s; border: none; 175 font-family: inherit; 176 } 177 .pw-btn-primary { 178 background: linear-gradient(135deg, #FF6F61 0%, #E85A4F 100%); 179 color: #fff; 180 box-shadow: 0 4px 18px rgba(255,111,97,0.3); 181 } 182 .pw-btn-primary:hover { transform: translateY(-1px); box-shadow: 0 6px 22px rgba(255,111,97,0.45); } 183 .pw-btn-primary:disabled { opacity: 0.55; cursor: not-allowed; transform: none; } 184 185 /* Error/loading shared */ 186 .pw-error { 187 display: none; 188 font-size: 13px; color: #ff6b6b; 189 text-align: center; padding: 8px 0 0; line-height: 1.4; 190 } 191 .pw-error.visible { display: block; } 192 .pw-spinner { 193 display: inline-block; width: 14px; height: 14px; 194 border: 2px solid rgba(255,255,255,0.3); 195 border-top-color: #fff; border-radius: 50%; 196 animation: dtam-spin 0.6s linear infinite; 197 } 198 @keyframes dtam-spin { to { transform: rotate(360deg); } } 199 200 /* ===== Inline auth form ===== */ 201 .auth-step { display: none; width: 100%; max-width: 340px; } 202 .auth-step.active { display: block; } 203 .auth-form { display: flex; flex-direction: column; gap: 10px; } 204 .auth-input { 205 width: 100%; padding: 14px 16px; 206 border-radius: 12px; 207 border: 1px solid rgba(255,255,255,0.15); 208 background: rgba(255,255,255,0.04); 209 color: #fff; font-size: 15px; outline: none; 210 transition: border-color 0.2s; box-sizing: border-box; 211 font-family: inherit; 212 } 213 .auth-input::placeholder { color: rgba(255,255,255,0.35); } 214 .auth-input:focus { border-color: #FF6F61; } 215 .auth-password-wrap { position: relative; width: 100%; } 216 .auth-password-wrap .auth-input { padding-right: 48px; } 217 .auth-eye-btn { 218 position: absolute; right: 12px; top: 50%; 219 transform: translateY(-50%); 220 background: none; border: none; 221 color: rgba(255,255,255,0.4); cursor: pointer; 222 padding: 4px; display: flex; align-items: center; 223 } 224 .auth-eye-btn:hover { color: rgba(255,255,255,0.7); } 225 .auth-hint { 226 font-size: 12px; color: rgba(255,255,255,0.35); margin-top: -2px; 227 } 228 .auth-email-header { 229 display: flex; align-items: center; gap: 8px; 230 padding: 10px 14px; 231 background: rgba(255,255,255,0.04); 232 border-radius: 10px; 233 border: 1px solid rgba(255,255,255,0.08); 234 margin-bottom: 12px; 235 } 236 .auth-email-header span { 237 font-size: 13px; color: rgba(255,255,255,0.6); 238 flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 239 } 240 .auth-back-btn { 241 background: none; border: none; 242 color: rgba(255,255,255,0.5); 243 cursor: pointer; padding: 2px; 244 display: flex; align-items: center; 245 } 246 .auth-back-btn:hover { color: #fff; } 247 .auth-forgot-link { text-align: right; margin-top: -2px; } 248 .auth-forgot-link a { 249 font-size: 12.5px; color: #FF6F61; 250 cursor: pointer; text-decoration: none; 251 } 252 .auth-forgot-link a:hover { text-decoration: underline; } 253 .auth-divider { 254 display: flex; align-items: center; gap: 12px; 255 margin: 16px 0 12px; width: 100%; max-width: 340px; 256 } 257 .auth-divider::before, .auth-divider::after { 258 content: ''; flex: 1; height: 1px; 259 background: rgba(255,255,255,0.1); 260 } 261 .auth-divider span { 262 font-size: 12px; color: rgba(255,255,255,0.35); 263 } 264 .auth-oauth { 265 display: flex; flex-direction: column; gap: 10px; 266 width: 100%; max-width: 340px; 267 } 268 .auth-oauth-btn { 269 display: flex; align-items: center; justify-content: center; 270 gap: 10px; width: 100%; padding: 12px 20px; 271 border-radius: 12px; 272 background: transparent; 273 color: rgba(255,255,255,0.85); 274 border: 1px solid rgba(255,255,255,0.15); 275 font-size: 14px; font-weight: 500; 276 cursor: pointer; transition: all 0.2s; 277 font-family: inherit; 278 } 279 .auth-oauth-btn:hover { 280 border-color: rgba(255,255,255,0.3); 281 background: rgba(255,255,255,0.05); 282 } 283 .auth-oauth-btn svg { flex-shrink: 0; } 284 .auth-create-box { 285 text-align: center; padding: 16px; 286 margin-bottom: 14px; 287 border-radius: 16px; 288 border: 1px solid rgba(74,222,128,0.22); 289 background: linear-gradient(135deg, rgba(74,222,128,0.06) 0%, rgba(74,222,128,0.02) 100%); 290 } 291 .auth-create-icon { 292 width: 42px; height: 42px; border-radius: 50%; 293 background: rgba(74,222,128,0.12); 294 display: flex; align-items: center; justify-content: center; 295 margin: 0 auto 8px; 296 } 297 .auth-success-msg {
298 padding: 14px 16px; border-radius: 12px; 299 background: rgba(74,222,128,0.1); 300 border: 1px solid rgba(74,222,128,0.22); 301 color: #4ade80; font-size: 13px; 302 text-align: center; line-height: 1.5; 303 } 304</style> 305 306 <link rel="alternate" hreflang="en-US" href="https://clipchat.ai/" /> 307 <link rel="alternate" hreflang="en-GB" href="https://clipchat.ai/en-GB/" /> 308 <link rel="alternate" hreflang="ru" href="https://clipchat.ai/ru/" /> 309 <link rel="alternate" hreflang="ar" href="https://clipchat.ai/ar/" /> 310 <link rel="alternate" hreflang="bn" href="https://clipchat.ai/bn/" /> 311 <link rel="alternate" hreflang="cs" href="https://clipchat.ai/cs/" /> 312 <link rel="alternate" hreflang="cy" href="https://clipchat.ai/cy/" /> 313 <link rel="alternate" hreflang="da" href="https://clipchat.ai/da/" /> 314 <link rel="alternate" hreflang="de" href="https://clipchat.ai/de/" /> 315 <link rel="alternate" hreflang="el" href="https://clipchat.ai/el/" /> 316 <link rel="alternate" hreflang="es-ES" href="https://clipchat.ai/es-ES/" /> 317 <link rel="alternate" hreflang="es-MX" href="https://clipchat.ai/es-MX/" /> 318 <link rel="alternate" hreflang="fa" href="https://clipchat.ai/fa/" /> 319 <link rel="alternate" hreflang="fi" href="https://clipchat.ai/fi/" /> 320 <link rel="alternate" hreflang="fil" href="https://clipchat.ai/fil/" /> 321 <link rel="alternate" hreflang="fr-CA" href="https://clipchat.ai/fr-CA/" /> 322 <link rel="alternate" hreflang="fr-FR" href="https://clipchat.ai/fr-FR/" /> 323 <link rel="alternate" hreflang="ga" href="https://clipchat.ai/ga/" /> 324 <link rel="alternate" hreflang="gd" href="https://clipchat.ai/gd/" /> 325 <link rel="alternate" hreflang="he" href="https://clipchat.ai/he/" /> 326 <link rel="alternate" hreflang="hi" href="https://clipchat.ai/hi/" /> 327 <link rel="alternate" hreflang="hr" href="https://clipchat.ai/hr/" /> 328 <link rel="alternate" hreflang="hu" href="https://clipchat.ai/hu/" /> 329 <link rel="alternate" hreflang="id" href="https://clipchat.ai/id/" /> 330 <link rel="alternate" hreflang="is" href="https://clipchat.ai/is/" /> 331 <link rel="alternate" hreflang="it" href="https://clipchat.ai/it/" /> 332 <link rel="alternate" hreflang="ja" href="https://clipchat.ai/ja/" /> 333 <link rel="alternate" hreflang="kk" href="https://clipchat.ai/kk/" /> 334 <link rel="alternate" hreflang="ko" href="https://clipchat.ai/ko/" /> 335 <link rel="alternate" hreflang="lb" href="https://clipchat.ai/lb/" /> 336 <link rel="alternate" hreflang="lt" href="https://clipchat.ai/lt/" /> 337 <link rel="alternate" hreflang="lv" href="https://clipchat.ai/lv/" /> 338 <link rel="alternate" hreflang="mi" href="https://clipchat.ai/mi/" /> 339 <link rel="alternate" hreflang="ms" href="https://clipchat.ai/ms/" /> 340 <link rel="alternate" hreflang="mt" href="https://clipchat.ai/mt/" /> 341 <link rel="alternate" hreflang="nl" href="https://clipchat.ai/nl/" /> 342 <link rel="alternate" hreflang="no" href="https://clipchat.ai/no/" /> 343 <link rel="alternate" hreflang="pa" href="https://clipchat.ai/pa/" /> 344 <link rel="alternate" hreflang="pl" href="https://clipchat.ai/pl/" /> 345 <link rel="alternate" hreflang="pt-BR" href="https://clipchat.ai/pt-BR/" /> 346 <link rel="alternate" hreflang="pt-PT" href="https://clipchat.ai/pt-PT/" /> 347 <link rel="alternate" hreflang="rm" href="https://clipchat.ai/rm/" /> 348 <link rel="alternate" hreflang="rom" href="https://clipchat.ai/rom/" /> 349 <link rel="alternate" hreflang="se" href="https://clipchat.ai/se/" /> 350 <link rel="alternate" hreflang="sl" href="https://clipchat.ai/sl/" /> 351 <link rel="alternate" hreflang="sv" href="https://clipchat.ai/sv/" /> 352 <link rel="alternate" hreflang="sw" href="https://clipchat.ai/sw/" /> 353 <link rel="alternate" hreflang="ta" href="https://clipchat.ai/ta/" /> 354 <link rel="alternate" hreflang="th" href="https://clipchat.ai/th/" /> 355 <link rel="alternate" hreflang="tr" href="https://clipchat.ai/tr/" /> 356 <link rel="alternate" hreflang="ur" href="https://clipchat.ai/ur/" /> 357 <link rel="alternate" hreflang="vi" href="https://clipchat.ai/vi/" /> 358 <link rel="alternate" hreflang="yi" href="https://clipchat.ai/yi/" /> 359 <link rel="alternate" hreflang="zh-CN" href="https://clipchat.ai/zh-CN/" /> 360 <link rel="alternate" hreflang="zh-TW" href="https://clipchat.ai/zh-TW/" /> 361 <link rel="alternate" hreflang="x-default" href="https://clipchat.ai/" /> 362</head> 363<body> 364<x-dc> 365<helmet data-dc-atomics>
366 <link rel="preconnect" href="https://fonts.googleapis.com" /> 367 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous" /> 368 <link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,[email protected],300..800&family=Instrument+Sans:wght@400;500;600&family=Instrument+Serif:ital@0;1&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet" /> 369 <style> 370 :root{--bg:#0A0A0C;--panel:#121215;--panel2:#17171B;--ink:#F4F1EA;--dim:#8B8B95;--dark:#55555E;--acc:#FF3D2E;--acc2:#FF8A5C;--line:rgba(244,241,234,0.09);--line2:rgba(244,241,234,0.16)} 371 body{margin:0;background:var(--bg);color:var(--ink);font-family:'Instrument Sans',sans-serif;-webkit-font-smoothing:antialiased} 372 a{color:var(--acc)} 373 a:hover{color:var(--acc2)} 374 .is-hidden{display:none !important} 375 @media (prefers-reduced-motion: no-preference){.pulse{animation:pulse .9s ease-in-out infinite alternate}} 376 @keyframes floatA{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(18px,-26px,0) scale(1.12)}} 377 @keyframes floatB{0%,100%{transform:translate3d(0,0,0) scale(1.05)}50%{transform:translate3d(-22px,20px,0) scale(0.94)}} 378 @keyframes riseIn{from{opacity:0;transform:translateY(22px);filter:blur(8px)}to{opacity:1;transform:none;filter:blur(0)}} 379 @keyframes marq{from{transform:translateX(0)}to{transform:translateX(-50%)}} 380 @keyframes shine{0%{transform:translateX(-140%) skewX(-18deg)}55%,100%{transform:translateX(260%) skewX(-18deg)}} 381 @keyframes spin{to{transform:rotate(1turn)}} 382 @keyframes noteGlow{0%,100%{box-shadow:0 0 0 1px rgba(255,61,46,0.35),0 0 34px rgba(255,61,46,0.10)}50%{box-shadow:0 0 0 1px rgba(255,61,46,0.7),0 0 54px rgba(255,61,46,0.26)}} 383 @keyframes ticker{to{background-position:-260px 0}} 384 @keyframes eqmini{0%,100%{transform:scaleY(0.3)}50%{transform:scaleY(1)}} 385 @keyframes wipeIn{from{clip-path:inset(0 100% 0 0);opacity:0;transform:scale(1.07)}to{clip-path:inset(0 0 0 0);opacity:1;transform:none}} 386 @keyframes scan{0%{transform:translateX(-120%);opacity:0}12%{opacity:1}88%{opacity:1}100%{transform:translateX(120%);opacity:0}} 387 @keyframes lockRing{0%{box-shadow:0 0 0 0 rgba(255,61,46,0.55)}70%{box-shadow:0 0 0 12px rgba(255,61,46,0)}100%{box-shadow:0 0 0 0 rgba(255,61,46,0)}} 388 @keyframes pop{from{opacity:0;transform:scale(0.4) rotate(-18deg)}to{opacity:1;transform:none}} 389 @keyframes eq{0%,100%{transform:scaleY(0.22)}50%{transform:scaleY(1)}} 390 @keyframes ctaGlow{0%,100%{box-shadow:0 0 28px rgba(255,61,46,0.35)}50%{box-shadow:0 0 52px rgba(255,61,46,0.62)}} 391 button:active{transform:scale(0.975)} 392 button{transition:transform .12s ease,opacity .2s ease,filter .2s ease} 393 button:disabled{cursor:progress;transform:none} 394 button:focus-visible,a:focus-visible{outline:2px solid #FF3D2E;outline-offset:3px;border-radius:8px} 395 @keyframes ring{to{transform:rotate(1turn)}} 396 @keyframes tmIn{from{transform:translate3d(-26px,32px,0) scale(0.96);filter:blur(6px)}to{transform:none;filter:blur(0)}} 397 @keyframes tileIn{from{opacity:0;transform:translateY(34px) scale(0.94);clip-path:inset(0 0 100% 0);filter:blur(12px)}to{opacity:1;transform:none;clip-path:inset(0 0 0 0);filter:blur(0)}} 398 @keyframes tileSweep{0%{transform:translateX(-140%)}100%{transform:translateX(340%)}} 399 html{scroll-behavior:smooth} 400 ::selection{background:#FF3D2E;color:#16090A} 401 ::-webkit-scrollbar{width:11px} 402 ::-webkit-scrollbar-track{background:#0A0A0C} 403 ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#3A2320,#1E1512);border:3px solid #0A0A0C;border-radius:999px} 404 ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#FF6A4D,#C42A1B)} 405 @keyframes preOut{to{opacity:0;visibility:hidden}} 406 @keyframes preIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}} 407 @keyframes lane{from{transform:translateX(0)}to{transform:translateX(-50%)}} 408 @keyframes laneBack{from{transform:translateX(-50%)}to{transform:translateX(0)}} 409 @keyframes faceScan{0%{top:-2%;opacity:0}12%{opacity:1}88%{opacity:1}100%{top:100%;opacity:0}
409} 410 @keyframes markerIn{0%,8%{opacity:0;transform:scale(0.4)}18%{opacity:1;transform:scale(1)}92%{opacity:1;transform:scale(1)}100%{opacity:0.5;transform:scale(1)}} 411 @keyframes linkFlow{to{stroke-dashoffset:-40}} 412 @keyframes lightOn{from{clip-path:inset(100% 0 0 0);opacity:0.2}to{clip-path:inset(0 0 0 0);opacity:1}} 413 @keyframes monIn{from{opacity:0;transform:scale(1.06);clip-path:inset(0 0 100% 0)}to{opacity:1;transform:scale(1);clip-path:inset(0 0 0 0)}} 414 @keyframes idRise{from{opacity:0;transform:translateY(26px) scale(0.97);clip-path:inset(14% 0 0 0);filter:blur(10px)}to{opacity:1;transform:none;clip-path:inset(0 0 0 0);filter:blur(0)}} 415 @keyframes idSweep{0%{transform:translateX(-140%)}100%{transform:translateX(320%)}} 416 @keyframes lockPulse{0%,100%{opacity:0.35;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}} 417 @keyframes whiteGlow{0%,100%{box-shadow:0 0 20px rgba(244,241,234,0.18),inset 0 0 12px rgba(244,241,234,0.06)}50%{box-shadow:0 0 38px rgba(244,241,234,0.34),inset 0 0 18px rgba(244,241,234,0.12)}} 418 @keyframes ctaPulseBlue{0%,100%{box-shadow:0 10px 30px rgba(20,42,110,0.6),0 0 0 0 rgba(55,95,205,0.36)}55%{box-shadow:0 14px 42px rgba(30,60,150,0.72),0 0 0 14px rgba(55,95,205,0)}} 419 @keyframes blueGlow{0%,100%{box-shadow:0 0 22px rgba(96,140,255,0.28),inset 0 0 14px rgba(96,140,255,0.10)}50%{box-shadow:0 0 40px rgba(96,140,255,0.5),inset 0 0 20px rgba(96,140,255,0.18)}} 420 @keyframes stepPrint{0%,6%{opacity:0}14%{opacity:0.85}62%{opacity:0.85}100%{opacity:0}} 421 @keyframes coinFlip{0%,72%,100%{transform:rotateY(0deg) scaleX(1)}80%{transform:rotateY(0deg) scaleX(0.08)}88%{transform:rotateY(0deg) scaleX(1)}} 422 @keyframes stickerBob{0%,100%{transform:rotate(-9deg) translateY(0)}50%{transform:rotate(-9deg) translateY(-6px)}} 423 @keyframes statIn{from{opacity:0;transform:translateY(14px) scale(0.94);clip-path:inset(100% 0 0 0)}to{opacity:1;transform:translateY(0) scale(1);clip-path:inset(0 0 0 0)}} 424 @keyframes statSheen{0%{transform:translateX(-120%)}55%,100%{transform:translateX(320%)}} 425 @keyframes ruleGrow{from{transform:scaleY(0)}to{transform:scaleY(1)}} 426 @keyframes underSwipe{from{transform:scaleX(0)}to{transform:scaleX(1)}} 427 @keyframes ctaPulse{0%,100%{box-shadow:0 10px 30px rgba(255,61,46,0.35),0 0 0 0 rgba(255,61,46,0.35)}55%{box-shadow:0 14px 40px rgba(255,61,46,0.5),0 0 0 14px rgba(255,61,46,0)}} 428 @keyframes auraDrift{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(0,-14px,0) scale(1.06)}} 429 @keyframes lineUp{from{transform:translateY(108%) rotate(2.2deg)}to{transform:translateY(0) rotate(0)}} 430 @keyframes fadeSoft{from{opacity:0}to{opacity:1}} 431 @keyframes pickMe{0%,62%,100%{transform:scale(1);box-shadow:0 0 34px rgba(255,61,46,0.24)}68%{transform:scale(0.94);box-shadow:0 0 14px rgba(255,61,46,0.5)}76%{transform:scale(1.035);box-shadow:0 0 58px rgba(255,61,46,0.55)}84%{transform:scale(1)}} 432 @keyframes pickRing{0%,64%{opacity:0;transform:scale(0.9)}72%{opacity:0.7;transform:scale(1)}100%{opacity:0;transform:scale(1.45)}} 433 @keyframes cursorTap{0%,58%{transform:translate(6px,10px) scale(1);opacity:0}62%{opacity:1}70%{transform:translate(0,0) scale(0.82);opacity:1}80%{transform:translate(0,0) scale(1);opacity:1}92%,100%{opacity:0}} 434 @keyframes flowDot{0%{top:-6px;opacity:0}12%{opacity:1}88%{opacity:1}100%{top:100%;opacity:0}} 435 @keyframes barPulse{0%,100%{transform:scaleY(0.35)}50%{transform:scaleY(1)}} 436 @keyframes lineGlow{0%,100%{opacity:0.35}50%{opacity:1}} 437 @keyframes perf{to{background-position:-32px 0}} 438 @keyframes pulse{from{transform:scale(.75);opacity:.6}to{transform:scale(1.15);opacity:1}} 439 @keyframes carouselCardLoop{from{transform:translateX(1764px)}to{transform:translateX(-252px)}} 440 [data-carousel-scroll]{touch-action:pan-y;-webkit-user-select:none;user-select:none} 441 [data-carousel-scroll] img,[data-carousel-scroll] video{-webkit-user-drag:none;user-drag:none} 442 [data-carousel-scroll]:hover,[data-carousel-scroll]:focus-within{cursor:grab} 443 [data-carousel-scroll][data-dragging="1"]{cursor:grabbing} 444 [data-carousel-scroll]:hover [data-carousel-card],[data-carousel-scroll]:focus-within [data-carousel-card],[data-carousel-scroll][data-dragging="1"] [data-carousel-card]{animation-play-state:paused!important} 445 [data-showcase-play]:focus-visible,[data-showcase-play][aria-pressed="true"]:hover{opacity:1!important} 446 [data-carousel-edge]{position:absolute;top:0;bottom:0;z-index:7;width:min(12vw,150px);pointer-events:none} 447 [data-carousel-edge="left"]{left:0;background:linear-gradient(90deg,#0A0A0C,rgba(10,10,12,.82) 32%,transparent)} 448 [data-carousel-edge="right"]{right:0;background:linear-gradient(270deg,#0A0A0C,rgba(10,10,12,.82) 32%,transparent)} 449 @media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}[data-carousel-card]{animation-play-state:paused!important}} 450 </style> 451</helmet> 452<div style="min-height:100vh;background:#0A0A0C;box-sizing:border-box;position:relative;overflow-x:clip"> 453 <div data-vignette="1" style="position:fixed;inset:0;z-index:58;pointer-events:none;opacity:0.55;transition:opacity .6s ease;background:radial-gradient(120% 90% at 50% 50%,transparent 55%,rgba(0,0,0,0.5) 100%)"></div> 454 <div data-preloader="1" style="position:fixed;inset:0;z-index:200;background:#0A0A0C;display:flex;align-items:center;justify-content:center;pointer-events:none;animation:preOut .45s ease .4s forwards"> 455 <span style="display:inline-flex;align-items:center;gap:10px;animation:preIn .35s cubic-bezier(.2,.8,.3,1) both">
456 <span style="width:9px;height:9px;border-radius:50%;background:var(--acc);box-shadow:0 0 20px rgba(255,61,46,0.8)"></span> 457 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:20px;letter-spacing:-0.03em;color:var(--ink)">ClipChat<span style="color:var(--acc)">.ai</span></span> 458 </span> 459 </div> 460 <div data-cursor="1" style="position:fixed;top:0;left:0;width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;border:1px solid rgba(244,241,234,0.5);pointer-events:none;z-index:190;opacity:0;transform:translate3d(-100px,-100px,0);transition:width .25s ease,height .25s ease,margin .25s ease,background .25s ease,border-color .25s ease,opacity .25s ease;display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.1em;color:#16090A;mix-blend-mode:normal"><span data-cursorlabel="1" style="opacity:0;transition:opacity .2s ease"></span></div> 461 <div style="position:fixed;inset:0;pointer-events:none;z-index:60;opacity:0.05;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E")"></div> 462 <nav data-nav="1" style="position:fixed;top:0;left:0;right:0;box-sizing:border-box;z-index:50;backdrop-filter:blur(14px) saturate(1.2);background:rgba(10,10,12,0.78);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:14px max(32px, calc((100% - 1480px) / 2))" data-screen-label="Nav"> 463 <a href="#top" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.02em;color:var(--ink);text-decoration:none">Clip<i style="font-style:normal;color:var(--acc)">Chat</i></a> 464 <div style="display:flex;align-items:center;gap:32px"> 465 <a href="#examples" style="font-family:'Space Mono',monospace;font-size:11px;letter-spacing:0.14em;color:var(--dim);text-decoration:none;text-transform:uppercase">Examples</a> 466 <a href="#how" style="font-family:'Space Mono',monospace;font-size:11px;letter-spacing:0.14em;color:var(--dim);text-decoration:none;text-transform:uppercase">How it works</a> 467 <a href="#pricing" style="font-family:'Space Mono',monospace;font-size:11px;letter-spacing:0.14em;color:var(--dim);text-decoration:none;text-transform:uppercase">Pricing</a> 468 <div style="position:relative;display:flex;align-items:center"> 469 <button type="button" data-v5-globe aria-haspopup="true" aria-expanded="false" aria-label="Language" style="display:flex;align-items:center;gap:6px;background:transparent;border:none;padding:6px;cursor:pointer;color:var(--dim);transition:color .15s"> 470 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3c2.5 2.7 2.5 15.3 0 18M12 3c-2.5 2.7-2.5 15.3 0 18"/></svg> 471 <span style="font-family:'Space Mono',monospace;font-size:11px;letter-spacing:0.08em;text-transform:uppercase">EN</span> 472 </button> 473 <div data-v5-langs style="position:absolute;top:calc(100% + 10px);right:0;z-index:60;min-width:190px;max-height:min(70vh,520px);overflow-y:auto;padding:8px;border-radius:12px;background:rgba(14,14,18,0.97);border:1px solid var(--line2);box-shadow:0 24px 60px rgba(0,0,0,0.6);backdrop-filter:blur(10px)"> 474 <a href="/" hreflang="en-US" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">English</a> 475 <a href="/en-GB" hreflang="en-GB" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--acc)">English (UK)</a> 476 <a href="/ru" hreflang="ru" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Ð ÑÑÑкий</a> 477 <a href="/ar" hreflang="ar" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Ø§ÙØ¹Ø±Ø¨ÙØ©</a> 478 <a href="/bn" hreflang="bn" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">বাà¦à¦²à¦¾</a> 479 <a href="/cs" hreflang="cs" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">ÄeÅ¡tina</a> 480 <a href="/cy" hreflang="cy" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Cymraeg</a> 481 <a href="/da" hreflang="da" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Dansk</a> 482 <a href="/de" hreflang="de" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Deutsch</a> 483 <a href="/el" hreflang="el" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Îλληνικά</a> 484 <a href="/es-ES" hreflang="es-ES" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Español (España)</a> 485 <a href="/es-MX" hreflang="es-MX" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Español (México)</a> 486 <a href="/fa" hreflang="fa" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">ÙØ§Ø±Ø³Û</a> 487 <a href="/fi" hreflang="fi" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Suomi</a> 488 <a href="/fil" hreflang="fil" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Filipino</a> 489 <a href="/fr-CA" hreflang="fr-CA" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Français (Canada)</a> 490 <a href="/fr-FR" hreflang="fr-FR" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Français (France)</a> 491 <a href="/ga" hreflang="ga" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Gaeilge</a> 492 <a href="/gd" hreflang="gd" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">
492Gà idhlig</a> 493 <a href="/he" hreflang="he" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">×¢×ר×ת</a> 494 <a href="/hi" hreflang="hi" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">हिनà¥à¤¦à¥</a> 495 <a href="/hr" hreflang="hr" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Hrvatski</a> 496 <a href="/hu" hreflang="hu" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Magyar</a> 497 <a href="/id" hreflang="id" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Bahasa Indonesia</a> 498 <a href="/is" hreflang="is" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Ãslenska</a> 499 <a href="/it" hreflang="it" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Italiano</a> 500 <a href="/ja" hreflang="ja" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">æ¥æ¬èª</a> 501 <a href="/kk" hreflang="kk" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">ÒазаÒÑа</a> 502 <a href="/ko" hreflang="ko" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">íêµì´</a> 503 <a href="/lb" hreflang="lb" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Lëtzebuergesch</a> 504 <a href="/lt" hreflang="lt" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Lietuvių</a> 505 <a href="/lv" hreflang="lv" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">LatvieÅ¡u</a> 506 <a href="/mi" hreflang="mi" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">MÄori</a> 507 <a href="/ms" hreflang="ms" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Bahasa Melayu</a> 508 <a href="/mt" hreflang="mt" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Malti</a> 509 <a href="/nl" hreflang="nl" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Nederlands</a> 510 <a href="/no" hreflang="no" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Norsk</a> 511 <a href="/pa" hreflang="pa" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">ਪੰà¨à¨¾à¨¬à©</a> 512 <a href="/pl" hreflang="pl" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Polski</a> 513 <a href="/pt-BR" hreflang="pt-BR" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Português (Brasil)</a> 514 <a href="/pt-PT" hreflang="pt-PT" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Português (Portugal)</a> 515 <a href="/rm" hreflang="rm" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Rumantsch</a> 516 <a href="/rom" hreflang="rom" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Romani</a> 517 <a href="/se" hreflang="se" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Davvisámegiella</a> 518 <a href="/sl" hreflang="sl" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">SlovenÅ¡Äina</a> 519 <a href="/sv" hreflang="sv" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Svenska</a> 520 <a href="/sw" hreflang="sw" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Kiswahili</a> 521 <a href="/ta" hreflang="ta" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">தமிழà¯</a> 522 <a href="/th" hreflang="th" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">à¹à¸à¸¢</a> 523 <a href="/tr" hreflang="tr" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Türkçe</a> 524 <a href="/ur" hreflang="ur" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">اردÙ</a> 525 <a href="/vi" hreflang="vi" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">Tiếng Viá»t</a> 526 <a href="/yi" hreflang="yi" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">××Ö´××ש</a> 527 <a href="/zh-CN" hreflang="zh-CN" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">ç®ä½ä¸æ</a> 528 <a href="/zh-TW" hreflang="zh-TW" style="display:block;padding:8px 10px;border-radius:8px;font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.04em;text-decoration:none;color:var(--ink)">ç¹é«ä¸æ</a> 529 </div> 530 </div> 531 <a class="v5-signin" href="/create/clipboard" data-open-auth data-v5-signin style="font-family:'Space Mono',monospace;font-size:12px;letter-spacing:0.08em;text-transform:uppercase;color:var(--dim);text-decoration:none;white-space:nowrap;transition:color .15s" onmouseover="this.style.color='var(--ink)'" onmouseout="this.style.color='var(--dim)'">Sign in</a> 532 <button onClick="{{ startDemo }}" style="background:linear-gradient(180deg,#FF6A4D 0%,#FF3D2E 52%,#E22A1D 100%);color:#FFFFFF;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:13px;letter-spacing:-0.01em;padding:11px 20px;border-radius:9px;border:none;cursor:pointer;box-shadow:0 0 22px rgba(255,61,46,0.3)">Create a music video</button> 533 </div> 534 </nav> 535 536 <div class="{{ menuOverlayCls }}" style="display:none;position:fixed;top:64px;bottom:0;left:0;right:0;box-sizing:border-box;background:rgba(10,10,12,0.97);z-index:49;padding:24px max(32px, calc((100% - 1480px) / 2));display:flex;flex-direction:column;gap:16px"> 537 <a href="#examples" onClick="{{ toggleMenu }}" style="font-family:'Space Mono',monospace;font-size:13px;letter-spacing:0.1em;color:var(--ink);text-decoration:none;text-transform:uppercase;padding:12px 0;border-bottom:1px solid var(--line)">Examples</a> 538 <a href="#how" onClick="{{ toggleMenu }}" style="font-family:'Space Mono',monospace;font-size:13px;letter-spacing:0.1em;color:var(--ink);text-decoration:none;text-transform:uppercase;padding:12px 0;border-bottom:1px solid var(--line)">How it works</a> 539 <a href="#pricing" onClick="{{ toggleMenu }}" style="font-family:'Space Mono',monospace;font-size:13px;letter-spacing:0.1em;color:var(--ink);text-decoration:none;text-transform:uppercase;padding:12px 0;border-bottom:1px solid var(--line)">Pricing</a> 540 <button onClick="{{ startDemoAndClose }}" style="margin-top:8px;background:linear-gradient(180deg,#FF6A4D 0%,#FF3D2E 52%,#E22A1D 100%);color:#16090A;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;box-shadow:0 0 26px rgba(255,61,46,0.4);padding:16px 24px;border-radius:10px;border:none">Create a music video</button> 541 </div> 542 543 <header id="top" style="position:relative;overflow:hidden;min-height:82vh;display:flex;flex-direction:column;justify-content:flex-end;padding:clamp(72px,9vh,140px) 48px clamp(60px,calc(6vh + 20px),116px) 48px" data-screen-label="Hero"> 544 <div style="position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:0">
545 <span style="position:absolute;inset:0;z-index:2;pointer-events:none;mix-blend-mode:screen;background:linear-gradient(90deg,rgba(255,61,46,0.16),transparent 14%,transparent 86%,rgba(96,140,255,0.16))"></span> 546 <video data-bgvideo="1" poster="https://content.doitong.com/video/clipchat_landing_v2/w2_hd.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="width:100%;height:100%;object-fit:cover;transform:none;filter:brightness(1.35) saturate(1.12);opacity:1;transition:opacity .6s ease"></video> 547 <div data-bgveil="1" style="position:absolute;inset:0;opacity:1;transition:opacity .6s ease;background:linear-gradient(180deg,rgba(10,10,12,0.25) 0%,rgba(10,10,12,0.35) 42%,rgba(10,10,12,0.9) 100%)"></div> 548 </div> 549 <div style="position:absolute;left:0;right:0;bottom:0;z-index:3;padding:16px 0;overflow:hidden;background:linear-gradient(0deg,rgba(10,10,12,0.72),transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)"> 550 <div style="position:absolute;top:10px;left:50%;transform:translateX(-50%);font-family:'Space Mono',monospace;font-size:8.5px;letter-spacing:0.24em;color:var(--dim);text-transform:uppercase;pointer-events:none;z-index:2;display:none">Under the hood</div> 551 <div style="display:flex;width:max-content;animation:marq 38s linear infinite"> 552 <span style="display:inline-flex"><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Claude</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Seedance 2.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Minimax H3</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Gemini 3.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">GPT Image 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Nano Banana 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Sedreem 5 Pro</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Claude</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Seedance 2.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Minimax H3</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Gemini 3.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">GPT Image 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Nano Banana 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Sedreem 5 Pro</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span></span>
553 <span style="display:inline-flex"><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Claude</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Seedance 2.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Minimax H3</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Gemini 3.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">GPT Image 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Nano Banana 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Sedreem 5 Pro</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Claude</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Seedance 2.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Minimax H3</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Gemini 3.5</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">GPT Image 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Nano Banana 2</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span><span style="display:inline-flex;align-items:baseline;gap:10px;padding-right:26px;white-space:nowrap"><span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:22px;letter-spacing:-0.03em;color:var(--ink)">Sedreem 5 Pro</span><span style="color:var(--acc);font-size:9px;line-height:1;padding-left:16px">â¦</span></span></span> 554 </div> 555 </div> 556 <div style="position:relative;max-width:1480px;margin:0 auto"> 557 <div style="position:absolute;top:-140px;left:50%;width:520px;height:420px;margin-left:-260px;pointer-events:none;background:radial-gradient(closest-side,rgba(255,61,46,0.14),rgba(255,61,46,0.03) 52%,transparent 78%),radial-gradient(closest-side at 62% 68%,rgba(96,140,255,0.14),transparent 70%);
557filter:blur(6px);animation:auraDrift 9s ease-in-out infinite"></div> 558 <div style="position:absolute;top:120px;left:-90px;width:320px;height:320px;pointer-events:none;background:radial-gradient(closest-side,rgba(120,160,255,0.14),transparent 72%);filter:blur(4px)"></div> 559 <label style="position:absolute;bottom:18px;right:max(32px, calc((100% - 1480px) / 2));z-index:4;display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;background:rgba(10,10,12,0.72);border:1px solid var(--line2);font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.16em;color:var(--dim);text-transform:uppercase;cursor:pointer">Background video<input type="file" accept="video/*" data-val="9" onChange="{{ onFile }}" style="display:none" /></label> 560 561 <div style="max-width:980px"> 562 <div style="text-align:left"> 563 <h1 style="position:relative;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(48px,4.7vw,74px);line-height:0.96;letter-spacing:-0.04em;margin:0;text-align:left;max-width:1060px;text-wrap:balance"> 564 <span style="display:block;overflow:hidden;padding-bottom:0.1em"><span style="display:inline-block;color:var(--ink);animation:lineUp .9s cubic-bezier(.16,.84,.28,1) .05s both">Upload your track - get a finished AI music video</span></span> 565 </h1> 566 <p style="position:relative;margin:22px 0 0 0;max-width:680px;font-size:18px;line-height:1.5;letter-spacing:-0.012em;color:rgba(244,241,234,0.78);text-wrap:balance;animation:fadeSoft .7s ease-out .4s both">ClipChat analyses the music, develops a concept, generates shots and edits a publication-ready music video</p> 567 <div style="position:relative;margin:28px 0 0 0;max-width:420px;animation:riseIn .8s cubic-bezier(.2,.7,.3,1) .28s both">
568 <button data-magnet="1" onClick="{{ startDemo }}" disabled="{{ dzBusy }}" aria-busy="{{ dzBusy }}" style="position:relative;width:100%;overflow:hidden;border:none;border-radius:14px;padding:16px 18px;display:flex;align-items:center;gap:14px;text-align:left;cursor:pointer;background:linear-gradient(180deg,#FF6A4D 0%,#FF3D2E 52%,#E22A1D 100%);animation:ctaPulse 3.4s ease-in-out infinite" style-before="content:'';position:absolute;top:0;left:-45%;width:45%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.45),transparent);animation:shine 4.4s ease-in-out infinite"> 569 <span style="{{ dzIconSt }}">{{ dzIcon }}</span> 570 <span style="display:flex;flex-direction:column;gap:3px;min-width:0;flex:1"> 571 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:20px;letter-spacing:-0.025em;color:#FFFFFF;text-shadow:0 1px 2px rgba(90,14,8,0.45)">{{ dzBtnLabel }}</span> 572 <span style="{{ dzHintSt }}">{{ dzHint }}</span> 573 </span> 574 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:19px;color:#FFFFFF;opacity:0.8">â</span> 575 </button> 576 <div style="margin-top:12px;display:flex;align-items:center;gap:14px;flex-wrap:wrap"> 577 <a href="https://suno.com/" target="_blank" rel="noopener noreferrer" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.14em;color:var(--ink);text-transform:uppercase;text-decoration:underline;text-underline-offset:3px;cursor:pointer">No track? Go to Suno</a> 578 </div> 579 <div style="margin-top:14px;display:inline-flex;align-items:center;gap:9px"> 580 <span class="pulse" style="display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--acc)"></span> 581 <span style="font-family:'Space Mono',monospace;font-size:10px;letter-spacing:0.12em;color:var(--dim);text-transform:uppercase">rendering right now <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;color:var(--acc);letter-spacing:0">{{ liveNow }}</span> clips</span> 582 </div> 583 </div> 584 <div data-hero-route="1" aria-label="Track; AI analysis; Concept; Storyboard; Scenes; Finished video" style="position:relative;margin-top:32px;max-width:1080px;padding:15px 0 14px;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));border-top:1px solid rgba(244,241,234,0.16);border-bottom:1px solid rgba(244,241,234,0.16);animation:riseIn .8s cubic-bezier(.2,.7,.3,1) .45s both"> 585 <div style="position:relative;min-width:0;padding:0 24px 0 0px"> 586 <span style="display:block;margin-bottom:7px;font-family:'Space Mono',monospace;font-size:9px;line-height:1;color:var(--acc)">01</span> 587 <strong style="display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:14px;line-height:1.14;letter-spacing:-0.02em;color:var(--ink)">Track</strong> 588 <span aria-hidden="true" style="position:absolute;right:4px;top:25px;width:18px;height:1px;background:linear-gradient(90deg,var(--acc),rgba(244,241,234,0.2))"></span> 589 </div> 590 <div style="position:relative;min-width:0;padding:0 24px 0 16px"> 591 <span style="display:block;margin-bottom:7px;font-family:'Space Mono',monospace;font-size:9px;line-height:1;color:rgba(244,241,234,0.46)">02</span> 592 <strong style="display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:14px;line-height:1.14;letter-spacing:-0.02em;color:var(--ink)">AI analysis</strong> 593 <span aria-hidden="true" style="position:absolute;right:4px;top:25px;width:18px;height:1px;background:rgba(244,241,234,0.16)"></span> 594 </div> 595 <div style="position:relative;min-width:0;padding:0 24px 0 16px"> 596 <span style="display:block;margin-bottom:7px;font-family:'Space Mono',monospace;font-size:9px;line-height:1;color:rgba(244,241,234,0.46)">03</span> 597 <strong style="display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:14px;line-height:1.14;letter-spacing:-0.02em;color:var(--ink)">Concept</strong> 598 <span aria-hidden="true" style="position:absolute;right:4px;top:25px;width:18px;height:1px;background:rgba(244,241,234,0.16)"></span> 599 </div> 600 <div style="position:relative;min-width:0;padding:0 24px 0 16px">
601 <span style="display:block;margin-bottom:7px;font-family:'Space Mono',monospace;font-size:9px;line-height:1;color:rgba(244,241,234,0.46)">04</span> 602 <strong style="display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:14px;line-height:1.14;letter-spacing:-0.02em;color:var(--ink)">Storyboard</strong> 603 <span aria-hidden="true" style="position:absolute;right:4px;top:25px;width:18px;height:1px;background:rgba(244,241,234,0.16)"></span> 604 </div> 605 <div style="position:relative;min-width:0;padding:0 24px 0 16px"> 606 <span style="display:block;margin-bottom:7px;font-family:'Space Mono',monospace;font-size:9px;line-height:1;color:rgba(244,241,234,0.46)">05</span> 607 <strong style="display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:14px;line-height:1.14;letter-spacing:-0.02em;color:var(--ink)">Scenes</strong> 608 <span aria-hidden="true" style="position:absolute;right:4px;top:25px;width:18px;height:1px;background:rgba(244,241,234,0.16)"></span> 609 </div> 610 <div style="position:relative;min-width:0;padding:0 24px 0 16px"> 611 <span style="display:block;margin-bottom:7px;font-family:'Space Mono',monospace;font-size:9px;line-height:1;color:rgba(244,241,234,0.46)">06</span> 612 <strong style="display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:14px;line-height:1.14;letter-spacing:-0.02em;color:var(--ink)">Finished video</strong> 613 614 </div> 615 </div> 616 </div> 617 </div> 618 </div> 619 </div> 620 <div style="margin:28px 0 0 0;display:flex;flex-direction:column;align-items:center;gap:10px"> 621 <span style="display:inline-flex;align-items:center;gap:8px;font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.24em;color:var(--dim);text-transform:uppercase"><span style="width:18px;height:1px;background:var(--line2)"></span>Examples<span style="width:18px;height:1px;background:var(--line2)"></span></span> 622 <p style="margin:0;text-align:center;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(36px,3.8vw,54px);line-height:1.0;letter-spacing:-0.045em;text-wrap:balance;background:linear-gradient(180deg,#FFFFFF 0%,#FFFFFF 44%,#A9A2A7 100%);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 12px 30px rgba(0,0,0,0.5)">What you can create with <span style="-webkit-text-fill-color:var(--acc);color:var(--acc);text-shadow:0 0 34px rgba(255,61,46,0.45)">ClipChat</span> 623</p> 624 <p style="margin:44px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(20px,1.9vw,26px);line-height:1.1;letter-spacing:-0.03em;color:var(--dim);text-align:center;text-wrap:balance">Music videos and vertical content for the music you love or your own tracks</p> 625 <p style="margin:14px auto 0 auto;max-width:900px;padding:0 8px;font-size:18px;line-height:1.5;letter-spacing:-0.012em;color:var(--dim);text-align:center;text-wrap:balance">Upload a track, describe your idea (or leave it to ClipChat) and add a hero. ClipChat combines scenes, lip sync and editing into one complete video - from a short vertical clip to a full visual story.</p> 626 </div> 627 <div style="position:relative"> 628 <div style="position:relative;width:100%;overflow:hidden;margin:44px 0 0"> 629 <div id="examples" data-carousel-scroll="1" tabindex="0" style="position:relative;height:419px;overflow:hidden" data-screen-label="Hero examples carousel" aria-label="Clip examples. Hover to pause; drag or use the left and right arrow keys"> 630 <article data-clip="a-0" data-carousel-card="1" data-carousel-base-delay="-35.28" aria-label="UNETHICAL" style="--carousel-index:0;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-35.28s;border-radius:14px;overflow:hidden;background:#571E15;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 631 <video data-val="0" data-src="https://s3.regru.cloud/doitong/video/clipchat_landing_assets/unethical-2.mp4" poster="/lp/homepage-v5/assets/unethical-2-poster.jpg" loop="{{ true }}
631" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000"></video> 632 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 633 <button type="button" data-showcase-play="1" data-val="0" data-play-label="Play clip: UNETHICAL" data-pause-label="Pause clip: UNETHICAL" onClick="{{ toggleSound }}" aria-label="Play clip: UNETHICAL" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd0 }}</button> 634 <div style="position:absolute;left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 635 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">UNETHICAL</div> 636 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em"> 637 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">MUSIC VIDEO</span><span style="color:rgba(244,241,234,0.6)">0:46</span><span style="color:var(--acc)">9:16</span> 638 </div> 639 </div> 640 </article> 641 <article data-clip="a-1" data-carousel-card="1" data-carousel-base-delay="-30.24" aria-label="NEON PETROL" style="--carousel-index:1;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-30.24s;border-radius:14px;overflow:hidden;background:#242423;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 642 <video data-val="1" data-src="https://content.doitong.com/video/clipchat_landing/clip1.mp4" poster="https://content.doitong.com/video/clipchat_landing/poster1.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000"></video> 643 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 644 <button type="button" data-showcase-play="1" data-val="1" data-play-label="Play clip: NEON PETROL" data-pause-label="Pause clip: NEON PETROL" onClick="{{ toggleSound }}" aria-label="Play clip: NEON PETROL" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd1 }}</button> 645 <div style="position:absolute;left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 646 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">NEON PETROL</div> 647 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em"> 648 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">PHONK</span><span style="color:rgba(244,241,234,0.6)">0:30</span><span style="color:var(--acc)">MUSIC VIDEO</span> 649 </div> 650 </div> 651 </article> 652 <article data-clip="a-2" data-carousel-card="1" data-carousel-base-delay="-25.20" aria-label="HORIZON" style="--carousel-index:2;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-25.20s;border-radius:14px;overflow:hidden;background:#15414A;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);
652transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 653 <video data-val="2" data-src="https://content.doitong.com/video/clipchat_landing/clip2.mp4" poster="https://content.doitong.com/video/clipchat_landing/poster2.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000"></video> 654 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 655 <button type="button" data-showcase-play="1" data-val="2" data-play-label="Play clip: HORIZON" data-pause-label="Pause clip: HORIZON" onClick="{{ toggleSound }}" aria-label="Play clip: HORIZON" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd2 }}</button> 656 <div style="position:absolute;left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 657 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">HORIZON</div> 658 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em"> 659 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">INDIE</span><span style="color:rgba(244,241,234,0.6)">0:27</span><span style="color:var(--acc)">MUSIC VIDEO</span> 660 </div> 661 </div> 662 </article> 663 <article data-clip="a-3" data-carousel-card="1" data-carousel-base-delay="-20.16" aria-label="RITA UP" style="--carousel-index:3;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-20.16s;border-radius:14px;overflow:hidden;background:#8B4E2E;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 664 <video data-val="3" data-src="https://content.doitong.com/video/clipchat_demos/rita_up.mp4" poster="https://content.doitong.com/images/clipchat_demos/rita_up.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000"></video> 665 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 666 <button type="button" data-showcase-play="1" data-val="3" data-play-label="Play clip: RITA UP" data-pause-label="Pause clip: RITA UP" onClick="{{ toggleSound }}" aria-label="Play clip: RITA UP" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd3 }}</button> 667 <div style="position:absolute;left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 668 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">RITA UP</div> 669 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em">
670 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">POP</span><span style="color:rgba(244,241,234,0.6)">0:24</span><span style="color:var(--acc)">MUSIC VIDEO</span> 671 </div> 672 </div> 673 </article> 674 <article data-clip="a-4" data-carousel-card="1" data-carousel-base-delay="-15.12" aria-label="SILVER RIOT" style="--carousel-index:4;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-15.12s;border-radius:14px;overflow:hidden;background:#4D2A61;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 675 <video data-val="4" data-src="https://content.doitong.com/video/clipchat_demos/silver_riot.mp4" poster="https://content.doitong.com/images/clipchat_demos/silver_riot.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000"></video> 676 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 677 <button type="button" data-showcase-play="1" data-val="4" data-play-label="Play clip: SILVER RIOT" data-pause-label="Pause clip: SILVER RIOT" onClick="{{ toggleSound }}" aria-label="Play clip: SILVER RIOT" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd4 }}</button> 678 <div style="position:absolute;left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 679 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">SILVER RIOT</div> 680 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em"> 681 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">GLAM ROCK</span><span style="color:rgba(244,241,234,0.6)">0:30</span><span style="color:var(--acc)">MUSIC VIDEO</span> 682 </div> 683 </div> 684 </article> 685 <article data-clip="a-5" data-carousel-card="1" data-carousel-base-delay="-10.08" aria-label="SKYLINE DIAMONDS" style="--carousel-index:5;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-10.08s;border-radius:14px;overflow:hidden;background:#233A4E;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 686 <video data-val="5" data-src="https://content.doitong.com/video/clipchat_demos/skyline_diamonds.mp4" poster="https://content.doitong.com/images/clipchat_demos/skyline_diamonds.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000"></video> 687 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 688 <button type="button" data-showcase-play="1" data-val="5" data-play-label="Play clip: SKYLINE DIAMONDS" data-pause-label="Pause clip: SKYLINE DIAMONDS" onClick="{{ toggleSound }}" aria-label="Play clip: SKYLINE DIAMONDS" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd5 }}</button> 689 <div style="position:absolute;
689left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 690 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">SKYLINE DIAMONDS</div> 691 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em"> 692 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">R&B</span><span style="color:rgba(244,241,234,0.6)">0:30</span><span style="color:var(--acc)">MUSIC VIDEO</span> 693 </div> 694 </div> 695 </article> 696 <article data-clip="a-6" data-carousel-card="1" data-carousel-base-delay="-5.04" aria-label="CAFÃ BLANC" style="--carousel-index:6;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-5.04s;border-radius:14px;overflow:hidden;background:#6A452C;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 697 <video data-val="6" data-src="https://content.doitong.com/video/clipchat_demos/cafe_blanc.mp4" poster="https://content.doitong.com/images/clipchat_demos/cafe_blanc.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000"></video> 698 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 699 <button type="button" data-showcase-play="1" data-val="6" data-play-label="Play clip: CAFÃ BLANC" data-pause-label="Pause clip: CAFÃ BLANC" onClick="{{ toggleSound }}" aria-label="Play clip: CAFÃ BLANC" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd6 }}</button> 700 <div style="position:absolute;left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 701 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">CAFÃ BLANC</div> 702 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em"> 703 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">POP</span><span style="color:rgba(244,241,234,0.6)">0:30</span><span style="color:var(--acc)">MUSIC VIDEO</span> 704 </div> 705 </div> 706 </article> 707 <article data-clip="a-7" data-carousel-card="1" data-carousel-base-delay="-0.00" aria-label="SUGAR STATIC" style="--carousel-index:7;position:absolute;top:26px;left:max(24px,calc((100vw - 1480px) / 2));width:236px;aspect-ratio:9/14;transform:translateX(calc(var(--carousel-index) * 252px));animation:carouselCardLoop 40.32s linear infinite;animation-delay:-0.00s;border-radius:14px;overflow:hidden;background:#4A1A57;border:1px solid var(--line);box-shadow:0 28px 56px rgba(0,0,0,0.52);transition:box-shadow .24s ease" style-hover="box-shadow:0 38px 70px rgba(0,0,0,0.62)"> 708 <video data-val="7" data-src="https://content.doitong.com/video/clipchat_landing/clip3.mp4" poster="https://content.doitong.com/video/clipchat_landing/poster3.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background:#000"></video>
709 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.08),transparent 40%,rgba(10,10,12,0.92) 100%)"></span> 710 <button type="button" data-showcase-play="1" data-val="7" data-play-label="Play clip: SUGAR STATIC" data-pause-label="Pause clip: SUGAR STATIC" onClick="{{ toggleSound }}" aria-label="Play clip: SUGAR STATIC" aria-pressed="false" style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:46px;height:46px;border-radius:50%;background:rgba(10,10,12,0.55);border:1px solid rgba(244,241,234,0.35);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--ink);cursor:pointer;z-index:4;transition:opacity .16s ease">{{ snd7 }}</button> 711 <div style="position:absolute;left:14px;right:14px;bottom:14px;z-index:3;pointer-events:none"> 712 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:17px;letter-spacing:-0.03em;color:#F4F1EA;text-shadow:0 1px 10px rgba(0,0,0,0.7)">SUGAR STATIC</div> 713 <div style="margin-top:7px;display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.14em"> 714 <span style="color:rgba(244,241,234,0.92);text-transform:uppercase;border:1px solid rgba(244,241,234,0.28);border-radius:999px;padding:3px 8px">HYPERPOP</span><span style="color:rgba(244,241,234,0.6)">0:30</span><span style="color:var(--acc)">MUSIC VIDEO</span> 715 </div> 716 </div> 717 </article> 718 <span data-carousel-edge="left" aria-hidden="true"></span> 719 <span data-carousel-edge="right" aria-hidden="true"></span> 720 </div> 721 </div> 722 </div> 723 <section style="position:relative;padding:64px max(32px, calc((100% - 1480px) / 2));background:radial-gradient(70% 90% at 22% 6%,#FFFFFF,transparent 62%),radial-gradient(60% 80% at 88% 96%,rgba(255,61,46,0.10),transparent 66%),linear-gradient(168deg,#F7F4ED 0%,#EDE8DE 52%,#E3DED2 100%);color:#12100F;margin:0;overflow:hidden;animation:lightOn 1.1s cubic-bezier(.76,0,.24,1) both;animation-play-state:paused" data-idreveal="1" data-screen-label="Video lesson"> 724 <span style="position:absolute;top:0;left:0;right:0;height:120px;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.35),transparent)"></span> 725 <span style="position:absolute;bottom:0;left:0;right:0;height:120px;pointer-events:none;background:linear-gradient(0deg,rgba(10,10,12,0.35),transparent)"></span> 726 <span style="position:absolute;inset:0;pointer-events:none;opacity:0.55;background-image:radial-gradient(rgba(18,16,15,0.22) 0.5px,transparent 0.5px);background-size:4px 4px"></span> 727 <span style="position:absolute;inset:0;pointer-events:none;background:radial-gradient(120% 90% at 50% 45%,transparent 52%,rgba(18,16,15,0.16) 100%)"></span> 728 <div style="position:relative;display:grid;grid-template-columns:minmax(0,1060px);justify-content:center;align-items:center;gap:44px"> 729 <div data-lesson-switcher="1" style="position:relative;z-index:2;min-width:0"> 730 <div data-lift="1" data-lesson-panel="full" style="cursor:pointer;position:relative;z-index:2;aspect-ratio:16/9;border-radius:10px;overflow:hidden;background:#12100F;transform:perspective(1400px) rotateY(-3.5deg) rotateX(1.5deg);transition:transform .9s cubic-bezier(.2,.8,.3,1),box-shadow .9s ease;box-shadow:0 48px 96px rgba(18,16,15,0.42),0 12px 28px rgba(18,16,15,0.18),0 0 0 1px rgba(255,255,255,0.6),0 2px 0 rgba(255,255,255,0.85)" style-hover="transform:perspective(1400px) rotateY(0deg) rotateX(0deg) translateY(-6px);box-shadow:0 60px 120px rgba(18,16,15,0.48),0 0 0 1px rgba(196,26,10,0.4),0 0 60px rgba(255,61,46,0.18)"> 731 <video controls="{{ true }}" playsInline="{{ true }}" preload="none" src="https://s3.regru.cloud/doitong/video/clipchat_lessons/clipchat-full-lesson-en-20260912.mp4" poster="https://s3.regru.cloud/doitong/images/clipchat_lessons/clipchat-full-lesson-en-20260912.jpg" style="display:block;width:100%;height:100%;object-fit:cover;background:#12100F"></video> 732 </div> 733 </div> 734 </div> 735 <p style="position:relative;z-index:2;max-width:1060px;margin:28px auto 0;padding:16px 18px;border-left:3px solid #FF3D2E;background:rgba(255,255,255,0.58);box-shadow:0 10px 30px rgba(18,16,15,0.08);font-family:'Space Mono',monospace;font-size:12px;font-weight:700;line-height:1.65;letter-spacing:0.035em;color:#403B36">Important: the ClipChat interface keeps evolving. Seedance 2 is currently available as Seedance -> Quality, and Seedance 2.5 as Seedance -> Detailed. To regenerate one scene, open its card. To generate every remaining scene, use the bottom bar. The rest of the workflow is unchanged.</p> 736 </section> 737 738 <section style="position:relative;overflow:hidden;padding:64px max(32px, calc((100% - 1480px) / 2)) 64px;background:radial-gradient(80% 100% at 50% 0%,rgba(255,61,46,0.10),transparent 62%),linear-gradient(180deg,#0F0F14 0%,#101016 46%,#0A0A0C 100%);border-top:1px solid var(--line);border-bottom:1px solid var(--line)" data-screen-label="Monetization"> 739 <span style="position:absolute;top:0;left:0;right:0;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.55),transparent)"></span> 740 <span style="position:absolute;inset:-8% -14%;pointer-events:none;background:radial-gradient(42% 34% at 84% 14%,rgba(255,61,46,0.10),transparent 72%),radial-gradient(38% 32% at 10% 88%,rgba(96,140,255,0.09),transparent 72%);filter:blur(42px);animation:auraDrift 19s ease-in-out infinite"></span> 741 <div style="text-align:center"> 742 <div style="display:inline-flex;align-items:center;gap:10px;font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.22em;color:var(--dim);text-transform:uppercase"><span style="width:22px;height:1px;background:var(--line2)"></span>What one track can become<span style="width:22px;height:1px;background:var(--line2)"></span></div> 743 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(32px,3.4vw,54px);line-height:1.0;letter-spacing:-0.045em;margin:14px 0 0 0;color:var(--ink);text-wrap:balance">One track is more <span style="font-family:'Instrument Serif',serif;font-style:italic;font-weight:400;color:var(--acc)">than one music video</span> 744</h2> 745 <p style="margin:16px auto 0;max-width:760px;font-size:17px;line-height:1.5;color:var(--dim)">Turn one track into a full music video and vertical content for different platforms</p> 746 </div> 747 748 <div style="margin:42px auto 0 auto;max-width:1480px"> 749 <div style="position:relative;max-width:1080px;margin:0 auto;display:flex;align-items:center;justify-content:center;gap:22px;flex-wrap:wrap"> 750 <div style="display:flex;flex-direction:column;align-items:center;gap:10px">
751 <span style="width:72px;height:72px;border-radius:50%;border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--dim)">âª</span> 752 <span style="font-family:'Space Mono',monospace;font-size:8.5px;letter-spacing:0.18em;color:var(--dark);text-transform:uppercase">Track</span> 753 </div> 754 <span style="width:64px;height:1px;background:repeating-linear-gradient(90deg,var(--line2) 0 5px,transparent 5px 10px)"></span> 755 <div style="display:flex;flex-direction:column;align-items:center;gap:10px"> 756 <span style="position:relative;width:88px;height:88px;border-radius:50%;border:1px solid rgba(255,61,46,0.55);background:radial-gradient(closest-side,rgba(255,61,46,0.16),transparent 78%);color:var(--ink);display:flex;align-items:center;justify-content:center;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:18px;letter-spacing:-0.03em">Clip<span style="position:absolute;inset:-6px;border-radius:50%;border:1px solid rgba(255,61,46,0.22)"></span></span> 757 <span style="font-family:'Space Mono',monospace;font-size:8.5px;letter-spacing:0.18em;color:var(--acc);text-transform:uppercase">30 minutes</span> 758 </div> 759 <span style="width:64px;height:1px;background:repeating-linear-gradient(90deg,var(--line2) 0 5px,transparent 5px 10px)"></span> 760 <div style="display:flex;flex-direction:column;align-items:flex-start;gap:6px;max-width:16ch"> 761 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:16px;letter-spacing:-0.03em;color:var(--ink);line-height:1.15">Three formats</span> 762 <span style="font-size:12.5px;line-height:1.4;color:var(--dim)">One track for different platforms</span> 763 </div> 764 </div> 765 766 <div style="margin-top:42px;display:grid;grid-template-columns:repeat(3,1fr);gap:22px"> 767 <div data-aud="1" data-idreveal="1" style="position:relative;aspect-ratio:5/4;animation:tileIn .95s cubic-bezier(.18,.85,.28,1) 0.00s both;animation-play-state:paused;border-radius:18px;overflow:hidden;background:#0B0B0E;border:1px solid var(--line);box-shadow:0 20px 44px rgba(0,0,0,0.5);transition:transform .5s cubic-bezier(.2,.8,.3,1),border-color .4s ease,box-shadow .5s ease" style-hover="transform:translateY(-8px);border-color:#FF3D2E;box-shadow:0 34px 70px rgba(0,0,0,0.62)"> 768 <div data-audimg="1" style="position:absolute;inset:0;transition:transform 1.2s cubic-bezier(.2,.8,.3,1)"> 769 <img src="https://content.doitong.com/video/clipchat_landing_v2/land2.jpg" alt="" loading="lazy" style="display:block;width:100%;height:100%;object-fit:cover" /> 770 <span data-idreveal="1" style="position:absolute;top:0;bottom:0;left:0;width:34%;pointer-events:none;z-index:4;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.28),transparent);animation:tileSweep 1.5s ease-in-out 0.30s both;animation-play-state:paused"></span> 771 </div> 772 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.25) 0%,rgba(10,10,12,0.05) 38%,rgba(10,10,12,0.94) 100%)"></span> 773 <span style="position:absolute;top:16px;left:18px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-weight:700;font-size:12px;letter-spacing:0.22em;color:rgba(244,241,234,0.85);text-shadow:0 2px 10px rgba(0,0,0,0.9)">01</span> 774 <span style="position:absolute;top:14px;right:16px;z-index:3;pointer-events:none;display:flex;align-items:baseline;gap:7px;padding:7px 10px;border-radius:12px;background:rgba(10,10,12,0.76);box-shadow:0 8px 22px rgba(0,0,0,0.28);font-family:'Space Mono',monospace;text-transform:uppercase"><strong style="font-family:'Bricolage Grotesque',sans-serif;font-size:23px;line-height:1;color:#FF6A4D;letter-spacing:-0.04em">+30%</strong><span style="font-size:8px;letter-spacing:0.12em;color:rgba(244,241,234,0.72)">listeners</span></span> 775 <div style="position:absolute;left:0;right:0;bottom:0;z-index:3;pointer-events:none;padding:28px 26px 26px 26px"> 776 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:24px;line-height:1.1;letter-spacing:-0.032em;color:#F4F1EA;text-wrap:balance">Full music video</div> 777 <p style="margin:14px 0 0;padding-top:12px;border-top:1px solid rgba(244,241,234,0.22);font-size:14px;line-height:1.5;color:rgba(244,241,234,0.72)">A complete visual story set to your chosen music</p> 778 </div> 779 </div> 780 <div data-aud="1" data-idreveal="1" style="position:relative;aspect-ratio:5/4;animation:tileIn .95s cubic-bezier(.18,.85,.28,1) 0.14s both;animation-play-state:paused;border-radius:18px;overflow:hidden;background:#0B0B0E;border:1px solid var(--line);box-shadow:0 20px 44px rgba(0,0,0,0.5);transition:transform .5s cubic-bezier(.2,.8,.3,1),border-color .4s ease,box-shadow .5s ease" style-hover="transform:translateY(-8px);border-color:#F4F1EA;box-shadow:0 34px 70px rgba(0,0,0,0.62)"> 781 <div data-audimg="1" style="position:absolute;inset:0;transition:transform 1.2s cubic-bezier(.2,.8,.3,1)"> 782 <img src="https://content.doitong.com/video/clipchat_landing_v2/land1.jpg" alt="" loading="lazy" style="display:block;width:100%;height:100%;object-fit:cover" />
783 <span data-idreveal="1" style="position:absolute;top:0;bottom:0;left:0;width:34%;pointer-events:none;z-index:4;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.28),transparent);animation:tileSweep 1.5s ease-in-out 0.44s both;animation-play-state:paused"></span> 784 </div> 785 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.25) 0%,rgba(10,10,12,0.05) 38%,rgba(10,10,12,0.94) 100%)"></span> 786 <span style="position:absolute;top:16px;left:18px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-weight:700;font-size:12px;letter-spacing:0.22em;color:rgba(244,241,234,0.85);text-shadow:0 2px 10px rgba(0,0,0,0.9)">02</span> 787 <span style="position:absolute;top:14px;right:16px;z-index:3;pointer-events:none;display:flex;align-items:baseline;gap:7px;padding:7px 10px;border-radius:12px;background:rgba(10,10,12,0.76);box-shadow:0 8px 22px rgba(0,0,0,0.28);font-family:'Space Mono',monospace;text-transform:uppercase"><strong style="font-family:'Bricolage Grotesque',sans-serif;font-size:23px;line-height:1;color:#F4F1EA;letter-spacing:-0.04em">Ã4</strong><span style="font-size:8px;letter-spacing:0.12em;color:rgba(244,241,234,0.72)">completed views</span></span> 788 <div style="position:absolute;left:0;right:0;bottom:0;z-index:3;pointer-events:none;padding:28px 26px 26px 26px"> 789 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:24px;line-height:1.1;letter-spacing:-0.032em;color:#F4F1EA;text-wrap:balance">Short videos</div> 790 <p style="margin:14px 0 0;padding-top:12px;border-top:1px solid rgba(244,241,234,0.22);font-size:14px;line-height:1.5;color:rgba(244,241,234,0.72)">Vertical content for Reels, Shorts, TikTok and other platforms</p> 791 </div> 792 </div> 793 <div data-aud="1" data-idreveal="1" style="position:relative;aspect-ratio:5/4;animation:tileIn .95s cubic-bezier(.18,.85,.28,1) 0.28s both;animation-play-state:paused;border-radius:18px;overflow:hidden;background:#0B0B0E;border:1px solid var(--line);box-shadow:0 20px 44px rgba(0,0,0,0.5);transition:transform .5s cubic-bezier(.2,.8,.3,1),border-color .4s ease,box-shadow .5s ease" style-hover="transform:translateY(-8px);border-color:#8CB0FF;box-shadow:0 34px 70px rgba(0,0,0,0.62)"> 794 <div data-audimg="1" style="position:absolute;inset:0;transition:transform 1.2s cubic-bezier(.2,.8,.3,1)"> 795 <img src="https://content.doitong.com/video/clipchat_landing_v2/land3.jpg" alt="" loading="lazy" style="display:block;width:100%;height:100%;object-fit:cover" /> 796 <span data-idreveal="1" style="position:absolute;top:0;bottom:0;left:0;width:34%;pointer-events:none;z-index:4;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.28),transparent);animation:tileSweep 1.5s ease-in-out 0.58s both;animation-play-state:paused"></span> 797 </div> 798 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.25) 0%,rgba(10,10,12,0.05) 38%,rgba(10,10,12,0.94) 100%)"></span> 799 <span style="position:absolute;top:16px;left:18px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-weight:700;font-size:12px;letter-spacing:0.22em;color:rgba(244,241,234,0.85);text-shadow:0 2px 10px rgba(0,0,0,0.9)">03</span> 800 <span style="position:absolute;top:14px;right:16px;z-index:3;pointer-events:none;display:flex;align-items:baseline;gap:7px;padding:7px 10px;border-radius:12px;background:rgba(10,10,12,0.76);box-shadow:0 8px 22px rgba(0,0,0,0.28);font-family:'Space Mono',monospace;text-transform:uppercase"><strong style="font-family:'Bricolage Grotesque',sans-serif;font-size:23px;line-height:1;color:#8CB0FF;letter-spacing:-0.04em">7/10</strong><span style="font-size:8px;letter-spacing:0.12em;color:rgba(244,241,234,0.72)">through video</span></span> 801 <div style="position:absolute;left:0;right:0;bottom:0;z-index:3;pointer-events:none;padding:28px 26px 26px 26px"> 802 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:24px;line-height:1.1;letter-spacing:-0.032em;color:#F4F1EA;text-wrap:balance">A content series</div> 803 <p style="margin:14px 0 0;padding-top:12px;border-top:1px solid rgba(244,241,234,0.22);font-size:14px;line-height:1.5;color:rgba(244,241,234,0.72)">Use different scenes and visual hooks for future posts</p> 804 </div> 805 </div> 806 </div> 807 </div> 808 </section> 809 810 <section id="how" style="position:relative;overflow:hidden;padding:64px max(32px, calc((100% - 1480px) / 2));
810color:var(--ink)" data-screen-label="How it works"> 811 <span style="position:absolute;inset:0;pointer-events:none;opacity:0.5;background-image:radial-gradient(rgba(244,241,234,0.14) 0.6px,transparent 0.6px);background-size:5px 5px"></span> 812 <span style="position:absolute;inset:0;pointer-events:none;opacity:0.35;background-image:radial-gradient(rgba(255,61,46,0.3) 1px,transparent 1px);background-size:64px 64px;background-position:12px 20px"></span> 813 <span style="position:absolute;inset:-10% -16%;pointer-events:none;background:radial-gradient(38% 32% at 78% 16%,rgba(96,140,255,0.10),transparent 72%),radial-gradient(34% 30% at 14% 84%,rgba(255,61,46,0.09),transparent 72%);filter:blur(46px);animation:auraDrift 21s ease-in-out infinite"></span> 814 <span style="position:absolute;top:0;bottom:0;left:max(32px, calc((100% - 1480px) / 2));right:max(32px, calc((100% - 1480px) / 2));pointer-events:none;opacity:0.5;background-image:linear-gradient(90deg,rgba(244,241,234,0.055) 1px,transparent 1px);background-size:calc(100% / 5) 100%"></span> 815 <span style="position:absolute;top:8%;right:6%;width:280px;height:280px;border-radius:50%;border:1px solid rgba(244,241,234,0.07);pointer-events:none"></span> 816 <span style="position:absolute;top:8%;right:6%;width:280px;height:280px;border-radius:50%;border:1px solid rgba(255,61,46,0.10);transform:translate(-58px,44px);pointer-events:none"></span> 817 <span style="position:absolute;bottom:-90px;left:-60px;width:340px;height:340px;pointer-events:none;background:radial-gradient(closest-side,rgba(244,241,234,0.05),transparent 74%);filter:blur(10px)"></span> 818 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,#0A0A0C 0%,transparent 16%,transparent 84%,#0A0A0C 100%)"></span> 819 <div style="display:inline-flex;align-items:center;gap:8px;border-left:2px solid var(--acc);padding-left:10px;font-family:'Space Mono',monospace;font-weight:700;font-size:9.5px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase">How it works</div> 820 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(34px,3.4vw,52px);line-height:0.97;letter-spacing:-0.035em;margin:16px 0 0 0;text-wrap:balance;color:var(--ink);text-align:left">5 simple steps <span style="font-family:'Instrument Serif',serif;font-style:italic;color:var(--acc);display:block">to create a music video</span> 821</h2> 822 <div data-steps="1" style="position:relative;margin-top:48px;padding-top:2px;display:grid;grid-template-columns:repeat(5,1fr);align-items:start;gap:0;border-top:1px solid var(--line2)"> 823 <div data-stepsbar="1" style="position:absolute;left:0;top:-1px;height:2px;width:0%;background:var(--acc);box-shadow:0 0 12px rgba(255,61,46,0.6)"></div> 824 <div style="min-width:0;padding:28px 20px 40px 18px;border-right:1px solid var(--line);position:relative;background:linear-gradient(180deg,rgba(244,241,234,0.04),transparent)"><span style="display:inline-flex;align-items:baseline;gap:5px;font-family:'Space Mono',monospace;font-weight:700;color:rgba(255,61,46,0.45)"><span style="font-size:21px">01</span></span><h3 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.03em;color:var(--ink);margin:8px 0 8px 0">You upload a track</h3><p style="font-size:15px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim);margin:0">Add a song you love or your own track. ClipChat analyses its rhythm, mood and structure.</p></div> 825 <div style="min-width:0;padding:28px 20px 40px 18px;border-right:1px solid var(--line);position:relative;background:linear-gradient(180deg,rgba(244,241,234,0.04),transparent)"><span style="display:inline-flex;align-items:baseline;gap:5px;font-family:'Space Mono',monospace;font-weight:700;color:rgba(255,61,46,0.62)"><span style="font-size:21px">02</span></span><h3 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.03em;color:var(--ink);margin:8px 0 8px 0">Describe your idea</h3><p style="font-size:15px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim);margin:0">Describe the music video you want in plain language: mood, style, hero and key wishes. Or let AI suggest an idea, review it and discuss it in chat.</p></div> 826 <div style="min-width:0;padding:28px 20px 40px 18px;border-right:1px solid var(--line);position:relative;background:linear-gradient(180deg,rgba(244,241,234,0.04),transparent)"><span style="display:inline-flex;align-items:baseline;gap:5px;font-family:'Space Mono',monospace;font-weight:700;color:rgba(255,61,46,0.8)"><span style="font-size:21px">03</span></span><h3 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.03em;color:var(--ink);margin:8px 0 8px 0">Review the scene plan</h3><p style="font-size:15px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim);margin:0">Before generation, you see the visual direction, sequence of scenes and characters. If something feels wrong, adjust it in advance.</p></div> 827 <div style="min-width:0;padding:28px 20px 40px 18px;border-right:1px solid var(--line);position:relative;background:linear-gradient(180deg,rgba(244,241,234,0.04),transparent)"><span style="display:inline-flex;align-items:baseline;gap:5px;font-family:'Space Mono',monospace;font-weight:700;color:rgba(255,61,46,0.94)"><span style="font-size:21px">04</span></span><h3 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.03em;color:var(--ink);margin:8px 0 8px 0">Start generating scenes</h3><p style="font-size:15px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim);margin:0">ClipChat creates scenes from the approved plan and keeps the hero recognisable from shot to shot.</p></div> 828 <div style="min-width:0;padding:28px 20px 40px 18px;position:relative;background:linear-gradient(180deg,rgba(244,241,234,0.04),transparent)"><span style="display:inline-flex;align-items:baseline;gap:5px;font-family:'Space Mono',monospace;font-weight:700;color:#FF3D2E"><span style="font-size:21px">05</span></span><h3 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.03em;color:var(--ink);margin:8px 0 8px 0">You get a finished clip</h3><p style="font-size:15px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim);margin:0">Get a complete video with scenes, lip sync and editing. Download the finished result for publication and get access to the private community.</p></div> 829 </div> 830 </section> 831 832 <section style="position:relative;overflow:hidden;padding:8px max(32px, calc((100% - 1480px) / 2)) 0" data-screen-label="You star in it"> 833 <div style="display:flex;align-items:flex-end;justify-content:space-between;gap:48px;flex-wrap:wrap"> 834 <div style="min-width:0"> 835 <div style="display:inline-flex;align-items:center;gap:8px;border-left:2px solid var(--acc);padding-left:10px;font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase">Identity</div> 836 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(34px,3.4vw,52px);line-height:0.97;letter-spacing:-0.04em;margin:18px 0 0 0;text-wrap:balance;color:var(--ink);text-align:left">One face â <span style="font-family:'Instrument Serif',serif;font-style:italic;font-weight:400;color:var(--acc);text-shadow:0 0 44px rgba(255,61,46,0.4)">
836in every scene</span> 837</h2> 838 <p style="font-size:17px;line-height:1.5;letter-spacing:-0.011em;color:var(--dim);max-width:none;white-space:nowrap;margin:18px 0 0 0;text-align:left">Add the hero's photo once - ClipChat keeps the face and look recognisable from the first scene to the last.</p> 839 </div> 840 <div style="display:flex;align-items:center;gap:20px;flex-wrap:wrap"> 841 <span style="display:inline-flex;align-items:center;gap:9px;font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase"><span class="pulse" style="display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--acc)"></span>REC</span> 842 <span style="width:1px;height:22px;background:var(--line2)"></span> 843 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.18em;color:var(--dark);text-transform:uppercase">f/1.8 · 24mm · ISO 400</span> 844 </div> 845 </div> 846 </section> 847 848 <section style="position:relative;overflow:hidden;padding:8px max(32px, calc((100% - 1480px) / 2)) 64px" data-screen-label="Identity cards"> 849 <span style="position:absolute;inset:-12% -18%;pointer-events:none;background:radial-gradient(46% 40% at 50% 42%,rgba(96,140,255,0.16),transparent 74%);filter:blur(56px)"></span> 850 <div style="margin-top:40px;display:grid;grid-template-columns:0.86fr 1.14fr;align-items:start;gap:24px"> 851 852 <div style="position:relative;min-width:0;border-radius:16px;overflow:hidden;background:#0B0B0E;border:1px solid var(--line);box-shadow:0 28px 62px rgba(0,0,0,0.55)"> 853 <div style="position:relative;aspect-ratio:3/4"> 854 <img data-photo="face-front" src="/lp/homepage-v5/desktop2/assets/face-front.jpg" alt="" data-idreveal="1" style="display:block;width:100%;height:100%;object-fit:cover;object-position:50% 22%;animation:idRise .9s cubic-bezier(.18,.85,.28,1) 0s both;animation-play-state:paused" /><label style="position:absolute;top:8px;right:8px;z-index:8;width:26px;height:26px;border-radius:50%;background:rgba(10,10,12,0.75);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:13px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label> 855 <span style="position:absolute;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.95),transparent);box-shadow:0 0 22px rgba(255,61,46,0.8);z-index:6;pointer-events:none;animation:faceScan 5s cubic-bezier(.5,0,.5,1) infinite"></span> 856 <span style="position:absolute;left:38%;top:34%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;border:1.5px solid rgba(255,61,46,0.95);background:rgba(255,61,46,0.25);box-shadow:0 0 12px rgba(255,61,46,0.7);z-index:5;pointer-events:none;animation:markerIn 5s ease-in-out 0.35s infinite"></span><span style="position:absolute;left:62%;top:34%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;border:1.5px solid rgba(255,61,46,0.95);background:rgba(255,61,46,0.25);box-shadow:0 0 12px rgba(255,61,46,0.7);z-index:5;pointer-events:none;animation:markerIn 5s ease-in-out 0.47s infinite"></span><span style="position:absolute;left:50%;top:52%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;border:1.5px solid rgba(255,61,46,0.95);background:rgba(255,61,46,0.25);box-shadow:0 0 12px rgba(255,61,46,0.7);z-index:5;pointer-events:none;animation:markerIn 5s ease-in-out 0.59s infinite"></span><span style="position:absolute;left:50%;top:68%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;border:1.5px solid rgba(255,61,46,0.95);background:rgba(255,61,46,0.25);box-shadow:0 0 12px rgba(255,61,46,0.7);z-index:5;pointer-events:none;animation:markerIn 5s ease-in-out 0.71s infinite"></span><span style="position:absolute;left:30%;top:58%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;border:1.5px solid rgba(255,61,46,0.95);background:rgba(255,61,46,0.25);box-shadow:0 0 12px rgba(255,61,46,0.7);z-index:5;pointer-events:none;animation:markerIn 5s ease-in-out 0.83s infinite"></span><span style="position:absolute;
856left:70%;top:58%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;border:1.5px solid rgba(255,61,46,0.95);background:rgba(255,61,46,0.25);box-shadow:0 0 12px rgba(255,61,46,0.7);z-index:5;pointer-events:none;animation:markerIn 5s ease-in-out 0.95s infinite"></span> 857 <span style="position:absolute;top:12px;left:12px;width:16px;height:16px;border-left:1.5px solid rgba(255,61,46,0.8);border-top:1.5px solid rgba(255,61,46,0.8);z-index:7;pointer-events:none"></span> 858 <span style="position:absolute;top:12px;right:12px;width:16px;height:16px;border-right:1.5px solid rgba(255,61,46,0.8);border-top:1.5px solid rgba(255,61,46,0.8);z-index:7;pointer-events:none"></span> 859 <span style="position:absolute;bottom:12px;left:12px;width:16px;height:16px;border-left:1.5px solid rgba(255,61,46,0.8);border-bottom:1.5px solid rgba(255,61,46,0.8);z-index:7;pointer-events:none"></span> 860 <span style="position:absolute;bottom:12px;right:12px;width:16px;height:16px;border-right:1.5px solid rgba(255,61,46,0.8);border-bottom:1.5px solid rgba(255,61,46,0.8);z-index:7;pointer-events:none"></span> 861 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 58%,rgba(10,10,12,0.9) 100%)"></span> 862 <div style="position:absolute;left:20px;right:20px;bottom:18px;z-index:8;pointer-events:none;display:flex;align-items:flex-end;justify-content:space-between;gap:14px"> 863 <div> 864 <div style="display:inline-flex;align-items:baseline;gap:5px;font-family:'Space Mono',monospace;font-weight:700;color:var(--acc)"><span style="font-size:22px">01</span></div> 865 <div style="margin-top:6px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:24px;letter-spacing:-0.035em;color:#F4F1EA">Your photo</div> 866 </div> 867 <span style="display:inline-flex;align-items:center;gap:7px;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.16em;color:rgba(244,241,234,0.9);text-transform:uppercase;background:rgba(10,10,12,0.62);border:1px solid var(--line2);border-radius:999px;padding:5px 11px;white-space:nowrap"><span style="width:6px;height:6px;border-radius:50%;background:var(--acc);animation:lockPulse 2.2s ease-in-out infinite"></span>Face locked</span> 868 </div> 869 </div> 870 </div> 871 872 <div style="min-width:0;display:flex;flex-direction:column;gap:18px"> 873 <div style="display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap"> 874 <span style="display:inline-flex;align-items:center;gap:10px;font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase"><span style="width:26px;height:1px;background:var(--acc)"></span>One anchor for every scene</span> 875 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.16em;color:var(--dark);text-transform:uppercase">6 of 6 matches</span> 876 </div> 877 <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:12px"> 878 <div data-scenetile="0" style="{{ st0 }}"> 879 <video data-scenevideo data-src="https://content.doitong.com/video/clipchat_landing_v2/v6.mp4" poster="/lp/homepage-v5/desktop2/assets/scene-stage.jpg" loop playsinline preload="none" style="display:block;width:100%;height:100%;object-fit:cover;object-position:50% 34%"></video><label style="position:absolute;top:8px;right:8px;z-index:8;width:26px;height:26px;border-radius:50%;background:rgba(10,10,12,0.75);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:13px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label> 880 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 46%,rgba(10,10,12,0.86) 100%)"></span> 881 <span style="position:absolute;
881left:10px;bottom:9px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.16em;color:rgba(244,241,234,0.95);text-transform:uppercase">SCENE 01</span> 882 <span style="{{ sm0 }}"></span> 883 </div> 884 <div data-scenetile="1" style="{{ st1 }}"> 885 <video data-scenevideo data-src="https://content.doitong.com/video/clipchat_landing_v2/v1.mp4" poster="/lp/homepage-v5/desktop2/assets/scene-car.jpg" loop playsinline preload="none" style="display:block;width:100%;height:100%;object-fit:cover;object-position:50% 34%"></video><label style="position:absolute;top:8px;right:8px;z-index:8;width:26px;height:26px;border-radius:50%;background:rgba(10,10,12,0.75);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:13px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label> 886 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 46%,rgba(10,10,12,0.86) 100%)"></span> 887 <span style="position:absolute;left:10px;bottom:9px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.16em;color:rgba(244,241,234,0.95);text-transform:uppercase">SCENE 02</span> 888 <span style="{{ sm1 }}"></span> 889 </div> 890 <div data-scenetile="2" style="{{ st2 }}"> 891 <video data-scenevideo data-src="https://content.doitong.com/video/clipchat_landing_v2/v5.mp4" poster="/lp/homepage-v5/desktop2/assets/scene-desert.jpg" loop playsinline preload="none" style="display:block;width:100%;height:100%;object-fit:cover;object-position:50% 34%"></video><label style="position:absolute;top:8px;right:8px;z-index:8;width:26px;height:26px;border-radius:50%;background:rgba(10,10,12,0.75);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:13px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label> 892 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 46%,rgba(10,10,12,0.86) 100%)"></span> 893 <span style="position:absolute;left:10px;bottom:9px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.16em;color:rgba(244,241,234,0.95);text-transform:uppercase">SCENE 03</span> 894 <span style="{{ sm2 }}"></span> 895 </div> 896 <div data-scenetile="3" style="{{ st3 }}"> 897 <video data-scenevideo data-src="https://content.doitong.com/video/clipchat_landing_v2/v2.mp4" poster="/lp/homepage-v5/desktop2/assets/face-34.jpg" loop playsinline preload="none" style="display:block;width:100%;height:100%;object-fit:cover;object-position:50% 34%"></video><label style="position:absolute;top:8px;right:8px;z-index:8;width:26px;height:26px;border-radius:50%;background:rgba(10,10,12,0.75);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:13px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label> 898 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 46%,rgba(10,10,12,0.86) 100%)"></span> 899 <span style="position:absolute;left:10px;bottom:9px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.16em;color:rgba(244,241,234,0.95);text-transform:uppercase">SCENE 04</span> 900 <span style="{{ sm3 }}"></span> 901 </div> 902 <div data-scenetile="4" style="{{ st4 }}"> 903 <video data-scenevideo data-src="https://content.doitong.com/video/clipchat_landing_v2/v4.mp4" poster="/lp/homepage-v5/desktop2/assets/face-profile.jpg" loop playsinline preload="none" style="display:block;width:100%;height:100%;object-fit:cover;object-position:50% 34%"></video><label style="position:absolute;top:8px;right:8px;z-index:8;width:26px;height:26px;border-radius:50%;background:rgba(10,10,12,0.75);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:13px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label>
904 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 46%,rgba(10,10,12,0.86) 100%)"></span> 905 <span style="position:absolute;left:10px;bottom:9px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.16em;color:rgba(244,241,234,0.95);text-transform:uppercase">SCENE 05</span> 906 <span style="{{ sm4 }}"></span> 907 </div> 908 <div data-scenetile="5" style="{{ st5 }}"> 909 <video data-scenevideo data-src="https://content.doitong.com/video/clipchat_landing_v2/v3.mp4" poster="/lp/homepage-v5/desktop2/assets/face-back.jpg" loop playsinline preload="none" style="display:block;width:100%;height:100%;object-fit:cover;object-position:50% 34%"></video><label style="position:absolute;top:8px;right:8px;z-index:8;width:26px;height:26px;border-radius:50%;background:rgba(10,10,12,0.75);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:13px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label> 910 <span style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,transparent 46%,rgba(10,10,12,0.86) 100%)"></span> 911 <span style="position:absolute;left:10px;bottom:9px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.16em;color:rgba(244,241,234,0.95);text-transform:uppercase">SCENE 06</span> 912 <span style="{{ sm5 }}"></span> 913 </div> 914 </div> 915 <p style="margin:0;font-size:15px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim);max-width:52ch">One reference anchors the hero's appearance. Angles, emotions and surroundings change from scene to scene, but the character stays recognisable.</p> 916 </div> 917 </div> 918 </section> 919 920 <section style="padding:64px max(32px, calc((100% - 1480px) / 2)) 64px" data-screen-label="Who it's for"> 921 <div style="display:flex;align-items:flex-end;justify-content:space-between;gap:48px;flex-wrap:wrap"> 922 <div> 923 <div style="display:inline-flex;align-items:center;gap:8px;border-left:2px solid var(--acc);padding-left:10px;font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase">Who it's for</div> 924 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;line-height:0.97;letter-spacing:-0.035em;margin:16px 0 0 0;white-space:nowrap;font-size:clamp(30px,3vw,46px);color:var(--ink);text-align:left">Who can use <span style="color:var(--acc)">ClipChat</span> 925</h2> 926 </div> 927 </div> 928 929 <div style="margin-top:40px;display:grid;grid-template-columns:repeat(3,1fr);align-items:start;gap:20px"> 930 <div data-aud="1" data-audk="0" onMouseEnter="{{ hoverAud }}" onMouseLeave="{{ leaveAud }}" style="position:relative;min-width:0;aspect-ratio:3/4;border-radius:14px;overflow:hidden;background:#0B0B0E;border:1px solid var(--line);cursor:pointer;transition:transform .55s cubic-bezier(.2,.8,.3,1),border-color .4s ease,box-shadow .55s ease;box-shadow:0 20px 44px rgba(0,0,0,0.5);animation:riseIn .9s cubic-bezier(.2,.7,.3,1) 0.05s both" style-hover="transform:translateY(-10px);border-color:rgba(255,61,46,0.6);box-shadow:0 34px 70px rgba(0,0,0,0.6),0 0 46px rgba(255,61,46,0.18)"> 931 <div data-audimg="1" style="position:absolute;inset:0;transition:transform 1.6s cubic-bezier(.2,.8,.3,1);transform:scale({{ az0 }})"> 932 <img src="/lp/homepage-v5/desktop2/assets/aud-1.jpg" alt="" style="display:block;width:100%;height:100%;object-fit:cover" /> 933 </div> 934 <div style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.15) 0%,rgba(10,10,12,0.05) 42%,rgba(10,10,12,0.92) 100%)"></div> 935 <span style="position:absolute;top:16px;left:18px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-weight:700;font-size:11px;letter-spacing:0.22em;color:rgba(244,241,234,0.85);text-shadow:0 2px 10px rgba(0,0,0,0.9)">01</span>
936 <span style="position:absolute;top:14px;right:16px;z-index:3;pointer-events:none;width:26px;height:26px;border-radius:50%;border:1px solid rgba(244,241,234,0.3);display:flex;align-items:center;justify-content:center;font-size:11px;color:rgba(244,241,234,0.8)">â</span> 937 <div style="position:absolute;left:0;right:0;bottom:0;z-index:3;pointer-events:none;padding:24px 20px 22px 20px"> 938 <div style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.22em;color:var(--acc);text-transform:uppercase">Social</div> 939 <h3 style="margin:10px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(20px,1.8vw,26px);line-height:1.02;letter-spacing:-0.035em;color:#F4F1EA;text-wrap:balance">I want to star in my music video</h3> 940 <p style="margin:10px 0 0;font-size:13px;line-height:1.4;color:rgba(244,241,234,0.72)">Choose a track you love, add your photo and become the hero of your own visual story.</p> 941 <div style="margin-top:14px;height:2px;width:34px;background:var(--acc);border-radius:2px;box-shadow:0 0 14px rgba(255,61,46,0.7)"></div> 942 </div> 943 </div> 944 <div data-aud="1" data-audk="1" onMouseEnter="{{ hoverAud }}" onMouseLeave="{{ leaveAud }}" style="position:relative;min-width:0;aspect-ratio:3/4;border-radius:14px;overflow:hidden;background:#0B0B0E;border:1px solid var(--line);cursor:pointer;transition:transform .55s cubic-bezier(.2,.8,.3,1),border-color .4s ease,box-shadow .55s ease;box-shadow:0 20px 44px rgba(0,0,0,0.5);animation:riseIn .9s cubic-bezier(.2,.7,.3,1) 0.14s both" style-hover="transform:translateY(-10px);border-color:rgba(255,61,46,0.6);box-shadow:0 34px 70px rgba(0,0,0,0.6),0 0 46px rgba(255,61,46,0.18)"> 945 <div data-audimg="1" style="position:absolute;inset:0;transition:transform 1.6s cubic-bezier(.2,.8,.3,1);transform:scale({{ az1 }})"> 946 <img src="/lp/homepage-v5/desktop2/assets/aud-2.jpg" alt="" style="display:block;width:100%;height:100%;object-fit:cover" /> 947 </div> 948 <div style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.15) 0%,rgba(10,10,12,0.05) 42%,rgba(10,10,12,0.92) 100%)"></div> 949 <span style="position:absolute;top:16px;left:18px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-weight:700;font-size:11px;letter-spacing:0.22em;color:rgba(244,241,234,0.85);text-shadow:0 2px 10px rgba(0,0,0,0.9)">02</span> 950 <span style="position:absolute;top:14px;right:16px;z-index:3;pointer-events:none;width:26px;height:26px;border-radius:50%;border:1px solid rgba(244,241,234,0.3);display:flex;align-items:center;justify-content:center;font-size:11px;color:rgba(244,241,234,0.8)">â</span> 951 <div style="position:absolute;left:0;right:0;bottom:0;z-index:3;pointer-events:none;padding:24px 20px 22px 20px"> 952 <div style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.22em;color:var(--acc);text-transform:uppercase">Releases</div> 953 <h3 style="margin:10px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(20px,1.8vw,26px);line-height:1.02;letter-spacing:-0.035em;color:#F4F1EA;text-wrap:balance">I need content for social media</h3> 954 <p style="margin:10px 0 0;font-size:13px;line-height:1.4;color:rgba(244,241,234,0.72)">Create music videos and short videos for Reels, Shorts and TikTok without filming or editing by hand</p> 955 <div style="margin-top:14px;height:2px;width:34px;background:var(--acc);border-radius:2px;box-shadow:0 0 14px rgba(255,61,46,0.7)"></div> 956 </div> 957 </div> 958 <div data-aud="1" data-audk="2" onMouseEnter="{{ hoverAud }}" onMouseLeave="{{ leaveAud }}" style="position:relative;min-width:0;aspect-ratio:3/4;border-radius:14px;overflow:hidden;background:#0B0B0E;border:1px solid var(--line);cursor:pointer;transition:transform .55s cubic-bezier(.2,.8,.3,1),border-color .4s ease,box-shadow .55s ease;box-shadow:0 20px 44px rgba(0,0,0,0.5);animation:riseIn .9s cubic-bezier(.2,.7,.3,1) 0.23s both" style-hover="transform:translateY(-10px);border-color:rgba(255,61,46,0.6);box-shadow:0 34px 70px rgba(0,0,0,0.6),0 0 46px rgba(255,61,46,0.18)"> 959 <div data-audimg="1" style="position:absolute;inset:0;transition:transform 1.6s cubic-bezier(.2,.8,.3,1);transform:scale({{ az2 }})"> 960 <img src="/lp/homepage-v5/desktop2/assets/aud-3.jpg" alt="" style="display:block;width:100%;height:100%;object-fit:cover" /> 961 </div> 962 <div style="position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(10,10,12,0.15) 0%,rgba(10,10,12,0.05) 42%,rgba(10,10,12,0.92) 100%)"></div>
963 <span style="position:absolute;top:16px;left:18px;z-index:3;pointer-events:none;font-family:'Space Mono',monospace;font-weight:700;font-size:11px;letter-spacing:0.22em;color:rgba(244,241,234,0.85);text-shadow:0 2px 10px rgba(0,0,0,0.9)">03</span> 964 <span style="position:absolute;top:14px;right:16px;z-index:3;pointer-events:none;width:26px;height:26px;border-radius:50%;border:1px solid rgba(244,241,234,0.3);display:flex;align-items:center;justify-content:center;font-size:11px;color:rgba(244,241,234,0.8)">â</span> 965 <div style="position:absolute;left:0;right:0;bottom:0;z-index:3;pointer-events:none;padding:24px 20px 22px 20px"> 966 <div style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.22em;color:var(--acc);text-transform:uppercase">Beats</div> 967 <h3 style="margin:10px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(20px,1.8vw,26px);line-height:1.02;letter-spacing:-0.035em;color:#F4F1EA;text-wrap:balance">I have my own track</h3> 968 <p style="margin:10px 0 0;font-size:13px;line-height:1.4;color:rgba(244,241,234,0.72)">Turn a song into a complete visual - from the idea and scenes to the finished music video</p> 969 <div style="margin-top:14px;height:2px;width:34px;background:var(--acc);border-radius:2px;box-shadow:0 0 14px rgba(255,61,46,0.7)"></div> 970 </div> 971 </div> 972 </div> 973 974 <div style="position:relative;margin-top:20px;overflow:hidden;border-radius:14px;border:1px solid rgba(18,16,15,0.10);background:radial-gradient(70% 120% at 18% 0%,#FFFFFF,transparent 62%),linear-gradient(168deg,#F7F4ED 0%,#EDE8DE 62%,#E5E0D4 100%);padding:26px 32px;display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;box-shadow:0 22px 48px rgba(0,0,0,0.4)"> 975 <span style="position:absolute;inset:0;pointer-events:none;opacity:0.5;background-image:radial-gradient(rgba(18,16,15,0.20) 0.5px,transparent 0.5px);background-size:4px 4px"></span> 976 <div style="position:relative;z-index:2;display:flex;align-items:center;gap:22px;flex:1;min-width:0;flex-wrap:wrap"> 977 <span style="display:inline-flex;align-items:center;gap:8px;font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.2em;color:#6B655C;text-transform:uppercase;white-space:nowrap;font-weight:700"><span class="pulse" style="display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--acc)"></span>And the main thing</span> 978 <span style="width:1px;height:34px;background:rgba(18,16,15,0.16)"></span> 979 <div style="min-width:0"> 980 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(22px,2.1vw,30px);line-height:1.02;letter-spacing:-0.04em;color:#12100F">Can't edit video? <span style="font-family:'Instrument Serif',serif;font-style:italic;font-weight:400;color:#C41A0A">You don't need to</span></div> 981 <p style="margin:8px 0 0 0;font-size:15px;line-height:1.45;font-weight:500;letter-spacing:-0.006em;color:#3E3A34;max-width:62ch">You upload a track â the AI does the rest. No editing, no settings, no experience with AI needed.</p> 982 </div> 983 </div> 984 <span style="position:relative;z-index:2;display:inline-flex;align-items:baseline;gap:10px;flex-shrink:0;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;letter-spacing:-0.035em;color:#16090A;color:#F7F4ED;background:linear-gradient(180deg,#1E1B17 0%,#12100F 100%);border:1px solid rgba(18,16,15,0.3);border-radius:12px;padding:14px 24px;box-shadow:0 14px 30px rgba(18,16,15,0.28)"> 985 <span style="font-size:24px;line-height:1">Beginner</span> 986 <span style="font-family:'Space Mono',monospace;font-weight:700;font-size:9px;letter-spacing:0.14em;text-transform:uppercase;opacity:0.8">and that's enough</span> 987 988 </span> 989 </div> 990 </section> 991 992 <div style="height:1px;margin:32px 16px;background:linear-gradient(90deg,transparent,var(--line2) 18%,var(--line2) 82%,transparent)"></div> 993 994 <div style="height:1px;margin:32px 16px;background:linear-gradient(90deg,transparent,var(--line2) 18%,var(--line2) 82%,transparent)"></div> 995 996 997 998 <section style="position:relative;overflow:hidden;padding:64px max(32px, calc((100% - 1480px) / 2));background:#0C0C0F;border-top:1px solid var(--line);border-bottom:1px solid var(--line)" data-screen-label="Testimonials"> 999 <span style="position:absolute;top:-120px;left:-100px;width:420px;height:420px;pointer-events:none;background:radial-gradient(closest-side,rgba(255,61,46,0.10),transparent 74%);filter:blur(16px);animation:auraDrift 15s ease-in-out infinite"></span> 1000 <div style="position:relative;display:flex;align-items:flex-end;justify-content:space-between;gap:48px;flex-wrap:wrap"> 1001 <div style="min-width:0"> 1002 <div style="display:inline-flex;align-items:center;gap:8px;border-left:2px solid var(--acc);padding-left:10px;font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase">Reviews</div> 1003 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(34px,3.4vw,52px);line-height:0.97;letter-spacing:-0.04em;margin:18px 0 0 0;text-wrap:balance;color:var(--ink);text-align:left">What <span style="font-family:'Instrument Serif',serif;font-style:italic;font-weight:400;color:var(--acc)">users</span> say 1004</h2> 1005 </div> 1006 <div style="display:flex;align-items:center;gap:18px">
1007 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:44px;line-height:1;letter-spacing:-0.045em;color:var(--ink)">4.8</span> 1008 <span style="display:flex;flex-direction:column;gap:5px"> 1009 <span style="display:flex;gap:2px;color:#FFC531;font-size:14px;line-height:1">â â â â â </span> 1010 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.16em;color:var(--dim);text-transform:uppercase">Average rating</span> 1011 </span> 1012 </div> 1013 </div> 1014 1015 <div style="position:relative;margin-top:32px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:start;gap:16px"> 1016<figure data-tm="0" onClick="{{ nextTm }}" style="{{ tms0 }}"> 1017 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.5),transparent)"></span> 1018 <div> 1019 <div style="display:flex;gap:2px;color:#FFC531;font-size:12px;line-height:1" data-stars="1"><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.00s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.08s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.16s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.24s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.32s both;animation-play-state:paused">â </span></div> 1020 <blockquote style="margin:16px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:16px;line-height:1.3;letter-spacing:-0.028em;color:var(--ink);text-wrap:pretty">I usually piece a video together across different tools. Here I uploaded the track and got a complete story right away. Best of all, the face stays consistent from scene to scene.</blockquote> 1021 </div> 1022 <figcaption style="display:flex;align-items:center;gap:14px;border-top:1px solid var(--line);padding-top:14px"> 1023 <span style="position:relative;width:44px;height:44px;flex-shrink:0;border-radius:50%;border:1px solid var(--line2)"><span style="position:absolute;inset:0;border-radius:50%;overflow:hidden;display:block"><img data-photo="av1" src="/lp/homepage-v5/desktop2/assets/av1.jpg" alt="" style="width:100%;height:100%;object-fit:cover;display:block" /></span><label style="position:absolute;bottom:-2px;right:-2px;z-index:6;width:22px;height:22px;border-radius:50%;background:rgba(10,10,12,0.85);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:11px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label></span> 1024 <span style="display:flex;flex-direction:column;gap:3px;min-width:0"> 1025 <a href="{{ igUrl1 }}" target="_blank" rel="noopener" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink);text-decoration:none">@{{ igNick1 }}</a> 1026 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.16em;color:var(--dim);text-transform:uppercase">AI creator</span> 1027 </span> 1028 </figcaption> 1029 </figure> 1030 1031 <figure data-tm="1" onClick="{{ nextTm }}" style="{{ tms1 }}"> 1032 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.5),transparent)"></span> 1033 <div> 1034 <div style="display:flex;gap:2px;color:#FFC531;font-size:12px;line-height:1" data-stars="1"><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.00s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.08s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.16s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.24s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.32s both;animation-play-state:paused">â </span></div> 1035 <blockquote style="margin:16px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:16px;line-height:1.3;letter-spacing:-0.028em;color:var(--ink);text-wrap:pretty">I liked that you can rebuild a single scene instead of paying for the whole clip again.</blockquote> 1036 </div>
1037 <figcaption style="display:flex;align-items:center;gap:14px;border-top:1px solid var(--line);padding-top:14px"> 1038 <span style="position:relative;width:44px;height:44px;flex-shrink:0;border-radius:50%;border:1px solid var(--line2)"><span style="position:absolute;inset:0;border-radius:50%;overflow:hidden;display:block"><img data-photo="av2" src="/lp/homepage-v5/desktop2/assets/av2.jpg" alt="" style="width:100%;height:100%;object-fit:cover;display:block" /></span><label style="position:absolute;bottom:-2px;right:-2px;z-index:6;width:22px;height:22px;border-radius:50%;background:rgba(10,10,12,0.85);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:11px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label></span> 1039 <span style="display:flex;flex-direction:column;gap:3px;min-width:0"> 1040 <a href="{{ igUrl2 }}" target="_blank" rel="noopener" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink);text-decoration:none">@{{ igNick2 }}</a> 1041 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.16em;color:var(--dim);text-transform:uppercase">songwriter</span> 1042 </span> 1043 </figcaption> 1044 </figure> 1045 <figure data-tm="2" onClick="{{ nextTm }}" style="{{ tms2 }}"> 1046 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.5),transparent)"></span> 1047 <div> 1048 <div style="display:flex;gap:2px;color:#FFC531;font-size:12px;line-height:1" data-stars="1"><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.00s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.08s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.16s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.24s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.32s both;animation-play-state:paused">â </span></div> 1049 <blockquote style="margin:16px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:16px;line-height:1.3;letter-spacing:-0.028em;color:var(--ink);text-wrap:pretty">A convenient workflow and a broad set of tools for working on video. The whole process can be built in one place instead of jumping between a dozen services.</blockquote> 1050 </div> 1051 <figcaption style="display:flex;align-items:center;gap:14px;border-top:1px solid var(--line);padding-top:14px"> 1052 <span style="position:relative;width:44px;height:44px;flex-shrink:0;border-radius:50%;border:1px solid var(--line2)"><span style="position:absolute;inset:0;border-radius:50%;overflow:hidden;display:block"><img data-photo="av3" src="/lp/homepage-v5/desktop2/assets/av3.jpg" alt="" style="width:100%;height:100%;object-fit:cover;display:block" /></span><label style="position:absolute;bottom:-2px;right:-2px;z-index:6;width:22px;height:22px;border-radius:50%;background:rgba(10,10,12,0.85);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:11px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label></span> 1053 <span style="display:flex;flex-direction:column;gap:3px;min-width:0"> 1054 <a href="{{ igUrl3 }}" target="_blank" rel="noopener" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink);text-decoration:none">@{{ igNick3 }}</a> 1055 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.16em;color:var(--dim);text-transform:uppercase">music and AI video creator</span> 1056 </span> 1057 </figcaption> 1058 </figure> 1059 <figure data-tm="3" onClick="{{ nextTm }}" style="{{ tms3 }}">
1060 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.5),transparent)"></span> 1061 <div> 1062 <div style="display:flex;gap:2px;color:#FFC531;font-size:12px;line-height:1" data-stars="1"><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.00s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.08s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.16s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.24s both;animation-play-state:paused">â </span><span style="animation:pop .45s cubic-bezier(.2,.9,.3,1.4) 0.32s both;animation-play-state:paused">â </span></div> 1063 <blockquote style="margin:16px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:16px;line-height:1.3;letter-spacing:-0.028em;color:var(--ink);text-wrap:pretty">Honestly, I expected a steep learning curve. But I uploaded the track, reviewed the storyboard, tweaked a couple of scenes, and only then started generating. It's so much easier when you know what you're getting up front.</blockquote> 1064 </div> 1065 <figcaption style="display:flex;align-items:center;gap:14px;border-top:1px solid var(--line);padding-top:14px"> 1066 <span style="position:relative;width:44px;height:44px;flex-shrink:0;border-radius:50%;border:1px solid var(--line2)"><span style="position:absolute;inset:0;border-radius:50%;overflow:hidden;display:block"><img data-photo="av4" src="/lp/homepage-v5/desktop2/assets/av4.jpg" alt="" style="width:100%;height:100%;object-fit:cover;display:block" /></span><label style="position:absolute;bottom:-2px;right:-2px;z-index:6;width:22px;height:22px;border-radius:50%;background:rgba(10,10,12,0.85);border:1px solid var(--line2);display:flex;align-items:center;justify-content:center;font-family:'Space Mono',monospace;font-size:11px;color:var(--ink);cursor:pointer" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)">+<input type="file" accept="image/*" onChange="{{ onPhoto }}" style="display:none" /></label></span> 1067 <span style="display:flex;flex-direction:column;gap:3px;min-width:0"> 1068 <a href="{{ igUrl4 }}" target="_blank" rel="noopener" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink);text-decoration:none">@{{ igNick4 }}</a> 1069 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.16em;color:var(--dim);text-transform:uppercase">AI and video editing expert</span> 1070 </span> 1071 </figcaption> 1072 </figure> 1073 </div> 1074 1075 <div style="margin:20px auto 0 auto;display:flex;gap:8px;justify-content:center;position:relative;z-index:12"> 1076 <span data-val="0" onClick="{{ pickTm }}" style="{{ tmd0 }}"></span> 1077 <span data-val="1" onClick="{{ pickTm }}" style="{{ tmd1 }}"></span> 1078 <span data-val="2" onClick="{{ pickTm }}" style="{{ tmd2 }}"></span> 1079 <span data-val="3" onClick="{{ pickTm }}" style="{{ tmd3 }}"></span> 1080 </div> 1081 1082</div></div> 1083 1084</section> 1085 1086 <section id="pricing-overview" style="position:relative;overflow:hidden;padding:64px max(32px, calc((100% - 1480px) / 2));background:#08080A" data-screen-label="Pricing"> 1087 <div style="display:none"> 1088 <div style="width:80px;height:80px;border-radius:50%;background:linear-gradient(150deg,#FFD86B 0%,#F5A623 48%,#C97A11 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;box-shadow:0 0 34px rgba(245,166,35,0.45),0 14px 28px rgba(0,0,0,0.5);animation:coinFlip 5.5s ease-in-out infinite"> 1089 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:26px;letter-spacing:-0.04em;line-height:1;color:#3A2404">$27</span> 1090 <span style="font-family:'Space Mono',monospace;font-size:7.5px;letter-spacing:0.16em;text-transform:uppercase;color:#5A3A08">START</span> 1091 </div> 1092 1093 </div> 1094 <div style="display:inline-flex;align-items:center;gap:8px;border-left:2px solid var(--acc);padding-left:10px;font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase">
1094Pricing</div> 1095 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(34px,3.4vw,52px);line-height:0.97;letter-spacing:-0.035em;margin:16px 0 0 0;text-wrap:balance;background:linear-gradient(180deg,#FFFFFF 0%,#F4F1EA 46%,#A49BA1 100%);-webkit-background-clip:text;background-clip:text;color:transparent;;text-align:left">Know the price before <span style="font-family:'Instrument Serif',serif;font-style:italic;color:var(--acc)">you press play</span></h2> 1096 <p style="font-size:17px;line-height:1.5;letter-spacing:-0.011em;color:var(--dim);max-width:40ch;margin:16px 0 0 0;text-align:left">Turn one track into a full music video and vertical content for different platforms</p> 1097 <div data-clipchat-intro-offer data-expires-at="2026-10-05T14:55:29Z" data-expired-label="The discount has ended" style="margin-top:28px;padding:16px 18px;border:1px solid rgba(255,61,46,0.48);border-radius:12px;background:#171012;color:var(--ink);display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap" role="status" aria-live="polite"> 1098 <div style="min-width:0"> 1099 <strong style="display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:17px;line-height:1.25">Lock in your new-user price</strong> 1100 <span style="display:block;margin-top:4px;font-family:'Instrument Sans',sans-serif;font-size:14px;line-height:1.4;color:var(--dim)">50% off â the timer will not restart</span> 1101 </div> 1102 <div style="display:flex;align-items:center;gap:10px"> 1103 <span data-clipchat-intro-badge style="font-family:'Space Mono',monospace;font-size:11px;font-weight:700;letter-spacing:0.08em;color:#16090A;background:var(--acc);border-radius:999px;padding:5px 10px">-50%</span> 1104 <time data-clipchat-intro-timer style="font-family:'Space Mono',monospace;font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:0.04em">03:00:00</time> 1105 </div> 1106 </div> 1107 1108 <style> 1109 [data-clipchat-plan-calculator] input[type="range"]:focus-visible { outline:2px solid #FF3D2E;outline-offset:4px;border-radius:4px } 1110</style> 1111<div data-clipchat-plan-calculator="1" style="margin-top:24px;max-width:920px;background:#FFFFFF;border:1px solid rgba(18,16,15,0.12);border-radius:6px;padding:28px 30px"> 1112 <div style="display:flex;align-items:flex-end;justify-content:space-between;gap:16px"> 1113 <label for="clipchat-calculator-minutes" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:20px;letter-spacing:-0.025em;color:#12100F;line-height:1.15">Clip minutes</label> 1114 <output for="clipchat-calculator-minutes" aria-live="polite" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:42px;line-height:0.9;letter-spacing:-0.04em;color:#12100F;font-variant-numeric:tabular-nums">{{ calcMin }}<span style="font-size:15px;font-weight:600;color:#6F6964;letter-spacing:-0.01em"> min</span></output> 1115 </div> 1116 <input id="clipchat-calculator-minutes" type="range" min="1" max="24" step="1" value="{{ calcMin }}" onInput="{{ setCalc }}" style="width:100%;min-height:44px;margin-top:14px;accent-color:#FF3D2E;cursor:pointer" /> 1117 <p style="margin:12px 0 0;font-family:'Instrument Sans',sans-serif;font-size:14px;line-height:1.4;color:#12100F">Recommended plan â what's included</p> 1118 <div style="margin-top:12px;padding-top:16px;border-top:1px solid rgba(18,16,15,0.12);display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr) auto;align-items:end;gap:28px"> 1119 <div style="display:flex;flex-direction:column;gap:4px;min-width:0"> 1120 <span style="font-family:'Instrument Sans',sans-serif;font-size:12px;line-height:1.25;color:#6F6964">Number of videos</span> 1121 <strong style="font-family:'Bricolage Grotesque',sans-serif;font-size:16px;line-height:1.25;letter-spacing:-0.02em;color:#12100F">{{ calcPlanVideos }}</strong> 1122 </div> 1123 <div style="display:flex;flex-direction:column;gap:4px;min-width:0"> 1124 <span style="font-family:'Instrument Sans',sans-serif;font-size:12px;line-height:1.25;color:#6F6964">Credits a month</span> 1125 <strong style="font-family:'Bricolage Grotesque',sans-serif;font-size:16px;line-height:1.25;letter-spacing:-0.02em;color:#12100F;font-variant-numeric:tabular-nums">{{ calcPlanCredits }}</strong> 1126 </div>
1127 <strong aria-live="polite" style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:16px;line-height:1.2;letter-spacing:-0.02em;color:var(--acc);text-align:right;white-space:nowrap">{{ calcPlan }}</strong> 1128 </div> 1129</div>
1130<script> 1131 window.ClipChatLandingCalculator = function (minutes, dictionary = {}) { 1132 // Package estimates select a plan; they are not a generation credit rate. 1133 const plans = [{"approximate_minutes":5,"credits":142000,"approximate_videos":15,"video_seconds":20},{"approximate_minutes":10,"credits":260000,"approximate_videos":30,"video_seconds":20},{"approximate_minutes":24,"credits":600000,"approximate_videos":72,"video_seconds":20}]; 1134 const requested = Number(minutes); 1135 const selectedMinutes = Number.isFinite(requested) && requested > 0 ? requested : plans[0].approximate_minutes; 1136 const index = plans.findIndex(plan => selectedMinutes <= plan.approximate_minutes); 1137 const tier = (index < 0 ? plans.length - 1 : index) + 1; 1138 const plan = plans[tier - 1]; 1139 const deadline = Date.parse(dictionary.introOfferExpiresAt); 1140 const expired = dictionary.introOfferExpiresAt !== undefined && 1141 (!Number.isFinite(deadline) || Date.now() >= deadline); 1142 const priceLabel = dictionary['p' + tier + (expired ? 'BaseLabel' : 'Label')]; 1143 1144 return { 1145 credits: dictionary['p' + tier + 'Cr'] || String(plan.credits), 1146 videos: dictionary['p' + tier + 'Videos'] || ('â' + plan.approximate_videos + ' Ã ' + plan.video_seconds + 's'), 1147 plan: priceLabel || dictionary['p' + tier + 'Name'] || ['Start', 'Pro', 'Max'][tier - 1] 1148 }; 1149 }; 1150</script>
1150 1151 1152 <div id="pricing" data-clipchat-tariffs="1" style="scroll-margin-top:100px"> 1153 <h3 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(34px,3.4vw,52px);line-height:0.97;letter-spacing:-0.035em;color:var(--ink);margin:32px 0 0 0;text-transform:uppercase">Plans</h3> 1154 <div style="display:grid;grid-template-columns:repeat(3,1fr);align-items:start;gap:20px;margin-top:40px"> 1155 <div style="position:relative;overflow:hidden;background:radial-gradient(110% 80% at 22% 0%,rgba(96,140,255,0.18),transparent 62%),linear-gradient(168deg,#161A26 0%,#0E0F14 68%);border:1px solid rgba(96,140,255,0.42);border-radius:6px;padding:24px;display:flex;flex-direction:column;gap:0;box-shadow:0 0 44px rgba(96,140,255,0.14),0 14px 32px rgba(0,0,0,0.45)"> 1156 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(140,175,255,0.85),transparent)"></span> 1157 <div style="display:flex;align-items:center;justify-content:space-between;gap:12px"> 1158 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:0.02em;text-transform:uppercase;color:var(--dim)">START</span> 1159 1160 </div> 1161 <div style="margin-top:14px;display:flex;align-items:flex-end;gap:8px"> 1162 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:42px;line-height:0.85;letter-spacing:-0.045em;color:var(--ink)"> <span data-clipchat-intro-price style="display:inline-flex;flex-direction:column;align-items:flex-start;gap:5px"> 1163 <span data-clipchat-intro-base style="font-family:'Instrument Sans',sans-serif;font-size:0.42em;line-height:1;color:var(--dim);text-decoration:line-through;text-decoration-thickness:1px">$27</span> 1164 <span data-clipchat-intro-sale>$13.50</span> 1165 </span> 1166</span> 1167 <span style="font-family:'Instrument Sans',sans-serif;font-size:13px;color:var(--dim);padding-bottom:3px">/ mo</span> 1168 </div> 1169 <div style="margin-top:16px;padding-top:14px;border-top:1px solid rgba(244,241,234,0.10);display:flex;flex-direction:column;gap:8px"> 1170 <div style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1171 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Clip minutes</span> 1172 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink)">~5 min</span> 1173 </div> 1174 <div data-plan-videos="growth" style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1175 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Number of videos</span> 1176 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink);text-align:right">â15 Ã 20s</span> 1177 </div> 1178 <div style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1179 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Credits a month</span> 1180 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--acc)" data-plan-credits="growth">142,000</span> 1181 </div> 1182 </div> 1183 <div data-plan-summary="growth" style="margin-top:18px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:18px;line-height:1.18;letter-spacing:-0.025em;color:var(--ink)">Discover ClipChat</div> 1184 <p style="margin:6px 0 0 0;font-size:14px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim)">Ideal for creating your first full music video, several vertical videos and getting to know ClipChat.</p> 1185 <a href="/clipchat/checkout?plan=growth&period=monthly&lang=en-GB" data-clipchat-plan="growth" style="display:block;box-sizing:border-box;text-align:center;text-decoration:none;margin-top:18px;width:100%;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.01em;color:var(--ink);background:transparent;border:1px solid rgba(244,241,234,0.24);border-radius:6px;padding:14px 16px;cursor:pointer">Choose</a> 1186 </div> 1187 <div style="position:relative;overflow:hidden;background:linear-gradient(168deg,#1D100E 0%,#0E0E11 68%);border:1px solid rgba(255,61,46,0.55);border-radius:6px;padding:24px;display:flex;flex-direction:column;gap:0;box-shadow:0 0 48px rgba(255,61,46,0.12),0 18px 40px rgba(0,0,0,0.5)">
1188 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.9),transparent)"></span> 1189 <div style="display:flex;align-items:center;justify-content:space-between;gap:12px"> 1190 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:0.02em;text-transform:uppercase;color:var(--acc)">PRO</span> 1191 <span style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.14em;text-transform:uppercase;color:#16090A;background:var(--acc);border-radius:999px;padding:4px 10px;white-space:nowrap">Recommended</span> 1192 </div> 1193 <div style="margin-top:14px;display:flex;align-items:flex-end;gap:8px"> 1194 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:42px;line-height:0.85;letter-spacing:-0.045em;color:var(--ink)"> <span data-clipchat-intro-price style="display:inline-flex;flex-direction:column;align-items:flex-start;gap:5px"> 1195 <span data-clipchat-intro-base style="font-family:'Instrument Sans',sans-serif;font-size:0.42em;line-height:1;color:var(--dim);text-decoration:line-through;text-decoration-thickness:1px">$49</span> 1196 <span data-clipchat-intro-sale>$24.50</span> 1197 </span> 1198</span> 1199 <span style="font-family:'Instrument Sans',sans-serif;font-size:13px;color:var(--dim);padding-bottom:3px">/ mo</span> 1200 </div> 1201 <div style="margin-top:16px;padding-top:14px;border-top:1px solid rgba(244,241,234,0.10);display:flex;flex-direction:column;gap:8px"> 1202 <div style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1203 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Clip minutes</span> 1204 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink)">~10 min</span> 1205 </div> 1206 <div data-plan-videos="pro" style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1207 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Number of videos</span> 1208 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink);text-align:right">â30 Ã 20s</span> 1209 </div> 1210 <div style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1211 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Credits a month</span> 1212 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--acc)" data-plan-credits="pro">260,000</span> 1213 </div> 1214 </div> 1215 <div data-plan-summary="pro" style="margin-top:18px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:18px;line-height:1.18;letter-spacing:-0.025em;color:var(--ink)">Core plan</div> 1216 <p style="margin:6px 0 0 0;font-size:14px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim)">Create a full music video and short video formats for social media.</p> 1217 <a href="/clipchat/checkout?plan=pro&period=monthly&lang=en-GB" data-clipchat-plan="pro" style="display:block;box-sizing:border-box;text-align:center;text-decoration:none;margin-top:18px;width:100%;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.01em;color:#16090A;background:var(--acc);border:1px solid var(--acc);border-radius:6px;padding:14px 16px;cursor:pointer">Choose</a> 1218 </div> 1219 <div style="position:relative;overflow:hidden;background:radial-gradient(110% 80% at 22% 0%,rgba(96,140,255,0.18),transparent 62%),linear-gradient(168deg,#161A26 0%,#0E0F14 68%);border:1px solid rgba(96,140,255,0.42);border-radius:6px;padding:24px;display:flex;flex-direction:column;gap:0;box-shadow:0 0 44px rgba(96,140,255,0.14),0 14px 32px rgba(0,0,0,0.45)"> 1220 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(140,175,255,0.85),transparent)"></span> 1221 <div style="display:flex;align-items:center;justify-content:space-between;gap:12px">
1222 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:0.02em;text-transform:uppercase;color:var(--dim)">MAX</span> 1223 1224 </div> 1225 <div style="margin-top:14px;display:flex;align-items:flex-end;gap:8px"> 1226 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:42px;line-height:0.85;letter-spacing:-0.045em;color:var(--ink)"> <span data-clipchat-intro-price style="display:inline-flex;flex-direction:column;align-items:flex-start;gap:5px"> 1227 <span data-clipchat-intro-base style="font-family:'Instrument Sans',sans-serif;font-size:0.42em;line-height:1;color:var(--dim);text-decoration:line-through;text-decoration-thickness:1px">$120</span> 1228 <span data-clipchat-intro-sale>$60</span> 1229 </span> 1230</span> 1231 <span style="font-family:'Instrument Sans',sans-serif;font-size:13px;color:var(--dim);padding-bottom:3px">/ mo</span> 1232 </div> 1233 <div style="margin-top:16px;padding-top:14px;border-top:1px solid rgba(244,241,234,0.10);display:flex;flex-direction:column;gap:8px"> 1234 <div style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1235 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Clip minutes</span> 1236 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink)">~24 min</span> 1237 </div> 1238 <div data-plan-videos="massive" style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1239 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Number of videos</span> 1240 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--ink);text-align:right">â72 Ã 20s</span> 1241 </div> 1242 <div style="display:flex;align-items:baseline;justify-content:space-between;gap:12px"> 1243 <span style="font-family:'Instrument Sans',sans-serif;font-size:14px;color:var(--dim)">Credits a month</span> 1244 <span style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.02em;color:var(--acc)" data-plan-credits="massive">600,000</span> 1245 </div> 1246 </div> 1247 <div data-plan-summary="massive" style="margin-top:18px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:18px;line-height:1.18;letter-spacing:-0.025em;color:var(--ink)">Professional plan</div> 1248 <p style="margin:6px 0 0 0;font-size:14px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim)">For regular production, multiple projects, client work or a large volume of content.</p> 1249 <a href="/clipchat/checkout?plan=massive&period=monthly&lang=en-GB" data-clipchat-plan="massive" style="display:block;box-sizing:border-box;text-align:center;text-decoration:none;margin-top:18px;width:100%;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.01em;color:var(--ink);background:transparent;border:1px solid rgba(244,241,234,0.24);border-radius:6px;padding:14px 16px;cursor:pointer">Choose</a> 1250 </div> 1251 </div> 1252 <div data-clipchat-funnel-choice="1" aria-hidden="true" 1253 style="display:none;margin-top:28px;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;border:1px solid rgba(255,61,46,.42);border-radius:10px;padding:22px;background:linear-gradient(145deg,rgba(255,61,46,.12),rgba(12,12,15,.92))"> 1254 <div style="grid-column:1/-1"> 1255 <div style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--acc)">ClipChat</div> 1256 <h3 style="margin:8px 0 0;font-family:'Bricolage Grotesque',sans-serif;font-size:28px;line-height:1.05;color:var(--ink)">Create a music video</h3> 1257 <p style="margin:8px 0 0;font-size:14px;line-height:1.5;color:var(--dim)">Review the visuals before full generation</p> 1258 </div> 1259 1260 <a href="/create/clipboard?show=pricing&plan=pro&period=monthly&lang=en-GB" 1261 data-clipchat-funnel-action="buy_now" 1262 style="display:flex;min-height:86px;box-sizing:border-box;flex-direction:column;justify-content:space-between;padding:16px;border:1px solid rgba(244,241,234,.18);border-radius:8px;color:var(--ink);text-decoration:none;background:rgba(244,241,234,.04)"> 1263 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:.14em;color:var(--acc)">01</span> 1264 <strong style="font-family:'Bricolage Grotesque',sans-serif;font-size:18px">Plans â</strong> 1265 </a> 1266 <a href="/create/clipboard" data-clipchat-funnel-action="storyboard_first" 1267 style="display:flex;min-height:86px;box-sizing:border-box;flex-direction:column;justify-content:space-between;padding:16px;border:1px solid var(--acc);border-radius:8px;color:#16090A;text-decoration:none;background:var(--acc)"> 1268 <span style="font-family:'Space Mono',monospace;font-size:9px;letter-spacing:.14em;color:#16090A">02</span> 1269 <strong style="font-family:'Bricolage Grotesque',sans-serif;font-size:18px">See the scene plan first â</strong> 1270 </a> 1271</div> 1272 1273 <aside data-clipchat-community="1" aria-labelledby="clipchat-community-title" style="box-sizing:border-box;margin-top:24px;max-width:920px;padding:clamp(20px,3vw,28px);border:1px solid #FF6A4D;border-radius:14px;background:#271410;color:#F4F1EA"> 1274 <div style="display:flex;align-items:center;gap:12px"> 1275 <svg aria-hidden="true" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="#FF8A5C" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" style="flex:none"> 1276 <circle cx="9" cy="8" r="3" /> 1277 <path d="M3 20v-2a6 6 0 0 1 12 0v2M16 5a3 3 0 0 1 0 6M21 20v-2a6 6 0 0 0-4-5.66" /> 1278 </svg> 1279 <h3 id="clipchat-community-title" style="min-width:0;margin:0;font-family:'Bricolage Grotesque',sans-serif;font-size:1.125rem;line-height:1.3;font-weight:800;color:#FF8A5C;text-wrap:balance;overflow-wrap:anywhere">Private community â included with Pro and Max</h3> 1280 </div> 1281 <p style="max-width:70ch;margin:12px 0 0;font-family:'Instrument Sans',sans-serif;font-size:1rem;line-height:1.55;color:#F4D9CE;overflow-wrap:anywhere">After payment, you get access to the private ClipChat community: help with your first video, examples, support, promotion ideas and ways to earn. The join button appears immediately after successful payment.</p> 1282</aside> 1283 1284 1285 1286 <div style="margin-top:16px"> 1287 <a href="/en-GB/pricing" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--acc);text-decoration:none;text-transform:uppercase">All plans and limits â</a> 1288 </div> 1289 <div data-clipchat-payment-methods="foreign" style="margin-top:24px;color:var(--ink);font-size:14px;line-height:1.5"> 1290 <span>Payment:</span> 1291 <div data-payment-method="stripe_card" style="display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:10px">
1292 <span data-payment-label="Visa" role="img" aria-label="Visa" dir="ltr" style="display:inline-flex;align-items:center;min-height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;padding:4px 11px;background:#1434CB;color:#FFFFFF;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:800;letter-spacing:-0.02em;line-height:1;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.18)">Visa</span> 1293 <span data-payment-label="Mastercard" role="img" aria-label="Mastercard" dir="ltr" style="display:inline-flex;align-items:center;min-height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;padding:4px 11px;background:#EB001B;color:#FFFFFF;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:800;letter-spacing:-0.02em;line-height:1;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.18)">Mastercard</span> 1294 <span data-payment-label="Amex" role="img" aria-label="Amex" dir="ltr" style="display:inline-flex;align-items:center;min-height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;padding:4px 11px;background:#006FCF;color:#FFFFFF;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:800;letter-spacing:-0.02em;line-height:1;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.18)">Amex</span> 1295 <span data-payment-label="JCB" role="img" aria-label="JCB" dir="ltr" style="display:inline-flex;align-items:center;min-height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;padding:4px 11px;background:#146A42;color:#FFFFFF;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:800;letter-spacing:-0.02em;line-height:1;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.18)">JCB</span> 1296 <span data-payment-label="Apple Pay" role="img" aria-label="Apple Pay" dir="ltr" style="display:inline-flex;align-items:center;min-height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;padding:4px 11px;background:#FFFFFF;color:#000000;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:800;letter-spacing:-0.02em;line-height:1;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.18)">Apple Pay</span> 1297 <span data-payment-label="Link" role="img" aria-label="Link" dir="ltr" style="display:inline-flex;align-items:center;min-height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;padding:4px 11px;background:#00D66F;color:#151717;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:800;letter-spacing:-0.02em;line-height:1;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.18)">Link</span> 1298 <span data-payment-label="Amazon Pay" role="img" aria-label="Amazon Pay" dir="ltr" style="display:inline-flex;align-items:center;min-height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;padding:4px 11px;background:#FFD814;color:#232F3E;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;font-weight:800;letter-spacing:-0.02em;line-height:1;white-space:nowrap;box-shadow:0 3px 10px rgba(0,0,0,.18)">Amazon Pay</span> 1299 </div> 1300</div> 1301 1302 </div> 1303 </section> 1304 1305 <div style="height:1px;margin:12px 16px;background:linear-gradient(90deg,transparent,var(--line2) 18%,var(--line2) 82%,transparent)"></div> 1306 1307 1308 <section style="position:relative;display:flex;align-items:flex-end;overflow:hidden;padding:64px max(32px, calc((100% - 1480px) / 2)) 64px" data-screen-label="Final CTA"> 1309 <div style="position:absolute;inset:0;z-index:0"> 1310 <video data-finalvideo="1" poster="https://content.doitong.com/video/clipchat_landing_v2/w1_hd.jpg" loop="{{ true }}" playsInline="{{ true }}" preload="metadata" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:1;transition:opacity .6s ease"></video> 1311 <label style="position:absolute;top:24px;right:24px;z-index:5;display:inline-flex;align-items:center;gap:9px;height:38px;padding:0 18px;border-radius:999px;background:rgba(10,10,12,0.72);border:1px solid rgba(244,241,234,0.35);font-family:'Space Mono',monospace;font-weight:700;font-size:9px;letter-spacing:0.16em;text-transform:uppercase;color:var(--ink);cursor:pointer;backdrop-filter:blur(6px)" style-hover="background:var(--acc);color:#16090A;border-color:var(--acc)"><span style="font-size:14px;line-height:1">+</span>
1311Upload a clip<input type="file" accept="video/*" data-val="8" onChange="{{ onFile }}" style="display:none" /></label> 1312 <span style="position:absolute;inset:0;pointer-events:none;background:radial-gradient(80% 70% at 50% 45%,rgba(10,10,12,0.62) 0%,rgba(10,10,12,0.86) 55%,#0A0A0C 100%)"></span> 1313 <span style="position:absolute;top:0;left:0;right:0;height:140px;pointer-events:none;background:linear-gradient(180deg,#0A0A0C,transparent)"></span> 1314 <span style="position:absolute;bottom:0;left:0;right:0;height:180px;pointer-events:none;background:linear-gradient(0deg,#0A0A0C,transparent)"></span> 1315 </div> 1316 1317 <div style="position:relative;z-index:2;width:100%;text-align:center"> 1318 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(52px,6.2vw,92px);line-height:0.9;letter-spacing:-0.05em;margin:26px 0 0 0;text-wrap:balance;color:var(--ink)">Favorite track.<br /><span style="font-family:'Instrument Serif',serif;font-style:italic;font-weight:400;color:var(--acc);text-shadow:0 0 60px rgba(255,61,46,0.45)">Finished music video.</span></h2> 1319 1320 <div style="margin-top:34px;display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap"> 1321 <button onClick="{{ startDemo }}" style="background:linear-gradient(180deg,#FF6A4D 0%,#FF3D2E 52%,#E22A1D 100%);color:#16090A;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:18px;letter-spacing:-0.015em;padding:20px 40px;border-radius:12px;border:none;position:relative;overflow:hidden;cursor:pointer;box-shadow:0 18px 48px rgba(255,61,46,0.4)" style-before="content:'';position:absolute;top:0;left:0;width:42%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.42),transparent);animation:shine 4.6s ease-in-out infinite">Create a music video</button> 1322 1323 </div> 1324 1325 <div style="margin:44px auto 0 auto;max-width:900px;display:flex;gap:14px;flex-wrap:wrap;justify-content:center"> 1326 <div style="flex:1;
1326min-width:200px;position:relative;border:1px solid var(--line2);border-radius:12px;padding:20px 22px;background:rgba(10,10,12,0.5);backdrop-filter:blur(6px);text-align:left"> 1327 <div style="font-family:'Space Mono',monospace;font-size:8.5px;letter-spacing:0.2em;color:var(--acc);text-transform:uppercase">01</div> 1328 <div style="margin-top:10px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.035em;color:var(--ink)">See the scene plan first</div> 1329 <div style="margin-top:5px;font-size:13px;line-height:1.45;color:var(--dim)">Review the visuals before full generation</div> 1330 </div> 1331 <div style="flex:1;min-width:200px;position:relative;border:1px solid var(--line2);border-radius:12px;padding:20px 22px;background:rgba(10,10,12,0.5);backdrop-filter:blur(6px);text-align:left"> 1332 <div style="font-family:'Space Mono',monospace;font-size:8.5px;letter-spacing:0.2em;color:var(--acc);text-transform:uppercase">02</div> 1333 <div style="margin-top:10px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.035em;color:var(--ink)">No card</div> 1334 <div style="margin-top:5px;font-size:13px;line-height:1.45;color:var(--dim)">Nothing to link up front</div> 1335 </div> 1336 <div style="flex:1;
1336min-width:200px;position:relative;border:1px solid var(--line2);border-radius:12px;padding:20px 22px;background:rgba(10,10,12,0.5);backdrop-filter:blur(6px);text-align:left"> 1337 <div style="font-family:'Space Mono',monospace;font-size:8.5px;letter-spacing:0.2em;color:var(--acc);text-transform:uppercase">03</div> 1338 <div style="margin-top:10px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.035em;color:var(--ink)">60 seconds</div> 1339 <div style="margin-top:5px;font-size:13px;line-height:1.45;color:var(--dim)">That's how long the track analysis takes</div> 1340 </div> 1341 </div> 1342 </div> 1343 </section> 1344 1345 <section style="padding:24px max(32px, calc((100% - 1480px) / 2)) 64px" data-screen-label="FAQ"> 1346 <div style="display:inline-flex;align-items:center;gap:8px;border-left:2px solid var(--acc);padding-left:10px;font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.2em;color:var(--dim);text-transform:uppercase">Questions</div> 1347 <h2 style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(34px,3.4vw,52px);line-height:0.97;letter-spacing:-0.035em;margin:16px 0 0 0;text-wrap:balance;background:linear-gradient(180deg,#FFFFFF 0%,#F4F1EA 46%,#A49BA1 100%);-webkit-background-clip:text;background-clip:text;color:transparent;;text-align:left">Your biggest questions before your first <span style="font-family:'Instrument Serif',serif;font-style:italic;color:var(--acc)">music video</span> 1348</h2> 1349 <div style="margin-top:44px;display:grid;grid-template-columns:1fr;max-width:1480px"> 1350 1351 <div style="position:relative;overflow:hidden;border:1px solid rgba(255,61,46,0.42);border-radius:14px;padding:32px 34px;margin-bottom:32px;background:radial-gradient(90% 150% at 12% 0%,rgba(255,61,46,0.16),transparent 62%),linear-gradient(168deg,#1A100E 0%,#0D0D10 74%);box-shadow:0 0 52px rgba(255,61,46,0.12)"> 1352 <span style="position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,61,46,0.9),transparent)"></span> 1353 <span style="display:inline-flex;align-items:center;gap:8px;font-family:'Space Mono',monospace;font-size:9px;letter-spacing:0.2em;color:var(--acc);text-transform:uppercase"><span class="pulse" style="display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--acc)"></span>Asked most often</span> 1354 <h3 style="margin:16px 0 0 0;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:clamp(24px,2.4vw,34px);line-height:1.05;letter-spacing:-0.04em;color:var(--ink);text-wrap:balance">Will it look AI-made?</h3> 1355 <p style="margin:14px 0 0 0;font-size:17px;line-height:1.55;letter-spacing:-0.011em;color:var(--dim);max-width:52ch">ClipChat first builds a consistent visual concept and scene plan, so the music video feels coherent rather than like a collection of random shots. Before generation, you can review the direction and adjust the scenes.</p> 1356 </div> 1357 1358 <div style="border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(3,1fr);column-gap:44px;align-items:start"> 1359 <div style="border-bottom:1px solid var(--line)"> 1360 <button data-val="1" onClick="{{ faqTap }}" style="width:100%;text-align:left;background:transparent;border:none;color:var(--ink);font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:21px;letter-spacing:-0.03em;padding:26px 44px 26px 0;cursor:pointer;position:relative">Who owns the uploaded track and the finished video?<span style="{{ f1symSt }}">+</span></button> 1361 <p style="{{ a1st }}">You retain the rights to the track you upload. You can use the finished video in accordance with the terms of service, including commercially, provided you have the necessary rights to the source materials. ClipChat does not use uploaded tracks to train models.</p> 1362 </div> 1363 <div style="border-bottom:1px solid var(--line)"> 1364 <button data-val="2" onClick="{{ faqTap }}" style="width:100%;text-align:left;background:transparent;border:none;color:var(--ink);font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:21px;letter-spacing:-0.03em;padding:26px 44px 26px 0;cursor:pointer;position:relative">How long does it take to create a music video?<span style="{{ f2symSt }}">+</span></button> 1365 <p style="{{ a2st }}">Track analysis takes about a minute. The total creation time depends on the length of the music video and the number of scenes: usually no more than 30 minutes.</p> 1366 </div> 1367 <div style="border-bottom:1px solid var(--line)"> 1368 <button data-val="4" onClick="{{ faqTap }}" style="width:100%;text-align:left;background:transparent;border:none;color:var(--ink);font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:21px;letter-spacing:-0.03em;padding:26px 44px 26px 0;cursor:pointer;position:relative">Will I be charged automatically?<span style="{{ f4symSt }}">+</span></button> 1369 <p style="{{ a4st }}">Yes. Your plan renews automatically every month; you can cancel any time before the next charge.</p> 1370 </div> 1371 <div style="border-bottom:1px solid var(--line)"> 1372 <button data-val="5" onClick="{{ faqTap }}" style="width:100%;text-align:left;background:transparent;border:none;color:var(--ink);font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:21px;letter-spacing:-0.03em;padding:26px 44px 26px 0;cursor:pointer;position:relative">Can I legally upload my track?<span style="{{ f5symSt }}">+</span></button>
1373 <p style="{{ a5st }}">If you wrote it or hold the rights â yes, no limits. For a cover or a licensed track, clearing the rights stays on you.</p> 1374 </div> 1375 <div style="border-bottom:1px solid var(--line)"> 1376 <button data-val="6" onClick="{{ faqTap }}" style="width:100%;text-align:left;background:transparent;border:none;color:var(--ink);font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:21px;letter-spacing:-0.03em;padding:26px 44px 26px 0;cursor:pointer;position:relative">If something breaks, is there anyone to ask?<span style="{{ f6symSt }}">+</span></button> 1377 <p style="{{ a6st }}">Yes. Contact support in chat or by email. After payment, you also get access to the private ClipChat community for help with the service and your first music video. <a href="https://t.me/doitong_support_bot" target="_blank" rel="noopener" style="color:var(--acc)">Support chat</a> · <a href="mailto:[email protected]?subject=%5BClipChat.ai%5D%20" style="color:var(--acc)">[email protected]</a></p> 1378 </div> 1379 <div style="border-bottom:1px solid var(--line)"> 1380 <button data-val="3" onClick="{{ faqTap }}" style="width:100%;text-align:left;background:transparent;border:none;color:var(--ink);font-family:'Bricolage Grotesque',sans-serif;font-weight:700;font-size:21px;letter-spacing:-0.03em;padding:26px 44px 26px 0;cursor:pointer;position:relative">What if I don't like a scene?<span style="{{ f3symSt }}">+</span></button> 1381 <p style="{{ a3st }}">You can regenerate only the selected scene without rebuilding the entire music video. The other scenes stay unchanged.</p> 1382 </div> 1383 </div> 1384 1385 <div style="margin-top:36px;display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;border:1px solid var(--line);border-radius:14px;padding:26px 30px;background:linear-gradient(168deg,#141418 0%,#0B0B0E 74%)"> 1386 <div style="min-width:0"> 1387 <div style="font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;letter-spacing:-0.03em;color:var(--ink)">Didn't find your question?</div> 1388 <p style="margin:8px 0 0 0;font-size:15px;line-height:1.5;color:var(--dim);max-width:44ch">Contact support - we'll help with creating a video, plans and using the service.</p> 1389 </div> 1390 <a href="https://t.me/doitong_support_bot" target="_blank" rel="noopener noreferrer" style="flex-shrink:0;background:linear-gradient(180deg,#FF6A4D 0%,#FF3D2E 52%,#E22A1D 100%);color:#16090A;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;letter-spacing:-0.01em;padding:16px 28px;border-radius:10px;text-decoration:none;box-shadow:0 0 28px rgba(255,61,46,0.35)">Contact support</a> 1391 </div> 1392 </div> 1393 </section> 1394 1395 <footer id="contacts" style="border-top:1px solid var(--line);padding:48px max(32px, calc((100% - 1480px) / 2)) 64px" data-screen-label="Footer"> 1396 <div style="display:flex;flex-direction:column;gap:16px"> 1397 <span style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dark);text-transform:uppercase">© 2026 CLIPCHAT INC. â AN AI FILM STUDIO FOR MUSIC</span> 1398 <div style="display:flex;gap:16px;flex-wrap:wrap"> 1399 <a href="#examples" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Examples</a> 1400 <a href="#pricing" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Pricing</a> 1401 <a href="/en-GB/policy" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Privacy</a> 1402 <a href="mailto:[email protected]?subject=%5BClipChat.ai%5D%20" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Contact</a> 1403 <a href="#contacts" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Support</a> 1404 </div> 1405 <div style="display:flex;gap:16px;flex-wrap:wrap"> 1406 <a href="https://t.me/doitong_support_bot" target="_blank" rel="noopener" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.08em;color:var(--acc);text-decoration:none">Support chat</a> 1407 <a href="mailto:[email protected]?subject=%5BClipChat.ai%5D%20" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.08em;color:var(--acc);text-decoration:none">[email protected]</a> 1408 </div> 1409 <div style="display:flex;gap:16px;flex-wrap:wrap;padding-top:4px"> 1410 <a href="/ai-music-video-generator" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">AI music video generator</a> 1411 <a href="/suno-to-music-video" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Suno to video</a> 1412 <a href="/udio-to-music-video" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Udio to video</a> 1413 <a href="/mp3-to-music-video" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">MP3 to video</a> 1414 <a href="/lyric-video-generator" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">Lyric video</a> 1415 <a href="/free-ai-music-video-generator" style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dim);text-decoration:none;text-transform:uppercase">AI storyboard</a> 1416 </div>
1417 <span style="font-family:'Space Mono',monospace;font-size:9.5px;letter-spacing:0.12em;color:var(--dark);text-transform:uppercase">POWERED BY DOITONG</span> 1418 </div> 1419 </footer> 1420 1421 <div style="display:none"> 1422 <button data-magnet="1" onClick="{{ startDemo }}" style="width:100%;background:linear-gradient(180deg,#FF6A4D 0%,#FF3D2E 52%,#E22A1D 100%);color:#16090A;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:15px;box-shadow:0 0 26px rgba(255,61,46,0.4);padding:16px 16px;border-radius:10px;border:none;position:relative;overflow:hidden;box-shadow:0 0 28px rgba(255,61,46,0.35)" style-before="content:'';position:absolute;top:0;left:0;width:42%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.42),transparent);animation:shine 4.6s ease-in-out infinite">Create a music video</button> 1423 </div> 1424</div> 1425 1426</x-dc> 1427 1428 1429 1430 1431 1432<style> 1433 [data-v5-langs] { display: none; } 1434 html[data-v5-langs-open] [data-v5-langs] { display: block; } 1435 [data-v5-globe]:hover { color: var(--ink) !important; } 1436 [data-v5-langs] a:hover { background: rgba(255,255,255,0.07); } 1437</style>
1438<script> 1439(function () { 1440 var OPEN = 'data-v5-langs-open'; 1441 document.addEventListener('click', function (e) { 1442 var t = e.target; 1443 var globe = t && t.closest ? t.closest('[data-v5-globe]') : null; 1444 if (globe) { 1445 e.preventDefault(); 1446 var open = document.documentElement.hasAttribute(OPEN); 1447 if (open) { document.documentElement.removeAttribute(OPEN); } 1448 else { document.documentElement.setAttribute(OPEN, '1'); } 1449 globe.setAttribute('aria-expanded', String(!open)); 1450 return; 1451 } 1452 var link = t && t.closest ? t.closest('a[hreflang]') : null; 1453 if (link) { 1454 // ÐÑка â Ñа же, ÑÑо ÑиÑÐ°ÐµÑ determine_language: пÑÑÑ Ð·Ð°Ð´Ð°ÑÑ ÑзÑк ÑÑой 1455 // ÑÑÑаниÑÑ, кÑка закÑеплÑÐµÑ Ð²ÑÐ±Ð¾Ñ Ð½Ð° ÑледÑÑÑие Ð·Ð°Ñ Ð¾Ð´Ñ. 1456 try { 1457 document.cookie = 'language=' + link.getAttribute('hreflang') + 1458 '; path=/; max-age=31536000; SameSite=Lax'; 1459 } catch (err) {} 1460 return; 1461 } 1462 document.documentElement.removeAttribute(OPEN); 1463 }, true); 1464 document.addEventListener('keydown', function (e) { 1465 if (e.key === 'Escape') { document.documentElement.removeAttribute(OPEN); } 1466 }); 1467})(); 1468</script>
1468 1469
1470<script>window.V5MEDIA = { 1471 hero: "https://content.doitong.com/video/clipchat_landing_v2/w2_hd.mp4", 1472 final: "https://content.doitong.com/video/clipchat_landing_v2/w1_hd.mp4" 1473};</script>
1473 1474<style> 1475 /* ÐÑблиÑÐ½Ð°Ñ Ð²Ð¸ÑÑина показÑÐ²Ð°ÐµÑ ÑолÑко пÑимеÑÑ ClipChat. ÐÑÑавÑиеÑÑ Ð¾Ñ 1476 дизайн-пÑоÑоÑипа file controls не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¿Ð¾ÑеÑиÑелÑм. */ 1477 label:has(input[type="file"]) { display: none !important; } 1478</style>
1479<script>window.V5SRC = function (url) { return url || ''; };</script>
vendor: 1 bytes, line 1479
1479
1480<script> 1481(function () { 1482 if (window.__clipchatLessonSwitcher) { return; } 1483 window.__clipchatLessonSwitcher = true; 1484 1485 function rememberFullLesson(root) { 1486 var full = root && root.querySelector('[data-lesson-panel="full"]'); 1487 if (full && !full._lessonOriginalMarkup) { 1488 full._lessonOriginalMarkup = full.innerHTML; 1489 } 1490 return full; 1491 } 1492 1493 function paintTab(tab, active) { 1494 tab.setAttribute('aria-selected', active ? 'true' : 'false'); 1495 tab.tabIndex = active ? 0 : -1; 1496 tab.style.background = active ? '#C41A0A' : 'transparent'; 1497 tab.style.color = active ? '#FFFFFF' : '#5B554F'; 1498 tab.style.borderColor = active ? '#C41A0A' : 'transparent'; 1499 } 1500 1501 function resetFullLesson(full) { 1502 if (!full) { return; } 1503 var frame = full.querySelector('iframe'); 1504 if (frame && full._lessonOriginalMarkup) { 1505 full.innerHTML = full._lessonOriginalMarkup; 1506 } 1507 delete full.dataset.ytLoaded; 1508 delete full.dataset.ytOpen; 1509 } 1510 1511 function selectLesson(root, mode) { 1512 if (!root || (mode !== 'quick' && mode !== 'full')) { return; } 1513 var full = rememberFullLesson(root); 1514 root.querySelectorAll('[data-lesson-tab]').forEach(function (tab) { 1515 paintTab(tab, tab.dataset.lessonTab === mode); 1516 }); 1517 root.querySelectorAll('[data-lesson-panel]').forEach(function (panel) { 1518 var active = panel.dataset.lessonPanel === mode; 1519 panel.hidden = !active; 1520 panel.style.display = active ? 'block' : 'none'; 1521 panel.setAttribute('aria-hidden', active ? 'false' : 'true'); 1522 if (!active) { panel.querySelectorAll('video').forEach(function (video) { video.pause(); }); } 1523 }); 1524 1525 var quickVideo = root.querySelector('[data-lesson-panel="quick"] video'); 1526 if (mode === 'full' && quickVideo) { quickVideo.pause(); } 1527 if (mode === 'quick') { resetFullLesson(full); } 1528 } 1529 1530 document.querySelectorAll('[data-lesson-switcher]').forEach(function (root) { 1531 rememberFullLesson(root); 1532 if (root.querySelector('[data-lesson-tab="quick"]')) { selectLesson(root, 'quick'); } 1533 }); 1534 1535 document.addEventListener('click', function (event) { 1536 var tab = event.target && event.target.closest ? event.target.closest('[data-lesson-tab]') : null; 1537 if (!tab) { return; } 1538 selectLesson(tab.closest('[data-lesson-switcher]'), tab.dataset.lessonTab); 1539 }, true); 1540 1541 document.addEventListener('keydown', function (event) { 1542 var tab = event.target && event.target.closest ? event.target.closest('[data-lesson-tab]') : null; 1543 if (!tab || (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')) { return; } 1544 event.preventDefault(); 1545 var root = tab.closest('[data-lesson-switcher]'); 1546 var nextMode = tab.dataset.lessonTab === 'quick' ? 'full' : 'quick'; 1547 selectLesson(root, nextMode); 1548 var next = root.querySelector('[data-lesson-tab="' + nextMode + '"]'); 1549 if (next) { next.focus(); } 1550 }, true); 1551})(); 1552</script>
1552 1553
1554<script> 1555(function () { 1556 var pending = null; 1557 var assignment = null; 1558 var pricingVisited = window.location.hash === '#pricing'; 1559 var choiceSelector = '[data-clipchat-funnel-choice="1"]'; 1560 1561 function syncChoiceVisibility() { 1562 if (!assignment || assignment.experiment_id !== 'clipchat_funnel_v2') { return; } 1563 var visible = assignment.variant === 'pricing_choice'; 1564 document.querySelectorAll(choiceSelector).forEach(function (element) { 1565 var display = visible ? 'grid' : 'none'; 1566 var ariaHidden = visible ? 'false' : 'true'; 1567 if (element.style.display !== display) { element.style.display = display; } 1568 if (element.getAttribute('aria-hidden') !== ariaHidden) { 1569 element.setAttribute('aria-hidden', ariaHidden); 1570 } 1571 }); 1572 } 1573 1574 // The landing renderer can replace or rehydrate template nodes after the 1575 // experiment response arrives. Keep the test-only choice in sync when that 1576 // happens; otherwise a pricing_choice visitor can lose the block again. 1577 if (typeof MutationObserver === 'function' && document.documentElement) { 1578 new MutationObserver(function (mutations) { 1579 var changed = mutations.some(function (mutation) { 1580 if (mutation.type === 'attributes') { 1581 return mutation.target.matches && mutation.target.matches(choiceSelector); 1582 } 1583 return Array.prototype.some.call(mutation.addedNodes || [], function (node) { 1584 return node.nodeType === 1 && ( 1585 (node.matches && node.matches(choiceSelector)) || 1586 (node.querySelector && node.querySelector(choiceSelector)) 1587 ); 1588 }); 1589 }); 1590 if (changed) { syncChoiceVisibility(); } 1591 }).observe(document.documentElement, { 1592 childList: true, 1593 subtree: true, 1594 attributes: true, 1595 attributeFilter: ['style', 'aria-hidden'] 1596 }); 1597 } 1598 1599 function showPricing() { 1600 pricingVisited = true; 1601 var section = document.querySelector('#pricing'); 1602 if (!section) { 1603 window.location.hash = '#pricing'; 1604 return; 1605 } 1606 1607 var reduceMotion = window.matchMedia && 1608 window.matchMedia('(prefers-reduced-motion: reduce)').matches; 1609 var nav = document.querySelector('[data-screen-label="Nav"]'); 1610 var navBox = nav && nav.getBoundingClientRect(); 1611 // The desktop nav can be translated out while scrolling down, then return 1612 // as this upward scroll starts. Reserve its height, not its hidden bottom. 1613 var offset = navBox ? Math.max(0, navBox.height, navBox.bottom) + 16 : 16; 1614 window.scrollTo({ top: Math.max(0, section.getBoundingClientRect().top + window.scrollY - offset), behavior: reduceMotion ? 'auto' : 'smooth' }); 1615 if (window.history && window.history.replaceState) { 1616 window.history.replaceState(null, '', '#pricing'); 1617 } 1618 } 1619 1620 // Also used by the secondary preview: it must show pricing (not infer a paid 1621 // route) while retaining the same fixed-navigation offset and motion policy. 1622 window.ClipChatShowPricing = showPricing; 1623 1624 function applyAssignment(result) { 1625 if (!result || result.experiment_id !== 'clipchat_funnel_v2') { return result; } 1626 assignment = result; 1627 try { window.localStorage.setItem('clipchat_funnel_variant_v2', result.variant); } catch (error) {} 1628 syncChoiceVisibility(); 1629 try { 1630 var eventKey = 'clipchat_funnel_assigned:' + result.variant; 1631 if (!window.sessionStorage.getItem(eventKey) && typeof window.gtag === 'function') { 1632 window.sessionStorage.setItem(eventKey, '1'); 1633 window.gtag('event', 'clipchat_funnel_assigned', { 1634 experiment: result.experiment_id, 1635 variant: result.variant 1636 }); 1637 } 1638 } catch (error) {} 1639 return result; 1640 } 1641 1642 function assignmentHeaders() { 1643 var headers = { 'Content-Type': 'application/json' }; 1644 try { 1645 var token = localStorage.getItem('authToken') || localStorage.getItem('token'); 1646 if (token) { headers.Authorization = 'Bearer ' + token; } 1647 var selected = localStorage.getItem('selectedAccountId'); 1648 if (selected) { headers['X-Selected-Account-Id'] = selected; } 1649 } catch (error) {} 1650 return headers; 1651 } 1652 1653 function loadAssignment() { 1654 if (assignment) { return Promise.resolve(assignment); } 1655 if (pending) { return pending; } 1656 var controller = typeof AbortController === 'function' ? new AbortController() : null; 1657 var timeout = controller ? setTimeout(function () { controller.abort(); }, 2500) : null; 1658 pending = fetch('/api/clipchat/funnel-experiment', { 1659 method: 'GET', credentials: 'same-origin', headers: assignmentHeaders(), 1660 signal: controller ? controller.signal : undefined 1661 }).then(function (response) { 1662 if (!response.ok) { throw new Error('Experiment unavailable'); } 1663 return response.json(); 1664 }).then(applyAssignment).finally(function () { 1665 if (timeout) { clearTimeout(timeout); } 1666 pending = null; 1667 }); 1668 return pending; 1669 } 1670 1671 document.addEventListener('click', function (event) { 1672 var action = event.target && event.target.closest && event.target.closest('[data-clipchat-funnel-action]'); 1673 if (!action || !assignment || typeof window.gtag !== 'function') { return; } 1674 window.gtag('event', 'clipchat_funnel_choice', { 1675 experiment: assignment.experiment_id, 1676 variant: assignment.variant, 1677 choice: action.getAttribute('data-clipchat-funnel-action') 1678 }); 1679 }); 1680 1681 window.ClipChatPrimaryCta = function () { 1682 var buttons = document.querySelectorAll('[data-magnet]'); 1683 buttons.forEach(function (button) { button.setAttribute('aria-busy', 'true'); }); 1684 1685 var route = loadAssignment().then(function (result) { 1686 // pricing_choice intentionally sends the first CTA to the tariff block. 1687 // Once the visitor has seen that block, the next CTA continues to the 1688 // promised track upload instead of looping back to the same prices. 1689 if (result && result.variant === 'pricing_choice' && pricingVisited) { 1690 window.location.assign('/create/clipboard'); 1691 } else if (result && result.primary_path === '/create/clipboard') { 1692 window.location.assign('/create/clipboard'); 1693 } else { showPricing(); } 1694 }).catch(showPricing).finally(function () { 1695 buttons.forEach(function (button) { button.removeAttribute('aria-busy'); }); 1696 }); 1697 return route; 1698 }; 1699 1700 if (document.readyState === 'loading') { 1701 document.addEventListener('DOMContentLoaded', function () { loadAssignment().catch(function () {}); }); 1702 } else { loadAssignment().catch(function () {}); } 1703})(); 1704</script>
1704 1705
1706<script> 1707(function () { 1708 document.addEventListener('click', function (ev) { 1709 var box = ev.target && ev.target.closest ? ev.target.closest('[data-yt]') : null; 1710 if (!box || box.dataset.ytOpen) { return; } 1711 box.dataset.ytOpen = '1'; 1712 var f = document.createElement('iframe'); 1713 f.src = 'https://www.youtube-nocookie.com/embed/' + box.dataset.yt + 1714 '?autoplay=1&rel=0&modestbranding=1'; 1715 f.allow = 'accelerometer; autoplay; encrypted-media; picture-in-picture'; 1716 f.allowFullscreen = true; 1717 f.setAttribute('title', box.getAttribute('data-yt-title') || 'ClipChat'); 1718 f.style.cssText = 'position:absolute;inset:0;width:100%;height:100%;border:0;z-index:9'; 1719 box.appendChild(f); 1720 }, true); 1721})(); 1722</script>
1722 1723
1724<script> 1725(function () { 1726 // ÐоÑедÑÐµÐ¼Ñ â «ÐÑкÑÑÑÑ ÑÑÑдиÑ» вмеÑÑо «ÐойÑи», и пеÑÐµÑ Ð²Ð°Ñ Ñнимаем: инаÑе 1727 // shared/_inline_auth_scripts Ñнова попÑоÑÐ¸Ñ ÐµÐ³Ð¾ залогиниÑÑÑÑ. 1728 var STUDIO = "Open studio"; 1729 1730 function token() { 1731 try { 1732 var t = localStorage.getItem('authToken') || localStorage.getItem('token'); 1733 if (!t) { return null; } 1734 var p = JSON.parse(atob(t.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'))); 1735 if (p && p.exp && p.exp * 1000 <= Date.now()) { return null; } 1736 return t; 1737 } catch (e) { return null; } 1738 } 1739 1740 function mark() { 1741 if (!token()) { return; } 1742 document.querySelectorAll('[data-v5-signin]').forEach(function (a) { 1743 if (a.dataset.v5Signed) { return; } 1744 a.dataset.v5Signed = '1'; 1745 a.removeAttribute('data-open-auth'); 1746 a.setAttribute('href', '/create/clipboard'); 1747 a.textContent = STUDIO; 1748 }); 1749 } 1750 1751 mark(); 1752 new MutationObserver(mark).observe(document.documentElement, { childList: true, subtree: true }); 1753})(); 1754</script>
1754 1755
1756<script>window.T5 = {"d007":"Upload your track","d200":"INTRO","d201":"VERSE 1","d202":"CHORUS","d203":"VERSE 2","d204":"BRIDGE","d205":"OUTRO","d206":"DROP","d207":"VERSE","d208":"Reading your trackâ¦","d209":"Scene plan ready â","d210":"SCENE 07 · TAKE 1","d211":"SCENE 07 · TAKE 2","d212":"⺠Back to take 1","d213":"⺠Replay","d214":"â» Re-roll scene 7 · ~$1.40","d215":"â¶ Director's reply","d216":"â¶ Play the conversation","m169":"INTRO","m170":"VERSE 1","m171":"CHORUS","m172":"VERSE 2","m173":"BRIDGE","m180":"scenes","m181":"· lip-sync","m184":"Reading your trackâ¦","m185":"Scene plan ready","m186":"Couldn't read it","m187":"Create a music video","m188":"don't close the page","m189":"see the storyboard â","m190":"tap to try again","m191":"the AI listens and shoots","p1Cr":"142,000","p1Videos":"â15 à 20s","p2Cr":"260,000","p2Videos":"â30 à 20s","p3Cr":"600,000","p3Videos":"â72 à 20s","x068":"â Director","x069":"Listened through. 140 BPM, phonk in A minor, Russian vocals about leaving at dawn. I'd shoot two worlds: a night gas station and a dawn ritual in the desert. Lip sync on the choruses.","x070":"You","x071":"Darker","x072":"Dropping the dawn. Everything stays in the night: cold neon at the station, smoke, headlights in frame. Harder contrast, tighter on your face.","x073":"More performance","x074":"Adding a performance block: you at the speaker stack, the camera orbits, lip-sync now on verse two as well. That takes it to 28 scenes.","x075":"~24 scenes · lip-sync: choruses · worlds: 1 (night) · no dawn","x076":"~28 scenes · lip-sync: choruses + verse 2 · worlds: 2 · performance block","x077":"~24 scenes · lip-sync: choruses · worlds: 2 · no piano","x078":"Come back â your clip is waiting","introOfferExpiresAt":"2026-10-05T14:55:29Z","p1BaseLabel":"START $27","p1Label":"START $13.50","p2BaseLabel":"PRO $49","p2Label":"PRO $24.50","p3BaseLabel":"MAX $120","p3Label":"MAX $60"};</script>
1756 1757
1758<script type="text/x-dc" data-dc-script data-props="{"nick1":{"editor":"text","default":"sveta.v.reels","tsType":"string","section":"Ðики в оÑзÑÐ²Ð°Ñ "},"nick2":{"editor":"text","default":"maya.songs","tsType":"string","section":"Ðики в оÑзÑÐ²Ð°Ñ "},"nick3":{"editor":"text","default":"boonmadeit","tsType":"string","section":"Ðики в оÑзÑÐ²Ð°Ñ "},"nick4":{"editor":"text","default":"irina.pavlowa","tsType":"string","section":"Ðики в оÑзÑÐ²Ð°Ñ "},"clip1Url":{"editor":"text","default":"https://s3.regru.cloud/doitong/video/clipchat_landing_assets/unethical-2.mp4","tsType":"string","section":"Ðидео в каÑÑÑели"},"clip2Url":{"editor":"text","default":"https://content.doitong.com/video/clipchat_landing/clip1.mp4","tsType":"string","section":"Ðидео в каÑÑÑели"},"clip3Url":{"editor":"text","default":"https://content.doitong.com/video/clipchat_landing/clip2.mp4","tsType":"string","section":"Ðидео в каÑÑÑели"},"clip4Url":{"editor":"text","default":"https://content.doitong.com/video/clipchat_demos/rita_up.mp4","tsType":"string","section":"Ðидео в каÑÑÑели"}}"> 1759class Component extends DCLogic {
1760 _db() { 1761 if (this._dbp) { return this._dbp; } 1762 this._dbp = new Promise((res, rej) => { 1763 const r = indexedDB.open('clipchat-carousel', 1); 1764 r.onupgradeneeded = () => { r.result.createObjectStore('clips'); }; 1765 r.onsuccess = () => res(r.result); 1766 r.onerror = () => rej(r.error); 1767 }); 1768 return this._dbp; 1769 } 1770 1771 async _saveClip(i, blob) { 1772 const db = await this._db(); 1773 await new Promise((res, rej) => { 1774 const tx = db.transaction('clips', 'readwrite'); 1775 tx.objectStore('clips').put(blob, 'clip' + i); 1776 tx.oncomplete = res; 1777 tx.onerror = () => rej(tx.error); 1778 }); 1779 } 1780 1781 async _dropClip(i) { 1782 try { 1783 const db = await this._db(); 1784 db.transaction('clips', 'readwrite').objectStore('clips').delete('clip' + i); 1785 } catch (err) { /* ignore */ } 1786 } 1787 1788 async _loadClips() { 1789 const db = await this._db(); 1790 const out = {}; 1791 await Promise.all([0, 1, 2, 3, 7, 8, 9].map(i => new Promise((res) => { 1792 const rq = db.transaction('clips', 'readonly').objectStore('clips').get('clip' + i); 1793 rq.onsuccess = () => { 1794 const b = rq.result; 1795 if (b && b.size > 0 && (b.type || '').indexOf('video') === 0) { out['u' + i] = URL.createObjectURL(b); } 1796 res(); 1797 }; 1798 rq.onerror = () => res(); 1799 }))); 1800 if (Object.keys(out).length) { this.setState(out); } 1801 } 1802 1803 async _savePhoto(key, blob) { 1804 const db = await this._db(); 1805 await new Promise((res, rej) => { 1806 const tx = db.transaction('clips', 'readwrite'); 1807 tx.objectStore('clips').put(blob, 'photo-' + key); 1808 tx.oncomplete = res; 1809 tx.onerror = () => rej(tx.error); 1810 }); 1811 } 1812 1813 async _loadPhotos() { 1814 const db = await this._db(); 1815 const root = this._root || document; 1816 const imgs = Array.from(root.querySelectorAll('img[data-photo]')); 1817 this._photoMap = this._photoMap || {}; 1818 await Promise.all(imgs.map(img => new Promise((res) => { 1819 const key = img.getAttribute('data-photo'); 1820 const rq = db.transaction('clips', 'readonly').objectStore('clips').get('photo-' + key); 1821 rq.onsuccess = () => { 1822 const b = rq.result; 1823 if (b && b.size > 0) { this._photoMap[key] = URL.createObjectURL(b); } 1824 res(); 1825 }; 1826 rq.onerror = () => res(); 1827 }))); 1828 this._applyPhotos(); 1829 } 1830 1831 _applyPhotos() { 1832 const map = this._photoMap || {}; 1833 const root = this._root || document; 1834 Array.from(root.querySelectorAll('img[data-photo]')).forEach(img => { 1835 const url = map[img.getAttribute('data-photo')]; 1836 if (url && img.getAttribute('src') !== url) { img.setAttribute('src', url); } 1837 }); 1838 } 1839 1840 _apply(el, props) { 1841 if (!this._applied) { this._applied = []; } 1842 let rec = this._applied.find(r => r.el === el); 1843 if (!rec) { rec = { el: el, props: {} }; this._applied.push(rec); } 1844 Object.assign(rec.props, props); 1845 Object.keys(props).forEach(k => { el.style[k] = props[k]; }); 1846 } 1847 1848 _syncBg() { 1849 window.ClipchatMedia.scan(); 1850 } 1851 1852 _syncVideos() { 1853 this._syncBg(); 1854 const s = this.state || {}; 1855 const p = this.props || {}; 1856 const srcs = [p.clip1Url, p.clip2Url, p.clip3Url, p.clip4Url].map(window.V5SRC); 1857 const root = this._root || document; 1858 const seen = {}; 1859 Array.from(root.querySelectorAll('#examples video')).forEach(el => { 1860 const i = parseInt(el.getAttribute('data-val'), 10); 1861 const primary = !seen[i]; 1862 seen[i] = true; 1863 if (!primary) { el.muted = true; el.volume = 0; el.setAttribute('preload', 'none'); } 1864 const want = el.getAttribute('data-src') || srcs[i] || ''; 1865 const active = !!s.sound && (s.slide || 0) === i && primary; 1866 const play = el.parentElement && el.parentElement.querySelector('[data-showcase-play]'); 1867 if (play) { 1868 play.style.opacity = active ? '0' : '1'; 1869 play.style.pointerEvents = 'auto'; 1870 play.setAttribute('aria-hidden', 'false'); 1871 play.setAttribute('aria-pressed', active ? 'true' : 'false'); 1872 play.setAttribute('aria-label', play.getAttribute(active ? 'data-pause-label' : 'data-play-label')); 1873 } 1874 el.setAttribute('loop', 'loop'); 1875 window.ClipchatMedia.watch(el, { 1876 // Carousel clips stay on their posters until the visitor presses play. 1877 src: want, play: active, audible: active 1878 }); 1879 }); 1880 } 1881 1882 componentDidUpdate() { 1883 this._syncVideos(); 1884 if (!this._applied) { return; } 1885 this._applied.forEach(r => {
1886 Object.keys(r.props).forEach(k => { 1887 if (r.el.style[k] !== r.props[k]) { r.el.style[k] = r.props[k]; } 1888 }); 1889 }); 1890 } 1891 1892 componentDidMount() { 1893 this._onOfferExpired = () => this.setState({ introOfferExpired: true }); 1894 window.addEventListener('clipchat:intro-offer-expired', this._onOfferExpired); 1895 // РанÑайм ÑдалÑÐµÑ file-controls пÑоÑоÑипа Ñеликом; CSS вÑÑе ÑÑÑÐ°Ñ ÑÐµÑ 1896 // пеÑвÑй ÐºÐ°Ð´Ñ Ð´Ð¾ иниÑиализаÑии компоненÑа. ÐагÑÑзка ÑÑека (#ccFile) вне label. 1897 Array.from(document.querySelectorAll('label input[type="file"]')).forEach(input => { 1898 const label = input.closest('label'); 1899 if (label) { label.remove(); } 1900 }); 1901 // СÑаÑÑе веÑÑии ÑÐ¾Ñ ÑанÑли полÑзоваÑелÑÑкие Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ Ð² бÑаÑзеÑе. 1902 // ÐолÑÑе Ð¸Ñ Ð½Ðµ ÑиÑаем и ÑдалÑем локалÑнÑе blobs пÑи ÑледÑÑÑем оÑкÑÑÑии. 1903 if (window.indexedDB) { 1904 try { window.indexedDB.deleteDatabase('clipchat-carousel'); } catch (err) { /* ignore */ } 1905 } 1906 this._syncVideos(); 1907 const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 1908 this._root = document.querySelector('.sc-host') || document.body; 1909 // Restore incoming tariff anchors after the runtime mounts the landing. 1910 if (window.location.hash === '#pricing' && typeof window.ClipChatShowPricing === 'function') { 1911 requestAnimationFrame(() => window.ClipChatShowPricing()); 1912 } 1913 this._carouselCleanups = Array.from(this._root.querySelectorAll('[data-carousel-scroll]')).map((rail) => { 1914 const cards = Array.from(rail.querySelectorAll('[data-carousel-card]')); 1915 const duration = cards.length * 5.04; 1916 let phase = 0; 1917 let drag = null; 1918 const setPhase = (nextPhase) => { 1919 phase = nextPhase; 1920 cards.forEach((card) => { 1921 const baseDelay = Number(card.getAttribute('data-carousel-base-delay')); 1922 // Keep delays non-positive so repeated dragging in either direction 1923 // wraps immediately, including when reduced motion pauses the loop. 1924 const delay = ((baseDelay + phase) % duration + duration) % duration - duration; 1925 card.style.animationDelay = delay.toFixed(3) + 's'; 1926 }); 1927 }; 1928 const startDrag = (event) => { 1929 if (event.button && event.button !== 0) { return; } 1930 if (event.target.closest('button, a, input, label')) { return; } 1931 event.preventDefault(); 1932 drag = { x: event.clientX, phase }; 1933 rail.setAttribute('data-dragging', '1'); 1934 if (rail.setPointerCapture) { rail.setPointerCapture(event.pointerId); } 1935 }; 1936 const moveDrag = (event) => { 1937 if (!drag) { return; } 1938 const delta = event.clientX - drag.x; 1939 if (Math.abs(delta) > 2) { event.preventDefault(); } 1940 setPhase(drag.phase + (delta / 50)); 1941 }; 1942 const endDrag = (event) => { 1943 if (!drag) { return; } 1944 drag = null; 1945 rail.removeAttribute('data-dragging'); 1946 if (rail.releasePointerCapture && rail.hasPointerCapture && rail.hasPointerCapture(event.pointerId)) { rail.releasePointerCapture(event.pointerId); } 1947 }; 1948 const onWheel = (event) => { 1949 const horizontal = event.deltaX || (event.shiftKey ? event.deltaY : 0); 1950 if (!horizontal || Math.abs(horizontal) <= Math.abs(event.deltaY) && !event.shiftKey) { return; } 1951 event.preventDefault(); 1952 const unit = event.deltaMode === 1 ? 16 : (event.deltaMode === 2 ? rail.clientWidth : 1); 1953 setPhase(phase - ((horizontal * unit) / 50)); 1954 }; 1955 const onKeyDown = (event) => { 1956 if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') { return; } 1957 event.preventDefault(); 1958 setPhase(phase + (event.key === 'ArrowLeft' ? 5.04 : -5.04)); 1959 }; 1960 const onFocusIn = (event) => { 1961 const card = event.target.closest('[data-carousel-card]'); 1962 if (!card) { return; } 1963 // Tabbing to an off-screen play button must bring its clip into view. 1964 rail.scrollLeft = 0; 1965 const bounds = rail.getBoundingClientRect(); 1966 const rect = card.getBoundingClientRect(); 1967 if (rect.left < bounds.left + 24 || rect.right > bounds.right - 24) { 1968 setPhase(phase + ((bounds.left + 24 - rect.left) / 50)); 1969 } 1970 }; 1971 rail.addEventListener('pointerdown', startDrag); 1972 rail.addEventListener('pointermove', moveDrag); 1973 rail.addEventListener('pointerup', endDrag); 1974 rail.addEventListener('pointercancel', endDrag); 1975 rail.addEventListener('wheel', onWheel, { passive: false }); 1976 rail.addEventListener('keydown', onKeyDown); 1977 rail.addEventListener('focusin', onFocusIn); 1978 return () => { 1979 rail.removeEventListener('pointerdown', startDrag); 1980 rail.removeEventListener('pointermove', moveDrag); 1981 rail.removeEventListener('pointerup', endDrag); 1982 rail.removeEventListener('pointercancel', endDrag); 1983 rail.removeEventListener('wheel', onWheel); 1984 rail.removeEventListener('keydown', onKeyDown); 1985 rail.removeEventListener('focusin', onFocusIn); 1986 }; 1987 }); 1988 1989 // 1. reveal on scroll (staggered) 1990 if (!reduce) { 1991 const targets = Array.from(this._root.querySelectorAll('section > h2, section > p, section > div > div, section > div, header > div')) 1992 .filter(el => !el.hasAttribute('data-clipchat-tariffs') && !el.closest('[data-screen-label="Hero examples carousel"]') && !el.hasAttribute('data-readbar') && !el.hasAttribute('data-stepsbar') && !el.hasAttribute('data-monbar')); 1993 const seen = new Set();
1994 targets.forEach(el => { 1995 if (seen.has(el) || el.parentElement && seen.has(el.parentElement)) { return; } 1996 seen.add(el); 1997 if (el.style.animation) { return; } 1998 el.style.animation = 'riseIn .6s cubic-bezier(.2,.7,.3,1) both'; 1999 el.style.animationPlayState = 'paused'; 2000 el.setAttribute('data-idreveal', '1'); 2001 }); 2002 this._io = new IntersectionObserver((entries) => { 2003 let n = 0; 2004 entries.forEach(e => { 2005 if (!e.isIntersecting) { return; } 2006 const el = e.target; 2007 this._apply(el, { animationDelay: (n * 60) + 'ms', animationPlayState: 'running' }); 2008 n++; 2009 this._io.unobserve(el); 2010 }); 2011 }, { threshold: 0.12, rootMargin: '0px 0px -8% 0px' }); 2012 seen.forEach(el => this._io.observe(el)); 2013 } 2014 2015 // 2. counters 2016 const nums = Array.from(this._root.querySelectorAll('[data-count]')); 2017 this._cio = new IntersectionObserver((entries) => { 2018 entries.forEach(e => { 2019 if (!e.isIntersecting) { return; } 2020 const el = e.target; 2021 this._cio.unobserve(el); 2022 const target = parseFloat(el.getAttribute('data-count')); 2023 const dec = parseInt(el.getAttribute('data-dec') || '0', 10); 2024 const sep = el.hasAttribute('data-sep'); 2025 const suffix = el.getAttribute('data-suffix') || ''; 2026 const prefix = el.getAttribute('data-prefix') || ''; 2027 const dur = 1300; 2028 const t0 = performance.now(); 2029 const fmt = (v) => { 2030 let s = dec ? v.toFixed(dec).replace('.', ',') : String(Math.round(v)); 2031 if (sep) { s = s.replace(/\B(?=(\d{3})+(?!\d))/g, ' '); } 2032 return prefix + s + suffix; 2033 }; 2034 const tick = (t) => { 2035 const k = Math.min(1, (t - t0) / dur); 2036 const eased = 1 - Math.pow(1 - k, 3); 2037 el.textContent = fmt(target * eased); 2038 if (k < 1) { requestAnimationFrame(tick); } 2039 }; 2040 if (reduce) { el.textContent = fmt(target); } else { requestAnimationFrame(tick); } 2041 }); 2042 }, { threshold: 0.5 }); 2043 nums.forEach(el => this._cio.observe(el)); 2044 2045 // 2b. stars pop when the card scrolls into view 2046 this._sio = new IntersectionObserver((entries) => { 2047 entries.forEach(e => { 2048 if (!e.isIntersecting) { return; } 2049 this._sio.unobserve(e.target); 2050 Array.from(e.target.children).forEach(sp => this._apply(sp, { animationPlayState: 'running' })); 2051 }); 2052 }, { threshold: 0.4 }); 2053 Array.from(this._root.querySelectorAll('[data-stars]')).forEach(el => this._sio.observe(el)); 2054 2055 // 3. scroll driven: reading bar + steps progress 2056 const bar = this._root.querySelector('[data-readbar]'); 2057 const stepsWrap = this._root.querySelector('[data-steps]'); 2058 const stepsBar = this._root.querySelector('[data-stepsbar]'); 2059 const monWrap = this._root.querySelector('[data-mon]'); 2060 const monBar = this._root.querySelector('[data-monbar]'); 2061 this._onScroll = () => { 2062 const doc = document.documentElement; 2063 const max = (doc.scrollHeight - window.innerHeight) || 1; 2064 if (bar) { bar.style.width = Math.min(100, Math.max(0, (window.scrollY / max) * 100)) + '%'; } 2065 if (stepsWrap && stepsBar) { 2066 const r = stepsWrap.getBoundingClientRect(); 2067 const p = (window.innerHeight * 0.62 - r.top) / (r.height || 1); 2068 stepsBar.style.width = Math.min(100, Math.max(0, p * 100)) + '%'; 2069 } 2070 if (monWrap && monBar) { 2071 const r2 = monWrap.getBoundingClientRect(); 2072 const p2 = (window.innerHeight * 0.62 - r2.top) / (r2.height || 1); 2073 monBar.style.width = Math.min(100, Math.max(0, p2 * 100)) + '%'; 2074 } 2075 }; 2076 window.addEventListener('scroll', this._onScroll, { passive: true }); 2077 this._onScroll(); 2078 2079 // 2c. identity section: staged photo reveal + scan sweep + lock pulse 2080 this._idio = new IntersectionObserver((entries) => { 2081 entries.forEach(e => { 2082 if (!e.isIntersecting) { return; } 2083 this._idio.unobserve(e.target); 2084 const el = e.target; 2085 if (el.hasAttribute('data-idlock')) { 2086 const slots = Array.from(el.querySelectorAll('[data-idreveal]')); 2087 const last = slots.length ? slots.length - 1 : 0; 2088 setTimeout(() => { this._apply(el, { animation: 'lockRing 1s ease-out both' }); }, 500 + last * 120); 2089 return; 2090 } 2091 this._apply(el, { animationPlayState: 'running' }); 2092 }); 2093 }, { threshold: 0.08, rootMargin: '0px 0px -5% 0px' }); 2094 Array.from(this._root.querySelectorAll('[data-idreveal],[data-idscan],[data-idlock]')).forEac
2094h(el => this._idio.observe(el)); 2095 2096 // safety: never leave a photo hidden if the observer misses it 2097 this._idFallback = setInterval(() => { 2098 Array.from(this._root.querySelectorAll('[data-idreveal],[data-idscan]')).forEach(el => { 2099 const r = el.getBoundingClientRect(); 2100 const onScreen = r.top < window.innerHeight && r.bottom > 0; 2101 if (onScreen && getComputedStyle(el).animationPlayState === 'paused') { 2102 this._apply(el, { animationPlayState: 'running' }); 2103 } 2104 }); 2105 }, 900); 2106 2107 // 3c. live render counter 2108 this._liveTimer = setInterval(() => { 2109 const cur = (this.state || {}).liveNow || 370; 2110 const next = Math.max(280, Math.min(640, cur + (Math.random() < 0.5 ? -1 : 1) * (2 + Math.floor(Math.random() * 12)))); 2111 this.setState({ liveNow: next }); 2112 }, 3200); 2113 2114 // 3d. drop videos that fail to decode (stale saved file) 2115 this._onVidErr = (ev) => { 2116 const el = ev.target; 2117 if (!el || el.tagName !== 'VIDEO') { return; } 2118 const i = parseInt(el.getAttribute('data-val'), 10); 2119 if (isNaN(i)) { return; } 2120 const patch = {}; 2121 patch['u' + i] = null; 2122 this.setState(patch); 2123 this._dropClip(i); 2124 }; 2125 this._root.addEventListener('error', this._onVidErr, true); 2126 2127 // 3e. synchronize click-only playback once the elements exist 2128 this._kick = setTimeout(() => this._syncVideos(), 300); 2129 2130 // 3f. magnetic buttons 2131 Array.from(this._root.querySelectorAll('[data-magnet]')).forEach(btn => { 2132 const reset = () => { btn.style.transform = ''; btn.style.transition = 'transform .45s cubic-bezier(.2,1.5,.4,1)'; }; 2133 btn.addEventListener('pointermove', (ev) => { 2134 const r = btn.getBoundingClientRect(); 2135 const dx = (ev.clientX - (r.left + r.width / 2)) / (r.width / 2); 2136 const dy = (ev.clientY - (r.top + r.height / 2)) / (r.height / 2); 2137 btn.style.transition = 'transform .08s linear'; 2138 btn.style.transform = 'translate(' + (dx * 6).toFixed(1) + 'px,' + (dy * 4).toFixed(1) + 'px) scale(1.02)'; 2139 }); 2140 btn.addEventListener('pointerleave', reset); 2141 btn.addEventListener('pointerup', reset); 2142 btn.addEventListener('pointercancel', reset); 2143 }); 2144 2145 // 5+6+8. section rail, parallax, warm shift 2146 const rail = this._root.querySelector('[data-rail]'); 2147 const warm = this._root.querySelector('[data-warm]'); 2148 const secs = Array.from(this._root.querySelectorAll('[data-screen-label]')).filter(el => el.offsetHeight > 200); 2149 if (rail) { 2150 secs.forEach((el, k) => { 2151 const dot = document.createElement('div'); 2152 dot.setAttribute('data-railitem', String(k)); 2153 dot.style.cssText = "font-family:'Space Mono',monospace;font-size:8px;letter-spacing:0.1em;color:rgba(244,241,234,0.35);display:flex;align-items:center;gap:6px;transition:color .3s ease"; 2154 dot.innerHTML = '<span style="display:inline-block;width:0;height:1px;background:#FF3D2E;transition:width .3s ease"></span>' + String(k + 1).padStart(2, '0'); 2155 rail.appendChild(dot); 2156 }); 2157 } 2158 const pricingEl = this._root.querySelector('#pricing'); 2159 this._fx = () => { 2160 const vh = window.innerHeight; 2161 // parallax 2162 Array.from(this._root.querySelectorAll('[data-parallax]')).forEach(el => { 2163 const dir = parseFloat(el.getAttribute('data-parallax')) || 0; 2164 const r = el.getBoundingClientRect(); 2165 const p = (r.top + r.height / 2 - vh / 2) / vh; 2166 el.style.objectPosition = '50% ' + (30 + dir * p * 12).toFixed(1) + '%'; 2167 el.style.transform = 'translateY(' + (dir * p * -10).toFixed(1) + 'px)'; 2168 }); 2169 // rail 2170 if (rail) { 2171 const scrolled = window.scrollY > vh * 0.6; 2172 rail.style.opacity = scrolled ? '1' : '0'; 2173 let active = 0; 2174 secs.forEach((el, k) => { if (el.getBoundingClientRect().top < vh * 0.45) { active = k; } }); 2175 Array.from(rail.children).forEach((d, k) => { 2176 d.style.color = k === active ? '#F4F1EA' : 'rgba(244,241,234,0.32)'; 2177 d.firstChild.style.width = k === active ? '14px' : '0'; 2178 }); 2179 } 2180 // warm shift near pricing 2181 if (warm && pricingEl) { 2182 const r = pricingEl.getBoundingClientRect(); 2183 const near = 1 - Math.min(1, Math.max(0, (r.top - vh * 0.1) / vh)); 2184 warm.style.opacity = (near * (r.bottom > 0 ? 1 : 0)).toFixed(3); 2185 } 2186 }; 2187 this._fx(); 2188 window.addEventListener('scroll', this._fx, { passive: true }); 2189 window.addEventListener('resize', this._fx); 2190 2191 // 3g. audience cards: image zoom on hover 2192 Array.from(this._root.querySelectorAll('[data-aud]')).forEac
2192h(cardEl => { 2193 const img = cardEl.querySelector('[data-audimg]'); 2194 if (!img) { return; } 2195 cardEl.addEventListener('pointerenter', () => { img.style.transform = 'scale(1.09)'; }); 2196 cardEl.addEventListener('pointerleave', () => { img.style.transform = 'scale(1)'; }); 2197 }); 2198 2199 // 3j. identity scene tiles cycle 2200 this._scTimer = setInterval(() => { 2201 const cur = (this.state || {}).sc || 0; 2202 this.setState({ sc: (cur + 1) % 6 }); 2203 }, 1400); 2204 2205 // 3k. pause the clip lanes on hover so uploads are clickable 2206 const lanes = this._root.querySelector('[data-lanes]'); 2207 if (lanes) { 2208 const rows = Array.from(lanes.children).map(row => { 2209 if (getComputedStyle(row).animationName !== 'none') { return row; } 2210 return Array.from(row.querySelectorAll('*')).find(el => getComputedStyle(el).animationName !== 'none') || row; 2211 }); 2212 const base = rows.map(r => parseFloat(getComputedStyle(r).animationDuration) || 46); 2213 const apply = (mult) => rows.forEach((r, k) => { r.style.animationDuration = (base[k] * mult) + 's'; }); 2214 lanes.addEventListener('pointerenter', () => apply(5)); 2215 lanes.addEventListener('pointerleave', () => apply(1)); 2216 Array.from(lanes.querySelectorAll('[data-clip]')).forEach(tile => { 2217 tile.addEventListener('pointerenter', () => { 2218 Array.from(lanes.querySelectorAll('[data-clip]')).forEach(o => { o.style.opacity = o === tile ? '1' : '0.35'; }); 2219 }); 2220 tile.addEventListener('pointerleave', () => { 2221 Array.from(lanes.querySelectorAll('[data-clip]')).forEach(o => { o.style.opacity = '1'; }); 2222 }); 2223 }); 2224 } 2225 2226 // 3i. audience cards autoplay 2227 this._audTimer = setInterval(() => { 2228 if (this._audHold) { return; } 2229 const cur = (this.state || {}).aud || 0; 2230 this.setState({ aud: (cur + 1) % 3 }); 2231 }, 3600); 2232 2233 // 3h. monetization tabs autoplay 2234 2235 2236 // 3p. testimonial stack autoplay 2237 this._tmTimer = setInterval(() => { 2238 if (this._tmHold) { return; } 2239 this.setState({ tm: (((this.state || {}).tm || 0) + 1) % 4 }); 2240 }, 4200); 2241 2242 // 3o. 3D tilt on cards 2243 if (window.matchMedia('(pointer:fine)').matches) { 2244 Array.from(this._root.querySelectorAll('[data-aud], figure[data-aud], [data-clip]:not([data-carousel-card])')).forEach(card => { 2245 const base = card.style.transform || ''; 2246 card.style.transformStyle = 'preserve-3d'; 2247 card.addEventListener('pointermove', (ev) => { 2248 const r = card.getBoundingClientRect(); 2249 const dx = (ev.clientX - (r.left + r.width / 2)) / (r.width / 2); 2250 const dy = (ev.clientY - (r.top + r.height / 2)) / (r.height / 2); 2251 card.style.transition = 'transform .12s linear'; 2252 card.style.transform = base + ' perspective(900px) rotateY(' + (dx * 6).toFixed(2) + 'deg) rotateX(' + (-dy * 6).toFixed(2) + 'deg) translateZ(6px)'; 2253 }); 2254 const reset = () => { 2255 card.style.transition = 'transform .6s cubic-bezier(.2,.9,.3,1)'; 2256 card.style.transform = base; 2257 }; 2258 card.addEventListener('pointerleave', reset); 2259 card.addEventListener('pointercancel', reset); 2260 }); 2261 } 2262 2263 // 3n. nav hide/show + adaptive vignette 2264 const nav = this._root.querySelector('[data-nav]'); 2265 const vig = this._root.querySelector('[data-vignette]'); 2266 if (nav) { nav.style.transition = 'transform .45s cubic-bezier(.2,.8,.3,1),background .4s ease'; } 2267 let lastY = window.scrollY; 2268 this._navScroll = () => { 2269 const y = window.scrollY; 2270 if (nav) { 2271 if (y < 80) { nav.style.transform = 'translateY(0)'; } 2272 else if (y > lastY + 4) { nav.style.transform = 'translateY(-110%)'; } 2273 else if (y < lastY - 4) { nav.style.transform = 'translateY(0)'; } 2274 } 2275 if (vig) { 2276 const mid = document.elementFromPoint(window.innerWidth / 2, window.innerHeight / 2); 2277 const sec = mid && mid.closest ? mid.closest('[data-screen-label]') : null; 2278 const light = sec && /Video lesson/.test(sec.getAttribute('data-screen-label') || ''); 2279 vig.style.opacity = light ? '0.15' : '0.85'; 2280 } 2281 lastY = y; 2282 }; 2283 this._navScroll(); 2284 window.addEventListener('scroll', this._navScroll, { passive: true }); 2285 2286 // 3m. tab title + favicon 2287 this._title = document.title; 2288 const setFavicon = (dot) => { 2289 let link = document.querySelector('link[rel="icon"]'); 2290 if (!link) { link = document.createElement('link'); link.rel = 'icon'; document.head.appendChild(link); } 2291 const svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><rect width="32" height="32" rx="7" fill="%230A0A0C"/><circle cx="16" cy="16" r="' + (dot ? 9 : 6) + '" fill="%23FF3D2E"/></svg>'; 2292 link.href = 'data:image/svg+xml,' + svg; 2293 }; 2294 setFavicon(false); 2295 this._onVis = () => { 2296 if (document.hidden) { 2297 document.title = (window.T5&&window.T5['x078']||"ÐеÑниÑÑ - Ñвой клип ждÑÑ"); 2298 clearInterval(this._favTimer); 2299 let on = false;
2300 this._favTimer = setInterval(() => { on = !on; setFavicon(on); }, 700); 2301 } else { 2302 document.title = this._title; 2303 clearInterval(this._favTimer); 2304 setFavicon(false); 2305 } 2306 }; 2307 document.addEventListener('visibilitychange', this._onVis); 2308 2309 // 3l. multi-layer parallax 2310 const pxLayers = []; 2311 Array.from(this._root.querySelectorAll('[data-screen-label]')).forEach(sec => { 2312 const bg = Array.from(sec.querySelectorAll(':scope > span, :scope > div > span')).filter(el => /radial-gradient|blur\(/.test(el.getAttribute('style') || '')); 2313 bg.forEach(el => pxLayers.push([el, 0.16])); 2314 const h2 = sec.querySelector('h1, h2'); 2315 if (h2) { pxLayers.push([h2, 0.05]); } 2316 Array.from(sec.querySelectorAll('[data-aud]')).forEach((el, k) => pxLayers.push([el, k % 2 === 0 ? -0.04 : -0.075])); 2317 }); 2318 this._px = () => { 2319 const vh = window.innerHeight; 2320 pxLayers.forEach(([el, rate]) => { 2321 const r = el.getBoundingClientRect(); 2322 const p = (r.top + r.height / 2 - vh / 2) / vh; 2323 const y = -(p * rate * 100); 2324 const base = el.getAttribute('data-pxbase'); 2325 if (base === null) { el.setAttribute('data-pxbase', el.style.transform || ''); } 2326 const b = el.getAttribute('data-pxbase') || ''; 2327 el.style.transform = (b ? b + ' ' : '') + 'translate3d(0,' + y.toFixed(1) + 'px,0)'; 2328 }); 2329 }; 2330 this._px(); 2331 window.addEventListener('scroll', this._px, { passive: true }); 2332 window.addEventListener('resize', this._px); 2333 2334 // 3k. custom cursor 2335 const cur = this._root.querySelector('[data-cursor]'); 2336 const curLabel = this._root.querySelector('[data-cursorlabel]'); 2337 if (cur && window.matchMedia('(pointer:fine)').matches) { 2338 let raf = null, tx = -100, ty = -100; 2339 const move = (ev) => { 2340 tx = ev.clientX; ty = ev.clientY; 2341 cur.style.opacity = '1'; 2342 if (raf) { return; } 2343 raf = requestAnimationFrame(() => { 2344 cur.style.transform = 'translate3d(' + tx + 'px,' + ty + 'px,0)'; 2345 raf = null; 2346 }); 2347 }; 2348 window.addEventListener('pointermove', move, { passive: true }); 2349 const setMode = (mode) => { 2350 if (mode === 'play') { 2351 cur.style.width = '64px'; cur.style.height = '64px'; cur.style.margin = '-32px 0 0 -32px'; 2352 cur.style.background = 'rgba(244,241,234,0.92)'; cur.style.borderColor = 'transparent'; 2353 if (curLabel) { curLabel.textContent = 'â¶'; curLabel.style.opacity = '1'; } 2354 } else if (mode === 'link') { 2355 cur.style.width = '44px'; cur.style.height = '44px'; cur.style.margin = '-22px 0 0 -22px'; 2356 cur.style.background = 'rgba(255,61,46,0.9)'; cur.style.borderColor = 'transparent'; 2357 if (curLabel) { curLabel.textContent = ''; curLabel.style.opacity = '0'; } 2358 } else { 2359 cur.style.width = '26px'; cur.style.height = '26px'; cur.style.margin = '-13px 0 0 -13px'; 2360 cur.style.background = 'transparent'; cur.style.borderColor = 'rgba(244,241,234,0.5)'; 2361 if (curLabel) { curLabel.style.opacity = '0'; } 2362 } 2363 }; 2364 document.addEventListener('pointerover', (ev) => { 2365 const t = ev.target; 2366 if (!t || !t.closest) { return; } 2367 if (t.closest('video, [data-clip], [data-lessonvideo]')) { setMode('play'); } 2368 else if (t.closest('button, a, label, [role="button"]')) { setMode('link'); } 2369 else { setMode('idle'); } 2370 }, { passive: true }); 2371 } 2372 2373 } 2374 2375 componentWillUnmount() { 2376 window.removeEventListener('clipchat:intro-offer-expired', this._onOfferExpired); 2377 if (this._io) { this._io.disconnect(); } 2378 if (this._cio) { this._cio.disconnect(); } 2379 if (this._sio) { this._sio.disconnect(); } 2380 if (this._idio) { this._idio.disconnect(); } 2381 if (this._idFallback) { clearInterval(this._idFallback); } 2382 if (this._timer) { clearInterval(this._timer); } 2383 if (this._liveTimer) { clearInterval(this._liveTimer); } 2384 if (this._pctTimer) { clearInterval(this._pctTimer); } 2385 if (this._onVidErr && this._root) { this._root.removeEventListener('error', this._onVidErr, true); }
2386 (this._carouselCleanups || []).forEach(cleanup => cleanup()); 2387 window.removeEventListener('scroll', this._onScroll); 2388 } 2389 2390 renderVals() { 2391 const s = this.state || {}; 2392 const demo = s.demo || 'idle'; 2393 const faq = (s.faq === undefined) ? -1 : s.faq; 2394 const menuOpen = !!s.menuOpen; 2395 const self = this; 2396 2397 const mk = (i) => ({ 2398 st: 'font-size:13px;line-height:1.6;color:var(--dim);margin:0;overflow:hidden;transition:max-height .34s cubic-bezier(.2,.7,.3,1),opacity .26s ease,padding .3s ease;' 2399 + (faq === i ? 'max-height:320px;opacity:1;padding:0 0 16px 0' : 'max-height:0;opacity:0;padding:0'), 2400 sym: faq === i ? '\u2212' : '+', 2401 symSt: 'position:absolute;right:2px;top:18px;color:var(--acc);font-size:21px;line-height:1;display:inline-block;transform-origin:50% 52%;transition:transform .34s cubic-bezier(.2,.8,.3,1);' 2402 + (faq === i ? 'transform:rotate(135deg)' : 'transform:rotate(0deg)') 2403 }); 2404 const f = [0,1,2,3,4,5,6].map(mk); 2405 2406 const slide = s.slide || 0; 2407 const drag = s.dragX || 0; 2408 const dragging = !!s.dragging; 2409 const STEP = 268; 2410 const CARD_COUNT = 8; 2411 const carousel = {}; 2412 for (let i = 0; i < CARD_COUNT; i++) { 2413 let off = i - slide; 2414 if (off > Math.floor(CARD_COUNT / 2)) { off -= CARD_COUNT; } 2415 if (off < -Math.floor(CARD_COUNT / 2)) { off += CARD_COUNT; } 2416 const fOff = off + (drag / STEP); 2417 const fAbs = Math.min(2, Math.abs(fOff)); 2418 const abs = Math.abs(off); 2419 const vis = true; 2420 const scale = 1 - 0.14 * fAbs; 2421 const blur = fAbs <= 1 ? 3.5 * fAbs : 5 + (fAbs - 1) * 2; 2422 const op = fAbs <= 1 ? (1 - 0.4 * fAbs) : Math.max(0.22, 0.6 - (fAbs - 1) * 0.38); 2423 carousel['c' + i] = 'position:absolute;top:50%;left:50%;width:320px;aspect-ratio:9/14;border-radius:16px;border:1px solid var(--line);overflow:hidden;cursor:grab;touch-action:pan-y;' 2424 + 'transform:translate(-50%,-50%) translateX(' + (fOff * STEP).toFixed(1) + 'px) scale(' + scale.toFixed(3) + ');' 2425 + 'filter:blur(' + blur.toFixed(2) + 'px);opacity:' + op.toFixed(3) + ';' 2426 + 'z-index:' + (10 - abs) + ';pointer-events:' + (vis ? 'auto' : 'none') + ';' 2427 + (dragging ? 'transition:none' : 'transition:transform .42s cubic-bezier(.22,.9,.28,1),filter .35s ease,opacity .35s ease'); 2428 carousel['d' + i] = 'width:' + (i === slide ? 18 : 6) + 'px;height:6px;border-radius:3px;cursor:pointer;background:' + (i === slide ? 'var(--acc)' : 'rgba(244,241,234,0.25)') + ';transition:all .25s ease'; 2429 } 2430 // ---------- interactive waveform ---------- 2431 const SECS = [ 2432 { label: (window.T5&&window.T5['m169']||"ÐÐТРÐ"), n: 5, hot: false, scenes: 3 }, 2433 { label: (window.T5&&window.T5['m170']||"ÐУÐÐÐТ 1"), n: 9, hot: false, scenes: 6 }, 2434 { label: (window.T5&&window.T5['m171']||"ÐÐ ÐÐÐÐ"), n: 8, hot: true, scenes: 5 }, 2435 { label: (window.T5&&window.T5['m172']||"ÐУÐÐÐТ 2"), n: 9, hot: false, scenes: 6 }, 2436 { label: (window.T5&&window.T5['m173']||"ÐÐ ÐÐÐ"), n: 5, hot: false, scenes: 2 }, 2437 { label: (window.T5&&window.T5['m171']||"ÐÐ ÐÐÐÐ"), n: 8, hot: true, scenes: 5 } 2438 ]; 2439 const total = SECS.reduce((a, s) => a + s.n, 0); 2440 const wavePos = (s.wavePos === undefined) ? 0.42 : s.wavePos; 2441 const activeBar = Math.min(total - 1, Math.floor(wavePos * total)); 2442 const waveBars = []; 2443 let idx = 0, activeSec = SECS[0]; 2444 SECS.forEach((sec) => { 2445 for (let i = 0; i < sec.n; i++) { 2446 const h = sec.hot ? 62 + ((i * 37) % 38) : 20 + ((i * 29) % 42); 2447 const near = Math.abs(idx - activeBar) <= 1; 2448 if (idx === activeBar) { activeSec = sec; } 2449 waveBars.push({ st: 'flex:1;min-width:2px;border-radius:1.5px;transition:background .2s,height .2s;height:' + h + '%;background:' 2450 + (near ? 'var(--acc)' : (sec.hot ? 'rgba(255,138,92,0.55)' : 'rgba(244,241,234,0.3)')) 2451 + (near ? ';box-shadow:0 0 14px rgba(255,61,46,0.55)' : '') }); 2452 idx++; 2453 } 2454 }); 2455 2456 // ---------- chat demo ---------- 2457 const tone = s.tone || 'base'; 2458 const bubble = (who) => 'max-width:88%;border-radius:14px;padding:12px 16px;font-size:13px;line-height:1.55;animation:riseIn .45s cubic-bezier(.2,.7,.3,1) both;' 2459 + (who === 'u' 2460 ? 'background:rgba(255,61,46,0.13);border:1px solid rgba(255,61,46,0.35);align-self:flex-end' 2461 : 'background:var(--panel2);border:1px solid var(--line);align-self:flex-start'); 2462 const msgs = [{ st: bubble('d'), tag: (window.T5&&window.T5['x068']||"â РежиÑÑÑÑ"), text: (window.T5&&window.T5['x069']||"ÐоÑлÑÑал. 140 BPM, Ñонк в Ð»Ñ Ð¼Ð¸Ð½Ð¾Ñе, вокал на ÑÑÑÑком - пÑо Ñо, как ÑÑ Ð¾Ð´ÑÑ Ð½Ð° ÑаÑÑвеÑе. СнÑл Ð±Ñ Ð´Ð²Ð° миÑа: ноÑÐ½Ð°Ñ Ð·Ð°Ð¿Ñавка и ÑаÑÑвеÑнÑй ÑиÑÑал в пÑÑÑÑне. ÐипÑинк на пÑÐ¸Ð¿ÐµÐ²Ð°Ñ .") }]; 2463 if (tone === 'dark') { 2464 msgs.push({ st: bubble('u'), tag: (window.T5&&window.T5['x070']||"ТÑ"), text: (window.T5&&window.T5['x071']||"Темнее") }); 2465 msgs.push({ st: bubble('d'), tag: (window.T5&&window.T5['x068']||"â РежиÑÑÑÑ"), text: (window.T5&&window.T5['x072']||"УбиÑÐ°Ñ ÑаÑÑвеÑ. ÐÑÑ Ð´ÐµÑжим в ноÑи: Ñ Ð¾Ð»Ð¾Ð´Ð½Ñй неон запÑавки, дÑм, ÑаÑÑ Ð² кадÑе. ÐонÑÑаÑÑ Ð¶ÑÑÑÑе, лиÑо кÑÑпнее.") }); 2466 } else if (tone === 'perf') { 2467 msgs.push({ st: bubble('u'), tag: (window.T5&&window.T5['x070']||"ТÑ"), text: (window.T5&&window.T5['x073']||"ÐолÑÑе пеÑÑоÑманÑа") }); 2468 msgs.push({ st: bubble('d'), tag: (window.T5&&window.T5['x068']||"â РежиÑÑÑÑ"), text: (window.T5&&window.T5['x074']||"ÐобавлÑÑ Ð±Ð»Ð¾Ðº иÑполнениÑ: ÑÑ Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸, камеÑа кÑÑжиÑ, липÑинк ÑепеÑÑ Ð¸ на вÑоÑом кÑплеÑе. СÑен ÑÑÐ°Ð½ÐµÑ 28.") }); 2469 } 2470 const contractTxt = tone === 'dark' 2471 ? (window.T5&&window.T5['x075']||"~24 ÑÑÐµÐ½Ñ Â· липÑинк: пÑÐ¸Ð¿ÐµÐ²Ñ Â· миÑÑ: 1 (ноÑÑ) · без ÑаÑÑвеÑа") 2472 : (tone === 'perf' ? (window.T5&&window.T5['x076']||"~28 ÑÑен · липÑинк: пÑÐ¸Ð¿ÐµÐ²Ñ + кÑÐ¿Ð»ÐµÑ 2 · миÑÑ: 2 · блок пеÑÑоÑманÑа") : (window.T5&&window.T5['x077']||"~24 ÑÑÐµÐ½Ñ Â· липÑинк: пÑÐ¸Ð¿ÐµÐ²Ñ Â· миÑÑ: 2 · без пианино")); 2473 2474 // ---------- before / after ---------- 2475 const ba = (s.ba === undefined) ? 52 : s.ba; 2476 const baBars = []; 2477 for (let i = 0; i < 26; i++) { 2478 const h = 12 + ((i * 41) % 70); 2479 baBars.push({ st: 'flex:1;height:' + h + '%;max-height:60%;background:rgba(244,241,234,0.28);border-radius:2px' }); 2480 } 2481 2482 // ---------- calculator ---------- 2483 const calcMin = s.calcMin || 5; 2484 const calculator = window.ClipChatLandingCalculator(calcMin, window.T5 || {}); 2485 2486 const p = this.props || {}; 2487 const mon = (this.state || {}).mon || 0; 2488 const aud = (this.state || {}).aud || 0; 2489 const tm = (this.state || {}).tm || 0; 2490 const tmCard = (k) => { 2491 const on = k === tm; 2492 return 'position:relative;margin:0;display:flex;flex-direction:column;justify-content:space-between;gap:18px;background:linear-gradient(168deg,#191920 0%,#0E0E12 72%);border:1px solid ' 2493 + (on ? 'rgba(255,61,46,0.5)' : 'var(--line)') 2494 + ';border-radius:14px;padding:22px 20px;cursor:pointer;transition:transform .7s cubic-bezier(.2,.8,.3,1),opacity .6s ease,border-color .6s ease,box-shadow .6s ease;' 2495 + 'transform:translateY(' + (on ? '-8px' : '0') + ') scale(' + (on ? '1.03' : '0.985') + ');opacity:' + (on ? '1' : '0.5') 2496 + ';box-shadow:' + (on ? '0 30px 66px rgba(0,0,0,0.6),0 0 44px rgba(255,61,46,0.14)' : '0 18px 40px rgba(0,0,0,0.45)') 2497 + ';z-index:' + (on ? 3 : 1); 2498 }; 2499 const tmDot = (k) => 'width:' + (k === tm ? '22px' : '7px') + ';height:7px;border-radius:999px;cursor:pointer;transition:width .5s cubic-bezier(.2,.8,.3,1),background .4s ease;background:' + (k === tm ? 'var(--acc)' : 'rgba(244,241,234,0.28)'); 2500 const sc = (this.state || {}).sc || 0; 2501 const sceneTile = (k) => 'position:relative;aspect-ratio:1/1;border-radius:10px;overflow:hidden;background:#0B0B0E;transition:border-color .5s ease,box-shadow .5s ease,transform .5s cubic-bezier(.2,.8,.3,1),filter .5s ease;border:1px solid ' 2502 + (sc === k ? 'rgba(255,61,46,0.85)' : 'var(--line)') 2503 + ';box-shadow:' + (sc === k ? '0 0 34px rgba(255,61,46,0.30)' : '0 12px 26px rgba(0,0,0,0.4)') 2504 + ';transform:scale(' + (sc === k ? '1.03' : '1') + ');filter:saturate(' + (sc === k ? '1.05' : '0.72') + ') brightness(' + (sc === k ? '1' : '0.78') + ')'; 2505 const sceneMark = () => 'display:none'; 2506 const monRow = () => 'position:relative;display:block;width:100%;text-align:left;border:none;border-radius:10px;cursor:default;padding:22px 22px 22px 24px;background:transparent;opacity:1'; 2507 const monDesc = () => 'display:block;font-size:15px;line-height:1.5;letter-spacing:-0.008em;color:var(--dim);margin-top:10px'; 2508 const monPane = (k) => { 2509 const active = mon === k; 2510 const past = k < mon || (mon === 0 && k === 2); 2511 return 'position:absolute;inset:0;overflow:hidden;transition:clip-path 1s cubic-bezier(.76,0,.24,1),transform 1.2s cubic-bezier(.76,0,.24,1);' 2512 + 'clip-path:inset(' + (active ? '0 0 0 0' : (past ? '0 0 0 100%' : '0 100% 0 0')) + ');' 2513 + 'transform:scale(' + (active ? '1' : '1.12') + ');' 2514 + 'z-index:' + (active ? '3' : (past ? '2' : '1')); 2515 }; 2516 const nick = (v, dflt) => String(v || dflt).replace(/^@+/, '').trim(); 2517 const n1 = nick(p.nick1, 'sveta.v.reels'); 2518 const n2 = nick(p.nick2, 'maya.songs'); 2519 const n3 = nick(p.nick3, 'boonmadeit'); 2520 const n4 = nick(p.nick4, 'irina.pavlowa');
2521 const srcs = [p.clip1Url, p.clip2Url, p.clip3Url, p.clip4Url]; 2522 const vids = { 2523 v0: srcs[0] || undefined, hasV0: !!srcs[0], 2524 v1: srcs[1] || undefined, hasV1: !!srcs[1], 2525 v2: srcs[2] || undefined, hasV2: !!srcs[2], 2526 v3: srcs[3] || undefined, hasV3: !!srcs[3] 2527 }; 2528 const sounds = Array.from({ length: CARD_COUNT }, (_, i) => ({ 2529 ['snd' + i]: (s.sound && (s.slide || 0) === i) ? 'ââ' : 'â¶' 2530 })).reduce((all, item) => Object.assign(all, item), {}); 2531 2532 return { 2533 ...carousel, 2534 ...vids, 2535 ...sounds, 2536 pickSlide: function (e) { 2537 const v = parseInt(e.currentTarget.getAttribute('data-val'), 10) || 0; 2538 self._paused = true; 2539 if (navigator.vibrate) { navigator.vibrate(8); } 2540 self.setState({ slide: v }); 2541 }, 2542 2543 // waveform 2544 waveBars: waveBars, 2545 waveLabel: activeSec.label + ' · ' + activeSec.scenes + (window.T5&&window.T5['m180']||" ÑÑен") + (activeSec.hot ? (window.T5&&window.T5['m181']||" · липÑинк") : ''), 2546 playheadSt: 'position:absolute;top:-6px;bottom:-6px;width:2px;background:var(--ink);box-shadow:0 0 16px rgba(255,61,46,0.9);pointer-events:none;left:' + (wavePos * 100).toFixed(1) + '%', 2547 waveDown: function (e) { 2548 self._wave = true; 2549 e.currentTarget.setPointerCapture && e.currentTarget.setPointerCapture(e.pointerId); 2550 const r = e.currentTarget.getBoundingClientRect(); 2551 self.setState({ wavePos: Math.min(1, Math.max(0, (e.clientX - r.left) / r.width)) }); 2552 }, 2553 waveMove: function (e) { 2554 if (!self._wave) { return; } 2555 const r = e.currentTarget.getBoundingClientRect(); 2556 self.setState({ wavePos: Math.min(1, Math.max(0, (e.clientX - r.left) / r.width)) }); 2557 }, 2558 waveUp: function () { self._wave = false; }, 2559 2560 // chat 2561 msgs: msgs, 2562 contractTxt: contractTxt, 2563 contractSt: 'border:1px solid rgba(255,61,46,0.45);background:rgba(255,61,46,0.07);border-radius:10px;padding:12px 12px;font-family:\'Space Mono\',monospace;font-size:9.5px;letter-spacing:0.06em;color:var(--ink);text-transform:uppercase;line-height:1.7;transition:box-shadow .3s ease;' 2564 + (tone === 'base' ? '' : 'box-shadow:0 0 26px rgba(255,61,46,0.35)'), 2565 chatPill: function (e) { 2566 const v = e.currentTarget.getAttribute('data-val'); 2567 if (navigator.vibrate) { navigator.vibrate(8); } 2568 self.setState({ tone: v === 'reset' ? 'base' : v }); 2569 }, 2570 2571 // before / after 2572 baBars: baBars, 2573 baTopSt: 'position:absolute;inset:0;clip-path:inset(0 0 0 ' + ba + '%)', 2574 baHandleSt: 'position:absolute;top:0;bottom:0;width:2px;background:var(--acc);display:flex;align-items:center;justify-content:center;pointer-events:none;left:' + ba + '%', 2575 baDown: function (e) { 2576 self._ba = true; 2577 e.currentTarget.setPointerCapture && e.currentTarget.setPointerCapture(e.pointerId); 2578 const r = e.currentTarget.getBoundingClientRect(); 2579 self.setState({ ba: Math.min(96, Math.max(4, ((e.clientX - r.left) / r.width) * 100)) }); 2580 }, 2581 baMove: function (e) { 2582 if (!self._ba) { return; } 2583 const r = e.currentTarget.getBoundingClientRect(); 2584 self.setState({ ba: Math.min(96, Math.max(4, ((e.clientX - r.left) / r.width) * 100)) }); 2585 }, 2586 baUp: function () { self._ba = false; }, 2587 2588 // calculator 2589 calcMin: calcMin, 2590 calcPlanCredits: calculator.credits, 2591 calcPlanVideos: calculator.videos, 2592 calcPlan: calculator.plan, 2593 setCalc: function (e) { self.setState({ calcMin: parseInt(e.currentTarget.value, 10) || 1 }); }, 2594 2595 liveNow: s.liveNow || 370, 2596 audCols: [0, 1, 2].map(k => (k === aud ? '1.5fr' : '1fr')).join(' '), 2597 az0: aud === 0 ? 1.1 : 1, az1: aud === 1 ? 1.1 : 1, az2: aud === 2 ? 1.1 : 1, 2598 hoverAud: function (ev) { 2599 const k = parseInt(ev.currentTarget.getAttribute('data-audk'), 10) || 0; 2600 self._audHold = true; 2601 self.setState({ aud: k }); 2602 }, 2603 leaveAud: function () { self._audHold = false; }, 2604 onPhoto: function (ev) { 2605 if (ev.currentTarget) { ev.currentTarget.value = ''; } 2606 }, 2607 st0: sceneTile(0), st1: sceneTile(1), st2: sceneTile(2), st3: sceneTile(3), st4: sceneTile(4), st5: sceneTile(5), 2608 sm0: sceneMark(0), sm1: sceneMark(1), sm2: sceneMark(2), sm3: sceneMark(3), sm4: sceneMark(4), sm5: sce
2608neMark(5), 2609 lessonIcon: s.lessonSound ? 'ââ' : 'â¶', 2610 toggleLesson: function (ev) { 2611 ev.stopPropagation(); 2612 self.setState({ lessonSound: !((self.state || {}).lessonSound) }); 2613 }, 2614 tms0: tmCard(0), tms1: tmCard(1), tms2: tmCard(2), tms3: tmCard(3), 2615 tmd0: tmDot(0), tmd1: tmDot(1), tmd2: tmDot(2), tmd3: tmDot(3), 2616 nextTm: function () { self._tmHold = true; self.setState({ tm: (((self.state || {}).tm || 0) + 1) % 4 }); }, 2617 pickTm: function (ev) { ev.stopPropagation(); self._tmHold = true; self.setState({ tm: parseInt(ev.currentTarget.getAttribute('data-val'), 10) || 0 }); }, 2618 mr0: monRow(0), mr1: monRow(1), mr2: monRow(2), 2619 md0: monDesc(0), md1: monDesc(1), md2: monDesc(2), 2620 ms0: 1, ms1: 1, ms2: 1, 2621 mp0: monPane(0), mp1: monPane(1), mp2: monPane(2), 2622 pickMon: function (ev) { 2623 const k = parseInt(ev.currentTarget.getAttribute('data-monrow'), 10) || 0; 2624 self._monHold = true; 2625 self.setState({ mon: k }); 2626 }, 2627 snd0: (s.sound && (s.slide || 0) === 0) ? 'ââ' : 'â¶', 2628 snd1: (s.sound && (s.slide || 0) === 1) ? 'ââ' : 'â¶', 2629 snd2: (s.sound && (s.slide || 0) === 2) ? 'ââ' : 'â¶', 2630 snd3: (s.sound && (s.slide || 0) === 3) ? 'ââ' : 'â¶', 2631 snd4: (s.sound && (s.slide || 0) === 4) ? 'ââ' : 'â¶', 2632 snd5: (s.sound && (s.slide || 0) === 5) ? 'ââ' : 'â¶', 2633 snd6: (s.sound && (s.slide || 0) === 6) ? 'ââ' : 'â¶', 2634 snd7: (s.sound && (s.slide || 0) === 7) ? 'ââ' : 'â¶', 2635 toggleSound: function (e) { 2636 e.stopPropagation(); 2637 const i = parseInt(e.currentTarget.getAttribute('data-val'), 10) || 0; 2638 const st = self.state || {}; 2639 const on = !(st.sound && (st.slide || 0) === i); 2640 self._paused = true; 2641 self.setState({ sound: on, slide: i }); 2642 const apply = function () { 2643 const seen = {}; 2644 Array.from(document.querySelectorAll('#examples video')).forEach(function (v) { 2645 const k = parseInt(v.getAttribute('data-val'), 10); 2646 const primary = !seen[k]; 2647 seen[k] = true; 2648 const active = on && k === i && primary; 2649 window.ClipchatMedia.watch(v, { src: v.getAttribute('data-src'), play: active, audible: active }); 2650 }); 2651 }; 2652 apply(); 2653 setTimeout(apply, 0); 2654 setTimeout(apply, 120); 2655 }, 2656 igNick1: n1, igUrl1: (p.link1 || (n1 === 'sveta.v.reels' ? 'https://www.instagram.com/sveta.v.reels?igsh=cnR4YnY1ZWxrOGtv' : 'https://instagram.com/' + n1)), 2657 igNick2: n2, igUrl2: 'https://instagram.com/' + n2, 2658 igNick3: n3, igUrl3: 'https://www.instagram.com/reel/Db2ZH6Mxfk-/', 2659 igNick4: n4, igUrl4: 'https://www.instagram.com/irina.pavlowa/', 2660 onFile: function (e) { 2661 if (e.currentTarget) { e.currentTarget.value = ''; } 2662 }, 2663 swipeDown: function (e) { 2664 self._sw = { x: e.clientX, t: Date.now() }; 2665 self._paused = true; 2666 self.setState({ dragging: true, dragX: 0 }); 2667 }, 2668 swipeMove: function (e) { 2669 if (!self._sw) { return; } 2670 const dx = e.clientX - self._sw.x; 2671 self.setState({ dragX: Math.max(-170, Math.min(170, dx)) }); 2672 }, 2673 swipeUp: function (e) { 2674 if (!self._sw) { return; } 2675 const dx = e.clientX - self._sw.x; 2676 const dt = Date.now() - self._sw.t; 2677 self._sw = null; 2678 const v = Math.abs(dx) / Math.max(1, dt); 2679 if (Math.abs(dx) < 24) { self.setState({ dragging: false, dragX: 0 }); return; } 2680 const jump = (v > 0.9 || Math.abs(dx) > 96) ? (Math.abs(dx) > 150 ? 2 : 1) : 1; 2681 const cur = (self.state || {}).slide || 0; 2682 const next = ((cur + (dx < 0 ? jump : -jump)) % CARD_COUNT + CARD_COUNT) % CARD_COUNT; 2683 if (navigator.vibrate) { navigator.vibrate(8); } 2684 self.setState({ slide: next, dragging: false, dragX: 0 }); 2685 }, 2686 dzBusy: demo === 'listening', 2687 dzIcon: demo === 'listening' ? '' : (demo === 'split' ? 'â' : (demo === 'error' ? '!' : 'â')), 2688 dzIconSt: 'flex-shrink:0;width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:700;transition:background .25s ease,box-shadow .25s ease;' 2689 + (demo === 'listening' 2690 ? 'background:rgba(24,7,6,0.2);border:2.5px solid rgba(24,7,6,0.3);border-top-color:#180706;animation:ring .8s linear infinite;box-sizing:border-box' 2691 : (demo === 'error' 2692 ? 'background:transparent;border:2px solid #180706;color:#180706' 2693 : 'background:#180706;color:#FFD9D2;box-shadow:inset 0 1px 0 rgba(255,255,255,0.14)')), 2694 dzBtnLabel: demo === 'listening' 2695 ? ((window.T5&&window.T5['m184']||"ЧиÑÐ°Ñ ÑÑек⦠") + (s.pct || 0) + '%') 2696 : (demo === 'split' ? (window.T5&&window.T5['m185']||"Ðлан ÑÑен гоÑов") : (demo === 'error' ? (window.T5&&window.T5['m186']||"Ðе ÑдалоÑÑ Ð¿ÑоÑиÑаÑÑ") : (window.T5&&window.T5['m187']||"Create a clip"))), 2697 dzHint: demo === 'listening' 2698 ? (window.T5&&window.T5['m188']||"не закÑÑвай ÑÑÑаниÑÑ") 2699 : (demo === 'split' ? (window.T5&&window.T5['m189']||"поÑмоÑÑеÑÑ ÑаÑкадÑÐ¾Ð²ÐºÑ â") : (demo === 'error' ? (window.T5&&window.T5['m190']||"нажми, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð²ÑоÑиÑÑ") : (window.T5&&window.T5['m191']||"ÐÐ ÑлÑÑÐ°ÐµÑ Ð¸ ÑнимаеÑ"))), 2700 dzHintSt: "font-family:'Space Mono',monospace;font-weight:700;font-size:10px;letter-spacing:0.14em;text-transform:uppercase;color:rgba(255,255,255,0.9)", 2701 startDemo: function () { 2702 if (navigator.vibrate) { navigator.vibrate(10); } 2703 window.ClipChatPrimaryCta(); 2704 }, 2705 menuIcon: menuOpen ? 'â' : 'â°', 2706 menuOverlayCls: menuOpen ? '' : 'is-hidden', 2707 toggleMenu: function () { self.setState({ menuOpen: !((self.state || {}).menuOpen) }); }, 2708 startDemoAndClose: function () { 2709 if (navigator.vibrate) { navigator.vibrate(10); } 2710 self.setState({ menuOpen: false }); 2711 window.ClipChatPrimaryCta(); 2712 }, 2713 a0st: f[0].st, f0sym: f[0].sym, f0symSt: f[0].symSt, 2714 a1st: f[1].st, f1sym: f[1].sym, f1symSt: f[1].symSt, 2715 a2st: f[2].st, f2sym: f[2].sym, f2symSt: f[2].symSt, 2716 a3st: f[3].st, f3sym: f[3].sym, f3symSt: f[3].symSt, 2717 a4st: f[4].st, f4sym: f[4].sym, f4symSt: f[4].symSt, 2718 a5st: f[5].st, f5sym: f[5].sym, f5symSt: f[5].symSt, 2719 a6st: f[6].st, f6sym: f[6].sym, f6symSt: f[6].symSt, 2720 faqTap: function (e) { 2721 const v = parseInt(e.currentTarget.getAttribute('data-val'), 10); 2722 if (navigator.vibrate) { navigator.vibrate(6); } 2723 const cur = (self.state || {}).faq; 2724 self.setState({ faq: cur === v ? -1 : v }); 2725 } 2726 }; 2727 } 2728} 2729</script>
2729 2730 2731<noscript><img height="1" width="1" style="display:none" 2732src="https://www.facebook.com/tr?id=1060257096470271&ev=PageView&noscript=1" 2733/></noscript> 2734 2735<noscript><div><img src="https://mc.yandex.ru/watch/111369311" style="position:absolute; left:-9999px;" alt="" /></div></noscript> 2736
2737<script>window.dtamAuthSuccessUrl = '/create/clipboard';</script>
2737 2738 2739<div class="dtam-overlay" id="dtamAuthOverlay" role="dialog" aria-modal="true" aria-labelledby="dtamAuthTitle" onclick="if(event.target===this)dtamCloseAuth()"> 2740 <div class="dtam-card"> 2741 <button class="dtam-close" aria-label="Close" onclick="dtamCloseAuth()">â</button> 2742 2743 <div class="paywall-lock-icon"> 2744 <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="rgba(255,255,255,0.5)" stroke-width="2"> 2745 <rect x="3" y="11" width="18" height="11" rx="2" ry="2"/> 2746 <path d="M7 11V7a5 5 0 0 1 10 0v4"/> 2747 </svg> 2748 </div> 2749 2750 <!-- Step 1: Email --> 2751 <div class="auth-step active" id="authStepEmail"> 2752 <div class="paywall-title" id="dtamAuthTitle">Welcome to ClipChat</div> 2753 <div class="paywall-subtitle">Enter your email to start your first clip.</div> 2754 <form class="auth-form" id="authEmailForm" onsubmit="return authSubmitEmail(event)" autocomplete="on"> 2755 <input type="email" class="auth-input" id="authEmailInput" name="email" placeholder="Email" autocomplete="username email" required /> 2756 <button type="submit" class="pw-btn pw-btn-primary" id="authEmailBtn"> 2757 Continue 2758 </button> 2759 </form> 2760 <div class="pw-error" id="authError"></div> 2761 </div> 2762 2763 <!-- Step 2a: Create password (new user) --> 2764 <div class="auth-step" id="authStepCreate"> 2765 <div class="auth-create-box"> 2766 <div class="auth-create-icon"> 2767 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="#4ade80" stroke-width="2.5"><polyline points="20 6 9 17 4 12"/></svg> 2768 </div> 2769 <div class="paywall-title" style="font-size:17px;margin-bottom:4px">Create a password to finish</div> 2770 <div class="paywall-subtitle" style="margin-bottom:0">One step away from watching</div> 2771 </div> 2772 <div class="auth-email-header"> 2773 <button type="button" class="auth-back-btn" onclick="authGoBack()"> 2774 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="15 18 9 12 15 6"/></svg> 2775 </button> 2776 <span id="authDisplayEmail1"></span> 2777 </div> 2778 <form class="auth-form" id="authCreateForm" onsubmit="return authSubmitCreate(event)" autocomplete="on"> 2779 <input type="email" name="email" autocomplete="username email" value="" readonly style="display:none" aria-hidden="true" tabindex="-1" /> 2780 <div class="auth-password-wrap"> 2781 <input type="password" class="auth-input" id="authCreatePassword" name="password" placeholder="Password" autocomplete="new-password" required minlength="6" /> 2782 <button type="button" class="auth-eye-btn" onclick="authToggleEye(this)"> 2783 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg> 2784 </button> 2785 </div> 2786 <div class="auth-hint">At least 6 characters</div> 2787 <button type="submit" class="pw-btn pw-btn-primary" id="authCreateBtn"> 2788 Create Account 2789 </button> 2790 </form> 2791 <div class="pw-error" id="authCreateError"></div> 2792 </div> 2793 2794 <!-- Step 2b: Login password (existing user) --> 2795 <div class="auth-step" id="authStepLogin"> 2796 <div class="paywall-title">Welcome back!</div> 2797 <div class="paywall-subtitle">Enter your password to continue</div> 2798 <div class="auth-email-header"> 2799 <button type="button" class="auth-back-btn" onclick="authGoBack()"> 2800 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="15 18 9 12 15 6"/></svg> 2801 </button> 2802 <span id="authDisplayEmail2"></span> 2803 </div> 2804 <form class="auth-form" id="authLoginForm" onsubmit="return authSubmitLogin(event)" autocomplete="on"> 2805 <input type="email" name="email" autocomplete="username email" value="" readonly style="display:none" aria-hidden="true" tabindex="-1" /> 2806 <div class="auth-password-wrap"> 2807 <input type="password" class="auth-input" id="authLoginPassword" name="password" placeholder="Password" autocomplete="current-password" required /> 2808 <button type="button" class="auth-eye-btn" onclick="authToggleEye(this)"> 2809 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg> 2810 </button> 2811 </div> 2812 <div class="auth-forgot-link"> 2813 <a onclick="authShowForgot()">Forgot password?</a> 2814 </div> 2815 <button type="submit" class="pw-btn pw-btn-primary" id="authLoginBtn"> 2816 Log In 2817 </button> 2818 </form> 2819 <div class="pw-error" id="authLoginError"></div> 2820 </div> 2821 2822 <!-- Step 3: Forgot password --> 2823 <div class="auth-step" id="authStepForgot"> 2824 <div class="paywall-title">Reset Password</div> 2825 <div class="auth-email-header"> 2826 <button type="button" class="auth-back-btn" onclick="authGoBack()">
2827 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="15 18 9 12 15 6"/></svg> 2828 </button> 2829 <span id="authDisplayEmail3"></span> 2830 </div> 2831 <div id="authResetForm"> 2832 <div class="paywall-subtitle" style="margin-bottom:14px">We will send a password reset link to your email</div> 2833 <button class="pw-btn pw-btn-primary" id="authResetBtn" onclick="authResetPassword()"> 2834 Send Reset Link 2835 </button> 2836 </div> 2837 <div class="auth-success-msg" id="authResetSent" style="display:none"> 2838 A password reset link has been sent to your email 2839 </div> 2840 <div class="pw-error" id="authForgotError"></div> 2841 </div> 2842 2843 <!-- OAuth divider + buttons --> 2844 <div class="auth-divider" id="authDivider"> 2845 <span>or</span> 2846 </div> 2847 <div class="auth-oauth" id="authOAuth"> 2848 <button class="auth-oauth-btn" onclick="authGoogle()"> 2849 <svg width="18" height="18" viewBox="0 0 24 24"><path d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z" fill="#4285F4"/><path d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" fill="#34A853"/><path d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z" fill="#FBBC05"/><path d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" fill="#EA4335"/></svg> 2850 Continue with Google 2851 </button> 2852 </div> 2853 </div> 2854</div> 2855
2856<script> 2857(function() { 2858 // Default redirect target â pages can override via window.dtamAuthSuccessUrl 2859 if (!window.dtamAuthSuccessUrl) window.dtamAuthSuccessUrl = '/create/dashboard'; 2860 2861 var T = { 2862 loading: 'Loading...', 2863 networkError: 'Network error. Please try again.', 2864 authEmailError: 'Please enter a valid email address', 2865 authLoginFailed: 'Invalid email or password', 2866 authPasswordMin: 'At least 6 characters', 2867 authEmailTaken: 'An account with this email already exists' 2868 }; 2869 2870 var _authEmail = ''; 2871 2872 // --- Modal open/close --- 2873 window.dtamOpenAuth = function() { 2874 var o = document.getElementById('dtamAuthOverlay'); 2875 if (!o) return; 2876 o.classList.add('open'); 2877 document.body.style.overflow = 'hidden'; 2878 // Reset to step 1 2879 authShowStep('authStepEmail'); 2880 var inp = document.getElementById('authEmailInput'); 2881 if (inp) setTimeout(function(){ inp.focus(); }, 120); 2882 }; 2883 window.dtamCloseAuth = function() { 2884 var o = document.getElementById('dtamAuthOverlay'); 2885 if (!o) return; 2886 o.classList.remove('open'); 2887 document.body.style.overflow = ''; 2888 }; 2889 2890 // ESC to close 2891 document.addEventListener('keydown', function(e) { 2892 if (e.key === 'Escape') { 2893 var o = document.getElementById('dtamAuthOverlay'); 2894 if (o && o.classList.contains('open')) dtamCloseAuth(); 2895 } 2896 }); 2897 2898 // --- Helpers --- 2899 function authShowStep(stepId) { 2900 document.querySelectorAll('.auth-step').forEach(function(s) { s.classList.remove('active'); }); 2901 var t = document.getElementById(stepId); 2902 if (t) t.classList.add('active'); 2903 ['authError','authCreateError','authLoginError','authForgotError'].forEach(function(id) { 2904 var el = document.getElementById(id); 2905 if (el) { el.textContent = ''; el.classList.remove('visible'); } 2906 }); 2907 } 2908 function authShowError(id, msg) { 2909 var el = document.getElementById(id); 2910 if (el) { el.textContent = msg; el.classList.add('visible'); } 2911 } 2912 function authSetLoading(btnId, loading) { 2913 var btn = document.getElementById(btnId); 2914 if (!btn) return; 2915 btn.disabled = loading; 2916 if (loading) { 2917 btn._origText = btn.textContent; 2918 btn.innerHTML = '<span class="pw-spinner"></span> ' + T.loading; 2919 } else if (btn._origText) { 2920 btn.textContent = btn._origText; 2921 } 2922 } 2923 function authSaveToken(token) { 2924 try { 2925 localStorage.setItem('authToken', token); 2926 localStorage.setItem('token', token); 2927 } catch(e) {}
2928 document.cookie = 'auth_token=' + encodeURIComponent(token) + '; path=/; max-age=2592000; SameSite=Lax'; 2929 } 2930 function authSuccess() { 2931 var hasCookie = document.cookie.indexOf('auth_token=') !== -1; 2932 if (!hasCookie) { 2933 var t = null; 2934 try { t = localStorage.getItem('authToken'); } catch(e) {} 2935 if (t) document.cookie = 'auth_token=' + t + '; path=/; max-age=2592000; SameSite=Lax'; 2936 } 2937 var target = window.dtamAuthSuccessUrl || '/create/dashboard'; 2938 setTimeout(function() { window.location.href = target; }, 100); 2939 } 2940 2941 // --- Step navigation --- 2942 window.authGoBack = function() { 2943 authShowStep('authStepEmail'); 2944 var div = document.getElementById('authDivider'); 2945 var oauth = document.getElementById('authOAuth'); 2946 if (div) div.style.display = ''; 2947 if (oauth) oauth.style.display = ''; 2948 }; 2949 window.authToggleEye = function(btn) { 2950 var wrap = btn.closest('.auth-password-wrap'); 2951 var input = wrap ? wrap.querySelector('input') : null; 2952 if (!input) return; 2953 if (input.type === 'password') { 2954 input.type = 'text'; 2955 btn.innerHTML = '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"/><line x1="1" y1="1" x2="23" y2="23"/></svg>'; 2956 } else { 2957 input.type = 'password'; 2958 btn.innerHTML = '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>'; 2959 } 2960 }; 2961 2962 // --- Step 1: email --- 2963 window.authSubmitEmail = function(e) { 2964 e.preventDefault(); 2965 var input = document.getElementById('authEmailInput'); 2966 var email = (input.value || '').trim().toLowerCase(); 2967 if (!email || !/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) { 2968 authShowError('authError', T.authEmailError); 2969 return false; 2970 } 2971 _authEmail = email; 2972 authSetLoading('authEmailBtn', true); 2973 2974 fetch('/api/check-email', { 2975 method: 'POST', 2976 headers: { 'Content-Type': 'application/json' }, 2977 body: JSON.stringify({ email: email }) 2978 }) 2979 .then(function(r) { return r.json(); }) 2980 .then(function(data) { 2981 authSetLoading('authEmailBtn', false); 2982 ['authDisplayEmail1','authDisplayEmail2','authDisplayEmail3'].forEach(function(id) { 2983 var el = document.getElementById(id); 2984 if (el) el.textContent = _authEmail; 2985 }); 2986 // Sync hidden email inputs in login/create forms for password-manager association 2987 ['authCreateForm','authLoginForm'].forEach(function(fid) { 2988 var f = document.getElementById(fid); 2989 if (!f) return; 2990 var hidden = f.querySelector('input[name="email"]'); 2991 if (hidden) hidden.value = _authEmail; 2992 }); 2993 if (data.exists) { 2994 authShowStep('authStepLogin'); 2995 var pwInput = document.getElementById('authLoginPassword'); 2996 if (pwInput) setTimeout(function() { pwInput.focus(); }, 100); 2997 } else { 2998 authShowStep('authStepCreate'); 2999 var pwInput = document.getElementById('authCreatePassword'); 3000 if (pwInput) setTimeout(function() { pwInput.focus(); }, 100); 3001 } 3002 }) 3003 .catch(function() { 3004 authSetLoading('authEmailBtn', false); 3005 authShowError('authError', T.networkError); 3006 }); 3007 return false; 3008 }; 3009 3010 // --- Step 2a: create --- 3011 window.authSubmitCreate = function(e) { 3012 e.preventDefault(); 3013 var pw = document.getElementById('authCreatePassword').value; 3014 if (!pw || pw.length < 6) { 3015 authShowError('authCreateError', T.authPasswordMin); 3016 return false; 3017 } 3018 authSetLoading('authCreateBtn', true); 3019 fetch('/signup', { 3020 method: 'POST', 3021 headers: { 'Content-Type': 'application/json' }, 3022 credentials: 'include', 3023 body: JSON.stringify({ 3024 name: 'User', email: _authEmail, 3025 password: pw, password_confirmation: pw, 3026 from_website: true 3027 }) 3028 }) 3029 .then(function(r) { return r.json(); }) 3030 .then(function(data) { 3031 if (data.token) { authSaveToken(data.token); authSuccess(); } 3032 else { 3033 authSetLoading('authCreateBtn', false); 3034 // Detect common error types and show localized message 3035 var rawErr = (data.errors && data.errors.join(', ')) || data.error || ''; 3036 var low = (rawErr || '').toLowerCase(); 3037 var msg; 3038 if (low.indexOf('taken') >= 0 || low.indexOf('already') >= 0 || low.indexOf('exists') >= 0) { 3039 msg = T.authEmailTaken; 3040 } else if (low.indexOf('password') >= 0 && (low.indexOf('short') >= 0 || low.indexOf('min') >= 0)) { 3041 msg = T.authPasswordMin; 3042 } else if (rawErr) { 3043 // Only show raw backend msg if we have no better idea 3044 msg = rawErr; 3045 } else { 3046 msg = T.networkError; 3047 } 3048 authShowError('authCreateError', msg); 3049 } 3050 }) 3051 .catch(function() { 3052 authSetLoading('authCreateBtn', false); 3053 authShowError('authCreateError', T.networkError); 3054 }); 3055 return false;
3056 }; 3057 3058 // --- Step 2b: login --- 3059 window.authSubmitLogin = function(e) { 3060 e.preventDefault(); 3061 var pw = document.getElementById('authLoginPassword').value; 3062 if (!pw) { authShowError('authLoginError', T.authPasswordMin); return false; } 3063 authSetLoading('authLoginBtn', true); 3064 fetch('/login', { 3065 method: 'POST', 3066 headers: { 'Content-Type': 'application/json' }, 3067 credentials: 'include', 3068 body: JSON.stringify({ email: _authEmail, password: pw, from_website: true }) 3069 }) 3070 .then(function(r) { return r.json(); }) 3071 .then(function(data) { 3072 if (data.token) { authSaveToken(data.token); authSuccess(); } 3073 else { 3074 authSetLoading('authLoginBtn', false); 3075 // Use localized message instead of backend English text 3076 authShowError('authLoginError', T.authLoginFailed); 3077 } 3078 }) 3079 .catch(function() { 3080 authSetLoading('authLoginBtn', false); 3081 authShowError('authLoginError', T.networkError); 3082 }); 3083 return false; 3084 }; 3085 3086 // --- Forgot password --- 3087 window.authShowForgot = function() { 3088 authShowStep('authStepForgot'); 3089 document.getElementById('authResetForm').style.display = ''; 3090 document.getElementById('authResetSent').style.display = 'none'; 3091 }; 3092 window.authResetPassword = function() { 3093 authSetLoading('authResetBtn', true); 3094 var gqlQuery = 'mutation($input: RequestPasswordResetInput!) { requestPasswordReset(input: $input) { success message } }'; 3095 fetch('/graphql', { 3096 method: 'POST', 3097 headers: { 'Content-Type': 'application/json' }, 3098 // locale вÑбиÑÐ°ÐµÑ ÑзÑк пиÑÑма на бÑке (ClipChat/Show Must); doitong его игноÑиÑÑÐµÑ 3099 body: JSON.stringify({ query: gqlQuery, variables: { input: { email: _authEmail, locale: (document.documentElement.lang || 'en') } } }) 3100 }) 3101 .then(function(r) { return r.json(); }) 3102 .then(function(data) { 3103 authSetLoading('authResetBtn', false); 3104 var result = data && data.data && data.data.requestPasswordReset; 3105 if (result && result.success) { 3106 document.getElementById('authResetForm').style.display = 'none'; 3107 document.getElementById('authResetSent').style.display = ''; 3108 } else { 3109 authShowError('authForgotError', (result && result.message) || T.networkError); 3110 } 3111 }) 3112 .catch(function() { 3113 authSetLoading('authResetBtn', false); 3114 authShowError('authForgotError', T.networkError); 3115 }); 3116 }; 3117 3118 // --- OAuth --- 3119 window.authGoogle = function() { 3120 try { localStorage.setItem('return_url', window.dtamAuthSuccessUrl || window.location.pathname); } catch(e) {} 3121 var redirectUri = window.location.origin + '/auth/success'; 3122 var state = encodeURIComponent(JSON.stringify({ redirect_uri: redirectUri, from_website: true })); 3123 window.location.href = '/auth/google_oauth2?state=' + state; 3124 }; 3125 window.authFacebook = function() { 3126 try { localStorage.setItem('return_url', window.dtamAuthSuccessUrl || window.location.pathname); } catch(e) {} 3127 var redirectUri = window.location.origin + '/auth/success'; 3128 var state = encodeURIComponent(JSON.stringify({ redirect_uri: redirectUri, from_website: true })); 3129 window.location.href = '/auth/facebook?state=' + state; 3130 }; 3131 3132 // --- Intercept any element with data-open-auth to open the modal --- 3133 document.addEventListener('click', function(e) { 3134 var el = e.target.closest('[data-open-auth]'); 3135 if (!el) return; 3136 e.preventDefault(); 3137 dtamOpenAuth(); 3138 }); 3139})(); 3140</script>
3140 3141 3142</body> 3143</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.