Promote develop → main (2026-05-06 22:49 UTC) #2
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
# Lagebild-Daten (werden per Cron-Sync vom Monitor regeneriert)
|
||||
lagebild/data/
|
||||
lagen/*/data/
|
||||
lagen/*/data/*
|
||||
# Aber Verzeichnis-Platzhalter behalten (Staging-Container braucht Mountpoint)
|
||||
!lagen/*/data/.gitkeep
|
||||
|
||||
35
CLAUDE.md
35
CLAUDE.md
@@ -50,6 +50,10 @@ STRUCTURE:
|
||||
- index.html: Hauptseite (EN)
|
||||
- legal-notice.html: Impressum (EN, Hinweis "German version prevails")
|
||||
- privacy.html: Datenschutz (EN, Hinweis "German version prevails")
|
||||
situations:
|
||||
- iran-conflict/index.html: Lagebild Iran (EN-Mirror, teilt /lagen/iran-konflikt/data)
|
||||
- cyber-attacks/index.html: Lagebild Cyberangriffe (EN-Mirror, teilt /lagen/cyberangriffe/data)
|
||||
- deepfakes/index.html: Recherche Deepfakes (EN-Mirror, teilt /lagen/deepfakes/data)
|
||||
|
||||
assets:
|
||||
fonts: [Inter, Bebas Neue]
|
||||
@@ -98,12 +102,23 @@ PAGES:
|
||||
product:
|
||||
- AccountForger Video-Demo
|
||||
lagen:
|
||||
url_struktur: /lagen/{thema}/
|
||||
url_struktur:
|
||||
de: /lagen/{thema}/
|
||||
en: /en/situations/{slug}/ (slug ist die englische URL-Variante)
|
||||
slug_mapping:
|
||||
iran-konflikt: iran-conflict
|
||||
cyberangriffe: cyber-attacks
|
||||
deepfakes: deepfakes
|
||||
daten_freigabe: |
|
||||
EN-Mirror-Seiten setzen window.LAGEBILD_DATA_BASE auf den DE-Pfad,
|
||||
damit beide Sprachvarianten die gleichen JSON-Daten laden. Das
|
||||
lagebild.js liest curLang() aus <html lang> und schaltet UI-Strings
|
||||
automatisch um (lang.de / lang.en Dictionary).
|
||||
redirect: /lagebild/ -> 301 -> /lagen/iran-konflikt/
|
||||
aktiv:
|
||||
- iran-konflikt: Live-Lagebild Irankonflikt (ehemals /lagebild/)
|
||||
geplant:
|
||||
- (2 weitere Lagen in Vorbereitung)
|
||||
- iran-konflikt / iran-conflict: Live-Lagebild Irankonflikt
|
||||
- cyberangriffe / cyber-attacks: Live-Lagebild Cyberangriffe
|
||||
- deepfakes / deepfakes: Recherche-Briefing Deepfakes
|
||||
vorschau:
|
||||
url: /vorschau/
|
||||
zweck: Produktseite AegisSight Monitor (ersetzt spaeter die Hauptseite)
|
||||
@@ -122,7 +137,14 @@ DEVELOPMENT:
|
||||
sprachumschalter: css/lang-switcher.css
|
||||
pendant_urls: in jeder Seite hardcoded (funktioniert ohne JS)
|
||||
cookie_banner: cookie-consent.js liest <html lang> selbststaendig
|
||||
open: contact-form.py ist noch DE-only (Validierungs- und Mailtexte)
|
||||
lagen: lagebild.js liest <html lang> via curLang(); Daten-Pfad ueber
|
||||
window.LAGEBILD_DATA_BASE pro EN-Mirror-Seite
|
||||
kontaktformular: |
|
||||
Frontend (js/app.js) sendet lang im POST-Body, zeigt Sende- und
|
||||
Fehler-Texte in der jeweiligen Sprache. Backend
|
||||
(/opt/v2-Docker/aegis-website/contact-form.py, NICHT im Repo)
|
||||
liest lang und antwortet entsprechend; E-Mail an info@aegis-sight.de
|
||||
bleibt deutsch, mit Hinweis "[EN]" im Betreff bei EN-Anfragen.
|
||||
large_files: "assets/videos/ (~300MB)"
|
||||
design: mobile-first responsive
|
||||
|
||||
@@ -152,6 +174,9 @@ CHANGE_LOG:
|
||||
- "i18n: Sprachumschalter DE/EN, neue Seiten unter /en/"
|
||||
- "Aufraeumen: js/translations.js, impressum-en.html, datenschutz-en.html entfernt"
|
||||
- "data-translate Attribute aus Lagen-Seiten entfernt"
|
||||
- "EN-Lagen-Seiten unter /en/situations/{slug}/, teilen DE-Datenfiles"
|
||||
- "lagebild.js: curLang() liest <html lang>, dataBase()-Helper neu, tote initLangToggle/switchContent entfernt"
|
||||
- "Kontaktformular zweisprachig (Frontend + Backend)"
|
||||
|
||||
Last-Updated: 2026-05-06
|
||||
|
||||
|
||||
@@ -350,7 +350,7 @@
|
||||
<div class="demo-excerpt" id="demo-excerpt">
|
||||
<div class="excerpt-text" id="excerpt-text">Situation report loading...</div>
|
||||
</div>
|
||||
<a href="/lagen/iran-konflikt/" class="btn btn-primary btn-block">Open full situation report</a>
|
||||
<a href="/en/situations/iran-conflict/" class="btn btn-primary btn-block">Open full situation report</a>
|
||||
</div>
|
||||
<!-- Cyberattacks -->
|
||||
<div class="carousel-card card-live" data-index="1" data-lage="cyberangriffe">
|
||||
@@ -360,7 +360,7 @@
|
||||
<div class="demo-excerpt" id="demo-excerpt-cyberangriffe">
|
||||
<div class="excerpt-text" id="excerpt-text-cyberangriffe">Situation report loading...</div>
|
||||
</div>
|
||||
<a href="/lagen/cyberangriffe/" class="btn btn-primary btn-block">Open full situation report</a>
|
||||
<a href="/en/situations/cyber-attacks/" class="btn btn-primary btn-block">Open full situation report</a>
|
||||
</div>
|
||||
<!-- Deepfakes Research -->
|
||||
<div class="carousel-card card-live" data-index="2" data-lage="deepfakes">
|
||||
@@ -370,7 +370,7 @@
|
||||
<div class="demo-excerpt" id="demo-excerpt-deepfakes">
|
||||
<div class="excerpt-text" id="excerpt-text-deepfakes">Research loading...</div>
|
||||
</div>
|
||||
<a href="/lagen/deepfakes/" class="btn btn-primary btn-block">Open full research</a>
|
||||
<a href="/en/situations/deepfakes/" class="btn btn-primary btn-block">Open full research</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="carousel-nav">
|
||||
|
||||
153
en/situations/cyber-attacks/index.html
Normale Datei
153
en/situations/cyber-attacks/index.html
Normale Datei
@@ -0,0 +1,153 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Situation report: Cyberattacks on German infrastructure - AegisSight</title>
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||
<link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/cyberangriffe/">
|
||||
<link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/cyber-attacks/">
|
||||
<link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/cyberangriffe/">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
<link rel="stylesheet" href="/css/mobile.css">
|
||||
<link rel="stylesheet" href="/css/lang-switcher.css">
|
||||
<link rel="stylesheet" href="/lagen/iran-konflikt/lagebild.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css">
|
||||
<link rel="stylesheet" href="/cookie-consent.css">
|
||||
<script>window.LAGEBILD_DATA_BASE = '/lagen/cyberangriffe/';</script>
|
||||
</head>
|
||||
<body class="lagebild-page">
|
||||
<div class="scroll-progress" id="scroll-progress"></div>
|
||||
<nav class="navbar" role="navigation">
|
||||
<div class="nav-container">
|
||||
<div class="logo">
|
||||
<a href="/en/"><img src="/assets/images/logos/Logo+Schrift_Rechts.png" alt="AegisSight" class="logo-img"></a>
|
||||
</div>
|
||||
<ul class="nav-menu">
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||
</ul>
|
||||
<div class="nav-extras">
|
||||
<div class="lang-switcher" role="group" aria-label="Language">
|
||||
<a class="lang-link" href="/lagen/cyberangriffe/" lang="de" hreflang="de" rel="alternate">DE</a>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<span class="lang-active" lang="en" aria-current="true">EN</span>
|
||||
</div>
|
||||
<button class="mobile-menu-toggle" aria-label="Open menu" aria-expanded="false">
|
||||
<span class="hamburger"><span></span><span></span><span></span></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="nav-menu-mobile" aria-hidden="true">
|
||||
<button class="mobile-menu-close" aria-label="Close menu">
|
||||
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 6L6 18M6 6l12 12" stroke="currentColor"/></svg>
|
||||
</button>
|
||||
<ul>
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||
</ul>
|
||||
<div class="lang-switcher" role="group" aria-label="Language">
|
||||
<a class="lang-link" href="/lagen/cyberangriffe/" lang="de" hreflang="de" rel="alternate">DE</a>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<span class="lang-active" lang="en" aria-current="true">EN</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-menu-overlay"></div>
|
||||
<section class="lagebild-hero">
|
||||
<canvas id="hero-particles"></canvas>
|
||||
<div class="hero-bg-pattern"></div>
|
||||
<div class="container">
|
||||
<h1 id="hero-title">SITUATION REPORT</h1>
|
||||
<p class="hero-incident-title" id="incident-title"></p>
|
||||
<div class="hero-stats" id="hero-stats"></div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="control-bar">
|
||||
<div class="container">
|
||||
<div class="timeline-wrapper">
|
||||
<div class="timeline-strip" id="timeline-strip"></div>
|
||||
<div class="timeline-dropdown" id="timeline-dropdown"></div>
|
||||
</div>
|
||||
<div class="tab-nav" id="tab-nav">
|
||||
<button class="tab-btn active" data-tab="ueberblick">Latest Developments</button>
|
||||
<button class="tab-btn" data-tab="lagebild">Briefing</button>
|
||||
<button class="tab-btn" data-tab="karte">Map</button>
|
||||
<button class="tab-btn" data-tab="faktenchecks">Fact Checks <span class="tab-badge" id="tab-badge-faktenchecks"></span></button>
|
||||
<button class="tab-btn" data-tab="quellen">Sources <span class="tab-badge" id="tab-badge-quellen"></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<main class="lagebild-main">
|
||||
<div class="container">
|
||||
<div class="tab-panel active" id="panel-ueberblick">
|
||||
<p class="data-source-note">Data provided by AegisSight Monitor</p>
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2 id="ueberblick-title">Latest Developments</h2>
|
||||
<span class="card-timestamp" id="ueberblick-timestamp"></span>
|
||||
</div>
|
||||
<div class="card-body" id="ueberblick-content">
|
||||
<div class="loading-skeleton"><div class="skeleton-line"></div><div class="skeleton-line"></div><div class="skeleton-line short"></div></div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="tab-panel" id="panel-lagebild">
|
||||
<p class="data-source-note">Data provided by AegisSight Monitor</p>
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2 id="lagebild-date-title">Briefing</h2>
|
||||
<span class="card-timestamp" id="lagebild-timestamp"></span>
|
||||
</div>
|
||||
<div class="card-body" id="summary-content">
|
||||
<div class="loading-skeleton"><div class="skeleton-line"></div><div class="skeleton-line"></div><div class="skeleton-line short"></div></div>
|
||||
</div>
|
||||
<div class="card-footer" id="inline-sources"></div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="tab-panel" id="panel-quellen">
|
||||
<section class="content-card">
|
||||
<div class="card-header"><h2>Sources</h2><p class="card-description">All sources monitored by AegisSight Monitor</p></div>
|
||||
<div class="card-body" id="sources-grid-container"><div class="loading-skeleton"><div class="skeleton-line"></div><div class="skeleton-line short"></div></div></div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="tab-panel" id="panel-karte">
|
||||
<section class="content-card">
|
||||
<div class="card-header"><h2>Map</h2><p class="card-description">Geographic distribution of reports</p></div>
|
||||
<div class="card-body"><div id="map-container" style="height:500px;border-radius:4px;overflow:hidden;"></div></div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="tab-panel" id="panel-faktenchecks">
|
||||
<section class="content-card">
|
||||
<div class="card-header"><h2>Fact Checks</h2><p class="card-description">AI-powered verification of all key statements against independent sources.</p></div>
|
||||
<div class="card-body" id="factchecks-content"></div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-content">
|
||||
<div class="footer-section"><h4>AegisSight UG (haftungsbeschränkt)</h4><p>Gladbacher Strasse 3-5</p><p>40764 Langenfeld, Germany</p></div>
|
||||
<div class="footer-section"><h4>Navigation</h4><ul><li><a href="/en/">Home</a></li><li><a href="/en/#features">Features</a></li><li><a href="/en/#demos">Live Reports</a></li><li><a href="/en/#trust">About Us</a></li><li><a href="/en/#contact">Contact</a></li></ul></div>
|
||||
<div class="footer-section"><h4>Legal</h4><ul><li><a href="/en/legal-notice.html">Legal notice</a></li><li><a href="/en/privacy.html">Privacy policy</a></li><li><a href="#" id="cookie-settings-link">Cookie settings</a></li></ul></div>
|
||||
<div class="footer-section"><h4>Contact</h4><p>info@aegis-sight.de</p></div>
|
||||
</div>
|
||||
<p class="copyright">© 2026 AegisSight UG (haftungsbeschränkt). All rights reserved.</p>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="/js/mobile-nav.js"></script>
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||||
<script src="https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js"></script>
|
||||
<script src="/lagen/iran-konflikt/lagebild.js"></script>
|
||||
<script src="/cookie-consent.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
224
en/situations/deepfakes/index.html
Normale Datei
224
en/situations/deepfakes/index.html
Normale Datei
@@ -0,0 +1,224 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Research: Legal status of deepfakes in Germany - AegisSight</title>
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||
<link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/deepfakes/">
|
||||
<link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/deepfakes/">
|
||||
<link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/deepfakes/">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
<link rel="stylesheet" href="/css/mobile.css">
|
||||
<link rel="stylesheet" href="/css/lang-switcher.css">
|
||||
<link rel="stylesheet" href="/lagen/iran-konflikt/lagebild.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css">
|
||||
<link rel="stylesheet" href="/cookie-consent.css">
|
||||
<script>window.LAGEBILD_DATA_BASE = '/lagen/deepfakes/';</script>
|
||||
</head>
|
||||
<body class="lagebild-page">
|
||||
<!-- Scroll Progress Bar -->
|
||||
<div class="scroll-progress" id="scroll-progress"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar" role="navigation">
|
||||
<div class="nav-container">
|
||||
<div class="logo">
|
||||
<a href="/en/"><img src="/assets/images/logos/Logo+Schrift_Rechts.png" alt="AegisSight" class="logo-img"></a>
|
||||
</div>
|
||||
<ul class="nav-menu">
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||
</ul>
|
||||
<div class="nav-extras">
|
||||
<div class="lang-switcher" role="group" aria-label="Language">
|
||||
<a class="lang-link" href="/lagen/deepfakes/" lang="de" hreflang="de" rel="alternate">DE</a>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<span class="lang-active" lang="en" aria-current="true">EN</span>
|
||||
</div>
|
||||
<button class="mobile-menu-toggle" aria-label="Open menu" aria-expanded="false">
|
||||
<span class="hamburger"><span></span><span></span><span></span></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Mobile Navigation -->
|
||||
<div class="nav-menu-mobile" aria-hidden="true">
|
||||
<button class="mobile-menu-close" aria-label="Close menu">
|
||||
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 6L6 18M6 6l12 12" stroke="currentColor"/></svg>
|
||||
</button>
|
||||
<ul>
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||
</ul>
|
||||
<div class="lang-switcher" role="group" aria-label="Language">
|
||||
<a class="lang-link" href="/lagen/deepfakes/" lang="de" hreflang="de" rel="alternate">DE</a>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<span class="lang-active" lang="en" aria-current="true">EN</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-menu-overlay"></div>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<section class="lagebild-hero">
|
||||
<canvas id="hero-particles"></canvas>
|
||||
<div class="hero-bg-pattern"></div>
|
||||
<div class="container">
|
||||
<h1 id="hero-title">RESEARCH BRIEFING</h1>
|
||||
<p class="hero-incident-title" id="incident-title"></p>
|
||||
<div class="hero-stats" id="hero-stats"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Control Bar: Timeline + Tabs -->
|
||||
<div class="control-bar">
|
||||
<div class="container">
|
||||
<div class="timeline-wrapper">
|
||||
<div class="timeline-strip" id="timeline-strip"></div>
|
||||
<div class="timeline-dropdown" id="timeline-dropdown"></div>
|
||||
</div>
|
||||
<div class="tab-nav" id="tab-nav">
|
||||
<button class="tab-btn active" data-tab="ueberblick">Summary</button>
|
||||
<button class="tab-btn" data-tab="lagebild">Research</button>
|
||||
<button class="tab-btn" data-tab="karte">Map</button>
|
||||
<button class="tab-btn" data-tab="faktenchecks">Fact Checks <span class="tab-badge" id="tab-badge-faktenchecks"></span></button>
|
||||
<button class="tab-btn" data-tab="quellen">Sources <span class="tab-badge" id="tab-badge-quellen"></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<main class="lagebild-main">
|
||||
<div class="container">
|
||||
<!-- Tab: Summary -->
|
||||
<div class="tab-panel active" id="panel-ueberblick">
|
||||
<p class="data-source-note">Data provided by AegisSight Monitor</p>
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2 id="ueberblick-title">Summary</h2>
|
||||
<span class="card-timestamp" id="ueberblick-timestamp"></span>
|
||||
</div>
|
||||
<div class="card-body" id="ueberblick-content">
|
||||
<div class="loading-skeleton">
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line short"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Research -->
|
||||
<div class="tab-panel" id="panel-lagebild">
|
||||
<p class="data-source-note">Data provided by AegisSight Monitor</p>
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2 id="lagebild-date-title">Research</h2>
|
||||
<span class="card-timestamp" id="lagebild-timestamp"></span>
|
||||
</div>
|
||||
<div class="card-body" id="summary-content">
|
||||
<div class="loading-skeleton">
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line short"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer" id="inline-sources"></div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Sources -->
|
||||
<div class="tab-panel" id="panel-quellen">
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2>Sources</h2>
|
||||
<p class="card-description">All sources analysed by AegisSight Monitor</p>
|
||||
</div>
|
||||
<div class="card-body" id="sources-grid-container">
|
||||
<div class="loading-skeleton">
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line short"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Map -->
|
||||
<div class="tab-panel" id="panel-karte">
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2>Map</h2>
|
||||
<p class="card-description">Geographic distribution of sources</p>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="map-container" style="height:500px;border-radius:4px;overflow:hidden;"></div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Fact Checks -->
|
||||
<div class="tab-panel" id="panel-faktenchecks">
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2>Fact Checks</h2>
|
||||
<p class="card-description">AI-powered verification of all key statements against independent sources.</p>
|
||||
</div>
|
||||
<div class="card-body" id="factchecks-content"></div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-content">
|
||||
<div class="footer-section">
|
||||
<h4>AegisSight UG (haftungsbeschränkt)</h4>
|
||||
<p>Gladbacher Strasse 3-5</p>
|
||||
<p>40764 Langenfeld, Germany</p>
|
||||
</div>
|
||||
<div class="footer-section">
|
||||
<h4>Navigation</h4>
|
||||
<ul>
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="/en/#demos">Live Reports</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-section">
|
||||
<h4>Legal</h4>
|
||||
<ul>
|
||||
<li><a href="/en/legal-notice.html">Legal notice</a></li>
|
||||
<li><a href="/en/privacy.html">Privacy policy</a></li>
|
||||
<li><a href="#" id="cookie-settings-link">Cookie settings</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-section">
|
||||
<h4>Contact</h4>
|
||||
<p>info@aegis-sight.de</p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="copyright">© 2026 AegisSight UG (haftungsbeschränkt). All rights reserved.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="/js/mobile-nav.js"></script>
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||||
<script src="https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js"></script>
|
||||
<script src="/lagen/iran-konflikt/lagebild.js"></script>
|
||||
<script src="/cookie-consent.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
226
en/situations/iran-conflict/index.html
Normale Datei
226
en/situations/iran-conflict/index.html
Normale Datei
@@ -0,0 +1,226 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Situation report: Iran conflict - AegisSight</title>
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||
<link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/iran-konflikt/">
|
||||
<link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/iran-conflict/">
|
||||
<link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/iran-konflikt/">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
<link rel="stylesheet" href="/css/mobile.css">
|
||||
<link rel="stylesheet" href="/css/lang-switcher.css">
|
||||
<link rel="stylesheet" href="/lagen/iran-konflikt/lagebild.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css">
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css">
|
||||
<link rel="stylesheet" href="/cookie-consent.css">
|
||||
<script>window.LAGEBILD_DATA_BASE = '/lagen/iran-konflikt/';</script>
|
||||
</head>
|
||||
<body class="lagebild-page">
|
||||
<!-- Scroll Progress Bar -->
|
||||
<div class="scroll-progress" id="scroll-progress"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar" role="navigation">
|
||||
<div class="nav-container">
|
||||
<div class="logo">
|
||||
<a href="/en/"><img src="/assets/images/logos/Logo+Schrift_Rechts.png" alt="AegisSight" class="logo-img"></a>
|
||||
</div>
|
||||
<ul class="nav-menu">
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||
</ul>
|
||||
<div class="nav-extras">
|
||||
<div class="lang-switcher" role="group" aria-label="Language">
|
||||
<a class="lang-link" href="/lagen/iran-konflikt/" lang="de" hreflang="de" rel="alternate">DE</a>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<span class="lang-active" lang="en" aria-current="true">EN</span>
|
||||
</div>
|
||||
<button class="mobile-menu-toggle" aria-label="Open menu" aria-expanded="false">
|
||||
<span class="hamburger"><span></span><span></span><span></span></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Mobile Navigation -->
|
||||
<div class="nav-menu-mobile" aria-hidden="true">
|
||||
<button class="mobile-menu-close" aria-label="Close menu">
|
||||
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 6L6 18M6 6l12 12" stroke="currentColor"/></svg>
|
||||
</button>
|
||||
<ul>
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||
</ul>
|
||||
<div class="lang-switcher" role="group" aria-label="Language">
|
||||
<a class="lang-link" href="/lagen/iran-konflikt/" lang="de" hreflang="de" rel="alternate">DE</a>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<span class="lang-active" lang="en" aria-current="true">EN</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-menu-overlay"></div>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<section class="lagebild-hero">
|
||||
<canvas id="hero-particles"></canvas>
|
||||
<div class="hero-bg-pattern"></div>
|
||||
<div class="container">
|
||||
<h1 id="hero-title">SITUATION REPORT</h1>
|
||||
<p class="hero-incident-title" id="incident-title"></p>
|
||||
|
||||
<!-- Stat Cards -->
|
||||
<div class="hero-stats" id="hero-stats"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Control Bar: Timeline + Tabs -->
|
||||
<div class="control-bar">
|
||||
<div class="container">
|
||||
<div class="timeline-wrapper">
|
||||
<div class="timeline-strip" id="timeline-strip"></div>
|
||||
<div class="timeline-dropdown" id="timeline-dropdown"></div>
|
||||
</div>
|
||||
<div class="tab-nav" id="tab-nav">
|
||||
<button class="tab-btn active" data-tab="ueberblick">Latest Developments</button>
|
||||
<button class="tab-btn" data-tab="lagebild">Briefing</button>
|
||||
<button class="tab-btn" data-tab="karte">Map</button>
|
||||
<button class="tab-btn" data-tab="faktenchecks">Fact Checks <span class="tab-badge" id="tab-badge-faktenchecks"></span></button>
|
||||
<button class="tab-btn" data-tab="quellen">Sources <span class="tab-badge" id="tab-badge-quellen"></span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Main Content -->
|
||||
<main class="lagebild-main">
|
||||
<div class="container">
|
||||
<!-- Tab: Latest Developments / Summary -->
|
||||
<div class="tab-panel active" id="panel-ueberblick">
|
||||
<p class="data-source-note">Data provided by AegisSight Monitor</p>
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2 id="ueberblick-title">Latest Developments</h2>
|
||||
<span class="card-timestamp" id="ueberblick-timestamp"></span>
|
||||
</div>
|
||||
<div class="card-body" id="ueberblick-content">
|
||||
<div class="loading-skeleton">
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line short"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Briefing -->
|
||||
<div class="tab-panel" id="panel-lagebild">
|
||||
<p class="data-source-note">Data provided by AegisSight Monitor</p>
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2 id="lagebild-date-title">Briefing</h2>
|
||||
<span class="card-timestamp" id="lagebild-timestamp"></span>
|
||||
</div>
|
||||
<div class="card-body" id="summary-content">
|
||||
<div class="loading-skeleton">
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line short"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer" id="inline-sources"></div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Sources -->
|
||||
<div class="tab-panel" id="panel-quellen">
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2>Sources</h2>
|
||||
<p class="card-description">All sources monitored by AegisSight Monitor</p>
|
||||
</div>
|
||||
<div class="card-body" id="sources-grid-container">
|
||||
<div class="loading-skeleton">
|
||||
<div class="skeleton-line"></div>
|
||||
<div class="skeleton-line short"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Map -->
|
||||
<div class="tab-panel" id="panel-karte">
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2>Map</h2>
|
||||
<p class="card-description">Geographic distribution of reports</p>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="map-container" style="height:500px;border-radius:4px;overflow:hidden;"></div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<!-- Tab: Fact Checks -->
|
||||
<div class="tab-panel" id="panel-faktenchecks">
|
||||
<section class="content-card">
|
||||
<div class="card-header">
|
||||
<h2>Fact Checks</h2>
|
||||
<p class="card-description">AI-powered verification of all key statements against independent sources. Statements are continuously checked against new sources – when new evidence appears, the status is updated automatically.</p>
|
||||
</div>
|
||||
<div class="card-body" id="factchecks-content"></div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="footer-content">
|
||||
<div class="footer-section">
|
||||
<h4>AegisSight UG (haftungsbeschränkt)</h4>
|
||||
<p>Gladbacher Strasse 3-5</p>
|
||||
<p>40764 Langenfeld, Germany</p>
|
||||
</div>
|
||||
<div class="footer-section">
|
||||
<h4>Navigation</h4>
|
||||
<ul>
|
||||
<li><a href="/en/">Home</a></li>
|
||||
<li><a href="/en/#features">Features</a></li>
|
||||
<li><a href="/en/#demos">Live Reports</a></li>
|
||||
<li><a href="/en/#trust">About Us</a></li>
|
||||
<li><a href="/en/#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-section">
|
||||
<h4>Legal</h4>
|
||||
<ul>
|
||||
<li><a href="/en/legal-notice.html">Legal notice</a></li>
|
||||
<li><a href="/en/privacy.html">Privacy policy</a></li>
|
||||
<li><a href="#" id="cookie-settings-link">Cookie settings</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-section">
|
||||
<h4>Contact</h4>
|
||||
<p>info@aegis-sight.de</p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="copyright">© 2026 AegisSight UG (haftungsbeschränkt). All rights reserved.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="/js/mobile-nav.js"></script>
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
|
||||
<script src="https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js"></script>
|
||||
<script src="/lagen/iran-konflikt/lagebild.js"></script>
|
||||
<script src="/cookie-consent.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
49
js/app.js
49
js/app.js
@@ -2,6 +2,10 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
/* ==================== LANGUAGE ==================== */
|
||||
var SITE_LANG = (document.documentElement.lang || 'de').toLowerCase().indexOf('en') === 0 ? 'en' : 'de';
|
||||
var SUMMARY_FILE = SITE_LANG === 'en' ? 'summary_en.json' : 'summary.json';
|
||||
|
||||
/* ==================== NAVBAR ==================== */
|
||||
var navbar = document.getElementById('navbar');
|
||||
window.addEventListener('scroll', function () {
|
||||
@@ -197,11 +201,19 @@
|
||||
var lageData = {};
|
||||
var dataLoaded = false;
|
||||
|
||||
var lageTitles = {
|
||||
var lageTitlesByLang = {
|
||||
de: {
|
||||
'iran-konflikt': 'Gro\u00dflage - Irankonflikt',
|
||||
'cyberangriffe': 'Cyberangriffe auf deutsche Infrastruktur',
|
||||
'deepfakes': 'Rechtliche Lage von Deepfakes in Deutschland'
|
||||
},
|
||||
en: {
|
||||
'iran-konflikt': 'Major situation - Iran conflict',
|
||||
'cyberangriffe': 'Cyberattacks on German infrastructure',
|
||||
'deepfakes': 'Legal status of deepfakes in Germany'
|
||||
}
|
||||
};
|
||||
var lageTitles = lageTitlesByLang[SITE_LANG] || lageTitlesByLang.de;
|
||||
|
||||
/* ==================== 3D CAROUSEL ==================== */
|
||||
var cards = document.querySelectorAll('.carousel-card');
|
||||
@@ -427,7 +439,8 @@ function mdToHtml(md) {
|
||||
}
|
||||
|
||||
function loadLiveData() {
|
||||
fetch('/lagen/iran-konflikt/data/summary.json?t=' + Date.now())
|
||||
fetch('/lagen/iran-konflikt/data/' + SUMMARY_FILE + '?t=' + Date.now())
|
||||
.then(function (r) { if (!r.ok && SITE_LANG === 'en') return fetch('/lagen/iran-konflikt/data/summary.json?t=' + Date.now()); return r; })
|
||||
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
|
||||
.then(function (data) {
|
||||
var inc = data.incident || {};
|
||||
@@ -532,7 +545,12 @@ function mdToHtml(md) {
|
||||
mentioned: '#7b7b7b'
|
||||
};
|
||||
|
||||
var defaultLabels = {
|
||||
var defaultLabels = SITE_LANG === 'en' ? {
|
||||
primary: 'Primary',
|
||||
secondary: 'Reactions',
|
||||
tertiary: 'Involved',
|
||||
mentioned: 'Mentioned'
|
||||
} : {
|
||||
primary: 'Hauptgeschehen',
|
||||
secondary: 'Reaktionen',
|
||||
tertiary: 'Beteiligte',
|
||||
@@ -582,7 +600,7 @@ function mdToHtml(md) {
|
||||
legend.onAdd = function () {
|
||||
var div = L.DomUtil.create('div');
|
||||
div.style.cssText = 'background:#151D2E;padding:10px 14px;border-radius:4px;border:1px solid #1E2D45;box-shadow:0 2px 8px rgba(0,0,0,0.3);font-size:0.8rem;line-height:1.8;color:#E8ECF4;';
|
||||
var html = '<strong style="color:#C8A851;">Legende</strong><br>';
|
||||
var html = '<strong style="color:#C8A851;">' + (SITE_LANG === 'en' ? 'Legend' : 'Legende') + '</strong><br>';
|
||||
['primary', 'secondary', 'tertiary', 'mentioned'].forEach(function (cat) {
|
||||
if (usedCategories[cat]) {
|
||||
html += '<span style="color:' + categoryColors[cat] + ';">●</span> ' + categoryLabels[cat] + '<br>';
|
||||
@@ -631,8 +649,12 @@ function mdToHtml(md) {
|
||||
// Form submit -> server-side SMTP
|
||||
window.submitContact = function (e) {
|
||||
e.preventDefault();
|
||||
var lang = (document.documentElement.lang || 'de').toLowerCase().indexOf('en') === 0 ? 'en' : 'de';
|
||||
var T = lang === 'en'
|
||||
? { sending: 'Sending...', send: 'Send message', sendError: 'Error sending message', netError: 'Connection error. Please try again.' }
|
||||
: { sending: 'Wird gesendet...', send: 'Nachricht senden', sendError: 'Fehler beim Senden', netError: 'Verbindungsfehler. Bitte versuchen Sie es erneut.' };
|
||||
var btn = e.target.querySelector('button[type="submit"]');
|
||||
if (btn) { btn.disabled = true; btn.textContent = 'Wird gesendet...'; }
|
||||
if (btn) { btn.disabled = true; btn.textContent = T.sending; }
|
||||
|
||||
fetch('/api/contact', {
|
||||
method: 'POST',
|
||||
@@ -641,7 +663,8 @@ function mdToHtml(md) {
|
||||
name: document.getElementById('cf-name').value,
|
||||
organisation: document.getElementById('cf-org').value,
|
||||
email: document.getElementById('cf-email').value,
|
||||
message: document.getElementById('cf-message').value
|
||||
message: document.getElementById('cf-message').value,
|
||||
lang: lang
|
||||
})
|
||||
})
|
||||
.then(function (r) { return r.json().then(function (d) { return { ok: r.ok, data: d }; }); })
|
||||
@@ -651,20 +674,21 @@ function mdToHtml(md) {
|
||||
document.getElementById('form-success').style.display = 'block';
|
||||
if (window.umami) umami.track('contact_form_success');
|
||||
} else {
|
||||
alert(res.data.error || 'Fehler beim Senden');
|
||||
if (btn) { btn.disabled = false; btn.textContent = 'Nachricht senden'; }
|
||||
alert(res.data.error || T.sendError);
|
||||
if (btn) { btn.disabled = false; btn.textContent = T.send; }
|
||||
}
|
||||
})
|
||||
.catch(function () {
|
||||
alert('Verbindungsfehler. Bitte versuchen Sie es erneut.');
|
||||
if (btn) { btn.disabled = false; btn.textContent = 'Nachricht senden'; }
|
||||
alert(T.netError);
|
||||
if (btn) { btn.disabled = false; btn.textContent = T.send; }
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
/* ==================== LOAD DEEPFAKES DATA ==================== */
|
||||
function loadDeepfakesData() {
|
||||
fetch('/lagen/deepfakes/data/summary.json?t=' + Date.now())
|
||||
fetch('/lagen/deepfakes/data/' + SUMMARY_FILE + '?t=' + Date.now())
|
||||
.then(function (r) { if (!r.ok && SITE_LANG === 'en') return fetch('/lagen/deepfakes/data/summary.json?t=' + Date.now()); return r; })
|
||||
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
|
||||
.then(function (data) {
|
||||
var excerptEl = document.getElementById('excerpt-text-deepfakes');
|
||||
@@ -691,7 +715,8 @@ function mdToHtml(md) {
|
||||
|
||||
/* ==================== LOAD CYBERANGRIFFE DATA ==================== */
|
||||
function loadCyberangriffeData() {
|
||||
fetch('/lagen/cyberangriffe/data/summary.json?t=' + Date.now())
|
||||
fetch('/lagen/cyberangriffe/data/' + SUMMARY_FILE + '?t=' + Date.now())
|
||||
.then(function (r) { if (!r.ok && SITE_LANG === 'en') return fetch('/lagen/cyberangriffe/data/summary.json?t=' + Date.now()); return r; })
|
||||
.then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
|
||||
.then(function (data) {
|
||||
var excerptEl = document.getElementById('excerpt-text-cyberangriffe');
|
||||
|
||||
0
lagen/cyberangriffe/data/.gitkeep
Normale Datei
0
lagen/cyberangriffe/data/.gitkeep
Normale Datei
@@ -5,6 +5,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Lagebild: Cyberangriffe auf deutsche Infrastruktur - AegisSight</title>
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||
<link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/cyberangriffe/">
|
||||
<link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/cyber-attacks/">
|
||||
<link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/cyberangriffe/">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
@@ -33,7 +36,7 @@
|
||||
<div class="lang-switcher" role="group" aria-label="Sprache">
|
||||
<span class="lang-active" lang="de" aria-current="true">DE</span>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<a class="lang-link" href="/en/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
<a class="lang-link" href="/en/situations/cyber-attacks/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
</div>
|
||||
<button class="mobile-menu-toggle" aria-label="Menü öffnen" aria-expanded="false">
|
||||
<span class="hamburger"><span></span><span></span><span></span></span>
|
||||
@@ -54,7 +57,7 @@
|
||||
<div class="lang-switcher" role="group" aria-label="Sprache">
|
||||
<span class="lang-active" lang="de" aria-current="true">DE</span>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<a class="lang-link" href="/en/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
<a class="lang-link" href="/en/situations/cyber-attacks/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-menu-overlay"></div>
|
||||
|
||||
0
lagen/deepfakes/data/.gitkeep
Normale Datei
0
lagen/deepfakes/data/.gitkeep
Normale Datei
@@ -5,6 +5,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Recherche: Rechtliche Lage von Deepfakes in Deutschland - AegisSight</title>
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||
<link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/deepfakes/">
|
||||
<link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/deepfakes/">
|
||||
<link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/deepfakes/">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
@@ -36,7 +39,7 @@
|
||||
<div class="lang-switcher" role="group" aria-label="Sprache">
|
||||
<span class="lang-active" lang="de" aria-current="true">DE</span>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<a class="lang-link" href="/en/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
<a class="lang-link" href="/en/situations/deepfakes/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
</div>
|
||||
<button class="mobile-menu-toggle" aria-label="Menü öffnen" aria-expanded="false">
|
||||
<span class="hamburger"><span></span><span></span><span></span></span>
|
||||
@@ -59,7 +62,7 @@
|
||||
<div class="lang-switcher" role="group" aria-label="Sprache">
|
||||
<span class="lang-active" lang="de" aria-current="true">DE</span>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<a class="lang-link" href="/en/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
<a class="lang-link" href="/en/situations/deepfakes/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-menu-overlay"></div>
|
||||
|
||||
0
lagen/iran-konflikt/data/.gitkeep
Normale Datei
0
lagen/iran-konflikt/data/.gitkeep
Normale Datei
@@ -5,6 +5,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Lagebild Irankonflikt - AegisSight</title>
|
||||
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||
<link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/iran-konflikt/">
|
||||
<link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/iran-conflict/">
|
||||
<link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/iran-konflikt/">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<link rel="stylesheet" href="/css/fonts.css">
|
||||
@@ -36,7 +39,7 @@
|
||||
<div class="lang-switcher" role="group" aria-label="Sprache">
|
||||
<span class="lang-active" lang="de" aria-current="true">DE</span>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<a class="lang-link" href="/en/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
<a class="lang-link" href="/en/situations/iran-conflict/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
</div>
|
||||
<button class="mobile-menu-toggle" aria-label="Menü öffnen" aria-expanded="false">
|
||||
<span class="hamburger"><span></span><span></span><span></span></span>
|
||||
@@ -59,7 +62,7 @@
|
||||
<div class="lang-switcher" role="group" aria-label="Sprache">
|
||||
<span class="lang-active" lang="de" aria-current="true">DE</span>
|
||||
<span class="lang-sep" aria-hidden="true">|</span>
|
||||
<a class="lang-link" href="/en/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
<a class="lang-link" href="/en/situations/iran-conflict/" lang="en" hreflang="en" rel="alternate">EN</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mobile-menu-overlay"></div>
|
||||
|
||||
@@ -41,6 +41,8 @@ var Lagebild = {
|
||||
sourceRef: "Quelle",
|
||||
lastUpdate: "Letzte Aktualisierung: ",
|
||||
minAgo: "vor {n} Min", hrsAgo: "vor {n} Std",
|
||||
emptyDevelopments: "Noch keine Entwicklungen erfasst.",
|
||||
emptySummary: "Keine Zusammenfassung verfügbar.",
|
||||
},
|
||||
en: {
|
||||
hero: "SITUATION REPORT", heroResearch: "RESEARCH BRIEFING",
|
||||
@@ -67,11 +69,22 @@ var Lagebild = {
|
||||
sourceRef: "Source",
|
||||
lastUpdate: "Last update: ",
|
||||
minAgo: "{n} min ago", hrsAgo: "{n} hrs ago",
|
||||
emptyDevelopments: "No developments recorded yet.",
|
||||
emptySummary: "No summary available.",
|
||||
}
|
||||
},
|
||||
|
||||
curLang: function() {
|
||||
return (typeof getCurrentLanguage === 'function') ? getCurrentLanguage() : 'de';
|
||||
var l = (document.documentElement.lang || 'de').toLowerCase();
|
||||
return l.indexOf('en') === 0 ? 'en' : 'de';
|
||||
},
|
||||
|
||||
/* Where to fetch data/current.json from. Defaults to relative ("data/")
|
||||
which works on the German pages. English mirror pages set
|
||||
window.LAGEBILD_DATA_BASE to the absolute path of the German page so
|
||||
both languages share the same data files. */
|
||||
dataBase: function() {
|
||||
return (typeof window !== 'undefined' && window.LAGEBILD_DATA_BASE) || '';
|
||||
},
|
||||
|
||||
t: function(key) {
|
||||
@@ -97,16 +110,14 @@ var Lagebild = {
|
||||
},
|
||||
|
||||
async init() {
|
||||
if (typeof initTranslations === 'function') {
|
||||
try { initTranslations(); } catch(e) {}
|
||||
}
|
||||
this.initScrollProgress();
|
||||
this.initParticles();
|
||||
try {
|
||||
var savedLang = (typeof getCurrentLanguage === 'function') ? getCurrentLanguage() : 'de';
|
||||
var jsonFile = savedLang === 'en' ? 'data/current_en.json' : 'data/current.json';
|
||||
var savedLang = this.curLang();
|
||||
var base = this.dataBase();
|
||||
var jsonFile = base + (savedLang === 'en' ? 'data/current_en.json' : 'data/current.json');
|
||||
var resp = await fetch(jsonFile + '?t=' + Date.now());
|
||||
if (!resp.ok && savedLang === 'en') { resp = await fetch('data/current.json?t=' + Date.now()); }
|
||||
if (!resp.ok && savedLang === 'en') { resp = await fetch(base + 'data/current.json?t=' + Date.now()); }
|
||||
if (!resp.ok) throw new Error('HTTP ' + resp.status);
|
||||
this.data = await resp.json();
|
||||
this.currentView = {
|
||||
@@ -120,7 +131,6 @@ var Lagebild = {
|
||||
};
|
||||
this.render();
|
||||
this.initTabs();
|
||||
this.initLangToggle();
|
||||
this.initScrollReveal();
|
||||
this.initFloatingCta();
|
||||
this.initLiveFeed();
|
||||
@@ -150,12 +160,12 @@ var Lagebild = {
|
||||
var dev = inc.latest_developments || '';
|
||||
var sources = (this.currentView && this.currentView.sources_json) || [];
|
||||
var html = this.renderLatestDevelopmentsHtml(dev, sources);
|
||||
el.innerHTML = html || '<p class="empty-hint">Noch keine Entwicklungen erfasst.</p>';
|
||||
el.innerHTML = html || '<p class="empty-hint">' + this.t('emptyDevelopments') + '</p>';
|
||||
} else {
|
||||
var md = (this.currentView && this.currentView.summary) || '';
|
||||
var zf = this.extractZusammenfassung(md);
|
||||
if (!zf) {
|
||||
el.innerHTML = '<p class="empty-hint">Keine Zusammenfassung verfügbar.</p>';
|
||||
el.innerHTML = '<p class="empty-hint">' + this.t('emptySummary') + '</p>';
|
||||
return;
|
||||
}
|
||||
var body = this.mdToHtml(this.fixUmlauts(zf));
|
||||
@@ -168,7 +178,7 @@ var Lagebild = {
|
||||
if (src && src.url) {
|
||||
return '<a class="citation-ref" href="' + self.esc(src.url) + '" target="_blank" rel="noopener" title="' + self.esc(src.name || '') + '">[' + nr + ']</a>';
|
||||
}
|
||||
return '<a class="citation-ref" title="Quelle ' + nr + '">[' + nr + ']</a>';
|
||||
return '<a class="citation-ref" title="' + self.t('sourceRef') + ' ' + nr + '">[' + nr + ']</a>';
|
||||
});
|
||||
el.innerHTML = body;
|
||||
}
|
||||
@@ -179,7 +189,7 @@ var Lagebild = {
|
||||
var sections = md.split(/^## /m);
|
||||
for (var i = 0; i < sections.length; i++) {
|
||||
var s = sections[i];
|
||||
if (/^zusammenfassung/i.test(s.trim())) {
|
||||
if (/^(zusammenfassung|summary)\b/i.test(s.trim())) {
|
||||
var next = s.split(/\n## /)[0];
|
||||
return next.replace(/^[^\n]*\n?/, '').trim();
|
||||
}
|
||||
@@ -194,7 +204,7 @@ var Lagebild = {
|
||||
var skipping = false;
|
||||
for (var i = 0; i < lines.length; i++) {
|
||||
var line = lines[i];
|
||||
if (/^##\s+zusammenfassung\b/i.test(line)) { skipping = true; continue; }
|
||||
if (/^##\s+(zusammenfassung|summary)\b/i.test(line)) { skipping = true; continue; }
|
||||
if (skipping && /^##\s+/.test(line)) skipping = false;
|
||||
if (!skipping) result.push(line);
|
||||
}
|
||||
@@ -638,7 +648,7 @@ var Lagebild = {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
var resp = await fetch('data/snapshot-' + id + '.json');
|
||||
var resp = await fetch(this.dataBase() + 'data/snapshot-' + id + '.json');
|
||||
if (!resp.ok) throw new Error('HTTP ' + resp.status);
|
||||
var sd = await resp.json();
|
||||
var sj = sd.sources_json;
|
||||
@@ -1200,74 +1210,13 @@ var Lagebild = {
|
||||
}
|
||||
},
|
||||
|
||||
initLangToggle: function() {
|
||||
var btn = document.querySelector('.lang-toggle');
|
||||
if (!btn) return;
|
||||
var self = this;
|
||||
btn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
var cur = (typeof getCurrentLanguage === 'function') ? getCurrentLanguage() : 'de';
|
||||
var newLang = cur === 'de' ? 'en' : 'de';
|
||||
if (typeof switchLanguage === 'function') switchLanguage(newLang);
|
||||
self.switchContent(newLang);
|
||||
});
|
||||
},
|
||||
|
||||
switchContent: async function(lang) {
|
||||
var jsonFile = lang === 'en' ? 'data/current_en.json' : 'data/current.json';
|
||||
try {
|
||||
var resp = await fetch(jsonFile + '?t=' + Date.now());
|
||||
if (!resp.ok && lang === 'en') {
|
||||
resp = await fetch('data/current.json?t=' + Date.now());
|
||||
}
|
||||
if (!resp.ok) throw new Error('HTTP ' + resp.status);
|
||||
this.data = await resp.json();
|
||||
this.allSnapshots = {};
|
||||
this.currentView = {
|
||||
summary: this.data.current_lagebild.summary_markdown,
|
||||
sources_json: this.data.current_lagebild.sources_json,
|
||||
updated_at: this.data.current_lagebild.updated_at || this.data.generated_at,
|
||||
articles: this.data.articles,
|
||||
fact_checks: this.data.fact_checks,
|
||||
article_count: this.data.incident.article_count,
|
||||
fact_check_count: this.data.incident.factcheck_count
|
||||
};
|
||||
this.render();
|
||||
// Update hero title for language
|
||||
var heroH1 = document.getElementById('hero-title');
|
||||
if (heroH1) {
|
||||
var isResearch = this.data.incident && this.data.incident.type === 'research';
|
||||
heroH1.textContent = isResearch ? this.t('heroResearch') : this.t('hero');
|
||||
}
|
||||
// Update tab labels
|
||||
var tabBtns = document.querySelectorAll('.tab-btn');
|
||||
var isResearch = this.data.incident && this.data.incident.type === 'research';
|
||||
for (var i = 0; i < tabBtns.length; i++) {
|
||||
var tab = tabBtns[i].getAttribute('data-tab');
|
||||
if (tab === 'lagebild') tabBtns[i].childNodes[0].textContent = isResearch ? this.t('tabBriefingResearch') : this.t('tabBriefing');
|
||||
else if (tab === 'ueberblick') tabBtns[i].childNodes[0].textContent = isResearch ? this.t('tabUeberblickResearch') : this.t('tabUeberblick');
|
||||
else if (tab === 'karte') tabBtns[i].childNodes[0].textContent = this.t('tabMap');
|
||||
else if (tab === 'faktenchecks') tabBtns[i].childNodes[0].textContent = this.t('tabFactchecks') + ' ';
|
||||
else if (tab === 'quellen') tabBtns[i].childNodes[0].textContent = this.t('tabSources') + ' ';
|
||||
}
|
||||
// Update Ueberblick H2 title
|
||||
var ueberblickH2 = document.getElementById('ueberblick-title');
|
||||
if (ueberblickH2) ueberblickH2.textContent = isResearch ? this.t('tabUeberblickResearch') : this.t('tabUeberblick');
|
||||
// Update data source note
|
||||
var dsNote = document.querySelector('.data-source-note');
|
||||
if (dsNote) dsNote.textContent = this.t('dataSource');
|
||||
} catch(e) {
|
||||
console.error('Language switch failed:', e);
|
||||
}
|
||||
},
|
||||
|
||||
/* ===== FLOATING CTA ===== */
|
||||
initFloatingCta: function() {
|
||||
var cta = document.createElement('div');
|
||||
cta.className = 'floating-cta';
|
||||
cta.innerHTML = '<span class="floating-cta-text">' + this.t('ctaText') + '</span>'
|
||||
+ '<a href="mailto:info@aegis-sight.de" class="floating-cta-btn">' + this.t('ctaButton') + '</a>'
|
||||
+ '<button class="floating-cta-close" aria-label="Schlie\u00dfen">×</button>';
|
||||
+ '<button class="floating-cta-close" aria-label="' + this.t('srcClose') + '">×</button>';
|
||||
document.body.appendChild(cta);
|
||||
|
||||
// Show after scrolling past hero
|
||||
|
||||
@@ -21,16 +21,49 @@
|
||||
<loc>https://aegis-sight.de/lagen/iran-konflikt/</loc>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>0.8</priority>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/iran-konflikt/"/>
|
||||
<xhtml:link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/iran-conflict/"/>
|
||||
<xhtml:link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/iran-konflikt/"/>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://aegis-sight.de/en/situations/iran-conflict/</loc>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>0.8</priority>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/iran-konflikt/"/>
|
||||
<xhtml:link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/iran-conflict/"/>
|
||||
<xhtml:link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/iran-konflikt/"/>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://aegis-sight.de/lagen/cyberangriffe/</loc>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>0.8</priority>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/cyberangriffe/"/>
|
||||
<xhtml:link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/cyber-attacks/"/>
|
||||
<xhtml:link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/cyberangriffe/"/>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://aegis-sight.de/en/situations/cyber-attacks/</loc>
|
||||
<changefreq>daily</changefreq>
|
||||
<priority>0.8</priority>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/cyberangriffe/"/>
|
||||
<xhtml:link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/cyber-attacks/"/>
|
||||
<xhtml:link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/cyberangriffe/"/>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://aegis-sight.de/lagen/deepfakes/</loc>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/deepfakes/"/>
|
||||
<xhtml:link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/deepfakes/"/>
|
||||
<xhtml:link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/deepfakes/"/>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://aegis-sight.de/en/situations/deepfakes/</loc>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.7</priority>
|
||||
<xhtml:link rel="alternate" hreflang="de" href="https://aegis-sight.de/lagen/deepfakes/"/>
|
||||
<xhtml:link rel="alternate" hreflang="en" href="https://aegis-sight.de/en/situations/deepfakes/"/>
|
||||
<xhtml:link rel="alternate" hreflang="x-default" href="https://aegis-sight.de/lagen/deepfakes/"/>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://aegis-sight.de/impressum.html</loc>
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren