Länderauswahl
This commit is contained in:
parent
44792dc98f
commit
b221ee515a
@ -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()
|
||||
)
|
||||
)
|
||||
|
||||
@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)
|
||||
@ -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
|
||||
return wrapper
|
||||
|
||||
|
||||
@ -41,6 +41,16 @@
|
||||
{% else %}
|
||||
<a href="/login" class="{% if active_page == 'login' %}active{% endif %}">Login</a>
|
||||
{% endif %}
|
||||
|
||||
<form class="country-switch-form" method="get" action="/set-country">
|
||||
<label for="country-select" class="country-label">Land</label>
|
||||
<select id="country-select" name="country" onchange="this.form.submit()">
|
||||
<option value="DE" {% if country == "DE" %}selected{% endif %}>🇩🇪 DE</option>
|
||||
<option value="AT" {% if country == "AT" %}selected{% endif %}>🇦🇹 AT</option>
|
||||
<option value="CH" {% if country == "CH" %}selected{% endif %}>🇨🇭 CH</option>
|
||||
</select>
|
||||
<input type="hidden" name="next" value="{{ request.path }}">
|
||||
</form>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
|
||||
@ -61,7 +61,7 @@
|
||||
</div>
|
||||
|
||||
<div class="image-panel">
|
||||
<img src="/images/Schulung.png" alt="Compliance Schulung">
|
||||
<img src="/images/schulung.png" alt="Compliance Schulung">
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
129
app/flask-postgres/app/templates/preise2.html
Normal file
129
app/flask-postgres/app/templates/preise2.html
Normal file
@ -0,0 +1,129 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<section class="pricing-hero">
|
||||
<h1>Automatisierte Level</h1>
|
||||
<p class="pricing-lead">
|
||||
Die Level bauen inhaltlich aufeinander auf und erweitern den Leistungsumfang.
|
||||
Ein Upgrade ist jederzeit möglich – es wird nur die Differenz berechnet.
|
||||
</p>
|
||||
<p class="pricing-note-strong">
|
||||
Alle Preise verstehen sich inklusive Mehrwertsteuer.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section class="pricing-levels">
|
||||
<article class="level-card level-a">
|
||||
<div class="level-card-header">
|
||||
<h2>Level A - Essential</h2>
|
||||
<p>Für alle Mitarbeitenden – gesetzliche Mindestanforderung / Basiswissen</p>
|
||||
</div>
|
||||
|
||||
<div class="level-card-price">
|
||||
<span class="currency">€</span>
|
||||
<span class="amount">9,90</span>
|
||||
<span class="period">/ jährlich pro Nutzer</span>
|
||||
</div>
|
||||
|
||||
<div class="level-card-body">
|
||||
<div class="level-highlight">
|
||||
Erfüllt die gesetzliche Schulungspflicht (EU AI Act)
|
||||
</div>
|
||||
|
||||
<p class="level-meta">= 5 Module mit Pflichtinhalten</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<ul class="level-module-list">
|
||||
<li><strong>Modul A1 – AI Governance Basics</strong><br>Grundlagen der KI-Nutzung im Unternehmen</li>
|
||||
<li><strong>Modul A2 – Ethical AI & Non-Discrimination</strong><br>Verantwortungsvoller KI-Einsatz</li>
|
||||
<li><strong>Modul A3 – AI Risk Awareness</strong><br>Risiken erkennen und bewerten</li>
|
||||
<li><strong>Modul A4 – Transparency & Disclosure</strong><br>Transparenzpflichten verstehen</li>
|
||||
<li><strong>Modul A5 – Documentation & Prozesse</strong><br>Grundlegende Dokumentation</li>
|
||||
</ul>
|
||||
|
||||
<div class="level-actions">
|
||||
<a href="#" class="btn-primary">Jetzt buchen</a>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="level-card level-b featured">
|
||||
<div class="level-card-header">
|
||||
<h2>Level B - Compliance</h2>
|
||||
<p>Für Fachbereiche – rechtssichere KI-Nutzung im Unternehmen / erweitert</p>
|
||||
</div>
|
||||
|
||||
<div class="level-card-price">
|
||||
<span class="currency">€</span>
|
||||
<span class="amount">19,90</span>
|
||||
<span class="period">/ jährlich pro Nutzer</span>
|
||||
</div>
|
||||
|
||||
<div class="level-card-body">
|
||||
<div class="level-highlight">
|
||||
Alle Module aus A (Modul 1–5) enthalten
|
||||
</div>
|
||||
|
||||
<p class="level-meta">= 10 Module insgesamt</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<ul class="level-module-list">
|
||||
<li><strong>Modul B1 – Data & Privacy Compliance</strong><br>Datenschutz in der KI-Nutzung</li>
|
||||
<li><strong>Modul B2 – KI-Nutzung & Unternehmensrichtlinien</strong><br>Policies und Verantwortlichkeiten</li>
|
||||
<li><strong>Modul B3 – Copyright & AI (Basic)</strong><br>Urheberrecht und Trainingsdaten</li>
|
||||
<li><strong>Modul B4 – Audit Readiness</strong><br>Nachweisbarkeit und Dokumentation</li>
|
||||
<li><strong>Modul B5 – Organisations-Compliance</strong><br>Rollen, Zuständigkeiten und Prozesse</li>
|
||||
</ul>
|
||||
|
||||
<div class="level-actions">
|
||||
<a href="#" class="btn-primary">Jetzt buchen</a>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="level-card level-c">
|
||||
<div class="level-card-header">
|
||||
<h2>Level C - Governance</h2>
|
||||
<p>Für Unternehmen – vollständige Steuerung, Kontrolle und Absicherung / vollständig</p>
|
||||
</div>
|
||||
|
||||
<div class="level-card-price">
|
||||
<span class="currency">€</span>
|
||||
<span class="amount">29,90</span>
|
||||
<span class="period">/ jährlich pro Nutzer</span>
|
||||
</div>
|
||||
|
||||
<div class="level-card-body">
|
||||
<div class="level-highlight">
|
||||
Alle Module aus A & B enthalten
|
||||
</div>
|
||||
|
||||
<p class="level-meta">= 15 Module insgesamt</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<ul class="level-module-list">
|
||||
<li><strong>Modul C1 – Advanced Copyright & IP Strategy</strong><br>Schutz und Nutzung von Inhalten</li>
|
||||
<li><strong>Modul C2 – Security & Misuse Prevention</strong><br>Missbrauchs- und Sicherheitsaspekte</li>
|
||||
<li><strong>Modul C3 – Vendor & Tool Governance</strong><br>Prüfung und Steuerung externer Tools</li>
|
||||
<li><strong>Modul C4 – Risk Mapping</strong><br>Governance-Framework und Risikoklassifizierung</li>
|
||||
<li><strong>Modul C5 – Umsetzung & Beratung</strong><br>Individuelle Begleitung und Unternehmensintegration</li>
|
||||
</ul>
|
||||
|
||||
<div class="level-actions">
|
||||
<a href="#" class="btn-primary">Jetzt buchen</a>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section class="pricing-bottom-note">
|
||||
<div class="image-panel">
|
||||
<img src="/images/TabelleUebersicht.png" alt="Paketübersicht">
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
@ -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);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user