simbiot-harness/video/carousels/principle-zero/index.html
Simbiot Harness 95b77f2839 карусели: генератор make.py (spec.json → hyperframes → PNG) + 4 карусели и 9 сгенерированных фото Alex
- make.py: 8 типов слайдов (cover/quote/phototop/photoside/stat/list/formula/final),
  палитры carbon и bone в стиле Shkor Labs;
- studio-orchestration, production-lessons — настоящие фото (ч/б);
  principle-zero, govern-agents — фото, сгенерированные Kling (Nano Banana Pro) по референсам;
- тезисы — из 42_Harness_Deck, Shkor_Labs_Deck, Simbiot Whitepaper, COOP_CONTEXT.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 11:03:19 +00:00

124 lines
16 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=1080, height=1350" />
<title>Principle Zero</title><script src="./gsap.min.js"></script>
<style>
@font-face { font-family: "Fraunces"; font-weight: 400; src: url("fonts/fraunces-400-latin.woff2") format("woff2"); }
@font-face { font-family: "Fraunces"; font-weight: 700; src: url("fonts/fraunces-700-latin.woff2") format("woff2"); }
@font-face { font-family: "DM Sans"; font-weight: 400; src: url("fonts/dm-sans-400-latin.woff2") format("woff2"); }
@font-face { font-family: "DM Sans"; font-weight: 700; src: url("fonts/dm-sans-700-latin.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-weight: 400; src: url("fonts/jetbrains-mono-400-latin.woff2") format("woff2"); }
@font-face { font-family: "JetBrains Mono"; font-weight: 700; src: url("fonts/jetbrains-mono-700-latin.woff2") format("woff2"); }
* { margin:0; padding:0; box-sizing:border-box; }
html, body { width:1080px; height:1350px; overflow:hidden; background:var(--bg); }
body { color:var(--ink); font-family:"DM Sans", sans-serif; }
#root { position:relative; width:100%; height:100%; overflow:hidden; }
.clip { position:absolute; inset:0; }
.mono { font-family:"JetBrains Mono", monospace; }
em { font-style:normal; }
#bg { background:radial-gradient(900px 1100px at 70% 20%, var(--bg2) 0%, var(--bg) 70%); }
#bg-grid { position:absolute; inset:0; background-image:linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px); background-size:90px 90px; opacity:0.35; }
.slide { overflow:hidden; }
.top { position:absolute; left:64px; right:64px; top:56px; display:flex; justify-content:space-between; align-items:center; z-index:5; }
.mark { width:56px; height:56px; display:block; }
.count { font-size:22px; letter-spacing:0.18em; color:var(--dim); background:rgba(var(--fade),0.75); padding:10px 16px; border-radius:20px; }
.count b { color:var(--ink); }
.foot { position:absolute; left:64px; right:64px; bottom:54px; display:flex; justify-content:space-between; align-items:center; font-size:22px; letter-spacing:0.14em; color:var(--dim); text-transform:uppercase; z-index:5; }
.swipe { display:flex; align-items:center; gap:14px; color:var(--ink); font-weight:700; }
.kick { font-size:24px; letter-spacing:0.26em; color:var(--dim); text-transform:uppercase; margin-bottom:26px; }
.kick b { color:var(--ink); }
.body { position:absolute; left:64px; right:64px; z-index:3; }
.q { font-family:"Fraunces", serif; font-weight:700; letter-spacing:-0.02em; line-height:1.05; }
.sub { font-size:34px; line-height:1.4; color:var(--dim); margin-top:34px; }
.photo { position:absolute; overflow:hidden; }
.photo img { display:block; width:100%; height:100%; object-fit:cover; }
.fadeb { position:absolute; left:0; right:0; }
/* cover */
.cover .photo { inset:0; }
.cover .fadeb { inset:0; background:linear-gradient(180deg, rgba(var(--fade),0) 0%, rgba(var(--fade),0.1) 30%, rgba(var(--fade),0.9) 52%, rgb(var(--fade)) 66%); }
.cover .body { bottom:150px; }
.cover .q { font-size:100px; }
.byline { margin-top:30px; font-size:30px; } .byline span { color:var(--dim); }
/* quote */
.quote .body { top:210px; } .quote .q { font-size:94px; }
.vis { position:absolute; left:64px; right:64px; bottom:140px; height:420px; }
/* phototop */
.phototop .photo { left:0; top:0; width:1080px; height:640px; }
.phototop .fadeb { top:380px; height:262px; background:linear-gradient(180deg, rgba(var(--fade),0), rgb(var(--fade))); }
.phototop .body { top:650px; } .phototop .q { font-size:76px; }
/* photoside */
.photoside .photo { right:0; top:0; width:520px; height:1350px; }
.photoside .fadeb { right:0; top:0; width:520px; height:1350px; background:linear-gradient(90deg, rgb(var(--fade)) 0%, rgba(var(--fade),0.25) 45%, rgba(var(--fade),0) 100%); left:auto; }
.photoside .body { top:250px; right:480px; } .photoside .q { font-size:80px; }
.dots { display:flex; gap:8px; margin-top:40px; }
.dots i { display:block; width:46px; height:46px; border-radius:50%; }
.dots .h { background:var(--ink); } .dots .a { border:4px solid var(--acc); }
/* stat */
.stat .body { top:330px; }
.big { font-family:"Fraunces", serif; font-weight:700; font-size:300px; line-height:0.95; letter-spacing:-0.04em; white-space:nowrap; }
.big-l { font-size:44px; font-weight:700; margin-top:24px; line-height:1.25; }
/* list */
.list .body { top:210px; } .list .q { font-size:76px; }
.items { margin-top:50px; display:flex; flex-direction:column; gap:22px; }
.item { display:flex; gap:28px; align-items:baseline; padding:26px 30px; border:2px solid var(--line); border-radius:22px; background:rgba(var(--fade),0.5); }
.item b { font-family:"JetBrains Mono", monospace; font-size:30px; color:var(--dim); flex:0 0 52px; }
.item span { font-size:38px; line-height:1.3; }
/* formula */
.formula .body { top:300px; }
.parts { display:flex; flex-direction:column; gap:6px; }
.part { font-family:"Fraunces", serif; font-weight:700; font-size:120px; line-height:1.02; letter-spacing:-0.02em; }
.op { font-family:"JetBrains Mono", monospace; font-size:60px; color:var(--dim); margin-left:6px; }
/* final */
.final .photo { left:64px; top:170px; width:300px; height:300px; border-radius:50%; border:6px solid var(--acc); }
.final .body { top:530px; } .final .q { font-size:74px; }
.cta { margin-top:48px; display:flex; align-items:center; gap:26px; }
.btn { padding:22px 40px; border-radius:40px; background:var(--acc); color:var(--accink); font-size:34px; font-weight:700; }
.handle { font-size:32px; }
.logo { position:absolute; left:64px; bottom:110px; width:380px; }
:root { --bg:#050506;--bg2:#111113;--ink:#ece6da;--dim:#a8a297;--acc:#c6ff4d;--accink:#050506;--line:rgba(236,230,218,0.14);--fade:5,5,6 }
em { color:var(--acc); }
</style></head><body>
<div id="root" data-composition-id="main" data-start="0" data-duration="28.0" data-width="1080" data-height="1350">
<div id="bg" class="clip" data-start="0" data-duration="28.0" data-track-index="0"><div id="bg-grid"></div></div>
<section id="s1" class="clip slide cover" data-start="0.00" data-duration="3.5" data-track-index="1"><div class="photo" id="s1-p"><img src="img/rooftop.jpg" alt="" style="object-position:50% 30%"/></div><div class="fadeb"></div><div class="top"><img class=mark src=img/shkor-labs-icon-lime.svg alt=><div class="count mono"><b>01</b> / 08</div></div><div class="body"><div class="kick mono" id="s1-k">The first rule we give <b>every agent</b></div><div class="q" id="s1-q" style="font-size:100px">Profit × time × <em>eternity</em>.</div><div class="byline" id="s1-b">Alex Shkor <span>· Principle Zero</span></div></div><div class="foot mono"><span>cil.by</span><span class="swipe">swipe →</span></div></section><section id="s2" class="clip slide formula" data-start="3.50" data-duration="3.5" data-track-index="1"><div class="top"><img class=mark src=img/shkor-labs-icon-lime.svg alt=><div class="count mono"><b>02</b> / 08</div></div><div class="body"><div class="kick mono" id="s2-k">01 · Principle Zero</div><div class="parts"><div class="part" id="s2-p0">maximum profit</div><div class="op" id="s2-o1">×</div><div class="part" id="s2-p1">time</div><div class="op" id="s2-o2">×</div><div class="part" id="s2-p2"><em>eternity</em></div></div><div class="sub" id="s2-s">That is what optimal profit means to our agents. It is the first line of their doctrine.</div></div></section><section id="s3" class="clip slide quote" data-start="7.00" data-duration="3.5" data-track-index="1"><div class="top"><img class=mark src=img/shkor-labs-icon-lime.svg alt=><div class="count mono"><b>03</b> / 08</div></div><div class="body"><div class="kick mono" id="s3-k">02 · In practice</div><div class="q" id="s3-q">A loss today for a revenue stream lasting years is <em>correct</em>.</div><div class="sub" id="s3-s">A profit that costs reputation is an error.</div></div><svg class="vis" viewBox="0 0 952 420"><line x1="0" y1="400" x2="952" y2="400" stroke="var(--line)" stroke-width="2"/><path class="draw" d="M0 380 C 220 370, 360 330, 520 250 S 800 60, 952 30" fill="none" stroke="var(--acc)" stroke-width="6" stroke-linecap="round"/></svg></section><section id="s4" class="clip slide phototop" data-start="10.50" data-duration="3.5" data-track-index="1"><div class="photo" id="s4-p"><img src="img/whiteboard.jpg" alt="" style="object-position:50% 35%"/></div><div class="fadeb"></div><div class="top"><img class=mark src=img/shkor-labs-icon-lime.svg alt=><div class="count mono"><b>04</b> / 08</div></div><div class="body"><div class="kick mono" id="s4-k">03 · Doctrine</div><div class="q" id="s4-q">Long-horizon thinking is <em>installed</em>, not hoped for.</div><div class="sub" id="s4-s">Every agent inherits 64+1 principles before it takes its first task.</div></div></section><section id="s5" class="clip slide quote" data-start="14.00" data-duration="3.5" data-track-index="1"><div class="top"><img class=mark src=img/shkor-labs-icon-lime.svg alt=><div class="count mono"><b>05</b> / 08</div></div><div class="body"><div class="kick mono" id="s5-k">04 · Community</div><div class="q" id="s5-q">One member's skill becomes <em>everyone's capability</em>.</div><div class="sub" id="s5-s">When a studio shares one harness, every new member starts at the community's level, not at zero.</div></div><svg class="vis" viewBox="0 0 952 420"><line class="nl" x1="120" y1="210" x2="360" y2="80" stroke="var(--acc)" stroke-opacity="0.6" stroke-width="3"/><line class="nl" x1="120" y1="210" x2="360" y2="340" stroke="var(--acc)" stroke-opacity="0.6" stroke-width="3"/><line class="nl" x1="360" y1="80" x2="600" y2="210" stroke="var(--acc)" stroke-opacity="0.6" stroke-width="3"/><line class="nl" x1="360" y1="340" x2="600" y2="210" stroke="var(--acc)" stroke-opacity="0.6" stroke-width="3"/><line class="nl" x1="600" y1="210" x2="840" y2="80" stroke="var(--acc)" stroke-opacity="0.6" stroke-width="3"/><line class="nl" x1="600" y1="210" x2="840" y2="340" stroke="var(--acc)" stroke-opacity="0.6" stroke-width="3"/><line class="nl" x1="360" y1="80" x2="840" y2="80" stroke="var(--acc)" stroke-opacity="0.6" stroke-width="3"/><circle class="nc" cx="120" cy="210" r="32" fill="var(--ink)" stroke="var(--acc)" stroke-width="6"/><circle class="nc" cx="360" cy="80" r="32" fill="none" stroke="var(--acc)" stroke-width="6"/><circle class="nc" cx="360" cy="340" r="32" fill="none" stroke="var(--acc)" stroke-width="6"/><circle class="nc" cx="600" cy="210" r="32" fill="var(--acc)" stroke="var(--acc)" stroke-width="6"/><circle class="nc" cx="840" cy="80" r="32" fill="none" stroke="var(--acc)" stroke-width="6"/><circle class="nc" cx="840" cy="340" r="32" fill="none" stroke="var(--acc)" stroke-width="6"/></svg></section><section id="s6" class="clip slide photoside" data-start="17.50" data-duration="3.5" data-track-index="1"><div class="photo" id="s6-p"><img src="img/portrait.jpg" alt="" style="object-position:45% 25%"/></div><div class="fadeb"></div><div class="top"><img class=mark src=img/shkor-labs-icon-lime.svg alt=><div class="count mono"><b>06</b> / 08</div></div><div class="body"><div class="kick mono" id="s6-k">05 · Treasury</div><div class="q" id="s6-q">Money in the treasury gets spent. <em>A harness keeps paying.</em></div><div class="sub" id="s6-s">A community's real treasury is its shared harness.</div></div></section><section id="s7" class="clip slide quote" data-start="21.00" data-duration="3.5" data-track-index="1"><div class="top"><img class=mark src=img/shkor-labs-icon-lime.svg alt=><div class="count mono"><b>07</b> / 08</div></div><div class="body"><div class="kick mono" id="s7-k">06 · Mission 42</div><div class="q" id="s7-q">All missions matter. <em>Mission 42</em> holds them all.</div><div class="sub" id="s7-s">No mission is unimportant. Every person has their own.</div></div></section><section id="s8" class="clip slide final" data-start="24.50" data-duration="3.5" data-track-index="1"><div class="photo" id="s8-p"><img src="img/stage-face.jpg" alt="" style="object-position:50% 25%"/></div><div class="top" style="justify-content:flex-end"><div class="count mono"><b>08</b> / 08</div></div><div class="body"><div class="q" id="s8-q">Build for the long game. <em>Build it together.</em></div><div class="cta" id="s8-c"><div class="btn">Join at cil.by</div><div class="handle mono">@alexshkor</div></div></div><img class="logo" id="s8-logo" src="img/shkor-labs-logo-dark-bg.svg" alt=""/></section>
</div>
<script>
const tl = gsap.timeline({ paused: true });
tl.fromTo("#bg-grid", { y: 0 }, { y: 90, duration: 28.0, ease: "none" }, 0);
tl.fromTo("#s1-p", { scale: 1.12 }, { scale: 1, duration: 3.4, ease: "power2.out" }, 0.00);
tl.fromTo("#s1-q", { opacity: 0, y: 36 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 0.40);
tl.fromTo("#s1-b", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 1.00);
tl.fromTo("#s1-k", { opacity: 0 }, { opacity: 1, duration: 0.4 }, 0.10);
tl.fromTo("#s2-p0", { opacity: 0, x: -50 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 3.70);
tl.fromTo("#s2-p1", { opacity: 0, x: -50 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 4.05);
tl.fromTo("#s2-p2", { opacity: 0, x: -50 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 4.40);
tl.fromTo("#s2-s", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 4.95);
tl.fromTo("#s2-k", { opacity: 0 }, { opacity: 1, duration: 0.4 }, 3.60);
tl.fromTo("#s3-q", { opacity: 0, y: 36 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 7.20);
tl.fromTo("#s3-s", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 7.90);
document.querySelectorAll("#s3 .draw").forEach(p => { const L = p.getTotalLength(); p.style.strokeDasharray = L; p.style.strokeDashoffset = L; });
tl.to("#s3 .draw", { strokeDashoffset: 0, duration: 1.4, ease: "power2.inOut" }, 7.60);
tl.fromTo("#s3-k", { opacity: 0 }, { opacity: 1, duration: 0.4 }, 7.10);
tl.fromTo("#s4-p", { scale: 1.1 }, { scale: 1, duration: 3.4, ease: "power2.out" }, 10.50);
tl.fromTo("#s4-q", { opacity: 0, y: 36 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 10.80);
tl.fromTo("#s4-s", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 11.50);
tl.fromTo("#s4-k", { opacity: 0 }, { opacity: 1, duration: 0.4 }, 10.60);
tl.fromTo("#s5-q", { opacity: 0, y: 36 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 14.20);
tl.fromTo("#s5-s", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 14.90);
tl.fromTo("#s5 .nc", { opacity: 0 }, { opacity: 1, duration: 0.3, stagger: 0.1 }, 14.60);
tl.fromTo("#s5 .nl", { opacity: 0 }, { opacity: 1, duration: 0.3, stagger: 0.08 }, 15.00);
tl.fromTo("#s5-k", { opacity: 0 }, { opacity: 1, duration: 0.4 }, 14.10);
tl.fromTo("#s6-p", { opacity: 0, x: 80 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.8, ease: "power3.out" }, 17.50);
tl.fromTo("#s6-q", { opacity: 0, y: 36 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 17.80);
tl.fromTo("#s6-s", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 18.50);
tl.fromTo("#s6-k", { opacity: 0 }, { opacity: 1, duration: 0.4 }, 17.60);
tl.fromTo("#s7-q", { opacity: 0, y: 36 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 21.20);
tl.fromTo("#s7-s", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 21.90);
tl.fromTo("#s7-k", { opacity: 0 }, { opacity: 1, duration: 0.4 }, 21.10);
tl.fromTo("#s8-p", { opacity: 0, scale: 0.8 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 24.60);
tl.fromTo("#s8-q", { opacity: 0, y: 36 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 24.90);
tl.fromTo("#s8-c", { opacity: 0, y: 16 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.5, ease: "power3.out" }, 25.60);
tl.fromTo("#s8-logo", { opacity: 0 }, { opacity: 1, x: 0, y: 0, scale: 1, duration: 0.6, ease: "power3.out" }, 26.00);
window.__timelines = window.__timelines || {};
window.__timelines["main"] = tl;
</script></body></html>