Promote develop → main (2026-07-23 09:09 UTC)

This commit was merged in pull request #9.
Dieser Commit ist enthalten in:
2026-07-23 11:09:39 +02:00
Commit 2e9b979ed7
9 geänderte Dateien mit 460 neuen und 89 gelöschten Zeilen

Datei anzeigen

@@ -48,6 +48,14 @@ a { color:inherit; text-decoration:none; }
.nav-extras { display:flex; align-items:center; gap:18px; }
/* Testzugang-Knopf in der Navigation */
.nav-cta { display:inline-block; background:var(--gold); color:var(--navy); font-size:0.88rem; font-weight:600; padding:9px 18px; border-radius:var(--radius); white-space:nowrap; transition:background 0.2s; }
.nav-cta:hover { background:var(--gold-dark); color:var(--navy); }
.mobile-menu .nav-cta { display:block; text-align:center; margin:10px 0 4px; padding:13px 18px; font-size:1rem; }
/* Zwei Knoepfe nebeneinander im Kontakt-Abschnitt */
.cta-buttons { display:flex; flex-wrap:wrap; gap:14px; justify-content:center; }
.mobile-menu-toggle { display:none; background:none; border:none; cursor:pointer; width:32px; height:24px; position:relative; flex-direction:column; justify-content:space-between; }
.mobile-menu-toggle span { display:block; width:100%; height:2px; background:var(--navy); border-radius:2px; transition:transform 0.3s,opacity 0.3s; }
.mobile-menu-toggle.active span:nth-child(1) { transform:rotate(45deg) translate(7px,7px); }
@@ -286,12 +294,47 @@ a { color:inherit; text-decoration:none; }
.modal-close:hover { color:var(--navy); }
.modal-content h2 { font-size:1.5rem; font-weight:700; color:var(--navy); margin-bottom:8px; }
.modal-sub { font-size:0.95rem; color:var(--text-light); margin-bottom:28px; }
.form-row { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.form-row { display:grid; grid-template-columns:1fr 1fr; gap:16px; align-items:end; }
.form-group { margin-bottom:16px; }
.form-group label { display:block; font-size:0.82rem; font-weight:600; color:var(--navy); margin-bottom:6px; text-transform:uppercase; letter-spacing:0.04em; }
.form-group input, .form-group textarea { width:100%; padding:10px 14px; border:1px solid var(--gray-200); border-radius:var(--radius); font-family:inherit; font-size:0.95rem; color:var(--text); background:var(--base); transition:border-color 0.2s; }
.form-group input:focus, .form-group textarea:focus { outline:none; border-color:var(--gold); }
.form-group textarea { resize:vertical; }
/* Anwendungsfaelle unter der Karte im Bereich Live-Lagebilder */
.einsatz-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:20px; margin-top:40px; }
.einsatz-card { background:var(--white); border:1px solid var(--gray-100); border-radius:var(--radius-lg); padding:26px 28px; box-shadow:var(--shadow); }
/* Zwei Zeilen Mindesthoehe, damit die Absaetze aller drei Karten auf
gleicher Hoehe beginnen und unten gleich viel Luft bleibt. */
.einsatz-card h3 { color:var(--navy); font-size:1.2rem; line-height:1.35; margin:0 0 10px; min-height:2.7em; }
.einsatz-card p { color:var(--text-light); font-size:0.97rem; line-height:1.6; margin:0; }
@media(max-width:768px) { .einsatz-grid { gap:16px; margin-top:28px; } .einsatz-card { padding:20px 22px; } .einsatz-card h3 { min-height:0; } }
/* Testzugang-Formular im Anfrage-Popup der Startseite */
.form-group select { width:100%; padding:10px 14px; border:1px solid var(--gray-200); border-radius:var(--radius); font-family:inherit; font-size:0.95rem; color:var(--text); background-color:var(--base); transition:border-color 0.2s; appearance:none; -webkit-appearance:none; background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A6478' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 12px center; background-size:18px; padding-right:38px; }
.form-group select:focus { outline:none; border-color:var(--gold); }
.form-group input[aria-invalid="true"] { border-color:#C0392B; }
.tf-note { display:block; font-size:0.85rem; margin-top:6px; line-height:1.5; }
.tf-note-error { color:#C0392B; }
.tf-note-ok { color:#1E7A44; }
.tf-note-warn { color:#8A6D1B; }
.tf-hint { font-size:0.82rem; color:var(--text-light); margin-left:5px; font-weight:400; text-transform:none; letter-spacing:0; white-space:nowrap; }
/* Kompakte Zeilenhoehe fuer mehrzeilige Labels; Felder einer Reihe per align-items:end buendig */
#trial-form .form-row label { line-height:1.35; }
.tf-consent { display:flex; align-items:flex-start; gap:12px; margin:6px 0 22px; }
.tf-consent input { width:18px; height:18px; margin-top:2px; flex:0 0 auto; accent-color:var(--gold-dark); }
.tf-consent label { font-size:0.9rem; color:var(--text-light); line-height:1.6; font-weight:400; text-transform:none; letter-spacing:0; margin:0; }
.tf-consent a { color:var(--gold-dark); font-weight:600; text-decoration:underline; }
.tf-error { display:none; background:#FDECEA; border:1px solid #E7B3AC; color:#A5281B; border-radius:var(--radius); padding:13px 16px; font-size:0.92rem; line-height:1.6; margin-bottom:18px; }
.tf-success { display:none; text-align:center; padding:20px 0 6px; }
.tf-success h3 { color:var(--navy); font-size:1.3rem; margin:0 0 12px; }
.tf-success p { color:var(--text); line-height:1.75; margin:0 0 10px; }
.tf-success a { color:var(--gold-dark); text-decoration:underline; }
.tf-hp { position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden; }
.tf-privacy { font-size:0.86rem; color:var(--text-light); line-height:1.7; margin-top:22px; }
.tf-privacy a { color:var(--gold-dark); text-decoration:underline; }
.contact-alt { font-size:0.92rem; color:var(--text-light); margin-top:18px; }
.contact-alt a { color:var(--gold-dark); font-weight:600; text-decoration:underline; }
.form-success { text-align:center; padding:40px 0; }
.form-success p { font-size:1.05rem; color:var(--navy); font-weight:500; }
@media(max-width:768px) { .form-row { grid-template-columns:1fr; } .modal-content { padding:28px 20px; } }
@@ -308,6 +351,9 @@ a { color:inherit; text-decoration:none; }
@media(max-width:1024px) {
.grid-3 { grid-template-columns:repeat(2,1fr); }
.grid-4 { grid-template-columns:repeat(2,1fr); }
/* Die drei Punkte im Problem-Abschnitt bleiben in einer Reihe */
#problem .grid-3 { grid-template-columns:repeat(3,1fr); gap:16px; }
#problem .problem-card { padding:28px 10px; }
.hero-title { font-size:2.5rem; }
.section { padding:64px 0; }
.workflow-connector { width:40px; }
@@ -315,8 +361,14 @@ a { color:inherit; text-decoration:none; }
@media(max-width:768px) {
.nav-menu { display:none; }
.nav-extras > .nav-cta { display:none; }
.mobile-menu-toggle { display:flex; }
.cta-buttons { flex-direction:column; }
.cta-buttons .btn { width:100%; }
.grid-3,.grid-4 { grid-template-columns:1fr; gap:20px; }
/* Auf dem Telefon untereinander, drei Spalten waeren dort unlesbar */
#problem .grid-3 { grid-template-columns:1fr; gap:20px; }
#problem .problem-card { padding:32px 20px; }
.hero { min-height:75vh; }
.hero-brand { padding:0 20px; }
.hero-title { font-size:1.9rem; }

Datei anzeigen

@@ -265,7 +265,7 @@
"name": "How do I get access to the AegisSight Monitor?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Access is granted on individual request; pilot access is available for qualified organisations. Contact: info@aegis-sight.de."
"text": "Through a free trial access, requested via the form on aegis-sight.de. The trial runs for one week, includes your own topic with the full feature set and ends automatically. A work email address is required."
}
}
]
@@ -288,6 +288,7 @@
<li><a href="#contact">Contact</a></li>
</ul>
<div class="nav-extras">
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Trial access</a>
<div class="lang-switcher" role="group" aria-label="Language">
<a class="lang-link" href="/" lang="de" hreflang="de" rel="alternate">DE</a>
<span class="lang-sep" aria-hidden="true">|</span>
@@ -309,6 +310,7 @@
<li><a href="#faq">FAQ</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Request trial access</a>
<div class="lang-switcher" role="group" aria-label="Language">
<a class="lang-link" href="/" lang="de" hreflang="de" rel="alternate">DE</a>
<span class="lang-sep" aria-hidden="true">|</span>
@@ -323,7 +325,7 @@
<div class="hero-content">
<div class="hero-brand">
<h1 class="hero-title">AegisSight Monitor</h1>
<p class="hero-tagline">AI-powered real-time situation reports from open sources, <span class="gold">fully automated.</span></p>
<p class="hero-tagline">The OSINT software for AI-powered real-time situation reports from open sources, <span class="gold">fully automated.</span></p>
</div>
<div class="hero-slider" role="region" aria-label="Product highlights" aria-live="polite">
@@ -601,6 +603,22 @@
<div id="map-container"></div>
<div class="map-empty" id="map-empty" style="display:none">Map data follows</div>
</div>
<!-- Use cases -->
<div class="einsatz-grid">
<div class="einsatz-card">
<h3>OSINT &amp; Situational Awareness Software</h3>
<p>Automatically evaluate hundreds of open sources and turn them into structured real-time situation reports.</p>
</div>
<div class="einsatz-card">
<h3>Disinformation Monitoring &amp; FIMI</h3>
<p>Detect manipulation and foreign interference early, with fact-checking and source assessment.</p>
</div>
<div class="einsatz-card">
<h3>Social Media &amp; Crisis Monitoring</h3>
<p>Provide crisis teams with an automatically updated situation report from social media and open sources.</p>
</div>
</div>
</div>
</section>
@@ -611,8 +629,11 @@
<section class="section section-base" id="contact">
<div class="container cta-container">
<h2 class="section-title">Interested in AegisSight Monitor?</h2>
<p class="cta-text">Talk to us about your use case.</p>
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Get in touch</button>
<p class="cta-text">Test the Monitor for one week with your own topic, free of charge and without obligation.</p>
<div class="cta-buttons">
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Request trial access</button>
</div>
<p class="contact-alt">Have a question first. Write to us at <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div>
</section>
@@ -696,7 +717,7 @@
<details class="faq-item">
<summary>How do I get access to the AegisSight Monitor?</summary>
<p class="faq-answer">Access is granted on individual request; pilot access is available for qualified organisations. Contact: <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
<p class="faq-answer">Through a free trial access. It runs for one week, includes your own topic with the full feature set and ends automatically. A work email address is required. <a href="#contact" onclick="openContactModal(); return false;">Request trial access</a>.</p>
</details>
</div>
</section>
@@ -710,6 +731,7 @@
<p>Gladbacher Straße 3-5, 40764 Langenfeld, Germany</p>
</div>
<div class="footer-links">
<a href="#contact" onclick="openContactModal(); return false;">Trial access</a>
<a href="/en/legal-notice.html">Legal notice</a>
<a href="/en/privacy.html">Privacy policy</a>
<a href="#" id="cookie-settings-link">Cookie settings</a>
@@ -725,31 +747,54 @@
<div class="modal-overlay" id="contact-modal" style="display:none">
<div class="modal-content">
<button class="modal-close" onclick="closeContactModal()" aria-label="Close">&times;</button>
<h2>Get in touch</h2>
<p class="modal-sub">Talk to us about your use case.</p>
<form id="contact-form" onsubmit="return submitContact(event)">
<h2>Request trial access</h2>
<p class="modal-sub">Test the Monitor for one week with the full feature set, free of charge and without obligation. For trial access we only consider official email addresses from public authorities or companies.</p>
<div class="tf-error" id="tf-error" role="alert"></div>
<form id="trial-form" novalidate>
<div class="form-row">
<div class="form-group">
<label for="cf-name">Name</label>
<input type="text" id="cf-name" name="name" required>
<label for="tf-name">Name</label>
<input type="text" id="tf-name" name="name" autocomplete="name" required>
</div>
<div class="form-group">
<label for="cf-org">Organisation</label>
<input type="text" id="cf-org" name="organisation">
<label for="tf-org">Authority or organisation <span class="tf-hint">optional</span></label>
<input type="text" id="tf-org" name="organisation" autocomplete="organization">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="tf-role">Role or department <span class="tf-hint">optional</span></label>
<input type="text" id="tf-role" name="role" autocomplete="organization-title">
</div>
<div class="form-group">
<label for="tf-phone">Phone <span class="tf-hint">optional</span></label>
<input type="tel" id="tf-phone" name="phone" autocomplete="tel">
</div>
</div>
<div class="form-group">
<label for="cf-email">Email</label>
<input type="email" id="cf-email" name="email" required>
<label for="tf-email">Work email address</label>
<input type="email" id="tf-email" name="email" autocomplete="email" required aria-describedby="tf-email-note">
<span class="tf-note" id="tf-email-note"></span>
</div>
<div class="form-group">
<label for="cf-message">Message</label>
<textarea id="cf-message" name="message" rows="4" required></textarea>
<div class="tf-hp" aria-hidden="true">
<label for="tf-website">Website</label>
<input type="text" id="tf-website" name="website" tabindex="-1" autocomplete="off">
</div>
<button type="submit" class="btn btn-primary btn-block">Send message</button>
<div class="tf-consent">
<input type="checkbox" id="tf-consent" name="consent" required>
<label for="tf-consent">I agree that my details may be stored and processed in order to handle this request. Further information is available in the <a href="/en/privacy.html">privacy policy</a>.</label>
</div>
<button type="submit" class="btn btn-primary btn-block">Request trial access</button>
</form>
<div class="form-success" id="form-success" style="display:none">
<p>Thank you for your message. We will get back to you shortly.</p>
<div class="tf-success" id="tf-success">
<h3>Thank you for your request</h3>
<p>We have received your details and will normally get back to you within two working days.</p>
<p>If you have any questions in the meantime, you can reach us at <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div>
</div>
</div>
@@ -757,6 +802,7 @@
<script src="/assets/vendor/leaflet/leaflet.js"></script>
<script src="/assets/vendor/leaflet/leaflet.markercluster.js"></script>
<script src="/js/app.js"></script>
<script src="/js/trial-form.js"></script>
<script src="/cookie-consent.js"></script>
</body>
</html>

Datei anzeigen

@@ -249,7 +249,7 @@
"name": "Ist AegisSight DSGVO-konform?",
"acceptedAnswer": {
"@type": "Answer",
"text": "AegisSight wird vollständig auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Es werden keine Daten an Drittländer übermittelt."
"text": "AegisSight wird auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Für die KI-gestützte Analyse setzen wir ein Sprachmodell ein, das in einem Rechenzentrum in der EU (Frankfurt) läuft. Ihre Inhalte werden dabei nicht zum Training der Modelle verwendet, und es besteht ein Auftragsverarbeitungsvertrag nach Art. 28 DSGVO. Für Behörden und besonders sensible Einsätze bieten wir zusätzlich eine lokale Version an, die vollständig in Ihrer eigenen Infrastruktur läuft, ohne jede externe Datenübermittlung."
}
},
{
@@ -265,7 +265,7 @@
"name": "Wie bekomme ich Zugang zum AegisSight Monitor?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Zugang erfolgt nach individueller Anfrage; Pilotzugänge für qualifizierte Organisationen sind möglich. Kontakt: info@aegis-sight.de."
"text": "Über einen kostenfreien Testzugang, anzufragen über das Formular auf aegis-sight.de. Der Testzugang läuft eine Woche, umfasst ein eigenes Thema mit vollem Funktionsumfang und endet automatisch. Voraussetzung ist eine dienstliche E-Mail-Adresse."
}
}
]
@@ -288,6 +288,7 @@
<li><a href="#contact">Kontakt</a></li>
</ul>
<div class="nav-extras">
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Testzugang</a>
<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>
@@ -309,6 +310,7 @@
<li><a href="#faq">Fragen</a></li>
<li><a href="#contact">Kontakt</a></li>
</ul>
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Testzugang anfragen</a>
<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>
@@ -323,7 +325,7 @@
<div class="hero-content">
<div class="hero-brand">
<h1 class="hero-title">AegisSight Monitor</h1>
<p class="hero-tagline">KI-gestützte Echtzeit-Lagebilder aus offenen Quellen, <span class="gold">vollautomatisch.</span></p>
<p class="hero-tagline">Die OSINT-Software für KI-gestützte Echtzeit-Lagebilder aus offenen Quellen, <span class="gold">vollautomatisch.</span></p>
</div>
<div class="hero-slider" role="region" aria-label="Produktvorteile" aria-live="polite">
@@ -601,6 +603,22 @@
<div id="map-container"></div>
<div class="map-empty" id="map-empty" style="display:none">Kartendaten folgen</div>
</div>
<!-- Anwendungsfälle -->
<div class="einsatz-grid">
<div class="einsatz-card">
<h3>OSINT- &amp; Lagebild-Software</h3>
<p>Hunderte offene Quellen automatisiert auswerten und daraus strukturierte Echtzeit-Lagebilder erstellen.</p>
</div>
<div class="einsatz-card">
<h3>Desinformationsmonitoring &amp; FIMI</h3>
<p>Manipulation und ausländische Einflussnahme früh erkennen, mit Faktenprüfung und Quellenbewertung.</p>
</div>
<div class="einsatz-card">
<h3>Social-Media- &amp; Krisenmonitoring</h3>
<p>Krisenstäbe mit einem automatisch aktualisierten Lagebild aus Social Media und offenen Quellen versorgen.</p>
</div>
</div>
</div>
</section>
@@ -611,8 +629,11 @@
<section class="section section-base" id="contact">
<div class="container cta-container">
<h2 class="section-title">Interesse am AegisSight Monitor?</h2>
<p class="cta-text">Sprechen Sie mit uns über Ihren Anwendungsfall.</p>
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Kontakt aufnehmen</button>
<p class="cta-text">Testen Sie den Monitor eine Woche lang mit Ihrem eigenen Thema, kostenfrei und ohne Verpflichtung.</p>
<div class="cta-buttons">
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Testzugang anfragen</button>
</div>
<p class="contact-alt">Sie haben zuerst eine Frage. Schreiben Sie uns an <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div>
</section>
@@ -686,7 +707,8 @@
<details class="faq-item">
<summary>Ist AegisSight DSGVO-konform?</summary>
<p class="faq-answer">AegisSight wird vollständig auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Es werden keine Daten an Drittländer übermittelt.</p>
<p class="faq-answer">AegisSight wird auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Für die KI-gestützte Analyse setzen wir ein Sprachmodell ein, das in einem Rechenzentrum in der EU (Frankfurt) läuft. Ihre Inhalte werden dabei nicht zum Training der Modelle verwendet, und es besteht ein Auftragsverarbeitungsvertrag nach Art. 28 DSGVO.</p>
<p class="faq-answer">Für Behörden und besonders sensible Einsätze bieten wir zusätzlich eine lokale Version an, die vollständig in Ihrer eigenen Infrastruktur läuft, ohne jede externe Datenübermittlung.</p>
</details>
<details class="faq-item">
@@ -696,7 +718,7 @@
<details class="faq-item">
<summary>Wie bekomme ich Zugang zum AegisSight Monitor?</summary>
<p class="faq-answer">Zugang erfolgt nach individueller Anfrage; Pilotzugänge für qualifizierte Organisationen sind möglich. Kontakt: <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
<p class="faq-answer">Über einen kostenfreien Testzugang. Er läuft eine Woche, umfasst ein eigenes Thema mit vollem Funktionsumfang und endet automatisch. Voraussetzung ist eine dienstliche E-Mail-Adresse. <a href="#contact" onclick="openContactModal(); return false;">Testzugang anfragen</a>.</p>
</details>
</div>
</section>
@@ -710,6 +732,7 @@
<p>Gladbacher Straße 3-5, 40764 Langenfeld</p>
</div>
<div class="footer-links">
<a href="#contact" onclick="openContactModal(); return false;">Testzugang</a>
<a href="/impressum.html">Impressum</a>
<a href="/datenschutz.html">Datenschutz</a>
<a href="#" id="cookie-settings-link">Cookie-Einstellungen</a>
@@ -725,31 +748,54 @@
<div class="modal-overlay" id="contact-modal" style="display:none">
<div class="modal-content">
<button class="modal-close" onclick="closeContactModal()">&times;</button>
<h2>Kontakt aufnehmen</h2>
<p class="modal-sub">Sprechen Sie mit uns über Ihren Anwendungsfall.</p>
<form id="contact-form" onsubmit="return submitContact(event)">
<h2>Testzugang anfragen</h2>
<p class="modal-sub">Eine Woche lang mit vollem Funktionsumfang testen, kostenfrei und ohne Verpflichtung. Für einen Testzugang berücksichtigen wir ausschließlich dienstliche E-Mail-Adressen von Behörden oder Unternehmen.</p>
<div class="tf-error" id="tf-error" role="alert"></div>
<form id="trial-form" novalidate>
<div class="form-row">
<div class="form-group">
<label for="cf-name">Name</label>
<input type="text" id="cf-name" name="name" required>
<label for="tf-name">Name</label>
<input type="text" id="tf-name" name="name" autocomplete="name" required>
</div>
<div class="form-group">
<label for="cf-org">Organisation</label>
<input type="text" id="cf-org" name="organisation">
<label for="tf-org">Behörde oder Organisation <span class="tf-hint">optional</span></label>
<input type="text" id="tf-org" name="organisation" autocomplete="organization">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="tf-role">Funktion oder Dienststelle <span class="tf-hint">optional</span></label>
<input type="text" id="tf-role" name="role" autocomplete="organization-title">
</div>
<div class="form-group">
<label for="tf-phone">Telefon <span class="tf-hint">optional</span></label>
<input type="tel" id="tf-phone" name="phone" autocomplete="tel">
</div>
</div>
<div class="form-group">
<label for="cf-email">E-Mail</label>
<input type="email" id="cf-email" name="email" required>
<label for="tf-email">Dienstliche E-Mail-Adresse</label>
<input type="email" id="tf-email" name="email" autocomplete="email" required aria-describedby="tf-email-note">
<span class="tf-note" id="tf-email-note"></span>
</div>
<div class="form-group">
<label for="cf-message">Nachricht</label>
<textarea id="cf-message" name="message" rows="4" required></textarea>
<div class="tf-hp" aria-hidden="true">
<label for="tf-website">Website</label>
<input type="text" id="tf-website" name="website" tabindex="-1" autocomplete="off">
</div>
<button type="submit" class="btn btn-primary btn-block">Nachricht senden</button>
<div class="tf-consent">
<input type="checkbox" id="tf-consent" name="consent" required>
<label for="tf-consent">Ich bin damit einverstanden, dass meine Angaben zur Bearbeitung dieser Anfrage gespeichert und verarbeitet werden. Weitere Hinweise finden sich in der <a href="/datenschutz.html">Datenschutzerklärung</a>.</label>
</div>
<button type="submit" class="btn btn-primary btn-block">Testzugang anfragen</button>
</form>
<div class="form-success" id="form-success" style="display:none">
<p>Vielen Dank für Ihre Nachricht. Wir melden uns zeitnah bei Ihnen.</p>
<div class="tf-success" id="tf-success">
<h3>Vielen Dank für Ihre Anfrage</h3>
<p>Wir haben Ihre Angaben erhalten und melden uns in der Regel innerhalb von zwei Werktagen bei Ihnen.</p>
<p>Sollten Sie in der Zwischenzeit Fragen haben, erreichen Sie uns unter <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div>
</div>
</div>
@@ -757,6 +803,7 @@
<script src="/assets/vendor/leaflet/leaflet.js"></script>
<script src="/assets/vendor/leaflet/leaflet.markercluster.js"></script>
<script src="js/app.js"></script>
<script src="/js/trial-form.js"></script>
<script src="/cookie-consent.js"></script>
</body>
</html>

Datei anzeigen

@@ -621,6 +621,7 @@ function mdToHtml(md) {
/* ==================== CONTACT MODAL ==================== */
window.openContactModal = function () {
if (typeof window.resetTrialForm === 'function') window.resetTrialForm();
document.getElementById('contact-modal').style.display = 'flex';
document.body.style.overflow = 'hidden';
if (window.umami) umami.track('contact_modal_open');
@@ -646,44 +647,8 @@ 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 = T.sending; }
fetch('/api/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: document.getElementById('cf-name').value,
organisation: document.getElementById('cf-org').value,
email: document.getElementById('cf-email').value,
message: document.getElementById('cf-message').value,
lang: lang
})
})
.then(function (r) { return r.json().then(function (d) { return { ok: r.ok, data: d }; }); })
.then(function (res) {
if (res.ok) {
document.getElementById('contact-form').style.display = 'none';
document.getElementById('form-success').style.display = 'block';
if (window.umami) umami.track('contact_form_success');
} else {
alert(res.data.error || T.sendError);
if (btn) { btn.disabled = false; btn.textContent = T.send; }
}
})
.catch(function () {
alert(T.netError);
if (btn) { btn.disabled = false; btn.textContent = T.send; }
});
return false;
};
/* Der Versand des Modal-Formulars liegt seit dem Umbau auf Testzugang
in js/trial-form.js. */
/* ==================== LOAD DEEPFAKES DATA ==================== */
function loadDeepfakesData() {

258
js/trial-form.js Normale Datei
Datei anzeigen

@@ -0,0 +1,258 @@
/* ==================================================================
AegisSight Testzugang-Formular
Liegt im Anfrage-Popup der Startseite, deutsch und englisch.
Sprache wird aus <html lang> gelesen, wie in lagebild.js und
cookie-consent.js auch.
================================================================== */
(function () {
'use strict';
var LANG = (document.documentElement.lang || 'de').toLowerCase().indexOf('en') === 0 ? 'en' : 'de';
/* ---------- Texte ---------- */
var T = {
de: {
sending: 'Wird gesendet...',
send: 'Testzugang anfragen',
nameFehlt: 'Bitte geben Sie Ihren Namen an.',
freemail: 'Für einen Testzugang berücksichtigen wir ausschließlich dienstliche E-Mail-Adressen von Behörden oder Unternehmen. Bitte verwenden Sie daher möglichst keine Freemail-Adresse wie Gmail, GMX oder web.de.',
invalidMail: 'Diese E-Mail-Adresse sieht nicht vollständig aus. Bitte prüfen Sie Ihre Eingabe.',
consent: 'Bitte bestätigen Sie die Datenschutzhinweise, damit wir Ihre Anfrage bearbeiten dürfen.',
tooFast: 'Bitte nehmen Sie sich einen Moment für das Formular. Versuchen Sie es gleich noch einmal.',
sendError: 'Die Anfrage konnte nicht gesendet werden.',
netError: 'Verbindungsfehler. Bitte versuchen Sie es erneut.',
hintOfficial: 'Dienstliche Adresse erkannt.',
labels: {
head: 'ANFRAGE TESTZUGANG AEGISSIGHT MONITOR',
name: 'Name',
org: 'Behörde oder Organisation',
role: 'Funktion oder Dienststelle',
mail: 'Dienstliche E-Mail',
phone: 'Telefon',
domain: 'Domain-Einstufung',
domainOk: 'Behörden- oder Organisationsdomain erkannt',
domainCheck: 'nicht eindeutig, bitte manuell prüfen',
empty: 'keine Angabe'
}
},
en: {
sending: 'Sending...',
send: 'Request trial access',
nameFehlt: 'Please enter your name.',
freemail: 'For trial access we only consider official email addresses from public authorities or companies. Please avoid free-provider addresses such as Gmail, GMX or web.de.',
invalidMail: 'This email address looks incomplete. Please check your entry.',
consent: 'Please confirm the privacy notice so that we may process your request.',
tooFast: 'Please take a moment to fill in the form, then try again.',
sendError: 'The request could not be sent.',
netError: 'Connection error. Please try again.',
hintOfficial: 'Official address recognised.',
labels: {
head: 'TRIAL ACCESS REQUEST AEGISSIGHT MONITOR',
name: 'Name',
org: 'Authority or organisation',
role: 'Role or department',
mail: 'Work email',
phone: 'Phone',
domain: 'Domain assessment',
domainOk: 'official domain recognised',
domainCheck: 'not conclusive, please review manually',
empty: 'not provided'
}
}
}[LANG];
/* ---------- Freemail- und Wegwerf-Anbieter ----------
Diese Adressen werden abgewiesen. Alles andere kommt durch,
damit Landkreise, Hochschulen und Rettungsdienste mit eigener
Domain nicht ausgesperrt werden. */
var BLOCKED = [
'gmail.com', 'googlemail.com', 'gmx.de', 'gmx.net', 'gmx.at', 'gmx.ch', 'gmx.com',
'web.de', 't-online.de', 'freenet.de', 'arcor.de', 'online.de',
'outlook.com', 'outlook.de', 'hotmail.com', 'hotmail.de', 'live.com', 'live.de', 'msn.com',
'yahoo.com', 'yahoo.de', 'yahoo.co.uk', 'ymail.com', 'aol.com',
'icloud.com', 'me.com', 'mac.com',
'proton.me', 'protonmail.com', 'pm.me', 'posteo.de', 'posteo.net', 'mailbox.org',
'mail.de', 'mail.com', 'email.de', 'firemail.de', 'unitybox.de', 'vodafone.de', 'vodafonemail.de',
'zoho.com', 'fastmail.com', 'hey.com', 'tutanota.com', 'tutanota.de', 'tuta.io',
'yandex.com', 'yandex.ru', 'mail.ru', 'qq.com', '163.com', '126.com', 'sina.com',
'mailinator.com', 'guerrillamail.com', '10minutemail.com', 'temp-mail.org', 'tempmail.com',
'trashmail.com', 'trashmail.de', 'wegwerfmail.de', 'yopmail.com', 'sharklasers.com',
'getnada.com', 'dispostable.com', 'maildrop.cc', 'throwawaymail.com', 'moakt.com',
'emailondeck.com', 'spam4.me', 'byom.de', 'einrot.com', 'mytemp.email'
];
/* ---------- Muster typischer Behörden- und Organisationsdomains ----------
Nur zur Kennzeichnung in der Anfrage-Mail, keine Sperre. */
var OFFICIAL_SUFFIX = [
'.bund.de', '.bundeswehr.org', '.bundestag.de', '.bundesrat.de',
'.bayern.de', '.nrw.de', '.berlin.de', '.hamburg.de', '.bremen.de',
'.niedersachsen.de', '.hessen.de', '.rlp.de', '.saarland.de', '.sachsen.de',
'.sachsen-anhalt.de', '.thueringen.de', '.brandenburg.de', '.schleswig-holstein.de',
'.mv-regierung.de', '.bwl.de', '.baden-wuerttemberg.de',
'.europa.eu', '.europarl.europa.eu', '.gv.at', '.bmi.gv.at', '.admin.ch',
'.gov', '.gov.uk', '.mil', '.gouv.fr', '.overheid.nl', '.edu'
];
var OFFICIAL_PART = [
'polizei.', 'bundeswehr.', 'bundespolizei.', 'zoll.', 'thw.', 'feuerwehr.',
'stadt-', 'stadt.', 'kreis-', 'landkreis-', 'kreis.', 'bezirk-', 'gemeinde-',
'uni-', 'universitaet', 'university', 'hochschule', 'fh-', 'hs-',
'landtag', 'ministerium', 'verfassungsschutz', 'bka.', 'bfv.', 'lka.'
];
function domainOf(mail) {
var at = (mail || '').lastIndexOf('@');
return at === -1 ? '' : mail.slice(at + 1).trim().toLowerCase();
}
function isBlocked(mail) {
return BLOCKED.indexOf(domainOf(mail)) !== -1;
}
function looksOfficial(mail) {
var d = domainOf(mail);
if (!d) return false;
var i;
for (i = 0; i < OFFICIAL_SUFFIX.length; i++) {
if (d === OFFICIAL_SUFFIX[i].slice(1) || d.slice(-OFFICIAL_SUFFIX[i].length) === OFFICIAL_SUFFIX[i]) return true;
}
for (i = 0; i < OFFICIAL_PART.length; i++) {
if (d.indexOf(OFFICIAL_PART[i]) !== -1) return true;
}
return false;
}
function plausibleMail(mail) {
return /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/.test(mail || '');
}
/* ---------- Initialisierung ---------- */
document.addEventListener('DOMContentLoaded', function () {
var form = document.getElementById('trial-form');
if (!form) return;
var loadedAt = Date.now();
var mailField = document.getElementById('tf-email');
var mailNote = document.getElementById('tf-email-note');
/* Formular in den Ausgangszustand zuruecksetzen. Wird beim Oeffnen
des Modals aufgerufen, damit niemand die Eingaben oder die
Erfolgsmeldung eines vorherigen Nutzers sieht. */
function resetTrialForm() {
form.reset();
form.style.display = '';
var ok = document.getElementById('tf-success');
if (ok) ok.style.display = 'none';
var errorBox = document.getElementById('tf-error');
if (errorBox) { errorBox.style.display = 'none'; errorBox.textContent = ''; }
if (mailNote) { mailNote.textContent = ''; mailNote.className = 'tf-note'; }
if (mailField) mailField.removeAttribute('aria-invalid');
var btn = form.querySelector('button[type="submit"]');
if (btn) { btn.disabled = false; btn.textContent = T.send; }
}
window.resetTrialForm = resetTrialForm;
/* Live-Rueckmeldung am E-Mail-Feld */
if (mailField && mailNote) {
mailField.addEventListener('blur', function () {
var v = mailField.value.trim();
mailNote.className = 'tf-note';
if (!v) { mailNote.textContent = ''; return; }
if (isBlocked(v)) {
mailNote.textContent = T.freemail;
mailNote.className = 'tf-note tf-note-warn';
mailField.removeAttribute('aria-invalid');
} else if (looksOfficial(v)) {
mailNote.textContent = T.hintOfficial;
mailNote.className = 'tf-note tf-note-ok';
mailField.removeAttribute('aria-invalid');
} else {
mailNote.textContent = '';
mailField.removeAttribute('aria-invalid');
}
});
}
form.addEventListener('submit', function (e) {
e.preventDefault();
var val = function (id) {
var el = document.getElementById(id);
return el ? el.value.trim() : '';
};
var email = val('tf-email');
var honey = val('tf-website');
var consent = document.getElementById('tf-consent');
var errorBox = document.getElementById('tf-error');
var btn = form.querySelector('button[type="submit"]');
var fail = function (msg, feldId) {
if (errorBox) {
errorBox.textContent = msg;
errorBox.style.display = 'block';
errorBox.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
var feld = feldId && document.getElementById(feldId);
if (feld) { feld.focus(); }
if (btn) { btn.disabled = false; btn.textContent = T.send; }
};
if (errorBox) errorBox.style.display = 'none';
/* Honeypot. Echte Nutzer sehen dieses Feld nicht. */
if (honey) return false;
/* Zeitfalle gegen Bots */
if (Date.now() - loadedAt < 4000) return fail(T.tooFast);
/* Das Formular traegt novalidate, damit die Browsermeldungen die
eigene Pruefung nicht ueberlagern. Pflichtfelder deshalb hier. */
if (!val('tf-name')) return fail(T.nameFehlt, 'tf-name');
if (!plausibleMail(email)) return fail(T.invalidMail, 'tf-email');
if (consent && !consent.checked) return fail(T.consent, 'tf-consent');
if (btn) { btn.disabled = true; btn.textContent = T.sending; }
var L = T.labels;
var e_ = L.empty;
var zeilen = [
L.head,
'',
L.name + ' = ' + val('tf-name'),
L.org + ' = ' + (val('tf-org') || e_),
L.role + ' = ' + (val('tf-role') || e_),
L.mail + ' = ' + email,
L.phone + ' = ' + (val('tf-phone') || e_),
'',
L.domain + ' = ' + (looksOfficial(email) ? L.domainOk : L.domainCheck)
];
var body = zeilen.join('\n');
fetch('/api/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: val('tf-name'),
organisation: val('tf-org'),
email: email,
message: body,
lang: LANG
})
})
.then(function (r) { return r.json().then(function (d) { return { ok: r.ok, data: d }; }); })
.then(function (res) {
if (res.ok) {
form.style.display = 'none';
var ok = document.getElementById('tf-success');
if (ok) { ok.style.display = 'block'; ok.scrollIntoView({ behavior: 'smooth', block: 'center' }); }
if (window.umami) umami.track('trial_request_success');
} else {
fail((res.data && res.data.error) || T.sendError);
}
})
.catch(function () { fail(T.netError); });
return false;
});
});
})();

Datei anzeigen

@@ -134,7 +134,7 @@
<ul class="nav-menu">
<li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li>
<li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="nav-extras">
@@ -156,7 +156,7 @@
<ul>
<li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li>
<li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="lang-switcher" role="group" aria-label="Sprache">

Datei anzeigen

@@ -111,7 +111,7 @@
<ul class="nav-menu">
<li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li>
<li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="nav-extras">
@@ -135,7 +135,7 @@
<ul>
<li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li>
<li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="lang-switcher" role="group" aria-label="Sprache">

Datei anzeigen

@@ -136,7 +136,7 @@
<ul class="nav-menu">
<li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li>
<li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="nav-extras">
@@ -160,7 +160,7 @@
<ul>
<li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li>
<li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="lang-switcher" role="group" aria-label="Sprache">

Datei anzeigen

@@ -31,7 +31,10 @@ AegisSight wird vollständig auf Servern in Deutschland betrieben und verarbeite
Der AegisSight Monitor richtet sich an Behörden, Redaktionen und Sicherheitsdienste, die belastbare Lagebilder in Echtzeit benötigen, etwa Krisenstäbe, investigative Newsrooms, Werkschutz und Corporate Security.
### Wie bekomme ich Zugang zum AegisSight Monitor?
Zugang erfolgt nach individueller Anfrage; Pilotzugänge für qualifizierte Organisationen sind möglich. Kontakt: info@aegis-sight.de.
Über einen kostenfreien Testzugang, anzufragen über das Formular auf https://aegis-sight.de/. Der Testzugang läuft eine Woche, umfasst ein eigenes Thema mit vollem Funktionsumfang und ein festes Nutzungskontingent, und endet automatisch. Voraussetzung ist eine dienstliche E-Mail-Adresse, Adressen bei Freemail-Anbietern werden nicht berücksichtigt.
### Wer bekommt einen Testzugang und warum ist eine dienstliche E-Mail-Adresse nötig?
Der Testzugang richtet sich an Behörden, Redaktionen und Sicherheitsdienste. Die dienstliche Adresse zeigt, aus welchem Umfeld die Anfrage kommt, und erlaubt es, den Zugang inhaltlich auf die jeweilige Aufgabe zuzuschneiden. Organisationen mit eigener Domain, die nicht offensichtlich einer Behörde zuzuordnen ist, sind ausdrücklich eingeschlossen.
### Ist AegisSight eine Monitoring-Software wie PRTG, Checkmk oder Nagios?
Nein. AegisSight ist keine IT- oder Netzwerk-Monitoring-Software zur Überwachung von Servern, Systemen oder Verfügbarkeiten. AegisSight ist OSINT-Monitoring-Software: Überwacht werden öffentliche Informationsquellen wie Nachrichten, Fachmedien, Behördenmeldungen und Social Media, nicht die eigene IT-Infrastruktur. Ergebnis sind strukturierte Lagebilder zur Sicherheits- und Informationslage.
@@ -43,7 +46,7 @@ Ja. Der AegisSight Monitor ist eine OSINT-Software aus Deutschland (Anbieter: Ae
Der AegisSight Monitor ist DSGVO-konform: Die Software läuft ausschließlich auf Servern in Deutschland, verarbeitet nur öffentlich zugängliche Quellen und übermittelt keine Daten in Drittländer. Damit ist sie eine europäische, souveräne Alternative zu außereuropäischen OSINT-Plattformen.
### Was kostet der AegisSight Monitor?
Die Preise richten sich nach Umfang und Organisation und werden auf Anfrage genannt. Für qualifizierte Organisationen sind Pilotzugänge möglich. Kontakt: info@aegis-sight.de.
Die Preise richten sich nach Umfang und Organisation und werden auf Anfrage genannt. Ein einwöchiger Testzugang ist kostenfrei und über das Anfrageformular auf https://aegis-sight.de/ erhältlich. Kontakt: info@aegis-sight.de.
### Was ist Social-Media-Monitoring für Behörden?
Social-Media-Monitoring für Behörden bezeichnet die strukturierte, kontinuierliche Auswertung öffentlicher Social-Media-Inhalte zur Lagebeurteilung, etwa für Krisenstäbe oder Sicherheitsbehörden. AegisSight integriert Social-Media-Quellen in seine OSINT-Lagebilder und prüft zentrale Behauptungen automatisch gegen unabhängige Quellen.