Time_Dilation_in_LLM_Agent_.../explainer-ru.html
Jeuner 0d6b501fde feat: Interactive multilingual explainer pages (DE/EN/ZH/RU/HI)
Animated educational explainer for ages 12+ explaining:
- AI Agent communication & delegation
- QC double-agent principle (60% trigger, score 1-10)
- Causal Dilation Clock / Eigenzeit (proper time)
- Live interactive demo with flying message animations

Languages: Deutsch · English · 中文 · Русский · हिन्दी
index.html as language picker entry point

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-09 05:45:03 +02:00

191 lines
23 KiB
HTML
Raw 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="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Как ИИ-роботы общаются друг с другом?</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;700;900&display=swap');
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--yellow:#FFD93D;--green:#6BCB77;--blue:#4D96FF;--pink:#FF6B6B;--purple:#C77DFF;--dark:#1a1a2e;--radius:20px}
body{font-family:'Nunito','Arial',sans-serif;background:var(--dark);color:#fff;overflow-x:hidden}
.hero{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px}
.hero-eyebrow{font-size:13px;font-weight:700;letter-spacing:0.15em;color:var(--yellow);margin-bottom:20px;opacity:0;animation:fadeUp 0.6s 0.2s forwards}
.hero h1{font-size:clamp(1.8rem,5vw,4rem);font-weight:900;line-height:1.12;margin-bottom:24px;opacity:0;animation:fadeUp 0.6s 0.4s forwards}
.hero h1 span{color:var(--yellow)}
.hero-lead{font-size:clamp(1rem,2vw,1.3rem);color:#ffffffbb;max-width:560px;line-height:1.7;margin-bottom:48px;opacity:0;animation:fadeUp 0.6s 0.6s forwards}
.hero-robots{display:flex;gap:32px;align-items:flex-end;justify-content:center;flex-wrap:wrap;opacity:0;animation:fadeUp 0.6s 0.8s forwards}
.robot{display:flex;flex-direction:column;align-items:center;gap:8px}
.robot-body{width:90px;height:90px;border-radius:22px;display:flex;align-items:center;justify-content:center;font-size:44px;box-shadow:0 8px 32px rgba(0,0,0,0.3);animation:robotFloat 3s ease-in-out infinite;transition:transform 0.2s}
.robot-body:hover{transform:scale(1.08) translateY(-4px)}
.robot:nth-child(2) .robot-body{animation-delay:0.8s}.robot:nth-child(3) .robot-body{animation-delay:1.6s}
.robot-name{font-size:14px;font-weight:700;color:#ffffffcc}.robot-role{font-size:11px;color:#ffffff66;text-align:center;max-width:90px}
.r-martin{background:linear-gradient(135deg,#4D96FF,#2563eb)}.r-bob{background:linear-gradient(135deg,#6BCB77,#16a34a)}.r-diana{background:linear-gradient(135deg,#C77DFF,#7c3aed)}.r-qc{background:linear-gradient(135deg,#FF6B6B,#dc2626)}
section{padding:clamp(64px,8vw,120px) 20px;max-width:1100px;margin:0 auto}
.section-label{font-size:12px;font-weight:700;letter-spacing:0.15em;color:var(--yellow);margin-bottom:16px}
.section-title{font-size:clamp(1.6rem,3vw,2.6rem);font-weight:900;line-height:1.15;margin-bottom:48px}
.agent-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;margin-bottom:48px}
.agent-card{background:#ffffff0d;border:1px solid #ffffff15;border-radius:var(--radius);padding:28px 24px;transition:border-color 0.2s,transform 0.2s}
.agent-card:hover{border-color:#ffffff30;transform:translateY(-4px)}
.agent-card-icon{font-size:48px;margin-bottom:16px;display:block}
.agent-card h3{font-size:19px;font-weight:900;margin-bottom:8px}.agent-card p{font-size:15px;color:#ffffffaa;line-height:1.6}
.tag{display:inline-block;font-size:11px;font-weight:700;padding:3px 10px;border-radius:99px;margin-top:12px}
.tag-blue{background:#4D96FF33;color:#4D96FF}.tag-green{background:#6BCB7733;color:#6BCB77}.tag-purple{background:#C77DFF33;color:#C77DFF}.tag-red{background:#FF6B6B33;color:#FF6B6B}
.stage-wrap{background:#ffffff08;border:1px solid #ffffff15;border-radius:var(--radius);padding:40px;position:relative}
.stage{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:160px;position:relative}
.stage-agent{display:flex;flex-direction:column;align-items:center;gap:10px;flex-shrink:0}
.stage-icon{width:72px;height:72px;border-radius:18px;display:flex;align-items:center;justify-content:center;font-size:36px;box-shadow:0 4px 20px rgba(0,0,0,0.3);transition:transform 0.3s,box-shadow 0.3s}
.stage-icon.active{transform:scale(1.15);box-shadow:0 0 0 4px var(--yellow),0 8px 30px rgba(0,0,0,0.4)}
.stage-label{font-size:13px;font-weight:700;color:#ffffffcc}.stage-status{font-size:11px;color:#ffffff55;min-height:16px;text-align:center;max-width:80px}
.msg-bubble{position:absolute;top:50%;transform:translateY(-50%);background:var(--yellow);color:#1a1a2e;font-size:11px;font-weight:700;padding:6px 10px;border-radius:20px;white-space:nowrap;box-shadow:0 4px 16px rgba(0,0,0,0.3);pointer-events:none;opacity:0;z-index:10}
.msg-bubble.qc{background:var(--pink);color:#fff}
.arrow-line{flex:1;height:2px;background:#ffffff15;position:relative;min-width:30px}
.play-btn{display:inline-flex;align-items:center;gap:10px;background:var(--yellow);color:#1a1a2e;border:none;border-radius:99px;padding:14px 32px;font-family:inherit;font-size:17px;font-weight:900;cursor:pointer;margin-top:28px;transition:transform 0.15s;box-shadow:0 4px 20px rgba(255,217,61,0.3)}
.play-btn:hover{transform:translateY(-2px)}.play-btn:disabled{opacity:0.5;cursor:not-allowed;transform:none}
.log-box{margin-top:20px;background:#00000030;border-radius:12px;padding:16px 20px;font-size:14px;color:#ffffffbb;min-height:48px;line-height:1.8;font-family:monospace}
.log-line{opacity:0;animation:fadeIn 0.4s forwards}.log-ok{color:var(--green)}.log-qc{color:var(--pink)}.log-time{color:var(--purple)}
.zeit-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:20px}
.zeit-card{background:#ffffff0d;border:1px solid #ffffff15;border-radius:var(--radius);padding:28px 24px}
.zeit-bar-wrap{height:8px;background:#ffffff15;border-radius:99px;margin:16px 0 8px;overflow:hidden}
.zeit-bar{height:100%;border-radius:99px;transform:scaleX(0);transform-origin:left;animation:barGrow 1.5s ease-out forwards}
.zeit-bar-fast{background:var(--green);width:95%}.zeit-bar-normal{background:var(--blue);width:60%}.zeit-bar-slow{background:var(--purple);width:25%}
.qc-flow{display:flex;align-items:center;gap:0;flex-wrap:wrap;justify-content:center;margin-bottom:40px}
.qc-step{background:#ffffff0d;border:1px solid #ffffff15;border-radius:16px;padding:20px 24px;text-align:center;min-width:140px;transition:border-color 0.2s}
.qc-step:hover{border-color:var(--yellow)}.qc-step-icon{font-size:36px;margin-bottom:10px;display:block}.qc-step-title{font-size:14px;font-weight:700;margin-bottom:4px}.qc-step-desc{font-size:12px;color:#ffffffaa}
.qc-arrow{font-size:24px;color:#ffffff40;padding:0 8px;flex-shrink:0}
.score-demo{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:32px}
.score-badge{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 20px;border-radius:14px;min-width:80px;font-weight:900}
.score-badge .num{font-size:28px;line-height:1}.score-badge .lbl{font-size:11px;opacity:0.8}
.score-fail{background:#FF6B6B22;border:2px solid var(--pink);color:var(--pink)}.score-ok{background:#FFD93D22;border:2px solid var(--yellow);color:var(--yellow)}.score-great{background:#6BCB7722;border:2px solid var(--green);color:var(--green)}
.final-section{text-align:center;padding:clamp(80px,10vw,140px) 20px}
.final-section h2{font-size:clamp(1.8rem,4vw,3.2rem);font-weight:900;line-height:1.2;margin-bottom:20px}
.final-section p{font-size:17px;color:#ffffffaa;max-width:480px;margin:0 auto 36px;line-height:1.6}
.cta-group{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}
.cta-primary{background:var(--yellow);color:#1a1a2e;border:none;border-radius:99px;padding:16px 36px;font-family:inherit;font-size:17px;font-weight:900;cursor:pointer;text-decoration:none;transition:transform 0.15s}
.cta-primary:hover{transform:translateY(-2px)}
.cta-secondary{background:transparent;color:#fff;border:2px solid #ffffff30;border-radius:99px;padding:16px 36px;font-family:inherit;font-size:17px;font-weight:700;cursor:pointer;text-decoration:none;transition:border-color 0.2s,transform 0.15s}
.cta-secondary:hover{border-color:#ffffff60;transform:translateY(-2px)}
@keyframes fadeUp{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes robotFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@keyframes barGrow{to{transform:scaleX(1)}}
@keyframes msgFly{0%{opacity:0;transform:translateY(-50%) translateX(0) scale(0.8)}15%{opacity:1;transform:translateY(-50%) translateX(0) scale(1)}85%{opacity:1}100%{opacity:0;transform:translateY(-50%) translateX(var(--fly-dist)) scale(0.9)}}
@keyframes pulse-glow{0%,100%{box-shadow:0 0 0 4px var(--yellow),0 8px 30px rgba(0,0,0,0.4)}50%{box-shadow:0 0 0 8px #FFD93D55,0 8px 30px rgba(0,0,0,0.4)}}
@keyframes scoreIn{from{opacity:0;transform:scale(0.5) rotate(-8deg)}to{opacity:1;transform:scale(1) rotate(0deg)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:0.01ms !important;transition-duration:0.01ms !important}}
@media(max-width:600px){.stage{flex-direction:column;gap:20px}.arrow-line{width:2px;height:30px;min-width:unset}}
</style>
</head>
<body>
<div class="hero">
<div class="hero-eyebrow">🤖 ИИ-роботы объясняет</div>
<h1>Как <span>ИИ-агенты</span><br>общаются друг с другом?</h1>
<p class="hero-lead">Представь команду роботов — у каждого своя работа. Они отправляют друг другу сообщения, чтобы работать вместе. Именно так работают ИИ-агенты!</p>
<div class="hero-robots">
<div class="robot"><div class="robot-body r-martin">🧠</div><div class="robot-name">Мартин</div><div class="robot-role">Командир</div></div>
<div class="robot"><div class="robot-body r-bob"></div><div class="robot-name">Боб</div><div class="robot-role">Супербыстрый</div></div>
<div class="robot"><div class="robot-body r-diana">🐢</div><div class="robot-name">Диана</div><div class="robot-role">Очень тщательный</div></div>
<div class="robot"><div class="robot-body r-qc">🔍</div><div class="robot-name">Проверщик</div><div class="robot-role">Контроль качества</div></div>
</div>
</div>
<section>
<div class="section-label">Команда</div>
<h2 class="section-title">У каждого робота<br>есть суперсила</h2>
<div class="agent-grid">
<div class="agent-card"><span class="agent-card-icon">🧠</span><h3>Мартин — Командир</h3><p>Мартин получает задание и распределяет работу. Он ждёт результатов и всё объединяет.</p><span class="tag tag-blue">Делегатор</span></div>
<div class="agent-card"><span class="agent-card-icon"></span><h3>Боб — Молния</h3><p>Боб работает сверхбыстро. Он отвечает мгновенно — как решать лёгкие примеры в уме.</p><span class="tag tag-green">Быстрый ответ</span></div>
<div class="agent-card"><span class="agent-card-icon">🐢</span><h3>Диана — Тщательная</h3><p>Диане нужно больше времени, но она делает всё очень аккуратно — как писать идеальное сочинение.</p><span class="tag tag-purple">Медленный · тщательный</span></div>
<div class="agent-card"><span class="agent-card-icon">🔍</span><h3>Проверщик — Учитель</h3><p>Проверяет, достаточно ли хороша работа. Ставит оценку от 1 до 10. Слишком низкая? Переделывай!</p><span class="tag tag-red">Проверяющий · цель 9/10</span></div>
</div>
</section>
<section>
<div class="section-label">Живая демонстрация</div>
<h2 class="section-title">Смотри как они<br>работают вместе!</h2>
<div class="stage-wrap">
<div class="stage" id="stage">
<div class="stage-agent"><div class="stage-icon r-martin" id="si-user">👤</div><div class="stage-label">Ты</div><div class="stage-status" id="ss-user">Задание!</div></div>
<div class="arrow-line" id="line1" style="position:relative;"><div class="msg-bubble" id="msg1">📝 Сделай это!</div></div>
<div class="stage-agent"><div class="stage-icon r-martin" id="si-martin">🧠</div><div class="stage-label">Мартин</div><div class="stage-status" id="ss-martin">ждёт...</div></div>
<div class="arrow-line" id="line2" style="position:relative;"><div class="msg-bubble" id="msg2">📋 Займись этим!</div></div>
<div class="stage-agent"><div class="stage-icon r-bob" id="si-bob"></div><div class="stage-label">Боб</div><div class="stage-status" id="ss-bob">готов</div></div>
<div class="arrow-line" id="line3" style="position:relative;"><div class="msg-bubble qc" id="msg3">🔍 Это хорошо?</div></div>
<div class="stage-agent"><div class="stage-icon r-qc" id="si-qc">🔍</div><div class="stage-label">Проверка</div><div class="stage-status" id="ss-qc">готов</div></div>
</div>
<div id="score-display" style="text-align:center;margin-top:24px;min-height:48px;"></div>
<div class="log-box" id="log">Нажми кнопку и смотри! 👇</div>
<div style="text-align:center;"><button class="play-btn" id="play-btn" onclick="runDemo()">▶ Начать миссию!</button></div>
</div>
</section>
<section>
<div class="section-label">Восприятие времени</div>
<h2 class="section-title">Почему время ощущается<br>по-разному для каждого</h2>
<p style="color:#ffffffaa;font-size:17px;max-width:580px;line-height:1.7;margin-bottom:40px;">Ты знаешь это чувство? Играешь в игры — время летит. Ждёшь автобус — тянется вечно. Роботы переживают то же самое. Учёные называют это <strong style="color:var(--yellow)">собственным временем (Eigenzeit)</strong>.</p>
<div class="zeit-cards">
<div class="zeit-card"><span style="font-size:36px;margin-bottom:12px;display:block"></span><div style="font-size:18px;font-weight:900;color:var(--green)">Боб — Молниеносный</div><div class="zeit-bar-wrap"><div class="zeit-bar zeit-bar-fast"></div></div><div style="font-size:22px;font-weight:900;color:var(--green);margin-top:8px">97 действий/сек</div><div style="font-size:14px;color:#ffffffaa;line-height:1.5;margin-top:8px">Для Боба час — как минута. Он делает столько всего за так мало времени!</div></div>
<div class="zeit-card"><span style="font-size:36px;margin-bottom:12px;display:block">🧠</span><div style="font-size:18px;font-weight:900;color:var(--blue)">Мартин — Нормальный</div><div class="zeit-bar-wrap"><div class="zeit-bar zeit-bar-normal"></div></div><div style="font-size:22px;font-weight:900;color:var(--blue);margin-top:8px">2.6 действий/сек</div><div style="font-size:14px;color:#ffffffaa;line-height:1.5;margin-top:8px">Мартин координирует всё. Не слишком быстро, не слишком медленно — в самый раз.</div></div>
<div class="zeit-card"><span style="font-size:36px;margin-bottom:12px;display:block">🐢</span><div style="font-size:18px;font-weight:900;color:var(--purple)">Диана — Тщательная</div><div class="zeit-bar-wrap"><div class="zeit-bar zeit-bar-slow"></div></div><div style="font-size:22px;font-weight:900;color:var(--purple);margin-top:8px">0.04 действий/сек</div><div style="font-size:14px;color:#ffffffaa;line-height:1.5;margin-top:8px">Диана переживает растянутое время. Каждое задание для неё — как долгое путешествие.</div></div>
</div>
<div style="background:#ffffff08;border:1px solid #ffffff15;border-radius:var(--radius);padding:28px 32px;margin-top:32px;">
<div style="font-size:22px;font-weight:900;margin-bottom:12px;">💡 Запомни так:</div>
<p style="font-size:16px;color:#ffffffbb;line-height:1.7;">В видеоигре время летит — ты делаешь много ходов в минуту.<br>В ожидании автобуса время ползёт — ты почти ничего не делаешь.<br><br>У роботов то же самое явление. Мы называем это <strong style="color:var(--yellow)">Причинными Часами Дилатации (Causal Dilation Clock)</strong> — часы, которые измеряют, насколько активным был каждый робот.</p>
</div>
</section>
<section>
<div class="section-label">Система качества</div>
<h2 class="section-title">Трюк с двойным<br>агентом 🔍</h2>
<p style="color:#ffffffaa;font-size:17px;max-width:560px;line-height:1.7;margin-bottom:40px;">Хорошую работу всегда проверяют. В школе — учитель. Для наших роботов — <strong style="color:var(--pink)">Проверщик качества</strong>.</p>
<div class="qc-flow">
<div class="qc-step"><span class="qc-step-icon">📝</span><div class="qc-step-title">Задание пришло</div><div class="qc-step-desc">Мартин получает работу</div></div>
<div class="qc-arrow"></div>
<div class="qc-step"><span class="qc-step-icon"></span><div class="qc-step-title">Боб работает</div><div class="qc-step-desc">Быстро выполняет задание</div></div>
<div class="qc-arrow"></div>
<div class="qc-step" style="border-color:#FF6B6B55"><span class="qc-step-icon">🔍</span><div class="qc-step-title">Проверка</div><div class="qc-step-desc">6 раз из 10</div></div>
<div class="qc-arrow"></div>
<div class="qc-step"><span class="qc-step-icon">🏆</span><div class="qc-step-title">Результат</div><div class="qc-step-desc">Достаточно хорошо? Готово!</div></div>
</div>
<div style="background:#ffffff08;border:1px solid #ffffff15;border-radius:var(--radius);padding:32px;text-align:center;">
<div style="font-size:18px;font-weight:700;margin-bottom:24px;color:#ffffffcc;">Оценки от Проверщика качества:</div>
<div class="score-demo">
<div class="score-badge score-fail"><span class="num">1-6</span><span class="lbl">😬 Переделай!</span></div>
<div class="score-badge score-ok"><span class="num">7-8</span><span class="lbl">😊 Хорошо!</span></div>
<div class="score-badge score-great"><span class="num">9-10</span><span class="lbl">🌟 Отлично!</span></div>
</div>
<p style="margin-top:24px;color:#ffffffaa;font-size:15px;">Оценка ниже 7 → Бобу нужно попробовать ещё раз! (До 2 дополнительных попыток)</p>
</div>
</section>
<div class="final-section">
<h2>Теперь ты знаешь,<br>как ИИ-команды <span style="color:var(--yellow)">на самом деле работают!</span></h2>
<p>Агенты · Делегация · Контроль качества · Собственное время — это не магия, это умная командная работа!</p>
<div class="cta-group">
<a href="https://github.com/Jeuners/Time_Dilation_in_LLM_Agent_Systems" class="cta-primary">📄 Читать статью</a>
<a href="explainer-en.html" class="cta-secondary">🇬🇧 English</a>
</div>
</div>
<script>
const log=document.getElementById('log'),playBtn=document.getElementById('play-btn');let running=false;
function addLog(t,c='',d=0){return new Promise(r=>setTimeout(()=>{const e=document.createElement('div');e.className='log-line '+c;e.textContent=t;log.appendChild(e);log.scrollTop=log.scrollHeight;r()},d))}
function setActive(id,a=true){const e=document.getElementById(id);if(!e)return;a?(e.classList.add('active'),e.style.animation='pulse-glow 0.8s ease-in-out infinite'):(e.classList.remove('active'),e.style.animation='')}
function setStatus(id,t){const e=document.getElementById(id);if(e)e.textContent=t}
function flyMsg(id,lid){return new Promise(r=>{const b=document.getElementById(id),l=document.getElementById(lid);if(!b||!l){r();return}const d=l.offsetWidth;b.style.setProperty('--fly-dist',d+'px');b.style.left='0px';b.style.animation='none';b.offsetHeight;b.style.animation='msgFly 1.2s ease-in-out forwards';setTimeout(r,1300)})}
function showScore(s){const e=document.getElementById('score-display'),c=s>=9?'var(--green)':s>=7?'var(--yellow)':'var(--pink)',em=s>=9?'🌟':s>=7?'😊':'😬';e.innerHTML=`<div style="font-size:48px;animation:scoreIn 0.5s forwards;opacity:0">${em}</div><div style="font-size:22px;font-weight:900;color:${c};animation:scoreIn 0.5s 0.2s forwards;opacity:0">Оценка: ${s}/10</div>`}
async function runDemo(){if(running)return;running=true;playBtn.disabled=true;log.innerHTML='';document.getElementById('score-display').innerHTML='';['si-user','si-martin','si-bob','si-qc'].forEach(id=>setActive(id,false));['ss-user','ss-martin','ss-bob','ss-qc'].forEach(id=>setStatus(id,'ждёт...'));
const score=7+Math.floor(Math.random()*3),doQC=Math.random()<0.6;
setActive('si-user');setStatus('ss-user','Задание!');await addLog('👤 Ты: "Объясни как работают агенты!"');await flyMsg('msg1','line1');setActive('si-user',false);
setActive('si-martin');setStatus('ss-martin','делегирует...');await addLog('🧠 Мартин: Распределяю задачу...','' ,400);await new Promise(r=>setTimeout(r,600));
setStatus('ss-martin','→ Боб');await flyMsg('msg2','line2');setActive('si-martin',false);
setActive('si-bob');setStatus('ss-bob','⚡ работает...');await addLog('⚡ Боб: Беру! (быстро)','log-time',200);await new Promise(r=>setTimeout(r,1200));
setStatus('ss-bob','✅ готово!');await addLog('⚡ Боб: Готово! "Агенты — это роботы, которые работают вместе..."','log-ok',300);
if(doQC){await addLog('🔍 Проверка запущена (60% шанс)...','log-qc',600);setActive('si-bob',false);await flyMsg('msg3','line3');setActive('si-qc');setStatus('ss-qc','🔍 проверяет...');await new Promise(r=>setTimeout(r,1500));setStatus('ss-qc',`${score}/10`);await addLog(`🔍 Проверщик: ${score}/10 — ${score>=7?'Принято! ✅':'Переделать! ❌'}`,'log-qc',200);showScore(score);setActive('si-qc',false);}
else{setActive('si-bob',false);await addLog('✓ Проверки не было (40% шанс)','',600);showScore(score);}
setActive('si-martin');setStatus('ss-martin','🏆 Готово!');await addLog('🧠 Мартин: Миссия выполнена! '+(doQC?`Оценка: ${score}/10`:'Доставлено напрямую.'),'log-ok',500);await new Promise(r=>setTimeout(r,400));setActive('si-martin',false);setStatus('ss-user','🎉 Спасибо!');
running=false;playBtn.disabled=false;playBtn.textContent='▶ Ещё раз!';}
const obs=new IntersectionObserver(e=>{e.forEach(x=>{if(x.isIntersecting)x.target.querySelectorAll('.zeit-bar').forEach(b=>b.style.animation='barGrow 1.5s ease-out forwards')})},{threshold:0.3});document.querySelectorAll('.zeit-cards').forEach(el=>obs.observe(el));
</script>
</body>
</html>