Backup: Stand vor Design-Optimierung (2026-02-16)

Dieser Commit ist enthalten in:
Claude Code
2026-02-16 21:20:16 +00:00
Ursprung afe25fc728
Commit a61fab12e6
37 geänderte Dateien mit 1042 neuen und 3456 gelöschten Zeilen

Datei anzeigen

@@ -8,7 +8,8 @@
"Bash(sudo apt-get:*)",
"Bash(sudo apt-get install:*)",
"Bash(git add:*)",
"Bash(rm:*)"
"Bash(rm:*)",
"Bash(hostname)"
],
"deny": []
}

100
CLAUDE.md Normale Datei
Datei anzeigen

@@ -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

Datei anzeigen

@@ -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

Datei anzeigen

@@ -434,7 +434,7 @@ E-Mail: datenschutz@ihre-domain.de
└── cookie-consent-demo.html (optional, für Tests)
# 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
```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
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)
```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:**

Datei anzeigen

@@ -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&amp;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

Datei anzeigen

@@ -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&amp;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

Datei anzeigen

@@ -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

Datei anzeigen

@@ -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

Datei anzeigen

@@ -1 +0,0 @@
# website

Datei anzeigen

@@ -531,7 +531,6 @@
<div class="video-header">
<h1>AccountForger</h1>
<p>Exklusiver Zugang für autorisierte Behörden</p>
</div>
<div class="video-wrapper">
@@ -570,13 +569,6 @@
</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>
<script>

Datei anzeigen

@@ -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äre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 31 KiB

Datei anzeigen

@@ -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

Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist

Vorher

Breite:  |  Höhe:  |  Größe: 7.9 KiB

Datei anzeigen

@@ -1,12 +1,12 @@
/**
* Cookie Consent Banner - DSGVO-konform
* IntelSight / Aegis-Sight
* AegisSight
* Angepasst an Corporate Design (Rheinmetall Style)
*/
/* === CSS Variables (IntelSight Brand) === */
/* === CSS Variables (AegisSight Brand) === */
:root {
--consent-primary: #0f72b5; /* IntelSight Primary Blue */
--consent-primary: #0f72b5; /* AegisSight Primary Blue */
--consent-primary-dark: #00406e; /* Dark Blue */
--consent-gray-light: #f4f4f4;
--consent-white: #FFFFFF;
@@ -17,7 +17,7 @@
--consent-shadow-hover: 0 8px 24px rgba(0,0,0,0.15);
}
/* === Demo Page Styling (IntelSight Style) === */
/* === Demo Page Styling (AegisSight Style) === */
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
margin: 0;

Datei anzeigen

@@ -1,6 +1,6 @@
/**
* Cookie Consent Manager - DSGVO-konform
* IntelSight / Aegis-Sight
* AegisSight
* Version 1.0
*/
@@ -21,7 +21,7 @@
// === TRANSLATIONS ===
const TRANSLATIONS = {
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.',
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',
@@ -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.'
},
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.',
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',
@@ -230,7 +230,7 @@
<div class="consent-content">
${gpcDetected ? `
<div class="gpc-notice">
<div class="gpc-notice-icon">🛡️</div>
<div class="gpc-notice-icon"></div>
<div class="gpc-notice-text">
<strong>${getTranslation('gpcTitle')}</strong>
${getTranslation('gpcText')}
@@ -307,7 +307,7 @@
${getTranslation('analyticsDesc')}
</div>
<div class="category-details">
<strong>IntelSight Analytics (Self-Hosted)</strong>
<strong>AegisSight Analytics (Self-Hosted)</strong>
<ul>
<li><strong>Cookie:</strong> _insights_session (30 Minuten)</li>
<li><strong>Zweck:</strong> Session-Tracking, Bounce-Rate Berechnung</li>

Datei anzeigen

@@ -67,7 +67,7 @@
width: 0;
height: 0;
border-radius: 50px;
background: linear-gradient(135deg, #0f72b5, #00406e);
background: #0A1832;
transform: translate(-50%, -50%);
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
z-index: -1;
@@ -81,13 +81,13 @@
.about-tab.active {
color: #ffffff;
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) {
color: #0f72b5;
color: #B39645;
transform: translateY(-2px);
background: rgba(15, 114, 181, 0.05);
background: rgba(200, 168, 81, 0.08);
}
/* Tab Content Panels */
@@ -153,7 +153,7 @@
left: 0;
width: 4px;
height: 100%;
background: linear-gradient(180deg, #0f72b5, #00406e);
background: #0A1832;
transform: scaleY(0);
transition: transform 0.4s;
}
@@ -190,7 +190,7 @@
.company-card:hover .company-card-icon {
transform: scale(1.1) rotate(5deg);
background: linear-gradient(135deg, #0f72b5, #00406e);
background: #0A1832;
}
.company-card-icon img {
@@ -210,7 +210,7 @@
}
.mission-header {
background: linear-gradient(135deg, #0f72b5, #00406e);
background: #0A1832;
color: white;
padding: 60px;
border-radius: 30px;
@@ -279,7 +279,7 @@
.value-card:hover {
transform: translateY(-10px) scale(1.02);
box-shadow: 0 20px 60px rgba(15, 114, 181, 0.2);
border-color: #0f72b5;
border-color: #0A1832;
}
.value-icon {
@@ -303,7 +303,7 @@
.value-card:hover .value-icon {
transform: scale(1.1) rotate(5deg);
background: linear-gradient(135deg, #0f72b5, #00406e);
background: #0A1832;
}
.value-card:hover .value-icon img {
@@ -323,7 +323,7 @@
top: 0;
width: 3px;
height: 100%;
background: linear-gradient(180deg, #0f72b5, #00406e);
background: #0A1832;
border-radius: 2px;
}
@@ -363,14 +363,14 @@
.competency-number {
font-size: 3rem;
font-weight: 700;
background: linear-gradient(135deg, #0f72b5, #00406e);
background: linear-gradient(135deg, #C8A851, #B39645);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
opacity: 1;
}
/* Why IntelSight - 2x2 Grid */
/* Why AegisSight - 2x2 Grid */
.why-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
@@ -448,7 +448,7 @@
.why-card:hover .why-icon {
transform: scale(1.1) rotate(5deg);
background: linear-gradient(135deg, #0f72b5, #00406e);
background: #0A1832;
}
.why-card:hover .why-icon img {
@@ -508,7 +508,7 @@
left: 0;
right: 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;
transition: opacity 0.4s ease;
pointer-events: none;
@@ -521,7 +521,7 @@
.mini-germany-map:hover {
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 {
@@ -541,10 +541,10 @@
/* Pulsing glow effect for NRW region */
@keyframes nrwPulse {
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% {
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 {
background: linear-gradient(135deg, #0f72b5, #00406e);
background: #0A1832;
color: white;
transform: scale(1.05);
box-shadow: 0 10px 30px rgba(15, 114, 181, 0.3);

Datei anzeigen

@@ -2,6 +2,7 @@
:root {
--primary-blue: #0f72b5;
--dark-blue: #00406e;
--accent-gold: #C8A851;
--light-gray: #f4f4f4;
--white: #FFFFFF;
--text-dark: #333333;
@@ -25,7 +26,7 @@
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
background-color: var(--white);
background-color: #0a0f1c;
color: var(--text-dark);
line-height: 1.6;
overflow-x: hidden;
@@ -58,6 +59,10 @@ h6 { font-size: 1.1rem; }
color: var(--primary-blue);
}
#about .section-title {
color: #0A1832;
}
.section-subtitle {
font-size: 1.1rem;
text-align: center;
@@ -111,6 +116,9 @@ h6 { font-size: 1.1rem; }
.logo-img {
height: 50px;
width: auto;
max-width: 100%;
display: block;
object-fit: contain;
}
.nav-menu {
@@ -134,7 +142,7 @@ h6 { font-size: 1.1rem; }
}
.nav-menu a:hover {
color: var(--primary-blue);
color: #0A1832;
transform: translateY(-2px);
}
@@ -145,7 +153,7 @@ h6 { font-size: 1.1rem; }
left: 0;
width: 0;
height: 2px;
background: var(--primary-blue);
background: #0A1832;
transition: width 0.3s ease;
}
@@ -471,12 +479,23 @@ h6 { font-size: 1.1rem; }
border-radius: 4px;
margin-top: 1rem;
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;
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 {
@@ -602,7 +621,7 @@ h6 { font-size: 1.1rem; }
margin-bottom: 0.5rem;
}
/* Why IntelSight */
/* Why AegisSight */
.why-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
@@ -1415,12 +1434,12 @@ h6 { font-size: 1.1rem; }
.scroll-arrow {
width: 32px;
height: 32px;
color: #ffffff;
color: #0A1832;
animation: bounceArrow 2s infinite;
background: rgba(15, 114, 181, 0.2);
background: rgba(10, 24, 50, 0.15);
border-radius: 50%;
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 {

Datei anzeigen

@@ -1,4 +1,4 @@
/* Mobile Responsive Styles - IntelSight */
/* Mobile Responsive Styles - AegisSight */
/* Mobile-First Approach with Progressive Enhancement */
/* Base Mobile Styles (320px and up) */
@@ -49,6 +49,7 @@
.logo-img {
max-width: 120px;
height: auto;
}
/* Hide desktop menu */
@@ -383,6 +384,7 @@
font-size: 15px;
}
.hero-title .main-title {
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 */
@media print {
.navbar,

Datei anzeigen

@@ -139,15 +139,16 @@
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #0f72b5, #00406e);
background: linear-gradient(135deg, #0A1832, #0f72b5);
border-radius: 20px;
opacity: 0.1;
transition: all 0.5s;
}
.product-card:hover .product-icon-bg {
opacity: 0.2;
opacity: 0.3;
transform: rotate(10deg) scale(1.1);
background: linear-gradient(135deg, #0A1832, #1e3a5f);
}
.product-icon {
@@ -155,13 +156,13 @@
z-index: 1;
width: 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;
}
.product-card:hover .product-icon {
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 {
@@ -181,6 +182,11 @@
transition: all 0.3s;
}
/* Specific styling for AccountForger title */
.product-title[data-translate="productAccountForgerTitle"] {
color: #0A1832;
}
.product-card:hover .product-title {
color: #0f72b5;
}
@@ -279,9 +285,9 @@
/* Learn More Button */
.product-learn-more {
background: transparent;
border: 2px solid #0f72b5;
color: #0f72b5;
background: #C8A851;
border: 2px solid #C8A851;
color: #0a0f1c;
padding: 10px 25px;
border-radius: 50px;
cursor: pointer;
@@ -301,7 +307,7 @@
left: 50%;
width: 0;
height: 0;
background: linear-gradient(135deg, #0f72b5, #00406e);
background: #0a0f1c;
transform: translate(-50%, -50%);
transition: all 0.5s;
border-radius: 50px;
@@ -313,10 +319,10 @@
}
.product-learn-more:hover {
color: #ffffff;
border-color: transparent;
color: #C8A851;
border-color: #C8A851;
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 {

Datei anzeigen

@@ -3,7 +3,17 @@
<head>
<meta charset="UTF-8">
<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/fonts.css">
<style>
@@ -117,14 +127,14 @@
<div class="nav-container">
<div class="logo">
<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>
</div>
<ul class="nav-menu">
<li><a href="index.html#home">Home</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="mailto:info@intelsight.de">Contact</a></li>
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
</ul>
<div class="nav-extras">
<button class="lang-toggle" data-lang="en" aria-label="Switch language">DE | EN</button>
@@ -175,13 +185,13 @@
<div class="contact-info">
<p>
IntelSight UG (limited liability)<br>
AegisSight UG (limited liability)<br>
Hendrik Gebhardt<br>
Monami Homma<br>
Gladbacher Strasse 3-5<br>
40764 Langenfeld<br>
Germany<br><br>
Email: info@intelsight.de
Email: info@aegis-sight.de
</p>
</div>
@@ -247,13 +257,33 @@
<li><strong>Right to object:</strong> You can object to the processing of your data.</li>
</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 class="datenschutz-section">
<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>
</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>
@@ -261,7 +291,7 @@
<footer class="footer">
<div class="footer-content">
<div class="footer-section">
<h4>IntelSight</h4>
<h4>AegisSight</h4>
<p>Sicherheit Made in Germany</p>
</div>
<div class="footer-section">
@@ -273,18 +303,18 @@
</div>
<div class="footer-section">
<h4>Contact</h4>
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
<p>info@aegis-sight.de</p>
</div>
</div>
<div class="footer-bottom">
<p>&copy; 2025 IntelSight UG. All rights reserved.</p>
<p>&copy; 2025 AegisSight UG. All rights reserved.</p>
</div>
</footer>
<!-- JavaScript for legal pages -->
<script src="js/legal-pages.js"></script>
<!-- IntelSight Analytics -->
<!-- AegisSight Analytics -->
<script async src="/insights/t.js"></script>
</body>
</html>

Datei anzeigen

@@ -3,7 +3,17 @@
<head>
<meta charset="UTF-8">
<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/fonts.css">
<link rel="stylesheet" href="css/mobile.css">
@@ -110,14 +120,14 @@
<div class="nav-container">
<div class="logo">
<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>
</div>
<ul class="nav-menu">
<li><a href="index.html#home">Startseite</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="mailto:info@intelsight.de">Kontakt</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="nav-extras">
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln">DE | EN</button>
@@ -178,10 +188,10 @@
<h3>Hinweis zur verantwortlichen Stelle</h3>
<p>Die verantwortliche Stelle für die Datenverarbeitung auf dieser Website ist:</p>
<p>
<strong>IntelSight UG (haftungsbeschränkt)</strong><br>
<strong>AegisSight UG (haftungsbeschränkt)</strong><br>
Gladbacher Strasse 3-5<br>
40764 Langenfeld<br><br>
E-Mail: info@intelsight.de
E-Mail: info@aegis-sight.de
</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>
</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">
<p>Quelle: <a href="https://www.e-recht24.de" target="_blank">https://www.e-recht24.de</a></p>
</div>
@@ -272,7 +302,7 @@
<div class="container">
<div class="footer-content">
<div class="footer-section">
<h4>IntelSight UG (haftungsbeschränkt)</h4>
<h4>AegisSight UG (haftungsbeschränkt)</h4>
<p>Gladbacher Strasse 3-5</p>
<p>40764 Langenfeld</p>
</div>
@@ -282,7 +312,7 @@
<li><a href="index.html#home">Startseite</a></li>
<li><a href="index.html#about">Über uns</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>
</div>
<div class="footer-section">
@@ -294,17 +324,17 @@
</div>
<div class="footer-section">
<h4>Kontakt</h4>
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
<p>info@aegis-sight.de</p>
</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>
</footer>
<!-- JavaScript for legal pages -->
<script src="js/legal-pages.js"></script>
<!-- IntelSight Analytics -->
<!-- AegisSight Analytics -->
<script async src="/insights/t.js"></script>
</body>
</html>

Datei anzeigen

@@ -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
Datei anzeigen

@@ -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

Datei anzeigen

@@ -3,7 +3,17 @@
<head>
<meta charset="UTF-8">
<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/fonts.css">
<style>
@@ -77,14 +87,14 @@
<div class="nav-container">
<div class="logo">
<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>
</div>
<ul class="nav-menu">
<li><a href="index.html#home">Home</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="mailto:info@intelsight.de">Contact</a></li>
<li><a href="mailto:info@aegis-sight.de">Contact</a></li>
</ul>
<div class="nav-extras">
<button class="lang-toggle" data-lang="en" aria-label="Switch language">DE | EN</button>
@@ -101,7 +111,7 @@
<div class="impressum-section">
<h2>Company Information</h2>
<p>
IntelSight UG (limited liability)<br>
AegisSight UG (limited liability)<br>
Gladbacher Strasse 3-5<br>
40764 Langenfeld<br>
Germany
@@ -117,8 +127,8 @@
<div class="impressum-section">
<h2>Contact</h2>
<p>
Email: info@intelsight.de<br>
Website: intelsight.de
Email: info@aegis-sight.de<br>
Website: aegis-sight.de
</p>
</div>
@@ -134,7 +144,7 @@
<div class="impressum-section">
<h2>VAT</h2>
<p>VAT identification number according to §27 a of the German VAT Act:<br>
DE [Number]</p>
DE457846602</p>
</div>
<div class="impressum-section">
@@ -166,7 +176,7 @@
<footer class="footer">
<div class="footer-content">
<div class="footer-section">
<h4>IntelSight</h4>
<h4>AegisSight</h4>
<p>Sicherheit Made in Germany</p>
</div>
<div class="footer-section">
@@ -178,18 +188,18 @@
</div>
<div class="footer-section">
<h4>Contact</h4>
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
<p>info@aegis-sight.de</p>
</div>
</div>
<div class="footer-bottom">
<p>&copy; 2025 IntelSight UG. All rights reserved.</p>
<p>&copy; 2025 AegisSight UG. All rights reserved.</p>
</div>
</footer>
<!-- JavaScript for legal pages -->
<script src="js/legal-pages.js"></script>
<!-- IntelSight Analytics -->
<!-- AegisSight Analytics -->
<script async src="/insights/t.js"></script>
</body>
</html>

Datei anzeigen

@@ -3,7 +3,17 @@
<head>
<meta charset="UTF-8">
<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/fonts.css">
<link rel="stylesheet" href="css/mobile.css">
@@ -72,14 +82,14 @@
<div class="nav-container">
<div class="logo">
<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>
</div>
<ul class="nav-menu">
<li><a href="index.html#home">Startseite</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="mailto:info@intelsight.de">Kontakt</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul>
<div class="nav-extras">
<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-section">
<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>
40764 Langenfeld</p>
</div>
@@ -108,7 +118,7 @@
<div class="impressum-section">
<h2>Kontakt</h2>
<p>E-Mail: info@intelsight.de</p>
<p>E-Mail: info@aegis-sight.de</p>
</div>
<div class="impressum-section">
@@ -120,7 +130,7 @@
<div class="impressum-section">
<h2>Umsatzsteuer-ID</h2>
<p>Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz:<br>
DE [Nummer]</p>
DE457846602</p>
</div>
<div class="impressum-section">
@@ -151,7 +161,7 @@
<div class="container">
<div class="footer-content">
<div class="footer-section">
<h4>IntelSight UG (haftungsbeschränkt)</h4>
<h4>AegisSight UG (haftungsbeschränkt)</h4>
<p>Gladbacher Strasse 3-5</p>
<p>40764 Langenfeld</p>
</div>
@@ -161,7 +171,7 @@
<li><a href="index.html#home">Startseite</a></li>
<li><a href="index.html#about">Über uns</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>
</div>
<div class="footer-section">
@@ -173,17 +183,17 @@
</div>
<div class="footer-section">
<h4>Kontakt</h4>
<p><a href="mailto:info@intelsight.de">info@intelsight.de</a></p>
<p>info@aegis-sight.de</p>
</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>
</footer>
<!-- JavaScript for legal pages -->
<script src="js/legal-pages.js"></script>
<!-- IntelSight Analytics -->
<!-- AegisSight Analytics -->
<script async src="/insights/t.js"></script>
</body>
</html>

Datei anzeigen

@@ -3,7 +3,17 @@
<head>
<meta charset="UTF-8">
<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/animations-enhanced.css">
<link rel="stylesheet" href="css/section-transitions.css">
@@ -21,13 +31,13 @@
<nav class="navbar" role="navigation" aria-label="Hauptnavigation">
<div class="nav-container">
<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>
<ul class="nav-menu">
<li><a href="#home" data-translate="navHome">Startseite</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="mailto:info@intelsight.de" data-translate="navContact">Kontakt</a></li>
<li><a href="#products" data-translate="navProducts">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de" data-translate="navContact">Kontakt</a></li>
</ul>
<div class="nav-extras">
<button class="lang-toggle" data-lang="de" aria-label="Sprache wechseln" data-translate="langSwitch">DE | EN</button>
@@ -53,8 +63,8 @@
<ul>
<li><a href="#home" data-translate="navHome">Startseite</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="mailto:info@intelsight.de" data-translate="navContact">Kontakt</a></li>
<li><a href="#products" data-translate="navProducts">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de" data-translate="navContact">Kontakt</a></li>
</ul>
</div>
@@ -127,7 +137,7 @@
</span>
<span data-translate="companyCardTitle1">Spezialist für Behördensoftware</span>
</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 class="company-card">
<h4>
@@ -214,7 +224,7 @@
</div>
</div>
<!-- Warum IntelSight -->
<!-- Warum AegisSight -->
<div class="about-panel" id="why-us">
<div class="why-grid">
<div class="why-card card-hover-lift">
@@ -265,104 +275,6 @@
</div>
<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 -->
<div class="product-card">
<div class="product-header">
@@ -391,7 +303,7 @@
<div class="container">
<div class="footer-content">
<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="footerCompanyAddress2">40764 Langenfeld</p>
</div>
@@ -400,8 +312,7 @@
<ul>
<li><a href="#home" data-translate="footerNavHome">Startseite</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="mailto:info@intelsight.de" data-translate="footerNavContact">Kontakt</a></li>
<li><a href="#products" data-translate="footerNavProducts">Lösungen</a></li>
</ul>
</div>
<div class="footer-section">
@@ -414,10 +325,10 @@
</div>
<div class="footer-section">
<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>
<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>
</footer>
@@ -437,7 +348,7 @@
<script src="js/main.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! -->
</body>
</html>

Datei anzeigen

@@ -1,5 +1,5 @@
/**
* Animation module for IntelSight website
* Animation module for AegisSight website
* Contains all animation logic and visual effects
*/

Datei anzeigen

@@ -1,5 +1,5 @@
/**
* UI Components module for IntelSight website
* UI Components module for AegisSight website
* Contains all interactive UI component logic
*/
@@ -228,7 +228,7 @@ const LoginModal = {
</div>
<button type="submit" class="primary-button">${t('grantAccess')}</button>
</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>
`;
},

Datei anzeigen

@@ -1,5 +1,5 @@
/**
* Central configuration file for IntelSight website
* Central configuration file for AegisSight website
* Contains all constants, settings and selectors
*/
@@ -34,7 +34,7 @@ const CONFIG = {
I18N: {
DEFAULT_LANGUAGE: 'de',
SUPPORTED_LANGUAGES: ['de', 'en'],
STORAGE_KEY: 'intelsight_language'
STORAGE_KEY: 'aegissight_language'
},
// Intersection Observer Settings

Datei anzeigen

@@ -3,8 +3,20 @@
* 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
document.addEventListener('DOMContentLoaded', function() {
// Set current year immediately
setCurrentYear();
// Get the language toggle button
const langToggle = document.querySelector('.lang-toggle');
@@ -18,7 +30,7 @@ document.addEventListener('DOMContentLoaded', function() {
// Store language preference
if (typeof(Storage) !== 'undefined') {
localStorage.setItem('intelsight-language', newLang);
localStorage.setItem('aegissight_language', newLang);
}
// Get current page name

Datei anzeigen

@@ -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
*/
@@ -63,11 +63,11 @@ const App = {
* Start the application after DOM is ready
*/
start() {
console.log('IntelSight Website Initializing...');
console.log('AegisSight Website Initializing...');
// Initialize modules in correct order
try {
// 1. Initialize translations first (needed by components)
// 1. Initialize translations first (includes year replacement)
initTranslations();
console.log('✓ Translations initialized');
@@ -85,7 +85,7 @@ const App = {
// 5. Setup performance monitoring
this.setupPerformanceMonitoring();
console.log('IntelSight Website Ready!');
console.log('AegisSight Website Ready!');
} catch (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
* @returns {number|null} First paint time in milliseconds

Datei anzeigen

@@ -6,6 +6,10 @@
(function() {
'use strict';
// TEMPORARILY DISABLED FOR DEVELOPMENT - 2026-01-08
console.log('⚠️ Protection disabled for development');
return;
// Check if user is on a mobile device
const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ||
('ontouchstart' in window) ||

Datei anzeigen

@@ -1,5 +1,5 @@
/**
* Translation system for IntelSight website
* Translation system for AegisSight website
* Supports German (de) and English (en)
*/
@@ -7,13 +7,13 @@
const translations = {
de: {
// Page meta
pageTitle: 'IntelSight - Sicherheit Made in Germany',
pageTitle: 'AegisSight - Sicherheit Made in Germany',
// Navigation
skipNav: 'Zum Hauptinhalt springen',
navHome: 'Startseite',
navAbout: 'Über uns',
navProducts: 'Produkte & Lösungen',
navProducts: 'Lösungen',
navContact: 'Kontakt',
langSwitch: 'DE | EN',
@@ -40,7 +40,7 @@ const translations = {
whoWeAreTitle: 'Unternehmen',
companyCardTitle1: 'Spezialist für Behördensoftware',
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.',
locationBadge: 'Nordrhein-Westfalen, Deutschland',
nrwLabel: 'Nordrhein-Westfalen',
@@ -67,7 +67,7 @@ const translations = {
comp3Desc: 'Kontinuierliche Sicherheitsupdates und zuverlässige Wartung über den gesamten Lebenszyklus',
// Why Us
whyUsTitle: 'Warum IntelSight UG?',
whyUsTitle: 'Warum AegisSight UG?',
why1Title: 'Enge Zusammenarbeit',
why1Desc: 'Wir arbeiten Hand in Hand mit unseren Kunden für maßgeschneiderte Lösungen',
why2Title: 'Made in Germany',
@@ -78,7 +78,7 @@ const translations = {
why4Desc: 'Fokus auf Sicherheit, Professionalität & zukunftssichere Lösungen',
// Products Section
productsTitle: 'PRODUKTE & LÖSUNGEN',
productsTitle: 'LÖSUNGEN',
productsSubtitle: 'Professionelle Werkzeuge für moderne Ermittlungsarbeit',
// Professional Toolbox
@@ -120,23 +120,21 @@ const translations = {
loginForAccess: 'Anmelden für Zugriff',
// Footer
footerCompanyTitle: 'IntelSight UG (haftungsbeschränkt)',
footerCompanyTitle: 'AegisSight UG (haftungsbeschränkt)',
footerCompanyAddress1: 'Gladbacher Strasse 3-5',
footerCompanyAddress2: '40764 Langenfeld',
footerNavTitle: 'Navigation',
footerNavHome: 'Startseite',
footerNavAbout: 'Über uns',
footerNavProducts: 'Produkte',
footerNavContact: 'Kontakt',
footerNavProducts: 'Lösungen',
footerLegalTitle: 'Rechtliches',
footerImprint: 'Impressum',
footerPrivacy: 'Datenschutz',
footerCookies: 'Cookie-Einstellungen',
footerTerms: 'AGB',
footerContactTitle: 'Kontakt',
copyright: 2025 IntelSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.',
copyright: {year} AegisSight UG (haftungsbeschränkt). Alle Rechte vorbehalten.',
// Modal texts
authRequired: 'Authentifizierung erforderlich',
@@ -154,13 +152,13 @@ const translations = {
en: {
// Page meta
pageTitle: 'IntelSight - Sicherheit Made in Germany',
pageTitle: 'AegisSight - Sicherheit Made in Germany',
// Navigation
skipNav: 'Skip to main content',
navHome: 'Home',
navAbout: 'About Us',
navProducts: 'Products & Solutions',
navProducts: 'Solutions',
navContact: 'Contact',
langSwitch: 'EN | DE',
@@ -187,7 +185,7 @@ const translations = {
whoWeAreTitle: 'Company',
companyCardTitle1: 'Government Software Specialist',
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.',
locationBadge: 'North Rhine-Westphalia, Germany',
nrwLabel: 'North Rhine-Westphalia',
@@ -214,7 +212,7 @@ const translations = {
comp3Desc: 'Continuous security updates and reliable maintenance throughout the entire lifecycle',
// Why Us
whyUsTitle: 'Why IntelSight UG?',
whyUsTitle: 'Why AegisSight UG?',
why1Title: 'Close Collaboration',
why1Desc: 'We work hand in hand with our customers for customized solutions',
why2Title: 'Made in Germany',
@@ -225,7 +223,7 @@ const translations = {
why4Desc: 'Focus on security, professionalism & future-proof solutions',
// Products Section
productsTitle: 'Products & Solutions',
productsTitle: 'Solutions',
productsSubtitle: 'Professional Tools for Modern Investigation Work',
// Professional Toolbox
@@ -267,23 +265,21 @@ const translations = {
loginForAccess: 'Login for Access',
// Footer
footerCompanyTitle: 'IntelSight UG (haftungsbeschränkt)',
footerCompanyTitle: 'AegisSight UG (haftungsbeschränkt)',
footerCompanyAddress1: 'Gladbacher Strasse 3-5',
footerCompanyAddress2: '40764 Langenfeld',
footerNavTitle: 'Navigation',
footerNavHome: 'Home',
footerNavAbout: 'About Us',
footerNavProducts: 'Products',
footerNavContact: 'Contact',
footerNavProducts: 'Solutions',
footerLegalTitle: 'Legal',
footerImprint: 'Imprint',
footerPrivacy: 'Privacy Policy',
footerCookies: 'Cookie Settings',
footerTerms: 'Terms & Conditions',
footerContactTitle: 'Contact',
copyright: 2025 IntelSight UG (haftungsbeschränkt). All rights reserved.',
copyright: {year} AegisSight UG (haftungsbeschränkt). All rights reserved.',
// Modal texts
authRequired: 'Authentication Required',
@@ -330,6 +326,11 @@ function switchLanguage(language) {
currentLanguage = language;
localStorage.setItem(CONFIG.I18N.STORAGE_KEY, 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);
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
if (t[key].includes('<strong>') || t[key].includes('<em>')) {
element.innerHTML = t[key];
if (content.includes('<strong>') || content.includes('<em>')) {
element.innerHTML = content;
} else {
element.textContent = t[key];
element.textContent = content;
}
}
});

Datei anzeigen

@@ -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 bots

689
script.js
Datei anzeigen

@@ -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();
});

2213
styles.css

Datei-Diff unterdrückt, da er zu groß ist Diff laden