PageSourceSearch

https://agrar-antrag-helfer.onrender.com/

html agrar-antrag-helfer.onrender.com collected 2026-10-03 11:38:49 UTC 118,944 bytes, 1,953 lines download raw bytes

1<!DOCTYPE html>
2<html lang="de">
3<head>
4  <meta charset="UTF-8">
5  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6  <title>Agrado</title>
7  <link rel="icon" type="image/png" href="assets/favicon.png?v=1">
8  <!-- "?v=84" an style.css/den 
8<script>-Tags unten: reine Cache-Busting-
9       Kennung ohne eigene Bedeutung — bei jeder inhaltlichen Änderung an
10       einer dieser Dateien hier hochzählen, damit Browser nach einem
11       Deployment garantiert die neue Version laden (statt ggf. eine
12       bereits im Tab zwischengespeicherte alte Datei weiterzuverwenden,
13       was zu genau der Art "Teile der Seite fehlen/funktionieren nicht"-
14       Fehlern führen kann, die sich sonst nur durch einen manuellen
15       Hard-Reload beheben lassen). Ergänzt die serverseitige
16       "Cache-Control: no-cache" in server.js, die nur künftige
17       Zwischenspeicherung verhindert, aber bereits vorher gecachte Dateien
18       nicht rückwirkend erneuert. -->
19  <link rel="stylesheet" href="style.css?v=84">
20</head>
21<body>
22  <header>
23    <div class="header-content">
24      <div class="brand">
25        <span class="logo-badge" aria-hidden="true">
26          <img src="assets/logo.png?v=1" alt="" width="896" height="612">
27        </span>
28        <div>
29          <h1>Agrado</h1>
30          <p class="subtitle">Antragstyp wählen, Dokument hochladen und Angaben prüfen</p>
31        </div>
32      </div>
33      <!-- Österreich-Warteliste: nur auf der öffentlichen Landingpage sinnvoll
34           (kein Login nötig, vor jeder App-Nutzung), daher rechts im
35           Header statt in der Seitenleiste/App — sichtbar/versteckt
36           zusammen mit #landing-view (siehe auth-ui.js: showLanding/
37           showAuthForm/showSubscribeGate/showAppView). Nutzt bewusst
38           dieselben Element-IDs wie zuvor (waitlist.js liest per
39           getElementById, unabhängig von der DOM-Position). -->
40      <div id="header-waitlist-banner" class="header-waitlist-banner hidden">
41        <form id="waitlist-oesterreich-form" class="header-waitlist-form">
42          <span class="header-waitlist-label">🇦🇹 Agrado auch für Österreich? Unverbindlich eintragen:</span>
43          <div class="header-waitlist-input-row">
44            <input
45              type="email"
46              id="waitlist-oesterreich-email"
47              name="email"
48              placeholder="[email protected]"
49              required
50              aria-label="E-Mail-Adresse für die Österreich-Warteliste"
51            >
52            <button type="submit" class="header-waitlist-button" id="waitlist-oesterreich-button">
53              Eintragen
54            </button>
55          </div>
56        </form>
57        <p id="waitlist-oesterreich-success" class="header-waitlist-success hidden">
58          Danke, wir melden uns, sobald es losgeht.
59        </p>
60        <p id="waitlist-oesterreich-error" class="header-waitlist-error hidden"></p>
61        <p class="header-waitlist-privacy-hint">
62          Nur zur Benachrichtigung, keine Weitergabe. <a href="/datenschutz">Datenschutzerklärung</a>.
63        </p>
64      </div>
65
66      <!-- Globale Suche über alle bereits gespeicherten Anträge/Bescheide/
67           Maschinen/Versicherungen/Pachtverträge/Rechnungen/Termine des
68           aktiven Betriebs (siehe global-search.js, GET /api/search in
69           server.js) — sichtbar/versteckt zusammen mit sidebar/account-bar
70           (siehe auth-ui.js), da sie nur innerhalb der eingeloggten App
71           Sinn ergibt. -->
72      <div id="global-search" class="global-search hidden">
73        <div class="global-search-input-wrapper">
74          <span class="global-search-icon" aria-hidden="true">🔍</span>
75          <input
76            type="search"
77            id="global-search-input"
78            class="global-search-input"
79            placeholder="App durchsuchen …"
80            aria-label="App durchsuchen (Funktionen, Anträge, Bescheide, Dokumente, Termine)"
81            autocomplete="off"
82          >
83        </div>
84        <div id="global-search-panel" class="global-search-panel hidden">
85          <p id="global-search-status" class="hint hidden"></p>
86          <div id="global-search-results" class="global-search-results"></div>
87        </div>
88      </div>
89
90      <div id="account-bar" class="account-bar hidden">
91        <!-- Nur auf schmalen Bildschirmen sichtbar (siehe style.css) — öffnet
92             die Seitenleiste als Overlay, da sie dort standardmäßig
93             ausgeblendet ist (siehe sidebar.js). -->
94        <button type="button" id="sidebar-mobile-toggle" class="sidebar-mobile-toggle" aria-label="Menü öffnen" aria-expanded="false">
95          <span aria-hidden="true">☰</span>
96        </button>
97        <span id="account-email" class="account-email"></span>
98        <span id="account-betrieb" class="account-betrieb hidden"></span>
99        <div class="notification-bell-wrapper">
100          <button type="button" id="notification-bell-button" class="notification-bell-button" aria-label="Benachrichtigungen für Ihren Betrieb">
101            <span aria-hidden="true">🔔</span>
102            <span id="notification-bell-badge" class="notification-bell-badge hidden">0</span>
103          </button>
104          <div id="notification-bell-panel" class="notification-bell-panel hidden">
105            <h3>Neuigkeiten für Ihren Betrieb</h3>
106            <p class="hint">Nur Meldungen, die zur Art Ihres aktiven Betriebs passen (grob aus Ihren gespeicherten Angaben abgeleitet).</p>
107            <div id="notification-bell-list" class="notification-bell-list"></div>
108          </div>
109        </div>
110        <button type="button" id="logout-button" class="logout-button">Abmelden</button>
111      </div>
112    </div>
113  </header>
114
115  <div class="app-shell">
116    <!-- Persistente Seitenleiste — unabhängig davon, welche konkrete
117         eingeloggte Ansicht (App-Seiten oder die eingebettete "Was
118         brauche ich?"-Checkliste) gerade aktiv ist. Sichtbarkeit wird
119         zusammen mit #account-bar gesteuert (siehe sidebar.js/auth-ui.js),
120         nicht einzeln pro Ansicht — sonst würde sie beim Wechsel z. B. zur
121         Checkliste verschwinden, obwohl man ja gerade IN der App ist. -->
122    <nav id="sidebar" class="sidebar hidden">
123      <button type="button" id="sidebar-collapse-toggle" class="sidebar-collapse-toggle" aria-label="Seitenleiste einklappen" aria-expanded="true">
124        <span aria-hidden="true">«</span>
125      </button>
126      <div class="sidebar-nav">
127        <button type="button" class="sidebar-link" data-page="dashboard">
128          <span class="sidebar-link-icon" aria-hidden="true">🏠</span><span class="sidebar-link-label">Übersicht</span>
129        </button>
130        <button type="button" class="sidebar-link" data-page="posteingang">
131          <span class="sidebar-link-icon" aria-hidden="true">📥</span><span class="sidebar-link-label">Dokumente einsortieren</span>
132        </button>
133        <button type="button" class="sidebar-link" data-page="dokumente">
134          <span class="sidebar-link-icon" aria-hidden="true">🗂️</span><span class="sidebar-link-label">Meine Dokumente</span>
135        </button>
136        <button type="button" class="sidebar-link" data-page="betrieb-chat">
137          <span class="sidebar-link-icon" aria-hidden="true">💬</span><span class="sidebar-link-label">Frag deinen Betrieb</span>
138        </button>
139        <button type="button" class="sidebar-link" data-page="antrag">
140          <span class="sidebar-link-icon" aria-hidden="true">📝</span><span class="sidebar-link-label">Antrag stellen</span>
141        </button>
142        <button type="button" class="sidebar-link" data-page="foerderantrag">
143          <span class="sidebar-link-icon" aria-hidden="true">💶</span><span class="sidebar-link-label">Förderantrag</span>
144        </button>
145        <button type="button" class="sidebar-link" data-page="fristen">
146          <span class="sidebar-link-icon" aria-hidden="true">⏳</span><span class="sidebar-link-label">Fristen</span>
147        </button>
148        <button type="button" class="sidebar-link" data-page="applications">
149          <span class="sidebar-link-icon" aria-hidden="true">📂</span><span class="sidebar-link-label">Meine gespeicherten Anträge</span>
150        </button>
151        <button type="button" class="sidebar-link" data-page="betriebe">
152          <span class="sidebar-link-icon" aria-hidden="true">🚜</span><span class="sidebar-link-label">Meine Betriebe</span>
153        </button>
154        <button type="button" class="sidebar-link" data-page="tracker">
155          <span class="sidebar-link-icon" aria-hidden="true">📊</span><span class="sidebar-link-label">Eigene Tracker</span>
156        </button>
157        <button type="button" class="sidebar-link" data-page="team">
158          <span class="sidebar-link-icon" aria-hidden="true">👥</span><span class="sidebar-link-label">Team verwalten</span>
159        </button>
160        <button type="button" class="sidebar-link" data-page="activity">
161          <span class="sidebar-link-icon" aria-hidden="true">📜</span><span class="sidebar-link-label">Aktivitätsverlauf</span>
162        </button>
163        <button type="button" class="sidebar-link" data-page="chronik">
164          <span class="sidebar-link-icon" aria-hidden="true">🕰️</span><span class="sidebar-link-label">Betriebschronik</span>
165        </button>
166        <button type="button" class="sidebar-link" data-page="calendar">
167          <span class="sidebar-link-icon" aria-hidden="true">📅</span><span class="sidebar-link-label">Kalender</span>
168        </button>
169        <button type="button" class="sidebar-link" data-page="checklist">
170          <span class="sidebar-link-icon" aria-hidden="true">📋</span><span class="sidebar-link-label">Was brauche ich?</span>
171        </button>
172        <button type="button" class="sidebar-link" data-page="subscription">
173          <span class="sidebar-link-icon" aria-hidden="true">💳</span><span class="sidebar-link-label">Mein Abo</span>
174        </button>
175        <button type="button" class="sidebar-link" data-page="account">
176          <span class="sidebar-link-icon" aria-hidden="true">⚙️</span><span class="sidebar-link-label">Kontoeinstellungen</span>
177        </button>
178      </div>
179    </nav>
180    <!-- Nur auf schmalen Bildschirmen sichtbar, während die Seitenleiste als
181         Overlay geöffnet ist — schließt sie bei Klick daneben (siehe
182         sidebar.js). -->
183    <div id="sidebar-backdrop" class="sidebar-backdrop hidden"></div>
184
185  <main>
186    <!-- ===================== Öffentliche Startseite ===================== -->
187    <div id="landing-view" class="narrow-view">
188      <section class="card hero-identity-card">
189        <h2 class="hero-identity-title">Werde wieder Chef deiner Zeit.</h2>
190        <p class="hero-identity-subtext">
191          Agrado erledigt Anträge, Förderungen und Dokumentation für dich, damit du das tust, wofür du eigentlich
192          angetreten bist: auf dem Hof stehen, nicht am Schreibtisch.
193        </p>
194      </section>
195
196      <section class="card hero-card">
197        <h2 class="hero-title">Förderanträge ausfüllen in Minuten statt Stunden</h2>
198        <p class="hero-lead">
199          Agrado liest Ihre hochgeladenen Unterlagen automatisch aus und trägt die
200          wichtigsten Angaben direkt in die passenden Felder ein. Sie prüfen in Ruhe,
201          korrigieren bei Bedarf – und übernehmen erst, wenn wirklich alles stimmt.
202        </p>
203        <div class="hero-actions">
204          <button type="button" class="submit-button hero-cta" data-show-view="register">Kostenlos testen</button>
205          <p class="hint subscribe-trial-highlight hero-trial-hint">
206            <strong>3 Tage kostenlos testen</strong> — keine Kreditkarte nötig.
207          </p>
208          <button type="button" class="link-button" data-show-view="login">Bereits ein Konto? Anmelden</button>
209        </div>
210
211        <!-- Kompakte Vertrauens-Signale direkt beim Haupt-CTA, damit
212             Besucher sie VOR einem Klick sehen -- bewusst als kurze,
213             pillenförmige Hinweise statt langer Absätze (siehe Auftrag:
214             "kompakt und nicht überladen"). Wortlaut deckt sich mit
215             datenschutz.html (kein amtliches Portal, Agrado reicht selbst
216             nichts bei einer Behörde ein -- siehe z. B. "bevor Sie bei der
217             Behörde einreichen" weiter unten in der App) und
218             fileEncryption.js (echte AES-256-GCM-Verschlüsselung der
219             hochgeladenen Dokumente, kein Marketing-Versprechen ohne
220             technische Grundlage). -->
221        <div class="hero-trust-badges">
222          <span class="hero-trust-badge"><span aria-hidden="true">🛡️</span> Kein Amtsportal — Agrado meldet nichts an Behörden, Ihre Daten bleiben bei Ihnen</span>
223          <span class="hero-trust-badge"><span aria-hidden="true">🔒</span> Ihre Dokumente werden verschlüsselt gespeichert</span>
224        </div>
225
226        <button type="button" id="landing-checklist-button" class="export-option-button checklist-entry-button">
227          📋 Was brauche ich für meinen Antrag?
228        </button>
229      </section>
230
231      <!-- Sinngemäß wiedergegebenes (nicht wörtliches) Feedback von
232           Landwirt:innen zu Agrado -- ganz ohne Namen (nur "Landwirt" /
233           "Landwirtin") aus Datenschutzgründen, direkt nach dem Hero
234           platziert, damit es noch vor der ausführlichen Feature-Liste als
235           sozialer Beleg wirkt. -->
236      <section class="card hero-testimonials-card">
237        <h3 class="hero-testimonials-heading">Das sagen Landwirte, die Agrado schon getestet haben:</h3>
238        <div class="hero-testimonials">
239          <blockquote class="hero-testimonial">
240            <p>„Die App ist wirklich gelungen — ich würde sie selbst nutzen und glaube, dass sie vielen Betrieben die Arbeit erleichtern kann.“</p>
241            <cite>Landwirt</cite>
242          </blockquote>
243          <blockquote class="hero-testimonial">
244            <p>„Beeindruckend, wie durchdacht hier das Thema Papierkram angegangen wurde. Da steckt echt Potenzial drin.“</p>
245            <cite>Landwirtin</cite>
246          </blockquote>
247        </div>
248      </section>
249
250      <section class="card">
251        <h2>Mehr als nur Formulare ausfüllen</h2>
252        <p class="hint">
253          Agrado begleitet Ihren Betrieb von der ersten Unterlage bis zur nächsten Frist —
254          ein kurzer Überblick über die wichtigsten Vorteile:
255        </p>
256        <div class="landing-benefits-grid">
257          <div class="landing-benefit-tile">
258            <span class="landing-benefit-icon" aria-hidden="true">📄</span>
259            <h3>20 Antragstypen automatisch ausgefüllt</h3>
260            <p>Vom Mehrfachantrag bis zur Berufsgenossenschaft: Dokument hochladen, Angaben prüfen, übernehmen — fertig.</p>
261          </div>
262          <div class="landing-benefit-tile">
263            <span class="landing-benefit-icon" aria-hidden="true">📬</span>
264            <h3>Behördenbriefe verständlich erklärt</h3>
265            <p>Bescheide und amtliche Schreiben in einfacher Sprache erklärt — mit allen Fristen und den nötigen nächsten Schritten auf einen Blick.</p>
266          </div>
267          <div class="landing-benefit-tile">
268            <span class="landing-benefit-icon" aria-hidden="true">📥</span>
269            <h3>Ein Postfach für den ganzen Papierkram</h3>
270            <p>Foto, Scan oder PDF: Agrado erkennt automatisch, worum es sich handelt, und ordnet jedes Dokument richtig ein.</p>
271          </div>
272          <div class="landing-benefit-tile">
273            <span class="landing-benefit-icon" aria-hidden="true">📅</span>
274            <h3>Fristen nie wieder verpassen</h3>
275            <p>Alle wichtigen Termine und Bescheid-Fristen landen automatisch in Ihrem Kalender — rechtzeitig erinnert statt in letzter Minute.</p>
276          </div>
277          <div class="landing-benefit-tile">
278            <span class="landing-benefit-icon" aria-hidden="true">💬</span>
279            <h3>Frag einfach – Ihr Betrieb antwortet</h3>
280            <p>Stellen Sie Fragen in eigenen Worten — die Antwort kommt sofort und basiert auf Ihren eigenen gespeicherten Daten.</p>
281          </div>
282          <div class="landing-benefit-tile">
283            <span class="landing-benefit-icon" aria-hidden="true">💶</span>
284            <h3>Fördergelder entdecken, die sonst niemand findet</h3>
285            <p>Agrado durchsucht automatisch, welche zusätzlichen Förderprogramme zu Ihrem Betrieb passen könnten.</p>
286          </div>
287          <div class="landing-benefit-tile">
288            <span class="landing-benefit-icon" aria-hidden="true">👥</span>
289            <h3>Team-Zugriff für Mitarbeiter &amp; Berater</h3>
290            <p>Laden Sie Mitarbeitende oder Ihren Steuerberater mit passenden Rollen und Rechten ein — jede:r sieht nur, was er oder sie braucht.</p>
291          </div>
292          <div class="landing-benefit-tile">
293            <span class="landing-benefit-icon" aria-hidden="true">⚠️</span>
294            <h3>Stolperfallen frühzeitig erkennen</h3>
295            <p>Agrado prüft Ihre Angaben auf Auffälligkeiten und macht Sie rechtzeitig darauf aufmerksam — bevor das Amt nachfragt.</p>
296          </div>
297        </div>
298        <div class="hero-actions landing-benefits-cta">
299          <button type="button" class="submit-button hero-cta" data-show-view="register">Kostenlos testen</button>
300        </div>
301      </section>
302
303      <section class="card">
304        <h2>So funktioniert's</h2>
305        <div class="landing-steps">
306          <div class="landing-step">
307            <span class="step-number">1</span>
308            <div>
309              <h3>Dokument hochladen</h3>
310              <p class="hint">Laden Sie ein Foto oder PDF hoch — z. B. ein Betriebsdatenblatt oder eine Feldstückskarte.</p>
311            </div>
312          </div>
313          <div class="landing-step">
314            <span class="step-number">2</span>
315            <div>
316              <h3>Automatisch ausfüllen lassen</h3>
317              <p class="hint">Agrado erkennt die relevanten Angaben und trägt sie in die passenden Felder ein.</p>
318            </div>
319          </div>
320          <div class="landing-step">
321            <span class="step-number">3</span>
322            <div>
323              <h3>Prüfen und übernehmen</h3>
324              <p class="hint">Sie kontrollieren die erkannten Angaben, korrigieren bei Bedarf und übernehmen sie — als PDF oder Text für Ihren eigentlichen Antrag.</p>
325            </div>
326          </div>
327        </div>
328        <button type="button" class="submit-button" data-show-view="register">Kostenlos testen</button>
329      </section>
330
331    </div>
332
333    <!-- ===================== Anmeldebereich ===================== -->
334    <div id="auth-view" class="hidden narrow-view">
335      <section class="card auth-card">
336        <!-- Login -->
337        <form id="login-form" class="auth-form">
338          <h2>Anmelden</h2>
339          <div class="field">
340            <label for="login-email">E-Mail-Adresse</label>
341            <input type="email" id="login-email" name="email" autocomplete="username" required>
342          </div>
343          <div class="field">
344            <label for="login-password">Passwort</label>
345            <input type="password" id="login-password" name="password" autocomplete="current-password" required>
346          </div>
347          <p id="login-error" class="auth-error hidden"></p>
348          <button type="submit" class="submit-button">Anmelden</button>
349          <div class="auth-links">
350            <button type="button" class="link-button" data-show-view="forgot">Passwort vergessen?</button>
351            <button type="button" class="link-button" data-show-view="register">Noch kein Konto? Registrieren</button>
352          </div>
353        </form>
354
355        <!-- 2FA: Anmeldecode eingeben (nur, wenn der Nutzer 2FA aktiviert hat
356             UND das Gerät nicht als vertrauenswürdig gemerkt ist) -->
357        <form id="two-factor-form" class="auth-form hidden">
358          <h2>Anmeldecode eingeben</h2>
359          <p class="hint">
360            Wir haben einen 6-stelligen Code an <strong id="two-factor-email"></strong> gesendet. Der Code ist
361            10 Minuten gültig. Auf diesem Gerät wird er die nächsten 30 Tage nicht erneut abgefragt.
362          </p>
363          <p id="two-factor-mail-hint" class="hint hidden">Die E-Mail sollte in wenigen Minuten ankommen. Falls Sie nichts finden, schauen Sie bitte auch in Ihrem Spam-/Junk-Ordner nach.</p>
364          <div class="field">
365            <label for="two-factor-code">Code</label>
366            <input type="text" id="two-factor-code" name="code" inputmode="numeric" pattern="[0-9]{6}" maxlength="6" autocomplete="one-time-code" required>
367          </div>
368          <p id="two-factor-error" class="auth-error hidden"></p>
369          <button type="submit" class="submit-button" id="two-factor-submit-button">Bestätigen</button>
370          <div class="auth-links">
371            <button type="button" class="link-button" data-show-view="login">Zurück zur Anmeldung</button>
372          </div>
373        </form>
374
375        <!-- Registrierung -->
376        <form id="register-form" class="auth-form hidden">
377          <h2>Konto erstellen</h2>
378          <p class="hint subscribe-trial-highlight">
379            <strong><span id="register-trial-days"></span> Tage kostenlos testen</strong> — keine Kreditkarte nötig.
380          </p>
381          <div class="field">
382            <label for="register-email">E-Mail-Adresse</label>
383            <input type="email" id="register-email" name="email" autocomplete="username" required>
384          </div>
385          <div class="field">
386            <label for="register-password">Passwort</label>
387            <input type="password" id="register-password" name="password" autocomplete="new-password" required>
388            <span class="hint">Mindestens 8 Zeichen.</span>
389          </div>
390          <div class="field">
391            <label for="register-password-confirm">Passwort wiederholen</label>
392            <input type="password" id="register-password-confirm" name="passwordConfirm" autocomplete="new-password" required>
393          </div>
394          <div class="field">
395            <label for="register-betrieb-name">Betriebsname</label>
396            <input type="text" id="register-betrieb-name" name="betriebName" placeholder="z. B. Mein Betrieb" maxlength="120">
397            <span class="hint">Für Ihren ersten Betrieb. Weitere Betriebe können Sie später jederzeit hinzufügen.</span>
398          </div>
399          <div class="field">
400            <label for="register-bundesland">Bundesland</label>
401            <select id="register-bundesland" name="bundesland">
402              <option value="">Bitte auswählen (optional)</option>
403            </select>
404            <span class="hint">Damit zeigen wir Ihnen beim Mehrfachantrag die passenden Portal-/Register-Begriffe. Kann auch später geändert werden.</span>
405          </div>
406          <div class="field">
407            <label for="register-betriebsnummer">Betriebsnummer (optional)</label>
408            <input type="text" id="register-betriebsnummer" name="betriebsnummer" placeholder="z. B. 123456789" maxlength="60">
409          </div>
410          <div class="checkbox-field">
411            <label class="checkbox-label" for="register-terms">
412              <input type="checkbox" id="register-terms" required>
413              <span>
414                Ich habe die <a href="/agb" target="_blank" rel="noopener">AGB</a> und die
415                <a href="/datenschutz" target="_blank" rel="noopener">Datenschutzerklärung</a>
416                gelesen und akzeptiere sie.
417              </span>
418            </label>
419          </div>
420          <p id="register-error" class="auth-error hidden"></p>
421          <button type="submit" class="submit-button" id="register-submit-button" disabled>Registrieren</button>
422          <div class="auth-links">
423            <button type="button" class="link-button" data-show-view="login">Bereits ein Konto? Anmelden</button>
424          </div>
425        </form>
426
427        <!-- Passwort vergessen -->
428        <form id="forgot-form" class="auth-form hidden">
429          <h2>Passwort vergessen</h2>
430          <p class="hint">Geben Sie Ihre E-Mail-Adresse ein. Wir schicken Ihnen einen Link zum Zurücksetzen.</p>
431          <div class="field">
432            <label for="forgot-email">E-Mail-Adresse</label>
433            <input type="email" id="forgot-email" name="email" autocomplete="username" required>
434          </div>
435          <p id="forgot-error" class="auth-error hidden"></p>
436          <p id="forgot-success" class="auth-success hidden"></p>
437          <button type="submit" class="submit-button">Link anfordern</button>
438          <div class="auth-links">
439            <button type="button" class="link-button" data-show-view="login">Zurück zur Anmeldung</button>
440          </div>
441        </form>
442
443        <!-- Neues Passwort setzen (via Link aus E-Mail) -->
444        <form id="reset-form" class="auth-form hidden">
445          <h2>Neues Passwort vergeben</h2>
446          <div class="field">
447            <label for="reset-password">Neues Passwort</label>
448            <input type="password" id="reset-password" name="password" autocomplete="new-password" required>
449            <span class="hint">Mindestens 8 Zeichen.</span>
450          </div>
451          <div class="field">
452            <label for="reset-password-confirm">Passwort wiederholen</label>
453            <input type="password" id="reset-password-confirm" name="passwordConfirm" autocomplete="new-password" required>
454          </div>
455          <p id="reset-error" class="auth-error hidden"></p>
456          <p id="reset-success" class="auth-success hidden"></p>
457          <button type="submit" class="submit-button">Neues Passwort speichern</button>
458          <div class="auth-links">
459            <button type="button" class="link-button" data-show-view="login">Zurück zur Anmeldung</button>
460          </div>
461        </form>
462
463        <!-- Team-Einladung annehmen (via Link aus E-Mail) -->
464        <form id="team-invite-form" class="auth-form hidden">
465          <h2>Einladung annehmen</h2>
466          <p id="team-invite-context" class="hint">Einladung wird geladen …</p>
467          <div class="field">
468            <label for="team-invite-password">Passwort vergeben</label>
469            <input type="password" id="team-invite-password" name="password" autocomplete="new-password" required>
470            <span class="hint">Mindestens 8 Zeichen.</span>
471          </div>
472          <div class="field">
473            <label for="team-invite-password-confirm">Passwort wiederholen</label>
474            <input type="password" id="team-invite-password-confirm" name="passwordConfirm" autocomplete="new-password" required>
475          </div>
476          <p id="team-invite-error" class="auth-error hidden"></p>
477          <p id="team-invite-success" class="auth-success hidden"></p>
478          <button type="submit" class="submit-button" id="team-invite-submit-button">Beitreten</button>
479          <div class="auth-links">
480            <button type="button" class="link-button" data-show-view="login">Zurück zur Anmeldung</button>
481          </div>
482        </form>
483      </section>
484    </div>
485
486    <!-- ===================== Kein aktives Abo ===================== -->
487    <div id="subscribe-view" class="hidden narrow-view">
488      <section class="card auth-card">
489        <h2>Abo abschließen</h2>
490        <div id="subscribe-owner-fields">
491          <p class="hint subscribe-trial-highlight">
492            <strong><span id="subscribe-price"></span></strong> — jederzeit kündbar.
493          </p>
494          <p class="hint">
495            Die Zahlung läuft sicher über Stripe — Ihre Kartendaten sehen wir zu keinem Zeitpunkt.
496          </p>
497
498          <details id="billing-details-gate" class="billing-details-block">
499            <summary>Rechnungsdaten hinzufügen (optional)</summary>
500            <p class="hint">
501              Für Ihre Buchhaltung: Diese Angaben erscheinen auf der Stripe-Rechnung. Privatpersonen können
502              sie frei lassen und einfach mit „Abo abschließen“ fortfahren.
503            </p>
504            <form id="billing-details-form-gate">
505              <div class="field">
506                <label for="gate-billing-name">Firmenname / Rechnungsname</label>
507                <input type="text" id="gate-billing-name" name="name" maxlength="200">
508              </div>
509              <div class="field">
510                <label for="gate-billing-address-line1">Straße und Hausnummer</label>
511                <input type="text" id="gate-billing-address-line1" name="addressLine1" maxlength="200">
512              </div>
513              <div class="field">
514                <label for="gate-billing-address-line2">Adresszusatz (optional)</label>
515                <input type="text" id="gate-billing-address-line2" name="addressLine2" maxlength="200">
516              </div>
517              <div class="field-row">
518                <div class="field">
519                  <label for="gate-billing-postal-code">PLZ</label>
520                  <input type="text" id="gate-billing-postal-code" name="postalCode" maxlength="20">
521                </div>
522                <div class="field">
523                  <label for="gate-billing-city">Ort</label>
524                  <input type="text" id="gate-billing-city" name="city" maxlength="120">
525                </div>
526              </div>
527              <div class="field">
528                <label for="gate-billing-vat-id">USt-IdNr. (optional)</label>
529                <input type="text" id="gate-billing-vat-id" name="vatId" maxlength="20" placeholder="z. B. DE123456789">
530              </div>
531              <p id="billing-details-gate-error" class="auth-error hidden"></p>
532              <p id="billing-details-gate-status" class="auth-success hidden"></p>
533              <button type="submit" class="export-option-button">Rechnungsdaten speichern</button>
534            </form>
535          </details>
536
537          <button type="button" id="checkout-button" class="submit-button">Abo abschließen</button>
538        </div>
539        <p id="subscribe-member-notice" class="hint hidden"></p>
540        <p id="subscribe-error" class="auth-error hidden"></p>
541        <p id="subscribe-status" class="auth-success hidden"></p>
542      </section>
543    </div>
544
545    <!-- ===================== "Was brauche ich?"-Checkliste =====================
546         Eigenständige, auch ohne Login nutzbare Ansicht — dient als
547         Einstiegspunkt für neue Interessenten (Landingpage) UND ist im
548         eingeloggten Bereich über den Account-Bar-Button erreichbar. Welche
549         Ansicht beim Schließen/CTA-Klick wieder gezeigt wird, steuert
550         checklist.js über data-checklist-return. -->
551    <div id="checklist-view" class="hidden narrow-view">
552      <section class="card">
553        <button type="button" id="checklist-back-button" class="link-button checklist-back-button">← Zurück</button>
554        <h2>Was brauche ich für meinen Antrag?</h2>
555        <p class="hint">
556          Wählen Sie Ihren Antragstyp, um zu sehen, welche Unterlagen typischerweise gebraucht werden — bevor Sie
557          überhaupt etwas hochladen. Keine Anmeldung nötig.
558        </p>
559        <p class="hint">
560          <a href="/ki-erkennung" target="_blank" rel="noopener">Wie zuverlässig ist die automatische Erkennung hochgeladener Dokumente?</a>
561        </p>
562
563        <div id="checklist-type-selector" class="type-selector">
564          <button type="button" class="type-option" data-checklist-type="mehrfachantrag">Mehrfachantrag / GAP-Förderantrag</button>
565          <button type="button" class="type-option" data-checklist-type="ausgleichszulage">Ausgleichszulage benachteiligte Gebiete</button>
566          <button type="button" class="type-option" data-checklist-type="bg_jahresmeldung">Berufsgenossenschaft-Jahresmeldung</button>
567          <button type="button" class="type-option" data-checklist-type="krankenkasse_fragebogen">Krankenkasse/Alterskasse-Fragebogen</button>
568          <button type="button" class="type-option" data-checklist-type="duengeverordnung">Düngeverordnung-Dokumentation</button>
569          <button type="button" class="type-option" data-checklist-type="tierhaltungskennzeichnung">Tierhaltungskennzeichnung (Schweinehaltung)</button>
570          <button type="button" class="type-option" data-checklist-type="hit_meldung">HIT-Datenbank-Meldung (Rinder/Schafe/Ziegen)</button>
571          <button type="button" class="type-option" data-checklist-type="nebentaetigkeiten">Meldepflicht Nebentätigkeiten (Direktvermarktung/Hofladen)</button>
572          <button type="button" class="type-option" data-checklist-type="itw_quartalsmeldung">Initiative Tierwohl (ITW) – Quartalsmeldung</button>
573          <button type="button" class="type-option" data-checklist-type="weinbaukartei">Weinbaukartei-Meldung</button>
574          <button type="button" class="type-option" data-checklist-type="bienenseuchenkasse">Bienenseuchenkasse/Imkerei-Förderung</button>
575          <button type="button" class="type-option" data-checklist-type="biogas_meldung">Biogasanlagen-Meldung (EEG-Anlagenregister)</button>
576          <button type="button" class="type-option" data-checklist-type="junglandwirte">Junglandwirte-Förderung/Niederlassungsbeihilfe</button>
577          <button type="button" class="type-option" data-checklist-type="tam_meldung">Antibiotika-Maßnahmenplan (TAM-Meldung)</button>
578          <button type="button" class="type-option" data-checklist-type="agrarstrukturerhebung">Agrarstrukturerhebung</button>
579          <button type="button" class="type-option" data-checklist-type="gloez2_ueberpruefung">GLÖZ 2 – Antrag auf Überprüfung</button>
580          <button type="button" class="type-option" data-checklist-type="wolfsriss_entschaedigung">Wolfsriss-Entschädigungsantrag</button>
581          <button type="button" class="type-option" data-checklist-type="hagelversicherung_zuschuss">Hagelversicherungs-Zuschussantrag</button>
582          <button type="button" class="type-option" data-checklist-type="schulprogramm_eu">EU-Schulmilch-/Schulobstprogramm</button>
583          <button type="button" class="type-option" data-checklist-type="wasserentnahme">Wasserentnahme-Genehmigung/-Meldung</button>
584          <button type="button" class="type-option" data-checklist-type="psm_dokumentation">Pflanzenschutzmittel-Dokumentation</button>
585          <button type="button" class="type-option" data-checklist-type="schaedlingsbekaempfung">Schädlingsbekämpfung/Rodentizid-Dokumentation</button>
586          <button type="button" class="type-option" data-checklist-type="afp_investfoerderung">Agrarinvestitionsförderung (AFP) – Antragsmantel</button>
587          <button type="button" class="type-option" data-checklist-type="afp_tierhaltung_anlage1">Agrarinvestitionsförderung (AFP) – Anlage 1 (Tierhaltung)</button>
588          <button type="button" class="type-option" data-checklist-type="afp_siuk_umwelt_klimaschutz">Agrarinvestitionsförderung (AFP) – SIUK Umwelt-/Klimaschutz</button>
589          <button type="button" class="type-option" data-checklist-type="afp_junglandwirt_aufschlag">Agrarinvestitionsförderung (AFP) – Junglandwirt-Aufschlag</button>
590          <button type="button" class="type-option" data-checklist-type="afp_bewaesserung">Agrarinvestitionsförderung (AFP) – Bewässerung</button>
591          <button type="button" class="type-option" data-checklist-type="afp_anbindehaltung_umstellung">Agrarinvestitionsförderung (AFP) – Umstellung Anbindehaltung</button>
592          <button type="button" class="type-option" data-checklist-type="afp_eip_aufschlag">Agrarinvestitionsförderung (AFP) – EIP-Aufschlag</button>
593          <button type="button" class="type-option" data-checklist-type="afp_betreuerzuschuss">Agrarinvestitionsförderung (AFP) – Betreuerzuschuss</button>
594          <button type="button" class="type-option" data-checklist-type="afp_erschliessungszuschuss">Agrarinvestitionsförderung (AFP) – Erschließungszuschuss</button>
595          <button type="button" class="type-option" data-checklist-type="afp_bayern_milchvieh_laufstall">Einzelbetriebliche Investitionsförderung (EIF Teil A) – Bayern, Milchvieh Laufstall-Erstumstellung</button>
596          <button type="button" class="type-option" data-checklist-type="afp_bayern_zuchtsauen">Einzelbetriebliche Investitionsförderung (EIF Teil A) – Bayern, Zuchtsauenhaltung</button>
597          <button type="button" class="type-option" data-checklist-type="afp_bayern_rinderhaltung_allgemein">Einzelbetriebliche Investitionsförderung (EIF Teil A) – Bayern, Rinderhaltung allgemein</button>
598          <button type="button" class="type-option" data-checklist-type="afp_bayern_weitere_tierarten">Einzelbetriebliche Investitionsförderung (EIF Teil A) – Bayern, weitere Tierarten</button>
599          <button type="button" class="type-option" data-checklist-type="afp_bayern_betreuerzuschuss">Einzelbetriebliche Investitionsförderung (EIF Teil A) – Bayern, Betreuerzuschuss</button>
600          <button type="button" class="type-option" data-checklist-type="afp_nrw_tierwohl">Agrarinvestitionsförderung (AFP) – NRW, Tierwohlinvestitionen (§ 9.4.1a)</button>
601          <button type="button" class="type-option" data-checklist-type="afp_nrw_kombiinvestitionen">Agrarinvestitionsförderung (AFP) – NRW, Kombiinvestitionen (§ 9.4.1b)</button>
602          <button type="button" class="type-option" data-checklist-type="afp_nrw_bewaesserung_resilienz">Agrarinvestitionsförderung (AFP) – NRW, Bewässerung/Resilienz (§ 9.4.1c)</button>
603          <button type="button" class="type-option" data-checklist-type="afp_nrw_sonstige">Agrarinvestitionsförderung (AFP) – NRW, Sonstige Investitionen (§ 9.4.1d)</button>
604          <button type="button" class="type-option" data-checklist-type="afp_nrw_junglandwirt">Agrarinvestitionsförderung (AFP) – NRW, Junglandwirt-Zuschlag (§ 9.4.2)</button>
605          <button type="button" class="type-option" data-checklist-type="afp_nds_tierhaltung_anlage1">Agrarinvestitionsförderung (AFP) – Niedersachsen, Tierhaltung Anlage 1</button>
606          <button type="button" class="type-option" data-checklist-type="afp_nds_tierhaltung_anlage2">Agrarinvestitionsförderung (AFP) – Niedersachsen, Tierhaltung Anlage 2</button>
607          <button type="button" class="type-option" data-checklist-type="afp_nds_sonstige">Agrarinvestitionsförderung (AFP) – Niedersachsen, Sonstige Investitionen</button>
608          <button type="button" class="type-option" data-checklist-type="afp_nds_siuk">Agrarinvestitionsförderung (AFP) – Niedersachsen, SIUK-Maßnahmen</button>
609          <button type="button" class="type-option" data-checklist-type="afp_nds_bewaesserung">Agrarinvestitionsförderung (AFP) – Niedersachsen, Bewässerung</button>
610          <button type="button" class="type-option" data-checklist-type="afp_nds_junglandwirt">Agrarinvestitionsförderung (AFP) – Niedersachsen, Junglandwirt-Zuschlag</button>
611          <button type="button" class="type-option" data-checklist-type="afp_nds_betreuerzuschuss">Agrarinvestitionsförderung (AFP) – Niedersachsen, Betreuerzuschuss</button>
612          <button type="button" class="type-option" data-checklist-type="afp_sh_stallbau_anlage1">Agrarinvestitionsförderung (AFP) – Schleswig-Holstein, Stallbau Anlage 1</button>
613          <button type="button" class="type-option" data-checklist-type="afp_sh_stallbau_erhoeht">Agrarinvestitionsförderung (AFP) – Schleswig-Holstein, Stallbau Anlage 1 (erhöhter Satz)</button>
614          <button type="button" class="type-option" data-checklist-type="afp_sh_stallbau_anlage2">Agrarinvestitionsförderung (AFP) – Schleswig-Holstein, Stallbau Anlage 2</button>
615          <button type="button" class="type-option" data-checklist-type="afp_sh_siuk">Agrarinvestitionsförderung (AFP) – Schleswig-Holstein, SIUK-Maßnahmen</button>
616          <button type="button" class="type-option" data-checklist-type="afp_sh_lagerstaetten">
616Agrarinvestitionsförderung (AFP) – Schleswig-Holstein, Lagerstätten</button>
617          <button type="button" class="type-option" data-checklist-type="afp_he_stallbau_premium">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, Stallbau Premium</button>
618          <button type="button" class="type-option" data-checklist-type="afp_he_siuk_stallbaufrei">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, SIUK stallbaufrei</button>
619          <button type="button" class="type-option" data-checklist-type="afp_he_stallbau_siuk_kombi">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, Stallbau + SIUK kombiniert</button>
620          <button type="button" class="type-option" data-checklist-type="afp_he_siuk_nichtproduktiv">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, SIUK nichtproduktiv</button>
621          <button type="button" class="type-option" data-checklist-type="afp_he_bewaesserung">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, Bewässerung</button>
622          <button type="button" class="type-option" data-checklist-type="afp_he_sonstige">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, Sonstige Investitionen</button>
623          <button type="button" class="type-option" data-checklist-type="afp_he_junglandwirt">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, Junglandwirt-Zuschlag</button>
624          <button type="button" class="type-option" data-checklist-type="afp_he_betreuerzuschuss">Einzelbetriebliche Investitionsförderung (EFP) – Hessen, Betreuerzuschuss</button>
625          <button type="button" class="type-option" data-checklist-type="afp_rlp_investition">Agrarinvestitionsförderungsprogramm (EULLE) – Rheinland-Pfalz, Investition</button>
626          <button type="button" class="type-option" data-checklist-type="afp_rlp_junglandwirt">Agrarinvestitionsförderungsprogramm (EULLE) – Rheinland-Pfalz, Junglandwirt-Zuschlag</button>
627        </div>
628
629        <div id="checklist-bundesland-field" class="field hidden">
630          <label for="checklist-bundesland">Ihr Bundesland</label>
631          <select id="checklist-bundesland">
632            <option value="">Bitte auswählen (optional)</option>
633          </select>
634          <span class="hint">Für die genaue Bezeichnung Ihres Landesportals und die Frist.</span>
635        </div>
636
637        <div id="checklist-result" class="hidden">
638          <p id="checklist-portal-info" class="checklist-portal-info hidden"></p>
639          <p id="checklist-note" class="hint"></p>
640
641          <div class="checklist-progress">
642            <div class="checklist-progress-bar">
643              <div id="checklist-progress-fill" class="checklist-progress-fill"></div>
644            </div>
645            <span id="checklist-progress-text" class="checklist-progress-text"></span>
646          </div>
647
648          <ul id="checklist-items" class="checklist-items"></ul>
649
650          <div class="checklist-cta">
651            <p class="hint">Diese Liste dient nur zur Orientierung — nichts davon ist Pflicht, um mit dem Hochladen zu starten.</p>
652            <button type="button" id="checklist-cta-button" class="submit-button">Bereit? Jetzt Dokumente hochladen</button>
653          </div>
654        </div>
655      </section>
656    </div>
657
658    <!-- ===================== Angemeldeter Bereich ===================== -->
659    <div id="app-view" class="hidden">
660      <!-- "Erkunden"-Modus: ohne aktives Abo/Trial kann die gesamte
661           Oberfläche trotzdem angesehen/navigiert werden (siehe
662           auth-ui.js: enterAppOrGate) — nur echte Aktionen scheitern
663           weiterhin serverseitig an subscription.requireActiveSubscriptionForBetrieb
664           (unverändert). EIN gemeinsamer Banner mit zwei Erscheinungsformen
665           (siehe auth-ui.js: renderGlobalAccessBanner):
666             - Laufende kostenlose Testphase: freundlicher Hinweis mit
667               Resttagen (Modifier-Klasse "subscription-required-banner--info",
668               siehe style.css), proaktiv auf jeder Funktionsseite sichtbar.
669             - Kein Zugriff (Testphase abgelaufen UND kein aktives Abo): der
670               "gesperrt"-Hinweis mit Schloss-Symbol, ausgelöst entweder
671               proaktiv hier oder reaktiv bei einem 402 (siehe net.js:
672               fetchWithTimeout → window.showSubscriptionRequiredBanner).
673           Auf der "Mein Abo"-Seite selbst wird dieser Banner nie gezeigt --
674           die Seite hat dafür ihre eigene, dedizierte Karte (siehe
675           updateSubscriptionCard). Sticky statt fixed, damit er innerhalb
676           der jeweiligen Seite nach oben rutscht statt über der
677           Seitenleiste zu schweben, aber beim Scrollen sichtbar bleibt. -->
678      <div id="subscription-required-banner" class="subscription-required-banner hidden" role="alert">
679        <span id="subscription-required-banner-icon" class="subscription-required-banner-icon" aria-hidden="true">🔒</span>
680        <span id="subscription-required-banner-text" class="subscription-required-banner-text"></span>
681        <button type="button" id="subscription-required-banner-checkout-button" class="submit-button subscription-required-banner-checkout-button">
682          Abo abschließen
683        </button>
684        <button type="button" id="subscription-required-banner-dismiss-button" class="subscription-required-banner-dismiss" aria-label="Hinweis schließen">×</button>
685      </div>
686
687      <!-- ===================== Seite: Betriebsgesundheit-Dashboard =====================
688           Startseite nach jedem Login (siehe auth-ui.js: showAppView) — eine
689           kompakte Ampel-Übersicht, die NUR bereits an anderer Stelle
690           berechnete Informationen zusammenfasst (Fristen, "Das könnte noch
691           fehlen", Plausibilitätsprüfung, Regeländerungen, Förderungen,
692           Bescheide — siehe GET /api/dashboard/dashboardCheck.js in
693           server.js). Kein eigenes Formular, keine eigene Speicherung —
694           jeder Eintrag springt per Klick zur zuständigen Stelle (siehe
695           dashboard.js). -->
696      <div id="page-dashboard" class="app-page hidden">
697        <section id="dashboard-section" class="card">
698          <h2>Betriebsgesundheit</h2>
699          <p class="hint">Ein schneller Überblick über alles, was für Ihren aktiven Betrieb gerade ansteht.</p>
700          <p id="dashboard-status" class="extraction-status hidden"></p>
701
702          <div id="dashboard-alles-ok" class="dashboard-alles-ok hidden">
703            <span class="dashboard-alles-ok-icon" aria-hidden="true">✅</span>
704            <div>
705              <div class="dashboard-alles-ok-titel">Alles im grünen Bereich!</div>
706              <p class="dashboard-alles-ok-text">Aktuell gibt es nichts Dringendes zu tun.</p>
707            </div>
708          </div>
709
710          <div id="dashboard-liste" class="dashboard-liste"></div>
711        </section>
712      </div>
713
714      <!-- ===================== Seite: Posteingang =====================
715           Zentrale Upload-Fläche für JEDES Dokument ohne vorherige
716           Kategoriewahl — die KI schlägt eine Kategorie vor (siehe
717           posteingang.js), der Nutzer bestätigt/korrigiert, danach wird das
718           Dokument in genau die bestehende Struktur der jeweiligen
719           Kategorie einsortiert (Antrag-Upload-Flow via
720           showPage("antrag")+selectType+handleFiles, oder
721           starteDokumentErkennungsAblauf für Bescheide/Maschinen/
722           Versicherungen/Pachtverträge/Rechnungen) — kein eigenes,
723           paralleles Speichersystem. Nur bei unsicherer/fehlender
724           Einordnung landet ein Dokument in der "Unsortiert"-Übersicht
725           unten (POST/GET/DELETE /api/posteingang in server.js). -->
726      <div id="page-posteingang" class="app-page hidden">
727        <section id="posteingang-section" class="card">
728          <h2>Dokumente automatisch einsortieren</h2>
729          <p class="hint">
730            Laden Sie hier ein beliebiges Dokument hoch (PDF oder Foto), ganz ohne vorher eine Kategorie auszuwählen.
731            Agrado erkennt automatisch, worum es sich handelt — Antrag, Bescheid, Maschinen-/Versicherungsunterlage,
732            Pachtvertrag oder Rechnung — und schlägt die passende Einsortierung vor. Sie bestätigen oder korrigieren
733            den Vorschlag, bevor das Dokument an die richtige Stelle in Agrado einsortiert wird.
734          </p>
735          <div class="legal-disclaimer">
736            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
737            <span>
738              Die automatische Einordnung ist nur ein Vorschlag, keine verbindliche Zuordnung. Bitte prüfen Sie die
739              vorgeschlagene Kategorie, bevor Sie sie bestätigen.
740            </span>
741          </div>
742
743          <label for="posteingang-file-input" id="posteingang-drop-zone" class="drop-zone">
744            <span class="drop-zone-icon">📥</span>
745            <span class="drop-zone-text">Dokument(e) (PDF oder Foto) hierher ziehen<br>oder klicken zum Auswählen</span>
746            <input type="file" id="posteingang-file-input" accept=".pdf,image/*" multiple hidden>
747          </label>
748          <p class="hint upload-reliability-hint">
749            Die automatische Einordnung funktioniert am zuverlässigsten bei klaren, gut lesbaren PDF- oder
750            Foto-Dokumenten mit Standardformaten. Handschriftliche oder sehr unübliche Dokumente werden
751            möglicherweise nicht korrekt erkannt.
752            <a href="/ki-erkennung" target="_blank" rel="noopener">Mehr erfahren</a>
753          </p>
754
755          <div id="posteingang-review-list"></div>
756        </section>
757
758        <section id="posteingang-unsortiert-section" class="card">
759          <h2>Unsortiert</h2>
760          <p class="hint">
761            Dokumente, die noch keiner Kategorie zugewiesen wurden — entweder weil die automatische Einordnung
762            unsicher war, oder weil Sie die Zuordnung auf später verschoben haben. Ordnen Sie sie hier jederzeit
763            manuell zu.
764          </p>
765          <p id="posteingang-unsortiert-status" class="auth-error hidden"></p>
766          <div id="posteingang-unsortiert-list" class="bescheide-list"></div>
767        </section>
768      </div>
769
770      <!-- ===================== Seite: Eigene Tracker =====================
771           Frei konfigurierbare Tabellen als Excel-Ersatz für betriebsspezifische
772           Verwaltungsaufgaben (siehe tracker.js, server.js: /api/trackers).
773           Drei Unteransichten innerhalb dieser einen Seite (Übersicht/Anlegen/
774           Detail), per JS ein-/ausgeblendet — genau wie bescheide.js'
775           Datei/Text-Umschalter, nur mit drei statt zwei Zuständen. -->
776      <div id="page-tracker" class="app-page hidden">
777        <section id="tracker-list-section" class="card">
778          <div class="tracker-list-header">
779            <h2>Eigene Tracker</h2>
780          </div>
781          <p class="hint">
782            Eigene, frei benannte Tabellen für alles, was in kein festes Formular passt — z. B.
783            Besamungstermine, Futtermittel-Bestand oder eigene Kalkulationen je Feldstück. Sie legen die
784            Spalten selbst fest (Text, Zahl oder Datum) und pflegen beliebig viele Einträge, wie in einer
785            eigenen kleinen Tabelle.
786          </p>
787
788          <div id="tracker-quickstart" class="tracker-quickstart">
789            <h3>Neuen Tracker starten</h3>
790            <div id="tracker-quickstart-templates" class="tracker-template-list"></div>
791            <button type="button" id="tracker-blank-button" class="link-button">Eigenen Tracker von Grund auf erstellen</button>
792          </div>
793
794          <p id="tracker-status" class="hint hidden"></p>
795          <h3 id="tracker-list-heading" class="tracker-list-subheading hidden">Meine Tracker</h3>
796          <div id="tracker-list" class="tracker-card-list"></div>
797        </section>
798
799        <section id="tracker-create-section" class="card hidden">
800          <h2 id="tracker-create-heading">Neuen Tracker anlegen</h2>
801          <p class="hint">Passen Sie Name und Spalten nach Bedarf an, bevor Sie den Tracker anlegen.</p>
802          <div id="tracker-create-disclaimer" class="legal-disclaimer legal-disclaimer-strong hidden">
803            <span class="legal-disclaimer-icon">⚠️</span>
804            <span id="tracker-create-disclaimer-text"></span>
805          </div>
806
807          <form id="tracker-create-form">
808            <div class="field">
809              <label for="tracker-name-input">Name des Trackers</label>
810              <input type="text" id="tracker-name-input" name="name" placeholder="z. B. Besamungstermine" required maxlength="120">
811            </div>
812
813            <p class="hint">Spalten (Name + Typ):</p>
814            <div id="tracker-columns-editor" class="tracker-columns-editor"></div>
815            <button type="button" id="tracker-add-column-button" class="link-button">+ Spalte hinzufügen</button>
816
817            <p id="tracker-create-error" class="auth-error hidden"></p>
818
819            <div class="tracker-form-actions">
820              <button type="submit" id="tracker-create-submit" class="submit-button">Tracker anlegen</button>
821              <button type="button" id="tracker-create-cancel" class="link-button">Abbrechen</button>
822            </div>
823          </form>
824        </section>
825
826        <section id="tracker-detail-section" class="card hidden">
827          <div class="tracker-detail-header">
828            <button type="button" id="tracker-back-button" class="link-button">← Zurück zur Übersicht</button>
829            <h2 id="tracker-detail-title"></h2>
830            <button type="button" id="tracker-rename-button" class="link-button" title="Tracker umbenennen">✏️ Umbenennen</button>
831            <button type="button" id="tracker-delete-button" class="link-button tracker-delete-button">Tracker löschen</button>
832          </div>
833          <div id="tracker-rename-form" class="tracker-rename-form hidden">
834            <input type="text" id="tracker-rename-input" maxlength="120" placeholder="Name des Trackers">
835            <button type="button" id="tracker-rename-save-button" class="submit-button">Speichern</button>
836            <button type="button" id="tracker-rename-cancel-button" class="link-button">Abbrechen</button>
837            <p id="tracker-rename-error" class="auth-error hidden"></p>
838          </div>
839          <div id="tracker-detail-disclaimer" class="legal-disclaimer legal-disclaimer-strong hidden">
840            <span class="legal-disclaimer-icon">⚠️</span>
841            <span id="tracker-detail-disclaimer-text"></span>
842          </div>
843          <p id="tracker-detail-status" class="hint hidden"></p>
844          <div id="tracker-table-wrapper" class="tracker-table-wrapper">
845            <table id="tracker-table" class="tracker-table"></table>
846          </div>
847          <p id="tracker-fruchtfolge-info-hint" class="hint tracker-fruchtfolge-info-hint hidden">
848            <span aria-hidden="true">🌱</span>
849            Sobald für einen Schlag bereits Einträge aus einem früheren Jahr vorhanden sind, schlägt Agrado beim
850            Eintragen des nächsten Jahres automatisch eine passende Kulturart vor.
851          </p>
852          <div class="tracker-detail-actions">
853            <button type="button" id="tracker-add-row-button" class="submit-button">+ Eintrag hinzufügen</button>
854            <button type="button" id="tracker-detail-add-column-button" class="link-button">+ Spalte hinzufügen</button>
855          </div>
856          <div id="tracker-detail-add-column-form" class="tracker-add-column-form hidden"></div>
857        </section>
858      </div>
859
860      <!-- ===================== Seite: Frag deinen Betrieb =====================
861           Chat-Interface über die bereits gespeicherten Betriebsdaten — die
862           KI antwortet serverseitig AUSSCHLIESSLICH auf Basis der für den
863           aktiven Betrieb aggregierten echten Daten (siehe
864           POST /api/betrieb-chat in server.js: buildBetriebChatContext).
865           Der Frage-Antwort-Verlauf lebt nur im Browser der aktuellen
866           Sitzung (kein serverseitiger Chat-Speicher) — siehe
867           betrieb-chat.js. -->
868      <div id="page-betrieb-chat" class="app-page hidden">
869        <section id="betrieb-chat-section" class="card">
870          <h2>Frag deinen Betrieb</h2>
871          <p class="betrieb-chat-ki-hinweis">
872            Sie interagieren hier mit einer Künstlichen Intelligenz (KI) — die Antworten werden automatisiert
873            erzeugt, nicht von einem Menschen.
874          </p>
875          <p class="hint">
876            Stellen Sie Fragen in normaler Sprache zu Ihrem Betrieb, z. B. "Wann endet mein Pachtvertrag?", "Wie
877            viele Hektar habe ich insgesamt?" oder "Wo ist der Bescheid von der Berufsgenossenschaft?". Die Antwort
878            basiert ausschließlich auf Ihren bereits bei Agrado gespeicherten Daten.
879          </p>
880          <div class="legal-disclaimer">
881            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
882            <span>
883              Antworten basieren ausschließlich auf Ihren bei Agrado gespeicherten Daten und können unvollständig
884              sein, falls nicht alle Unterlagen hochgeladen wurden. Keine Rechts- oder Steuerberatung.
885            </span>
886          </div>
887
888          <div id="betrieb-chat-verlauf" class="betrieb-chat-verlauf"></div>
889          <p id="betrieb-chat-status" class="extraction-status hidden"></p>
890
891          <form id="betrieb-chat-form" class="betrieb-chat-form">
892            <textarea
893              id="betrieb-chat-input"
894              class="betrieb-chat-input"
895              aria-label="Ihre Frage"
896              rows="4"
897              maxlength="1000"
898              placeholder="Stellen Sie hier Ihre Frage — auch ausführlicher, mit mehreren Sätzen …"
899              required
900            ></textarea>
901            <button type="submit" id="betrieb-chat-submit-button" class="submit-button">Fragen</button>
902          </form>
903        </section>
904      </div>
905
906      <!-- ===================== Seite: Fristen =====================
907           War früher Teil von "Antrag stellen" (#page-antrag) — als eigene
908           Sidebar-Seite ausgelagert, damit "Antrag stellen" nicht zwei
909           unabhängige Aufgaben (Fristen nachschlagen vs. einen Antrag
910           ausfüllen) auf einer Seite vermischt. renderFristen() selbst
911           (script.js) ist unverändert, nur der Lade-Zeitpunkt wandert von
912           PAGE_LOAD_HANDLERS.antrag zu PAGE_LOAD_HANDLERS.fristen (siehe
913           sidebar.js). -->
914      <div id="page-fristen" class="app-page hidden">
915        <section id="fristen-section" class="card">
916          <h2>Wichtige Fristen</h2>
917          <p class="hint">
918            Für einen Teil der Antragsarten sind feste, wiederkehrende Termine bekannt (Countdown mit Farbe).
919            Bei anderen hängt die Frist vom Einzelfall, Bundesland oder Ereignis ab, oder es gibt gar keinen
920            festen Jahrestermin — dort steht statt eines Countdowns ein ehrlicher Hinweis, wo Sie die genaue
921            Frist erfahren. Die zeitlich nächste Frist steht immer zuerst.
922          </p>
923          <div id="fristen-list" class="fristen-list"></div>
924          <p class="hint">Angaben ohne Gewähr — bitte prüfen Sie die aktuellen Termine in Ihrem regionalen Portal.</p>
925        </section>
926      </div>
927
928      <!-- ===================== Seite: Antrag stellen ===================== -->
929      <div id="page-antrag" class="app-page hidden">
930        <section id="foerder-context-banner" class="card foerder-context-banner hidden">
931          <p>
932            Zuschussart: <strong id="foerder-context-label"></strong>
933            &nbsp;·&nbsp;
934            <button type="button" id="foerder-context-back" class="link-button">← Andere Zuschussart wählen</button>
935          </p>
936        </section>
937        <section id="type-section" class="card">
938          <h2><span class="step-number">1</span> Antragstyp auswählen</h2>
939          <div id="type-selector" class="type-selector">
940            <button type="button" class="type-option" data-type="mehrfachantrag">Mehrfachantrag / GAP-Förderantrag</button>
941            <button type="button" class="type-option" data-type="ausgleichszulage">Ausgleichszulage benachteiligte Gebiete</button>
942            <button type="button" class="type-option" data-type="bg_jahresmeldung">Berufsgenossenschaft-Jahresmeldung</button>
943            <button type="button" class="type-option" data-type="krankenkasse_fragebogen">Krankenkasse/Alterskasse-Fragebogen</button>
944            <button type="button" class="type-option" data-type="duengeverordnung">Düngeverordnung-Dokumentation</button>
945            <button type="button" class="type-option" data-type="tierhaltungskennzeichnung">Tierhaltungskennzeichnung (Schweinehaltung)</button>
946            <button type="button" class="type-option" data-type="hit_meldung">HIT-Datenbank-Meldung (Rinder/Schafe/Ziegen)</button>
947            <button type="button" class="type-option" data-type="nebentaetigkeiten">Meldepflicht Nebentätigkeiten (Direktvermarktung/Hofladen)</button>
948            <button type="button" class="type-option" data-type="itw_quartalsmeldung">Initiative Tierwohl (ITW) – Quartalsmeldung</button>
949            <button type="button" class="type-option" data-type="weinbaukartei">Weinbaukartei-Meldung</button>
950            <button type="button" class="type-option" data-type="bienenseuchenkasse">Bienenseuchenkasse/Imkerei-Förderung</button>
951            <button type="button" class="type-option" data-type="biogas_meldung">Biogasanlagen-Meldung (EEG-Anlagenregister)</button>
952            <button type="button" class="type-option" data-type="junglandwirte">Junglandwirte-Förderung/Niederlassungsbeihilfe</button>
953            <button type="button" class="type-option" data-type="tam_meldung">Antibiotika-Maßnahmenplan (TAM-Meldung)</button>
954            <button type="button" class="type-option" data-type="agrarstrukturerhebung">Agrarstrukturerhebung</button>
955            <button type="button" class="type-option" data-type="gloez2_ueberpruefung">GLÖZ 2 – Antrag auf Überprüfung</button>
956            <button type="button" class="type-option" data-type="wolfsriss_entschaedigung">Wolfsriss-Entschädigungsantrag</button>
957            <button type="button" class="type-option" data-type="hagelversicherung_zuschuss">Hagelversicherungs-Zuschussantrag</button>
958            <button type="button" class="type-option" data-type="schulprogramm_eu">EU-Schulmilch-/Schulobstprogramm</button>
959            <button type="button" class="type-option" data-type="wasserentnahme">Wasserentnahme-Genehmigung/-Meldung</button>
960            <button type="button" class="type-option" data-type="psm_dokumentation">Pflanzenschutzmittel-Dokumentation</button>
961            <button type="button" class="type-option" data-type="schaedlingsbekaempfung">Schädlingsbekämpfung/Rodentizid-Dokumentation</button>
962          </div>
963          <p class="hint">
964            Suchen Sie eine Agrarinvestitionsförderung (AFP/EIF)? Die finden Sie jetzt im eigenen Bereich
965            <button type="button" id="type-section-foerderantrag-link" class="link-button">„Förderantrag“</button> in der Seitenleiste.
966          </p>
967        </section>
968
969        <section id="upload-section" class="card hidden">
970          <h2><span class="step-number">2</span> Dokument(e) hochladen</h2>
971          <label for="file-input" id="drop-zone" class="drop-zone">
972            <span class="drop-zone-icon">📄</span>
973            <span class="drop-zone-text">PDFs oder Fotos hierher ziehen<br>oder klicken zum Auswählen — auch mehrere gleichzeitig</span>
974            <input type="file" id="file-input" accept=".pdf,image/*" multiple hidden>
975          </label>
976          <p class="hint upload-reliability-hint">
977            Die automatische Erkennung funktioniert am zuverlässigsten bei klaren, gut lesbaren PDF- oder
978            Foto-Dokumenten mit Standardformaten. Handschriftliche oder sehr unübliche Dokumente werden
979            möglicherweise nicht korrekt ausgelesen.
980            <a href="/ki-erkennung" target="_blank" rel="noopener">Mehr erfahren</a>
981          </p>
982          <p id="file-name" class="file-name"></p>
983          <p id="upload-error" class="upload-error hidden"></p>
984          <p id="upload-progress" class="extraction-status hidden"></p>
985
986          <div id="sprach-eingabe-bereich" class="sprach-eingabe-bereich hidden">
987            <p class="hint">
988              Statt eines Dokuments können Sie die Ausbringung auch per Sprache erfassen, z. B.
989              „Ich habe heute 15 Tonnen Kalk auf Schlag 3 gestreut“.
990            </p>
991            <button type="button" id="sprach-eingabe-button" class="sprach-eingabe-button">
992              <span aria-hidden="true">🎤</span> Sprechen
993            </button>
994            <p id="sprach-eingabe-status" class="extraction-status hidden"></p>
995            <p id="sprach-eingabe-transkript" class="sprach-eingabe-transkript hidden"></p>
996            <p id="sprach-eingabe-nicht-unterstuetzt" class="hint hidden">
997              Die Spracheingabe wird von diesem Browser leider nicht unterstützt. Bitte nutzen Sie stattdessen
998              den Datei-Upload oben oder tragen Sie die Angaben unten manuell ein.
999            </p>
1000          </div>
1001
1002          <p class="hint">
1003            <button type="button" class="link-button" id="checklist-jump-button">Nicht sicher, was Sie brauchen? → Checkliste ansehen</button>
1004          </p>
1005        </section>
1006
1007        <section id="documents-queue-section" class="card hidden">
1008          <h2>Hochgeladene Dokumente</h2>
1009          <p class="hint">Jedes Dokument wird einzeln analysiert. Öffnen Sie eines zur Prüfung — die Angaben werden nie vermischt.</p>
1010          <div id="documents-queue-list" class="applications-list"></div>
1011        </section>
1012
1013        <section id="preview-section" class="card hidden">
1014          <h2><span class="step-number">3</span> Vorschau</h2>
1015
1016          <div class="legal-disclaimer">
1017            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
1018            <span id="submission-notice"></span>
1019          </div>
1020
1021          <div id="file-preview" class="file-preview"></div>
1022
1023          <div id="extraction-summary" class="hidden"></div>
1024
1025          <!-- Wird komplett ausgeblendet, wenn die Analyse an der Abo-Sperre
1026               (402/subscriptionRequired) gescheitert ist, statt Felder als
1027               "nicht erkannt" zu zeigen — das sähe sonst nach einem
1028               tatsächlichen (aber gescheiterten) KI-Versuch aus, obwohl real
1029               gar keine Erkennung stattgefunden hat. Der Hinweis-Banner
1030               (siehe net.js/auth-ui.js: showSubscriptionRequiredBanner) ist
1031               in diesem Fall die einzige sichtbare Reaktion. -->
1032          <div id="extraction-fields-wrapper">
1033            <h3>Erkannte Angaben</h3>
1034            <p class="hint">Die Felder werden automatisch aus dem Dokument befüllt. Bitte prüfen und bei Bedarf korrigieren, bevor Sie sie übernehmen.</p>
1035            <p id="extraction-status" class="extraction-status hidden"></p>
1036
1037            <form id="preview-form">
1038              <div id="fields-container"></div>
1039              <div id="duengung-hint" class="duengung-hint hidden">
1040                <span class="duengung-hint-icon" aria-hidden="true">💡</span>
1041                <span id="duengung-hint-text"></span>
1042              </div>
1043              <div id="psm-vorschlag-panel" class="psm-vorschlag-panel hidden">
1044                <button type="button" id="psm-vorschlag-button" class="link-button" disabled>KI-Vorschlag holen (Registriernummer, EPPO-Code, BBCH, Dosierung)</button>
1045                <p class="hint">Erst verfügbar, wenn „Angewendetes Mittel“ und „Zielorganismus/Gegen was“ ausgefüllt sind. Jeder Vorschlag stammt aus einer automatisierten Websuche und ist unverbindlich.</p>
1046                <p id="psm-vorschlag-status" class="extraction-status hidden"></p>
1047                <div id="psm-vorschlag-preview" class="psm-vorschlag-preview hidden"></div>
1048              </div>
1049
1050              <!-- Schädlingsbekämpfung/Rodentizid-Dokumentation: die
1051                   "Kontrolleinträge" sind ein arrayField (siehe antragstypen.js),
1052                   dessen verstecktes <input> normalerweise nur per KI-Auslese
1053                   eines hochgeladenen Dokuments befüllt wird (siehe script.js:
1054                   renderFields). Für einen laufend geführten Kontroll-Tracker ist
1055                   das unpraktikabel -- hier deshalb zusätzlich ein eigenes
1056                   Mini-Formular zum manuellen Hinzufügen/Entfernen einzelner
1057                   Zeilen, das dasselbe versteckte Feld befüllt. -->
1058              <div id="sbk-eintrag-panel" class="sbk-eintrag-panel hidden">
1059                <h4>Kontrolleintrag hinzufügen</h4>
1060                <div class="sbk-eintrag-form">
1061                  <div class="field">
1062                    <label for="sbk-datum">Datum Kontrolle</label>
1063                    <input type="text" id="sbk-datum" placeholder="z. B. 12.05.2026">
1064                  </div>
1065                  <div class="field">
1066                    <label for="sbk-koederstelle">Bereich/Köderstelle (Nummer)</label>
1067                    <input type="text" id="sbk-koederstelle" placeholder="z. B. 12">
1068                  </div>
1069                  <div class="field">
1070                    <label for="sbk-art">Monitoring (M) / Bekämpfung (B)</label>
1071                    <select id="sbk-art">
1072                      <option value="">Bitte wählen</option>
1073                      <option value="Monitoring (M)">Monitoring (M)</option>
1074                      <option value="Bekämpfung (B)">Bekämpfung (B)</option>
1075                    </select>
1076                  </div>
1077                  <div class="field">
1078                    <label for="sbk-schaedling">Schädling</label>
1079                    <input type="text" id="sbk-schaedling" placeholder="z. B. Ratte, Maus">
1080                  </div>
1081                  <div class="field">
1082                    <label for="sbk-beobachtung">Beobachtung/Feststellung</label>
1083                    <input type="text" id="sbk-beobachtung" placeholder="z. B. frischer Kot, Köder angenagt">
1084                  </div>
1085                  <div class="field">
1086                    <label for="sbk-koeder-mittel">Köder/Mittel/Maßnahme</label>
1087                    <input type="text" id="sbk-koeder-mittel" placeholder="z. B. ungiftiger Fraßköder, Giftköder, Schlagfalle">
1088                  </div>
1089                  <div class="field">
1090                    <label for="sbk-verbrauch">Verbrauch (Menge)</label>
1091                    <input type="text" id="sbk-verbrauch" placeholder="z. B. 2 Blöcke">
1092                  </div>
1093                  <div class="field">
1094                    <label for="sbk-anwender">Anwender (Name)</label>
1095                    <input type="text" id="sbk-anwender" placeholder="z. B. Max Mustermann">
1096                  </div>
1097                  <div class="field sbk-bestaetigung-field">
1098                    <label class="sbk-bestaetigung-label">
1099                      <input type="checkbox" id="sbk-bestaetigt">
1100                      Der genannte Anwender bestätigt die Richtigkeit dieser Angaben (entspricht der Unterschrift auf dem Papierformular)
1101                    </label>
1102                  </div>
1103                </div>
1104                <button type="button" id="sbk-eintrag-hinzufuegen-button" class="link-button">+ Eintrag hinzufügen</button>
1105                <p id="sbk-eintrag-status" class="extraction-status hidden"></p>
1106                <div id="sbk-status-uebersicht" class="sbk-status-uebersicht hidden"></div>
1107                <div id="sbk-eintraege-liste" class="sbk-eintraege-liste"></div>
1108              </div>
1109              <div id="extraction-bestaetigung-container"></div>
1110              <button type="submit" id="submit-button" class="submit-button">Angaben übernehmen</button>
1111              <p id="save-success-banner" class="save-success-banner hidden">Antrag wurde gespeichert ✓</p>
1112            </form>
1113
1114            <div id="export-section" class="export-section hidden">
1115              <button type="button" id="export-toggle-button" class="export-button">Ergebnis exportieren</button>
1116              <div id="export-options" class="export-options hidden">
1117                <button type="button" id="export-pdf-button" class="export-option-button">Als PDF speichern</button>
1118                <button type="button" id="export-text-button" class="export-option-button">Als Text kopieren</button>
1119              </div>
1120              <p id="export-status" class="export-status hidden"></p>
1121            </div>
1122          </div>
1123        </section>
1124
1125        <section id="error-helper-section" class="card">
1126          <h2>
1126Fehlermeldung verstehen</h2>
1127          <p class="hint">
1128            Kopieren Sie eine kryptische Fehlermeldung oder einen Prüfhinweis aus Ihrem Antragsportal hinein
1129            (z. B. FIONA, iBALIS) — wir übersetzen sie in einfache Sprache und schlagen einen nächsten Schritt vor.
1130          </p>
1131          <div class="field">
1132            <label for="error-helper-input">Fehlermeldung</label>
1133            <textarea id="error-helper-input" rows="4" placeholder="z. B. GIS-2 oder &quot;Landwirtschaftliche Fläche außerhalb der Bruttofläche&quot;"></textarea>
1134          </div>
1135          <button type="button" id="error-helper-submit" class="submit-button">Erklären lassen</button>
1136          <p id="error-helper-status" class="extraction-status hidden"></p>
1137          <div id="error-helper-result" class="error-helper-result hidden">
1138            <h3>Erklärung</h3>
1139            <p id="error-helper-explanation"></p>
1140          </div>
1141          <div class="legal-disclaimer">
1142            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
1143            <span>Diese Erklärung ersetzt keine amtliche Auskunft. Wenden Sie sich im Zweifel an Ihr zuständiges Amt (z. B. Landwirtschaftsamt/ULB/AELF).</span>
1144          </div>
1145        </section>
1146      </div>
1147
1148      <!-- ===================== Seite: Förderantrag (AFP/EIF-Investitionsförderung) ===================== -->
1149      <!-- Eigener, von der normalen 20er-Antragsliste getrennter Bereich für die
1150           14 länderspezifischen Investitionsförderung-Zuschussarten (9 Baden-
1151           Württemberg + 5 Bayern, siehe antragstypen.js). Ablauf: Bundesland aus
1152           dem Betriebsprofil übernehmen (window.currentBetrieb.bundesland) oder,
1153           falls nicht hinterlegt/nicht BW/Bayern, erst eine Bundesland-Auswahl
1154           zeigen -- dann eine kategorisierte Übersicht der Zuschussarten für
1155           dieses Bundesland. Klick auf eine Zuschussart nutzt exakt denselben
1156           Formular-Flow wie bisher (showPage("antrag") + selectType(typeKey) in
1157           script.js), die Datenstruktur der 14 Typen selbst bleibt unverändert.
1158           Siehe foerderantrag.js. -->
1159      <div id="page-foerderantrag" class="app-page hidden">
1160        <section id="foerderantrag-bundesland-section" class="card hidden">
1161          <h2>Förderantrag – Bundesland wählen</h2>
1162          <p class="hint">
1163            In welchem Bundesland liegt Ihr Betrieb? Investitionsförderprogramme (AFP/EIF) sind
1164            länderspezifisch geregelt. Ihre Wahl wird in Ihrem Betriebsprofil gespeichert, damit sie
1165            künftig automatisch erkannt wird.
1166          </p>
1167          <div id="foerderantrag-bundesland-grid" class="foerderantrag-bundesland-grid"></div>
1168        </section>
1169
1170        <section id="foerderantrag-zuschussarten-section" class="card hidden">
1171          <div class="foerderantrag-header">
1172            <h2 id="foerderantrag-zuschussarten-titel">Förderantrag</h2>
1173            <button type="button" id="foerderantrag-bundesland-wechseln" class="link-button">Anderes Bundesland wählen</button>
1174          </div>
1175          <p class="hint">
1176            Wählen Sie die passende Zuschussart. Danach geht es wie gewohnt zum Dokument-Upload für
1177            dieses Formular weiter.
1178          </p>
1179          <div id="foerderantrag-zuschussarten-liste"></div>
1180        </section>
1181      </div>
1182
1183      <!-- ===================== Seite: Meine gespeicherten Anträge ===================== -->
1184      <div id="page-applications" class="app-page hidden">
1185        <section id="applications-section" class="card">
1186          <h2>Meine gespeicherten Anträge</h2>
1187          <p class="hint">Sichtbar für alle Personen mit Zugriff auf den jeweiligen Betrieb.</p>
1188
1189          <div id="applications-filter-bar" class="applications-filter-bar hidden">
1190            <div class="field">
1191              <label for="applications-search">Suche</label>
1192              <input type="search" id="applications-search" placeholder="Dateiname oder Bezeichnung …">
1193            </div>
1194            <div class="field">
1195              <label for="applications-filter-type">Antragstyp</label>
1196              <select id="applications-filter-type"></select>
1197            </div>
1198            <div class="field">
1199              <label for="applications-filter-year">Jahr</label>
1200              <select id="applications-filter-year"></select>
1201            </div>
1202            <div class="field hidden" id="applications-filter-betrieb-field">
1203              <label for="applications-filter-betrieb">Betrieb</label>
1204              <select id="applications-filter-betrieb"></select>
1205            </div>
1206          </div>
1207          <p id="applications-filter-status" class="upload-error hidden"></p>
1208
1209          <!-- Nur sichtbar, wenn oben nach "Pflanzenschutzmittel-Dokumentation"
1210               gefiltert wird (siehe script.js: updatePsmExportVisibility) --
1211               eigene Zeitraum-/Fläche-Filter, da applications-filter-bar oben
1212               dafür kein präzises Datumsfeld bzw. keinen Fläche-Filter bietet. -->
1213          <section id="psm-export-section" class="card psm-export-section hidden">
1214            <h3>PSM-Dokumentation exportieren</h3>
1215            <p class="hint">
1216              Enthält die Pflichtangaben nach Durchführungsverordnung (EU) 2023/564 / 2025/2203 (Datum, Art der
1217              Verwendung, Fläche/Schlag, Kulturpflanze, Mittel inkl. Zulassungsnummer, Aufw
1217andmenge, BBCH-Stadium,
1218              EPPO-Code, ausführende Person). CSV zusätzlich zu Excel anbieten, da ein maschinenlesbares Format bei
1219              einer Kontrolle tendenziell als robusteres Nachweisformat gilt als eine reine Excel-Datei.
1220            </p>
1221            <div class="psm-export-filters">
1222              <div class="field">
1223                <label for="psm-export-von">Zeitraum von</label>
1224                <input type="date" id="psm-export-von">
1225              </div>
1226              <div class="field">
1227                <label for="psm-export-bis">Zeitraum bis</label>
1228                <input type="date" id="psm-export-bis">
1229              </div>
1230              <div class="field">
1231                <label for="psm-export-flaeche">Fläche/Schlag</label>
1232                <input type="text" id="psm-export-flaeche" placeholder="z. B. Schlag 3">
1233              </div>
1234            </div>
1235            <p id="psm-export-error" class="auth-error hidden"></p>
1236            <div class="psm-export-buttons">
1237              <button type="button" id="psm-export-xlsx-button" class="export-option-button">Als Excel (.xlsx) exportieren</button>
1238              <button type="button" id="psm-export-csv-button" class="export-option-button">Als CSV exportieren</button>
1239            </div>
1240          </section>
1241
1242          <!-- Nur sichtbar, wenn oben nach "Schädlingsbekämpfung/Rodentizid-
1243               Dokumentation" gefiltert wird (siehe script.js:
1244               updateSbkExportVisibility) -- analog zum PSM-Export oben,
1245               ohne Fläche-Filter (hier nicht relevant). -->
1246          <section id="sbk-export-section" class="card psm-export-section hidden">
1247            <h3>Schädlingsbekämpfung/Rodentizid-Dokumentation exportieren</h3>
1248            <p class="hint">
1249              Enthält alle Kontrolleinträge (Kopfdaten, Datum, Köderstelle, Beobachtung, Monitoring/Bekämpfung,
1250              Schädling, Köder/Mittel, Verbrauch, Anwender) — z. B. für eine QS-Kontrolle oder als Befallsnachweis
1251              vor dem Einsatz antikoagulanter Rodentizide.
1252            </p>
1253            <div class="psm-export-filters">
1254              <div class="field">
1255                <label for="sbk-export-von">Zeitraum von</label>
1256                <input type="date" id="sbk-export-von">
1257              </div>
1258              <div class="field">
1259                <label for="sbk-export-bis">Zeitraum bis</label>
1260                <input type="date" id="sbk-export-bis">
1261              </div>
1262            </div>
1263            <p id="sbk-export-error" class="auth-error hidden"></p>
1264            <div class="psm-export-buttons">
1265              <button type="button" id="sbk-export-xlsx-button" class="export-option-button">Als Excel (.xlsx) exportieren</button>
1266              <button type="button" id="sbk-export-csv-button" class="export-option-button">Als CSV exportieren</button>
1267            </div>
1268          </section>
1269
1270          <div id="applications-list" class="applications-list"></div>
1271        </section>
1272      </div>
1273
1274      <!-- ===================== Seite: Meine Betriebe ===================== -->
1275      <div id="page-betriebe" class="app-page hidden">
1276        <!-- Reiter statt einer einzigen, langen Seite — jeder Reiter zeigt
1277             genau EINEN der folgenden Kartenbereiche (siehe .betriebe-tab-panel
1278             unten, Umschalt-Logik in betrieb-profil.js: showBetriebeTab).
1279             Alle Daten werden weiterhin bei jedem Öffnen von "Meine Betriebe"
1280             GEMEINSAM geladen (siehe loadBetriebePage), der Wechsel zwischen
1281             Reitern selbst löst also KEINEN erneuten Server-Aufruf aus. -->
1282        <div class="betriebe-tab-umschalter" role="tablist">
1283          <button type="button" class="betriebe-tab-button" data-tab="betriebsprofil" aria-selected="true">🏠 Betriebsprofil</button>
1284          <button type="button" class="betriebe-tab-button" data-tab="maschinen" aria-selected="false">🚜 Maschinen</button>
1285          <button type="button" class="betriebe-tab-button" data-tab="versicherungen" aria-selected="false">🛡️ Versicherungen</button>
1286          <button type="button" class="betriebe-tab-button" data-tab="pachtvertraege" aria-selected="false">📜 Pachtverträge</button>
1287          <button type="button" class="betriebe-tab-button" data-tab="rechnungen" aria-selected="false">🧾 Rechnungen</button>
1288          <button type="button" class="betriebe-tab-button" data-tab="bescheide" aria-selected="false">📬 Bescheide</button>
1289          <button type="button" class="betriebe-tab-button" data-tab="foerderungen" aria-selected="false">💶 Förderungen</button>
1290          <button type="button" class="betriebe-tab-button" data-tab="plausibilitaet" aria-selected="false">⚠️ Plausibilität</button>
1291        </div>
1292
1293        <section id="betrieb-profil-section" class="card betriebe-tab-panel" data-tab="betriebsprofil">
1294          <h2>Betriebsprofil<span id="betrieb-profil-name-suffix"></span></h2>
1295          <p class="hint">
1296            Automatisch aus den bisher für den aktiven Betrieb gespeicherten Anträgen zusammengestellt — keine
1297            eigene Recherche oder Bewertung, nur eine Übersicht der Angaben, die Sie selbst bereits eingetragen
1298            haben. Aktualisiert sich automatisch, sobald neue Anträge gespeichert werden.
1299          </p>
1300          <p id="betrieb-profil-status" class="auth-error hidden"></p>
1301          <div id="betrieb-profil-content"></div>
1302        </section>
1303
1304        <!-- Meine Betriebe (Liste/Wechsel) + Neuen Betrieb anlegen leben
1305             ebenfalls im Reiter "Betriebsprofil", siehe die beiden Karten
1306             ohne eigenes data-tab-Attribut weiter unten am Ende dieser
1307             Seite (sie werden dort per JS demselben Reiter zugeordnet). -->
1308
1309        <section id="maschinen-section" class="card hidden betriebe-tab-panel" data-tab="maschinen">
1310          <h2>Maschinen</h2>
1311          <p class="hint">
1312            Manuell gepflegte Angaben zu Ihrem Maschinenbestand, die sich aus keinem Antrag ableiten lassen — wahlweise
1313            direkt eingetragen oder aus einer hochgeladenen Rechnung/einem Kaufbeleg übernommen.
1314          </p>
1315          <p id="maschinen-status" class="hint hidden"></p>
1316          <div id="maschinen-list"></div>
1317        </section>
1318
1319        <section id="versicherungen-section" class="card hidden betriebe-tab-panel" data-tab="versicherungen">
1320          <h2>Versicherungen</h2>
1321          <p class="hint">
1322            Manuell gepflegte Versicherungsangaben, die sich aus keinem Antrag ableiten lassen — wahlweise direkt
1323            eingetragen oder aus einer hochgeladenen Police/einem Versicherungsschein übernommen.
1324          </p>
1325          <p id="versicherungen-status" class="hint hidden"></p>
1326          <div id="versicherungen-list"></div>
1327        </section>
1328
1329        <section id="pachtvertraege-section" class="card hidden betriebe-tab-panel" data-tab="pachtvertraege">
1330          <h2>Pachtverträge</h2>
1331          <p class="hint">
1332            Manuell gepflegte Angaben zu verpachteten Flächen, die sich aus keinem Antrag ableiten lassen — wahlweise
1333            direkt eingetragen oder aus einem hochgeladenen Pachtvertrag übernommen.
1334          </p>
1335          <p id="pachtvertraege-status" class="hint hidden"></p>
1336          <div id="pachtvertraege-list"></div>
1337        </section>
1338
1339        <section id="plausibilitaet-section" class="card hidden betriebe-tab-panel" data-tab="plausibilitaet">
1340          <h2>Plausibilitätsprüfung</h2>
1341          <p class="hint">
1342            Vergleicht automatisch Ihre bereits gespeicherten Antragsdaten desselben Betriebs auf mögliche
1343            Auffälligkeiten (z. B. abweichende Flächenangaben zwischen zwei Anträgen, widersprüchliche
1344            Schlag-Angaben oder laut Checkliste ggf. fehlende Nachweise) — bevor Sie bei der Behörde einreichen.
1345            Aktualisiert sich automatisch, sobald sich Ihre Anträge ändern.
1346          </p>
1347          <div class="legal-disclaimer">
1348            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
1349            <span>
1350              Diese automatisierte Prüfung ersetzt keine behördliche Prüfung und erkennt nicht alle möglichen
1351              Probleme. Die Vollständigkeit und Richtigkeit Ihrer Angaben bleibt in Ihrer eigenen Verantwortung.
1352            </span>
1353          </div>
1354
1355          <p id="plausibilitaet-status" class="auth-error hidden"></p>
1356          <div id="plausibilitaet-list" class="bescheide-list"></div>
1357          <button type="button" id="plausibilitaet-hidden-toggle" class="link-button hidden"></button>
1358        </section>
1359
1360        <section id="foerderungen-section" class="card hidden betriebe-tab-panel" data-tab="foerderungen">
1361          <h2>Mögliche Förderungen</h2>
1362          <p class="hint">
1363            Automatisch aus Ihrem Betriebsprofil (Fläche, Betriebsart, Bio-Status, Tierhaltung, genutzte
1364            Antragsarten, Bundesland) abgeglichen mit einer per KI-Websuche recherchierten Liste gängiger
1365            Förderprogramme. Aktualisiert sich automatisch, sobald sich Ihr Betriebsprofil ändert.
1366          </p>
1367          <div class="legal-disclaimer">
1368            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
1369            <span>
1370              Dies ist eine automatisierte, unverbindliche Einschätzung — keine Förderzusage und keine
1371              Rechtsberatung. Prüfen Sie die tatsächliche Förderfähigkeit immer selbst bei der zuständigen Stelle
1372              (z. B. Landwirtschaftsamt, zuständige Landesbehörde). Auch die Kennzeichnung "💰" ist nur eine grobe,
1373              automatisiert geschätzte Tendenz zum finanziellen Umfang eines Programms, keine Berechnung und keine
1374              Garantie für einen bestimmten Förderbetrag.
1375            </span>
1376          </div>
1377
1378          <p id="foerderungen-status" class="auth-error hidden"></p>
1379          <div id="foerderungen-list" class="bescheide-list"></div>
1380          <button type="button" id="foerderungen-hidden-toggle" class="link-button hidden"></button>
1381        </section>
1382
1383        <section id="bescheide-section" class="card hidden betriebe-tab-panel" data-tab="bescheide">
1384          <h2>Bescheide &amp; Schreiben</h2>
1385          <p class="hint">
1386            Laden Sie einen Behörden-Bescheid oder ein amtliches Schreiben hoch (PDF/Foto) oder fügen Sie den Text
1387            direkt ein (z. B. den Inhalt einer E-Mail) — die KI erklärt ihn ausführlich und laienverständlich in
1388            vier Abschnitten: <strong>Das bedeutet</strong> (worum es inhaltlich geht), <strong>Das müssen Sie
1389            tun</strong> (nötige Handlung, falls vorhanden), <strong>Bis wann</strong> (erkannte Frist — erscheint
1390            automatisch auch in der Fristen-Karte und im Kalender) und <strong>Mögliche Konsequenzen</strong> (nur
1391            falls das im Schreiben selbst genannt wird oder sich eindeutig aus der Art des Schreibens ergibt).
1392          </p>
1393          <div class="legal-disclaimer legal-disclaimer-strong">
1394            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
1395            <span>
1396              <strong>Dies ist keine Rechtsberatung und keine rechtliche Bewertung</strong> — nur eine
1397              automatisierte Lesehilfe. Prüfen Sie den Originaltext bei Unklarheiten immer selbst sorgfältig oder
1398              klären Sie offene Fragen direkt mit der ausstellenden Stelle — das gilt besonders für genannte
1399              Fristen und mögliche Konsequenzen, die hier angezeigt werden.
1400            </span>
1401          </div>
1402
1403          <div class="bescheid-eingabe-umschalter" role="tablist">
1404            <button type="button" id="bescheid-modus-datei-button" class="bescheid-modus-button" aria-selected="true">
1405              📄 Datei hochladen
1406            </button>
1407            <button type="button" id="bescheid-modus-text-button" class="bescheid-modus-button" aria-selected="false">
1408              ✍️ Text einfügen
1409            </button>
1410          </div>
1411
1412          <div id="bescheid-modus-datei">
1413            <label for="bescheid-file-input" id="bescheid-drop-zone" class="drop-zone">
1414              <span class="drop-zone-icon">📄</span>
1415              <span class="drop-zone-text">Bescheid (PDF oder Foto) hierher ziehen<br>oder klicken zum Auswählen</span>
1416              <input type="file" id="bescheid-file-input" accept=".pdf,image/*" hidden>
1417            </label>
1418            <p class="hint upload-reliability-hint">
1419              Die automatische Erkennung funktioniert am zuverlässigsten bei klaren, gut lesbaren PDF- oder
1420              Foto-Dokumenten mit Standardformaten. Handschriftliche oder sehr unübliche Dokumente werden
1421              möglicherweise nicht korrekt ausgelesen.
1422              <a href="/ki-erkennung" target="_blank" rel="noopener">Mehr erfahren</a>
1423            </p>
1424          </div>
1425
1426          <div id="bescheid-modus-text" class="hidden">
1427            <div class="field">
1428              <label for="bescheid-text-input">Text des Bescheids/Schreibens (z. B. Inhalt einer E-Mail)</label>
1429              <textarea id="bescheid-text-input" rows="6" maxlength="20000" placeholder="Text hier einfügen …"></textarea>
1430            </div>
1431            <button type="button" id="bescheid-text-submit-button" class="submit-button">Erklären lassen</button>
1432          </div>
1433
1434          <div id="bescheid-review" class="hidden"></div>
1435          <p id="bescheid-upload-status" class="extraction-status hidden"></p>
1436
1437          <p id="bescheide-status" class="auth-error hidden"></p>
1438          <div id="bescheide-list" class="bescheide-list"></div>
1439        </section>
1440
1441        <section id="rechnungen-section" class="card hidden betriebe-tab-panel" data-tab="rechnungen">
1442          <h2>Rechnungen</h2>
1443          <p class="hint">
1444            Laden Sie Eingangsrechnungen (PDF oder Foto) hoch — die KI liest Rechnungssteller, Betrag, Datum und
1445            eine grobe Kategorie aus. Die Rechnungen erscheinen als durchsuchbare, nach Jahr und Kategorie
1446            filterbare Liste, für einen besseren Überblick für Sie und Ihren Steuerberater.
1447          </p>
1448          <div class="legal-disclaimer">
1449            <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
1450            <span>
1451              Die automatische Auslese ersetzt keine Buchhaltung/Steuerberatung. Bitte prüfen Sie die erkannten
1452              Angaben und bewahren Sie Originalbelege wie gewohnt auf.
1453            </span>
1454          </div>
1455
1456          <label for="rechnung-file-input" id="rechnung-drop-zone" class="drop-zone">
1457            <span class="drop-zone-icon">🧾</span>
1458            <span class="drop-zone-text">Rechnung (PDF oder Foto) hierher ziehen<br>oder klicken zum Auswählen</span>
1459            <input type="file" id="rechnung-file-input" accept=".pdf,image/*" hidden>
1460          </label>
1461          <p class="hint upload-reliability-hint">
1462            Die automatische Erkennung funktioniert am zuverlässigsten bei klaren, gut lesbaren PDF- oder
1463            Foto-Dokumenten mit Standardformaten. Handschriftliche oder sehr unübliche Dokumente werden
1464            möglicherweise nicht korrekt ausgelesen.
1465            <a href="/ki-erkennung" target="_blank" rel="noopener">Mehr erfahren</a>
1466          </p>
1467          <div id="rechnung-review" class="hidden"></div>
1468          <p id="rechnung-upload-status" class="extraction-status hidden"></p>
1469
1470          <div id="rechnungen-filter-bar" class="applications-filter-bar hidden">
1471            <div class="field">
1472              <label for="rechnungen-search">Suche</label>
1473              <input type="search" id="rechnungen-search" placeholder="Rechnungssteller …">
1474            </div>
1475            <div class="field">
1476              <label for="rechnungen-filter-jahr">Jahr</label>
1477              <select id="rechnungen-filter-jahr"></select>
1478            </div>
1479            <div class="field">
1480              <label for="rechnungen-filter-kategorie">Kategorie</label>
1481              <select id="rechnungen-filter-kategorie"></select>
1482            </div>
1483          </div>
1484
1485          <p id="rechnungen-status" class="auth-error hidden"></p>
1486          <div id="rechnungen-list" class="bescheide-list"></div>
1487
1488          <div id="datev-export-panel" class="datev-export-panel">
1489            <h3>Für Steuerberater exportieren</h3>
1490            <p class="hint">
1491              Exportieren Sie Ihre erfassten Rechnungen eines Zeitraums als DATEV-Buchungsstapel (CSV) inklusive der
1492              Original-Belege — zum direkten Weiterleiten an Ihren Steuerberater.
1493            </p>
1494
1495            <details id="datev-stammdaten-details">
1496              <summary>DATEV-Stammdaten (einmalig vor dem ersten Export)</summary>
1497              <p class="hint">
1498                Diese Angaben erhalten Sie von Ihrem Steuerberater bzw. Ihrer Kanzlei. Sie werden für jeden Export
1499                dieses Betriebs wiederverwendet.
1500              </p>
1501              <form id="datev-stammdaten-form">
1502                <div class="field-row">
1503                  <div class="field">
1504                    <label for="datev-beraternummer">Beraternummer</label>
1505                    <input type="text" id="datev-beraternummer" inputmode="numeric" maxlength="7" placeholder="z. B. 123456">
1506                  </div>
1507                  <div class="field">
1508                    <label for="datev-mandantennummer">Mandantennummer</label>
1509                    <input type="text" id="datev-mandantennummer" inputmode="numeric" maxlength="5" placeholder="z. B. 4711">
1510                  </div>
1511                </div>
1512                <div class="field">
1513                  <label for="datev-kontenrahmen">Kontenrahmen</label>
1514                  <select id="datev-kontenrahmen">
1515                    <option value="SKR03">SKR03</option>
1516                    <option value="SKR04">SKR04</option>
1517                  </select>
1518                </div>
1519                <p id="datev-stammdaten-error" class="auth-error hidden"></p>
1520                <p id="datev-stammdaten-status" class="auth-success hidden"></p>
1521                <button type="submit" id="datev-stammdaten-save-button" class="export-option-button">Stammdaten speichern</button>
1522              </form>
1523            </details>
1524
1525            <div class="legal-disclaimer legal-disclaimer-strong">
1526              <span class="legal-disclaimer-icon" aria-hidden="true">⚠️</span>
1527              <span>
1528                Dieser Export ordnet Beträge noch keinem spezifischen Buchungskonto zu – bitte besprechen Sie mit
1529                Ihrem Steuerberater, ob eine Nachbearbeitung vor der endgültigen Verbuchung nötig ist. Agrado
1530                übernimmt keine Gewähr für die steuerliche Korrektheit.
1531              </span>
1532            </div>
1533
1534            <form id="datev-export-form">
1535              <div class="field-row">
1536                <div class="field">
1537                  <label for="datev-export-von">Von</label>
1538                  <input type="date" id="datev-export-von" required>
1539                </div>
1540                <div class="field">
1541                  <label for="datev-export-bis">Bis</label>
1542                  <input type="date" id="datev-export-bis" required>
1543                </div>
1544              </div>
1545              <p id="datev-export-error" class="auth-error hidden"></p>
1546              <button type="submit" id="datev-export-button" class="export-option-button">Für Steuerberater exportieren</button>
1547            </form>
1548          </div>
1549        </section>
1550
1551        <section class="card betriebe-tab-panel" data-tab="betriebsprofil">
1552          <h2>Meine Betriebe</h2>
1553          <p class="hint">
1554            Hochgeladene Dokumente, gespeicherte Anträge, der Kalender und das Aktivitätsprotokoll beziehen sich
1555            immer auf den hier als aktiv markierten Betrieb. Das Bundesland des aktiven Betriebs bestimmt außerdem,
1556            welche Portal- und Register-Begriffe beim Mehrfachantrag angezeigt werden.
1557          </p>
1558          <p id="betriebe-status" class="auth-error hidden"></p>
1559          <div id="betriebe-list" class="betriebe-list"></div>
1560        </section>
1561
1562        <section class="card betriebe-tab-panel" data-tab="betriebsprofil">
1563          <h2>Neuen Betrieb anlegen</h2>
1564          <form id="betrieb-add-form">
1565            <div class="field">
1566              <label for="new-betrieb-name">Betriebsname</label>
1567              <input type="text" id="new-betrieb-name" name="name" placeholder="z. B. Hof Nord" maxlength="120" required>
1568            </div>
1569            <div class="field">
1570              <label for="new-betrieb-bundesland">Bundesland</label>
1571              <select id="new-betrieb-bundesland" name="bundesland">
1572                <option value="">Bitte auswählen (optional)</option>
1573              </select>
1574            </div>
1575            <div class="field">
1576              <label for="new-betrieb-nummer">Betriebsnummer (optional)</label>
1577              <input type="text" id="new-betrieb-nummer" name="betriebsnummer" placeholder="z. B. 123456789" maxlength="60">
1578            </div>
1579            <p id="betrieb-add-error" class="auth-error hidden"></p>
1580            <button type="submit" class="submit-button">Betrieb anlegen</button>
1581          </form>
1582        </section>
1583      </div>
1584
1585      <!-- ===================== Seite: Team verwalten ===================== -->
1586      <div id="page-team" class="app-page hidden">
1587        <section id="team-section" class="card">
1588          <h2>Team verwalten</h2>
1589          <p class="hint">
1590            Laden Sie weitere Personen zu Ihren Betrieben ein — als „Bearbeiter“ (kann Dokumente
1591            hochladen, Anträge ausfüllen und speichern) oder „Nur ansehen“ (kann bestehende Anträge
1592            nur einsehen). Eingeladene Personen nutzen Ihr Abo mit und zahlen nicht selbst.
1593          </p>
1594
1595          <h3>Mitglieder</h3>
1596          <div id="team-members-list" class="applications-list"></div>
1597
1598          <h3>Offene Einladungen</h3>
1599          <div id="team-invitations-list" class="applications-list"></div>
1600
1601          <h3>Person einladen</h3>
1602          <form id="team-invite-send-form">
1603            <div class="field">
1604              <label for="team-invite-email">E-Mail-Adresse</label>
1605              <input type="email" id="team-invite-email" name="email" required>
1606            </div>
1607            <div class="field">
1608              <label for="team-invite-role">Rolle</label>
1609              <select id="team-invite-role" name="role">
1610                <option value="bearbeiter">Bearbeiter (kann hochladen, ausfüllen, speichern)</option>
1611                <option value="nur_ansehen">Nur ansehen (kann nur einsehen)</option>
1612              </select>
1613            </div>
1614            <div class="field">
1615              <label>Zugriff auf Betriebe</label>
1616              <div id="team-invite-betriebe" class="checkbox-list"></div>
1617            </div>
1618            <p id="team-invite-send-error" class="auth-error hidden"></p>
1619            <p id="team-invite-send-status" class="auth-success hidden"></p>
1620            <button type="submit" class="submit-button">Einladen</button>
1621          </form>
1622        </section>
1623      </div>
1624
1625      <!-- ===================== Seite: Aktivitätsverlauf ===================== -->
1626      <div id="page-activity" class="app-page hidden">
1627        <section id="activity-section" class="card">
1628          <h2>Aktivitätsverlauf</h2>
1629          <p class="hint">
1630            Zeigt, wer bei diesem Betrieb welche Änderung vorgenommen hat — sichtbar für alle Personen mit
1631            Zugriff auf diesen Betrieb, auch mit der Rolle „Nur ansehen“.
1632          </p>
1633          <div id="activity-list" class="applications-list"></div>
1634        </section>
1635      </div>
1636
1637      <!-- ===================== Seite: Meine Dokumente =====================
1638           Übersicht ALLER hochgeladenen Dokumente über applications/
1639           bescheide/stammdaten_dokumente/posteingang_dokumente hinweg (siehe
1640           GET /api/dokumente, searchCheck.js: buildDokumenteUebersicht) —
1641           unabhängig davon, welchem Antragstyp/Bereich sie zugeordnet
1642           wurden. Ein Klick auf "Öffnen" springt über dieselbe
1643           navigiereZuAktion-Funktion (dashboard.js) an dieselbe Stelle wie
1644           ein Ergebnis der globalen Suche. -->
1645      <div id="page-dokumente" class="app-page hidden">
1646        <section id="dokumente-section" class="card">
1647          <h2>Meine Dokumente</h2>
1648          <p class="hint">
1649            Alle bisher hochgeladenen Dokumente an einer Stelle — unabhängig davon, welchem Antragstyp oder
1650            Bereich sie zugeordnet wurden.
1651          </p>
1652          <p id="dokumente-status" class="auth-error hidden"></p>
1653          <p id="dokumente-empty" class="hint hidden">Es wurden noch keine Dokumente hochgeladen.</p>
1654          <div id="dokumente-list" class="applications-list"></div>
1655        </section>
1656      </div>
1657
1658      <!-- ===================== Seite: Betriebschronik =====================
1659           Chronologische Gesamt-Zeitleiste, sortiert nach dem tatsächlichen
1660           EREIGNISDATUM (nicht nach Bearbeitungszeitpunkt wie oben beim
1661           Aktivitätsverlauf) — siehe GET /api/chronik/chronikCheck.js in
1662           server.js. Jahr-Gruppierung und Filter passieren client-seitig
1663           (siehe chronik.js), kein erneuter Serveraufruf beim Filtern. -->
1664      <div id="page-chronik" class="app-page hidden">
1665        <section id="chronik-section" class="card">
1666          <h2>Betriebschronik</h2>
1667          <p class="hint">
1668            Alle wichtigen Ereignisse Ihres Betriebs auf einer Zeitleiste — sortiert nach dem tatsächlichen
1669            Ereignisdatum, nicht danach, wann Sie etwas in Agrado gespeichert haben.
1670          </p>
1671          <p id="chronik-status" class="extraction-status hidden"></p>
1672
1673          <div id="chronik-filter-bar" class="chronik-filter-bar hidden">
1674            <button type="button" class="chronik-filter-button" data-kategorie="alle" aria-pressed="true">Alle</button>
1675            <button type="button" class="chronik-filter-button" data-kategorie="antraege" aria-pressed="false">Anträge</button>
1676            <button type="button" class="chronik-filter-button" data-kategorie="bescheide" aria-pressed="false">Bescheide</button>
1677            <button type="button" class="chronik-filter-button" data-kategorie="fristen" aria-pressed="false">Fristen</button>
1678            <button type="button" class="chronik-filter-button" data-kategorie="dokumente" aria-pressed="false">Dokumente</button>
1679          </div>
1680
1681          <p id="chronik-empty" class="hint hidden">Für Ihren Betrieb liegen noch keine Ereignisse vor.</p>
1682          <p id="chronik-gefiltert-leer" class="hint hidden">Keine Ereignisse in dieser Kategorie.</p>
1683
1684          <div id="chronik-jahre"></div>
1685        </section>
1686      </div>
1687
1688      <!-- ===================== Seite: Kalender ===================== -->
1689      <div id="page-calendar" class="app-page hidden">
1690        <section id="calendar-section" class="card">
1691          <h2>Kalender</h2>
1692          <p class="hint">
1693            Zeigt offizielle Fristen (automatisch, nicht löschbar) zusammen mit Ihren eigenen Terminen —
1694            sichtbar für alle Personen mit Zugriff auf diesen Betrieb.
1695          </p>
1696          <div class="calendar-legend">
1697            <span class="calendar-legend-item"><span class="calendar-dot calendar-dot-official" aria-hidden="true"></span>🏛️ Offizielle Frist</span>
1698            <span class="calendar-legend-item"><span class="calendar-dot calendar-dot-private" aria-hidden="true"></span>📌 Eigener Termin</span>
1699          </div>
1700
1701          <div class="calendar-header">
1702            <button type="button" id="calendar-prev-button" class="link-button" aria-label="Vorheriger Monat">←</button>
1703            <h3 id="calendar-month-label" class="calendar-month-label"></h3>
1704            <button type="button" id="calendar-next-button" class="link-button" aria-label="Nächster Monat">→</button>
1705            <button type="button" id="calendar-today-button" class="export-option-button calendar-today-button">Heute</button>
1706          </div>
1707
1708          <div id="calendar-status" class="hint hidden"></div>
1709          <div id="calendar-grid" class="calendar-grid"></div>
1710
1711          <div id="calendar-detail" class="calendar-detail hidden">
1712            <div class="calendar-detail-header">
1713              <h3 id="calendar-detail-date"></h3>
1714              <button type="button" id="calendar-add-button" class="export-option-button">+ Termin hinzufügen</button>
1715            </div>
1716            <div id="calendar-detail-list" class="calendar-detail-list"></div>
1717
1718            <form id="calendar-event-form" class="calendar-event-form hidden">
1719              <input type="hidden" id="calendar-event-id" value="">
1720              <div class="field">
1721                <label for="calendar-event-title">Titel</label>
1722                <input type="text" id="calendar-event-title" name="title" maxlength="200" required>
1723              </div>
1724              <div class="field">
1725                <label for="calendar-event-date">Datum</label>
1726                <input type="date" id="calendar-event-date" name="date" required>
1727              </div>
1728              <div class="field">
1729                <label for="calendar-event-note">Notiz (optional)</label>
1730                <textarea id="calendar-event-note" name="note" rows="3" maxlength="2000"></textarea>
1731              </div>
1732              <p id="calendar-event-error" class="auth-error hidden"></p>
1733              <div class="calendar-event-form-actions">
1734                <button type="submit" class="submit-button">Speichern</button>
1735                <button type="button" id="calendar-event-cancel" class="link-button">Abbrechen</button>
1736              </div>
1737            </form>
1738          </div>
1739        </section>
1740      </div>
1741
1742      <!-- ===================== Seite: Mein Abo ===================== -->
1743      <div id="page-subscription" class="app-page hidden">
1744        <section id="subscription-card" class="card">
1745          <h2>Mein Abo</h2>
1746
1747          <!-- Kostenlose 3-Tage-Testphase läuft noch (siehe auth-ui.js:
1748               updateSubscriptionCard, Status "trial" von GET
1749               /api/access-status) — eigener Block statt einfach
1750               "subscription-not-active-notice", damit hier NICHT
1751               fälschlich zu einer (nicht mehr existierenden) zweiten
1752               kostenlosen Testphase aufgefordert wird. Kein
1753               "Abo kündigen"/Rechnungen, da noch keine Zahlungsmethode
1754               hinterlegt ist. -->
1755          <div id="subscription-trial-status" class="hidden">
1756            <p class="hint subscribe-trial-highlight">
1757              <strong id="subscription-trial-days-left"></strong>
1758            </p>
1759            <p class="hint">
1760              Läuft die Testphase ab, ohne dass ein Abo abgeschlossen wurde, wird der Zugriff gesperrt (Ihre
1761              Daten bleiben erhalten). Sie können jederzeit vorher ein Abo abschließen.
1762            </p>
1763            <p id="subscription-page-checkout-error" class="auth-error hidden"></p>
1764            <button type="button" id="subscription-page-checkout-button" class="submit-button">Abo abschließen</button>
1765          </div>
1766
1767          <!-- "Erkunden"-Modus: ohne aktives Abo/Trial ist "Mein Abo" jetzt
1768               auch erreichbar (siehe auth-ui.js: updateSubscriptionCard) —
1769               zeigt dann direkt den Checkout-Einstieg statt einer
1770               kaputten/leeren Status-Ansicht. -->
1771          <div id="subscription-not-active-notice" class="hidden">
1772            <p class="hint subscribe-trial-highlight">
1773              Sie haben aktuell kein aktives Abo — <span id="subscription-page-price"></span>, jederzeit kündbar.
1774            </p>
1775            <p id="subscription-page-checkout-error-inactive" class="auth-error hidden"></p>
1776            <button type="button" id="subscription-page-checkout-button-inactive" class="submit-button">Abo abschließen</button>
1777          </div>
1778
1779          <div id="subscription-active-status">
1780            <p class="hint">Status: <strong id="subscription-status-text">–</strong></p>
1781            <p id="subscription-next-billing" class="hint hidden"><span id="subscription-next-billing-label">Nächste Abbuchung</span>: <strong id="subscription-next-billing-date">–</strong></p>
1782            <p id="subscription-manage-status" class="auth-error hidden"></p>
1783            <button type="button" id="cancel-subscription-button" class="export-option-button">Abo kündigen</button>
1784
1785            <h3>Rechnungen</h3>
1786            <div id="invoices-list" class="applications-list"></div>
1787          </div>
1788        </section>
1789
1790        <section id="billing-section" class="card hidden">
1791          <h2>
1791Rechnungsdaten</h2>
1792          <p class="hint">
1793            Diese Angaben erscheinen auf zukünftigen Stripe-Rechnungen. Privatpersonen können sie frei lassen.
1794          </p>
1795          <form id="billing-details-form">
1796            <div class="field">
1797              <label for="billing-name">Firmenname / Rechnungsname</label>
1798              <input type="text" id="billing-name" name="name" maxlength="200">
1799            </div>
1800            <div class="field">
1801              <label for="billing-address-line1">Straße und Hausnummer</label>
1802              <input type="text" id="billing-address-line1" name="addressLine1" maxlength="200">
1803            </div>
1804            <div class="field">
1805              <label for="billing-address-line2">Adresszusatz (optional)</label>
1806              <input type="text" id="billing-address-line2" name="addressLine2" maxlength="200">
1807            </div>
1808            <div class="field-row">
1809              <div class="field">
1810                <label for="billing-postal-code">PLZ</label>
1811                <input type="text" id="billing-postal-code" name="postalCode" maxlength="20">
1812              </div>
1813              <div class="field">
1814                <label for="billing-city">Ort</label>
1815                <input type="text" id="billing-city" name="city" maxlength="120">
1816              </div>
1817            </div>
1818            <div class="field">
1819              <label for="billing-vat-id">USt-IdNr. (optional)</label>
1820              <input type="text" id="billing-vat-id" name="vatId" maxlength="20" placeholder="z. B. DE123456789">
1821            </div>
1822            <p id="billing-details-error" class="auth-error hidden"></p>
1823            <p id="billing-details-status" class="auth-success hidden"></p>
1824            <button type="submit" class="export-option-button">Rechnungsdaten speichern</button>
1825          </form>
1826        </section>
1827
1828        <p id="subscription-page-empty-notice" class="hint hidden">
1829          Für den aktiven Betrieb sind Sie nicht der Kontoinhaber — hier gibt es für Sie nichts zu verwalten.
1830          Das Abo dieses Betriebs wird von seinem Eigentümer verwaltet.
1831        </p>
1832      </div>
1833
1834      <!-- ===================== Seite: Kontoeinstellungen ===================== -->
1835      <div id="page-account" class="app-page hidden">
1836        <section id="security-section" class="card">
1837          <h2>Sicherheit</h2>
1838          <div class="checkbox-field">
1839            <label class="checkbox-label" for="two-factor-toggle">
1840              <input type="checkbox" id="two-factor-toggle">
1841              <span>
1842                Zwei-Faktor-Authentifizierung per E-Mail
1843                <br><span class="hint">
1844                  Bei Anmeldung von einem neuen/unbekannten Gerät wird zusätzlich ein 6-stelliger Code an Ihre
1845                  E-Mail-Adresse geschickt. Bekannte Geräte werden 30 Tage lang nicht erneut gefragt. Standard: aus.
1846                </span>
1847              </span>
1848            </label>
1849          </div>
1850          <p id="two-factor-toggle-error" class="auth-error hidden"></p>
1851          <p id="two-factor-toggle-status" class="auth-success hidden"></p>
1852        </section>
1853
1854        <section id="data-export-section" class="card">
1855          <h2>Meine Daten</h2>
1856          <p class="hint">
1857            Laden Sie eine Kopie aller zu Ihrem Konto gespeicherten Daten herunter (DSGVO Art. 15/20): Ihre
1858            Kontodaten, alle gespeicherten Anträge mit ihren Werten sowie die zugehörigen Original-Dokumente.
1859            Der Export enthält nur die Betriebe, auf die Sie selbst Zugriff haben.
1860          </p>
1861          <a id="data-export-button" href="/api/export/my-data" class="export-option-button" download>
1862            Meine Daten exportieren
1863          </a>
1864        </section>
1865
1866        <section id="account-deletion-section" class="card danger-card">
1867          <h2>Konto löschen</h2>
1868          <p class="hint">
1869            Löscht Ihr Konto unwiderruflich, inklusive aller Betriebe (sofern Sie deren alleiniger Eigentümer sind)
1870            mit allen Dokumenten und Anträgen sowie Ihrer Team-Mitgliedschaften bei anderen Betrieben. Ein aktives
1871            Abo wird automatisch gekündigt. Gesetzlich vorgeschriebene Rechnungsdaten bleiben getrennt von Ihrem
1872            Konto bei Stripe erhalten.
1873          </p>
1874          <button type="button" id="account-deletion-toggle" class="export-option-button danger-outline-button">
1875            Konto löschen
1876          </button>
1877
1878          <form id="account-deletion-form" class="hidden">
1879            <div id="account-deletion-warning" class="auth-error hidden"></div>
1880            <div class="field">
1881              <label for="account-deletion-password">Passwort</label>
1882              <input type="password" id="account-deletion-password" name="password" autocomplete="current-password" required>
1883            </div>
1884            <div class="field">
1885              <label for="account-deletion-confirm-text">Zur Bestätigung „LÖSCHEN“ eingeben</label>
1886              <input type="text" id="account-deletion-confirm-text" name="confirmText" autocomplete="off" required>
1887            </div>
1888            <p id="account-deletion-error" class="auth-error hidden"></p>
1889            <button type="submit" class="submit-button danger-submit-button" id="account-deletion-submit-button">
1890              Konto endgültig löschen
1891            </button>
1892            <button type="button" class="link-button" id="account-deletion-cancel-button">Abbrechen</button>
1893          </form>
1894        </section>
1895      </div>
1896    </div>
1897  </main>
1898  </div><!-- /.app-shell -->
1899
1900  <footer class="site-footer">
1901    <ul class="footer-links">
1902      <li><a href="/impressum">Impressum</a></li>
1903      <li><a href="/datenschutz">Datenschutz</a></li>
1904      <li><a href="/agb">AGB</a></li>
1905      <li><a href="/ki-erkennung">Über die automatische Erkennung</a></li>
1906    </ul>
1907    <p class="footer-copy">Agrado</p>
1908  </footer>
1909
1910  
1910<script src="config.js?v=84"></script>
1910
1911  
1911<script src="net.js?v=84"></script>
1911
1912  
1912<script src="dokument-erkennung.js?v=84"></script>
1912
1913  
1913<script src="antragstypen.js?v=84"></script>
1913
1914  <!-- eppoCodes.js muss VOR script.js laden: renderFields/updateEppoCodeAutoFill
1915       (script.js) rufen findEppoCodeFuerKultur direkt beim Aufbau des
1916       PSM-Formulars auf. -->
1917  
1917<script src="eppoCodes.js?v=84"></script>
1917
1918  <!-- global-search.js muss VOR auth-ui.js laden: initAuth() (auth-ui.js,
1919       ganz unten aufgerufen) springt bei ?team_invite_token=/?reset_token=
1920       in der URL SYNCHRON (vor jedem await) in showAuthForm(), das u. a.
1921       das globalSearch-Element referenziert (siehe dortiger Kommentar) —
1922       ohne diese Reihenfolge war "globalSearch" zu diesem frühen Zeitpunkt
1923       noch nicht deklariert (ReferenceError), wodurch showAuthForm() mitten
1924       im Ausblenden/Einblenden der Formulare abbrach und z. B. die
1925       "Einladung annehmen"-Seite für neue Team-Mitglieder nie sichtbar
1926       wurde — sie landeten stattdessen auf der normalen Anmelden-Seite,
1927       ohne jede Fehlermeldung. -->
1928  
1928<script src="global-search.js?v=84"></script>
1928
1929  
1929<script src="auth-ui.js?v=84"></script>
1929
1930  
1930<script src="script.js?v=84"></script>
1930
1931  
1931<script src="sprach-eingabe.js?v=84"></script>
1931
1932  
1932<script src="calendar.js?v=84"></script>
1932
1933  
1933<script src="betriebe.js?v=84"></script>
1933
1934  
1934<script src="betrieb-profil.js?v=84"></script>
1934
1935  
1935<script src="plausibilitaet.js?v=84"></script>
1935
1936  
1936<script src="foerderungen.js?v=84"></script>
1936
1937  
1937<script src="bescheide.js?v=84"></script>
1937
1938  
1938<script src="rechnungen.js?v=84"></script>
1938
1939  
1939<script src="posteingang.js?v=84"></script>
1939
1940  
1940<script src="fruchtfolge.js?v=84"></script>
1940
1941  
1941<script src="tracker.js?v=84"></script>
1941
1942  
1942<script src="betrieb-chat.js?v=84"></script>
1942
1943  
1943<script src="dashboard.js?v=84"></script>
1943
1944  
1944<script src="chronik.js?v=84"></script>
1944
1945  
1945<script src="dokumente.js?v=84"></script>
1945
1946  
1946<script src="sidebar.js?v=84"></script>
1946
1947  
1947<script src="foerderantrag.js?v=84"></script>
1947
1948  
1948<script src="checklist.js?v=84"></script>
1948
1949  
1949<script src="waitlist.js?v=84"></script>
1949
1950  
1950<script src="dokument-schutz.js?v=84"></script>
1950
1951  
1951<script src="cookie-banner.js?v=84"></script>
1951
1952</body>
1953</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.