# Stundensatz-Rechner (Österreich, 2026) — README

Kern-Tool: `index.html` (ehem. `stundensatz-rechner.html`). Kein Build-Step, kein Backend, keine Dependencies außer Google Fonts via CDN. Einfach hochladen und fertig.

**Seit Juli 2026 nicht mehr streng single-file:** Fiskalkonstanten und Rechenlogik wurden nach `shared/` extrahiert, damit der Hauptrechner und das neue Wachstum-Modul (`satzwert-wachstum_handoff.md`, aktuell auf Branch `wachstum-modul`, noch nicht live) dieselbe Quelle nutzen:
- `shared/fiskal-konstanten.js` — SVS-Satz, ESt-Tarifstufen, Grundfreibetrag, Kleinunternehmergrenze (globale Variable `FISKAL`)
- `shared/steuer-engine.js` — `estTax`/`fromG`/`solveG` (identisch zur bisherigen Logik) sowie `gesamtNetto(q, eingaben)` fürs Wachstum-Modul (globale Variable `STEUER`)

Beide Dateien werden per `<script src="...">` vor dem Hauptscript geladen; `index.html` referenziert nur noch `STEUER.fromG`/`STEUER.solveG` statt eigener Funktionen. Regressionsgetestet gegen den alten Stand (11 Referenz-Nettowerte, identische Ergebnisse) und im Browser verifiziert. Referenzfälle für `gesamtNetto` inkl. erwarteter Werte: `shared/tests.md`.

Zielgruppe: österreichische EPU / Freelancer / Kleinunternehmer, die ihren nötigen Stundensatz inkl. SVS und Einkommensteuer berechnen wollen. Monetarisierung über drei Affiliate-Slots am Seitenende (Geschäftskonto, Buchhaltung, Berufshaftpflicht).

**Markenname:** Satzwert (Stand: Domain-Verfügbarkeit wird vom Nutzer selbst geprüft, siehe Chatverlauf). Bewusst kein reiner Gattungsbegriff wie "Stundensatzrechner" — der ist bereits stark von sevdesk.at, freelancermap, finrechner.at u. a. besetzt.

**USP / Positionierung:** *"Der einzige Stundensatz-Rechner, der wirklich österreichisch rechnet — nicht pauschal schätzt."* Abgrenzung zur Konkurrenz, die überwiegend mit Pauschal-Faustregeln arbeitet ("rechne 30–40 % drauf"), statt die echte SVS-Formel und die 7 ESt-Tarifstufen live zu simulieren. Dieser USP ist **bewusst nur für AT umgesetzt** — eine DE-Version wurde verworfen, weil sie eine komplett andere Steuerlogik bräuchte (andere SV-Struktur, stetige statt stufenförmige Steuerformel, andere Kleinunternehmergrenze) und eine AT-Formel mit deutschen Texten getarnt als DE-Rechner genau die Ungenauigkeit wäre, die der USP eigentlich kritisiert. Lieber eine Region exakt als zwei Regionen ungenau.

Der USP ist im Wording verankert an: Eyebrow ("Satzwert · Österreich 2026"), H1-Lede (1. Satz: "Keine Pauschale, kein Faustregel-Aufschlag"), Footer ("So rechnet Satzwert"), Title-Tag und Meta-Description. Bei weiteren Textänderungen diesen roten Faden beibehalten — nicht zurück zu rein deskriptivem Wording ("Der Rechner zeigt dir...") verfallen, das den Vorteil gegenüber der Konkurrenz verschenkt.

---

## 0. Design-System: gemeinsames CI mit fixrechnung.at

Satzwert übernimmt bewusst das visuelle Design-System von **fixrechnung.at** (gleiche Zielgruppe: österreichische EPU/Freelancer), damit beide Tools als eine Marke/ein Toolset wahrgenommen werden. Das ist kein Zufall, sondern Absicht — bei weiteren Tools für dieselbe Zielgruppe dieses System weiterverwenden, nicht jedes Mal neu erfinden.

**CSS-Variablen (`:root`), 1:1 von fixrechnung übernommen:**

```css
--accent:#0f766e;        --accent-dark:#0b5a54;     --accent-soft:#e6f4f2;
--ink:#15171f;           --ink-soft:#52566a;        --ink-muted:#8a8f9e;
--canvas:#f0f2f5;        --paper:#ffffff;           --line:#e4e6ee;
--danger:#b42318;        --danger-soft:#fef3f2;
--success-txt:#027a48;   --success-bg:#ecfdf3;
--hint-bg:#fffdf4;       --hint-line:#f0e4bb;       --hint-txt:#5c4d1e;     --hint-txt-strong:#3d3110;
--footer-bg:#15171f;     --footer-txt:#8a8f9e;      --footer-line:#2a2d36;
```

**Fonts:** Inter (400/500/600/700) für UI, Fließtext, Zahlen — durchgängig. DM Serif Display (400, einzige Schicht) **nur** für die H1 und die "Die nächsten Schritte"-H3 — bewusst sparsam, nicht für UI-Elemente. Identisch zur fixrechnung-Vorgabe.

**Formensprache:**
- Border-Radius: Panels/Cards `13px` (`--r`), Buttons `10px`, Badges/Pills `99px` (voll gerundet).
- Schatten: Panels dezent `0 1px 3px rgba(20,23,33,.04)`, Ergebnis-Panel/Modal stärker `0 1px 3px rgba(20,23,33,.06), 0 8px 24px rgba(20,23,33,.08)`, Hover-Anhebung auf den Affiliate-Cards `0 4px 20px rgba(20,23,33,.09)`.
- **Signature-Element:** Die 3px hohe Accent-Linie (`.accent-line`, `border-radius:2px`, Farbe `--accent`) sitzt über dem Titel jedes Panels — direktes Pendant zur Accent-Linie über den Rechnungsdetails bei fixrechnung. Falls neue Panels/Cards dazukommen, dieses Element konsequent mitführen, das ist das markenübergreifende Wiedererkennungsmerkmal.
- Footer ist bewusst **dunkel und full-bleed** (negative `margin: 0 -20px`, `--footer-bg:#15171f`), exakt wie fixrechnung — nicht versehentlich wieder auf hellen Footer zurückbauen.

**Was NICHT 1:1 übernommen wurde (bewusste Abweichung, funktional begründet):**
- Die Ledger-Bar-Segmentfarben (`--betrieb`, `--svs`, `--est`, `--netto`) sind **keine Markenfarben**, sondern Datenkategorien in einem Stacked-Bar-Chart. Sie nutzen `--ink-muted`, einen Gold-Ton (`#c98a2b`) und `--danger` als Differenzierung, weil sie sich von `--accent` (Teal) unterscheiden müssen, um in der Bar lesbar zu bleiben. Bei neuen Datenvisualisierungen genauso vorgehen: CI-Akzentfarbe bleibt für Marke/Interaktion reserviert, Datenkategorien bekommen eigene, davon klar unterscheidbare Farben.
- Die warme Hint-Box (`--hint-bg` etc.) wird hier für die Rücklagen-Quote-Callout verwendet (`.reserve`), nicht für eine Affiliate-Box wie bei fixrechnung — funktional aber dieselbe Idee: "wichtiger Hinweis, bewusst warm abgesetzt vom neutralen Hauptsystem".

Bei zukünftigen Tools für dieselbe Zielgruppe: diesen Abschnitt als Vorlage kopieren und nur die tool-spezifischen Abweichungen (wie die Ledger-Bar-Farben hier) dokumentieren.

---

## 1. Dateistruktur

| Bereich | Datei / Zeilen (ca.) | Inhalt |
|---|---|---|
| `<head>` | `index.html` 1–10 | Meta, Fonts |
| `<style>` | `index.html` 11–330 | Gesamtes CSS, mit Kommentar-Blöcken pro Sektion |
| `<body>` → Header | `index.html` | H1 + Lead-Text |
| `.grid` → Eingabe-Panel | `index.html` | 6 Inputs (Slider/Toggle) |
| `.grid` → Ergebnis-Panel (`.result`) | `index.html` | Stundensatz-Hero, Branchenvergleich, Ledger-Bar |
| `.reserve` | `index.html` | Rücklagen-Quote-Callout |
| `.next` | `index.html` | 3 Affiliate-Cards |
| `<footer>` | `index.html` | Disclaimer + Berechnungsgrundlagen |
| Modal | `index.html` | Branchenauswahl-Dialog (am Ende des `<div class="wrap">`) |
| Fiskalkonstanten | `shared/fiskal-konstanten.js` | Einzige Quelle für SVS/ESt/GFB/USt-Werte, geteilt mit dem Wachstum-Modul |
| `<script>` | `index.html` ~552–674 | Steuerlogik (liest `FISKAL.*`) + DOM-Bindings |

Die gesamte Berechnung läuft client-seitig in Vanilla JS, kein Framework. Bis auf die ausgelagerten Fiskalkonstanten ist `index.html` weiterhin eine einzige Datei ohne Build-Step.

---

## 2. Berechnungslogik (Kern des Tools)

**Ziel:** Gegeben ein gewünschtes Monats-Netto, finde den Stundensatz, der nach SVS und Einkommensteuer genau dieses Netto übrig lässt.

Der Rechenweg ist nicht direkt auflösbar (SVS und ESt hängen vom Gewinn ab, der wiederum vom Ergebnis abhängt), deshalb wird er **numerisch per Bisektion gelöst**:

```
solveG(targetNet, neu)
  → sucht per Bisektion (80 Iterationen) den Gewinn G,
    sodass fromG(G).netto == targetNet

fromG(G, neu)
  → SVS  = 26,83 % von G (gedeckelt bei Höchstbeitragsgrundlage), + Unfallversicherung
  → SVS  = mindestens SVS_MIN (bzw. SVS_MIN_NEU für Neugründer)
  → zu versteuernder Gewinn = G − SVS
  → Grundfreibetrag = 15 % davon, gedeckelt bei GFB_CAP
  → ESt = progressiv über BRACKETS auf (Gewinn − SVS − Grundfreibetrag)
  → netto = G − SVS − ESt

Stundensatz = (G + Betriebskosten) / verrechenbare Jahresstunden
verrechenbare Jahresstunden = Arbeitstage × Stunden/Tag × fakturierbarer Anteil
```

Diese Bisektion ist der einzige nicht-triviale Teil — bei Änderungen an der Steuerlogik **immer gegen das `fromG`-Modell testen, nicht gegen `solveG`** (also: Gewinn reinstecken, Netto-Ergebnis von Hand mit einem externen Rechner gegenprüfen).

---

## 3. Steuerliche Konstanten — Stand 2026, AT

Alle Werte sitzen oben im `<script>`-Block (Suche nach `--- Austria constants ---`). **Diese Zahlen ändern sich jährlich** (kalte Progression, Anpassung der SVS-Höchstbeitragsgrundlage) — vor jeder Saison neu validieren, idealerweise gegen wko.at oder svs.at.

```js
SVS_RATE      = 0.2683     // 18,5 % Pension + 6,8 % Kranken + 1,53 % Selbständigenvorsorge
SVS_UV        = 155.40     // Unfallversicherung, fix pro Jahr
SVS_MAX_BASE  = 97020      // Höchstbeitragsgrundlage/Jahr (8.085 €/Monat)
SVS_MIN       = 1929.60    // Mindestbeitrag/Jahr im Regelfall
SVS_MIN_NEU   = 1000       // ⚠️ GROBE NÄHERUNG für Neugründer — siehe Abschnitt 5
GFB_RATE      = 0.15       // Grundfreibetrag (Teil des Gewinnfreibetrags)
GFB_CAP       = 33000      // Grundfreibetrag gilt bis 33.000 € Gewinn
KLEIN         = 55000      // Kleinunternehmer-/USt-Grenze
```

Einkommensteuer-Tarifstufen 2026 (`BRACKETS`, progressiv, `[Obergrenze, Grenzsteuersatz]`):

| bis € | Satz |
|---|---|
| 13.539 | 0 % |
| 21.992 | 20 % |
| 36.458 | 30 % |
| 70.365 | 40 % |
| 104.859 | 48 % |
| 1.000.000 | 50 % |
| darüber | 55 % |

Quellen (Stand der Recherche: Juni 2026): wko.at/steuern, finanz.at, team23tax.at, kalkuel.at, gewieft.at — Werte stimmten in allen Quellen überein.

---

## 4. Branchenvergleich (`INDUSTRIES`-Array)

Sitzt im Script bei `// --- industry benchmarks ---`. Jede Branche ist `{name, lo, hi}` in €/h netto:

```js
var INDUSTRIES = [
  {name:'Texten & Übersetzen', lo:50, hi:80},
  {name:'Grafik & Design', lo:60, hi:100},
  {name:'Webentwicklung', lo:70, hi:120},
  {name:'IT-Consulting & Software', lo:90, hi:150},
  {name:'Virtuelle Assistenz', lo:30, hi:55},
  {name:'Marketing & Social Media', lo:50, hi:90},
  {name:'Coaching & Beratung', lo:70, hi:130},
  {name:'Fotografie & Video', lo:55, hi:100},
  {name:'Rechtsberatung', lo:150, hi:250}
];
```

**Wichtig:** Diese Werte sind grobe Richtwerte aus Online-Quellen (primär infinia.at), keine belastbare Studie. Im Footer-Disclaimer entsprechend kommuniziert. Branche hinzufügen/ändern = einfach eine Zeile im Array editieren, der Rest (Modal-Liste, Vergleichslogik) reagiert automatisch.

Anzeige-Logik (`updateBenchmark()`): vergleicht den berechneten Stundensatz mit `[lo, hi]` und zeigt „darunter" / „im Rahmen" / „darüber" als farbiges Badge.

---

## 5. Bekannte Vereinfachungen / TODOs für mehr Genauigkeit

Diese Punkte sind bewusste Vereinfachungen für einen schnellen Web-Rechner, kein Fehler — aber relevant, falls die Genauigkeit später erhöht werden soll:

- **`SVS_MIN_NEU = 1000`** ist eine grobe Schätzung, keine recherchierte offizielle Zahl. Die echten reduzierten Mindestbeitragsgrundlagen für Neugründer (erste 3 Jahre, NeuFöG) sind komplexer gestaffelt und ändern sich je nach Jahr der Gründung. Vor Launch idealerweise mit svs.at gegenprüfen oder explizit als "~Schätzung" labeln.
- **Gewinnfreibetrag** ist nur der Grundfreibetrag (15 % bis 33.000 €) abgebildet. Der investitionsbedingte Gewinnfreibetrag (für Gewinne über 33.000 €, gestaffelt, an Investitionen gekoppelt) fehlt — das ist Absicht, da er individuell stark variiert und ohne Investitionsangaben nicht seriös schätzbar ist.
- **Keine Kleinunternehmerpauschalierung** als Alternative zur Ist-Berechnung — der Rechner geht von „echten" Betriebsausgaben aus, die der Nutzer selbst einträgt.
- **Keine Kammerumlage, kein Mehrfachversicherungs-Sonderfall** (z. B. gleichzeitig angestellt + selbstständig).
- Alle Ergebnisse sind **Jahresdurchschnitte** — keine Berücksichtigung von Progressionseffekten bei stark schwankendem Gewinn übers Jahr.

→ Footer-Disclaimer deckt das bereits ab ("grobe Orientierung, keine Steuerberatung"). Bei Erweiterung der Genauigkeit entsprechend nachschärfen oder den Disclaimer-Text lockern.

---

## 6. UI-Komponenten, die bei Weiterbau wichtig sind

### Tage-Slider-Benchmark (gerade gefixt)
- `.range-wrap` umschließt Slider + Tick + Label, `position:relative`.
- `.tick` ist ein 2px breiter Strich in `var(--svs)` (Gold-Ton, dieselbe Variable wie das SVS-Segment in der Ledger-Bar), `position:absolute`, höher als der Track (`top:-7px`, `height:18px`), damit er auch bei Überlappung mit dem Daumen sichtbar bleibt.
- `.tick-label` sitzt bei `top:16px`, klar unterhalb von Tick und Daumen.
- Positionierung erfolgt in JS (`positionTageTick()`): berechnet `%`-Position aus `min`/`max`/Zielwert (fix 220) und setzt `left` auf Tick und Label.
- **Wichtig:** der Slider-Track selbst darf **nicht** `background:transparent` bekommen — das war der Bug aus dem Screenshot. Der native `var(--line)`-Track aus der allgemeinen `input[type=range]`-Regel muss durchscheinen, sonst fehlt die Linie, an der der Daumen "entlanggleitet".
- Falls weitere Slider einen Benchmark-Tick bekommen sollen: gleiches Muster (`.range-wrap` + `.tick` + `.tick-label` + eigene `position...Tick()`-Funktion) kopieren und den Zielwert anpassen.

### Branchen-Modal
- Trigger: `#bench-trigger` (Pill-Button im Ergebnis-Panel) → `openModal()`.
- Liste wird dynamisch aus `INDUSTRIES` gebaut (`buildIndustryList()`), kein manuelles HTML pro Branche nötig.
- Schließen via: X-Button, Klick auf Backdrop, Escape-Taste — alle drei Pfade führen zu `closeModal()`, das den Fokus zurück auf den Trigger setzt (Barrierefreiheit).
- Auswahl setzt `selectedIndustry` (Modulscope-Variable) und ruft `update()` neu auf, damit die Vergleichszeile sofort erscheint.

### Ledger-Bar (Wohin geht jeder Euro)
- Vier `.seg`-Divs mit `width` in % aus JS gesetzt, Summe immer 100 %.
- Farben sind als CSS-Variablen zentral definiert (`--betrieb`, `--svs`, `--est`, `--netto`) — bei Rebranding nur dort ändern.

---

## 7. Offene Punkte für den Launch (nicht vergessen)

- **Affiliate-Links sind Platzhalter — und die ganze Section blendet sich automatisch aus, bis mindestens einer live ist.** Suche im HTML nach `<!-- AFFILIATE:` (3 Stellen, je eine Card). `href="#"` durch echten Tracking-Link ersetzen, `rel="sponsored noopener"` beibehalten (Google-Vorgabe für bezahlte Links). Ein kleines IIFE am Ende des Scripts (`toggleAffiliateCards()`) prüft beim Laden jede `[data-affiliate-card]`: Karten mit `href="#"` werden einzeln ausgeblendet, und falls **keine** Karte einen echten Link hat, verschwindet die ganze "Die nächsten Schritte"-Section inklusive Überschrift (kein halbleerer Bereich auf der Live-Seite). Sobald du auch nur einen Link einträgst, erscheint die Section automatisch mit nur dieser einen Karte — die anderen bleiben verborgen, bis auch sie befüllt sind. Kein manuelles Ein-/Auskommentieren von HTML nötig, einfach `href` ändern und neu hochladen.
- **Geschäftskonto-Card: N26 Business statt Qonto.** Ursprünglich war Qonto als Partner vorgesehen, wurde aber verworfen: Qonto hat zwar seit 2024 ein reguläres Produktangebot in Österreich (eigene `qonto.com/de-at`-Domain, rechtliche AT-Tätigkeitsbasis über die OLINDA-Zweigniederlassung), aber **kein eigenes AT-Affiliate-Programm bei Awin** — im Awin-Dashboard tauchen nur Qonto NL, ES, FR und DE als separate Programme auf, kein AT. Produktverfügbarkeit und Affiliate-Programm-Abdeckung sind zwei verschiedene Dinge, die hier auseinanderfallen.
  **N26 Business** ist die gewählte Alternative: ebenfalls klar in Österreich aktiv (eigene `n26.com/de-at`-Domain, Östereich explizit in der Liste der Tätigkeitsländer), speziell für Freelancer/EPU positioniert ("N26 Business Smart"), und die Spaces-Unterkonten mit eigener IBAN passen inhaltlich gut zum 33%-Rücklagen-Feature dieser Seite. Einschränkung, die der Caveat-Text transparent macht: Das Konto gilt nur für Einzelunternehmer:innen unter eigenem Namen, nicht für Personen-/Kapitalgesellschaften, und nicht parallel zu einem privaten N26-Konto — für die meisten EPU-Nutzer:innen von Satzwert unproblematisch, aber erwähnenswert.
  **Status der Anbindung:** N26 hat kein Awin-Programm, sondern ein direktes Partnerprogramm. Anfrage läuft über `affiliate@n26.com`, danach gibt es ein individuelles Angebot — kein Self-Service-Signup wie bei Awin. Die Anfrage ist gestellt, aber die Antwort steht noch aus. Bis dahin bleibt `href="#"` in der Card, wodurch sie automatisch ausgeblendet bleibt (siehe Auto-Hide-Mechanismus oben). Sobald N26 antwortet und einen Tracking-Link liefert, einfach `href="#"` ersetzen — Card und Section erscheinen dann automatisch, keine weiteren Anpassungen nötig.
  **Falls N26 nicht antwortet oder ablehnt:** nächster Kandidat wäre Holvi (explizit für Freelancer positioniert, FI-IBAN) oder ein Re-Versuch bei Qonto über eine direkte Anfrage außerhalb von Awin (ähnliches Modell wie N26/exali). Noch nicht geprüft, da N26 zuerst priorisiert wurde.
- **Versicherungs-Card: durchblicker.at statt finanzchef24/exali als Primärpartner.** finanzchef24 wurde geprüft und verworfen — alle dort gelisteten Versicherer (INTER, Janitos, mailo, Markel, Volkswohl Bund, Württembergische, Zurich u.a.) sind rein deutsche Anbieter ohne erkennbaren österreichischen Marktzugang; für die AT-Zielgruppe nicht nutzbar. **durchblicker.at** ist die österreichische Alternative: etabliertes Vergleichsportal mit Sitz Wien, eigenes Affiliate-Programm über `partner.durchblicker.at/affiliates` (Self-Service-Signup, bei Fragen `affiliate@durchblicker.at` oder 01/30 60 900), vergleicht tatsächlich mehrere Anbieter — deshalb ist der CTA-Text "Versicherung vergleichen" hier korrekt und nicht irreführend (anders als bei einer Single-Partner-Karte).
- **exali bleibt als möglicher Zweit-/Ergänzungspartner offen.** Eigenes Kooperationsprogramm (kein Pay-per-Sale, sondern Marketingkooperation mit exklusiven Sonderkonditionen für die Zielgruppe + ggf. eigener Promo-Code oder Co-Branding-Landingpage). Kein Self-Service — Anfrage direkt per E-Mail an `info@exali.de` oder Tel. `+49 821 8099 460`, da das Programm explizit als "Kooperationspartner werden" (nicht als automatisiertes Affiliate-Programm) angelegt ist und auf persönliche Anfragen ausgelegt zu sein scheint. Falls diese Kooperation zustande kommt: als zusätzliche Card oder Zweitlink einbauen, CTA dann bewusst "ansehen" statt "vergleichen" (siehe Begründung weiter oben — exali selbst vergleicht nicht, sondern bietet ein eigenes Produkt).
- Aktuell **keine Analytics/Tracking-Snippet** eingebaut — falls gewünscht (z. B. Plausible, Fathom, GA4), vor `</body>` einfügen.
- Kein Cookie-Banner nötig, solange kein Tracking mit Cookies läuft (rein clientseitige Berechnung, kein Server-Call). Sobald echte Affiliate-Links aktiv sind, ist das in der Datenschutzerklärung bereits mitgedacht (siehe Abschnitt 9).
- `lang="de-AT"` ist gesetzt — bei Mehrsprachigkeit (z. B. DE-Variante mit deutschen Steuersätzen) eher eine zweite Datei als i18n innerhalb dieser bauen, da die komplette Steuerlogik anders ist.

---

## 9. Dateistruktur, Impressum, Datenschutz, Logo

Das Projekt ist jetzt mehr als eine Datei. Für den Upload gehört alles in einen gemeinsamen Ordner mit dieser Struktur:

```
/ (Domain-Root)
  index.html              ← bisher "stundensatz-rechner.html", für den Upload umbenennen
  datenschutz.html
  logo/
    satzwert-icon.svg          ← Icon allein, 64×64, für allgemeine Verwendung
    satzwert-favicon.svg       ← Icon-Variante mit kräftigerem inneren Quadrat, optimiert für 16–32px (Browser-Tab)
    satzwert-wordmark.svg      ← Icon + Schriftzug "Satzwert", dunkle Schrift, für helle Hintergründe
    satzwert-wordmark-dark-bg.svg ← gleiche Wortmarke, weiße Schrift, für dunkle Hintergründe (z. B. Footer, Social-Sharing-Bilder)
```

**Wichtig:** Alle internen Links (`index.html`, `datenschutz.html`, `logo/satzwert-favicon.svg`) sind relativ und gehen davon aus, dass die Hauptdatei `index.html` heißt und im selben Verzeichnis wie `datenschutz.html` und der `logo/`-Ordner liegt. Wird die Hauptdatei anders benannt oder in einen Unterordner gelegt, brechen diese Links — dann `href`/`src`-Pfade entsprechend anpassen.

**Impressum** sitzt nicht auf einer eigenen Unterseite, sondern als Modal direkt in `index.html` (Button im Footer, `id="impressum-trigger"`, öffnet `#impressum-backdrop`). Das hält es mit einem Klick erreichbar, ohne eine zusätzliche Seite laden zu müssen. Inhalt: Robikett e.U., Robert Musil, Dr. Schreber-Gasse 18, 2442 Unterwaltersdorf, FN 596829s (Wiener Neustadt), UID ATU78900879 — Angaben gemäß § 5 ECG und § 25 MedienG. Bei Änderungen (z. B. neue Adresse) im `<div class="legal-text">`-Block direkt im HTML editieren, keine separate Datenquelle.

**Datenschutz** ist bewusst eine eigene Seite (`datenschutz.html`), nicht Teil des Modals — Datenschutzerklärungen werden oft separat verlinkt/erwartet (z. B. von Affiliate-Partnern, die einen Datenschutz-Link in der Cookie-Consent-Kette prüfen) und sind meist zu lang fürs Modal-Format. Sie hat `<meta name="robots" content="noindex">`, damit sie nicht eigenständig in Google rankt. Sie deckt bereits jetzt den Affiliate-Link-Hinweis ab (Abschnitt 6 der Datenschutzerklärung), unabhängig davon ob die Links schon live sind — das muss bei Aktivierung der echten Links **nicht** nachträglich ergänzt werden, ist schon drin.

**Logo:** Im Seiten-Header selbst ist das Logo inline als HTML/CSS gebaut (`.logo`-Klasse mit `.mark`-Quadrat + Text "Satzwert"), nicht als eingebundene SVG-Datei — das vermeidet einen zusätzlichen Lade-Request für ein so kleines Element. Die SVG-Dateien im `logo/`-Ordner sind für externe Verwendung gedacht: Favicon (bereits verlinkt), Social-Media-Profile, Co-Branding-Material für Partner (z. B. falls durchblicker oder exali eine gebrandete Landingpage wollen), Druckmaterial. Farbwerte sind hart codiert (`#0f766e`, `#15171f`, `#ffffff`), bewusst nicht auf CSS-Variablen verwiesen, da SVG-Dateien außerhalb des Seitenkontexts (z. B. in einem Mail-Client oder Social-Media-Profilbild) keinen Zugriff auf die `:root`-Variablen aus `index.html` haben. Bei einer Farbänderung der Marke müssen Hauptseite und Logo-Dateien daher beide manuell angepasst werden.

---

## 8. Quick-Reference: Wenn sich die Steuerwerte nächstes Jahr ändern

1. `BRACKETS`-Array aktualisieren (neue Tarifstufen-Grenzen von wko.at).
2. `SVS_RATE`, `SVS_UV`, `SVS_MAX_BASE`, `SVS_MIN` aus dem aktuellen SVS-Beitragswesen-Merkblatt übernehmen.
3. `GFB_CAP` prüfen (meist stabil, ändert sich selten).
4. `KLEIN` (USt-Grenze) prüfen — war zuletzt 2025 von 35.000 € auf 55.000 € angehoben worden.
5. Footer-Text (`<footer><p class="vals">`) und `<title>`/`<meta description>` Jahreszahl mit hochziehen.
6. `INDUSTRIES`-Array bei Gelegenheit mit frischeren Marktzahlen abgleichen (optional, ändert sich langsamer).
