diff --git a/frontend/src/lib/timeline/WorldBand.svelte b/frontend/src/lib/timeline/WorldBand.svelte
new file mode 100644
index 00000000..92519535
--- /dev/null
+++ b/frontend/src/lib/timeline/WorldBand.svelte
@@ -0,0 +1,43 @@
+
+
+
+
+ {config.glyph}
+ {config.label}
+ {entry.title}
+
+ {#if showSpan && fromYear && toYear}
+
+ {fromYear}–{toYear}
+
+ {:else if dateText}
+ {dateText}
+ {/if}
+
diff --git a/frontend/src/lib/timeline/WorldBand.svelte.spec.ts b/frontend/src/lib/timeline/WorldBand.svelte.spec.ts
new file mode 100644
index 00000000..497f51b3
--- /dev/null
+++ b/frontend/src/lib/timeline/WorldBand.svelte.spec.ts
@@ -0,0 +1,48 @@
+import { describe, it, expect, afterEach } from 'vitest';
+import { cleanup, render } from 'vitest-browser-svelte';
+import WorldBand from './WorldBand.svelte';
+import { makeEntry } from './test-factories';
+
+afterEach(() => cleanup());
+
+function historical(overrides = {}) {
+ return makeEntry({
+ kind: 'EVENT',
+ derived: false,
+ type: 'HISTORICAL',
+ title: 'Erster Weltkrieg',
+ senderName: '',
+ receiverName: '',
+ precision: 'RANGE',
+ eventDate: '1914-01-01',
+ eventDateEnd: '1918-12-31',
+ documentId: undefined,
+ ...overrides
+ });
+}
+
+describe('WorldBand', () => {
+ it('renders the historical title with the world glyph + "Weltgeschehen" cue (REQ-018)', () => {
+ render(WorldBand, { entry: historical() });
+ expect(document.body.textContent).toContain('Erster Weltkrieg');
+ const hidden = document.querySelector('[aria-hidden="true"]');
+ expect(hidden?.textContent).toBe('◍');
+ const srOnly = document.querySelector('.sr-only');
+ expect(srOnly?.textContent).toBe('Weltgeschehen');
+ });
+
+ it('renders a RANGE span pill 1914–1918 with a Zeitraum aria-label (REQ-009)', () => {
+ render(WorldBand, { entry: historical() });
+ const pill = document.querySelector('[data-testid="world-range"]');
+ expect(pill).not.toBeNull();
+ expect(pill?.textContent).toContain('1914–1918');
+ expect(pill?.getAttribute('aria-label')).toBe('Zeitraum: 1914 bis 1918');
+ });
+
+ it('degrades a RANGE with no end to the start year, no span pill, no crash (REQ-010)', () => {
+ render(WorldBand, { entry: historical({ eventDateEnd: undefined }) });
+ expect(document.querySelector('[data-testid="world-range"]')).toBeNull();
+ expect(document.body.textContent).toContain('Erster Weltkrieg');
+ expect(document.body.textContent).toContain('1914');
+ });
+});