Backup: Stand vor Design-Optimierung (2026-02-16)
@@ -8,7 +8,8 @@
|
|||||||
"Bash(sudo apt-get:*)",
|
"Bash(sudo apt-get:*)",
|
||||||
"Bash(sudo apt-get install:*)",
|
"Bash(sudo apt-get install:*)",
|
||||||
"Bash(git add:*)",
|
"Bash(git add:*)",
|
||||||
"Bash(rm:*)"
|
"Bash(rm:*)",
|
||||||
|
"Bash(hostname)"
|
||||||
],
|
],
|
||||||
"deny": []
|
"deny": []
|
||||||
}
|
}
|
||||||
|
|||||||
100
CLAUDE.md
Normale Datei
@@ -0,0 +1,100 @@
|
|||||||
|
# CLAUDE.md - AegisSight Website
|
||||||
|
|
||||||
|
RELATED_DOCS:
|
||||||
|
COOKIE_CONSENT_IMPLEMENTATION.md: "Cookie-Banner Implementierung, GDPR, Testing"
|
||||||
|
DATENSCHUTZ_ANALYTICS.md: "Textbausteine fuer Datenschutzerklaerung"
|
||||||
|
PROFESSIONAL_TOOLBOX_CONTENT.md: "Backup-HTML fuer entfernte Produktkarte"
|
||||||
|
VIDEO_UPLOAD_INSTRUCTIONS.md: "Anleitung fuer manuelle Video-Uploads (Git-Limit)"
|
||||||
|
|
||||||
|
PROJECT: Website
|
||||||
|
STATUS: PRODUCTION
|
||||||
|
URL: https://aegis-sight.de
|
||||||
|
CONTAINER: aegis-website-nginx
|
||||||
|
|
||||||
|
COMPANY:
|
||||||
|
name: AegisSight UG (haftungsbeschraenkt)
|
||||||
|
domain: aegis-sight.de
|
||||||
|
email: info@aegis-sight.de
|
||||||
|
|
||||||
|
TECHNOLOGY:
|
||||||
|
type: Static Website
|
||||||
|
build_process: NONE
|
||||||
|
deployment: Docker/nginx
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
- HTML5
|
||||||
|
- CSS3 (modular)
|
||||||
|
- JavaScript ES6+
|
||||||
|
- SVG
|
||||||
|
|
||||||
|
features:
|
||||||
|
- multi_language: [DE, EN]
|
||||||
|
- responsive: mobile-first
|
||||||
|
- video_backgrounds: true
|
||||||
|
- cookie_consent: GDPR-compliant
|
||||||
|
- security_headers: enabled
|
||||||
|
|
||||||
|
STRUCTURE:
|
||||||
|
root_files:
|
||||||
|
- index.html: Hauptseite
|
||||||
|
- impressum.html: Impressum DE
|
||||||
|
- impressum-en.html: Impressum EN
|
||||||
|
- datenschutz.html: Datenschutz DE
|
||||||
|
- datenschutz-en.html: Datenschutz EN
|
||||||
|
- accountforger-video.html: Produkt-Demo
|
||||||
|
- robots.txt: SEO-Konfiguration
|
||||||
|
- cookie-consent.js: GDPR Cookie-System
|
||||||
|
- cookie-consent.css: Cookie-Banner Styles
|
||||||
|
|
||||||
|
directories:
|
||||||
|
assets:
|
||||||
|
fonts: [Inter, Bebas Neue]
|
||||||
|
images:
|
||||||
|
icons: UI-Icons (SVG)
|
||||||
|
flags: Laenderflaggen
|
||||||
|
logos: "Logo+Schrift_Rechts.svg"
|
||||||
|
videos: "~300MB - Hero-Videos, AFv6.mp4"
|
||||||
|
|
||||||
|
css:
|
||||||
|
- main.css: Kern-Styles
|
||||||
|
- animations-enhanced.css: Animationen
|
||||||
|
- mobile.css: Mobile Responsive
|
||||||
|
- fonts.css: Typografie
|
||||||
|
|
||||||
|
js:
|
||||||
|
- main.js: Einstiegspunkt
|
||||||
|
- translations.js: Mehrsprachigkeit
|
||||||
|
- components.js: UI-Komponenten
|
||||||
|
- animations.js: Animationssystem
|
||||||
|
|
||||||
|
docs: Rechtliche PDFs
|
||||||
|
|
||||||
|
PAGES:
|
||||||
|
homepage:
|
||||||
|
sections: [Hero mit Video, Ueber uns, Loesungen, Kontakt]
|
||||||
|
legal:
|
||||||
|
- Impressum (DE/EN)
|
||||||
|
- Datenschutz (DE/EN)
|
||||||
|
product:
|
||||||
|
- AccountForger Video-Demo
|
||||||
|
|
||||||
|
DEVELOPMENT:
|
||||||
|
translations: js/translations.js
|
||||||
|
large_files: "assets/videos/ (~300MB)"
|
||||||
|
design: mobile-first responsive
|
||||||
|
|
||||||
|
DEPLOYMENT:
|
||||||
|
container: aegis-website-nginx
|
||||||
|
server: nginx (static files)
|
||||||
|
ssl: enabled
|
||||||
|
security_headers: enabled
|
||||||
|
rate_limiting: configured
|
||||||
|
|
||||||
|
CHANGE_LOG:
|
||||||
|
2026-01-08:
|
||||||
|
- "Rebrand: IntelSight -> AegisSight"
|
||||||
|
- "Neues Logo: Logo+Schrift_Rechts.svg"
|
||||||
|
- "Email: info@aegis-sight.de"
|
||||||
|
- "Footer: Dynamisches Jahr, AGB entfernt"
|
||||||
|
|
||||||
|
Last-Updated: 2026-01-25
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# website-main
|
|
||||||
|
|
||||||
*This README was automatically generated by Claude Project Manager*
|
|
||||||
|
|
||||||
## Project Overview
|
|
||||||
|
|
||||||
- **Path**: `C:/Users/hendr/Desktop/IntelSight/Projektablage/website-main`
|
|
||||||
- **Files**: 12 files
|
|
||||||
- **Size**: 137.5 KB
|
|
||||||
- **Last Modified**: 2025-08-14 22:51
|
|
||||||
|
|
||||||
## Technology Stack
|
|
||||||
|
|
||||||
### Languages
|
|
||||||
- JavaScript
|
|
||||||
|
|
||||||
## Project Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
CLAUDE_PROJECT_README.md
|
|
||||||
de.svg
|
|
||||||
en.svg
|
|
||||||
index.html
|
|
||||||
README.md
|
|
||||||
robots.txt
|
|
||||||
script.js
|
|
||||||
Sitemap_IntelSight_UG.docx
|
|
||||||
styles.css
|
|
||||||
Logo/
|
|
||||||
├── intelsight-dark-no-tagline-website-cropped.svg
|
|
||||||
├── intelsight-dark-no-tagline-website.svg
|
|
||||||
└── intelsight-icon-transparent-dark.svg
|
|
||||||
```
|
|
||||||
|
|
||||||
## Key Files
|
|
||||||
|
|
||||||
- `README.md`
|
|
||||||
|
|
||||||
## Claude Integration
|
|
||||||
|
|
||||||
This project is managed with Claude Project Manager. To work with this project:
|
|
||||||
|
|
||||||
1. Open Claude Project Manager
|
|
||||||
2. Click on this project's tile
|
|
||||||
3. Claude will open in the project directory
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
*Add your project-specific notes here*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Development Log
|
|
||||||
|
|
||||||
- README generated on 2025-07-03 23:25:48
|
|
||||||
- README updated on 2025-08-14 22:51:36
|
|
||||||
- README updated on 2025-08-14 22:51:56
|
|
||||||
@@ -434,7 +434,7 @@ E-Mail: datenschutz@ihre-domain.de
|
|||||||
└── cookie-consent-demo.html (optional, für Tests)
|
└── cookie-consent-demo.html (optional, für Tests)
|
||||||
|
|
||||||
# Tracking-Script (bereits vorhanden)
|
# Tracking-Script (bereits vorhanden)
|
||||||
/opt/v2-Docker/v2_nginx/html/insights/t.js
|
/opt/v2-Docker/aegis-website/insights/t.js
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -549,7 +549,7 @@ curl -X POST https://aegis-sight.de/insights/api/track ...
|
|||||||
|
|
||||||
- [ ] GeoIP-Datenbank aktualisieren
|
- [ ] GeoIP-Datenbank aktualisieren
|
||||||
```bash
|
```bash
|
||||||
cd /opt/v2-Docker/v2_nginx/html/insights/data/geoip
|
cd /opt/v2-Docker/aegis-website/insights/data/geoip
|
||||||
wget -O GeoLite2-City.mmdb.new https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb
|
wget -O GeoLite2-City.mmdb.new https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb
|
||||||
mv GeoLite2-City.mmdb.new GeoLite2-City.mmdb
|
mv GeoLite2-City.mmdb.new GeoLite2-City.mmdb
|
||||||
```
|
```
|
||||||
@@ -558,7 +558,7 @@ curl -X POST https://aegis-sight.de/insights/api/track ...
|
|||||||
|
|
||||||
- [ ] Analytics-Daten prüfen (>90 Tage löschen)
|
- [ ] Analytics-Daten prüfen (>90 Tage löschen)
|
||||||
```bash
|
```bash
|
||||||
php /opt/v2-Docker/v2_nginx/html/insights/cleanup-old-data.php
|
php /opt/v2-Docker/aegis-website/insights/cleanup-old-data.php
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Jährlich:**
|
## **Jährlich:**
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="360" height="90" viewBox="0 0 360 90" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<style>
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap');
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- Accurate shield matching original -->
|
|
||||||
<g id="shield-eye-accurate">
|
|
||||||
<!-- Angular shield shape -->
|
|
||||||
<path d="M 35 30
|
|
||||||
L 65 30
|
|
||||||
L 75 40
|
|
||||||
L 75 80
|
|
||||||
L 50 115
|
|
||||||
L 25 80
|
|
||||||
L 25 40
|
|
||||||
L 35 30 Z"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="3.5"
|
|
||||||
stroke-linejoin="miter"/>
|
|
||||||
|
|
||||||
<!-- Eye centered in shield -->
|
|
||||||
<g transform="translate(50, 65)">
|
|
||||||
<!-- Almond/football shaped eye -->
|
|
||||||
<ellipse cx="0" cy="0" rx="24" ry="13"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="3.5"/>
|
|
||||||
|
|
||||||
<!-- Circular iris -->
|
|
||||||
<circle cx="0" cy="0" r="10"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="3.5"/>
|
|
||||||
|
|
||||||
<!-- Pupil -->
|
|
||||||
<circle cx="0" cy="0" r="4" fill="currentColor"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</defs>
|
|
||||||
|
|
||||||
<!-- Dark version for website - NO BACKGROUND, NO TAGLINE -->
|
|
||||||
<g transform="translate(0, -30)">
|
|
||||||
<!-- Shield centered vertically with text -->
|
|
||||||
<g transform="translate(0, 0)" color="white">
|
|
||||||
<use href="#shield-eye-accurate"/>
|
|
||||||
</g>
|
|
||||||
<!-- Text aligned with shield center - NO TAGLINE -->
|
|
||||||
<text x="90" y="77" font-family="'Poppins', sans-serif" font-size="46" font-weight="600" fill="white">IntelSight</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Vorher Breite: | Höhe: | Größe: 1.7 KiB |
@@ -1,53 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="500" height="400" viewBox="0 0 500 400" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<style>
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap');
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- Accurate shield matching original -->
|
|
||||||
<g id="shield-eye-accurate">
|
|
||||||
<!-- Angular shield shape -->
|
|
||||||
<path d="M 35 30
|
|
||||||
L 65 30
|
|
||||||
L 75 40
|
|
||||||
L 75 80
|
|
||||||
L 50 115
|
|
||||||
L 25 80
|
|
||||||
L 25 40
|
|
||||||
L 35 30 Z"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="3.5"
|
|
||||||
stroke-linejoin="miter"/>
|
|
||||||
|
|
||||||
<!-- Eye centered in shield -->
|
|
||||||
<g transform="translate(50, 65)">
|
|
||||||
<!-- Almond/football shaped eye -->
|
|
||||||
<ellipse cx="0" cy="0" rx="24" ry="13"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="3.5"/>
|
|
||||||
|
|
||||||
<!-- Circular iris -->
|
|
||||||
<circle cx="0" cy="0" r="10"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="3.5"/>
|
|
||||||
|
|
||||||
<!-- Pupil -->
|
|
||||||
<circle cx="0" cy="0" r="4" fill="currentColor"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</defs>
|
|
||||||
|
|
||||||
<!-- Dark version for website - NO BACKGROUND, NO TAGLINE -->
|
|
||||||
<g transform="translate(40, 200)">
|
|
||||||
<!-- Shield centered vertically with text -->
|
|
||||||
<g transform="translate(0, -72.5)" color="white">
|
|
||||||
<use href="#shield-eye-accurate"/>
|
|
||||||
</g>
|
|
||||||
<!-- Text aligned with shield center - NO TAGLINE -->
|
|
||||||
<text x="110" y="5" font-family="'Poppins', sans-serif" font-size="46" font-weight="600" fill="white">IntelSight</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Vorher Breite: | Höhe: | Größe: 1.7 KiB |
@@ -1,40 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<!-- Shield only - dark version (white on transparent) -->
|
|
||||||
<g transform="translate(100, 100)">
|
|
||||||
<!-- Center the shield -->
|
|
||||||
<g transform="translate(-50, -72.5)">
|
|
||||||
<!-- Angular shield shape -->
|
|
||||||
<path d="M 35 30
|
|
||||||
L 65 30
|
|
||||||
L 75 40
|
|
||||||
L 75 80
|
|
||||||
L 50 115
|
|
||||||
L 25 80
|
|
||||||
L 25 40
|
|
||||||
L 35 30 Z"
|
|
||||||
fill="none"
|
|
||||||
stroke="white"
|
|
||||||
stroke-width="3.5"
|
|
||||||
stroke-linejoin="miter"/>
|
|
||||||
|
|
||||||
<!-- Eye centered in shield -->
|
|
||||||
<g transform="translate(50, 65)">
|
|
||||||
<!-- Almond/football shaped eye -->
|
|
||||||
<ellipse cx="0" cy="0" rx="24" ry="13"
|
|
||||||
fill="none"
|
|
||||||
stroke="white"
|
|
||||||
stroke-width="3.5"/>
|
|
||||||
|
|
||||||
<!-- Circular iris -->
|
|
||||||
<circle cx="0" cy="0" r="10"
|
|
||||||
fill="none"
|
|
||||||
stroke="white"
|
|
||||||
stroke-width="3.5"/>
|
|
||||||
|
|
||||||
<!-- Pupil -->
|
|
||||||
<circle cx="0" cy="0" r="4" fill="white"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Vorher Breite: | Höhe: | Größe: 1.2 KiB |
112
PROFESSIONAL_TOOLBOX_CONTENT.md
Normale Datei
@@ -0,0 +1,112 @@
|
|||||||
|
# Professional Toolbox - Backup Content
|
||||||
|
|
||||||
|
## Beschreibung
|
||||||
|
Dieser Code enthält die vollständige Professional Toolbox Produktkarte, die temporär von der Website entfernt wurde.
|
||||||
|
|
||||||
|
## Verwendung
|
||||||
|
Um die Professional Toolbox wieder auf der Website anzuzeigen, fügen Sie den folgenden HTML-Code in die `index.html` innerhalb des `<div class="products-grid">` Elements ein:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Product: AegisSight Professional Toolbox -->
|
||||||
|
<div class="product-card">
|
||||||
|
<div class="product-header">
|
||||||
|
<div class="product-icon-wrapper">
|
||||||
|
<div class="product-icon-bg"></div>
|
||||||
|
<img class="product-icon" src="assets/images/icons/cube.svg" alt="Toolbox">
|
||||||
|
</div>
|
||||||
|
<div class="product-title-wrapper">
|
||||||
|
<h3 class="product-title" data-translate="productToolboxTitle">Professional Toolbox</h3>
|
||||||
|
<p class="product-tagline">Professional OSINT Suite</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="product-body">
|
||||||
|
<p class="product-description" data-translate="productToolboxDesc">Eine leistungsstarke Desktop-Anwendung mit fünf essentiellen Tools für behördliche OSINT-Ermittler und Analysten. Modernes Design, intuitive Bedienung, professionelle Funktionen.</p>
|
||||||
|
<button class="product-learn-more expand-button" data-expanded="false" onclick="toggleTools(this)">
|
||||||
|
<span data-translate="expandDetails">Details anzeigen</span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<!-- Tools Grid (Hidden by default, shown on expand) -->
|
||||||
|
<div class="tools-grid collapsed" id="toolsGrid">
|
||||||
|
<!-- Tool 1: Metadata Analyzer -->
|
||||||
|
<div class="tool-card">
|
||||||
|
<div class="tool-icon">
|
||||||
|
<img src="assets/images/icons/document.svg" alt="Document" width="48" height="48">
|
||||||
|
</div>
|
||||||
|
<h4 data-translate="tool1Title">Metadata Analyzer</h4>
|
||||||
|
<div class="tool-features">
|
||||||
|
<ul>
|
||||||
|
<li data-translate="tool1Feature1">Extrahiert versteckte Informationen (EXIF, GPS, Erstellungsdaten)</li>
|
||||||
|
<li data-translate="tool1Feature2">Forensische Analyse von Dokumenten & Bildern</li>
|
||||||
|
<li data-translate="tool1Feature3">Export als JSON</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tool 2: Screen Recorder -->
|
||||||
|
<div class="tool-card">
|
||||||
|
<div class="tool-icon">
|
||||||
|
<img src="assets/images/icons/video-camera.svg" alt="Video" width="48" height="48">
|
||||||
|
</div>
|
||||||
|
<h4 data-translate="tool2Title">Screen Recorder</h4>
|
||||||
|
<div class="tool-features">
|
||||||
|
<ul>
|
||||||
|
<li data-translate="tool2Feature1">Bildschirmaufnahme mit Audio (System & Mikrofon)</li>
|
||||||
|
<li data-translate="tool2Feature2">Bereichsauswahl oder Vollbild</li>
|
||||||
|
<li data-translate="tool2Feature3">Wählbare Qualitätsstufen</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tool 3: Video Crawler -->
|
||||||
|
<div class="tool-card">
|
||||||
|
<div class="tool-icon">
|
||||||
|
<img src="assets/images/icons/shield-play.svg" alt="Security" width="48" height="48">
|
||||||
|
</div>
|
||||||
|
<h4 data-translate="tool3Title">Video Crawler</h4>
|
||||||
|
<div class="tool-features">
|
||||||
|
<ul>
|
||||||
|
<li data-translate="tool3Feature1">Download von Videos aus 1000+ Plattformen</li>
|
||||||
|
<li data-translate="tool3Feature2">Automatischer Untertitel-Download</li>
|
||||||
|
<li data-translate="tool3Feature3">Qualitätsauswahl</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tool 4: Website Crawler -->
|
||||||
|
<div class="tool-card">
|
||||||
|
<div class="tool-icon">
|
||||||
|
<img src="assets/images/icons/globe.svg" alt="Global" width="48" height="48">
|
||||||
|
</div>
|
||||||
|
<h4 data-translate="tool4Title">Website Crawler</h4>
|
||||||
|
<div class="tool-features">
|
||||||
|
<ul>
|
||||||
|
<li data-translate="tool4Feature1">Archiviert Webseiten offline</li>
|
||||||
|
<li data-translate="tool4Feature2">Einstellbare Crawling-Tiefe</li>
|
||||||
|
<li data-translate="tool4Feature3">Erhält Originalstruktur inkl. CSS, JS & Medien</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tool 5: Multimedia Converter -->
|
||||||
|
<div class="tool-card">
|
||||||
|
<div class="tool-icon">
|
||||||
|
<img src="assets/images/icons/cube.svg" alt="Architecture" width="48" height="48">
|
||||||
|
</div>
|
||||||
|
<h4 data-translate="tool5Title">Multimedia Converter</h4>
|
||||||
|
<div class="tool-features">
|
||||||
|
<ul>
|
||||||
|
<li data-translate="tool5Feature1">Konvertierung von Bildern, Videos, Audio</li>
|
||||||
|
<li data-translate="tool5Feature2">Batch-Verarbeitung</li>
|
||||||
|
<li data-translate="tool5Feature3">Drag & Drop Unterstützung</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Hinweise
|
||||||
|
- Die Professional Toolbox wurde temporär entfernt, um die AccountForger-Box korrekt zu zentrieren
|
||||||
|
- Der Code ist vollständig funktionsfähig und kann jederzeit wieder eingefügt werden
|
||||||
|
- Alle Übersetzungsschlüssel und Funktionen sind bereits in den entsprechenden JavaScript-Dateien vorhanden
|
||||||
@@ -1 +0,0 @@
|
|||||||
# website
|
|
||||||
@@ -531,7 +531,6 @@
|
|||||||
|
|
||||||
<div class="video-header">
|
<div class="video-header">
|
||||||
<h1>AccountForger</h1>
|
<h1>AccountForger</h1>
|
||||||
<p>Exklusiver Zugang für autorisierte Behörden</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="video-wrapper">
|
<div class="video-wrapper">
|
||||||
@@ -570,13 +569,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="security-notice">
|
|
||||||
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M12 2L2 7V11C2 16.5 6.5 20.5 12 22C17.5 20.5 22 16.5 22 11V7L12 2Z" stroke="currentColor" stroke-width="2"/>
|
|
||||||
<path d="M9 12L11 14L15 10" stroke="currentColor" stroke-width="2"/>
|
|
||||||
</svg>
|
|
||||||
Dieses Video ist geschützt und nur für autorisierte Nutzer zugänglich.
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
8
assets/images/logos/AegisSightLogo_NavyGold.svg
Normale Datei
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 400 497" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<g id="svgg">
|
||||||
|
<path id="rechts" d="M212.575,238.576C212.984,240.67 223.048,241.002 270.154,240.533C349.694,239.739 344.481,239.31 346.236,243.942C347.823,248.13 347.264,250.927 338.778,272.292C333.041,286.737 321.692,301.671 304.569,327.057C262.704,389.124 258.243,380.556 257.465,379.844C256.548,379.007 256.695,378.153 256.7,377.409C256.827,359.293 254.573,273.452 254.549,270.937C254.525,268.422 254.116,268.891 229.156,268.982C211.282,269.047 211.756,268.669 211.925,271.847C211.971,272.701 212.094,316.69 212.2,369.6C212.306,422.51 212.487,468.568 212.604,469.063C213.014,470.81 224.336,462 224.6,462C224.864,462 237.107,453.265 241.4,450.384C242.5,449.646 244.343,448.313 245.496,447.421C246.648,446.53 248.865,444.9 250.421,443.8C251.978,442.7 255.169,440.115 257.513,438.055C259.857,435.996 262.771,433.605 263.988,432.743C267.489,430.261 269.974,428.216 270.637,427.269C270.973,426.789 271.767,426.127 272.4,425.8C273.034,425.472 273.862,424.68 274.24,424.04C274.618,423.399 275.574,422.512 276.364,422.067C277.741,421.292 287.002,412.973 290.077,409.749C290.89,408.897 293.68,406.009 296.277,403.331C303.179,396.216 308.766,389.886 310.684,387.009C311.611,385.619 312.782,384.149 313.286,383.741C313.791,383.334 314.523,382.55 314.913,382C315.304,381.45 316.113,380.353 316.711,379.562C317.31,378.771 318.552,377.132 319.471,375.919C320.389,374.706 321.709,373.103 322.403,372.357C324.097,370.534 325.597,368.32 327.217,365.252C327.957,363.85 329.057,362.338 329.66,361.892C330.264,361.446 331.622,359.655 332.679,357.912C333.735,356.168 335.453,353.696 336.496,352.417C337.539,351.139 338.935,348.947 339.599,347.546C341.424,343.695 344.598,338.004 345.689,336.626C347.172,334.754 348.692,331.944 348.986,330.528C349.132,329.828 349.51,329.041 349.826,328.779C350.142,328.517 350.4,328.069 350.4,327.784C350.4,327.499 351.048,326.045 351.84,324.552C352.632,323.059 353.784,320.479 354.401,318.819C355.017,317.159 356.416,314.072 357.509,311.96C358.602,309.848 359.894,306.968 360.38,305.56C360.866,304.152 361.593,302.46 361.995,301.8C362.398,301.14 362.941,299.795 363.203,298.812C363.464,297.828 363.931,296.663 364.239,296.223C364.548,295.782 364.8,295.078 364.8,294.658C364.8,293.56 367.089,287.051 368.23,284.904C368.764,283.901 369.201,282.793 369.202,282.44C369.204,282.088 369.46,281.312 369.771,280.715C370.082,280.118 370.552,278.588 370.814,277.315C371.076,276.042 371.715,273.867 372.234,272.482C372.753,271.097 373.442,268.667 373.765,267.082C374.657,262.705 375.074,261.226 376.185,258.503C376.746,257.13 377.395,254.61 377.628,252.903C377.861,251.196 386.4,207.294 386.4,202.415C386.4,200.114 384.943,198.138 382.973,197.769C382.197,197.623 390.698,196.027 262.4,197.136L256.297,196.493C254.923,195.188 254.409,193.392 254.634,190.691C255.021,186.052 255.075,102.153 254.699,90.2C254.256,76.132 254.359,75.232 256.566,73.785C257.5,73.174 257.724,73.166 258.9,73.706C259.615,74.035 343.437,105.997 345.2,108.641L346.2,110.142L346.246,163.984L347.17,164.968L348.095,165.953L367.317,165.835L386.539,165.718L387.711,164.406L388.883,163.095L388.646,155.847C388.515,151.861 388.304,143.29 388.176,136.8C387.97,126.347 389.116,102.223 388.883,92.984C388.587,81.212 385.041,79.623 381.162,77.313C378.036,75.451 212.403,10.83 212.49,12.505" style="fill:rgb(200,168,81);"/>
|
||||||
|
<path id="links" d="M31.8,72.797C19.193,77.854 16.869,77.149 16.354,86.093C16.177,89.171 13.694,109.47 13.373,112C11.292,128.389 11.075,175.356 12.999,192.8C13.326,195.77 15.755,217.626 17.524,225.4C17.975,227.38 21.242,245.556 21.798,247.6C23.196,252.741 27.444,269.357 28.368,273C29.454,277.277 33.845,288.636 34.632,290.326C35.42,292.017 39.017,301.259 39.364,301.931C39.973,303.107 41.279,306.405 42.799,310.6C43.879,313.58 46.904,319.091 47.546,320.62C48.78,323.561 51.339,328.992 51.965,330C52.17,330.33 53.466,332.67 54.845,335.2C56.223,337.73 65.855,353.259 67.765,356.052C72.504,362.981 75.544,366.754 76.46,368.119C78.119,370.593 79.488,372.185 85.821,379C87.66,380.98 89.758,383.356 90.483,384.279C92.003,386.218 92.035,386.23 93.151,385.3C94.267,384.37 94.041,384.013 94.036,382.593C94.015,376.905 94.025,351.182 94.025,351.182C94.062,315.081 94.745,313.16 93.752,308.626C92.302,301.997 88.001,300.043 80.439,284.793C71.474,266.714 65.169,255.803 62.016,248.485C61.011,246.153 59.289,240.91 61.521,240.882C65.215,240.836 143.575,240.107 144.382,240.673C145.808,241.671 146.494,243.516 146.346,245.959C146.058,250.736 146.217,438.282 146.511,439.663C146.825,441.137 153.946,447.096 162.193,452.924C177.223,463.547 187.111,469.578 187.956,468.458C189.091,466.954 188.058,10.288 188.006,12.482M146.001,134.292C145.999,164.821 146.043,190.718 146.099,191.84C146.336,196.617 147.019,196.45 127.622,196.354C106.312,196.249 58.054,196.89 58.054,196.89L57.06,195.896C55.315,194.152 55.678,132.49 55.766,126C56.004,108.467 56.656,110.707 66.745,106.586C70.345,105.116 134.261,79.128 135.708,78.566C146.998,74.183 145.972,74.295 146.055,76.768" style="fill:rgb(10,24,50);"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
Nachher Breite: | Höhe: | Größe: 5.3 KiB |
BIN
assets/images/logos/Logo+Schrift_Rechts.png
Normale Datei
|
Nachher Breite: | Höhe: | Größe: 31 KiB |
20
assets/images/logos/Logo+Schrift_Rechts.svg
Normale Datei
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg viewBox="0 0 1231 385" preserveAspectRatio="xMidYMid meet" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<g id="Logo-Schrift" serif:id="Logo+Schrift" transform="matrix(1.075028,0,0,0.631883,0,-494.958122)">
|
||||||
|
<rect x="0" y="783.307" width="1144.799" height="607.865" style="fill:none;"/>
|
||||||
|
<g transform="matrix(1.521788,0,0,2.589032,114.348241,790.79828)">
|
||||||
|
<g transform="matrix(104.166667,0,0,104.166667,636.063765,201.582585)">
|
||||||
|
</g>
|
||||||
|
<text x="120.491px" y="201.583px" style="font-family:'Lato-Bold', 'Lato', sans-serif;font-weight:700;font-size:104.167px;fill:rgb(10,24,50);">Aegis<tspan x="375.595px 432.522px " y="201.583px 201.583px ">Si</tspan>gh<tspan x="572.001px " y="201.583px ">t</tspan></text>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.738271,0,0,1.256027,162.661946,1094.789099)">
|
||||||
|
<g transform="matrix(1,0,0,1,-200,-248.484848)">
|
||||||
|
<g id="svgg">
|
||||||
|
<path id="rechts" d="M212.575,238.576C212.984,240.67 223.048,241.002 270.154,240.533C349.694,239.739 344.481,239.31 346.236,243.942C347.823,248.13 347.264,250.927 338.778,272.292C333.041,286.737 321.692,301.671 304.569,327.057C262.704,389.124 258.243,380.556 257.465,379.844C256.548,379.007 256.695,378.153 256.7,377.409C256.827,359.293 254.573,273.452 254.549,270.937C254.525,268.422 254.116,268.891 229.156,268.982C211.282,269.047 211.756,268.669 211.925,271.847C211.971,272.701 212.094,316.69 212.2,369.6C212.306,422.51 212.487,468.568 212.604,469.063C213.014,470.81 224.336,462 224.6,462C224.864,462 237.107,453.265 241.4,450.384C242.5,449.646 244.343,448.313 245.496,447.421C246.648,446.53 248.865,444.9 250.421,443.8C251.978,442.7 255.169,440.115 257.513,438.055C259.857,435.996 262.771,433.605 263.988,432.743C267.489,430.261 269.974,428.216 270.637,427.269C270.973,426.789 271.767,426.127 272.4,425.8C273.034,425.472 273.862,424.68 274.24,424.04C274.618,423.399 275.574,422.512 276.364,422.067C277.741,421.292 287.002,412.973 290.077,409.749C290.89,408.897 293.68,406.009 296.277,403.331C303.179,396.216 308.766,389.886 310.684,387.009C311.611,385.619 312.782,384.149 313.286,383.741C313.791,383.334 314.523,382.55 314.913,382C315.304,381.45 316.113,380.353 316.711,379.562C317.31,378.771 318.552,377.132 319.471,375.919C320.389,374.706 321.709,373.103 322.403,372.357C324.097,370.534 325.597,368.32 327.217,365.252C327.957,363.85 329.057,362.338 329.66,361.892C330.264,361.446 331.622,359.655 332.679,357.912C333.735,356.168 335.453,353.696 336.496,352.417C337.539,351.139 338.935,348.947 339.599,347.546C341.424,343.695 344.598,338.004 345.689,336.626C347.172,334.754 348.692,331.944 348.986,330.528C349.132,329.828 349.51,329.041 349.826,328.779C350.142,328.517 350.4,328.069 350.4,327.784C350.4,327.499 351.048,326.045 351.84,324.552C352.632,323.059 353.784,320.479 354.401,318.819C355.017,317.159 356.416,314.072 357.509,311.96C358.602,309.848 359.894,306.968 360.38,305.56C360.866,304.152 361.593,302.46 361.995,301.8C362.398,301.14 362.941,299.795 363.203,298.812C363.464,297.828 363.931,296.663 364.239,296.223C364.548,295.782 364.8,295.078 364.8,294.658C364.8,293.56 367.089,287.051 368.23,284.904C368.764,283.901 369.201,282.793 369.202,282.44C369.204,282.088 369.46,281.312 369.771,280.715C370.082,280.118 370.552,278.588 370.814,277.315C371.076,276.042 371.715,273.867 372.234,272.482C372.753,271.097 373.442,268.667 373.765,267.082C374.657,262.705 375.074,261.226 376.185,258.503C376.746,257.13 377.395,254.61 377.628,252.903C377.861,251.196 386.4,207.294 386.4,202.415C386.4,200.114 384.943,198.138 382.973,197.769C382.197,197.623 390.698,196.027 262.4,197.136L256.297,196.493C254.923,195.188 254.409,193.392 254.634,190.691C255.021,186.052 255.075,102.153 254.699,90.2C254.256,76.132 254.359,75.232 256.566,73.785C257.5,73.174 257.724,73.166 258.9,73.706C259.615,74.035 343.437,105.997 345.2,108.641L346.2,110.142L346.246,163.984L347.17,164.968L348.095,165.953L367.317,165.835L386.539,165.718L387.711,164.406L388.883,163.095L388.646,155.847C388.515,151.861 388.304,143.29 388.176,136.8C387.97,126.347 389.116,102.223 388.883,92.984C388.587,81.212 385.041,79.623 381.162,77.313C378.036,75.451 212.403,10.83 212.49,12.505" style="fill:rgb(200,168,81);"/>
|
||||||
|
<path id="links" d="M31.8,72.797C19.193,77.854 16.869,77.149 16.354,86.093C16.177,89.171 13.694,109.47 13.373,112C11.292,128.389 11.075,175.356 12.999,192.8C13.326,195.77 15.755,217.626 17.524,225.4C17.975,227.38 21.242,245.556 21.798,247.6C23.196,252.741 27.444,269.357 28.368,273C29.454,277.277 33.845,288.636 34.632,290.326C35.42,292.017 39.017,301.259 39.364,301.931C39.973,303.107 41.279,306.405 42.799,310.6C43.879,313.58 46.904,319.091 47.546,320.62C48.78,323.561 51.339,328.992 51.965,330C52.17,330.33 53.466,332.67 54.845,335.2C56.223,337.73 65.855,353.259 67.765,356.052C72.504,362.981 75.544,366.754 76.46,368.119C78.119,370.593 79.488,372.185 85.821,379C87.66,380.98 89.758,383.356 90.483,384.279C92.003,386.218 92.035,386.23 93.151,385.3C94.267,384.37 94.041,384.013 94.036,382.593C94.015,376.905 94.025,351.182 94.025,351.182C94.062,315.081 94.745,313.16 93.752,308.626C92.302,301.997 88.001,300.043 80.439,284.793C71.474,266.714 65.169,255.803 62.016,248.485C61.011,246.153 59.289,240.91 61.521,240.882C65.215,240.836 143.575,240.107 144.382,240.673C145.808,241.671 146.494,243.516 146.346,245.959C146.058,250.736 146.217,438.282 146.511,439.663C146.825,441.137 153.946,447.096 162.193,452.924C177.223,463.547 187.111,469.578 187.956,468.458C189.091,466.954 188.058,10.288 188.006,12.482M146.001,134.292C145.999,164.821 146.043,190.718 146.099,191.84C146.336,196.617 147.019,196.45 127.622,196.354C106.312,196.249 58.054,196.89 58.054,196.89L57.06,195.896C55.315,194.152 55.678,132.49 55.766,126C56.004,108.467 56.656,110.707 66.745,106.586C70.345,105.116 134.261,79.128 135.708,78.566C146.998,74.183 145.972,74.295 146.055,76.768" style="fill:rgb(10,24,50);"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
Nachher Breite: | Höhe: | Größe: 6.2 KiB |
|
Vorher Breite: | Höhe: | Größe: 7.9 KiB |
@@ -1,12 +1,12 @@
|
|||||||
/**
|
/**
|
||||||
* Cookie Consent Banner - DSGVO-konform
|
* Cookie Consent Banner - DSGVO-konform
|
||||||
* IntelSight / Aegis-Sight
|
* AegisSight
|
||||||
* Angepasst an Corporate Design (Rheinmetall Style)
|
* Angepasst an Corporate Design (Rheinmetall Style)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* === CSS Variables (IntelSight Brand) === */
|
/* === CSS Variables (AegisSight Brand) === */
|
||||||
:root {
|
:root {
|
||||||
--consent-primary: #0f72b5; /* IntelSight Primary Blue */
|
--consent-primary: #0f72b5; /* AegisSight Primary Blue */
|
||||||
--consent-primary-dark: #00406e; /* Dark Blue */
|
--consent-primary-dark: #00406e; /* Dark Blue */
|
||||||
--consent-gray-light: #f4f4f4;
|
--consent-gray-light: #f4f4f4;
|
||||||
--consent-white: #FFFFFF;
|
--consent-white: #FFFFFF;
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
--consent-shadow-hover: 0 8px 24px rgba(0,0,0,0.15);
|
--consent-shadow-hover: 0 8px 24px rgba(0,0,0,0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* === Demo Page Styling (IntelSight Style) === */
|
/* === Demo Page Styling (AegisSight Style) === */
|
||||||
body {
|
body {
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Cookie Consent Manager - DSGVO-konform
|
* Cookie Consent Manager - DSGVO-konform
|
||||||
* IntelSight / Aegis-Sight
|
* AegisSight
|
||||||
* Version 1.0
|
* Version 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
// === TRANSLATIONS ===
|
// === TRANSLATIONS ===
|
||||||
const TRANSLATIONS = {
|
const TRANSLATIONS = {
|
||||||
de: {
|
de: {
|
||||||
title: 'Diese Website nutzt Cookies 🍪',
|
title: 'Diese Website nutzt Cookies',
|
||||||
text: 'Wir verwenden ein selbst gehostetes Analyse-Tool, um unsere Website zu verbessern. Dabei erfassen wir anonymisierte Informationen über Ihre Nutzung (besuchte Seiten, Browser, ungefährer Standort). Alle Daten bleiben auf unserem Server in Deutschland und werden niemals an Dritte weitergegeben.',
|
text: 'Wir verwenden ein selbst gehostetes Analyse-Tool, um unsere Website zu verbessern. Dabei erfassen wir anonymisierte Informationen über Ihre Nutzung (besuchte Seiten, Browser, ungefährer Standort). Alle Daten bleiben auf unserem Server in Deutschland und werden niemals an Dritte weitergegeben.',
|
||||||
privacy: 'Mit "Alle akzeptieren" stimmen Sie der Verwendung von Analyse-Cookies zu. Sie können Ihre Einwilligung jederzeit in den Cookie-Einstellungen widerrufen.',
|
privacy: 'Mit "Alle akzeptieren" stimmen Sie der Verwendung von Analyse-Cookies zu. Sie können Ihre Einwilligung jederzeit in den Cookie-Einstellungen widerrufen.',
|
||||||
btnAcceptAll: '✓ Alle akzeptieren',
|
btnAcceptAll: '✓ Alle akzeptieren',
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
gpcText: 'Ihr Browser signalisiert, dass Sie nicht getrackt werden möchten (GPC). Wir respektieren diese Einstellung und haben Analyse-Cookies automatisch deaktiviert.'
|
gpcText: 'Ihr Browser signalisiert, dass Sie nicht getrackt werden möchten (GPC). Wir respektieren diese Einstellung und haben Analyse-Cookies automatisch deaktiviert.'
|
||||||
},
|
},
|
||||||
en: {
|
en: {
|
||||||
title: 'This website uses cookies 🍪',
|
title: 'This website uses cookies',
|
||||||
text: 'We use a self-hosted analytics tool to improve our website. We collect anonymized information about your usage (pages visited, browser, approximate location). All data remains on our server in Germany and is never shared with third parties.',
|
text: 'We use a self-hosted analytics tool to improve our website. We collect anonymized information about your usage (pages visited, browser, approximate location). All data remains on our server in Germany and is never shared with third parties.',
|
||||||
privacy: 'By clicking "Accept all", you consent to the use of analytics cookies. You can revoke your consent at any time in the cookie settings.',
|
privacy: 'By clicking "Accept all", you consent to the use of analytics cookies. You can revoke your consent at any time in the cookie settings.',
|
||||||
btnAcceptAll: '✓ Accept all',
|
btnAcceptAll: '✓ Accept all',
|
||||||
@@ -230,7 +230,7 @@
|
|||||||
<div class="consent-content">
|
<div class="consent-content">
|
||||||
${gpcDetected ? `
|
${gpcDetected ? `
|
||||||
<div class="gpc-notice">
|
<div class="gpc-notice">
|
||||||
<div class="gpc-notice-icon">🛡️</div>
|
<div class="gpc-notice-icon"></div>
|
||||||
<div class="gpc-notice-text">
|
<div class="gpc-notice-text">
|
||||||
<strong>${getTranslation('gpcTitle')}</strong>
|
<strong>${getTranslation('gpcTitle')}</strong>
|
||||||
${getTranslation('gpcText')}
|
${getTranslation('gpcText')}
|
||||||
@@ -307,7 +307,7 @@
|
|||||||
${getTranslation('analyticsDesc')}
|
${getTranslation('analyticsDesc')}
|
||||||
</div>
|
</div>
|
||||||
<div class="category-details">
|
<div class="category-details">
|
||||||
<strong>IntelSight Analytics (Self-Hosted)</strong>
|
<strong>AegisSight Analytics (Self-Hosted)</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Cookie:</strong> _insights_session (30 Minuten)</li>
|
<li><strong>Cookie:</strong> _insights_session (30 Minuten)</li>
|
||||||
<li><strong>Zweck:</strong> Session-Tracking, Bounce-Rate Berechnung</li>
|
<li><strong>Zweck:</strong> Session-Tracking, Bounce-Rate Berechnung</li>
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
@@ -81,13 +81,13 @@
|
|||||||
.about-tab.active {
|
.about-tab.active {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
transform: scale(1.05);
|
transform: scale(1.05);
|
||||||
box-shadow: 0 8px 20px rgba(15, 114, 181, 0.3);
|
box-shadow: 0 8px 20px rgba(179, 150, 69, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.about-tab:hover:not(.active) {
|
.about-tab:hover:not(.active) {
|
||||||
color: #0f72b5;
|
color: #B39645;
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
background: rgba(15, 114, 181, 0.05);
|
background: rgba(200, 168, 81, 0.08);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tab Content Panels */
|
/* Tab Content Panels */
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
left: 0;
|
left: 0;
|
||||||
width: 4px;
|
width: 4px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: linear-gradient(180deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
transform: scaleY(0);
|
transform: scaleY(0);
|
||||||
transition: transform 0.4s;
|
transition: transform 0.4s;
|
||||||
}
|
}
|
||||||
@@ -190,7 +190,7 @@
|
|||||||
|
|
||||||
.company-card:hover .company-card-icon {
|
.company-card:hover .company-card-icon {
|
||||||
transform: scale(1.1) rotate(5deg);
|
transform: scale(1.1) rotate(5deg);
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
}
|
}
|
||||||
|
|
||||||
.company-card-icon img {
|
.company-card-icon img {
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mission-header {
|
.mission-header {
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
color: white;
|
color: white;
|
||||||
padding: 60px;
|
padding: 60px;
|
||||||
border-radius: 30px;
|
border-radius: 30px;
|
||||||
@@ -279,7 +279,7 @@
|
|||||||
.value-card:hover {
|
.value-card:hover {
|
||||||
transform: translateY(-10px) scale(1.02);
|
transform: translateY(-10px) scale(1.02);
|
||||||
box-shadow: 0 20px 60px rgba(15, 114, 181, 0.2);
|
box-shadow: 0 20px 60px rgba(15, 114, 181, 0.2);
|
||||||
border-color: #0f72b5;
|
border-color: #0A1832;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value-icon {
|
.value-icon {
|
||||||
@@ -303,7 +303,7 @@
|
|||||||
|
|
||||||
.value-card:hover .value-icon {
|
.value-card:hover .value-icon {
|
||||||
transform: scale(1.1) rotate(5deg);
|
transform: scale(1.1) rotate(5deg);
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value-card:hover .value-icon img {
|
.value-card:hover .value-icon img {
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
width: 3px;
|
width: 3px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: linear-gradient(180deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,14 +363,14 @@
|
|||||||
.competency-number {
|
.competency-number {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: linear-gradient(135deg, #C8A851, #B39645);
|
||||||
-webkit-background-clip: text;
|
-webkit-background-clip: text;
|
||||||
-webkit-text-fill-color: transparent;
|
-webkit-text-fill-color: transparent;
|
||||||
background-clip: text;
|
background-clip: text;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Why IntelSight - 2x2 Grid */
|
/* Why AegisSight - 2x2 Grid */
|
||||||
.why-grid {
|
.why-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
@@ -448,7 +448,7 @@
|
|||||||
|
|
||||||
.why-card:hover .why-icon {
|
.why-card:hover .why-icon {
|
||||||
transform: scale(1.1) rotate(5deg);
|
transform: scale(1.1) rotate(5deg);
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
}
|
}
|
||||||
|
|
||||||
.why-card:hover .why-icon img {
|
.why-card:hover .why-icon img {
|
||||||
@@ -508,7 +508,7 @@
|
|||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: radial-gradient(circle at 35% 45%, rgba(15, 114, 181, 0.3) 0%, transparent 40%);
|
background: radial-gradient(circle at 35% 45%, rgba(10, 24, 50, 0.3) 0%, transparent 40%);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 0.4s ease;
|
transition: opacity 0.4s ease;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
@@ -521,7 +521,7 @@
|
|||||||
|
|
||||||
.mini-germany-map:hover {
|
.mini-germany-map:hover {
|
||||||
transform: scale(1.02);
|
transform: scale(1.02);
|
||||||
box-shadow: 0 15px 50px rgba(15, 114, 181, 0.15);
|
box-shadow: 0 15px 50px rgba(10, 24, 50, 0.15);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mini-germany-map img {
|
.mini-germany-map img {
|
||||||
@@ -541,10 +541,10 @@
|
|||||||
/* Pulsing glow effect for NRW region */
|
/* Pulsing glow effect for NRW region */
|
||||||
@keyframes nrwPulse {
|
@keyframes nrwPulse {
|
||||||
0%, 100% {
|
0%, 100% {
|
||||||
filter: drop-shadow(0 0 10px rgba(15, 114, 181, 0.5));
|
filter: drop-shadow(0 0 10px rgba(10, 24, 50, 0.5));
|
||||||
}
|
}
|
||||||
50% {
|
50% {
|
||||||
filter: drop-shadow(0 0 25px rgba(15, 114, 181, 0.8));
|
filter: drop-shadow(0 0 25px rgba(10, 24, 50, 0.8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -567,7 +567,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.location-badge:hover {
|
.location-badge:hover {
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: #0A1832;
|
||||||
color: white;
|
color: white;
|
||||||
transform: scale(1.05);
|
transform: scale(1.05);
|
||||||
box-shadow: 0 10px 30px rgba(15, 114, 181, 0.3);
|
box-shadow: 0 10px 30px rgba(15, 114, 181, 0.3);
|
||||||
|
|||||||
37
css/main.css
@@ -2,6 +2,7 @@
|
|||||||
:root {
|
:root {
|
||||||
--primary-blue: #0f72b5;
|
--primary-blue: #0f72b5;
|
||||||
--dark-blue: #00406e;
|
--dark-blue: #00406e;
|
||||||
|
--accent-gold: #C8A851;
|
||||||
--light-gray: #f4f4f4;
|
--light-gray: #f4f4f4;
|
||||||
--white: #FFFFFF;
|
--white: #FFFFFF;
|
||||||
--text-dark: #333333;
|
--text-dark: #333333;
|
||||||
@@ -25,7 +26,7 @@
|
|||||||
|
|
||||||
body {
|
body {
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
|
||||||
background-color: var(--white);
|
background-color: #0a0f1c;
|
||||||
color: var(--text-dark);
|
color: var(--text-dark);
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
@@ -58,6 +59,10 @@ h6 { font-size: 1.1rem; }
|
|||||||
color: var(--primary-blue);
|
color: var(--primary-blue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#about .section-title {
|
||||||
|
color: #0A1832;
|
||||||
|
}
|
||||||
|
|
||||||
.section-subtitle {
|
.section-subtitle {
|
||||||
font-size: 1.1rem;
|
font-size: 1.1rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -111,6 +116,9 @@ h6 { font-size: 1.1rem; }
|
|||||||
.logo-img {
|
.logo-img {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
width: auto;
|
width: auto;
|
||||||
|
max-width: 100%;
|
||||||
|
display: block;
|
||||||
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-menu {
|
.nav-menu {
|
||||||
@@ -134,7 +142,7 @@ h6 { font-size: 1.1rem; }
|
|||||||
}
|
}
|
||||||
|
|
||||||
.nav-menu a:hover {
|
.nav-menu a:hover {
|
||||||
color: var(--primary-blue);
|
color: #0A1832;
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +153,7 @@ h6 { font-size: 1.1rem; }
|
|||||||
left: 0;
|
left: 0;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
background: var(--primary-blue);
|
background: #0A1832;
|
||||||
transition: width 0.3s ease;
|
transition: width 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,12 +479,23 @@ h6 { font-size: 1.1rem; }
|
|||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
color: var(--text-dark);
|
color: var(--text-dark);
|
||||||
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.location-badge svg {
|
.location-badge:hover {
|
||||||
|
background: var(--dark-blue);
|
||||||
|
color: var(--white);
|
||||||
|
}
|
||||||
|
|
||||||
|
.location-badge img {
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
color: var(--primary-blue);
|
filter: brightness(0) saturate(100%) invert(42%) sepia(82%) saturate(723%) hue-rotate(178deg) brightness(98%) contrast(92%);
|
||||||
|
transition: filter 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.location-badge:hover img {
|
||||||
|
filter: brightness(0) saturate(100%) invert(100%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.shield-animation {
|
.shield-animation {
|
||||||
@@ -602,7 +621,7 @@ h6 { font-size: 1.1rem; }
|
|||||||
margin-bottom: 0.5rem;
|
margin-bottom: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Why IntelSight */
|
/* Why AegisSight */
|
||||||
.why-grid {
|
.why-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
@@ -1415,12 +1434,12 @@ h6 { font-size: 1.1rem; }
|
|||||||
.scroll-arrow {
|
.scroll-arrow {
|
||||||
width: 32px;
|
width: 32px;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
color: #ffffff;
|
color: #0A1832;
|
||||||
animation: bounceArrow 2s infinite;
|
animation: bounceArrow 2s infinite;
|
||||||
background: rgba(15, 114, 181, 0.2);
|
background: rgba(10, 24, 50, 0.15);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
box-shadow: 0 4px 12px rgba(15, 114, 181, 0.3);
|
box-shadow: 0 4px 12px rgba(10, 24, 50, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.scroll-arrow svg {
|
.scroll-arrow svg {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* Mobile Responsive Styles - IntelSight */
|
/* Mobile Responsive Styles - AegisSight */
|
||||||
/* Mobile-First Approach with Progressive Enhancement */
|
/* Mobile-First Approach with Progressive Enhancement */
|
||||||
|
|
||||||
/* Base Mobile Styles (320px and up) */
|
/* Base Mobile Styles (320px and up) */
|
||||||
@@ -49,6 +49,7 @@
|
|||||||
|
|
||||||
.logo-img {
|
.logo-img {
|
||||||
max-width: 120px;
|
max-width: 120px;
|
||||||
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide desktop menu */
|
/* Hide desktop menu */
|
||||||
@@ -383,6 +384,7 @@
|
|||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.hero-title .main-title {
|
.hero-title .main-title {
|
||||||
font-size: 2.5rem;
|
font-size: 2.5rem;
|
||||||
}
|
}
|
||||||
@@ -492,6 +494,35 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tablet and Small Desktop (768px - 1024px) */
|
||||||
|
@media screen and (min-width: 768px) and (max-width: 1024px) {
|
||||||
|
/* Navigation adjustments for tablets */
|
||||||
|
.nav-container {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Keep centered logo but adjust size */
|
||||||
|
.logo-img {
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Adjust menu spacing */
|
||||||
|
.nav-menu {
|
||||||
|
gap: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-menu a {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Language toggle smaller on tablets */
|
||||||
|
.lang-toggle {
|
||||||
|
padding: 0.4rem 0.8rem;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Print Styles */
|
/* Print Styles */
|
||||||
@media print {
|
@media print {
|
||||||
.navbar,
|
.navbar,
|
||||||
|
|||||||
@@ -139,15 +139,16 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: linear-gradient(135deg, #0A1832, #0f72b5);
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
opacity: 0.1;
|
opacity: 0.1;
|
||||||
transition: all 0.5s;
|
transition: all 0.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-card:hover .product-icon-bg {
|
.product-card:hover .product-icon-bg {
|
||||||
opacity: 0.2;
|
opacity: 0.3;
|
||||||
transform: rotate(10deg) scale(1.1);
|
transform: rotate(10deg) scale(1.1);
|
||||||
|
background: linear-gradient(135deg, #0A1832, #1e3a5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-icon {
|
.product-icon {
|
||||||
@@ -155,13 +156,13 @@
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
filter: brightness(0) saturate(100%) invert(42%) sepia(82%) saturate(723%) hue-rotate(178deg) brightness(98%) contrast(92%);
|
filter: brightness(0) saturate(100%) invert(8%) sepia(13%) saturate(4290%) hue-rotate(189deg) brightness(95%) contrast(97%);
|
||||||
transition: all 0.5s;
|
transition: all 0.5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-card:hover .product-icon {
|
.product-card:hover .product-icon {
|
||||||
transform: scale(1.1);
|
transform: scale(1.1);
|
||||||
filter: brightness(0) saturate(100%) invert(42%) sepia(82%) saturate(723%) hue-rotate(178deg) brightness(108%) contrast(92%);
|
filter: brightness(0) saturate(100%) invert(100%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-title-wrapper {
|
.product-title-wrapper {
|
||||||
@@ -181,6 +182,11 @@
|
|||||||
transition: all 0.3s;
|
transition: all 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Specific styling for AccountForger title */
|
||||||
|
.product-title[data-translate="productAccountForgerTitle"] {
|
||||||
|
color: #0A1832;
|
||||||
|
}
|
||||||
|
|
||||||
.product-card:hover .product-title {
|
.product-card:hover .product-title {
|
||||||
color: #0f72b5;
|
color: #0f72b5;
|
||||||
}
|
}
|
||||||
@@ -279,9 +285,9 @@
|
|||||||
|
|
||||||
/* Learn More Button */
|
/* Learn More Button */
|
||||||
.product-learn-more {
|
.product-learn-more {
|
||||||
background: transparent;
|
background: #C8A851;
|
||||||
border: 2px solid #0f72b5;
|
border: 2px solid #C8A851;
|
||||||
color: #0f72b5;
|
color: #0a0f1c;
|
||||||
padding: 10px 25px;
|
padding: 10px 25px;
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@@ -301,7 +307,7 @@
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 0;
|
height: 0;
|
||||||
background: linear-gradient(135deg, #0f72b5, #00406e);
|
background: #0a0f1c;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
transition: all 0.5s;
|
transition: all 0.5s;
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
@@ -313,10 +319,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.product-learn-more:hover {
|
.product-learn-more:hover {
|
||||||
color: #ffffff;
|
color: #C8A851;
|
||||||
border-color: transparent;
|
border-color: #C8A851;
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
box-shadow: 0 10px 30px rgba(15, 114, 181, 0.3);
|
box-shadow: 0 10px 30px rgba(200, 168, 81, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.product-learn-more span {
|
.product-learn-more span {
|
||||||
|
|||||||
@@ -3,7 +3,17 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Privacy Policy - IntelSight</title>
|
<title>Privacy Policy - AegisSight</title>
|
||||||
|
|
||||||
|
<!-- Prevent search engine indexing -->
|
||||||
|
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
<link rel="apple-touch-icon" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<link rel="stylesheet" href="css/main.css">
|
||||||
<link rel="stylesheet" href="css/fonts.css">
|
<link rel="stylesheet" href="css/fonts.css">
|
||||||
<style>
|
<style>
|
||||||
@@ -117,14 +127,14 @@
|
|||||||
<div class="nav-container">
|
<div class="nav-container">
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
<img src="assets/images/logos/intelsight-name-light.svg" alt="IntelSight" class="logo-img">
|
<img src="assets/images/logos/Logo+Schrift_Rechts.svg" alt="AegisSight" class="logo-img">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav-menu">
|
<ul class="nav-menu">
|
||||||
<li><a href="index.html#home">Home</a></li>
|
<li><a href="index.html#home">Home</a></li>
|
||||||
<li><a href="index.html#about">About Us</a></li>
|
<li><a href="index.html#about">About Us</a></li>
|
||||||
<li><a href="index.html#products">Products & Solutions</a></li>
|
<li><a href="index.html#products">Products & Solutions</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de">Contact</a></li>
|
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="nav-extras">
|
<div class="nav-extras">
|
||||||
<button class="lang-toggle" data-lang="en" aria-label="Switch language">DE | EN</button>
|
<button class="lang-toggle" data-lang="en" aria-label="Switch language">DE | EN</button>
|
||||||
@@ -175,13 +185,13 @@
|
|||||||
|
|
||||||
<div class="contact-info">
|
<div class="contact-info">
|
||||||
<p>
|
<p>
|
||||||
IntelSight UG (limited liability)<br>
|
AegisSight UG (limited liability)<br>
|
||||||
Hendrik Gebhardt<br>
|
Hendrik Gebhardt<br>
|
||||||
Monami Homma<br>
|
Monami Homma<br>
|
||||||
Gladbacher Strasse 3-5<br>
|
Gladbacher Strasse 3-5<br>
|
||||||
40764 Langenfeld<br>
|
40764 Langenfeld<br>
|
||||||
Germany<br><br>
|
Germany<br><br>
|
||||||
Email: info@intelsight.de
|
Email: info@aegis-sight.de
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -247,13 +257,33 @@
|
|||||||
<li><strong>Right to object:</strong> You can object to the processing of your data.</li>
|
<li><strong>Right to object:</strong> You can object to the processing of your data.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>To exercise these rights, please contact us at info@intelsight.de.</p>
|
<p>To exercise these rights, please contact us at info@aegis-sight.de.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="datenschutz-section">
|
<div class="datenschutz-section">
|
||||||
<h2>6. Changes to This Privacy Policy</h2>
|
<h2>6. Changes to This Privacy Policy</h2>
|
||||||
<p>We reserve the right to adapt this privacy policy so that it always complies with current legal requirements or to implement changes to our services in the privacy policy, e.g., when introducing new services. The new privacy policy will then apply to your next visit.</p>
|
<p>We reserve the right to adapt this privacy policy so that it always complies with current legal requirements or to implement changes to our services in the privacy policy, e.g., when introducing new services. The new privacy policy will then apply to your next visit.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="datenschutz-section">
|
||||||
|
<h2>7. Automated Access and AI Agents</h2>
|
||||||
|
|
||||||
|
<h3>Prohibition of Automated Access</h3>
|
||||||
|
<p>Automated querying, scraping, or crawling of this website by bots, spiders, scrapers, AI agents (including LLM-based systems), "buy-for-me" agents, or similar automated tools is prohibited without our express written permission.</p>
|
||||||
|
|
||||||
|
<p>This includes in particular:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Automated data collection and extraction</li>
|
||||||
|
<li>Training of AI models using content from this website</li>
|
||||||
|
<li>Automated end-to-end processes without human review</li>
|
||||||
|
<li>Systematic reading of content by automated systems</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Violations of this policy may be subject to civil and criminal prosecution. The instructions contained in our robots.txt file are binding and form part of these terms of use.</p>
|
||||||
|
|
||||||
|
<h3>Exceptions</h3>
|
||||||
|
<p>Excluded from this prohibition are search engine crawlers that comply with our robots.txt guidelines, as well as services to which we have expressly granted permission.</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -261,7 +291,7 @@
|
|||||||
<footer class="footer">
|
<footer class="footer">
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>IntelSight</h4>
|
<h4>AegisSight</h4>
|
||||||
<p>Sicherheit Made in Germany</p>
|
<p>Sicherheit Made in Germany</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
@@ -273,18 +303,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>Contact</h4>
|
<h4>Contact</h4>
|
||||||
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
|
<p>info@aegis-sight.de</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-bottom">
|
<div class="footer-bottom">
|
||||||
<p>© 2025 IntelSight UG. All rights reserved.</p>
|
<p>© 2025 AegisSight UG. All rights reserved.</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- JavaScript for legal pages -->
|
<!-- JavaScript for legal pages -->
|
||||||
<script src="js/legal-pages.js"></script>
|
<script src="js/legal-pages.js"></script>
|
||||||
|
|
||||||
<!-- IntelSight Analytics -->
|
<!-- AegisSight Analytics -->
|
||||||
<script async src="/insights/t.js"></script>
|
<script async src="/insights/t.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -3,7 +3,17 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Datenschutz - IntelSight</title>
|
<title>Datenschutz - AegisSight</title>
|
||||||
|
|
||||||
|
<!-- Prevent search engine indexing -->
|
||||||
|
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
<link rel="apple-touch-icon" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<link rel="stylesheet" href="css/main.css">
|
||||||
<link rel="stylesheet" href="css/fonts.css">
|
<link rel="stylesheet" href="css/fonts.css">
|
||||||
<link rel="stylesheet" href="css/mobile.css">
|
<link rel="stylesheet" href="css/mobile.css">
|
||||||
@@ -110,14 +120,14 @@
|
|||||||
<div class="nav-container">
|
<div class="nav-container">
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
<img src="assets/images/logos/intelsight-name-light.svg" alt="IntelSight" class="logo-img">
|
<img src="assets/images/logos/Logo+Schrift_Rechts.svg" alt="AegisSight" class="logo-img">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav-menu">
|
<ul class="nav-menu">
|
||||||
<li><a href="index.html#home">Startseite</a></li>
|
<li><a href="index.html#home">Startseite</a></li>
|
||||||
<li><a href="index.html#about">Über uns</a></li>
|
<li><a href="index.html#about">Über uns</a></li>
|
||||||
<li><a href="index.html#products">Produkte & Lösungen</a></li>
|
<li><a href="index.html#products">Produkte & Lösungen</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de">Kontakt</a></li>
|
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="nav-extras">
|
<div class="nav-extras">
|
||||||
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln">DE | EN</button>
|
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln">DE | EN</button>
|
||||||
@@ -178,10 +188,10 @@
|
|||||||
<h3>Hinweis zur verantwortlichen Stelle</h3>
|
<h3>Hinweis zur verantwortlichen Stelle</h3>
|
||||||
<p>Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:</p>
|
<p>Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:</p>
|
||||||
<p>
|
<p>
|
||||||
<strong>IntelSight UG (haftungsbeschränkt)</strong><br>
|
<strong>AegisSight UG (haftungsbeschränkt)</strong><br>
|
||||||
Gladbacher Strasse 3-5<br>
|
Gladbacher Strasse 3-5<br>
|
||||||
40764 Langenfeld<br><br>
|
40764 Langenfeld<br><br>
|
||||||
E-Mail: info@intelsight.de
|
E-Mail: info@aegis-sight.de
|
||||||
</p>
|
</p>
|
||||||
<p>Verantwortliche Stelle ist die natürliche oder juristische Person, die allein oder gemeinsam mit anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten (z. B. Namen, E-Mail-Adressen o. Ä.) entscheidet.</p>
|
<p>Verantwortliche Stelle ist die natürliche oder juristische Person, die allein oder gemeinsam mit anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten (z. B. Namen, E-Mail-Adressen o. Ä.) entscheidet.</p>
|
||||||
|
|
||||||
@@ -261,6 +271,26 @@
|
|||||||
<p>Weitere Informationen zu Google Fonts finden Sie unter <a href="https://developers.google.com/fonts/faq" target="_blank">https://developers.google.com/fonts/faq</a> und in der Datenschutzerklärung von Google: <a href="https://policies.google.com/privacy?hl=de" target="_blank">https://policies.google.com/privacy?hl=de</a>.</p>
|
<p>Weitere Informationen zu Google Fonts finden Sie unter <a href="https://developers.google.com/fonts/faq" target="_blank">https://developers.google.com/fonts/faq</a> und in der Datenschutzerklärung von Google: <a href="https://policies.google.com/privacy?hl=de" target="_blank">https://policies.google.com/privacy?hl=de</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="datenschutz-section">
|
||||||
|
<h2>7. Automatisierte Zugriffe und KI-Agenten</h2>
|
||||||
|
|
||||||
|
<h3>Verbot automatisierter Zugriffe</h3>
|
||||||
|
<p>Die automatisierte Abfrage, das Scraping oder Crawling dieser Website durch Bots, Spider, Scraper, KI-Agenten (einschließlich LLM-basierter Systeme), „Buy-for-me"-Agenten oder ähnliche automatisierte Tools ist ohne unsere ausdrückliche schriftliche Genehmigung untersagt.</p>
|
||||||
|
|
||||||
|
<p>Dies umfasst insbesondere:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Automatisierte Datenerfassung und -extraktion</li>
|
||||||
|
<li>Training von KI-Modellen mit Inhalten dieser Website</li>
|
||||||
|
<li>Automatisierte End-to-End-Prozesse ohne menschliche Überprüfung</li>
|
||||||
|
<li>Systematisches Auslesen von Inhalten durch automatisierte Systeme</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Verstöße gegen diese Regelung können zivil- und strafrechtlich verfolgt werden. Die in unserer robots.txt-Datei enthaltenen Anweisungen sind verbindlich und Teil dieser Nutzungsbedingungen.</p>
|
||||||
|
|
||||||
|
<h3>Ausnahmen</h3>
|
||||||
|
<p>Ausgenommen von diesem Verbot sind Suchmaschinen-Crawler, die sich an die Vorgaben unserer robots.txt halten, sowie Dienste, denen wir ausdrücklich eine Genehmigung erteilt haben.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="source-note">
|
<div class="source-note">
|
||||||
<p>Quelle: <a href="https://www.e-recht24.de" target="_blank">https://www.e-recht24.de</a></p>
|
<p>Quelle: <a href="https://www.e-recht24.de" target="_blank">https://www.e-recht24.de</a></p>
|
||||||
</div>
|
</div>
|
||||||
@@ -272,7 +302,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>IntelSight UG (haftungsbeschränkt)</h4>
|
<h4>AegisSight UG (haftungsbeschränkt)</h4>
|
||||||
<p>Gladbacher Strasse 3-5</p>
|
<p>Gladbacher Strasse 3-5</p>
|
||||||
<p>40764 Langenfeld</p>
|
<p>40764 Langenfeld</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -282,7 +312,7 @@
|
|||||||
<li><a href="index.html#home">Startseite</a></li>
|
<li><a href="index.html#home">Startseite</a></li>
|
||||||
<li><a href="index.html#about">Über uns</a></li>
|
<li><a href="index.html#about">Über uns</a></li>
|
||||||
<li><a href="index.html#products">Produkte</a></li>
|
<li><a href="index.html#products">Produkte</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de">Kontakt</a></li>
|
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
@@ -294,17 +324,17 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>Kontakt</h4>
|
<h4>Kontakt</h4>
|
||||||
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
|
<p>info@aegis-sight.de</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="copyright">© 2025 IntelSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.</p>
|
<p class="copyright">© <span class="current-year"></span> AegisSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- JavaScript for legal pages -->
|
<!-- JavaScript for legal pages -->
|
||||||
<script src="js/legal-pages.js"></script>
|
<script src="js/legal-pages.js"></script>
|
||||||
|
|
||||||
<!-- IntelSight Analytics -->
|
<!-- AegisSight Analytics -->
|
||||||
<script async src="/insights/t.js"></script>
|
<script async src="/insights/t.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
452
downloads/af-updates/session_manager.py
Normale Datei
@@ -0,0 +1,452 @@
|
|||||||
|
"""
|
||||||
|
Session Manager für die Lizenz-Session-Verwaltung mit Heartbeat.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import logging
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional, Dict, Any
|
||||||
|
from .api_client import LicenseAPIClient
|
||||||
|
from .hardware_fingerprint import HardwareFingerprint
|
||||||
|
|
||||||
|
logger = logging.getLogger("session_manager")
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
# Füge Console Handler hinzu falls noch nicht vorhanden
|
||||||
|
if not logger.handlers:
|
||||||
|
handler = logging.StreamHandler()
|
||||||
|
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
|
||||||
|
logger.addHandler(handler)
|
||||||
|
|
||||||
|
|
||||||
|
class SessionManager:
|
||||||
|
"""Verwaltet die Lizenz-Session und Heartbeat."""
|
||||||
|
|
||||||
|
SESSION_FILE = os.path.join("config", ".session_data")
|
||||||
|
HEARTBEAT_INTERVAL = 60 # Sekunden
|
||||||
|
|
||||||
|
def __init__(self, api_client: Optional[LicenseAPIClient] = None):
|
||||||
|
"""
|
||||||
|
Initialisiert den Session Manager.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
api_client: Optional vorkonfigurierter API Client
|
||||||
|
"""
|
||||||
|
self.api_client = api_client or LicenseAPIClient()
|
||||||
|
self.hardware_fingerprint = HardwareFingerprint()
|
||||||
|
|
||||||
|
self.session_token: Optional[str] = None
|
||||||
|
self.license_key: Optional[str] = None
|
||||||
|
self.activation_id: Optional[int] = None
|
||||||
|
self.heartbeat_thread: Optional[threading.Thread] = None
|
||||||
|
self.stop_heartbeat = threading.Event()
|
||||||
|
self.is_active = False
|
||||||
|
|
||||||
|
# Lade Session-IP-Konfiguration
|
||||||
|
self._load_ip_config()
|
||||||
|
|
||||||
|
# Session-Daten laden falls vorhanden
|
||||||
|
self._load_session_data()
|
||||||
|
|
||||||
|
def _save_session_data(self) -> None:
|
||||||
|
"""Speichert die aktuelle Session-Daten."""
|
||||||
|
try:
|
||||||
|
os.makedirs("config", exist_ok=True)
|
||||||
|
session_data = {
|
||||||
|
"session_token": self.session_token,
|
||||||
|
"license_key": self.license_key,
|
||||||
|
"activation_id": self.activation_id,
|
||||||
|
"timestamp": datetime.now().isoformat()
|
||||||
|
}
|
||||||
|
with open(self.SESSION_FILE, 'w') as f:
|
||||||
|
json.dump(session_data, f)
|
||||||
|
logger.debug("Session-Daten gespeichert")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Fehler beim Speichern der Session-Daten: {e}")
|
||||||
|
|
||||||
|
def _load_session_data(self) -> None:
|
||||||
|
"""Lädt gespeicherte Session-Daten."""
|
||||||
|
if os.path.exists(self.SESSION_FILE):
|
||||||
|
try:
|
||||||
|
with open(self.SESSION_FILE, 'r') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
self.session_token = data.get("session_token")
|
||||||
|
self.license_key = data.get("license_key")
|
||||||
|
self.activation_id = data.get("activation_id")
|
||||||
|
logger.info("Session-Daten geladen")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Fehler beim Laden der Session-Daten: {e}")
|
||||||
|
|
||||||
|
def _clear_session_data(self) -> None:
|
||||||
|
"""Löscht die gespeicherten Session-Daten."""
|
||||||
|
try:
|
||||||
|
if os.path.exists(self.SESSION_FILE):
|
||||||
|
os.remove(self.SESSION_FILE)
|
||||||
|
logger.debug("Session-Daten gelöscht")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Fehler beim Löschen der Session-Daten: {e}")
|
||||||
|
|
||||||
|
def start_session(self, license_key: str, activation_id: Optional[int] = None) -> Dict[str, Any]:
|
||||||
|
"""
|
||||||
|
Startet eine neue Session für die Lizenz.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
license_key: Der Lizenzschlüssel
|
||||||
|
activation_id: Optional die Aktivierungs-ID
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dictionary mit Session-Informationen oder Fehler
|
||||||
|
"""
|
||||||
|
if self.is_active:
|
||||||
|
logger.warning("Session läuft bereits")
|
||||||
|
return {
|
||||||
|
"success": False,
|
||||||
|
"error": "Session already active"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Hardware-Info sammeln
|
||||||
|
hw_hash = self.hardware_fingerprint.get_or_create_fingerprint()
|
||||||
|
machine_name = self.hardware_fingerprint.get_machine_name()
|
||||||
|
|
||||||
|
# IP-Adresse ermitteln
|
||||||
|
client_ip = self._get_session_ip()
|
||||||
|
|
||||||
|
logger.info(f"Starte Session für Lizenz: {license_key[:4]}...")
|
||||||
|
logger.debug(f"Session-Parameter: machine_name={machine_name}, hw_hash={hw_hash[:8]}..., ip={client_ip}")
|
||||||
|
|
||||||
|
# Session-Start API Call mit IP-Adresse
|
||||||
|
result = self.api_client.start_session(
|
||||||
|
license_key=license_key,
|
||||||
|
machine_id=machine_name,
|
||||||
|
hardware_hash=hw_hash,
|
||||||
|
version="1.0.0", # TODO: Version aus config lesen
|
||||||
|
ip_address=client_ip # NEU: IP-Adresse hinzugefügt
|
||||||
|
)
|
||||||
|
|
||||||
|
logger.debug(f"Session-Start Response: {result}")
|
||||||
|
|
||||||
|
if result.get("success"):
|
||||||
|
data = result.get("data", {})
|
||||||
|
|
||||||
|
# Prüfe ob die Session wirklich erfolgreich war
|
||||||
|
if data.get("success") is False:
|
||||||
|
# Session wurde abgelehnt
|
||||||
|
error_msg = data.get("message", "Session start failed")
|
||||||
|
logger.error(f"Session abgelehnt: {error_msg}")
|
||||||
|
return {
|
||||||
|
"success": False,
|
||||||
|
"error": error_msg,
|
||||||
|
"code": "SESSION_REJECTED"
|
||||||
|
}
|
||||||
|
|
||||||
|
self.session_token = data.get("session_token")
|
||||||
|
self.license_key = license_key
|
||||||
|
self.activation_id = activation_id or data.get("activation_id")
|
||||||
|
self.is_active = True if self.session_token else False
|
||||||
|
|
||||||
|
# Session-Daten speichern
|
||||||
|
self._save_session_data()
|
||||||
|
|
||||||
|
# Heartbeat starten
|
||||||
|
self._start_heartbeat()
|
||||||
|
|
||||||
|
logger.info(f"Session erfolgreich gestartet: {self.session_token}")
|
||||||
|
|
||||||
|
# Update-Info prüfen
|
||||||
|
if data.get("update_available"):
|
||||||
|
logger.info(f"Update verfügbar: {data.get('latest_version')}")
|
||||||
|
|
||||||
|
return {
|
||||||
|
"success": True,
|
||||||
|
"session_token": self.session_token,
|
||||||
|
"update_info": {
|
||||||
|
"available": data.get("update_available", False),
|
||||||
|
"version": data.get("latest_version"),
|
||||||
|
"download_url": data.get("download_url")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
error = result.get("error", "Unknown error")
|
||||||
|
logger.error(f"Session-Start fehlgeschlagen: {error}")
|
||||||
|
|
||||||
|
# Bei Konflikt (409) bedeutet es, dass bereits eine Session läuft
|
||||||
|
if result.get("status") == 409:
|
||||||
|
return {
|
||||||
|
"success": False,
|
||||||
|
"error": "Another session is already active for this license",
|
||||||
|
"code": "SESSION_CONFLICT"
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"success": False,
|
||||||
|
"error": error,
|
||||||
|
"code": result.get("code", "SESSION_START_FAILED")
|
||||||
|
}
|
||||||
|
|
||||||
|
def _start_heartbeat(self) -> None:
|
||||||
|
"""Startet den Heartbeat-Thread."""
|
||||||
|
if self.heartbeat_thread and self.heartbeat_thread.is_alive():
|
||||||
|
logger.warning("Heartbeat läuft bereits")
|
||||||
|
return
|
||||||
|
|
||||||
|
self.stop_heartbeat.clear()
|
||||||
|
self.heartbeat_thread = threading.Thread(
|
||||||
|
target=self._heartbeat_worker,
|
||||||
|
daemon=True,
|
||||||
|
name="LicenseHeartbeat"
|
||||||
|
)
|
||||||
|
self.heartbeat_thread.start()
|
||||||
|
logger.info("Heartbeat-Thread gestartet")
|
||||||
|
|
||||||
|
def _heartbeat_worker(self) -> None:
|
||||||
|
"""Worker-Funktion für den Heartbeat-Thread."""
|
||||||
|
logger.info(f"Heartbeat-Worker gestartet (Interval: {self.HEARTBEAT_INTERVAL}s)")
|
||||||
|
|
||||||
|
while not self.stop_heartbeat.is_set():
|
||||||
|
try:
|
||||||
|
# Warte das Interval oder bis Stop-Signal
|
||||||
|
if self.stop_heartbeat.wait(self.HEARTBEAT_INTERVAL):
|
||||||
|
break
|
||||||
|
|
||||||
|
# Sende Heartbeat
|
||||||
|
if self.session_token and self.license_key:
|
||||||
|
logger.debug("Sende Heartbeat...")
|
||||||
|
result = self.api_client.session_heartbeat(
|
||||||
|
session_token=self.session_token,
|
||||||
|
license_key=self.license_key
|
||||||
|
)
|
||||||
|
|
||||||
|
# Pruefe sowohl HTTP-Status als auch Body-Success
|
||||||
|
http_ok = result.get("success")
|
||||||
|
body_data = result.get("data", {})
|
||||||
|
body_ok = body_data.get("success", True) if isinstance(body_data, dict) else True
|
||||||
|
|
||||||
|
if http_ok and body_ok:
|
||||||
|
logger.debug("Heartbeat erfolgreich")
|
||||||
|
else:
|
||||||
|
body_msg = body_data.get("message", "") if isinstance(body_data, dict) else ""
|
||||||
|
logger.error(f"Heartbeat fehlgeschlagen: {body_msg or result.get('error')}")
|
||||||
|
|
||||||
|
# Bei HTTP-Fehlern oder Body-Fehler Session beenden
|
||||||
|
if result.get("status") in [401, 404] or (http_ok and not body_ok):
|
||||||
|
logger.error("Session ungueltig, beende...")
|
||||||
|
self.end_session()
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
logger.warning("Keine Session-Daten für Heartbeat")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Fehler im Heartbeat-Worker: {e}")
|
||||||
|
|
||||||
|
logger.info("Heartbeat-Worker beendet")
|
||||||
|
|
||||||
|
def end_session(self) -> Dict[str, Any]:
|
||||||
|
"""
|
||||||
|
Beendet die aktuelle Session.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dictionary mit Informationen über die beendete Session
|
||||||
|
"""
|
||||||
|
if not self.is_active:
|
||||||
|
logger.warning("Keine aktive Session zum Beenden")
|
||||||
|
return {
|
||||||
|
"success": False,
|
||||||
|
"error": "No active session"
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("Beende Session...")
|
||||||
|
|
||||||
|
# Heartbeat stoppen
|
||||||
|
self.stop_heartbeat.set()
|
||||||
|
if self.heartbeat_thread:
|
||||||
|
self.heartbeat_thread.join(timeout=5)
|
||||||
|
|
||||||
|
# Session beenden API Call
|
||||||
|
result = {"success": True}
|
||||||
|
if self.session_token:
|
||||||
|
result = self.api_client.end_session(self.session_token)
|
||||||
|
|
||||||
|
if result.get("success"):
|
||||||
|
logger.info("Session erfolgreich beendet")
|
||||||
|
else:
|
||||||
|
logger.error(f"Fehler beim Beenden der Session: {result.get('error')}")
|
||||||
|
|
||||||
|
# Session-Daten löschen
|
||||||
|
self.session_token = None
|
||||||
|
self.license_key = None
|
||||||
|
self.activation_id = None
|
||||||
|
self.is_active = False
|
||||||
|
self._clear_session_data()
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def resume_session(self) -> bool:
|
||||||
|
"""
|
||||||
|
Versucht eine gespeicherte Session fortzusetzen.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True wenn erfolgreich, False sonst
|
||||||
|
"""
|
||||||
|
if self.is_active:
|
||||||
|
logger.info("Session läuft bereits")
|
||||||
|
return True
|
||||||
|
|
||||||
|
if not self.session_token or not self.license_key:
|
||||||
|
logger.info("Keine gespeicherten Session-Daten vorhanden")
|
||||||
|
return False
|
||||||
|
|
||||||
|
logger.info("Versuche Session fortzusetzen...")
|
||||||
|
|
||||||
|
# Teste mit Heartbeat ob Session noch gültig ist
|
||||||
|
result = self.api_client.session_heartbeat(
|
||||||
|
session_token=self.session_token,
|
||||||
|
license_key=self.license_key
|
||||||
|
)
|
||||||
|
|
||||||
|
# Pruefe sowohl HTTP-Status als auch Body-Success
|
||||||
|
http_ok = result.get("success")
|
||||||
|
body_data = result.get("data", {})
|
||||||
|
body_ok = body_data.get("success", True) if isinstance(body_data, dict) else True
|
||||||
|
|
||||||
|
if http_ok and body_ok:
|
||||||
|
logger.info("Session erfolgreich fortgesetzt")
|
||||||
|
self.is_active = True
|
||||||
|
self._start_heartbeat()
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
body_msg = body_data.get("message", "") if isinstance(body_data, dict) else ""
|
||||||
|
logger.warning(f"Gespeicherte Session ungueltig: {body_msg or result.get('error', 'unbekannt')}")
|
||||||
|
self._clear_session_data()
|
||||||
|
return False
|
||||||
|
|
||||||
|
def is_session_active(self) -> bool:
|
||||||
|
"""
|
||||||
|
Prüft ob eine Session aktiv ist.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True wenn aktiv, False sonst
|
||||||
|
"""
|
||||||
|
return self.is_active
|
||||||
|
|
||||||
|
def get_session_info(self) -> Dict[str, Any]:
|
||||||
|
"""
|
||||||
|
Gibt Informationen über die aktuelle Session zurück.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dictionary mit Session-Informationen
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
"active": self.is_active,
|
||||||
|
"session_token": self.session_token[:8] + "..." if self.session_token else None,
|
||||||
|
"license_key": self.license_key[:4] + "..." if self.license_key else None,
|
||||||
|
"activation_id": self.activation_id,
|
||||||
|
"heartbeat_interval": self.HEARTBEAT_INTERVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
def set_heartbeat_interval(self, seconds: int) -> None:
|
||||||
|
"""
|
||||||
|
Setzt das Heartbeat-Interval.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
seconds: Interval in Sekunden (min 30, max 300)
|
||||||
|
"""
|
||||||
|
if 30 <= seconds <= 300:
|
||||||
|
self.HEARTBEAT_INTERVAL = seconds
|
||||||
|
logger.info(f"Heartbeat-Interval auf {seconds}s gesetzt")
|
||||||
|
|
||||||
|
# Restart Heartbeat wenn aktiv
|
||||||
|
if self.is_active:
|
||||||
|
self.stop_heartbeat.set()
|
||||||
|
if self.heartbeat_thread:
|
||||||
|
self.heartbeat_thread.join(timeout=5)
|
||||||
|
self._start_heartbeat()
|
||||||
|
else:
|
||||||
|
logger.warning(f"Ungültiges Heartbeat-Interval: {seconds}")
|
||||||
|
|
||||||
|
def _load_ip_config(self) -> None:
|
||||||
|
"""Lädt die IP-Konfiguration aus license_config.json."""
|
||||||
|
config_path = os.path.join("config", "license_config.json")
|
||||||
|
self.session_ip_mode = "auto" # Default
|
||||||
|
self.ip_fallback = "0.0.0.0"
|
||||||
|
|
||||||
|
try:
|
||||||
|
if os.path.exists(config_path):
|
||||||
|
with open(config_path, 'r') as f:
|
||||||
|
config = json.load(f)
|
||||||
|
self.session_ip_mode = config.get("session_ip_mode", "auto")
|
||||||
|
self.ip_fallback = config.get("ip_fallback", "0.0.0.0")
|
||||||
|
logger.debug(f"IP-Konfiguration geladen: mode={self.session_ip_mode}, fallback={self.ip_fallback}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"Fehler beim Laden der IP-Konfiguration: {e}")
|
||||||
|
|
||||||
|
def _get_session_ip(self) -> str:
|
||||||
|
"""
|
||||||
|
Ermittelt die IP-Adresse für die Session basierend auf der Konfiguration.
|
||||||
|
|
||||||
|
TESTBETRIEB: Temporäre Lösung - wird durch Server-Ressourcenmanagement ersetzt
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Die IP-Adresse als String
|
||||||
|
"""
|
||||||
|
if self.session_ip_mode == "auto":
|
||||||
|
# TESTBETRIEB: Auto-Erkennung der öffentlichen IP
|
||||||
|
logger.info("TESTBETRIEB: Ermittle öffentliche IP-Adresse automatisch")
|
||||||
|
try:
|
||||||
|
response = requests.get("https://api.ipify.org?format=json", timeout=5)
|
||||||
|
if response.status_code == 200:
|
||||||
|
ip = response.json().get("ip")
|
||||||
|
logger.info(f"Öffentliche IP ermittelt: {ip}")
|
||||||
|
return ip
|
||||||
|
else:
|
||||||
|
logger.warning(f"IP-Ermittlung fehlgeschlagen: Status {response.status_code}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Fehler bei IP-Ermittlung: {e}")
|
||||||
|
|
||||||
|
# Fallback verwenden
|
||||||
|
logger.warning(f"Verwende Fallback-IP: {self.ip_fallback}")
|
||||||
|
return self.ip_fallback
|
||||||
|
|
||||||
|
elif self.session_ip_mode == "server_assigned":
|
||||||
|
# TODO: Implementierung für Server-zugewiesene IPs
|
||||||
|
logger.info("Server-assigned IP mode noch nicht implementiert, verwende Fallback")
|
||||||
|
return self.ip_fallback
|
||||||
|
|
||||||
|
elif self.session_ip_mode == "proxy":
|
||||||
|
# TODO: Proxy-IP verwenden wenn Proxy aktiv
|
||||||
|
logger.info("Proxy IP mode noch nicht implementiert, verwende Fallback")
|
||||||
|
return self.ip_fallback
|
||||||
|
|
||||||
|
else:
|
||||||
|
logger.warning(f"Unbekannter IP-Modus: {self.session_ip_mode}, verwende Fallback")
|
||||||
|
return self.ip_fallback
|
||||||
|
|
||||||
|
|
||||||
|
# Test-Funktion
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.DEBUG,
|
||||||
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||||
|
)
|
||||||
|
|
||||||
|
print("=== Session Manager Test ===\n")
|
||||||
|
|
||||||
|
# Session Manager erstellen
|
||||||
|
session_mgr = SessionManager()
|
||||||
|
|
||||||
|
# Session-Info anzeigen
|
||||||
|
print("Aktuelle Session-Info:")
|
||||||
|
info = session_mgr.get_session_info()
|
||||||
|
for key, value in info.items():
|
||||||
|
print(f" {key}: {value}")
|
||||||
|
|
||||||
|
# Versuche gespeicherte Session fortzusetzen
|
||||||
|
print("\nVersuche Session fortzusetzen...")
|
||||||
|
if session_mgr.resume_session():
|
||||||
|
print(" ✓ Session fortgesetzt")
|
||||||
|
else:
|
||||||
|
print(" ✗ Keine gültige Session gefunden")
|
||||||
|
|
||||||
|
print("\n=== Test abgeschlossen ===")
|
||||||
8
favicon.svg
Normale Datei
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 400 497" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<g id="svgg">
|
||||||
|
<path id="rechts" d="M212.575,238.576C212.984,240.67 223.048,241.002 270.154,240.533C349.694,239.739 344.481,239.31 346.236,243.942C347.823,248.13 347.264,250.927 338.778,272.292C333.041,286.737 321.692,301.671 304.569,327.057C262.704,389.124 258.243,380.556 257.465,379.844C256.548,379.007 256.695,378.153 256.7,377.409C256.827,359.293 254.573,273.452 254.549,270.937C254.525,268.422 254.116,268.891 229.156,268.982C211.282,269.047 211.756,268.669 211.925,271.847C211.971,272.701 212.094,316.69 212.2,369.6C212.306,422.51 212.487,468.568 212.604,469.063C213.014,470.81 224.336,462 224.6,462C224.864,462 237.107,453.265 241.4,450.384C242.5,449.646 244.343,448.313 245.496,447.421C246.648,446.53 248.865,444.9 250.421,443.8C251.978,442.7 255.169,440.115 257.513,438.055C259.857,435.996 262.771,433.605 263.988,432.743C267.489,430.261 269.974,428.216 270.637,427.269C270.973,426.789 271.767,426.127 272.4,425.8C273.034,425.472 273.862,424.68 274.24,424.04C274.618,423.399 275.574,422.512 276.364,422.067C277.741,421.292 287.002,412.973 290.077,409.749C290.89,408.897 293.68,406.009 296.277,403.331C303.179,396.216 308.766,389.886 310.684,387.009C311.611,385.619 312.782,384.149 313.286,383.741C313.791,383.334 314.523,382.55 314.913,382C315.304,381.45 316.113,380.353 316.711,379.562C317.31,378.771 318.552,377.132 319.471,375.919C320.389,374.706 321.709,373.103 322.403,372.357C324.097,370.534 325.597,368.32 327.217,365.252C327.957,363.85 329.057,362.338 329.66,361.892C330.264,361.446 331.622,359.655 332.679,357.912C333.735,356.168 335.453,353.696 336.496,352.417C337.539,351.139 338.935,348.947 339.599,347.546C341.424,343.695 344.598,338.004 345.689,336.626C347.172,334.754 348.692,331.944 348.986,330.528C349.132,329.828 349.51,329.041 349.826,328.779C350.142,328.517 350.4,328.069 350.4,327.784C350.4,327.499 351.048,326.045 351.84,324.552C352.632,323.059 353.784,320.479 354.401,318.819C355.017,317.159 356.416,314.072 357.509,311.96C358.602,309.848 359.894,306.968 360.38,305.56C360.866,304.152 361.593,302.46 361.995,301.8C362.398,301.14 362.941,299.795 363.203,298.812C363.464,297.828 363.931,296.663 364.239,296.223C364.548,295.782 364.8,295.078 364.8,294.658C364.8,293.56 367.089,287.051 368.23,284.904C368.764,283.901 369.201,282.793 369.202,282.44C369.204,282.088 369.46,281.312 369.771,280.715C370.082,280.118 370.552,278.588 370.814,277.315C371.076,276.042 371.715,273.867 372.234,272.482C372.753,271.097 373.442,268.667 373.765,267.082C374.657,262.705 375.074,261.226 376.185,258.503C376.746,257.13 377.395,254.61 377.628,252.903C377.861,251.196 386.4,207.294 386.4,202.415C386.4,200.114 384.943,198.138 382.973,197.769C382.197,197.623 390.698,196.027 262.4,197.136L256.297,196.493C254.923,195.188 254.409,193.392 254.634,190.691C255.021,186.052 255.075,102.153 254.699,90.2C254.256,76.132 254.359,75.232 256.566,73.785C257.5,73.174 257.724,73.166 258.9,73.706C259.615,74.035 343.437,105.997 345.2,108.641L346.2,110.142L346.246,163.984L347.17,164.968L348.095,165.953L367.317,165.835L386.539,165.718L387.711,164.406L388.883,163.095L388.646,155.847C388.515,151.861 388.304,143.29 388.176,136.8C387.97,126.347 389.116,102.223 388.883,92.984C388.587,81.212 385.041,79.623 381.162,77.313C378.036,75.451 212.403,10.83 212.49,12.505" style="fill:rgb(200,168,81);"/>
|
||||||
|
<path id="links" d="M31.8,72.797C19.193,77.854 16.869,77.149 16.354,86.093C16.177,89.171 13.694,109.47 13.373,112C11.292,128.389 11.075,175.356 12.999,192.8C13.326,195.77 15.755,217.626 17.524,225.4C17.975,227.38 21.242,245.556 21.798,247.6C23.196,252.741 27.444,269.357 28.368,273C29.454,277.277 33.845,288.636 34.632,290.326C35.42,292.017 39.017,301.259 39.364,301.931C39.973,303.107 41.279,306.405 42.799,310.6C43.879,313.58 46.904,319.091 47.546,320.62C48.78,323.561 51.339,328.992 51.965,330C52.17,330.33 53.466,332.67 54.845,335.2C56.223,337.73 65.855,353.259 67.765,356.052C72.504,362.981 75.544,366.754 76.46,368.119C78.119,370.593 79.488,372.185 85.821,379C87.66,380.98 89.758,383.356 90.483,384.279C92.003,386.218 92.035,386.23 93.151,385.3C94.267,384.37 94.041,384.013 94.036,382.593C94.015,376.905 94.025,351.182 94.025,351.182C94.062,315.081 94.745,313.16 93.752,308.626C92.302,301.997 88.001,300.043 80.439,284.793C71.474,266.714 65.169,255.803 62.016,248.485C61.011,246.153 59.289,240.91 61.521,240.882C65.215,240.836 143.575,240.107 144.382,240.673C145.808,241.671 146.494,243.516 146.346,245.959C146.058,250.736 146.217,438.282 146.511,439.663C146.825,441.137 153.946,447.096 162.193,452.924C177.223,463.547 187.111,469.578 187.956,468.458C189.091,466.954 188.058,10.288 188.006,12.482M146.001,134.292C145.999,164.821 146.043,190.718 146.099,191.84C146.336,196.617 147.019,196.45 127.622,196.354C106.312,196.249 58.054,196.89 58.054,196.89L57.06,195.896C55.315,194.152 55.678,132.49 55.766,126C56.004,108.467 56.656,110.707 66.745,106.586C70.345,105.116 134.261,79.128 135.708,78.566C146.998,74.183 145.972,74.295 146.055,76.768" style="fill:rgb(10,24,50);"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
Nachher Breite: | Höhe: | Größe: 5.3 KiB |
@@ -3,7 +3,17 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Legal Notice - IntelSight</title>
|
<title>Legal Notice - AegisSight</title>
|
||||||
|
|
||||||
|
<!-- Prevent search engine indexing -->
|
||||||
|
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
<link rel="apple-touch-icon" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<link rel="stylesheet" href="css/main.css">
|
||||||
<link rel="stylesheet" href="css/fonts.css">
|
<link rel="stylesheet" href="css/fonts.css">
|
||||||
<style>
|
<style>
|
||||||
@@ -77,14 +87,14 @@
|
|||||||
<div class="nav-container">
|
<div class="nav-container">
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
<img src="assets/images/logos/intelsight-name-light.svg" alt="IntelSight" class="logo-img">
|
<img src="assets/images/logos/Logo+Schrift_Rechts.svg" alt="AegisSight" class="logo-img">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav-menu">
|
<ul class="nav-menu">
|
||||||
<li><a href="index.html#home">Home</a></li>
|
<li><a href="index.html#home">Home</a></li>
|
||||||
<li><a href="index.html#about">About Us</a></li>
|
<li><a href="index.html#about">About Us</a></li>
|
||||||
<li><a href="index.html#products">Products & Solutions</a></li>
|
<li><a href="index.html#products">Products & Solutions</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de">Contact</a></li>
|
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="nav-extras">
|
<div class="nav-extras">
|
||||||
<button class="lang-toggle" data-lang="en" aria-label="Switch language">DE | EN</button>
|
<button class="lang-toggle" data-lang="en" aria-label="Switch language">DE | EN</button>
|
||||||
@@ -101,7 +111,7 @@
|
|||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
<h2>Company Information</h2>
|
<h2>Company Information</h2>
|
||||||
<p>
|
<p>
|
||||||
IntelSight UG (limited liability)<br>
|
AegisSight UG (limited liability)<br>
|
||||||
Gladbacher Strasse 3-5<br>
|
Gladbacher Strasse 3-5<br>
|
||||||
40764 Langenfeld<br>
|
40764 Langenfeld<br>
|
||||||
Germany
|
Germany
|
||||||
@@ -117,8 +127,8 @@
|
|||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
<h2>Contact</h2>
|
<h2>Contact</h2>
|
||||||
<p>
|
<p>
|
||||||
Email: info@intelsight.de<br>
|
Email: info@aegis-sight.de<br>
|
||||||
Website: intelsight.de
|
Website: aegis-sight.de
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -134,7 +144,7 @@
|
|||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
<h2>VAT</h2>
|
<h2>VAT</h2>
|
||||||
<p>VAT identification number according to §27 a of the German VAT Act:<br>
|
<p>VAT identification number according to §27 a of the German VAT Act:<br>
|
||||||
DE [Number]</p>
|
DE457846602</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
@@ -166,7 +176,7 @@
|
|||||||
<footer class="footer">
|
<footer class="footer">
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>IntelSight</h4>
|
<h4>AegisSight</h4>
|
||||||
<p>Sicherheit Made in Germany</p>
|
<p>Sicherheit Made in Germany</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
@@ -178,18 +188,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>Contact</h4>
|
<h4>Contact</h4>
|
||||||
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
|
<p>info@aegis-sight.de</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-bottom">
|
<div class="footer-bottom">
|
||||||
<p>© 2025 IntelSight UG. All rights reserved.</p>
|
<p>© 2025 AegisSight UG. All rights reserved.</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- JavaScript for legal pages -->
|
<!-- JavaScript for legal pages -->
|
||||||
<script src="js/legal-pages.js"></script>
|
<script src="js/legal-pages.js"></script>
|
||||||
|
|
||||||
<!-- IntelSight Analytics -->
|
<!-- AegisSight Analytics -->
|
||||||
<script async src="/insights/t.js"></script>
|
<script async src="/insights/t.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -3,7 +3,17 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Impressum - IntelSight</title>
|
<title>Impressum - AegisSight</title>
|
||||||
|
|
||||||
|
<!-- Prevent search engine indexing -->
|
||||||
|
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
<link rel="apple-touch-icon" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<link rel="stylesheet" href="css/main.css">
|
||||||
<link rel="stylesheet" href="css/fonts.css">
|
<link rel="stylesheet" href="css/fonts.css">
|
||||||
<link rel="stylesheet" href="css/mobile.css">
|
<link rel="stylesheet" href="css/mobile.css">
|
||||||
@@ -72,14 +82,14 @@
|
|||||||
<div class="nav-container">
|
<div class="nav-container">
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
<img src="assets/images/logos/intelsight-name-light.svg" alt="IntelSight" class="logo-img">
|
<img src="assets/images/logos/Logo+Schrift_Rechts.svg" alt="AegisSight" class="logo-img">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav-menu">
|
<ul class="nav-menu">
|
||||||
<li><a href="index.html#home">Startseite</a></li>
|
<li><a href="index.html#home">Startseite</a></li>
|
||||||
<li><a href="index.html#about">Über uns</a></li>
|
<li><a href="index.html#about">Über uns</a></li>
|
||||||
<li><a href="index.html#products">Produkte & Lösungen</a></li>
|
<li><a href="index.html#products">Produkte & Lösungen</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de">Kontakt</a></li>
|
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="nav-extras">
|
<div class="nav-extras">
|
||||||
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln">DE | EN</button>
|
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln">DE | EN</button>
|
||||||
@@ -95,7 +105,7 @@
|
|||||||
<div class="impressum-content">
|
<div class="impressum-content">
|
||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
<h2>Angaben gemäß § 5 TMG</h2>
|
<h2>Angaben gemäß § 5 TMG</h2>
|
||||||
<p><strong>IntelSight UG i. G. (haftungsbeschränkt)</strong></p>
|
<p><strong>AegisSight UG i. G. (haftungsbeschränkt)</strong></p>
|
||||||
<p>Gladbacher Strasse 3-5<br>
|
<p>Gladbacher Strasse 3-5<br>
|
||||||
40764 Langenfeld</p>
|
40764 Langenfeld</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -108,7 +118,7 @@
|
|||||||
|
|
||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
<h2>Kontakt</h2>
|
<h2>Kontakt</h2>
|
||||||
<p>E-Mail: info@intelsight.de</p>
|
<p>E-Mail: info@aegis-sight.de</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
@@ -120,7 +130,7 @@
|
|||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
<h2>Umsatzsteuer-ID</h2>
|
<h2>Umsatzsteuer-ID</h2>
|
||||||
<p>Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz:<br>
|
<p>Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz:<br>
|
||||||
DE [Nummer]</p>
|
DE457846602</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="impressum-section">
|
<div class="impressum-section">
|
||||||
@@ -151,7 +161,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>IntelSight UG (haftungsbeschränkt)</h4>
|
<h4>AegisSight UG (haftungsbeschränkt)</h4>
|
||||||
<p>Gladbacher Strasse 3-5</p>
|
<p>Gladbacher Strasse 3-5</p>
|
||||||
<p>40764 Langenfeld</p>
|
<p>40764 Langenfeld</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -161,7 +171,7 @@
|
|||||||
<li><a href="index.html#home">Startseite</a></li>
|
<li><a href="index.html#home">Startseite</a></li>
|
||||||
<li><a href="index.html#about">Über uns</a></li>
|
<li><a href="index.html#about">Über uns</a></li>
|
||||||
<li><a href="index.html#products">Produkte</a></li>
|
<li><a href="index.html#products">Produkte</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de">Kontakt</a></li>
|
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
@@ -173,17 +183,17 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4>Kontakt</h4>
|
<h4>Kontakt</h4>
|
||||||
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
|
<p>info@aegis-sight.de</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="copyright">© 2025 IntelSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.</p>
|
<p class="copyright">© <span class="current-year"></span> AegisSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- JavaScript for legal pages -->
|
<!-- JavaScript for legal pages -->
|
||||||
<script src="js/legal-pages.js"></script>
|
<script src="js/legal-pages.js"></script>
|
||||||
|
|
||||||
<!-- IntelSight Analytics -->
|
<!-- AegisSight Analytics -->
|
||||||
<script async src="/insights/t.js"></script>
|
<script async src="/insights/t.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
135
index.html
@@ -3,7 +3,17 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title data-translate="pageTitle">IntelSight - Sicherheit Made in Germany</title>
|
<title data-translate="pageTitle">AegisSight - Sicherheit Made in Germany</title>
|
||||||
|
|
||||||
|
<!-- Prevent search engine indexing -->
|
||||||
|
<meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noimageindex">
|
||||||
|
|
||||||
|
<!-- Favicon -->
|
||||||
|
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
<link rel="apple-touch-icon" href="assets/images/logos/AegisSightLogo_NavyGold.svg">
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<link rel="stylesheet" href="css/main.css">
|
||||||
<link rel="stylesheet" href="css/animations-enhanced.css">
|
<link rel="stylesheet" href="css/animations-enhanced.css">
|
||||||
<link rel="stylesheet" href="css/section-transitions.css">
|
<link rel="stylesheet" href="css/section-transitions.css">
|
||||||
@@ -21,13 +31,13 @@
|
|||||||
<nav class="navbar" role="navigation" aria-label="Hauptnavigation">
|
<nav class="navbar" role="navigation" aria-label="Hauptnavigation">
|
||||||
<div class="nav-container">
|
<div class="nav-container">
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<img src="assets/images/logos/intelsight-name-light.svg" alt="IntelSight" class="logo-img">
|
<img src="assets/images/logos/Logo+Schrift_Rechts.png" alt="AegisSight" class="logo-img">
|
||||||
</div>
|
</div>
|
||||||
<ul class="nav-menu">
|
<ul class="nav-menu">
|
||||||
<li><a href="#home" data-translate="navHome">Startseite</a></li>
|
<li><a href="#home" data-translate="navHome">Startseite</a></li>
|
||||||
<li><a href="#about" data-translate="navAbout">Über uns</a></li>
|
<li><a href="#about" data-translate="navAbout">Über uns</a></li>
|
||||||
<li><a href="#products" data-translate="navProducts">Produkte & Lösungen</a></li>
|
<li><a href="#products" data-translate="navProducts">Lösungen</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de" data-translate="navContact">Kontakt</a></li>
|
<li><a href="mailto:info@aegis-sight.de" data-translate="navContact">Kontakt</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="nav-extras">
|
<div class="nav-extras">
|
||||||
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln" data-translate="langSwitch">DE | EN</button>
|
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln" data-translate="langSwitch">DE | EN</button>
|
||||||
@@ -53,8 +63,8 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="#home" data-translate="navHome">Startseite</a></li>
|
<li><a href="#home" data-translate="navHome">Startseite</a></li>
|
||||||
<li><a href="#about" data-translate="navAbout">Über uns</a></li>
|
<li><a href="#about" data-translate="navAbout">Über uns</a></li>
|
||||||
<li><a href="#products" data-translate="navProducts">Produkte & Lösungen</a></li>
|
<li><a href="#products" data-translate="navProducts">Lösungen</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de" data-translate="navContact">Kontakt</a></li>
|
<li><a href="mailto:info@aegis-sight.de" data-translate="navContact">Kontakt</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -127,7 +137,7 @@
|
|||||||
</span>
|
</span>
|
||||||
<span data-translate="companyCardTitle1">Spezialist für Behördensoftware</span>
|
<span data-translate="companyCardTitle1">Spezialist für Behördensoftware</span>
|
||||||
</h4>
|
</h4>
|
||||||
<p data-translate="whoWeArePara1">IntelSight UG ist Ihr <strong>Spezialist für hochsichere, maßgeschneiderte IT-Lösungen</strong> aus Nordrhein-Westfalen. Wir entwickeln innovative Software speziell für staatliche Sicherheits- und Ermittlungsbehörden.</p>
|
<p data-translate="whoWeArePara1">AegisSight UG ist Ihr <strong>Spezialist für hochsichere, maßgeschneiderte IT-Lösungen</strong> aus Nordrhein-Westfalen. Wir entwickeln innovative Software speziell für staatliche Sicherheits- und Ermittlungsbehörden.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="company-card">
|
<div class="company-card">
|
||||||
<h4>
|
<h4>
|
||||||
@@ -214,7 +224,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Warum IntelSight -->
|
<!-- Warum AegisSight -->
|
||||||
<div class="about-panel" id="why-us">
|
<div class="about-panel" id="why-us">
|
||||||
<div class="why-grid">
|
<div class="why-grid">
|
||||||
<div class="why-card card-hover-lift">
|
<div class="why-card card-hover-lift">
|
||||||
@@ -265,104 +275,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="products-grid">
|
<div class="products-grid">
|
||||||
<!-- Product: IntelSight Professional Toolbox -->
|
|
||||||
<div class="product-card">
|
|
||||||
<div class="product-header">
|
|
||||||
<div class="product-icon-wrapper">
|
|
||||||
<div class="product-icon-bg"></div>
|
|
||||||
<img class="product-icon" src="assets/images/icons/cube.svg" alt="Toolbox">
|
|
||||||
</div>
|
|
||||||
<div class="product-title-wrapper">
|
|
||||||
<h3 class="product-title" data-translate="productToolboxTitle">Professional Toolbox</h3>
|
|
||||||
<p class="product-tagline">Professional OSINT Suite</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="product-body">
|
|
||||||
<p class="product-description" data-translate="productToolboxDesc">Eine leistungsstarke Desktop-Anwendung mit fünf essentiellen Tools für behördliche OSINT-Ermittler und Analysten. Modernes Design, intuitive Bedienung, professionelle Funktionen.</p>
|
|
||||||
<button class="product-learn-more expand-button" data-expanded="false" onclick="toggleTools(this)">
|
|
||||||
<span data-translate="expandDetails">Details anzeigen</span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!-- Tools Grid (Hidden by default, shown on expand) -->
|
|
||||||
<div class="tools-grid collapsed" id="toolsGrid">
|
|
||||||
<!-- Tool 1: Metadata Analyzer -->
|
|
||||||
<div class="tool-card">
|
|
||||||
<div class="tool-icon">
|
|
||||||
<img src="assets/images/icons/document.svg" alt="Document" width="48" height="48">
|
|
||||||
</div>
|
|
||||||
<h4 data-translate="tool1Title">Metadata Analyzer</h4>
|
|
||||||
<div class="tool-features">
|
|
||||||
<ul>
|
|
||||||
<li data-translate="tool1Feature1">Extrahiert versteckte Informationen (EXIF, GPS, Erstellungsdaten)</li>
|
|
||||||
<li data-translate="tool1Feature2">Forensische Analyse von Dokumenten & Bildern</li>
|
|
||||||
<li data-translate="tool1Feature3">Export als JSON</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tool 2: Screen Recorder -->
|
|
||||||
<div class="tool-card">
|
|
||||||
<div class="tool-icon">
|
|
||||||
<img src="assets/images/icons/video-camera.svg" alt="Video" width="48" height="48">
|
|
||||||
</div>
|
|
||||||
<h4 data-translate="tool2Title">Screen Recorder</h4>
|
|
||||||
<div class="tool-features">
|
|
||||||
<ul>
|
|
||||||
<li data-translate="tool2Feature1">Bildschirmaufnahme mit Audio (System & Mikrofon)</li>
|
|
||||||
<li data-translate="tool2Feature2">Bereichsauswahl oder Vollbild</li>
|
|
||||||
<li data-translate="tool2Feature3">Wählbare Qualitätsstufen</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tool 3: Video Crawler -->
|
|
||||||
<div class="tool-card">
|
|
||||||
<div class="tool-icon">
|
|
||||||
<img src="assets/images/icons/shield-play.svg" alt="Security" width="48" height="48">
|
|
||||||
</div>
|
|
||||||
<h4 data-translate="tool3Title">Video Crawler</h4>
|
|
||||||
<div class="tool-features">
|
|
||||||
<ul>
|
|
||||||
<li data-translate="tool3Feature1">Download von Videos aus 1000+ Plattformen</li>
|
|
||||||
<li data-translate="tool3Feature2">Automatischer Untertitel-Download</li>
|
|
||||||
<li data-translate="tool3Feature3">Qualitätsauswahl</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tool 4: Website Crawler -->
|
|
||||||
<div class="tool-card">
|
|
||||||
<div class="tool-icon">
|
|
||||||
<img src="assets/images/icons/globe.svg" alt="Global" width="48" height="48">
|
|
||||||
</div>
|
|
||||||
<h4 data-translate="tool4Title">Website Crawler</h4>
|
|
||||||
<div class="tool-features">
|
|
||||||
<ul>
|
|
||||||
<li data-translate="tool4Feature1">Archiviert Webseiten offline</li>
|
|
||||||
<li data-translate="tool4Feature2">Einstellbare Crawling-Tiefe</li>
|
|
||||||
<li data-translate="tool4Feature3">Erhält Originalstruktur inkl. CSS, JS & Medien</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tool 5: Multimedia Converter -->
|
|
||||||
<div class="tool-card">
|
|
||||||
<div class="tool-icon">
|
|
||||||
<img src="assets/images/icons/cube.svg" alt="Architecture" width="48" height="48">
|
|
||||||
</div>
|
|
||||||
<h4 data-translate="tool5Title">Multimedia Converter</h4>
|
|
||||||
<div class="tool-features">
|
|
||||||
<ul>
|
|
||||||
<li data-translate="tool5Feature1">Konvertierung von Bildern, Videos, Audio</li>
|
|
||||||
<li data-translate="tool5Feature2">Batch-Verarbeitung</li>
|
|
||||||
<li data-translate="tool5Feature3">Drag & Drop Unterstützung</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Product: AccountForger -->
|
<!-- Product: AccountForger -->
|
||||||
<div class="product-card">
|
<div class="product-card">
|
||||||
<div class="product-header">
|
<div class="product-header">
|
||||||
@@ -391,7 +303,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4 data-translate="footerCompanyTitle">IntelSight UG (haftungsbeschränkt)</h4>
|
<h4 data-translate="footerCompanyTitle">AegisSight UG (haftungsbeschränkt)</h4>
|
||||||
<p data-translate="footerCompanyAddress1">Gladbacher Strasse 3-5</p>
|
<p data-translate="footerCompanyAddress1">Gladbacher Strasse 3-5</p>
|
||||||
<p data-translate="footerCompanyAddress2">40764 Langenfeld</p>
|
<p data-translate="footerCompanyAddress2">40764 Langenfeld</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -400,8 +312,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li><a href="#home" data-translate="footerNavHome">Startseite</a></li>
|
<li><a href="#home" data-translate="footerNavHome">Startseite</a></li>
|
||||||
<li><a href="#about" data-translate="footerNavAbout">Über uns</a></li>
|
<li><a href="#about" data-translate="footerNavAbout">Über uns</a></li>
|
||||||
<li><a href="#products" data-translate="footerNavProducts">Produkte</a></li>
|
<li><a href="#products" data-translate="footerNavProducts">Lösungen</a></li>
|
||||||
<li><a href="mailto:info@intelsight.de" data-translate="footerNavContact">Kontakt</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
@@ -414,10 +325,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="footer-section">
|
<div class="footer-section">
|
||||||
<h4 data-translate="footerContactTitle">Kontakt</h4>
|
<h4 data-translate="footerContactTitle">Kontakt</h4>
|
||||||
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
|
<p>info@aegis-sight.de</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="copyright" data-translate="copyright">© 2025 IntelSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.</p>
|
<p class="copyright" data-translate="copyright">© {year} AegisSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
@@ -437,7 +348,7 @@
|
|||||||
<script src="js/main.js"></script>
|
<script src="js/main.js"></script>
|
||||||
<script src="js/mobile-nav.js"></script>
|
<script src="js/mobile-nav.js"></script>
|
||||||
|
|
||||||
<!-- IntelSight Analytics wird automatisch durch Cookie Consent geladen -->
|
<!-- AegisSight Analytics wird automatisch durch Cookie Consent geladen -->
|
||||||
<!-- <script async src="/insights/t.js"></script> ENTFERNT - wird nur bei Zustimmung geladen! -->
|
<!-- <script async src="/insights/t.js"></script> ENTFERNT - wird nur bei Zustimmung geladen! -->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Animation module for IntelSight website
|
* Animation module for AegisSight website
|
||||||
* Contains all animation logic and visual effects
|
* Contains all animation logic and visual effects
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* UI Components module for IntelSight website
|
* UI Components module for AegisSight website
|
||||||
* Contains all interactive UI component logic
|
* Contains all interactive UI component logic
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -228,7 +228,7 @@ const LoginModal = {
|
|||||||
</div>
|
</div>
|
||||||
<button type="submit" class="primary-button">${t('grantAccess')}</button>
|
<button type="submit" class="primary-button">${t('grantAccess')}</button>
|
||||||
</form>
|
</form>
|
||||||
<p class="auth-note">${t('noAccess')} <a href="mailto:info@intelsight.de">${t('contactUs')}</a></p>
|
<p class="auth-note">${t('noAccess')} <a href="mailto:info@aegis-sight.de">${t('contactUs')}</a></p>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Central configuration file for IntelSight website
|
* Central configuration file for AegisSight website
|
||||||
* Contains all constants, settings and selectors
|
* Contains all constants, settings and selectors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ const CONFIG = {
|
|||||||
I18N: {
|
I18N: {
|
||||||
DEFAULT_LANGUAGE: 'de',
|
DEFAULT_LANGUAGE: 'de',
|
||||||
SUPPORTED_LANGUAGES: ['de', 'en'],
|
SUPPORTED_LANGUAGES: ['de', 'en'],
|
||||||
STORAGE_KEY: 'intelsight_language'
|
STORAGE_KEY: 'aegissight_language'
|
||||||
},
|
},
|
||||||
|
|
||||||
// Intersection Observer Settings
|
// Intersection Observer Settings
|
||||||
|
|||||||
@@ -3,8 +3,20 @@
|
|||||||
* Only includes necessary functionality for language switching
|
* Only includes necessary functionality for language switching
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Set current year in footer
|
||||||
|
function setCurrentYear() {
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
const yearElements = document.querySelectorAll('.current-year');
|
||||||
|
yearElements.forEach(element => {
|
||||||
|
element.textContent = currentYear;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Simple language toggle for legal pages
|
// Simple language toggle for legal pages
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
// Set current year immediately
|
||||||
|
setCurrentYear();
|
||||||
|
|
||||||
// Get the language toggle button
|
// Get the language toggle button
|
||||||
const langToggle = document.querySelector('.lang-toggle');
|
const langToggle = document.querySelector('.lang-toggle');
|
||||||
|
|
||||||
@@ -18,7 +30,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
|
|
||||||
// Store language preference
|
// Store language preference
|
||||||
if (typeof(Storage) !== 'undefined') {
|
if (typeof(Storage) !== 'undefined') {
|
||||||
localStorage.setItem('intelsight-language', newLang);
|
localStorage.setItem('aegissight_language', newLang);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get current page name
|
// Get current page name
|
||||||
|
|||||||
36
js/main.js
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Main application entry point for IntelSight website
|
* Main application entry point for AegisSight website
|
||||||
* Initializes all modules and coordinates application startup
|
* Initializes all modules and coordinates application startup
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -63,11 +63,11 @@ const App = {
|
|||||||
* Start the application after DOM is ready
|
* Start the application after DOM is ready
|
||||||
*/
|
*/
|
||||||
start() {
|
start() {
|
||||||
console.log('IntelSight Website Initializing...');
|
console.log('AegisSight Website Initializing...');
|
||||||
|
|
||||||
// Initialize modules in correct order
|
// Initialize modules in correct order
|
||||||
try {
|
try {
|
||||||
// 1. Initialize translations first (needed by components)
|
// 1. Initialize translations first (includes year replacement)
|
||||||
initTranslations();
|
initTranslations();
|
||||||
console.log('✓ Translations initialized');
|
console.log('✓ Translations initialized');
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ const App = {
|
|||||||
// 5. Setup performance monitoring
|
// 5. Setup performance monitoring
|
||||||
this.setupPerformanceMonitoring();
|
this.setupPerformanceMonitoring();
|
||||||
|
|
||||||
console.log('IntelSight Website Ready!');
|
console.log('AegisSight Website Ready!');
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to initialize application:', error);
|
console.error('Failed to initialize application:', error);
|
||||||
@@ -131,6 +131,34 @@ const App = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set current year in footer and update translations dynamically
|
||||||
|
*/
|
||||||
|
setCurrentYear() {
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
|
||||||
|
// Set current year in main footer span element
|
||||||
|
const yearElement = document.getElementById('currentYear');
|
||||||
|
if (yearElement) {
|
||||||
|
yearElement.textContent = currentYear;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set current year in legal pages footer spans
|
||||||
|
const legalYearElements = document.querySelectorAll('.current-year');
|
||||||
|
legalYearElements.forEach(element => {
|
||||||
|
element.textContent = currentYear;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update copyright translation with current year
|
||||||
|
if (window.translations) {
|
||||||
|
Object.keys(window.translations).forEach(lang => {
|
||||||
|
if (window.translations[lang].copyright) {
|
||||||
|
window.translations[lang].copyright = window.translations[lang].copyright.replace('{year}', currentYear);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get first paint time if available
|
* Get first paint time if available
|
||||||
* @returns {number|null} First paint time in milliseconds
|
* @returns {number|null} First paint time in milliseconds
|
||||||
|
|||||||
@@ -6,6 +6,10 @@
|
|||||||
(function() {
|
(function() {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
// TEMPORARILY DISABLED FOR DEVELOPMENT - 2026-01-08
|
||||||
|
console.log('⚠️ Protection disabled for development');
|
||||||
|
return;
|
||||||
|
|
||||||
// Check if user is on a mobile device
|
// Check if user is on a mobile device
|
||||||
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ||
|
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ||
|
||||||
('ontouchstart' in window) ||
|
('ontouchstart' in window) ||
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Translation system for IntelSight website
|
* Translation system for AegisSight website
|
||||||
* Supports German (de) and English (en)
|
* Supports German (de) and English (en)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -7,13 +7,13 @@
|
|||||||
const translations = {
|
const translations = {
|
||||||
de: {
|
de: {
|
||||||
// Page meta
|
// Page meta
|
||||||
pageTitle: 'IntelSight - Sicherheit Made in Germany',
|
pageTitle: 'AegisSight - Sicherheit Made in Germany',
|
||||||
|
|
||||||
// Navigation
|
// Navigation
|
||||||
skipNav: 'Zum Hauptinhalt springen',
|
skipNav: 'Zum Hauptinhalt springen',
|
||||||
navHome: 'Startseite',
|
navHome: 'Startseite',
|
||||||
navAbout: 'Über uns',
|
navAbout: 'Über uns',
|
||||||
navProducts: 'Produkte & Lösungen',
|
navProducts: 'Lösungen',
|
||||||
navContact: 'Kontakt',
|
navContact: 'Kontakt',
|
||||||
langSwitch: 'DE | EN',
|
langSwitch: 'DE | EN',
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ const translations = {
|
|||||||
whoWeAreTitle: 'Unternehmen',
|
whoWeAreTitle: 'Unternehmen',
|
||||||
companyCardTitle1: 'Spezialist für Behördensoftware',
|
companyCardTitle1: 'Spezialist für Behördensoftware',
|
||||||
companyCardTitle2: 'Unser Ansatz',
|
companyCardTitle2: 'Unser Ansatz',
|
||||||
whoWeArePara1: 'IntelSight UG ist Ihr <strong>Spezialist für hochsichere, maßgeschneiderte IT-Lösungen</strong> aus Nordrhein-Westfalen. Wir entwickeln innovative Software speziell für staatliche Sicherheits- und Ermittlungsbehörden.',
|
whoWeArePara1: 'AegisSight UG ist Ihr <strong>Spezialist für hochsichere, maßgeschneiderte IT-Lösungen</strong> aus Nordrhein-Westfalen. Wir entwickeln innovative Software speziell für staatliche Sicherheits- und Ermittlungsbehörden.',
|
||||||
whoWeArePara2: 'Unser Ansatz vereint modernste Technologie mit einem tiefen Verständnis für die besonderen Anforderungen von Behörden. Dabei steht die Balance zwischen Sicherheit, Effizienz und rechtskonformer Umsetzung im Mittelpunkt unserer Arbeit.',
|
whoWeArePara2: 'Unser Ansatz vereint modernste Technologie mit einem tiefen Verständnis für die besonderen Anforderungen von Behörden. Dabei steht die Balance zwischen Sicherheit, Effizienz und rechtskonformer Umsetzung im Mittelpunkt unserer Arbeit.',
|
||||||
locationBadge: 'Nordrhein-Westfalen, Deutschland',
|
locationBadge: 'Nordrhein-Westfalen, Deutschland',
|
||||||
nrwLabel: 'Nordrhein-Westfalen',
|
nrwLabel: 'Nordrhein-Westfalen',
|
||||||
@@ -67,7 +67,7 @@ const translations = {
|
|||||||
comp3Desc: 'Kontinuierliche Sicherheitsupdates und zuverlässige Wartung über den gesamten Lebenszyklus',
|
comp3Desc: 'Kontinuierliche Sicherheitsupdates und zuverlässige Wartung über den gesamten Lebenszyklus',
|
||||||
|
|
||||||
// Why Us
|
// Why Us
|
||||||
whyUsTitle: 'Warum IntelSight UG?',
|
whyUsTitle: 'Warum AegisSight UG?',
|
||||||
why1Title: 'Enge Zusammenarbeit',
|
why1Title: 'Enge Zusammenarbeit',
|
||||||
why1Desc: 'Wir arbeiten Hand in Hand mit unseren Kunden für maßgeschneiderte Lösungen',
|
why1Desc: 'Wir arbeiten Hand in Hand mit unseren Kunden für maßgeschneiderte Lösungen',
|
||||||
why2Title: 'Made in Germany',
|
why2Title: 'Made in Germany',
|
||||||
@@ -78,7 +78,7 @@ const translations = {
|
|||||||
why4Desc: 'Fokus auf Sicherheit, Professionalität & zukunftssichere Lösungen',
|
why4Desc: 'Fokus auf Sicherheit, Professionalität & zukunftssichere Lösungen',
|
||||||
|
|
||||||
// Products Section
|
// Products Section
|
||||||
productsTitle: 'PRODUKTE & LÖSUNGEN',
|
productsTitle: 'LÖSUNGEN',
|
||||||
productsSubtitle: 'Professionelle Werkzeuge für moderne Ermittlungsarbeit',
|
productsSubtitle: 'Professionelle Werkzeuge für moderne Ermittlungsarbeit',
|
||||||
|
|
||||||
// Professional Toolbox
|
// Professional Toolbox
|
||||||
@@ -120,23 +120,21 @@ const translations = {
|
|||||||
loginForAccess: 'Anmelden für Zugriff',
|
loginForAccess: 'Anmelden für Zugriff',
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
footerCompanyTitle: 'IntelSight UG (haftungsbeschränkt)',
|
footerCompanyTitle: 'AegisSight UG (haftungsbeschränkt)',
|
||||||
footerCompanyAddress1: 'Gladbacher Strasse 3-5',
|
footerCompanyAddress1: 'Gladbacher Strasse 3-5',
|
||||||
footerCompanyAddress2: '40764 Langenfeld',
|
footerCompanyAddress2: '40764 Langenfeld',
|
||||||
footerNavTitle: 'Navigation',
|
footerNavTitle: 'Navigation',
|
||||||
footerNavHome: 'Startseite',
|
footerNavHome: 'Startseite',
|
||||||
footerNavAbout: 'Über uns',
|
footerNavAbout: 'Über uns',
|
||||||
footerNavProducts: 'Produkte',
|
footerNavProducts: 'Lösungen',
|
||||||
footerNavContact: 'Kontakt',
|
|
||||||
|
|
||||||
footerLegalTitle: 'Rechtliches',
|
footerLegalTitle: 'Rechtliches',
|
||||||
footerImprint: 'Impressum',
|
footerImprint: 'Impressum',
|
||||||
footerPrivacy: 'Datenschutz',
|
footerPrivacy: 'Datenschutz',
|
||||||
footerCookies: 'Cookie-Einstellungen',
|
footerCookies: 'Cookie-Einstellungen',
|
||||||
footerTerms: 'AGB',
|
|
||||||
|
|
||||||
footerContactTitle: 'Kontakt',
|
footerContactTitle: 'Kontakt',
|
||||||
copyright: '© 2025 IntelSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.',
|
copyright: '© {year} AegisSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.',
|
||||||
|
|
||||||
// Modal texts
|
// Modal texts
|
||||||
authRequired: 'Authentifizierung erforderlich',
|
authRequired: 'Authentifizierung erforderlich',
|
||||||
@@ -154,13 +152,13 @@ const translations = {
|
|||||||
|
|
||||||
en: {
|
en: {
|
||||||
// Page meta
|
// Page meta
|
||||||
pageTitle: 'IntelSight - Sicherheit Made in Germany',
|
pageTitle: 'AegisSight - Sicherheit Made in Germany',
|
||||||
|
|
||||||
// Navigation
|
// Navigation
|
||||||
skipNav: 'Skip to main content',
|
skipNav: 'Skip to main content',
|
||||||
navHome: 'Home',
|
navHome: 'Home',
|
||||||
navAbout: 'About Us',
|
navAbout: 'About Us',
|
||||||
navProducts: 'Products & Solutions',
|
navProducts: 'Solutions',
|
||||||
navContact: 'Contact',
|
navContact: 'Contact',
|
||||||
langSwitch: 'EN | DE',
|
langSwitch: 'EN | DE',
|
||||||
|
|
||||||
@@ -187,7 +185,7 @@ const translations = {
|
|||||||
whoWeAreTitle: 'Company',
|
whoWeAreTitle: 'Company',
|
||||||
companyCardTitle1: 'Government Software Specialist',
|
companyCardTitle1: 'Government Software Specialist',
|
||||||
companyCardTitle2: 'Our Approach',
|
companyCardTitle2: 'Our Approach',
|
||||||
whoWeArePara1: 'IntelSight UG is your <strong>specialist for highly secure, customized IT solutions</strong> from North Rhine-Westphalia. We develop innovative software specifically for government security and law enforcement agencies.',
|
whoWeArePara1: 'AegisSight UG is your <strong>specialist for highly secure, customized IT solutions</strong> from North Rhine-Westphalia. We develop innovative software specifically for government security and law enforcement agencies.',
|
||||||
whoWeArePara2: 'Our approach combines cutting-edge technology with a deep understanding of the special requirements of government agencies. The balance between security, efficiency and legally compliant implementation is at the center of our work.',
|
whoWeArePara2: 'Our approach combines cutting-edge technology with a deep understanding of the special requirements of government agencies. The balance between security, efficiency and legally compliant implementation is at the center of our work.',
|
||||||
locationBadge: 'North Rhine-Westphalia, Germany',
|
locationBadge: 'North Rhine-Westphalia, Germany',
|
||||||
nrwLabel: 'North Rhine-Westphalia',
|
nrwLabel: 'North Rhine-Westphalia',
|
||||||
@@ -214,7 +212,7 @@ const translations = {
|
|||||||
comp3Desc: 'Continuous security updates and reliable maintenance throughout the entire lifecycle',
|
comp3Desc: 'Continuous security updates and reliable maintenance throughout the entire lifecycle',
|
||||||
|
|
||||||
// Why Us
|
// Why Us
|
||||||
whyUsTitle: 'Why IntelSight UG?',
|
whyUsTitle: 'Why AegisSight UG?',
|
||||||
why1Title: 'Close Collaboration',
|
why1Title: 'Close Collaboration',
|
||||||
why1Desc: 'We work hand in hand with our customers for customized solutions',
|
why1Desc: 'We work hand in hand with our customers for customized solutions',
|
||||||
why2Title: 'Made in Germany',
|
why2Title: 'Made in Germany',
|
||||||
@@ -225,7 +223,7 @@ const translations = {
|
|||||||
why4Desc: 'Focus on security, professionalism & future-proof solutions',
|
why4Desc: 'Focus on security, professionalism & future-proof solutions',
|
||||||
|
|
||||||
// Products Section
|
// Products Section
|
||||||
productsTitle: 'Products & Solutions',
|
productsTitle: 'Solutions',
|
||||||
productsSubtitle: 'Professional Tools for Modern Investigation Work',
|
productsSubtitle: 'Professional Tools for Modern Investigation Work',
|
||||||
|
|
||||||
// Professional Toolbox
|
// Professional Toolbox
|
||||||
@@ -267,23 +265,21 @@ const translations = {
|
|||||||
loginForAccess: 'Login for Access',
|
loginForAccess: 'Login for Access',
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
footerCompanyTitle: 'IntelSight UG (haftungsbeschränkt)',
|
footerCompanyTitle: 'AegisSight UG (haftungsbeschränkt)',
|
||||||
footerCompanyAddress1: 'Gladbacher Strasse 3-5',
|
footerCompanyAddress1: 'Gladbacher Strasse 3-5',
|
||||||
footerCompanyAddress2: '40764 Langenfeld',
|
footerCompanyAddress2: '40764 Langenfeld',
|
||||||
footerNavTitle: 'Navigation',
|
footerNavTitle: 'Navigation',
|
||||||
footerNavHome: 'Home',
|
footerNavHome: 'Home',
|
||||||
footerNavAbout: 'About Us',
|
footerNavAbout: 'About Us',
|
||||||
footerNavProducts: 'Products',
|
footerNavProducts: 'Solutions',
|
||||||
footerNavContact: 'Contact',
|
|
||||||
|
|
||||||
footerLegalTitle: 'Legal',
|
footerLegalTitle: 'Legal',
|
||||||
footerImprint: 'Imprint',
|
footerImprint: 'Imprint',
|
||||||
footerPrivacy: 'Privacy Policy',
|
footerPrivacy: 'Privacy Policy',
|
||||||
footerCookies: 'Cookie Settings',
|
footerCookies: 'Cookie Settings',
|
||||||
footerTerms: 'Terms & Conditions',
|
|
||||||
|
|
||||||
footerContactTitle: 'Contact',
|
footerContactTitle: 'Contact',
|
||||||
copyright: '© 2025 IntelSight UG (haftungsbeschränkt). All rights reserved.',
|
copyright: '© {year} AegisSight UG (haftungsbeschränkt). All rights reserved.',
|
||||||
|
|
||||||
// Modal texts
|
// Modal texts
|
||||||
authRequired: 'Authentication Required',
|
authRequired: 'Authentication Required',
|
||||||
@@ -330,6 +326,11 @@ function switchLanguage(language) {
|
|||||||
currentLanguage = language;
|
currentLanguage = language;
|
||||||
localStorage.setItem(CONFIG.I18N.STORAGE_KEY, language);
|
localStorage.setItem(CONFIG.I18N.STORAGE_KEY, language);
|
||||||
applyTranslations(language);
|
applyTranslations(language);
|
||||||
|
|
||||||
|
// Update cookie consent language
|
||||||
|
if (typeof CookieConsent !== 'undefined' && CookieConsent.setLanguage) {
|
||||||
|
CookieConsent.setLanguage(language);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -355,11 +356,19 @@ function applyTranslations(language) {
|
|||||||
const key = element.getAttribute(DATA_ATTRS.TRANSLATE);
|
const key = element.getAttribute(DATA_ATTRS.TRANSLATE);
|
||||||
|
|
||||||
if (t[key]) {
|
if (t[key]) {
|
||||||
|
let content = t[key];
|
||||||
|
|
||||||
|
// Replace {year} placeholder with current year
|
||||||
|
if (content.includes('{year}')) {
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
content = content.replace('{year}', currentYear);
|
||||||
|
}
|
||||||
|
|
||||||
// Check if content contains HTML tags
|
// Check if content contains HTML tags
|
||||||
if (t[key].includes('<strong>') || t[key].includes('<em>')) {
|
if (content.includes('<strong>') || content.includes('<em>')) {
|
||||||
element.innerHTML = t[key];
|
element.innerHTML = content;
|
||||||
} else {
|
} else {
|
||||||
element.textContent = t[key];
|
element.textContent = content;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# robots.txt for IntelSight UG
|
# robots.txt for AegisSight UG
|
||||||
# Block ALL web crawlers and bots from the entire site
|
# Block ALL web crawlers and bots from the entire site
|
||||||
|
|
||||||
# Block all bots
|
# Block all bots
|
||||||
|
|||||||
689
script.js
@@ -1,689 +0,0 @@
|
|||||||
// Particle Canvas Animation
|
|
||||||
const canvas = document.getElementById('particleCanvas');
|
|
||||||
const ctx = canvas.getContext('2d');
|
|
||||||
|
|
||||||
canvas.width = window.innerWidth;
|
|
||||||
canvas.height = window.innerHeight;
|
|
||||||
|
|
||||||
const particles = [];
|
|
||||||
const particleCount = 100;
|
|
||||||
|
|
||||||
class Particle {
|
|
||||||
constructor() {
|
|
||||||
this.x = Math.random() * canvas.width;
|
|
||||||
this.y = Math.random() * canvas.height;
|
|
||||||
this.size = Math.random() * 3 + 1;
|
|
||||||
this.speedX = Math.random() * 3 - 1.5;
|
|
||||||
this.speedY = Math.random() * 3 - 1.5;
|
|
||||||
this.opacity = Math.random() * 0.5 + 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
update() {
|
|
||||||
this.x += this.speedX;
|
|
||||||
this.y += this.speedY;
|
|
||||||
|
|
||||||
if (this.x > canvas.width) this.x = 0;
|
|
||||||
else if (this.x < 0) this.x = canvas.width;
|
|
||||||
|
|
||||||
if (this.y > canvas.height) this.y = 0;
|
|
||||||
else if (this.y < 0) this.y = canvas.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
draw() {
|
|
||||||
ctx.fillStyle = `rgba(0, 212, 255, ${this.opacity})`;
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
|
|
||||||
ctx.fill();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
|
||||||
for (let i = 0; i < particleCount; i++) {
|
|
||||||
particles.push(new Particle());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function animate() {
|
|
||||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
||||||
|
|
||||||
for (let i = 0; i < particles.length; i++) {
|
|
||||||
particles[i].update();
|
|
||||||
particles[i].draw();
|
|
||||||
}
|
|
||||||
|
|
||||||
connectParticles();
|
|
||||||
requestAnimationFrame(animate);
|
|
||||||
}
|
|
||||||
|
|
||||||
function connectParticles() {
|
|
||||||
for (let a = 0; a < particles.length; a++) {
|
|
||||||
for (let b = a; b < particles.length; b++) {
|
|
||||||
const distance = Math.sqrt(
|
|
||||||
Math.pow(particles[a].x - particles[b].x, 2) +
|
|
||||||
Math.pow(particles[a].y - particles[b].y, 2)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (distance < 100) {
|
|
||||||
ctx.strokeStyle = `rgba(0, 212, 255, ${0.2 * (1 - distance / 100)})`;
|
|
||||||
ctx.lineWidth = 1;
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.moveTo(particles[a].x, particles[a].y);
|
|
||||||
ctx.lineTo(particles[b].x, particles[b].y);
|
|
||||||
ctx.stroke();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init();
|
|
||||||
animate();
|
|
||||||
|
|
||||||
// Resize canvas
|
|
||||||
window.addEventListener('resize', () => {
|
|
||||||
canvas.width = window.innerWidth;
|
|
||||||
canvas.height = window.innerHeight;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Navbar scroll effect - DEAKTIVIERT
|
|
||||||
// const navbar = document.querySelector('.navbar');
|
|
||||||
// window.addEventListener('scroll', () => {
|
|
||||||
// if (window.scrollY > 50) {
|
|
||||||
// navbar.classList.add('scrolled');
|
|
||||||
// } else {
|
|
||||||
// navbar.classList.remove('scrolled');
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
// Smooth scrolling
|
|
||||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
||||||
anchor.addEventListener('click', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
const target = document.querySelector(this.getAttribute('href'));
|
|
||||||
if (target) {
|
|
||||||
target.scrollIntoView({
|
|
||||||
behavior: 'smooth',
|
|
||||||
block: 'start'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Interactive Icon Animation
|
|
||||||
const icon = document.getElementById('interactiveIcon');
|
|
||||||
if (icon) {
|
|
||||||
let mouseX = 0;
|
|
||||||
let mouseY = 0;
|
|
||||||
|
|
||||||
document.addEventListener('mousemove', (e) => {
|
|
||||||
const rect = icon.getBoundingClientRect();
|
|
||||||
const centerX = rect.left + rect.width / 2;
|
|
||||||
const centerY = rect.top + rect.height / 2;
|
|
||||||
|
|
||||||
mouseX = (e.clientX - centerX) / 20;
|
|
||||||
mouseY = (e.clientY - centerY) / 20;
|
|
||||||
|
|
||||||
icon.style.transform = `perspective(1000px) rotateY(${mouseX}deg) rotateX(${-mouseY}deg)`;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Trust Indicators Counter Animation
|
|
||||||
const counters = document.querySelectorAll('.indicator-value');
|
|
||||||
const speed = 200;
|
|
||||||
|
|
||||||
const animateCounter = (counter) => {
|
|
||||||
const target = +counter.getAttribute('data-target');
|
|
||||||
const increment = target / speed;
|
|
||||||
|
|
||||||
const updateCounter = () => {
|
|
||||||
const current = +counter.innerText.replace('%', '').replace('+', '').replace('/7', '');
|
|
||||||
|
|
||||||
if (current < target) {
|
|
||||||
counter.innerText = Math.ceil(current + increment);
|
|
||||||
setTimeout(updateCounter, 10);
|
|
||||||
} else {
|
|
||||||
if (counter.getAttribute('data-target') === '99.9') {
|
|
||||||
counter.innerText = target + '%';
|
|
||||||
} else if (counter.getAttribute('data-target') === '500') {
|
|
||||||
counter.innerText = target + '+';
|
|
||||||
} else if (counter.getAttribute('data-target') === '24') {
|
|
||||||
counter.innerText = target + '/7';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
updateCounter();
|
|
||||||
};
|
|
||||||
|
|
||||||
// Intersection Observer for animations
|
|
||||||
const observerOptions = {
|
|
||||||
threshold: 0.3,
|
|
||||||
rootMargin: '0px'
|
|
||||||
};
|
|
||||||
|
|
||||||
const observer = new IntersectionObserver((entries) => {
|
|
||||||
entries.forEach(entry => {
|
|
||||||
if (entry.isIntersecting) {
|
|
||||||
// Animate counters
|
|
||||||
if (entry.target.classList.contains('trust-indicators')) {
|
|
||||||
counters.forEach(counter => animateCounter(counter));
|
|
||||||
observer.unobserve(entry.target);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Animate timeline items with new effect
|
|
||||||
if (entry.target.classList.contains('timeline')) {
|
|
||||||
const items = entry.target.querySelectorAll('.timeline-item');
|
|
||||||
items.forEach((item, index) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
item.classList.add('visible');
|
|
||||||
}, index * 300);
|
|
||||||
});
|
|
||||||
observer.unobserve(entry.target);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Animate feature nodes
|
|
||||||
if (entry.target.classList.contains('feature-nodes')) {
|
|
||||||
const nodes = entry.target.querySelectorAll('.node');
|
|
||||||
nodes.forEach((node, index) => {
|
|
||||||
setTimeout(() => {
|
|
||||||
node.style.opacity = '1';
|
|
||||||
node.style.transform = 'translateY(0)';
|
|
||||||
}, index * 150);
|
|
||||||
});
|
|
||||||
observer.unobserve(entry.target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, observerOptions);
|
|
||||||
|
|
||||||
// Observe elements
|
|
||||||
document.querySelector('.trust-indicators').style.opacity = '0';
|
|
||||||
observer.observe(document.querySelector('.trust-indicators'));
|
|
||||||
observer.observe(document.querySelector('.timeline'));
|
|
||||||
|
|
||||||
// Set initial states for feature nodes
|
|
||||||
document.querySelectorAll('.node').forEach(node => {
|
|
||||||
node.style.opacity = '0';
|
|
||||||
node.style.transform = 'translateY(30px)';
|
|
||||||
node.style.transition = 'all 0.6s ease';
|
|
||||||
});
|
|
||||||
observer.observe(document.querySelector('.feature-nodes'));
|
|
||||||
|
|
||||||
// Language Toggle
|
|
||||||
const langToggle = document.querySelector('.lang-toggle');
|
|
||||||
const translations = {
|
|
||||||
de: {
|
|
||||||
features: 'Funktionen',
|
|
||||||
security: 'Sicherheit',
|
|
||||||
about: 'Über uns',
|
|
||||||
contact: 'Kontakt',
|
|
||||||
requestDemo: 'Demo anfordern',
|
|
||||||
heroTitle: 'SICHERHEIT MADE IN GERMANY',
|
|
||||||
heroText: 'Fortschrittliche Software für moderne Strafverfolgung',
|
|
||||||
discoverMore: 'Entdecken Sie mehr',
|
|
||||||
liveDemo: 'Live-Demo',
|
|
||||||
availability: 'Verfügbarkeit',
|
|
||||||
trustedBy: 'Behörden vertrauen uns',
|
|
||||||
support: 'Support',
|
|
||||||
digitalBeat: 'Der Digitale Takt',
|
|
||||||
dayWithIntelSight: 'Ein Tag mit IntelSight',
|
|
||||||
shiftStart: 'Schichtbeginn',
|
|
||||||
shiftStartDesc: 'Automatische Zusammenfassung der Nacht-Ereignisse',
|
|
||||||
realTimeAnalysis: 'Echtzeit-Analyse',
|
|
||||||
realTimeAnalysisDesc: 'KI-gestützte Mustererkennung in laufenden Fällen',
|
|
||||||
preventiveSecurity: 'Präventive Sicherheit',
|
|
||||||
preventiveSecurityDesc: 'Vorhersage-Algorithmen identifizieren Risikobereiche',
|
|
||||||
dailyReport: 'Tagesbericht',
|
|
||||||
dailyReportDesc: 'Automatisierte Dokumentation und Übergabe',
|
|
||||||
intelligenceViz: 'Intelligenz visualisiert',
|
|
||||||
encryption: 'Ende-zu-Ende Verschlüsselung',
|
|
||||||
encryptionDesc: 'Militärgrade Sicherheit für sensible Daten',
|
|
||||||
aiAnalysis: 'KI-Analyse',
|
|
||||||
aiAnalysisDesc: 'Mustererkennung in Echtzeit',
|
|
||||||
integration: 'Nahtlose Integration',
|
|
||||||
integrationDesc: 'Verbindung zu bestehenden Systemen',
|
|
||||||
compliance: '100% DSGVO-konform',
|
|
||||||
complianceDesc: 'Entwickelt nach deutschem Datenschutzrecht',
|
|
||||||
germanEngineering: 'Deutsche Ingenieurskunst',
|
|
||||||
speed: 'Geschwindigkeit',
|
|
||||||
speedDesc: 'Millisekunden-Reaktionszeit bei kritischen Alarmen',
|
|
||||||
precision: 'Präzision',
|
|
||||||
precisionDesc: '99.97% Genauigkeit bei der Datenanalyse',
|
|
||||||
reliability: 'Zuverlässigkeit',
|
|
||||||
reliabilityDesc: 'Ausfallsichere Redundanz-Systeme',
|
|
||||||
commandCenter: 'Kommandozentrale',
|
|
||||||
overview: 'Übersicht',
|
|
||||||
analysis: 'Analyse',
|
|
||||||
reports: 'Berichte',
|
|
||||||
threatLevel: 'Bedrohungsstufe',
|
|
||||||
low: 'NIEDRIG',
|
|
||||||
activeCases: 'Aktive Fälle',
|
|
||||||
responseTime: 'Ø Reaktionszeit',
|
|
||||||
deploymentMap: 'Einsatzkarte',
|
|
||||||
ctaTitle: 'Bereit für die Zukunft der Strafverfolgung?',
|
|
||||||
ctaSubtitle: 'Erleben Sie IntelSight in Aktion',
|
|
||||||
scheduleDemo: 'Demo vereinbaren',
|
|
||||||
getInTouch: 'Kontakt aufnehmen',
|
|
||||||
legal: 'Rechtliches',
|
|
||||||
imprint: 'Impressum',
|
|
||||||
privacy: 'Datenschutz',
|
|
||||||
terms: 'AGB',
|
|
||||||
contact: 'Kontakt',
|
|
||||||
allRights: 'Alle Rechte vorbehalten.'
|
|
||||||
},
|
|
||||||
en: {
|
|
||||||
features: 'Features',
|
|
||||||
security: 'Security',
|
|
||||||
about: 'About',
|
|
||||||
contact: 'Contact',
|
|
||||||
requestDemo: 'Request Demo',
|
|
||||||
heroTitle: 'SECURITY MADE IN GERMANY',
|
|
||||||
heroText: 'Advanced Software for Modern Law Enforcement',
|
|
||||||
discoverMore: 'Discover More',
|
|
||||||
liveDemo: 'Live Demo',
|
|
||||||
availability: 'Availability',
|
|
||||||
trustedBy: 'Authorities trust us',
|
|
||||||
support: 'Support',
|
|
||||||
digitalBeat: 'The Digital Beat',
|
|
||||||
dayWithIntelSight: 'A Day with IntelSight',
|
|
||||||
shiftStart: 'Shift Start',
|
|
||||||
shiftStartDesc: 'Automatic summary of night events',
|
|
||||||
realTimeAnalysis: 'Real-time Analysis',
|
|
||||||
realTimeAnalysisDesc: 'AI-powered pattern recognition in ongoing cases',
|
|
||||||
preventiveSecurity: 'Preventive Security',
|
|
||||||
preventiveSecurityDesc: 'Predictive algorithms identify risk areas',
|
|
||||||
dailyReport: 'Daily Report',
|
|
||||||
dailyReportDesc: 'Automated documentation and handover',
|
|
||||||
intelligenceViz: 'Intelligence Visualized',
|
|
||||||
encryption: 'End-to-End Encryption',
|
|
||||||
encryptionDesc: 'Military-grade security for sensitive data',
|
|
||||||
aiAnalysis: 'AI Analysis',
|
|
||||||
aiAnalysisDesc: 'Real-time pattern recognition',
|
|
||||||
integration: 'Seamless Integration',
|
|
||||||
integrationDesc: 'Connection to existing systems',
|
|
||||||
compliance: '100% GDPR Compliant',
|
|
||||||
complianceDesc: 'Developed according to German data protection law',
|
|
||||||
germanEngineering: 'German Engineering',
|
|
||||||
speed: 'Speed',
|
|
||||||
speedDesc: 'Millisecond response time for critical alerts',
|
|
||||||
precision: 'Precision',
|
|
||||||
precisionDesc: '99.97% accuracy in data analysis',
|
|
||||||
reliability: 'Reliability',
|
|
||||||
reliabilityDesc: 'Fail-safe redundancy systems',
|
|
||||||
commandCenter: 'Command Center',
|
|
||||||
overview: 'Overview',
|
|
||||||
analysis: 'Analysis',
|
|
||||||
reports: 'Reports',
|
|
||||||
threatLevel: 'Threat Level',
|
|
||||||
low: 'LOW',
|
|
||||||
activeCases: 'Active Cases',
|
|
||||||
responseTime: 'Avg Response Time',
|
|
||||||
deploymentMap: 'Deployment Map',
|
|
||||||
ctaTitle: 'Ready for the Future of Law Enforcement?',
|
|
||||||
ctaSubtitle: 'Experience IntelSight in Action',
|
|
||||||
scheduleDemo: 'Schedule Demo',
|
|
||||||
getInTouch: 'Get in Touch',
|
|
||||||
legal: 'Legal',
|
|
||||||
imprint: 'Imprint',
|
|
||||||
privacy: 'Privacy',
|
|
||||||
terms: 'Terms',
|
|
||||||
contact: 'Contact',
|
|
||||||
allRights: 'All rights reserved.'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let currentLang = 'de';
|
|
||||||
|
|
||||||
langToggle.addEventListener('click', () => {
|
|
||||||
currentLang = currentLang === 'de' ? 'en' : 'de';
|
|
||||||
langToggle.textContent = currentLang === 'de' ? 'DE | EN' : 'EN | DE';
|
|
||||||
langToggle.setAttribute('data-lang', currentLang);
|
|
||||||
updateLanguage();
|
|
||||||
});
|
|
||||||
|
|
||||||
function updateLanguage() {
|
|
||||||
const t = translations[currentLang];
|
|
||||||
|
|
||||||
// Navigation
|
|
||||||
document.querySelector('.nav-menu li:nth-child(1) a').textContent = t.features;
|
|
||||||
document.querySelector('.nav-menu li:nth-child(2) a').textContent = t.security;
|
|
||||||
document.querySelector('.nav-menu li:nth-child(3) a').textContent = t.about;
|
|
||||||
document.querySelector('.nav-menu li:nth-child(4) a').textContent = t.contact;
|
|
||||||
document.querySelector('.cta-button').textContent = t.requestDemo;
|
|
||||||
|
|
||||||
// Hero
|
|
||||||
document.querySelector('.main-title').textContent = t.heroTitle;
|
|
||||||
document.querySelector('.hero-text').textContent = t.heroText;
|
|
||||||
document.querySelector('.primary-button').textContent = t.discoverMore;
|
|
||||||
document.querySelector('.secondary-button').textContent = t.liveDemo;
|
|
||||||
|
|
||||||
// Trust Indicators
|
|
||||||
document.querySelectorAll('.indicator-label')[0].textContent = t.availability;
|
|
||||||
document.querySelectorAll('.indicator-label')[1].textContent = t.trustedBy;
|
|
||||||
document.querySelectorAll('.indicator-label')[2].textContent = t.support;
|
|
||||||
|
|
||||||
// Update all other sections similarly...
|
|
||||||
}
|
|
||||||
|
|
||||||
// Interactive Node Effects
|
|
||||||
document.querySelectorAll('.node').forEach(node => {
|
|
||||||
node.addEventListener('mouseenter', function() {
|
|
||||||
const icon = this.querySelector('.node-icon');
|
|
||||||
icon.style.transform = 'scale(1.2) rotate(5deg)';
|
|
||||||
});
|
|
||||||
|
|
||||||
node.addEventListener('mouseleave', function() {
|
|
||||||
const icon = this.querySelector('.node-icon');
|
|
||||||
icon.style.transform = 'scale(1) rotate(0deg)';
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Dashboard Widget Animations
|
|
||||||
document.querySelectorAll('.widget').forEach(widget => {
|
|
||||||
widget.addEventListener('mouseenter', function() {
|
|
||||||
this.style.boxShadow = '0 5px 20px rgba(0, 212, 255, 0.3)';
|
|
||||||
});
|
|
||||||
|
|
||||||
widget.addEventListener('mouseleave', function() {
|
|
||||||
this.style.boxShadow = 'none';
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Tab Switching
|
|
||||||
const tabs = document.querySelectorAll('.tab');
|
|
||||||
tabs.forEach(tab => {
|
|
||||||
tab.addEventListener('click', function() {
|
|
||||||
tabs.forEach(t => t.classList.remove('active'));
|
|
||||||
this.classList.add('active');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Form handling for demo requests
|
|
||||||
document.querySelectorAll('.primary-button, .secondary-button, .cta-button').forEach(button => {
|
|
||||||
if (button.textContent.includes('Demo') || button.textContent.includes('demo')) {
|
|
||||||
button.addEventListener('click', (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
alert('Demo-Anfrage-Funktion würde hier implementiert werden');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Glitch effect on hover for main title
|
|
||||||
const mainTitle = document.querySelector('.main-title');
|
|
||||||
let glitchInterval;
|
|
||||||
|
|
||||||
mainTitle.addEventListener('mouseenter', () => {
|
|
||||||
let count = 0;
|
|
||||||
glitchInterval = setInterval(() => {
|
|
||||||
mainTitle.style.textShadow = `
|
|
||||||
${Math.random() * 5}px ${Math.random() * 5}px 0 rgba(0, 212, 255, 0.5),
|
|
||||||
${Math.random() * -5}px ${Math.random() * 5}px 0 rgba(255, 0, 128, 0.5)
|
|
||||||
`;
|
|
||||||
count++;
|
|
||||||
if (count > 5) {
|
|
||||||
clearInterval(glitchInterval);
|
|
||||||
mainTitle.style.textShadow = 'none';
|
|
||||||
}
|
|
||||||
}, 50);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Mouse parallax effect for hero content - DEAKTIVIERT
|
|
||||||
// const heroContent = document.querySelector('.hero-content');
|
|
||||||
// document.addEventListener('mousemove', (e) => {
|
|
||||||
// const x = (window.innerWidth / 2 - e.clientX) / 50;
|
|
||||||
// const y = (window.innerHeight / 2 - e.clientY) / 50;
|
|
||||||
//
|
|
||||||
// heroContent.style.transform = `translateX(${x}px) translateY(${y}px)`;
|
|
||||||
// });
|
|
||||||
|
|
||||||
// Neural Network Visualization
|
|
||||||
function initNeuralNetwork() {
|
|
||||||
const canvas = document.getElementById('neuralCanvas');
|
|
||||||
if (!canvas) return;
|
|
||||||
|
|
||||||
const section = document.querySelector('.intelligence-viz');
|
|
||||||
if (!section) return;
|
|
||||||
|
|
||||||
const ctx = canvas.getContext('2d');
|
|
||||||
canvas.width = window.innerWidth;
|
|
||||||
canvas.height = section.offsetHeight;
|
|
||||||
|
|
||||||
const nodes = [];
|
|
||||||
const connections = [];
|
|
||||||
const nodeCount = 20;
|
|
||||||
|
|
||||||
// Create nodes
|
|
||||||
for (let i = 0; i < nodeCount; i++) {
|
|
||||||
nodes.push({
|
|
||||||
x: Math.random() * canvas.width,
|
|
||||||
y: Math.random() * canvas.height,
|
|
||||||
vx: (Math.random() - 0.5) * 0.5,
|
|
||||||
vy: (Math.random() - 0.5) * 0.5,
|
|
||||||
radius: Math.random() * 3 + 2,
|
|
||||||
pulsePhase: Math.random() * Math.PI * 2
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create connections
|
|
||||||
for (let i = 0; i < nodeCount; i++) {
|
|
||||||
for (let j = i + 1; j < nodeCount; j++) {
|
|
||||||
if (Math.random() < 0.15) {
|
|
||||||
connections.push({ from: i, to: j, strength: Math.random() });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function animate() {
|
|
||||||
ctx.fillStyle = 'rgba(0, 0, 0, 0.02)'; // Weniger opak für subtileren Effekt
|
|
||||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
||||||
|
|
||||||
// Update and draw connections
|
|
||||||
connections.forEach(conn => {
|
|
||||||
const from = nodes[conn.from];
|
|
||||||
const to = nodes[conn.to];
|
|
||||||
const distance = Math.sqrt((to.x - from.x) ** 2 + (to.y - from.y) ** 2);
|
|
||||||
|
|
||||||
if (distance < 300) {
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.moveTo(from.x, from.y);
|
|
||||||
ctx.lineTo(to.x, to.y);
|
|
||||||
ctx.strokeStyle = `rgba(0, 212, 255, ${(1 - distance / 300) * 0.15 * conn.strength})`; // Schwächere Linien
|
|
||||||
ctx.lineWidth = conn.strength * 1.5;
|
|
||||||
ctx.stroke();
|
|
||||||
|
|
||||||
// Data flow animation
|
|
||||||
const flowProgress = (Date.now() / 1000) % 1;
|
|
||||||
const flowX = from.x + (to.x - from.x) * flowProgress;
|
|
||||||
const flowY = from.y + (to.y - from.y) * flowProgress;
|
|
||||||
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.arc(flowX, flowY, 2, 0, Math.PI * 2);
|
|
||||||
ctx.fillStyle = 'rgba(0, 212, 255, 0.8)';
|
|
||||||
ctx.fill();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Update and draw nodes
|
|
||||||
nodes.forEach((node, i) => {
|
|
||||||
// Update position
|
|
||||||
node.x += node.vx;
|
|
||||||
node.y += node.vy;
|
|
||||||
|
|
||||||
// Bounce off walls
|
|
||||||
if (node.x < 0 || node.x > canvas.width) node.vx *= -1;
|
|
||||||
if (node.y < 0 || node.y > canvas.height) node.vy *= -1;
|
|
||||||
|
|
||||||
// Keep in bounds
|
|
||||||
node.x = Math.max(0, Math.min(canvas.width, node.x));
|
|
||||||
node.y = Math.max(0, Math.min(canvas.height, node.y));
|
|
||||||
|
|
||||||
// Draw node with pulse effect
|
|
||||||
const pulseSize = Math.sin(Date.now() / 500 + node.pulsePhase) * 0.3 + 1;
|
|
||||||
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.arc(node.x, node.y, node.radius * pulseSize, 0, Math.PI * 2);
|
|
||||||
ctx.fillStyle = 'rgba(0, 212, 255, 0.4)'; // Weniger intensive Nodes
|
|
||||||
ctx.fill();
|
|
||||||
|
|
||||||
// Glow effect
|
|
||||||
const gradient = ctx.createRadialGradient(node.x, node.y, 0, node.x, node.y, node.radius * pulseSize * 4);
|
|
||||||
gradient.addColorStop(0, 'rgba(0, 212, 255, 0.15)');
|
|
||||||
gradient.addColorStop(1, 'rgba(0, 212, 255, 0)');
|
|
||||||
ctx.fillStyle = gradient;
|
|
||||||
ctx.beginPath();
|
|
||||||
ctx.arc(node.x, node.y, node.radius * pulseSize * 4, 0, Math.PI * 2);
|
|
||||||
ctx.fill();
|
|
||||||
});
|
|
||||||
|
|
||||||
requestAnimationFrame(animate);
|
|
||||||
}
|
|
||||||
|
|
||||||
animate();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Data Particles
|
|
||||||
function initDataParticles() {
|
|
||||||
const container = document.getElementById('dataParticles');
|
|
||||||
if (!container) return;
|
|
||||||
|
|
||||||
for (let i = 0; i < 30; i++) {
|
|
||||||
const particle = document.createElement('div');
|
|
||||||
particle.className = 'data-particle';
|
|
||||||
particle.style.left = Math.random() * 100 + '%';
|
|
||||||
particle.style.top = Math.random() * 100 + '%';
|
|
||||||
particle.style.animationDelay = Math.random() * 20 + 's';
|
|
||||||
particle.style.animationDuration = (20 + Math.random() * 10) + 's';
|
|
||||||
container.appendChild(particle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Live Dashboard Functions
|
|
||||||
function initLiveDashboard() {
|
|
||||||
// Animated Counter
|
|
||||||
const counter = document.getElementById('liveCounter');
|
|
||||||
if (counter) {
|
|
||||||
let currentValue = 0;
|
|
||||||
const targetValue = 247;
|
|
||||||
const increment = targetValue / 100;
|
|
||||||
|
|
||||||
const updateCounter = () => {
|
|
||||||
currentValue += increment;
|
|
||||||
if (currentValue < targetValue) {
|
|
||||||
counter.textContent = Math.floor(currentValue);
|
|
||||||
requestAnimationFrame(updateCounter);
|
|
||||||
} else {
|
|
||||||
counter.textContent = targetValue;
|
|
||||||
// Continue with live updates
|
|
||||||
setInterval(() => {
|
|
||||||
const variation = Math.floor(Math.random() * 10) - 5;
|
|
||||||
counter.textContent = Math.max(0, parseInt(counter.textContent) + variation);
|
|
||||||
}, 3000);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
updateCounter();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Response Timer
|
|
||||||
const timer = document.getElementById('responseTimer');
|
|
||||||
if (timer) {
|
|
||||||
setInterval(() => {
|
|
||||||
const time = (Math.random() * 2 + 2).toFixed(1);
|
|
||||||
timer.textContent = time + 's';
|
|
||||||
timer.style.color = time < 3 ? '#4CAF50' : time < 4 ? '#FFC107' : '#FF4444';
|
|
||||||
}, 2000);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Map Points
|
|
||||||
const mapPoints = document.getElementById('mapPoints');
|
|
||||||
if (mapPoints) {
|
|
||||||
// Create initial points
|
|
||||||
for (let i = 0; i < 5; i++) {
|
|
||||||
const point = document.createElement('div');
|
|
||||||
point.className = 'map-point';
|
|
||||||
point.style.left = Math.random() * 80 + 10 + '%';
|
|
||||||
point.style.top = Math.random() * 80 + 10 + '%';
|
|
||||||
point.style.animationDelay = Math.random() * 2 + 's';
|
|
||||||
mapPoints.appendChild(point);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add new points periodically
|
|
||||||
setInterval(() => {
|
|
||||||
if (mapPoints.children.length < 10) {
|
|
||||||
const point = document.createElement('div');
|
|
||||||
point.className = 'map-point';
|
|
||||||
point.style.left = Math.random() * 80 + 10 + '%';
|
|
||||||
point.style.top = Math.random() * 80 + 10 + '%';
|
|
||||||
point.style.animation = 'pointPulse 2s ease-in-out infinite, fadeIn 0.5s ease-out';
|
|
||||||
mapPoints.appendChild(point);
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
point.style.animation = 'pointPulse 2s ease-in-out infinite';
|
|
||||||
}, 500);
|
|
||||||
}
|
|
||||||
}, 5000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parallax Scrolling
|
|
||||||
function initParallax() {
|
|
||||||
const sections = document.querySelectorAll('section');
|
|
||||||
const transitions = document.querySelectorAll('.section-transition');
|
|
||||||
|
|
||||||
window.addEventListener('scroll', () => {
|
|
||||||
const scrolled = window.pageYOffset;
|
|
||||||
|
|
||||||
// Parallax for sections
|
|
||||||
sections.forEach((section, index) => {
|
|
||||||
const rate = scrolled * -0.5;
|
|
||||||
const yPos = -(scrolled * 0.01 * index);
|
|
||||||
|
|
||||||
if (section.classList.contains('digital-beat') ||
|
|
||||||
section.classList.contains('intelligence-viz') ||
|
|
||||||
section.classList.contains('german-engineering') ||
|
|
||||||
section.classList.contains('command-center')) {
|
|
||||||
section.style.transform = `translateY(${yPos}px)`;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Parallax for transitions
|
|
||||||
transitions.forEach((transition, index) => {
|
|
||||||
const rect = transition.getBoundingClientRect();
|
|
||||||
const speed = 0.5;
|
|
||||||
|
|
||||||
if (rect.bottom >= 0 && rect.top <= window.innerHeight) {
|
|
||||||
const yPos = -(scrolled * speed * 0.1);
|
|
||||||
transition.style.transform = `translateY(${yPos}px)`;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Parallax for specific elements
|
|
||||||
// Hero content bleibt statisch (keine Parallax)
|
|
||||||
// const heroContent = document.querySelector('.hero-content');
|
|
||||||
// if (heroContent) {
|
|
||||||
// heroContent.style.transform = `translateY(${scrolled * 0.3}px)`;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Hero video bleibt statisch
|
|
||||||
// const heroVideo = document.querySelector('.hero-video');
|
|
||||||
// if (heroVideo) {
|
|
||||||
// heroVideo.style.transform = `translate(-50%, ${-50 + scrolled * 0.1}%)`;
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize everything
|
|
||||||
window.addEventListener('load', () => {
|
|
||||||
// Add loaded class for animations
|
|
||||||
document.body.classList.add('loaded');
|
|
||||||
|
|
||||||
// Start animations
|
|
||||||
setTimeout(() => {
|
|
||||||
document.querySelector('.hero-content').style.opacity = '1';
|
|
||||||
document.querySelector('.hero-content').style.transform = 'translateY(0)';
|
|
||||||
}, 100);
|
|
||||||
|
|
||||||
// Initialize neural network
|
|
||||||
initNeuralNetwork();
|
|
||||||
initDataParticles();
|
|
||||||
initLiveDashboard();
|
|
||||||
initParallax();
|
|
||||||
});
|
|
||||||