diff --git a/app/flask-postgres/app/app.py b/app/flask-postgres/app/app.py
index 93321bd..c16579e 100644
--- a/app/flask-postgres/app/app.py
+++ b/app/flask-postgres/app/app.py
@@ -240,7 +240,7 @@ def home():
@login_required
def preise():
return render_template(
- "preise.html",
+ "preise2.html",
page_title="Preise",
active_page="preise",
**get_current_user()
@@ -750,4 +750,15 @@ def useradmin_user_new():
form_error=form_error,
form_values=form_values,
**get_current_user()
- )
\ No newline at end of file
+ )
+
+@app.route("/set-country")
+def set_country():
+ country = request.args.get("country", "DE").upper()
+ allowed = {"DE", "AT", "CH"}
+
+ if country in allowed:
+ session["country"] = country
+
+ next_url = request.args.get("next") or request.referrer or url_for("home")
+ return redirect(next_url)
\ No newline at end of file
diff --git a/app/flask-postgres/app/security.py b/app/flask-postgres/app/security.py
index a48cda4..bf0900d 100644
--- a/app/flask-postgres/app/security.py
+++ b/app/flask-postgres/app/security.py
@@ -59,6 +59,8 @@ def user_is_admin():
def get_current_user():
+ country = session.get("country", "DE") # Default DE
+
return {
"user_id": session.get("user_id"),
"user_name": session.get("user_name"),
@@ -67,6 +69,7 @@ def get_current_user():
"is_logged_in": bool(session.get("user_id")),
"is_admin": user_is_admin() if session.get("user_id") else False,
"is_user_admin": user_is_user_admin() if session.get("user_id") else False,
+ "country": country,
}
@@ -116,4 +119,5 @@ def user_admin_required(view_func):
if not user_is_user_admin():
abort(403)
return view_func(*args, **kwargs)
- return wrapper
\ No newline at end of file
+ return wrapper
+
diff --git a/app/flask-postgres/app/templates/base.html b/app/flask-postgres/app/templates/base.html
index 380a6d1..19a20d1 100644
--- a/app/flask-postgres/app/templates/base.html
+++ b/app/flask-postgres/app/templates/base.html
@@ -41,6 +41,16 @@
{% else %}
Login
{% endif %}
+
+
diff --git a/app/flask-postgres/app/templates/partials/allgemein_content.html b/app/flask-postgres/app/templates/partials/allgemein_content.html
index 79848f6..d5bd96d 100644
--- a/app/flask-postgres/app/templates/partials/allgemein_content.html
+++ b/app/flask-postgres/app/templates/partials/allgemein_content.html
@@ -61,7 +61,7 @@
-

+
diff --git a/app/flask-postgres/app/templates/preise2.html b/app/flask-postgres/app/templates/preise2.html
new file mode 100644
index 0000000..8e41129
--- /dev/null
+++ b/app/flask-postgres/app/templates/preise2.html
@@ -0,0 +1,129 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+
+ Automatisierte Level
+
+ Die Level bauen inhaltlich aufeinander auf und erweitern den Leistungsumfang.
+ Ein Upgrade ist jederzeit möglich – es wird nur die Differenz berechnet.
+
+
+ Alle Preise verstehen sich inklusive Mehrwertsteuer.
+
+
+
+
+
+
+
+
+ €
+ 9,90
+ / jährlich pro Nutzer
+
+
+
+
+ Erfüllt die gesetzliche Schulungspflicht (EU AI Act)
+
+
+
= 5 Module mit Pflichtinhalten
+
+
+
+
+ - Modul A1 – AI Governance Basics
Grundlagen der KI-Nutzung im Unternehmen
+ - Modul A2 – Ethical AI & Non-Discrimination
Verantwortungsvoller KI-Einsatz
+ - Modul A3 – AI Risk Awareness
Risiken erkennen und bewerten
+ - Modul A4 – Transparency & Disclosure
Transparenzpflichten verstehen
+ - Modul A5 – Documentation & Prozesse
Grundlegende Dokumentation
+
+
+
+
+
+
+
+
+
+
+ €
+ 19,90
+ / jährlich pro Nutzer
+
+
+
+
+ Alle Module aus A (Modul 1–5) enthalten
+
+
+
= 10 Module insgesamt
+
+
+
+
+ - Modul B1 – Data & Privacy Compliance
Datenschutz in der KI-Nutzung
+ - Modul B2 – KI-Nutzung & Unternehmensrichtlinien
Policies und Verantwortlichkeiten
+ - Modul B3 – Copyright & AI (Basic)
Urheberrecht und Trainingsdaten
+ - Modul B4 – Audit Readiness
Nachweisbarkeit und Dokumentation
+ - Modul B5 – Organisations-Compliance
Rollen, Zuständigkeiten und Prozesse
+
+
+
+
+
+
+
+
+
+
+ €
+ 29,90
+ / jährlich pro Nutzer
+
+
+
+
+ Alle Module aus A & B enthalten
+
+
+
= 15 Module insgesamt
+
+
+
+
+ - Modul C1 – Advanced Copyright & IP Strategy
Schutz und Nutzung von Inhalten
+ - Modul C2 – Security & Misuse Prevention
Missbrauchs- und Sicherheitsaspekte
+ - Modul C3 – Vendor & Tool Governance
Prüfung und Steuerung externer Tools
+ - Modul C4 – Risk Mapping
Governance-Framework und Risikoklassifizierung
+ - Modul C5 – Umsetzung & Beratung
Individuelle Begleitung und Unternehmensintegration
+
+
+
+
+
+
+
+
+
+

+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/app/flask-postgres/styles/site.css b/app/flask-postgres/styles/site.css
index cea0111..ba98114 100644
--- a/app/flask-postgres/styles/site.css
+++ b/app/flask-postgres/styles/site.css
@@ -429,4 +429,269 @@ button {
font-size: 16px;
box-sizing: border-box;
background: #fff;
+}
+/* =========================
+ PRICING PAGE
+========================= */
+
+.pricing-hero {
+ text-align: center;
+ margin-bottom: 36px;
+}
+
+.pricing-hero h1 {
+ font-size: 52px;
+ margin-bottom: 18px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+.pricing-lead {
+ max-width: 980px;
+ margin: 0 auto 16px;
+ font-size: 22px;
+ line-height: 1.5;
+ color: #526172;
+}
+
+.pricing-note-strong {
+ font-size: 18px;
+ font-weight: 700;
+ color: #0d2f57;
+ margin-bottom: 0;
+}
+
+.pricing-levels {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 26px;
+ align-items: start;
+ margin-bottom: 40px;
+}
+
+.level-card {
+ display: flex;
+ flex-direction: column;
+ background: #ffffff;
+ border: 1px solid #d8e0ea;
+ border-radius: 18px;
+ overflow: hidden;
+ box-shadow: 0 16px 34px rgba(0, 0, 0, 0.08);
+}
+
+.level-card.featured {
+ transform: translateY(-18px);
+ box-shadow: 0 20px 42px rgba(0, 0, 0, 0.14);
+}
+
+.level-card-header {
+ min-height: 150px;
+ padding: 28px 24px 24px;
+ background: linear-gradient(180deg, #7f8793 0%, #a5acb5 100%);
+ color: #ffffff;
+ text-align: center;
+}
+
+.level-card-header h2 {
+ margin: 0 0 14px;
+ font-size: 28px;
+ line-height: 1.15;
+}
+
+.level-card-header p {
+ margin: 0;
+ color: rgba(255, 255, 255, 0.95);
+ font-size: 17px;
+ line-height: 1.35;
+}
+
+.level-a .level-card-header h2 {
+ color: #1970c8;
+}
+
+.level-b .level-card-header h2 {
+ color: #f2c200;
+}
+
+.level-c .level-card-header h2 {
+ color: #e83a2d;
+}
+
+.level-card-price {
+ display: flex;
+ align-items: baseline;
+ justify-content: center;
+ gap: 6px;
+ padding: 26px 20px 24px;
+ background: #f8fbff;
+ border-bottom: 1px solid #dce3ea;
+}
+
+.level-card-price .currency {
+ font-size: 28px;
+ color: #7e8793;
+}
+
+.level-card-price .amount {
+ font-size: 70px;
+ line-height: 1;
+ font-weight: 800;
+}
+
+.level-card-price .period {
+ font-size: 18px;
+ color: #7e8793;
+}
+
+.level-a .amount {
+ color: #1970c8;
+}
+
+.level-b .amount {
+ color: #d4aa00;
+}
+
+.level-c .amount {
+ color: #e83a2d;
+}
+
+.level-card-body {
+ padding: 28px 28px 30px;
+}
+
+.level-highlight {
+ font-size: 24px;
+ font-weight: 700;
+ line-height: 1.25;
+ color: #1b2430;
+ margin-bottom: 18px;
+}
+
+.level-meta {
+ font-size: 16px;
+ color: #5f6c7b;
+ margin-bottom: 20px;
+}
+
+.level-card-body hr {
+ border: 0;
+ border-top: 2px solid #d6dde6;
+ margin: 22px 0 24px;
+}
+
+.level-module-list {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.level-module-list li {
+ margin-bottom: 16px;
+ color: #2f3b4a;
+ line-height: 1.5;
+}
+
+.level-actions {
+ margin-top: 24px;
+}
+
+.level-actions .btn-primary {
+ width: 100%;
+}
+
+.pricing-bottom-note {
+ margin-top: 18px;
+}
+
+/* =========================
+ RESPONSIVE PRICING
+========================= */
+
+@media (max-width: 1200px) {
+ .pricing-levels {
+ grid-template-columns: 1fr;
+ }
+
+ .level-card.featured {
+ transform: none;
+ }
+
+ .pricing-hero h1 {
+ font-size: 40px;
+ }
+
+ .pricing-lead {
+ font-size: 19px;
+ }
+}
+
+@media (max-width: 700px) {
+ .level-card-header {
+ min-height: auto;
+ padding: 22px 18px;
+ }
+
+ .level-card-header h2 {
+ font-size: 24px;
+ }
+
+ .level-card-header p {
+ font-size: 16px;
+ }
+
+ .level-card-price {
+ flex-wrap: wrap;
+ padding: 22px 18px;
+ }
+
+ .level-card-price .amount {
+ font-size: 52px;
+ }
+
+ .level-card-price .period {
+ width: 100%;
+ text-align: center;
+ }
+
+ .level-card-body {
+ padding: 22px 18px 24px;
+ }
+
+ .level-highlight {
+ font-size: 21px;
+ }
+}
+
+/* =========================
+ COUNTRY SWITCH
+========================= */
+
+.country-switch-form {
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ margin-left: 16px;
+}
+
+.country-label {
+ color: #ffffff;
+ font-weight: 600;
+ font-size: 14px;
+}
+
+.country-switch-form select {
+ min-height: 40px;
+ padding: 0 12px;
+ border: 1px solid rgba(255, 255, 255, 0.18);
+ border-radius: 12px;
+ background: #376da6;
+ color: #ffffff;
+ font-weight: 700;
+ cursor: pointer;
+}
+
+.country-switch-form select:focus {
+ outline: none;
+ border-color: #8fb6e2;
+ box-shadow: 0 0 0 3px rgba(143, 182, 226, 0.2);
}
\ No newline at end of file