herzlos bin ich
schenke es dir
mein Herz
schlägt zusammen mit
deinem in dir – erspürt
wie einsam du bist
weil es sind deine Tränen
die ich weine, meine Tränen
können es nicht sein; wie
kann ich weinen - verlassen
und leer - bin ich
mein Herz los
</main>
<script>
const b1 = document.getElementById('block-1');
const b2 = document.getElementById('block-2');
const b3 = document.getElementById('block-3');
const b4 = document.getElementById('block-4');
const b5 = document.getElementById('block-5');
const BLOCKS = [b1,b2,b3,b4,b5];
function wait(ms) { return new Promise(r => setTimeout(r, ms)); }
function op(el, val, dur) {
el.style.transition = `opacity ${dur||2}s ease-in-out`;
el.style.opacity = val;
}
// ── Flaggen ──
const FLAGS = [
{ label:'DE', bg:'linear-gradient(180deg,#222 33%,#CC0000 33%,#CC0000 66%,#FFCE00 66%)' },
{ label:'ES', bg:'linear-gradient(180deg,#AA151B 25%,#F1BF00 25%,#F1BF00 75%,#AA151B 75%)' },
{ label:'EN', bg:'#003087' },
{ label:'FR', bg:'linear-gradient(90deg,#002395 33%,#EEE 33%,#EEE 66%,#ED2939 66%)' },
{ label:'IT', bg:'linear-gradient(90deg,#009246 33%,#EEE 33%,#EEE 66%,#CE2B37 66%)' },
{ label:'PT', bg:'linear-gradient(90deg,#006600 38%,#EE0000 38%)' },
{ label:'RU', bg:'linear-gradient(180deg,#EEE 33%,#003580 33%,#003580 66%,#DC143C 66%)' },
{ label:'AR', bg:'#006C35' },
{ label:'ZH', bg:'#DE2910' },
{ label:'JA', bg:'#f5f5f5' },
{ label:'UA', bg:'linear-gradient(180deg,#005BBB 50%,#FFD500 50%)' },
{ label:'NL', bg:'linear-gradient(180deg,#AE1C28 33%,#EEE 33%,#EEE 66%,#21468B 66%)' },
{ label:'PL', bg:'linear-gradient(180deg,#EEE 50%,#DC143C 50%)' },
{ label:'TR', bg:'#E30A17' },
];
// Fahnen-Elemente aufbauen
const fz = document.getElementById('flagZone');
FLAGS.forEach(f => {
const el = document.createElement('div');
el.className = 'ff';
el.style.background = f.bg;
el.title = f.label;
fz.appendChild(el);
});
const fEls = Array.from(fz.querySelectorAll('.ff'));
// Zufällig n Fahnen einblenden, nach dur ms ausblenden
async function flashFlags(n, dur, markGreen) {
fEls.forEach(f => { f.classList.remove('ein','aktiv'); });
const chosen = [...fEls].sort(() => Math.random()-0.5).slice(0,n);
chosen.forEach((f,i) => {
setTimeout(() => f.classList.add('ein'), i*80);
if (markGreen) setTimeout(() => f.classList.add('aktiv'), i*80+200);
});
await wait(dur);
chosen.forEach(f => { f.classList.remove('ein','aktiv'); });
}
// Dauerhafter sanfter Loop: alle paar Sekunden 2–4 Fahnen
function startFlagLoop() {
async function loop() {
await wait(1500 + Math.random()*3000);
await flashFlags(2 + Math.floor(Math.random()*3), 1000 + Math.random()*800);
loop();
}
loop();
}
// Alle Fahnen gleichzeitig einblenden (für Klimax)
async function allFlagsOn(dur) {
fEls.forEach((f,i) => setTimeout(() => f.classList.add('ein','aktiv'), i*40));
await wait(dur);
fEls.forEach(f => f.classList.remove('ein','aktiv'));
}
// ── HAUPTSEQUENZ ──
async function runSequence() {
document.getElementById('startBtn').disabled = true;
document.getElementById('navLabel').classList.add('ein');
// Flaggen-Loop startet parallel
startFlagLoop();
// ── Phase 1: Ankommen (33%) ──
op(b3,'0.33'); await wait(3000);
op(b3,'0'); await wait(2000);
op(b2,'0.33'); await wait(3000);
op(b2,'0'); await wait(2000);
op(b4,'0.33'); await wait(2000);
op(b1,'0.33'); await wait(3000);
// ── Phase 2: Verdichtung (66%) ──
op(b3,'0.66'); await wait(2500);
op(b2,'0.66'); await wait(2000);
// Flaggen-Aufleuchten zwischen den Verdichtungen
await flashFlags(4, 1200);
op(b4,'0.66'); await wait(2000);
op(b1,'0.66'); await wait(3000);
// ── Phase 3: Klimax — alle Fahnen + 100% ──
allFlagsOn(2500); // läuft parallel
await wait(400);
for (const b of [b3,b1,b2,b4]) {
b.style.transition = 'opacity 2.5s ease-in-out, color 2.5s ease, text-shadow 2.5s ease';
b.style.opacity = '1';
b.classList.add('voll');
await wait(1800);
}
// Alle vollständig geladen — kurze Pause
await wait(2000);
// ── Phase 4: Endlosschleife ──
loopForever();
}
// ── SCHLEIFE: pulsiert zwischen 40% und 100%, Fahnen blitzen zwischendurch ──
async function loopForever() {
while (true) {
// Abdunkeln auf 40%
BLOCKS.forEach(b => {
b.style.transition = 'opacity 4s ease-in-out';
b.style.opacity = '0.4';
b.classList.remove('voll');
});
await wait(5000);
// Fahnen-Flash während Abdunkelung
await flashFlags(3+Math.floor(Math.random()*4), 1400);
await wait(1500);
// Wieder aufhellen — zufällige Reihenfolge, einer nach dem anderen
const order = [...BLOCKS].sort(() => Math.random()-0.5);
for (const b of order) {
b.style.transition = 'opacity 2.5s ease-in-out, color 2.5s ease, text-shadow 2.5s ease';
b.style.opacity = '1';
b.classList.add('voll');
await wait(1200 + Math.random()*600);
}
await wait(2500);
// Gelegentlich: alle Fahnen kurz auf einmal
if (Math.random() > 0.5) {
await allFlagsOn(1800);
await wait(1000);
}
}
}
</script>
</body>
</html>