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>
931 lines
30 KiB
HTML
931 lines
30 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Wie sprechen KI-Roboter miteinander?</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;
|
|
--card: #ffffff12;
|
|
--radius: 20px;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Nunito', sans-serif;
|
|
background: var(--dark);
|
|
color: #fff;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
/* ── HERO ─────────────────────────────────────────────────────────── */
|
|
.hero {
|
|
min-height: 100vh;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
text-align: center;
|
|
padding: 40px 20px;
|
|
background: radial-gradient(ellipse at 30% 40%, #2d1b6920 0%, transparent 60%),
|
|
radial-gradient(ellipse at 70% 60%, #1b3a6920 0%, transparent 60%);
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.hero::before {
|
|
content: '';
|
|
position: absolute;
|
|
inset: 0;
|
|
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.03'%3E%3Ccircle cx='30' cy='30' r='2'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
|
pointer-events: none;
|
|
}
|
|
|
|
.hero-eyebrow {
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.18em;
|
|
text-transform: uppercase;
|
|
color: var(--yellow);
|
|
margin-bottom: 20px;
|
|
opacity: 0;
|
|
animation: fadeUp 0.6s 0.2s forwards;
|
|
}
|
|
|
|
.hero h1 {
|
|
font-size: clamp(2.2rem, 6vw, 5rem);
|
|
font-weight: 900;
|
|
line-height: 1.08;
|
|
letter-spacing: -0.03em;
|
|
text-wrap: balance;
|
|
margin-bottom: 24px;
|
|
opacity: 0;
|
|
animation: fadeUp 0.6s 0.4s forwards;
|
|
}
|
|
|
|
.hero h1 span { color: var(--yellow); }
|
|
|
|
.hero-lead {
|
|
font-size: clamp(1.1rem, 2vw, 1.4rem);
|
|
color: #ffffffbb;
|
|
max-width: 560px;
|
|
line-height: 1.6;
|
|
margin-bottom: 48px;
|
|
text-wrap: pretty;
|
|
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 CARDS ──────────────────────────────────────────────────── */
|
|
.robot {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 8px;
|
|
cursor: default;
|
|
}
|
|
|
|
.robot-body {
|
|
width: 90px;
|
|
height: 90px;
|
|
border-radius: 22px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 44px;
|
|
position: relative;
|
|
box-shadow: 0 8px 32px rgba(0,0,0,0.3);
|
|
transition: transform 0.2s;
|
|
animation: robotFloat 3s ease-in-out infinite;
|
|
}
|
|
|
|
.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); }
|
|
|
|
/* ── SECTIONS ─────────────────────────────────────────────────────── */
|
|
section {
|
|
padding: clamp(64px, 8vw, 120px) 20px;
|
|
max-width: 1100px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.section-label {
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
letter-spacing: 0.18em;
|
|
text-transform: uppercase;
|
|
color: var(--yellow);
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.section-title {
|
|
font-size: clamp(1.8rem, 3.5vw, 2.8rem);
|
|
font-weight: 900;
|
|
line-height: 1.12;
|
|
letter-spacing: -0.02em;
|
|
margin-bottom: 48px;
|
|
text-wrap: balance;
|
|
}
|
|
|
|
/* ── AGENT CARDS GRID ─────────────────────────────────────────────── */
|
|
.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: 20px;
|
|
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;
|
|
letter-spacing: 0.1em;
|
|
text-transform: uppercase;
|
|
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; }
|
|
|
|
/* ── ANIMATION STAGE ──────────────────────────────────────────────── */
|
|
.stage-wrap {
|
|
background: #ffffff08;
|
|
border: 1px solid #ffffff15;
|
|
border-radius: var(--radius);
|
|
padding: 40px;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.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;
|
|
}
|
|
|
|
/* Message bubble flying */
|
|
.msg-bubble {
|
|
position: absolute;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
background: var(--yellow);
|
|
color: #1a1a2e;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
padding: 6px 12px;
|
|
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; }
|
|
.msg-bubble.approved { background: var(--green); 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: 'Nunito', sans-serif;
|
|
font-size: 17px;
|
|
font-weight: 900;
|
|
cursor: pointer;
|
|
margin-top: 28px;
|
|
transition: transform 0.15s, box-shadow 0.15s;
|
|
box-shadow: 0 4px 20px rgba(255,217,61,0.3);
|
|
}
|
|
|
|
.play-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 28px rgba(255,217,61,0.4); }
|
|
.play-btn:active { transform: translateY(0); }
|
|
.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 SECTION ─────────────────────────────────────────────────── */
|
|
.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;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.zeit-bar-wrap {
|
|
height: 8px;
|
|
background: #ffffff15;
|
|
border-radius: 99px;
|
|
margin: 16px 0 8px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.zeit-bar {
|
|
height: 100%;
|
|
border-radius: 99px;
|
|
animation: barGrow 1.5s ease-out forwards;
|
|
transform-origin: left;
|
|
transform: scaleX(0);
|
|
}
|
|
|
|
.zeit-bar-fast { background: var(--green); width: 95%; }
|
|
.zeit-bar-normal { background: var(--blue); width: 60%; }
|
|
.zeit-bar-slow { background: var(--purple); width: 25%; }
|
|
|
|
.zeit-emoji { font-size: 36px; margin-bottom: 12px; display: block; }
|
|
.zeit-name { font-size: 18px; font-weight: 900; margin-bottom: 6px; }
|
|
.zeit-desc { font-size: 14px; color: #ffffffaa; line-height: 1.5; }
|
|
.zeit-rate { font-size: 22px; font-weight: 900; margin-top: 8px; }
|
|
|
|
/* ── QC SECTION ───────────────────────────────────────────────────── */
|
|
.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: 15px; 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 CTA ────────────────────────────────────────────────────── */
|
|
.final-section {
|
|
text-align: center;
|
|
padding: clamp(80px, 10vw, 140px) 20px;
|
|
background: linear-gradient(180deg, transparent, #ffffff06);
|
|
}
|
|
|
|
.final-section h2 {
|
|
font-size: clamp(2rem, 4vw, 3.5rem);
|
|
font-weight: 900;
|
|
line-height: 1.1;
|
|
letter-spacing: -0.02em;
|
|
margin-bottom: 20px;
|
|
text-wrap: balance;
|
|
}
|
|
|
|
.final-section p {
|
|
font-size: 18px;
|
|
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: 'Nunito', sans-serif;
|
|
font-size: 17px;
|
|
font-weight: 900;
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
transition: transform 0.15s, box-shadow 0.15s;
|
|
box-shadow: 0 4px 20px rgba(255,217,61,0.3);
|
|
}
|
|
|
|
.cta-primary:hover { transform: translateY(-2px); box-shadow: 0 8px 28px rgba(255,217,61,0.4); }
|
|
|
|
.cta-secondary {
|
|
background: transparent;
|
|
color: #fff;
|
|
border: 2px solid #ffffff30;
|
|
border-radius: 99px;
|
|
padding: 16px 36px;
|
|
font-family: 'Nunito', sans-serif;
|
|
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 ────────────────────────────────────────────────────── */
|
|
@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 var(--yellow)55, 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; }
|
|
.qc-arrow { transform: rotate(90deg); }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<!-- ── HERO ─────────────────────────────────────────────────────────── -->
|
|
<div class="hero">
|
|
<div class="hero-eyebrow">🤖 KI-Roboter erklärt</div>
|
|
<h1>Wie reden <span>KI-Agenten</span><br>miteinander?</h1>
|
|
<p class="hero-lead">
|
|
Stell dir vor, du hast ein Team aus Robotern. Jeder hat einen Job — und sie schicken sich Nachrichten, um zusammenzuarbeiten. Genau so funktionieren KI-Agenten!
|
|
</p>
|
|
<div class="hero-robots">
|
|
<div class="robot">
|
|
<div class="robot-body r-martin">🧠</div>
|
|
<div class="robot-name">Martin</div>
|
|
<div class="robot-role">Der Chef</div>
|
|
</div>
|
|
<div class="robot">
|
|
<div class="robot-body r-bob">⚡</div>
|
|
<div class="robot-name">Bob</div>
|
|
<div class="robot-role">Super schnell</div>
|
|
</div>
|
|
<div class="robot">
|
|
<div class="robot-body r-diana">🐢</div>
|
|
<div class="robot-name">Diana</div>
|
|
<div class="robot-role">Sehr gründlich</div>
|
|
</div>
|
|
<div class="robot">
|
|
<div class="robot-body r-qc">🔍</div>
|
|
<div class="robot-name">QC-Checker</div>
|
|
<div class="robot-role">Der Qualitätscheck</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ── AGENTEN ────────────────────────────────────────────────────────── -->
|
|
<section>
|
|
<div class="section-label">Die Teammitglieder</div>
|
|
<h2 class="section-title">Jeder Roboter hat<br>eine Superkraft</h2>
|
|
|
|
<div class="agent-grid">
|
|
<div class="agent-card">
|
|
<span class="agent-card-icon">🧠</span>
|
|
<h3>Martin — Der Chef</h3>
|
|
<p>Martin bekommt den Auftrag und teilt die Arbeit auf. Er wartet auf die Ergebnisse und fasst alles zusammen.</p>
|
|
<span class="tag tag-blue">Delegator</span>
|
|
</div>
|
|
<div class="agent-card">
|
|
<span class="agent-card-icon">⚡</span>
|
|
<h3>Bob — Der Blitz</h3>
|
|
<p>Bob arbeitet superschnell. Er antwortet sofort — wie wenn du bei Mathe ganz einfache Aufgaben hast.</p>
|
|
<span class="tag tag-green">Echo · schnell</span>
|
|
</div>
|
|
<div class="agent-card">
|
|
<span class="agent-card-icon">🐢</span>
|
|
<h3>Diana — Die Gründliche</h3>
|
|
<p>Diana braucht etwas länger, aber macht es sehr sorgfältig. Wie wenn du einen Aufsatz schreibst.</p>
|
|
<span class="tag tag-purple">Slow · gründlich</span>
|
|
</div>
|
|
<div class="agent-card">
|
|
<span class="agent-card-icon">🔍</span>
|
|
<h3>QC-Checker — Der Lehrer</h3>
|
|
<p>Prüft ob die Arbeit gut genug ist. Gibt eine Note von 1 bis 10. Wenn die Note zu schlecht ist → nochmal!</p>
|
|
<span class="tag tag-red">Reviewer · 9/10 Ziel</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ── DEMO ANIMATION ──────────────────────────────────────────────────── -->
|
|
<section>
|
|
<div class="section-label">Live-Demo</div>
|
|
<h2 class="section-title">Schau zu wie sie<br>zusammenarbeiten!</h2>
|
|
|
|
<div class="stage-wrap">
|
|
<div class="stage" id="stage">
|
|
|
|
<!-- User -->
|
|
<div class="stage-agent">
|
|
<div class="stage-icon r-martin" id="si-user">👤</div>
|
|
<div class="stage-label">Du</div>
|
|
<div class="stage-status" id="ss-user">Auftrag!</div>
|
|
</div>
|
|
|
|
<div class="arrow-line" id="line1" style="position:relative;">
|
|
<div class="msg-bubble" id="msg1">📝 Mach das!</div>
|
|
</div>
|
|
|
|
<!-- Martin -->
|
|
<div class="stage-agent">
|
|
<div class="stage-icon r-martin" id="si-martin">🧠</div>
|
|
<div class="stage-label">Martin</div>
|
|
<div class="stage-status" id="ss-martin">wartet...</div>
|
|
</div>
|
|
|
|
<div class="arrow-line" id="line2" style="position:relative;">
|
|
<div class="msg-bubble" id="msg2">📋 Erledige das!</div>
|
|
</div>
|
|
|
|
<!-- Bob -->
|
|
<div class="stage-agent">
|
|
<div class="stage-icon r-bob" id="si-bob">⚡</div>
|
|
<div class="stage-label">Bob</div>
|
|
<div class="stage-status" id="ss-bob">bereit</div>
|
|
</div>
|
|
|
|
<div class="arrow-line" id="line3" style="position:relative;">
|
|
<div class="msg-bubble qc" id="msg3">🔍 Ist das gut?</div>
|
|
</div>
|
|
|
|
<!-- QC -->
|
|
<div class="stage-agent">
|
|
<div class="stage-icon r-qc" id="si-qc">🔍</div>
|
|
<div class="stage-label">QC-Check</div>
|
|
<div class="stage-status" id="ss-qc">bereit</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Score display -->
|
|
<div id="score-display" style="text-align:center;margin-top:24px;min-height:48px;"></div>
|
|
|
|
<div class="log-box" id="log">Drück den Knopf und schau zu! 👇</div>
|
|
|
|
<div style="text-align:center;">
|
|
<button class="play-btn" id="play-btn" onclick="runDemo()">
|
|
▶ Mission starten!
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ── ZEIT / EIGENZEIT ────────────────────────────────────────────────── -->
|
|
<section>
|
|
<div class="section-label">Das Zeitgefühl</div>
|
|
<h2 class="section-title">Warum Zeit sich<br>unterschiedlich anfühlt</h2>
|
|
|
|
<p style="color:#ffffffaa;font-size:17px;max-width:580px;line-height:1.7;margin-bottom:40px;">
|
|
Kennst du das? Spielen geht superschnell — Schule fühlt sich ewig an. Genau so geht es den Robotern. Jeder erlebt Zeit anders. Das nennen Forscher <strong style="color:var(--yellow)">Eigenzeit</strong>.
|
|
</p>
|
|
|
|
<div class="zeit-cards">
|
|
<div class="zeit-card">
|
|
<span class="zeit-emoji">⚡</span>
|
|
<div class="zeit-name" style="color:var(--green)">Bob — Blitzschnell</div>
|
|
<div class="zeit-bar-wrap"><div class="zeit-bar zeit-bar-fast"></div></div>
|
|
<div class="zeit-rate" style="color:var(--green)">97 Aktionen/Sekunde</div>
|
|
<div class="zeit-desc" style="margin-top:8px">Für Bob ist eine Stunde wie eine Minute. Er macht so viel in so kurzer Zeit!</div>
|
|
</div>
|
|
<div class="zeit-card">
|
|
<span class="zeit-emoji">🧠</span>
|
|
<div class="zeit-name" style="color:var(--blue)">Martin — Normal</div>
|
|
<div class="zeit-bar-wrap"><div class="zeit-bar zeit-bar-normal"></div></div>
|
|
<div class="zeit-rate" style="color:var(--blue)">2.6 Aktionen/Sekunde</div>
|
|
<div class="zeit-desc" style="margin-top:8px">Martin koordiniert alles. Nicht zu schnell, nicht zu langsam — gerade richtig.</div>
|
|
</div>
|
|
<div class="zeit-card">
|
|
<span class="zeit-emoji">🐢</span>
|
|
<div class="zeit-name" style="color:var(--purple)">Diana — Gründlich</div>
|
|
<div class="zeit-bar-wrap"><div class="zeit-bar zeit-bar-slow"></div></div>
|
|
<div class="zeit-rate" style="color:var(--purple)">0.04 Aktionen/Sekunde</div>
|
|
<div class="zeit-desc" style="margin-top:8px">Diana erlebt gedehnte Zeit. Jede Aufgabe fühlt sich für sie wie eine große Reise an.</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;">💡 Merke dir das so:</div>
|
|
<p style="font-size:16px;color:#ffffffbb;line-height:1.7;">
|
|
Wenn du Videospiele spielst, fliegt die Zeit — du machst viele Aktionen pro Minute.<br>
|
|
Wenn du auf den Bus wartest, kriecht die Zeit — du machst kaum etwas.<br><br>
|
|
Die Roboter haben dasselbe Phänomen. Wir nennen es <strong style="color:var(--yellow)">Causal Dilation Clock</strong> — eine Uhr die misst wie aktiv jeder Roboter wirklich war.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ── QC / DOPPEL-AGENTEN ─────────────────────────────────────────────── -->
|
|
<section>
|
|
<div class="section-label">Das Qualitätssystem</div>
|
|
<h2 class="section-title">Der Doppel-Agenten<br>Trick 🔍</h2>
|
|
|
|
<p style="color:#ffffffaa;font-size:17px;max-width:560px;line-height:1.7;margin-bottom:40px;">
|
|
Bei guten Aufgaben gibt es immer jemanden der kontrolliert. In der Schule ist das dein Lehrer. Bei unseren Robotern ist das der <strong style="color:var(--pink)">QC-Checker</strong>.
|
|
</p>
|
|
|
|
<div class="qc-flow">
|
|
<div class="qc-step">
|
|
<span class="qc-step-icon">📝</span>
|
|
<div class="qc-step-title">Auftrag kommt</div>
|
|
<div class="qc-step-desc">Martin bekommt eine Aufgabe</div>
|
|
</div>
|
|
<div class="qc-arrow">→</div>
|
|
<div class="qc-step">
|
|
<span class="qc-step-icon">⚡</span>
|
|
<div class="qc-step-title">Bob arbeitet</div>
|
|
<div class="qc-step-desc">Erledigt die Aufgabe schnell</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">QC prüft</div>
|
|
<div class="qc-step-desc">In 6 von 10 Fällen</div>
|
|
</div>
|
|
<div class="qc-arrow">→</div>
|
|
<div class="qc-step">
|
|
<span class="qc-step-icon">🏆</span>
|
|
<div class="qc-step-title">Ergebnis</div>
|
|
<div class="qc-step-desc">Gut genug? Fertig!</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;">Noten die der QC-Checker vergibt:</div>
|
|
<div class="score-demo">
|
|
<div class="score-badge score-fail">
|
|
<span class="num">1-6</span>
|
|
<span class="lbl">😬 Nochmal!</span>
|
|
</div>
|
|
<div class="score-badge score-ok">
|
|
<span class="num">7-8</span>
|
|
<span class="lbl">😊 Gut!</span>
|
|
</div>
|
|
<div class="score-badge score-great">
|
|
<span class="num">9-10</span>
|
|
<span class="lbl">🌟 Super!</span>
|
|
</div>
|
|
</div>
|
|
<p style="margin-top:24px;color:#ffffffaa;font-size:15px;">
|
|
Wenn die Note unter 7 ist → Bob muss nochmal ran! (Bis zu 2x Versuche)
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ── FINAL ────────────────────────────────────────────────────────────── -->
|
|
<div class="final-section">
|
|
<h2>Jetzt weißt du,<br>wie KI-Teams <span style="color:var(--yellow)">wirklich arbeiten!</span></h2>
|
|
<p>Agenten · Delegation · Qualitätscheck · Eigenzeit — das sind keine Zauberei, das ist cleveres Teamwork!</p>
|
|
<div class="cta-group">
|
|
<a href="/lab" class="cta-primary">🧪 Live ausprobieren</a>
|
|
<a href="https://github.com/Jeuners/Time_Dilation_in_LLM_Agent_Systems" class="cta-secondary" target="_blank">📄 Das Paper</a>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
const log = document.getElementById('log');
|
|
const playBtn = document.getElementById('play-btn');
|
|
let running = false;
|
|
|
|
function addLog(text, cls='', delay=0) {
|
|
return new Promise(r => setTimeout(() => {
|
|
const d = document.createElement('div');
|
|
d.className = 'log-line ' + cls;
|
|
d.textContent = text;
|
|
log.appendChild(d);
|
|
log.scrollTop = log.scrollHeight;
|
|
r();
|
|
}, delay));
|
|
}
|
|
|
|
function setActive(id, active=true) {
|
|
const el = document.getElementById(id);
|
|
if (!el) return;
|
|
if (active) {
|
|
el.classList.add('active');
|
|
el.style.animation = 'pulse-glow 0.8s ease-in-out infinite';
|
|
} else {
|
|
el.classList.remove('active');
|
|
el.style.animation = '';
|
|
}
|
|
}
|
|
|
|
function setStatus(id, text) {
|
|
const el = document.getElementById(id);
|
|
if (el) el.textContent = text;
|
|
}
|
|
|
|
function flyMsg(id, lineId, reverse=false) {
|
|
return new Promise(r => {
|
|
const bubble = document.getElementById(id);
|
|
const line = document.getElementById(lineId);
|
|
if (!bubble || !line) { r(); return; }
|
|
const dist = line.offsetWidth;
|
|
bubble.style.setProperty('--fly-dist', (reverse ? -dist : dist) + 'px');
|
|
bubble.style.left = reverse ? (dist - 20) + 'px' : '0px';
|
|
bubble.style.animation = 'none';
|
|
bubble.offsetHeight; // force reflow
|
|
bubble.style.animation = 'msgFly 1.2s ease-in-out forwards';
|
|
setTimeout(r, 1300);
|
|
});
|
|
}
|
|
|
|
function showScore(score) {
|
|
const el = document.getElementById('score-display');
|
|
const color = score >= 9 ? 'var(--green)' : score >= 7 ? 'var(--yellow)' : 'var(--pink)';
|
|
const emoji = score >= 9 ? '🌟' : score >= 7 ? '😊' : '😬';
|
|
el.innerHTML = `<div style="font-size:48px;animation:scoreIn 0.5s forwards;opacity:0">${emoji}</div>
|
|
<div style="font-size:22px;font-weight:900;color:${color};animation:scoreIn 0.5s 0.2s forwards;opacity:0">
|
|
QC-Note: ${score}/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, 'wartet...'));
|
|
|
|
const score = 7 + Math.floor(Math.random() * 3); // 7-9
|
|
const doQC = Math.random() < 0.6;
|
|
|
|
// Step 1: User → Martin
|
|
setActive('si-user');
|
|
setStatus('ss-user', 'Auftrag!');
|
|
await addLog('👤 Du: "Erkläre mir wie Agenten arbeiten!"');
|
|
await flyMsg('msg1', 'line1');
|
|
setActive('si-user', false);
|
|
|
|
// Step 2: Martin receives
|
|
setActive('si-martin');
|
|
setStatus('ss-martin', 'delegiert...');
|
|
await addLog('🧠 Martin: Ich teile die Aufgabe auf...', '', 400);
|
|
await new Promise(r => setTimeout(r, 600));
|
|
|
|
// Step 3: Martin → Bob
|
|
setStatus('ss-martin', '→ Bob');
|
|
await flyMsg('msg2', 'line2');
|
|
setActive('si-martin', false);
|
|
|
|
// Step 4: Bob works
|
|
setActive('si-bob');
|
|
setStatus('ss-bob', '⚡ arbeitet...');
|
|
await addLog('⚡ Bob: Ich bin dran! (schnell)', 'log-time', 200);
|
|
await new Promise(r => setTimeout(r, 1200));
|
|
|
|
// Step 5: Bob antwortet
|
|
setStatus('ss-bob', '✅ fertig!');
|
|
await addLog('⚡ Bob: Fertig! "Agenten sind Roboter die zusammenarbeiten..."', 'log-ok', 300);
|
|
|
|
if (doQC) {
|
|
// QC check
|
|
await addLog('🔍 QC wird ausgelöst (60% Chance)...', 'log-qc', 600);
|
|
setActive('si-bob', false);
|
|
await flyMsg('msg3', 'line3');
|
|
setActive('si-qc');
|
|
setStatus('ss-qc', '🔍 prüft...');
|
|
await new Promise(r => setTimeout(r, 1500));
|
|
setStatus('ss-qc', `✅ Note: ${score}/10`);
|
|
await addLog(`🔍 QC-Checker: Note ${score}/10 — ${score >= 7 ? 'Approved! ✅' : 'Nochmal! ❌'}`, 'log-qc', 200);
|
|
showScore(score);
|
|
setActive('si-qc', false);
|
|
} else {
|
|
setActive('si-bob', false);
|
|
await addLog('✓ Kein QC-Check diesmal (40% Chance)', '', 600);
|
|
showScore(score);
|
|
}
|
|
|
|
// Done
|
|
setActive('si-martin');
|
|
setStatus('ss-martin', '🏆 Fertig!');
|
|
await addLog('🧠 Martin: Mission abgeschlossen! ' + (doQC ? `QC-Note: ${score}/10` : 'Direkt geliefert.'), 'log-ok', 500);
|
|
await new Promise(r => setTimeout(r, 400));
|
|
setActive('si-martin', false);
|
|
setStatus('ss-user', '🎉 Danke!');
|
|
|
|
running = false;
|
|
playBtn.disabled = false;
|
|
playBtn.textContent = '▶ Nochmal!';
|
|
}
|
|
|
|
// Animate zeit bars on scroll
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.querySelectorAll('.zeit-bar').forEach(b => {
|
|
b.style.animation = 'barGrow 1.5s ease-out forwards';
|
|
});
|
|
}
|
|
});
|
|
}, { threshold: 0.3 });
|
|
|
|
document.querySelectorAll('.zeit-cards').forEach(el => observer.observe(el));
|
|
</script>
|
|
</body>
|
|
</html>
|