- 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>
124 lines
16 KiB
HTML
124 lines
16 KiB
HTML
<!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>
|