# i18n: vermutlich noch ohne t()

Anzahl Einträge (heuristisch): **2146**

Hinweis: Einige Treffer können falsch positiv sein (technische Strings). Vor `apply` prüfen.

## `src/components/AccessRules/AccessRulesEditor.tsx`:86

- **Text:** 'Regel löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Regel löschen"`

## `src/components/AccessRules/AccessRulesEditor.tsx`:140

- **Text:** 'Delete'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span className={styles.permissionLabel}>Delete</span>`

## `src/components/AccessRules/AccessRulesEditor.tsx`:204

- **Text:** 'z.B. data.feature.trustee.TrusteePosition'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        return 'z.B. data.feature.trustee.TrusteePosition';`

## `src/components/AccessRules/AccessRulesEditor.tsx`:206

- **Text:** 'z.B. ui.feature.trustee.dashboard'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        return 'z.B. ui.feature.trustee.dashboard';`

## `src/components/AccessRules/AccessRulesEditor.tsx`:208

- **Text:** 'z.B. resource.feature.trustee.documents.create'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        return 'z.B. resource.feature.trustee.documents.create';`

## `src/components/AccessRules/AccessRulesEditor.tsx`:220

- **Text:** 'Objekt auswählen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label className={styles.formLabel}>Objekt auswählen</label>`

## `src/components/AccessRules/AccessRulesEditor.tsx`:226

- **Text:** '← Aus Katalog wählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {useCustom ? '← Aus Katalog wählen' : 'Freie Eingabe →'}`

## `src/components/AccessRules/AccessRulesEditor.tsx`:226

- **Text:** 'Freie Eingabe →'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {useCustom ? '← Aus Katalog wählen' : 'Freie Eingabe →'}`

## `src/components/AccessRules/AccessRulesEditor.tsx`:245

- **Text:** '-- Global (alle Objekte) --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Global (alle Objekte) --</option>`

## `src/components/AccessRules/AccessRulesEditor.tsx`:280

- **Text:** 'Eigene (m)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.matrixGroup}>Eigene (m)</div>`

## `src/components/AccessRules/AccessRulesEditor.tsx`:281

- **Text:** 'Gruppe (g)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.matrixGroup}>Gruppe (g)</div>`

## `src/components/AccessRules/AccessRulesEditor.tsx`:282

- **Text:** 'Alle (a)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.matrixGroup}>Alle (a)</div>`

## `src/components/AccessRules/AccessRulesEditor.tsx`:289

- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            const labels = { create: 'Create', read: 'Read', update: 'Update', delete: 'Delete' };`

## `src/components/AccessRules/AccessRulesEditor.tsx`:372

- **Text:** 'Keine Daten-Regeln definiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      case 'DATA': return 'Keine Daten-Regeln definiert';`

## `src/components/AccessRules/AccessRulesEditor.tsx`:373

- **Text:** 'Keine UI-Regeln definiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      case 'UI': return 'Keine UI-Regeln definiert';`

## `src/components/AccessRules/AccessRulesEditor.tsx`:374

- **Text:** 'Keine Ressourcen-Regeln definiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      case 'RESOURCE': return 'Keine Ressourcen-Regeln definiert';`

## `src/components/AccessRules/AccessRulesEditor.tsx`:392

- **Text:** 'Tabellenansicht'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Tabellenansicht"`

## `src/components/AccessRules/AccessRulesEditor.tsx`:399

- **Text:** 'Kartenansicht'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Kartenansicht"`

## `src/components/AccessRules/AccessRulesEditor.tsx`:430

- **Text:** 'Neue Regel'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              Klicken Sie auf "Neue Regel" um eine Berechtigung hinzuzufügen.`

## `src/components/AccessRules/AccessRulesEditor.tsx`:480

- **Text:** 'JSON muss ein Array sein'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        throw new Error('JSON muss ein Array sein');`

## `src/components/AccessRules/AccessRulesEditor.tsx`:605

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Speichern');`

## `src/components/AccessRules/AccessRulesEditor.tsx`:631

- **Text:** 'Daten'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { id: 'DATA', label: 'Daten', icon: <FaTable />, count: groupedRules.DATA.length },`

## `src/components/AccessRules/AccessRulesEditor.tsx`:632

- **Text:** 'UI'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { id: 'UI', label: 'UI', icon: <FaDesktop />, count: groupedRules.UI.length },`

## `src/components/AccessRules/AccessRulesEditor.tsx`:633

- **Text:** 'Ressourcen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { id: 'RESOURCE', label: 'Ressourcen', icon: <FaServer />, count: groupedRules.RESOURCE.length },`

## `src/components/AccessRules/AccessRulesEditor.tsx`:634

- **Text:** 'JSON'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { id: 'JSON', label: 'JSON', icon: <FaCode />, count: rules.length },`

## `src/components/AccessRules/AccessRulesEditor.tsx`:642

- **Text:** 'Lade Berechtigungen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Lade Berechtigungen...</span>`

## `src/components/AccessRules/AccessRulesTable.tsx`:112

- **Text:** 'Sichtbar'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          title="Sichtbar"`

## `src/components/AccessRules/AccessRulesTable.tsx`:166

- **Text:** 'Regel löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Regel löschen"`

## `src/components/AccessRules/AccessRulesTable.tsx`:198

- **Text:** 'Objekt (Dot-Notation)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <th className={styles.colObject}>Objekt (Dot-Notation)</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:202

- **Text:** 'Eigene (m)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <th className={styles.colGroupHeader} colSpan={4}>Eigene (m)</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:203

- **Text:** 'Gruppe (g)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <th className={styles.colGroupHeader} colSpan={4}>Gruppe (g)</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:204

- **Text:** 'Alle (a)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <th className={styles.colGroupHeader} colSpan={4}>Alle (a)</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:213

- **Text:** 'Create'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Create">C</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:214

- **Text:** 'Read'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Read">R</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:215

- **Text:** 'Update'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Update">U</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:216

- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Delete">D</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:217

- **Text:** 'Create'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Create">C</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:218

- **Text:** 'Read'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Read">R</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:219

- **Text:** 'Update'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Update">U</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:220

- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Delete">D</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:221

- **Text:** 'Create'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Create">C</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:222

- **Text:** 'Read'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Read">R</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:223

- **Text:** 'Update'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Update">U</th>`

## `src/components/AccessRules/AccessRulesTable.tsx`:224

- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <th title="Delete">D</th>`

## `src/components/Chat/ChatInput.tsx`:20

- **Text:** 'Type a message...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  placeholder = 'Type a message...',`

## `src/components/Chat/ChatInput.tsx`:55

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        borderTop: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/Chat/ChatInput.tsx`:71

- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          border: '1px solid var(--border-color, #ddd)',`

## `src/components/Chat/ChatMessageList.tsx`:34

- **Text:** 'No messages yet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  emptyMessage = 'No messages yet.',`

## `src/components/ContentPreview/ContentPreview.tsx`:64

- **Text:** 'Invalid file ID'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError('Invalid file ID');`

## `src/components/ContentPreview/ContentPreview.tsx`:67

- **Text:** 'Unknown Item'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      if (!fileName || fileName === 'Unknown Item') {`

## `src/components/ContentPreview/ContentPreview.tsx`:68

- **Text:** 'File name not available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError('File name not available');`

## `src/components/ContentPreview/ContentPreview.tsx`:96

- **Text:** 's text content but MIME type says PDF, we'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        // If it's text content but MIME type says PDF, we'll handle it in renderPreview`

## `src/components/ContentPreview/ContentPreview.tsx`:98

- **Text:** 'Failed to load preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError(result.error || 'Failed to load preview');`

## `src/components/ContentPreview/ContentPreview.tsx`:101

- **Text:** 'An unexpected error occurred while loading the preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('An unexpected error occurred while loading the preview');`

## `src/components/ContentPreview/ContentPreview.tsx`:171

- **Text:** 'Failed to load PDF preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          onError={() => setError('Failed to load PDF preview')}`

## `src/components/ContentPreview/ContentPreview.tsx`:197

- **Text:** 'JSON Preview (Fallback)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span className={styles.jsonTitle}>JSON Preview (Fallback)</span>`

## `src/components/ContentPreview/ContentPreview.tsx`:199

- **Text:** 'Raw content'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span className={styles.jsonSize}>Raw content</span>`

## `src/components/ContentPreview/ContentPreview.tsx`:204

- **Text:** 'No content available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {previewContent || 'No content available'}`

## `src/components/ContentPreview/ContentPreview.tsx`:222

- **Text:** 'Failed to load image preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            onError={() => setError('Failed to load image preview')}`

## `src/components/ContentPreview/ContentPreview.tsx`:233

- **Text:** 'Failed to load HTML preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              onError={() => setError('Failed to load HTML preview')}`

## `src/components/ContentPreview/ContentPreview.tsx`:243

- **Text:** 'Failed to load text preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            onError={() => setError('Failed to load text preview')}`

## `src/components/ContentPreview/ContentPreview.tsx`:260

- **Text:** 'Failed to load PDF preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              onError={() => setError('Failed to load PDF preview')}`

## `src/components/ContentPreview/ContentPreview.tsx`:270

- **Text:** 'Failed to load HTML preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              onError={() => setError('Failed to load HTML preview')}`

## `src/components/ContentPreview/ContentPreview.tsx`:282

- **Text:** 'Preview not supported for this file type'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            onError={() => setError('Preview not supported for this file type')}`

## `src/components/ContentPreview/UrlContentPreview.tsx`:56

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      link.rel = 'noopener noreferrer';`

## `src/components/ContentPreview/UrlContentPreview.tsx`:82

- **Text:** 'Failed to load PDF. This might be due to CORS restrictions. You can try downloading the file or opening it in a new tab.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    setError('Failed to load PDF. This might be due to CORS restrictions. You can try downloading the file or opening it in a new tab.');`

## `src/components/ContentPreview/UrlContentPreview.tsx`:99

- **Text:** 'PDF lädt langsam. Sie können es auch direkt herunterladen oder in einem neuen Tab öffnen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setWarning('PDF lädt langsam. Sie können es auch direkt herunterladen oder in einem neuen Tab öffnen.');`

## `src/components/ContentPreview/UrlContentPreview.tsx`:110

- **Text:** 'PDF lädt langsam. Versuche alternative Anzeigemethode...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setWarning('PDF lädt langsam. Versuche alternative Anzeigemethode...');`

## `src/components/ContentPreview/UrlContentPreview.tsx`:114

- **Text:** 'PDF lädt langsam. Bitte verwenden Sie den Download-Button oder öffnen Sie es in einem neuen Tab.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setError('PDF lädt langsam. Bitte verwenden Sie den Download-Button oder öffnen Sie es in einem neuen Tab.');`

## `src/components/ContentPreview/UrlContentPreview.tsx`:132

- **Text:** 'Invalid URL'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError('Invalid URL');`

## `src/components/ContentPreview/UrlContentPreview.tsx`:161

- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              borderBottom: '1px solid var(--color-border, #e5e7eb)',`

## `src/components/ContentPreview/UrlContentPreview.tsx`:172

- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              borderBottom: '1px solid var(--color-border, #e5e7eb)',`

## `src/components/ContentPreview/UrlContentPreview.tsx`:270

- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              borderBottom: '1px solid var(--color-border, #e5e7eb)',`

## `src/components/ContentPreview/UrlContentPreview.tsx`:317

- **Text:** 'Preview not supported for this file type. Please download the file to view it.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p>Preview not supported for this file type. Please download the file to view it.</p>`

## `src/components/ContentPreview/renderers/JsonRenderer.tsx`:342

- **Text:** 'Error: Invalid nested data'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                            <span className={styles.jsonValue}>Error: Invalid nested data</span>`

## `src/components/ContentPreview/renderers/JsonRenderer.tsx`:482

- **Text:** 'Raw Content'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      keys: ['Raw Content'],`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:65

- **Text:** 'Failed to load PDF'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setError(err instanceof Error ? err.message : 'Failed to load PDF');`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:115

- **Text:** 'Failed to render PDF page'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setError(err instanceof Error ? err.message : 'Failed to render PDF page');`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:131

- **Text:** 'Fehler beim Laden der PDF: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>Fehler beim Laden der PDF: {error}</p>`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:140

- **Text:** 'PDF wird geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>PDF wird geladen...</p>`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:152

- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderBottom: '1px solid var(--color-border, #e5e7eb)',`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:197

- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--color-border, #e5e7eb)',`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:213

- **Text:** '1px solid var(--color-border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--color-border, #e5e7eb)',`

## `src/components/ContentPreview/renderers/PdfJsRenderer.tsx`:232

- **Text:** '0 2px 8px rgba(0,0,0,0.1)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            boxShadow: '0 2px 8px rgba(0,0,0,0.1)',`

## `src/components/ContentPreview/renderers/TextRenderer.tsx`:19

- **Text:** 'Text Preview'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span className={styles.textTitle}>Text Preview</span>`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:59

- **Text:** 'Jetzt ausführen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  buildInvocationsForPrimaryKind('manual', [], 'Jetzt ausführen');`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:203

- **Text:** 'Keine Nodes im Workflow.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setExecuteResult({ success: false, error: 'Keine Nodes im Workflow.' });`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:228

- **Text:** 'Keine Nodes zum Speichern.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setExecuteResult({ success: false, error: 'Keine Nodes zum Speichern.' });`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:238

- **Text:** 'Workflow speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          title: 'Workflow speichern',`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:239

- **Text:** 'Neuer Workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          defaultValue: 'Neuer Workflow',`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:240

- **Text:** 'Name des Workflows'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          placeholder: 'Name des Workflows',`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:247

- **Text:** 'Neuer Workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          label: label.trim() || 'Neuer Workflow',`

## `src/components/FlowEditor/editor/Automation2FlowEditor.tsx`:596

- **Text:** 'Lade Node-Typen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Lade Node-Typen...</p>`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:38

- **Text:** 'Entwurf'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  draft: { label: 'Entwurf', color: 'var(--warning-color, #ffc107)' },`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:39

- **Text:** 'Veröffentlicht'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  published: { label: 'Veröffentlicht', color: 'var(--success-color, #28a745)' },`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:40

- **Text:** 'Archiviert'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  archived: { label: 'Archiviert', color: 'var(--text-secondary, #666)' },`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:116

- **Text:** 'Meine Vorlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  const SCOPE_LABELS: Record<string, string> = { user: 'Meine Vorlagen', instance: 'Instanz', mandate: 'Mandant' };`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:137

- **Text:** 'Klicken zum Umbenennen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title={onWorkflowRename ? 'Klicken zum Umbenennen' : undefined}`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:151

- **Text:** 'Workflow-Konfiguration (Einstieg / Starts)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Workflow-Konfiguration (Einstieg / Starts)"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:152

- **Text:** 'Workflow-Konfiguration'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            aria-label="Workflow-Konfiguration"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:170

- **Text:** 'Neu aus Vorlage'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Neu aus Vorlage"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:214

- **Text:** 'Als Vorlage speichern'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Als Vorlage speichern"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:242

- **Text:** '— Workflow laden —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="">— Workflow laden —</option>`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:268

- **Text:** 'Workspace-Panel (Chats, Dateien, Quellen)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <button type="button" className={styles.retryButton} onClick={onToggleChat} title="Workspace-Panel (Chats, Dateien, Quellen)">`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:285

- **Text:** '— Aktuelle —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">— Aktuelle —</option>`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:310

- **Text:** 'Version veröffentlichen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Version veröffentlichen"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:323

- **Text:** 'Veröffentlichung zurücknehmen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Veröffentlichung zurücknehmen"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:336

- **Text:** 'Version archivieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Version archivieren"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:349

- **Text:** 'Neuen Entwurf erstellen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Neuen Entwurf erstellen"`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:379

- **Text:** '✓ Ausführung abgeschlossen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <>✓ Ausführung abgeschlossen.</>`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:382

- **Text:** 'Workflows & Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              ⏸ Workflow pausiert. Öffne <strong>Workflows & Tasks</strong> in der Sidebar, um den`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:386

- **Text:** "✗ {executeResult.error ?? 'Unbekannter Fehler'}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <>✗ {executeResult.error ?? 'Unbekannter Fehler'}</>`

## `src/components/FlowEditor/editor/CanvasHeader.tsx`:386

- **Text:** 'Unbekannter Fehler'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <>✗ {executeResult.error ?? 'Unbekannter Fehler'}</>`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:137

- **Text:** 'Request failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          const errText = event.content || 'Request failed';`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:190

- **Text:** 'Describe what you want to build. The AI will create and modify nodes on the canvas.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        emptyMessage="Describe what you want to build. The AI will create and modify nodes on the canvas."`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:197

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderTop: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:223

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderTop: pendingFiles.length > 0 ? 'none' : '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:264

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderTop: hasAttachments ? 'none' : '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:267

- **Text:** '2px dashed var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          outline: treeDropOver ? '2px dashed var(--primary-color, #F25843)' : 'none',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:269

- **Text:** 'background 0.15s, outline 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          transition: 'background 0.15s, outline 0.15s',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:280

- **Text:** 'Describe a change...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          placeholder={workflowId ? 'Describe a change...' : 'Save workflow first'}`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:280

- **Text:** 'Save workflow first'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          placeholder={workflowId ? 'Describe a change...' : 'Save workflow first'}`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:285

- **Text:** '1px solid var(--border-color, #ccc)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, #ccc)',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:297

- **Text:** 'Datenquellen anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Datenquellen anhängen"`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:300

- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #ddd)',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:341

- **Text:** '2px solid #2e7d32'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:341

- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:370

- **Text:** '2px solid #7b1fa2'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`

## `src/components/FlowEditor/editor/EditorChatPanel.tsx`:370

- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:511

- **Text:** 'Delete'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      if (e.key === 'Delete' || e.key === 'Backspace') {`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:596

- **Text:** '0 0, 10 3.5, 0 7'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <polygon points="0 0, 10 3.5, 0 7" fill="var(--text-secondary, #666)" />`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:606

- **Text:** '0 0, 10 3.5, 0 7'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <polygon points="0 0, 10 3.5, 0 7" fill="var(--primary-color, #007bff)" />`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:616

- **Text:** '0 0, 10 3.5, 0 7'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <polygon points="0 0, 10 3.5, 0 7" fill="#FF9800" />`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:641

- **Text:** 'Verbindung auswählen (Entf zum Löschen, klicken Sie auf einen anderen Eingang zum Umleiten)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              aria-label="Verbindung auswählen (Entf zum Löschen, klicken Sie auf einen anderen Eingang zum Umleiten)"`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:660

- **Text:** 'Type mismatch warning: output type may not match input type'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <title>Type mismatch warning: output type may not match input type</title>`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:759

- **Text:** 'Aktuelles Ziel – klicken zum Abwählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                          ? 'Aktuelles Ziel – klicken zum Abwählen'`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:760

- **Text:** 'Klicken zum Umleiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                          : 'Klicken zum Umleiten'`

## `src/components/FlowEditor/editor/FlowCanvas.tsx`:839

- **Text:** 'Nodes aus der Liste links hierher ziehen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p>Nodes aus der Liste links hierher ziehen.</p>`

## `src/components/FlowEditor/editor/NodeConfigPanel.tsx`:89

- **Text:** 'z.B. Kundenformular, Prüfen Land'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="z.B. Kundenformular, Prüfen Land"`

## `src/components/FlowEditor/editor/NodeSidebar.tsx`:89

- **Text:** 'Nodes durchsuchen...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Nodes durchsuchen..."`

## `src/components/FlowEditor/editor/RunTracingPanel.tsx`:220

- **Text:** 'Retry count'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  <span style={{ color: '#f0ad4e', fontSize: '11px' }} title="Retry count">`

## `src/components/FlowEditor/editor/TemplatePicker.tsx`:132

- **Text:** 'Übernehmen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        {copying === tpl.id ? <FaSpinner className={styles.spinner} /> : 'Übernehmen'}`

## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:15

- **Text:** 'Manueller Trigger'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'manual', label: 'Manueller Trigger' },`

## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:16

- **Text:** 'Formular'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'form', label: 'Formular' },`

## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:17

- **Text:** 'Zeitplan'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'schedule', label: 'Zeitplan' },`

## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:18

- **Text:** 'Immer aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'always_on', label: 'Immer aktiv' },`

## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:85

- **Text:** 'z. B. Angebot anlegen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="z. B. Angebot anlegen"`

## `src/components/FlowEditor/editor/WorkflowConfigurationModal.tsx`:88

- **Text:** 'Einstiegsart'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <div className={styles.workflowModalRadioGroup} role="radiogroup" aria-label="Einstiegsart">`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:11

- **Text:** 'Prompt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  'ai.prompt': [{ label: 'Prompt', key: 'prompt', type: 'textarea' }],`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:12

- **Text:** 'Query'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  'ai.webResearch': [{ label: 'Query', key: 'query', type: 'dynamic' }],`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:14

- **Text:** 'Summary length'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { label: 'Summary length', key: 'summaryLength', type: 'select', options: ['short', 'medium', 'long'] },`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:16

- **Text:** 'Target language'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  'ai.translateDocument': [{ label: 'Target language', key: 'targetLanguage', type: 'input' }],`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:18

- **Text:** 'Target format'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { label: 'Target format', key: 'targetFormat', type: 'select', options: ['pdf', 'docx', 'txt', 'md'] },`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:20

- **Text:** 'Prompt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  'ai.generateDocument': [{ label: 'Prompt', key: 'prompt', type: 'dynamic' }],`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:22

- **Text:** 'Prompt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { label: 'Prompt', key: 'prompt', type: 'dynamic' },`

## `src/components/FlowEditor/nodes/configs/AiNodeConfig.tsx`:23

- **Text:** 'Language'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { label: 'Language', key: 'language', type: 'select', options: ['python', 'javascript', 'typescript', 'sql'] },`

## `src/components/FlowEditor/nodes/configs/ApprovalNodeConfig.tsx`:15

- **Text:** 'Genehmigungstitel'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        placeholder="Genehmigungstitel"`

## `src/components/FlowEditor/nodes/configs/ApprovalNodeConfig.tsx`:23

- **Text:** 'Was genehmigt werden soll'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        placeholder="Was genehmigt werden soll"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:84

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  border: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:103

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  borderTop: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:111

- **Text:** 'Liste wählen (Ordner bis /team/…/list/…)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'Liste wählen (Ordner bis /team/…/list/…)';`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:115

- **Text:** 'Aufgabe wählen (Pfad …/task/…)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'Aufgabe wählen (Pfad …/task/…)';`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:117

- **Text:** 'ClickUp durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'ClickUp durchsuchen';`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:378

- **Text:** 'Aufgaben konnten nicht geladen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setLoadError('Aufgaben konnten nicht geladen werden.');`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:402

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="— Quelle wählen —"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:403

- **Text:** 'Statisch (Aufgabe wählen)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            staticLabel="Statisch (Aufgabe wählen)"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:422

- **Text:** '— Aufgabe wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="">— Aufgabe wählen —</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:542

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="— Quelle wählen —"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:555

- **Text:** '— Option wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">— Option wählen —</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:577

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="— Quelle wählen —"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:613

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="— Quelle wählen —"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:638

- **Text:** 'z. B. 1234.56'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        placeholder={ft === 'currency' ? 'z. B. 1234.56' : undefined}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:688

- **Text:** 'Fälligkeit'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <label>Fälligkeit</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:694

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="— Quelle wählen —"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:734

- **Text:** 'Zeitschätzung (Stunden)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <label>Zeitschätzung (Stunden)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:740

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="— Quelle wählen —"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:782

- **Text:** 'Titel (name)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'name', label: 'Titel (name)' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:783

- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'description', label: 'Beschreibung' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:784

- **Text:** 'Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'status', label: 'Status' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:785

- **Text:** 'Priorität (1–4)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'priority', label: 'Priorität (1–4)' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:786

- **Text:** 'Fälligkeit (Datum oder ms)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'due_date', label: 'Fälligkeit (Datum oder ms)' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:787

- **Text:** 'Zeitschätzung (Stunden)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'time_estimate_h', label: 'Zeitschätzung (Stunden)' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:788

- **Text:** 'Zeitschätzung (ms)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'time_estimate_ms', label: 'Zeitschätzung (ms)' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:789

- **Text:** 'Zugewiesene'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'assignees', label: 'Zugewiesene' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:790

- **Text:** 'Benutzerdefiniertes Feld'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'custom_field', label: 'Benutzerdefiniertes Feld' },`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:852

- **Text:** 'Aufgaben konnten nicht geladen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setErr('Aufgaben konnten nicht geladen werden.');`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:867

- **Text:** 'Vorhandene Aufgabe in der gewählten Liste'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <label>Vorhandene Aufgabe in der gewählten Liste</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:882

- **Text:** '— Aufgabe aus ClickUp wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="">— Aufgabe aus ClickUp wählen —</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1047

- **Text:** 'Oder Referenz (ohne Formular-Payload)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        label="Oder Referenz (ohne Formular-Payload)"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1064

- **Text:** 'Feld-ID'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Feld-ID"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1068

- **Text:** 'Neuer Wert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            label="Neuer Wert"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1072

- **Text:** 'Wert'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Wert"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1083

- **Text:** 'Status (Referenz)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            label="Status (Referenz)"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1086

- **Text:** 'Kontext mit Status-String'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Kontext mit Status-String"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1097

- **Text:** 'Status (wie in ClickUp)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Status (wie in ClickUp)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1099

- **Text:** 'Status werden geladen…'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="">Status werden geladen…</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1106

- **Text:** 'Status (wie in ClickUp)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>Status (wie in ClickUp)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1114

- **Text:** '— Keine Status geladen —'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                ? '— Keine Status geladen —'`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1115

- **Text:** '— Status wählen —'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                : '— Status wählen —'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1147

- **Text:** 'Priorität'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>Priorität</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1152

- **Text:** '— wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">— wählen —</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1153

- **Text:** '1 — Dringend'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="1">1 — Dringend</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1154

- **Text:** '2 — Hoch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="2">2 — Hoch</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1155

- **Text:** '3 — Normal'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="3">3 — Normal</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1156

- **Text:** '4 — Niedrig'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="4">4 — Niedrig</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1169

- **Text:** 'Alternativ nur Referenz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {commonHybrid(false, 'Alternativ nur Referenz')}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1181

- **Text:** 'Alternativ: Referenz (Stunden)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {commonHybrid(false, 'Alternativ: Referenz (Stunden)')}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1206

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1234

- **Text:** '[123,456] oder JSON-Array'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {commonHybrid(false, '[123,456] oder JSON-Array')}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1246

- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Beschreibung"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1258

- **Text:** 'Titel'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Titel"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1280

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1654

- **Text:** 'Connection (ClickUp)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label>Connection (ClickUp)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1660

- **Text:** 'Loading...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1660

- **Text:** 'Select connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1683

- **Text:** 'Workspaces werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1683

- **Text:** 'Workspace wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1693

- **Text:** 'Liste (Tabelle)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Liste (Tabelle)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1701

- **Text:** 'Listen werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  ? 'Listen werden geladen…'`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1703

- **Text:** 'Alle Listen im Workspace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    ? 'Alle Listen im Workspace'`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1704

- **Text:** 'Zuerst Workspace wählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    : 'Zuerst Workspace wählen'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1718

- **Text:** 'Stichwort für die Aufgabensuche'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Stichwort für die Aufgabensuche"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1726

- **Text:** 'Seite (Pagination)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label>Seite (Pagination)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1754

- **Text:** 'Erledigte Aufgaben einbeziehen (Listen-Suche)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <span>Erledigte Aufgaben einbeziehen (Listen-Suche)</span>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1793

- **Text:** 'Workspaces werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1793

- **Text:** 'Workspace wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1819

- **Text:** 'Listen werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1819

- **Text:** 'Liste wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1835

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1854

- **Text:** 'Bei Listenwahl automatisch abgleichen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span>Bei Listenwahl automatisch abgleichen</span>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1898

- **Text:** '— Standard (ClickUp) —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <option value="">— Standard (ClickUp) —</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1909

- **Text:** 'Priorität'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <label>Priorität</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1914

- **Text:** '— keine —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="">— keine —</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1915

- **Text:** '1 — Dringend'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="1">1 — Dringend</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1916

- **Text:** '2 — Hoch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="2">2 — Hoch</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1917

- **Text:** '3 — Normal'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="3">3 — Normal</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1918

- **Text:** '4 — Niedrig'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="4">4 — Niedrig</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:1940

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      border: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2013

- **Text:** 'Zusätzliche Felder (JSON)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label>Zusätzliche Felder (JSON)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2018

- **Text:** '{"priority": "3"}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                placeholder='{"priority": "3"}'`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2028

- **Text:** 'List path'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>List path</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2032

- **Text:** '/team/{teamId}/list/{listId}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="/team/{teamId}/list/{listId}"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2069

- **Text:** 'Referenz: voriger Knoten „Aufgabe erstellen“ → taskId'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Referenz: voriger Knoten „Aufgabe erstellen“ → taskId"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2073

- **Text:** 'Path (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Path (optional)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2077

- **Text:** '.../task/{taskId}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder=".../task/{taskId}"`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2090

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2122

- **Text:** 'Workspaces werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2122

- **Text:** 'Workspace wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {searchTeamsLoading ? 'Workspaces werden geladen…' : 'Workspace wählen…'}`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2146

- **Text:** 'Listen werden geladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2146

- **Text:** 'Liste wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <option value="">{searchListsLoading ? 'Listen werden geladen…' : 'Liste wählen…'}</option>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2177

- **Text:** 'taskUpdate (JSON)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label>taskUpdate (JSON)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2182

- **Text:** '{"name": "…"} — Basis; Zeilen darüber setzen/überschreiben Felder'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                placeholder='{"name": "…"} — Basis; Zeilen darüber setzen/überschreiben Felder'`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2191

- **Text:** 'File name (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>File name (optional)</label>`

## `src/components/FlowEditor/nodes/configs/ClickUpNodeConfig.tsx`:2195

- **Text:** 'report.pdf'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="report.pdf"`

## `src/components/FlowEditor/nodes/configs/CommentNodeConfig.tsx`:15

- **Text:** 'Kommentar eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        placeholder="Kommentar eingeben..."`

## `src/components/FlowEditor/nodes/configs/ConfirmationNodeConfig.tsx`:15

- **Text:** 'Möchten Sie bestätigen?'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        placeholder="Möchten Sie bestätigen?"`

## `src/components/FlowEditor/nodes/configs/ConfirmationNodeConfig.tsx`:19

- **Text:** 'Bestätigen-Button'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <label>Bestätigen-Button</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:60

- **Text:** 'Loading...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <option value="">{loading ? 'Loading...' : 'Select connection'}</option>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:60

- **Text:** 'Select connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <option value="">{loading ? 'Loading...' : 'Select connection'}</option>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:77

- **Text:** 'Loading folders...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {foldersLoading ? 'Loading folders...' : !connectionId ? 'Select account first' : 'Select folder'}`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:77

- **Text:** 'Select account first'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {foldersLoading ? 'Loading folders...' : !connectionId ? 'Select account first' : 'Select folder'}`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:77

- **Text:** 'Select folder'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {foldersLoading ? 'Loading folders...' : !connectionId ? 'Select account first' : 'Select folder'}`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:95

- **Text:** 'Sent Items'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <option value="SentItems">Sent Items</option>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:96

- **Text:** 'Deleted Items'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <option value="DeletedItems">Deleted Items</option>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:97

- **Text:** 'Junk Email'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <option value="JunkEmail">Junk Email</option>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:114

- **Text:** 'Search query (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Search query (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:118

- **Text:** 'General search term (subject, body, from)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="General search term (subject, body, from)"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:122

- **Text:** 'From address (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>From address (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:126

- **Text:** 'e.g. sender@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="e.g. sender@example.com"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:130

- **Text:** 'To address (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>To address (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:134

- **Text:** 'e.g. recipient@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="e.g. recipient@example.com"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:138

- **Text:** 'Subject contains (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Subject contains (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:142

- **Text:** 'Word or phrase in subject'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Word or phrase in subject"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:146

- **Text:** 'Body/content contains (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Body/content contains (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:150

- **Text:** 'Word or phrase in email body'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Word or phrase in email body"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:160

- **Text:** 'Only emails with attachment'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label htmlFor="searchHasAttachment">Only emails with attachment</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:175

- **Text:** 'From address (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>From address (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:179

- **Text:** 'e.g. sender@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="e.g. sender@example.com"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:183

- **Text:** 'Subject contains (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Subject contains (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:187

- **Text:** 'Word or phrase in subject'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Word or phrase in subject"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:197

- **Text:** 'Only emails with attachment'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label htmlFor="hasAttachment">Only emails with attachment</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:216

- **Text:** 'Email subject (or leave empty if connected to AI node above)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Email subject (or leave empty if connected to AI node above)"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:224

- **Text:** 'Email body (or leave empty if connected to AI node above)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Email body (or leave empty if connected to AI node above)"`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:229

- **Text:** 'To (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>To (optional)</label>`

## `src/components/FlowEditor/nodes/configs/EmailNodeConfig.tsx`:233

- **Text:** 'Recipient(s) (or from AI when connected)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Recipient(s) (or from AI when connected)"`

## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:44

- **Text:** 'Inhalte (welche Kontexte nacheinander in die Datei?)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label>Inhalte (welche Kontexte nacheinander in die Datei?)</label>`

## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:50

- **Text:** 'Quelle wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Quelle wählen…"`

## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:56

- **Text:** 'Entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Entfernen"`

## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:57

- **Text:** 'Inhalt entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              aria-label="Inhalt entfernen"`

## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:90

- **Text:** 'Dokumenttitel'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Dokumenttitel"`

## `src/components/FlowEditor/nodes/configs/FileCreateNodeConfig.tsx`:94

- **Text:** 'Vorlage / Stil'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label>Vorlage / Stil</label>`

## `src/components/FlowEditor/nodes/configs/ReviewNodeConfig.tsx`:16

- **Text:** '{{nodeId.field}}'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `    placeholder="{{nodeId.field}}"`

## `src/components/FlowEditor/nodes/configs/SelectionNodeConfig.tsx`:16

- **Text:** 'value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="value"`

## `src/components/FlowEditor/nodes/configs/SelectionNodeConfig.tsx`:25

- **Text:** 'label'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="label"`

## `src/components/FlowEditor/nodes/configs/SelectionNodeConfig.tsx`:35

- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      <button type="button" onClick={() => updateParam('options', [...options, { value: '', label: '' }])}>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:15

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  border: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:34

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  borderTop: '1px solid var(--border-color, #e0e0e0)',`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:42

- **Text:** 'Zielordner durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'Zielordner durchsuchen';`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:44

- **Text:** 'Ordner durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'Ordner durchsuchen';`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:46

- **Text:** 'Datei auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'Datei auswählen';`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:48

- **Text:** 'Datei auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'Datei auswählen';`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:50

- **Text:** 'Pfad aus Bibliothek wählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'Pfad aus Bibliothek wählen';`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:52

- **Text:** 'SharePoint durchsuchen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      return 'SharePoint durchsuchen';`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:156

- **Text:** 'Loading...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:156

- **Text:** 'Select connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <option value="">{connectionsLoading ? 'Loading...' : 'Select connection'}</option>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:167

- **Text:** 'Search query / path'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>Search query / path</label>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:171

- **Text:** '/sites/SiteName/Shared Documents or search term'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="/sites/SiteName/Shared Documents or search term"`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:178

- **Text:** 'Folder path'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>Folder path</label>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:182

- **Text:** '/ or /sites/SiteName/Shared Documents/Folder'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="/ or /sites/SiteName/Shared Documents/Folder"`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:191

- **Text:** 'Target folder path'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? 'Target folder path'`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:193

- **Text:** 'File path'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                ? 'File path'`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:204

- **Text:** 'File path'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  : 'File path'`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:212

- **Text:** 'Site ID'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>Site ID</label>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:216

- **Text:** 'SharePoint site ID'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="SharePoint site ID"`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:224

- **Text:** 'Source file'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Source file</label>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:228

- **Text:** '/sites/.../folder/file.pdf'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="/sites/.../folder/file.pdf"`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:232

- **Text:** 'Destination folder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Destination folder</label>`

## `src/components/FlowEditor/nodes/configs/SharePointNodeConfig.tsx`:236

- **Text:** '/sites/.../target-folder/'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="/sites/.../target-folder/"`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:35

- **Text:** 'Trustee Instance ID'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label>Trustee Instance ID</label>`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:39

- **Text:** 'Trustee Feature-Instanz-ID'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Trustee Feature-Instanz-ID"`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:46

- **Text:** 'SharePoint Connection (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>SharePoint Connection (optional)</label>`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:52

- **Text:** 'Keine (Dateien aus vorherigem Schritt)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <option value="">{loading ? 'Laden...' : 'Keine (Dateien aus vorherigem Schritt)'}</option>`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:61

- **Text:** 'SharePoint Ordnerpfad (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>SharePoint Ordnerpfad (optional)</label>`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:65

- **Text:** '/sites/MySite/Documents/Expenses'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="/sites/MySite/Documents/Expenses"`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:69

- **Text:** 'AI Prompt (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>AI Prompt (optional)</label>`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:73

- **Text:** 'Zusätzliche Anweisungen für die AI-Extraktion'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Zusätzliche Anweisungen für die AI-Extraktion"`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:82

- **Text:** 'Document List (Referenz)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>Document List (Referenz)</label>`

## `src/components/FlowEditor/nodes/configs/TrusteeNodeConfig.tsx`:86

- **Text:** 'Referenz auf vorherigen Schritt (automatisch verknüpft)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Referenz auf vorherigen Schritt (automatisch verknüpft)"`

## `src/components/FlowEditor/nodes/configs/UploadNodeConfig.tsx`:40

- **Text:** 'Erlaubte Dateitypen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label>Erlaubte Dateitypen</label>`

## `src/components/FlowEditor/nodes/configs/UploadNodeConfig.tsx`:58

- **Text:** 'Max. Größe (MB)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label>Max. Größe (MB)</label>`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:77

- **Text:** 'Zum Verschieben ziehen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                title="Zum Verschieben ziehen"`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:88

- **Text:** 'name'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder="name"`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:97

- **Text:** 'label'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder="label"`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:134

- **Text:** 'ClickUp-Aufgabe (Referenz)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <option value="clickup_tasks">ClickUp-Aufgabe (Referenz)</option>`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:135

- **Text:** 'ClickUp-Status (Liste)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <option value="clickup_status">ClickUp-Status (Liste)</option>`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:152

- **Text:** 'Feld entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                title="Feld entfernen"`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:188

- **Text:** 'Verbindung wählen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  <option value="">{connectionsLoading ? 'Lade…' : 'Verbindung wählen…'}</option>`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:199

- **Text:** 'z. B. aus ClickUp-URL …/list/123456789'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder="z. B. aus ClickUp-URL …/list/123456789"`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:210

- **Text:** '{ add: [taskId], rem: [] }'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  <code>{'{ add: [taskId], rem: [] }'}</code> — im ClickUp-Node per Datenquelle auf das`

## `src/components/FlowEditor/nodes/form/FormNodeConfig.tsx`:220

- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `            updateParam('fields', [...fields, { name: '', type: 'string', label: '', required: false }])`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:170

- **Text:** '— Select connection —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <option value="">— Select connection —</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:214

- **Text:** 'not equals'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="neq">not equals</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:216

- **Text:** 'greater than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="gt">greater than</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:217

- **Text:** 'less than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="lt">less than</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:230

- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  const addField = () => onChange([...fields, { name: '', type: 'text', label: '', required: false }]);`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:242

- **Text:** 'Name'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <input type="text" placeholder="Name" value={String(f.name ?? '')} onChange={(e) => updateField(i, 'name', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:248

- **Text:** 'Select'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="select">Select</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:251

- **Text:** 'Label'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <input type="text" placeholder="Label" value={String(f.label ?? '')} onChange={(e) => updateField(i, 'label', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:277

- **Text:** 'Key'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <input type="text" placeholder="Key" value={String(r.key ?? r.fieldKey ?? '')} onChange={(e) => updateRow(i, 'key', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:278

- **Text:** 'Value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <input type="text" placeholder="Value" value={String(r.value ?? '')} onChange={(e) => updateRow(i, 'value', e.target.value)} style={{ flex: 2, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:294

- **Text:** '*/5 * * * *'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `      placeholder="*/5 * * * *"`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:310

- **Text:** 'not equals'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="neq">not equals</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:311

- **Text:** 'greater than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="gt">greater than</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:312

- **Text:** 'less than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="lt">less than</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:314

- **Text:** 'is empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="empty">is empty</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:315

- **Text:** 'is not empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="not_empty">is not empty</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:316

- **Text:** 'is true'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="is_true">is true</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:317

- **Text:** 'is false'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="is_false">is false</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:319

- **Text:** 'Value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        <input type="text" placeholder="Value" value={String(cond.value ?? '')} onChange={(e) => update('value', e.target.value)} style={{ flex: 2, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:339

- **Text:** 'Source field'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <input type="text" placeholder="Source field" value={String(m.sourceField ?? '')} onChange={(e) => updateMapping(i, 'sourceField', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:341

- **Text:** 'Output field'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <input type="text" placeholder="Output field" value={String(m.outputField ?? '')} onChange={(e) => updateMapping(i, 'outputField', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:357

- **Text:** 'Field'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        <input type="text" placeholder="Field" value={String(cond.field ?? '')} onChange={(e) => update('field', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:360

- **Text:** 'not equals'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="neq">not equals</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:362

- **Text:** 'starts with'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="startsWith">starts with</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:363

- **Text:** 'is empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="isEmpty">is empty</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:364

- **Text:** 'is not empty'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="isNotEmpty">is not empty</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:365

- **Text:** 'greater than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="gt">greater than</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:366

- **Text:** 'less than'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="lt">less than</option>`

## `src/components/FlowEditor/nodes/frontendTypeRenderers/index.tsx`:368

- **Text:** 'Value'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        <input type="text" placeholder="Value" value={String(cond.value ?? '')} onChange={(e) => update('value', e.target.value)} style={{ flex: 1, padding: '2px 4px', borderRadius: 4, border: '1px solid #ccc' }} />`

## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:49

- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    isMimeTypeRef && sourceNode?.type === 'input.upload' && sourceNode.parameters`

## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:100

- **Text:** 'Formular-Feld wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        <RefSourceSelect value={ref} onChange={handleRefChange} placeholder="Formular-Feld wählen…" />`

## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:120

- **Text:** '— MIME-Type wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="">— MIME-Type wählen —</option>`

## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:142

- **Text:** 'z.B. application/pdf'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      ? 'z.B. application/pdf'`

## `src/components/FlowEditor/nodes/ifElse/IfElseNodeConfig.tsx`:143

- **Text:** 'z.B. CH'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      : 'z.B. CH'`

## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:47

- **Text:** '(ganze Ausgabe)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  const pathLabel = basePath.length ? basePath.map(String).join(' → ') : '(ganze Ausgabe)';`

## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:141

- **Text:** 'Datenquelle wählen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h4 className={styles.dataPickerTitle}>Datenquelle wählen</h4>`

## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:142

- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <button type="button" className={styles.dataPickerClose} onClick={onClose} aria-label="Schließen">`

## `src/components/FlowEditor/nodes/shared/DataPicker.tsx`:183

- **Text:** 'Keine vorherigen Nodes verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              return <p className={styles.dataPickerEmpty}>Keine vorherigen Nodes verfügbar.</p>;`

## `src/components/FlowEditor/nodes/shared/DynamicValueField.tsx`:58

- **Text:** 'Keine vorherigen Nodes verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.dynamicValueEmptyHint}>Keine vorherigen Nodes verfügbar.</p>`

## `src/components/FlowEditor/nodes/shared/HybridStaticRefField.tsx`:86

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="— Quelle wählen —"`

## `src/components/FlowEditor/nodes/shared/LoopItemsSelect.tsx`:71

- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (node?.type === 'input.upload') {`

## `src/components/FlowEditor/nodes/shared/LoopItemsSelect.tsx`:159

- **Text:** 'Über was soll iteriert werden?'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  placeholder = 'Über was soll iteriert werden?',`

## `src/components/FlowEditor/nodes/shared/LoopItemsSelect.tsx`:185

- **Text:** 'Datenquelle für Iteration'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <label>Datenquelle für Iteration</label>`

## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:109

- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  if (node.type === 'input.upload') {`

## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:193

- **Text:** '— Quelle wählen —'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  placeholder = '— Quelle wählen —',`

## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:270

- **Text:** 'Datenquelle wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  placeholder = 'Datenquelle wählen…',`

## `src/components/FlowEditor/nodes/shared/RefSourceSelect.tsx`:360

- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  if (node.type === 'input.upload') {`

## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:20

- **Text:** 'Feld 1'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  if (!Array.isArray(raw)) return [{ name: 'field1', label: 'Feld 1', type: 'text' }];`

## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:62

- **Text:** 'Name (Payload-Key)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Name (Payload-Key)"`

## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:72

- **Text:** 'Beschriftung'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Beschriftung"`

## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:99

- **Text:** 'ClickUp-Status (Liste)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="clickup_status">ClickUp-Status (Liste)</option>`

## `src/components/FlowEditor/nodes/start/FormStartNodeConfig.tsx`:114

- **Text:** 'Neues Feld'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `            setFields([...fields, { name: `field${fields.length + 1}`, label: 'Neues Feld', type: 'text' }])`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:20

- **Text:** 'Täglich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'daily', title: 'Täglich', subtitle: 'Jeden Tag zur gleichen Zeit' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:20

- **Text:** 'Jeden Tag zur gleichen Zeit'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'daily', title: 'Täglich', subtitle: 'Jeden Tag zur gleichen Zeit' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:21

- **Text:** 'Montag bis Freitag'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'weekdays', title: 'Werktage', subtitle: 'Montag bis Freitag' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:22

- **Text:** 'Bestimmte Tage'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'weekly', title: 'Bestimmte Tage', subtitle: 'Wochentage auswählen' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:22

- **Text:** 'Wochentage auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'weekly', title: 'Bestimmte Tage', subtitle: 'Wochentage auswählen' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:23

- **Text:** 'Ein anderer Zeitraum'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'calendar', title: 'Ein anderer Zeitraum', subtitle: 'Monatlich oder jährlich wiederkehrend' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:23

- **Text:** 'Monatlich oder jährlich wiederkehrend'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'calendar', title: 'Ein anderer Zeitraum', subtitle: 'Monatlich oder jährlich wiederkehrend' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:24

- **Text:** 'In regelmäßigen Abständen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { value: 'interval', title: 'Intervall', subtitle: 'In regelmäßigen Abständen' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:30

- **Text:** 'März'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  'März',`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:43

- **Text:** 'sek'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'seconds', label: 'sek', title: 'Sekunden' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:44

- **Text:** 'min'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'minutes', label: 'min', title: 'Minuten' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:45

- **Text:** 'h'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'hours', label: 'h', title: 'Stunden' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:46

- **Text:** 'd'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'days', label: 'd', title: 'Tage' },`

## `src/components/FlowEditor/nodes/start/ScheduleStartNodeConfig.tsx`:47

- **Text:** 'a'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'years', label: 'a', title: 'Jahre' },`

## `src/components/FlowEditor/nodes/start/StartNodeConfig.tsx`:12

- **Text:** 'manual | form | schedule | email | webhook | api | event'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    "type": "manual | form | schedule | email | webhook | api | event",`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:58

- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    isMimeTypeRef && sourceNode?.type === 'input.upload' && sourceNode.parameters`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:114

- **Text:** '— MIME-Type wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="">— MIME-Type wählen —</option>`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:130

- **Text:** '0'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="0"`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:154

- **Text:** '— wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="">— wählen —</option>`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:155

- **Text:** 'Ja / wahr'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="true">Ja / wahr</option>`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:156

- **Text:** 'Nein / falsch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="false">Nein / falsch</option>`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:166

- **Text:** 'z.B. application/pdf'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        placeholder={isMimeTypeRef ? 'z.B. application/pdf' : `Wert`}`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:189

- **Text:** 'Feld zum Vergleichen wählen…'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Feld zum Vergleichen wählen…"`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:195

- **Text:** 'Fester Wert (falls keine Referenz)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>Fester Wert (falls keine Referenz)</label>`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:200

- **Text:** 'z.B. CH oder 42'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="z.B. CH oder 42"`

## `src/components/FlowEditor/nodes/switch/SwitchNodeConfig.tsx`:206

- **Text:** 'Fälle (Reihenfolge = Ausgang)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label>Fälle (Reihenfolge = Ausgang)</label>`

## `src/components/FolderTree/FolderTree.tsx`:164

- **Text:** 'Persönlich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  personal: 'Persönlich',`

## `src/components/FolderTree/FolderTree.tsx`:257

- **Text:** 'Umbenennen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); setRenameValue(file.fileName); setRenaming(true); }} title="Umbenennen">`

## `src/components/FolderTree/FolderTree.tsx`:278

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                <button className={`${styles.actionBtn} ${styles.danger}`} onClick={_handleDeleteSingle} title="Löschen">`

## `src/components/FolderTree/FolderTree.tsx`:311

- **Text:** 'Neutralisierung aktiv (klicken zum Deaktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title={file.neutralize ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`

## `src/components/FolderTree/FolderTree.tsx`:311

- **Text:** 'Neutralisierung aus (klicken zum Aktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title={file.neutralize ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`

## `src/components/FolderTree/FolderTree.tsx`:380

- **Text:** 'Neuer Ordnername:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`

## `src/components/FolderTree/FolderTree.tsx`:380

- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`

## `src/components/FolderTree/FolderTree.tsx`:499

- **Text:** 'Ordner herunterladen (ZIP)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); onDownloadFolder(node.id, node.name); }} title="Ordner herunterladen (ZIP)">`

## `src/components/FolderTree/FolderTree.tsx`:504

- **Text:** 'Neuer Unterordner'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            <button className={styles.actionBtn} onClick={_handleAdd} title="Neuer Unterordner">`

## `src/components/FolderTree/FolderTree.tsx`:509

- **Text:** 'Umbenennen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); setRenameValue(node.name); setRenaming(true); }} title="Umbenennen">`

## `src/components/FolderTree/FolderTree.tsx`:529

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            <button className={`${styles.actionBtn} ${styles.danger}`} onClick={_handleDeleteSingle} title="Löschen">`

## `src/components/FolderTree/FolderTree.tsx`:754

- **Text:** 'Aktualisieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            <button className={styles.actionBtn} onClick={(e) => { e.stopPropagation(); onRefresh(); }} title="Aktualisieren">`

## `src/components/FolderTree/FolderTree.tsx`:763

- **Text:** 'Neuer Ordnername:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`

## `src/components/FolderTree/FolderTree.tsx`:763

- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                const name = await promptFolderName('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`

## `src/components/FolderTree/FolderTree.tsx`:766

- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Neuer Ordner"`

## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:50

- **Text:** 'DeleteActionButton requires hookData to be provided'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('DeleteActionButton requires hookData to be provided');`

## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:65

- **Text:** 'DeleteActionButton requires hookData.refetch to be defined'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('DeleteActionButton requires hookData.refetch to be defined');`

## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:134

- **Text:** 'Delete failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        onError?.(row, 'Delete failed');`

## `src/components/FormGenerator/ActionButtons/DeleteActionButton/DeleteActionButton.tsx`:138

- **Text:** 'Delete failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      onError?.(row, error.message || 'Delete failed');`

## `src/components/FormGenerator/ActionButtons/EditActionButton/EditActionButton.tsx`:61

- **Text:** 'EditActionButton requires hookData to be provided'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('EditActionButton requires hookData to be provided');`

## `src/components/FormGenerator/ActionButtons/ViewActionButton/ViewActionButton.tsx`:103

- **Text:** 'Unknown Item'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          fileName={(row as any)[nameField] || 'Unknown Item'}`

## `src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx`:43

- **Text:** 'Sync to Accounting'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  // Optional batch actions (e.g. "Sync to Accounting") – shown when items are selected`

## `src/components/FormGenerator/FormGeneratorControls/FormGeneratorControls.tsx`:160

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder=" "`

## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:670

- **Text:** 'English'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { code: 'en', label: 'English', required: true },`

## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:671

- **Text:** 'German'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { code: 'ge', label: 'German', required: false },`

## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:672

- **Text:** 'French'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { code: 'fr', label: 'French', required: false },`

## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:673

- **Text:** 'Italian'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { code: 'it', label: 'Italian', required: false }`

## `src/components/FormGenerator/FormGeneratorForm/FormGeneratorForm.tsx`:817

- **Text:** "({currentValues.length} {t('ausgewählt')})"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span className={styles.multiselectCount}> ({currentValues.length} {t('ausgewählt')})</span>`

## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:133

- **Text:** '⚠️ FormGeneratorList: No fields provided! '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      '⚠️ FormGeneratorList: No fields provided! ' +`

## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:134

- **Text:** 'Fields should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      'Fields should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. ' +`

## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:135

- **Text:** 'Please ensure the calling component fetches and passes fields from the backend.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      'Please ensure the calling component fetches and passes fields from the backend.'`

## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:354

- **Text:** 'Some items failed to delete'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            throw new Error('Some items failed to delete');`

## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:441

- **Text:** 'in progress'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (statusValue === 'pending' || statusValue === 'waiting' || statusValue === 'in_progress' || statusValue === 'in progress') {`

## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:611

- **Text:** 't support '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    // TextField doesn't support 'textarea' type, use 'text' instead`

## `src/components/FormGenerator/FormGeneratorList/FormGeneratorList.tsx`:611

- **Text:** ' type, use '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    // TextField doesn't support 'textarea' type, use 'text' instead`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:42

- **Text:** 'Mär'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  '01': 'Jan', '02': 'Feb', '03': 'Mär', '04': 'Apr',`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:118

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.noData}>Keine Daten</div>;`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:162

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.noData}>Keine Daten</div>;`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:193

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.noData}>Keine Daten</div>;`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:239

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.noData}>Keine Daten</div>;`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:285

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.noData}>Keine Daten</div>;`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:345

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.noData}>Keine Daten</div>;`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:457

- **Text:** 'Unbekannter Sektionstyp'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        return <div className={styles.noData}>Unbekannter Sektionstyp</div>;`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:522

- **Text:** 'Januar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 1, label: 'Januar' }, { value: 2, label: 'Februar' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:522

- **Text:** 'Februar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 1, label: 'Januar' }, { value: 2, label: 'Februar' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:523

- **Text:** 'März'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 3, label: 'März' }, { value: 4, label: 'April' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:523

- **Text:** 'April'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 3, label: 'März' }, { value: 4, label: 'April' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:524

- **Text:** 'Mai'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 5, label: 'Mai' }, { value: 6, label: 'Juni' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:524

- **Text:** 'Juni'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 5, label: 'Mai' }, { value: 6, label: 'Juni' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:525

- **Text:** 'Juli'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 7, label: 'Juli' }, { value: 8, label: 'August' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:525

- **Text:** 'August'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 7, label: 'Juli' }, { value: 8, label: 'August' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:526

- **Text:** 'September'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 9, label: 'September' }, { value: 10, label: 'Oktober' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:526

- **Text:** 'Oktober'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 9, label: 'September' }, { value: 10, label: 'Oktober' },`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:527

- **Text:** 'November'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 11, label: 'November' }, { value: 12, label: 'Dezember' }`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:527

- **Text:** 'Dezember'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 11, label: 'November' }, { value: 12, label: 'Dezember' }`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:652

- **Text:** 'Keine Daten verfügbar'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  noDataMessage = 'Keine Daten verfügbar',`

## `src/components/FormGenerator/FormGeneratorReport/FormGeneratorReport.tsx`:718

- **Text:** 'Lade Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <div className={styles.loadingContainer}>Lade Daten...</div>`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:363

- **Text:** '⚠️ FormGeneratorTable: No columns provided! '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      '⚠️ FormGeneratorTable: No columns provided! ' +`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:364

- **Text:** 'Columns should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      'Columns should come from Pydantic attribute definitions via /attributes/{entityType} endpoint. ' +`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:365

- **Text:** 'Please ensure the calling component fetches and passes columns from the backend.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      'Please ensure the calling component fetches and passes columns from the backend.'`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1328

- **Text:** "') + '"
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          str = '"' + str.replace(/"/g, '""') + '"';`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1686

- **Text:** 's a number, check if it'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            // If it's a number, check if it's in seconds (typical Unix timestamp range)`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1694

- **Text:** 's an ISO date string or date string (contains '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            // Check if it's an ISO date string or date string (contains 'T', '-', or ':')`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:1694

- **Text:** ', or '
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            // Check if it's an ISO date string or date string (contains 'T', '-', or ':')`

## `src/components/FormGenerator/FormGeneratorTable/FormGeneratorTable.tsx`:2088

- **Text:** '2px solid var(--border-color, #e2e8f0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            borderBottom: '2px solid var(--border-color, #e2e8f0)'`

## `src/components/Navigation/MandateNavigation.tsx`:62

- **Text:** 'Meine Sicht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Used for grouping static items under "Meine Sicht" and "Administration".`

## `src/components/Navigation/UserSection.tsx`:142

- **Text:** 'Rechtliche Hinweise'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2>Rechtliche Hinweise</h2>`

## `src/components/Navigation/UserSection.tsx`:152

- **Text:** 'Datenverarbeitung und KI-Nutzung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <h3>Datenverarbeitung und KI-Nutzung</h3>`

## `src/components/Navigation/UserSection.tsx`:154

- **Text:** '1. Einwilligung zur Datenverarbeitung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <h4>1. Einwilligung zur Datenverarbeitung</h4>`

## `src/components/Navigation/UserSection.tsx`:155

- **Text:** 'Mit der Nutzung dieser Anwendung stimmen Sie zu und erklären sich mit den folgenden Bedingungen zur Verarbeitung Ihrer Daten durch künstliche Intelligenz einverstanden:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Mit der Nutzung dieser Anwendung stimmen Sie zu und erklären sich mit den folgenden Bedingungen zur Verarbeitung Ihrer Daten durch künstliche Intelligenz einverstanden:</p>`

## `src/components/Navigation/UserSection.tsx`:157

- **Text:** 'Sie autorisieren die Erfassung, Verarbeitung, Übertragung und Speicherung aller Daten, die Sie bei der Nutzung unserer Dienste bereitstellen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <li>Sie autorisieren die Erfassung, Verarbeitung, Übertragung und Speicherung aller Daten, die Sie bei der Nutzung unserer Dienste bereitstellen.</li>`

## `src/components/Navigation/UserSection.tsx`:158

- **Text:** 'Nutzerdaten können an Drittanbieter von künstlicher Intelligenz übertragen werden (z.B. OpenAI).'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <li>Nutzerdaten können an Drittanbieter von künstlicher Intelligenz übertragen werden (z.B. OpenAI).</li>`

## `src/components/Navigation/UserSection.tsx`:159

- **Text:** 'Diese Einwilligung erstreckt sich auf alle Inhalte, einschließlich Text, Bilder, Dokumente und Gesprächsverläufe.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <li>Diese Einwilligung erstreckt sich auf alle Inhalte, einschließlich Text, Bilder, Dokumente und Gesprächsverläufe.</li>`

## `src/components/Navigation/UserSection.tsx`:162

- **Text:** '2. Anerkennung der KI-Verarbeitungsrisiken'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <h4>2. Anerkennung der KI-Verarbeitungsrisiken</h4>`

## `src/components/Navigation/UserSection.tsx`:164

- **Text:** 'KI-Systeme können unerwartete oder ungenaue Ausgaben erzeugen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <li>KI-Systeme können unerwartete oder ungenaue Ausgaben erzeugen.</li>`

## `src/components/Navigation/UserSection.tsx`:165

- **Text:** 'KI-Dienste können Daten gemäß ihren eigenen Nutzungsbedingungen speichern oder daraus lernen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <li>KI-Dienste können Daten gemäß ihren eigenen Nutzungsbedingungen speichern oder daraus lernen.</li>`

## `src/components/Navigation/UserSection.tsx`:166

- **Text:** 'Trotz Sicherheitsmaßnahmen können Daten anfällig für unbefugten Zugriff sein.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <li>Trotz Sicherheitsmaßnahmen können Daten anfällig für unbefugten Zugriff sein.</li>`

## `src/components/Navigation/UserSection.tsx`:169

- **Text:** '3. Haftungsausschluss'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <h4>3. Haftungsausschluss</h4>`

## `src/components/Navigation/UserSection.tsx`:170

- **Text:** 'Im größtmöglichen Umfang verzichten Sie auf Ansprüche, die sich aus der KI-Verarbeitung ergeben, einschließlich Datenverletzungen und unbeabsichtigter Offenlegung.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Im größtmöglichen Umfang verzichten Sie auf Ansprüche, die sich aus der KI-Verarbeitung ergeben, einschließlich Datenverletzungen und unbeabsichtigter Offenlegung.</p>`

## `src/components/Navigation/UserSection.tsx`:174

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                <a href="/poweron-privacy.html" target="_blank" rel="noopener noreferrer">`

## `src/components/Navigation/UserSection.tsx`:177

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                <a href="/poweron-terms.html" target="_blank" rel="noopener noreferrer">`

## `src/components/Navigation/UserSection.tsx`:180

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                <a href="/poweron-home.html" target="_blank" rel="noopener noreferrer">`

## `src/components/NotificationBell/NotificationBell.tsx`:29

- **Text:** 'Gerade eben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  if (diff < 60) return 'Gerade eben';`

## `src/components/NotificationBell/NotificationBell.tsx`:183

- **Text:** 'Keine Benachrichtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Keine Benachrichtigungen</p>`

## `src/components/NotificationBell/NotificationBell.tsx`:253

- **Text:** 'Schliessen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    aria-label="Schliessen"`

## `src/components/OnboardingAssistant.tsx`:21

- **Text:** 'Tipp: Ein Mandant ist Ihr Arbeitsbereich. Sie koennen spaeter weitere Mandanten fuer Teams oder Projekte erstellen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  mandate: 'Tipp: Ein Mandant ist Ihr Arbeitsbereich. Sie koennen spaeter weitere Mandanten fuer Teams oder Projekte erstellen.',`

## `src/components/OnboardingAssistant.tsx`:22

- **Text:** 'Tipp: Im Store finden Sie AI-Workspace, CommCoach und weitere Features. Aktivieren Sie mindestens eines, um loszulegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  feature: 'Tipp: Im Store finden Sie AI-Workspace, CommCoach und weitere Features. Aktivieren Sie mindestens eines, um loszulegen.',`

## `src/components/OnboardingAssistant.tsx`:23

- **Text:** 'Tipp: Verbinden Sie Ihre Datenquellen (z.B. SharePoint, Google Drive), damit der AI-Assistent auf Ihre Dokumente zugreifen kann.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  connection: 'Tipp: Verbinden Sie Ihre Datenquellen (z.B. SharePoint, Google Drive), damit der AI-Assistent auf Ihre Dokumente zugreifen kann.',`

## `src/components/OnboardingAssistant.tsx`:24

- **Text:** 'Tipp: Starten Sie einen Chat mit dem AI-Assistenten. Er kann Ihre verbundenen Daten analysieren und Fragen beantworten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  chat: 'Tipp: Starten Sie einen Chat mit dem AI-Assistenten. Er kann Ihre verbundenen Daten analysieren und Fragen beantworten.',`

## `src/components/OnboardingAssistant.tsx`:97

- **Text:** 'Mandant einrichten'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Mandant einrichten',`

## `src/components/OnboardingAssistant.tsx`:99

- **Text:** 'Dein Mandant ist eingerichtet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          ? 'Dein Mandant ist eingerichtet.'`

## `src/components/OnboardingAssistant.tsx`:101

- **Text:** 'Du bist Mitglied eines Mandanten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            ? 'Du bist Mitglied eines Mandanten.'`

## `src/components/OnboardingAssistant.tsx`:102

- **Text:** 'Erstelle deinen Arbeitsbereich.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            : 'Erstelle deinen Arbeitsbereich.',`

## `src/components/OnboardingAssistant.tsx`:109

- **Text:** 'Erstes Feature aktivieren'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Erstes Feature aktivieren',`

## `src/components/OnboardingAssistant.tsx`:111

- **Text:** 'Du hast aktive Features.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          ? 'Du hast aktive Features.'`

## `src/components/OnboardingAssistant.tsx`:112

- **Text:** 'Aktiviere dein erstes Feature im Store.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          : 'Aktiviere dein erstes Feature im Store.',`

## `src/components/OnboardingAssistant.tsx`:126

- **Text:** 'Erste Datenquelle einbinden'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Erste Datenquelle einbinden',`

## `src/components/OnboardingAssistant.tsx`:128

- **Text:** 'Du hast Verbindungen eingerichtet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          ? 'Du hast Verbindungen eingerichtet.'`

## `src/components/OnboardingAssistant.tsx`:129

- **Text:** 'Verbinde deine erste Datenquelle.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          : 'Verbinde deine erste Datenquelle.',`

## `src/components/OnboardingAssistant.tsx`:147

- **Text:** 'Ersten AI-Chat starten'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Ersten AI-Chat starten',`

## `src/components/OnboardingAssistant.tsx`:149

- **Text:** 'Du hast bereits Chats gestartet.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          ? 'Du hast bereits Chats gestartet.'`

## `src/components/OnboardingAssistant.tsx`:150

- **Text:** 'Starte deinen ersten Chat mit dem AI-Assistenten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          : 'Starte deinen ersten Chat mit dem AI-Assistenten.',`

## `src/components/OnboardingAssistant.tsx`:208

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      border: '1px solid var(--border-color, #e5e7eb)',`

## `src/components/OnboardingAssistant.tsx`:227

- **Text:** 'background 0.3s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              transition: 'background 0.3s',`

## `src/components/OnboardingAssistant.tsx`:242

- **Text:** '1px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  border: step.completed ? 'none' : isNextStep ? '1px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`

## `src/components/OnboardingAssistant.tsx`:242

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  border: step.completed ? 'none' : isNextStep ? '1px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`

## `src/components/OnboardingAssistant.tsx`:268

- **Text:** '3px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  borderLeft: '3px solid var(--accent, #4f46e5)',`

## `src/components/OnboardingAssistant.tsx`:281

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        borderTop: '1px solid var(--border-color, #e5e7eb)',`

## `src/components/OnboardingAssistant.tsx`:295

- **Text:** '1px solid var(--border-color, #d1d5db)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, #d1d5db)',`

## `src/components/OnboardingWizard.tsx`:24

- **Text:** 'Du hast bereits einen Mandanten mit Admin-Zugang.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError('Du hast bereits einen Mandanten mit Admin-Zugang.');`

## `src/components/OnboardingWizard.tsx`:30

- **Text:** 'Fehler bei der Einrichtung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err?.response?.data?.detail || 'Fehler bei der Einrichtung');`

## `src/components/OnboardingWizard.tsx`:44

- **Text:** '0 8px 32px rgba(0,0,0,0.2)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        maxWidth: '480px', width: '90%', boxShadow: '0 8px 32px rgba(0,0,0,0.2)',`

## `src/components/OnboardingWizard.tsx`:54

- **Text:** '2px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: planKey === 'TRIAL_7D' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`

## `src/components/OnboardingWizard.tsx`:54

- **Text:** '2px solid var(--border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: planKey === 'TRIAL_7D' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`

## `src/components/OnboardingWizard.tsx`:60

- **Text:** 'Kostenlos testen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <strong>Kostenlos testen</strong>`

## `src/components/OnboardingWizard.tsx`:69

- **Text:** '2px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: planKey === 'STANDARD_MONTHLY' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`

## `src/components/OnboardingWizard.tsx`:69

- **Text:** '2px solid var(--border, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: planKey === 'STANDARD_MONTHLY' ? '2px solid var(--accent, #4f46e5)' : '2px solid var(--border, #e5e7eb)',`

## `src/components/OnboardingWizard.tsx`:75

- **Text:** 'Standard (Monatlich)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <strong>Standard (Monatlich)</strong>`

## `src/components/OnboardingWizard.tsx`:90

- **Text:** 'z. B. Firmenname oder Projektname'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="z. B. Firmenname oder Projektname"`

## `src/components/OnboardingWizard.tsx`:114

- **Text:** 'Wird eingerichtet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {loading ? 'Wird eingerichtet...' : 'Mandant erstellen'}`

## `src/components/OnboardingWizard.tsx`:114

- **Text:** 'Mandant erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {loading ? 'Wird eingerichtet...' : 'Mandant erstellen'}`

## `src/components/ProviderSelector/ProviderSelector.tsx`:80

- **Text:** 'Anthropic (Claude)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  anthropic: 'Anthropic (Claude)',`

## `src/components/ProviderSelector/ProviderSelector.tsx`:81

- **Text:** 'OpenAI (GPT)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  openai: 'OpenAI (GPT)',`

## `src/components/ProviderSelector/ProviderSelector.tsx`:82

- **Text:** 'Mistral (Le Chat)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  mistral: 'Mistral (Le Chat)',`

## `src/components/ProviderSelector/ProviderSelector.tsx`:84

- **Text:** 'Tavily (Web Search)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  tavily: 'Tavily (Web Search)',`

## `src/components/ProviderSelector/ProviderSelector.tsx`:85

- **Text:** 'Private LLM'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  privatellm: 'Private LLM',`

## `src/components/ProviderSelector/ProviderSelector.tsx`:144

- **Text:** '-- Auto --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <option value="">-- Auto --</option>`

## `src/components/ProviderSelector/ProviderSelector.tsx`:264

- **Text:** 'Kein Provider ausgewählt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (noneSelected) return 'Kein Provider ausgewählt';`

## `src/components/ProviderSelector/ProviderSelector.tsx`:265

- **Text:** 'Alle Provider aktiv (dynamisch)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (allSelected) return 'Alle Provider aktiv (dynamisch)';`

## `src/components/ProviderSelector/ProviderSelector.tsx`:282

- **Text:** 'Provider auswählen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        title="Provider auswählen"`

## `src/components/ProviderSelector/ProviderSelector.tsx`:347

- **Text:** 'Alle Provider'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <span className={styles.allProviders}>Alle Provider</span>;`

## `src/components/RbacExportImport/RbacExportImport.tsx`:47

- **Text:** 'Zusammenführen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    label: 'Zusammenführen',`

## `src/components/RbacExportImport/RbacExportImport.tsx`:48

- **Text:** 'Bestehende Regeln aktualisieren, neue hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    description: 'Bestehende Regeln aktualisieren, neue hinzufügen',`

## `src/components/RbacExportImport/RbacExportImport.tsx`:53

- **Text:** 'Nur hinzufügen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    label: 'Nur hinzufügen',`

## `src/components/RbacExportImport/RbacExportImport.tsx`:54

- **Text:** 'Nur neue Regeln hinzufügen, bestehende nicht ändern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    description: 'Nur neue Regeln hinzufügen, bestehende nicht ändern',`

## `src/components/RbacExportImport/RbacExportImport.tsx`:59

- **Text:** 'Ersetzen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    label: 'Ersetzen',`

## `src/components/RbacExportImport/RbacExportImport.tsx`:60

- **Text:** 'Alle bestehenden Regeln löschen und ersetzen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    description: 'Alle bestehenden Regeln löschen und ersetzen',`

## `src/components/RbacExportImport/RbacExportImport.tsx`:91

- **Text:** 'Rollen ({data.roles.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h5>Rollen ({data.roles.length})</h5>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:100

- **Text:** '... und {data.roles.length - 5} weitere'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <li className={styles.moreItems}>... und {data.roles.length - 5} weitere</li>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:105

- **Text:** 'Regeln ({data.accessRules.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h5>Regeln ({data.accessRules.length})</h5>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:114

- **Text:** '... und {data.accessRules.length - 5} weitere'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <li className={styles.moreItems}>... und {data.accessRules.length - 5} weitere</li>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:144

- **Text:** 'Import erfolgreich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {isSuccess ? 'Import erfolgreich' : 'Import fehlgeschlagen'}`

## `src/components/RbacExportImport/RbacExportImport.tsx`:144

- **Text:** 'Import fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {isSuccess ? 'Import erfolgreich' : 'Import fehlgeschlagen'}`

## `src/components/RbacExportImport/RbacExportImport.tsx`:151

- **Text:** 'Rollen erstellt:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <li><strong>Rollen erstellt:</strong> {result.rolesCreated}</li>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:152

- **Text:** 'Rollen aktualisiert:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <li><strong>Rollen aktualisiert:</strong> {result.rolesUpdated}</li>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:153

- **Text:** 'Regeln erstellt:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <li><strong>Regeln erstellt:</strong> {result.rulesCreated}</li>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:154

- **Text:** 'Regeln aktualisiert:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <li><strong>Regeln aktualisiert:</strong> {result.rulesUpdated}</li>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:232

- **Text:** 'Fehler beim Parsen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setParseError(result.error || 'Fehler beim Parsen');`

## `src/components/RbacExportImport/RbacExportImport.tsx`:288

- **Text:** ' der globalen Templates'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {isGlobal ? ' der globalen Templates' : ` des Mandanten "${mandateName || mandateId}"`}`

## `src/components/RbacExportImport/RbacExportImport.tsx`:288

- **Text:** '${mandateName || mandateId}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {isGlobal ? ' der globalen Templates' : ` des Mandanten "${mandateName || mandateId}"`}`

## `src/components/RbacExportImport/RbacExportImport.tsx`:335

- **Text:** 'JSON-Datei auswählen oder hier ablegen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>JSON-Datei auswählen oder hier ablegen</span>`

## `src/components/RbacExportImport/RbacExportImport.tsx`:343

- **Text:** 'Datei entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                title="Datei entfernen"`

## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:91

- **Text:** 'no results'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setShowSuggestions(results.length > 0 || true); // Show dropdown even if empty to show "no results" or error`

## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:96

- **Text:** 'Fehler beim Laden der Adressvorschläge'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMessage = err?.response?.data?.detail || err?.message || 'Fehler beim Laden der Adressvorschläge';`

## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:277

- **Text:** 'Suche Adressen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={styles.loadingText}>Suche Adressen...</span>`

## `src/components/UiComponents/AddressAutocomplete/AddressAutocomplete.tsx`:287

- **Text:** 'Keine Adressen gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={styles.noResultsText}>Keine Adressen gefunden</span>`

## `src/components/UiComponents/AutoScroll/AutoScroll.tsx`:22

- **Text:** 'at bottom'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `   * Threshold in pixels from bottom to consider user "at bottom"`

## `src/components/UiComponents/AutoScroll/AutoScroll.tsx`:151

- **Text:** 'Scroll to bottom'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          aria-label="Scroll to bottom"`

## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:42

- **Text:** 'Ausnützungsziffer:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={styles.label}>Ausnützungsziffer:</span>`

## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:54

- **Text:** 'Gebäudelänge max:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={styles.label}>Gebäudelänge max:</span>`

## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:66

- **Text:** 'Mehrlängenzuschlag:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={styles.label}>Mehrlängenzuschlag:</span>`

## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:72

- **Text:** 'Höchstmass max:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={styles.label}>Höchstmass max:</span>`

## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:78

- **Text:** 'Fassadenhöhe:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={styles.label}>Fassadenhöhe:</span>`

## `src/components/UiComponents/BauvorschriftenSection/BauvorschriftenSection.tsx`:89

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                rel="noopener noreferrer"`

## `src/components/UiComponents/Button/CreateButton/CreateButton.tsx`:11

- **Text:** 'Create New Item'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  popupTitle = 'Create New Item',`

## `src/components/UiComponents/Button/CreateButton/CreateButton.tsx`:128

- **Text:** 'Creation failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          onError(result?.error || 'Creation failed');`

## `src/components/UiComponents/Button/CreateButton/CreateButton.tsx`:134

- **Text:** 'Creation failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        onError(error.message || 'Creation failed');`

## `src/components/UiComponents/Button/UploadButton/UploadButton.tsx`:74

- **Text:** 'Upload File'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        {children || (isUploading ? 'Uploading...' : 'Upload File')}`

## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:68

- **Text:** 'No files connected to this workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  emptyMessage = 'No files connected to this workflow'`

## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:184

- **Text:** 'Connected Files'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.title}>Connected Files</h3>`

## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:231

- **Text:** 'Click to detach from next message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title={onAttach ? (isPendingFile ? 'Click to detach from next message' : 'Click to attach for next message') : undefined}`

## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:231

- **Text:** 'Click to attach for next message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title={onAttach ? (isPendingFile ? 'Click to detach from next message' : 'Click to attach for next message') : undefined}`

## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:238

- **Text:** '(click to detach)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        {isPendingFile ? '(click to detach)' : '(click to attach)'}`

## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:238

- **Text:** '(click to attach)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        {isPendingFile ? '(click to detach)' : '(click to attach)'}`

## `src/components/UiComponents/ConnectedFilesList/ConnectedFilesList.tsx`:248

- **Text:** 'AI Created'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        {file.source === 'user_uploaded' ? 'Uploaded' : 'AI Created'}`

## `src/components/UiComponents/DropdownSelect/DropdownSelect.tsx`:40

- **Text:** 'Select an item'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  placeholder = 'Select an item',`

## `src/components/UiComponents/DropdownSelect/DropdownSelect.tsx`:41

- **Text:** 'No items available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  emptyMessage = 'No items available',`

## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:95

- **Text:** 'Close warning'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        return 'Close warning';`

## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:97

- **Text:** 'Close error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        return 'Close error';`

## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:99

- **Text:** 'Close success message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        return 'Close success message';`

## `src/components/UiComponents/InfoMessageOverlay/MessageOverlay.tsx`:102

- **Text:** 'Close message'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        return 'Close message';`

## `src/components/UiComponents/LocationInput/LocationInput.tsx`:23

- **Text:** 'Kanton, Gemeinde, Adresse oder Parzelle'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  placeholder = 'Kanton, Gemeinde, Adresse oder Parzelle',`

## `src/components/UiComponents/Log/Log.tsx`:25

- **Text:** 'No log information available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  emptyMessage = 'No log information available',`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:16

- **Text:** '© OpenStreetMap contributors'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  attribution: '© OpenStreetMap contributors',`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:21

- **Text:** '© OpenStreetMap © CARTO'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { attribution: '© OpenStreetMap © CARTO', maxZoom: 19 }`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:50

- **Text:** 'Klicken Sie auf die Karte, um einen Standort auszuwählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  emptyMessage = 'Klicken Sie auf die Karte, um einen Standort auszuwählen',`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:195

- **Text:** '<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:195

- **Text:** 'Ausgewählte Fläche'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:195

- **Text:** 'Zum Entfernen Parzelle im Panel nutzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:208

- **Text:** '<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:208

- **Text:** 'Ausgewählte Fläche'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:208

- **Text:** 'Zum Entfernen Parzelle im Panel nutzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          polygon.bindPopup('<div><strong>Ausgewählte Fläche</strong><br/><em>Zum Entfernen Parzelle im Panel nutzen</em></div>');`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:224

- **Text:** 'Parzelle ${parcel.number || parcel.id}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <strong>Parzelle ${parcel.number || parcel.id}</strong><br/>`

## `src/components/UiComponents/MapView/MapViewLeaflet.tsx`:226

- **Text:** 'Ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <em>Ausgewählt</em>`

## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:82

- **Text:** 'Aktion fehlgeschlagen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span>Aktion fehlgeschlagen</span>`

## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:202

- **Text:** 'Löschen bestätigen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    title="Löschen bestätigen"`

## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:210

- **Text:** 'Abbrechen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    title="Abbrechen"`

## `src/components/UiComponents/Messages/ChatMessages/ChatMessage.tsx`:220

- **Text:** 'Nachricht löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Nachricht löschen"`

## `src/components/UiComponents/Messages/Messages.tsx`:18

- **Text:** 'No messages yet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  emptyMessage = 'No messages yet',`

## `src/components/UiComponents/OerebSection/OerebSection.tsx`:71

- **Text:** 'In Kraft'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                          ? 'In Kraft'`

## `src/components/UiComponents/OerebSection/OerebSection.tsx`:95

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                          rel="noopener noreferrer"`

## `src/components/UiComponents/OerebSection/OerebSection.tsx`:127

- **Text:** 'ÖREB-Auszug.pdf'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          fileName="ÖREB-Auszug.pdf"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:148

- **Text:** 'Fehler beim Laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        [parcelId]: e?.response?.data?.detail || e?.message || 'Fehler beim Laden'`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:175

- **Text:** 'Fehler bei der Extraktion'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        [parcelId]: e?.response?.data?.detail || e?.message || 'Fehler bei der Extraktion'`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:219

- **Text:** 'Parzellen-Informationen ({parcels.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.title}>Parzellen-Informationen ({parcels.length})</h2>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:228

- **Text:** 'Gesamtfläche'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <h3 className={styles.aggregatedTitle}>Gesamtfläche</h3>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:251

- **Text:** '— {bz.area_m2.toFixed(2)} m²'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                              <span className={styles.bauzoneArea}> — {bz.area_m2.toFixed(2)} m²</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:267

- **Text:** 'Parzelle entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                          title="Parzelle entfernen"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:318

- **Text:** 'Fläche:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                          <span className={styles.label}>Fläche:</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:331

- **Text:** 'Grundstückstyp:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                          <span className={styles.label}>Grundstückstyp:</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:345

- **Text:** 'Dokumente werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                            <p className={styles.bzoHint}>Dokumente werden geladen...</p>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:363

- **Text:** 'Dokument öffnen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                                    title="Dokument öffnen"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:381

- **Text:** 'Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                              title="Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:405

- **Text:** 'Fakten aus BZO'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                        <span className={styles.label}>Fakten aus BZO</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:422

- **Text:** 'Vorschläge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                        <span className={styles.label}>Vorschläge</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:441

- **Text:** 'Weiterführende Bestimmungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                        <span className={styles.label}>Weiterführende Bestimmungen</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:492

- **Text:** 'Details anzeigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                <summary className={styles.zoneSummary}>Details anzeigen</summary>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:507

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            rel="noopener noreferrer"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:533

- **Text:** 'Parzelle entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                          title="Parzelle entfernen"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:584

- **Text:** 'Fläche:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                          <span className={styles.label}>Fläche:</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:597

- **Text:** 'Grundstückstyp:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                          <span className={styles.label}>Grundstückstyp:</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:611

- **Text:** 'Dokumente werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                            <p className={styles.bzoHint}>Dokumente werden geladen...</p>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:629

- **Text:** 'Dokument öffnen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                                    title="Dokument öffnen"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:647

- **Text:** 'Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                              title="Inhalt mit LangGraph extrahieren (inkl. Machbarkeitsstudie)"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:671

- **Text:** 'Fakten aus BZO'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                        <span className={styles.label}>Fakten aus BZO</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:688

- **Text:** 'Vorschläge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                        <span className={styles.label}>Vorschläge</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:707

- **Text:** 'Weiterführende Bestimmungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                        <span className={styles.label}>Weiterführende Bestimmungen</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:756

- **Text:** 'Details anzeigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                <summary className={styles.zoneSummary}>Details anzeigen</summary>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:771

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            rel="noopener noreferrer"`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:994

- **Text:** 'Zone: {rule.zone_raw}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  {rule.zone_raw && <span>Zone: {rule.zone_raw}</span>}`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:995

- **Text:** 'Seite {rule.page}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  {rule.page && <span>Seite {rule.page}</span>}`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:996

- **Text:** 'Bereich: {rule.rule_scope}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  {rule.rule_scope && <span>Bereich: {rule.rule_scope}</span>}`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1027

- **Text:** 'Zone: {article.zone_raw}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  {article.zone_raw && <span>Zone: {article.zone_raw}</span>}`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1028

- **Text:** 'Seiten {article.page_start}-{article.page_end}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Seiten {article.page_start}-{article.page_end}</span>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1058

- **Text:** 'Fehler ({data.errors.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h5 className={styles.bzoErrorTitle}>Fehler ({data.errors.length})</h5>`

## `src/components/UiComponents/ParcelInfoPanel/ParcelInfoPanel.tsx`:1068

- **Text:** 'Warnungen ({data.warnings.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h5 className={styles.bzoWarningTitle}>Warnungen ({data.warnings.length})</h5>`

## `src/components/UiComponents/Popup/Popup.tsx`:108

- **Text:** 'Close'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                aria-label="Close"`

## `src/components/UiComponents/Toast/Toast.tsx`:53

- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        aria-label="Schließen"`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:23

- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'de-DE', label: 'Deutsch', shortCode: 'de', flag: '🇩🇪' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:24

- **Text:** 'Deutsch (Schweiz)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'de-CH', label: 'Deutsch (Schweiz)', shortCode: 'de', flag: '🇨🇭' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:25

- **Text:** 'English (US)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'en-US', label: 'English (US)', shortCode: 'en', flag: '🇺🇸' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:26

- **Text:** 'English (UK)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'en-GB', label: 'English (UK)', shortCode: 'en', flag: '🇬🇧' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:27

- **Text:** 'Français'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'fr-FR', label: 'Français', shortCode: 'fr', flag: '🇫🇷' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:28

- **Text:** 'Français (Suisse)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'fr-CH', label: 'Français (Suisse)', shortCode: 'fr', flag: '🇨🇭' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:29

- **Text:** 'Italiano'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'it-IT', label: 'Italiano', shortCode: 'it', flag: '🇮🇹' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:30

- **Text:** 'Italiano (Svizzera)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'it-CH', label: 'Italiano (Svizzera)', shortCode: 'it', flag: '🇨🇭' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:31

- **Text:** 'Español'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'es-ES', label: 'Español', shortCode: 'es', flag: '🇪🇸' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:32

- **Text:** 'Português'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { code: 'pt-BR', label: 'Português', shortCode: 'pt', flag: '🇧🇷' },`

## `src/components/UiComponents/VoiceLanguageSelect/VoiceLanguageSelect.tsx`:72

- **Text:** 'Sprache für Spracherkennung'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `    title = 'Sprache für Spracherkennung',`

## `src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx`:69

- **Text:** 'Workflow running'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <div className={styles.spinner} aria-label="Workflow running" />`

## `src/components/UiComponents/WorkflowStatus/WorkflowStatus.tsx`:77

- **Text:** 'Round {workflowStatus.round}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span className={styles.roundBadge}>Round {workflowStatus.round}</span>`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:45

- **Text:** 'gerade eben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  if (diffMin < 1) return 'gerade eben';`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:284

- **Text:** 'Umbenennen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Umbenennen"`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:293

- **Text:** 'Wiederherstellen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Wiederherstellen"`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:301

- **Text:** 'Archivieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Archivieren"`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:310

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Löschen"`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:324

- **Text:** 'AI Workspace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      workspace: 'AI Workspace',`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:332

- **Text:** 'Lade Chats...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `  if (loading) return <div className={styles.loading}>Lade Chats...</div>;`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:340

- **Text:** 'Suchen...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Suchen..."`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:345

- **Text:** 'Neuer Chat'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <button className={styles.createBtn} onClick={() => { onCreateNew(); setTimeout(_loadChats, 500); }} title="Neuer Chat">`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:437

- **Text:** 'Keine archivierten Chats.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {filter === 'archived' ? 'Keine archivierten Chats.' : 'Keine aktiven Chats.'}`

## `src/components/UnifiedDataBar/ChatsTab.tsx`:437

- **Text:** 'Keine aktiven Chats.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {filter === 'archived' ? 'Keine archivierten Chats.' : 'Keine aktiven Chats.'}`

## `src/components/UnifiedDataBar/FilesTab.tsx`:233

- **Text:** 'Lade Dateien...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `  if (loading) return <div className={styles.loading}>Lade Dateien...</div>;`

## `src/components/UnifiedDataBar/FilesTab.tsx`:261

- **Text:** 'Upload files'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Upload files"`

## `src/components/UnifiedDataBar/FilesTab.tsx`:284

- **Text:** 'Dateien suchen...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        placeholder="Dateien suchen..."`

## `src/components/UnifiedDataBar/FilesTab.tsx`:325

- **Text:** 'Keine Dateien gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {searchQuery ? 'Keine Dateien gefunden' : 'Keine Dateien. Drag & Drop zum Hochladen.'}`

## `src/components/UnifiedDataBar/FilesTab.tsx`:325

- **Text:** 'Keine Dateien. Drag & Drop zum Hochladen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {searchQuery ? 'Keine Dateien gefunden' : 'Keine Dateien. Drag & Drop zum Hochladen.'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:188

- **Text:** 'Feature Instance'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  featureInstance: 'Feature Instance',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:340

- **Text:** 'spin 0.6s linear infinite'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      animation: 'spin 0.6s linear infinite',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:853

- **Text:** 'Neutralize: ON (click to deactivate)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  title={ds.neutralize ? 'Neutralize: ON (click to deactivate)' : 'Neutralize: OFF (click to activate)'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:853

- **Text:** 'Neutralize: OFF (click to activate)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  title={ds.neutralize ? 'Neutralize: ON (click to deactivate)' : 'Neutralize: OFF (click to activate)'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:860

- **Text:** 'Entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Entfernen"`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:956

- **Text:** 'Remove all tables for this record'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                        title="Remove all tables for this record"`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:986

- **Text:** 'Neutralize: ON'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:986

- **Text:** 'Neutralize: OFF'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:993

- **Text:** 'Remove'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                            title="Remove"`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1010

- **Text:** '3px solid #7b1fa2'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      borderLeft: '3px solid #7b1fa2',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1029

- **Text:** 'Neutralize: ON'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1029

- **Text:** 'Neutralize: OFF'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        title={fds.neutralize ? 'Neutralize: ON' : 'Neutralize: OFF'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1036

- **Text:** 'Entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                        title="Entfernen"`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1139

- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          transition: 'background 0.1s',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1166

- **Text:** 'Add as data source'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Add as data source"`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1168

- **Text:** '+ Add'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {isAdding ? '...' : '+ Add'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1172

- **Text:** 'Already added'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <span style={{ fontSize: 10, color: '#4caf50', flexShrink: 0 }} title="Already added">`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1240

- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          transition: 'background 0.1s', userSelect: 'none',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1315

- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          transition: 'background 0.1s', userSelect: 'none',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1411

- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        transition: 'background 0.1s', userSelect: 'none',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1429

- **Text:** 'Add as feature data source'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          title="Add as feature data source"`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1431

- **Text:** '+ Add'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {isAdding ? '...' : '+ Add'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1435

- **Text:** 'Already added'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        <span style={{ fontSize: 10, color: '#4caf50', flexShrink: 0 }} title="Already added">`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1479

- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          transition: 'background 0.1s', userSelect: 'none',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1554

- **Text:** 'background 0.1s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          transition: 'background 0.1s', userSelect: 'none',`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1575

- **Text:** 'Add all tables for this record'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Add all tables for this record"`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1577

- **Text:** '+ Add'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {isAdding ? '...' : '+ Add'}`

## `src/components/UnifiedDataBar/SourcesTab.tsx`:1581

- **Text:** 'Already added'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <span style={{ fontSize: 10, color: '#4caf50', flexShrink: 0 }} title="Already added">`

## `src/contexts/FileContext.tsx`:209

- **Text:** 'useFileContext must be used within a FileProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('useFileContext must be used within a FileProvider');`

## `src/contexts/PekContext.tsx`:74

- **Text:** 'usePekContext must be used within a PekProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('usePekContext must be used within a PekProvider');`

## `src/contexts/ToastContext.tsx`:94

- **Text:** 'useToast must be used within a ToastProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('useToast must be used within a ToastProvider');`

## `src/contexts/WorkflowSelectionContext.tsx`:38

- **Text:** 'useWorkflowSelection must be used within a WorkflowSelectionProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('useWorkflowSelection must be used within a WorkflowSelectionProvider');`

## `src/core/PageManager/SidebarProvider.tsx`:53

- **Text:** 'useSidebar must be used within a SidebarProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        throw new Error('useSidebar must be used within a SidebarProvider');`

## `src/core/PageManager/SidebarProvider.tsx`:461

- **Text:** 'Failed to load sidebar items'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            setError(err instanceof Error ? err.message : 'Failed to load sidebar items');`

## `src/hooks/useAccessRules.tsx`:23

- **Text:** 'Keine'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'n', label: 'Keine', color: '#e53e3e' },`

## `src/hooks/useAccessRules.tsx`:24

- **Text:** 'Eigene'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'm', label: 'Eigene', color: '#d69e2e' },`

## `src/hooks/useAccessRules.tsx`:25

- **Text:** 'Gruppe'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'g', label: 'Gruppe', color: '#3182ce' },`

## `src/hooks/useAccessRules.tsx`:26

- **Text:** 'Alle'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'a', label: 'Alle', color: '#38a169' },`

## `src/hooks/useAccessRules.tsx`:114

- **Text:** 'Fehler beim Laden der Regeln'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMsg = err.response?.data?.detail || err.message || 'Fehler beim Laden der Regeln';`

## `src/hooks/useAccessRules.tsx`:197

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMsg = err.response?.data?.detail || err.message || 'Fehler beim Speichern';`

## `src/hooks/useConfirm.tsx`:6

- **Text:** 'Wirklich löschen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` *   const ok = await confirm('Wirklich löschen?', { confirmLabel: 'Löschen', variant: 'danger' });`

## `src/hooks/useConfirm.tsx`:6

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` *   const ok = await confirm('Wirklich löschen?', { confirmLabel: 'Löschen', variant: 'danger' });`

## `src/hooks/useConfirm.tsx`:26

- **Text:** 'Bestätigung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  title: 'Bestätigung',`

## `src/hooks/useConfirm.tsx`:27

- **Text:** 'Bestätigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  confirmLabel: 'Bestätigen',`

## `src/hooks/useConfirm.tsx`:78

- **Text:** '1px solid var(--color-border, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--color-border, #333)',`

## `src/hooks/useConfirm.tsx`:82

- **Text:** '0 8px 32px rgba(0,0,0,0.4)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            boxShadow: '0 8px 32px rgba(0,0,0,0.4)',`

## `src/hooks/useConfirm.tsx`:105

- **Text:** '1px solid var(--color-border, #444)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--color-border, #444)',`

## `src/hooks/useInstancePermissions.tsx`:117

- **Text:** 'Verträge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` *       {canViewContracts && <NavLink to="contracts">Verträge</NavLink>}`

## `src/hooks/useInstancePermissions.tsx`:343

- **Text:** 'Neuer Vertrag'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** ` *   <Button>Neuer Vertrag</Button>`

## `src/hooks/usePrompt.tsx`:6

- **Text:** 'Bitte Namen eingeben:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` *   const value = await prompt('Bitte Namen eingeben:', { title: 'Umbenennen' });`

## `src/hooks/usePrompt.tsx`:85

- **Text:** '1px solid var(--border-color, var(--color-border, #333))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, var(--color-border, #333))',`

## `src/hooks/usePrompt.tsx`:89

- **Text:** '0 8px 32px rgba(0,0,0,0.4)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            boxShadow: '0 8px 32px rgba(0,0,0,0.4)',`

## `src/hooks/usePrompt.tsx`:119

- **Text:** '1px solid var(--border-color, var(--color-border, #ccc))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              border: '1px solid var(--border-color, var(--color-border, #ccc))',`

## `src/hooks/usePrompt.tsx`:134

- **Text:** '1px solid var(--color-border, #444)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--color-border, #444)',`

## `src/layouts/FeatureLayout.tsx`:21

- **Text:** 'Lade Feature-Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    <p>Lade Feature-Daten...</p>`

## `src/layouts/FeatureLayout.tsx`:37

- **Text:** 'Zugriff nicht möglich'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    <h2>Zugriff nicht möglich</h2>`

## `src/layouts/FeatureLayout.tsx`:81

- **Text:** 'Die angeforderte Feature-Instanz existiert nicht oder Sie haben keinen Zugriff.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        message="Die angeforderte Feature-Instanz existiert nicht oder Sie haben keinen Zugriff."`

## `src/layouts/MainLayout.tsx`:63

- **Text:** 'Navigation schliessen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          aria-label="Navigation schliessen"`

## `src/layouts/MainLayout.tsx`:72

- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            alt="PowerOn"`

## `src/layouts/MainLayout.tsx`:105

- **Text:** 'Navigation oeffnen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            aria-label="Navigation oeffnen"`

## `src/layouts/MainLayout.tsx`:111

- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            alt="PowerOn"`

## `src/pages/AutomationsDashboardPage.tsx`:71

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      border: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/AutomationsDashboardPage.tsx`:78

- **Text:** '1 1 180px'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      flex: '1 1 180px',`

## `src/pages/AutomationsDashboardPage.tsx`:195

- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: '',`

## `src/pages/Dashboard.tsx`:72

- **Text:** 'Übersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h1>Übersicht</h1>`

## `src/pages/Dashboard.tsx`:82

- **Text:** 'Übersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h1>Übersicht</h1>`

## `src/pages/FeatureView.tsx`:67

- **Text:** 'Workflow Dashboard'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  <PlaceholderView title="Workflow Dashboard" description="Übersicht der Workflows" />`

## `src/pages/FeatureView.tsx`:67

- **Text:** 'Übersicht der Workflows'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  <PlaceholderView title="Workflow Dashboard" description="Übersicht der Workflows" />`

## `src/pages/FeatureView.tsx`:71

- **Text:** 'Runs'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  <PlaceholderView title="Runs" description="Workflow-Ausführungen" />`

## `src/pages/FeatureView.tsx`:71

- **Text:** 'Workflow-Ausführungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  <PlaceholderView title="Runs" description="Workflow-Ausführungen" />`

## `src/pages/FeatureView.tsx`:75

- **Text:** 'Dateien'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  <PlaceholderView title="Dateien" description="Workflow-Dateien" />`

## `src/pages/FeatureView.tsx`:82

- **Text:** 'Chatbot Einstellungen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `  <PlaceholderView title="Chatbot Einstellungen" description="Konfiguration des Chatbots" />`

## `src/pages/FeatureView.tsx`:82

- **Text:** 'Konfiguration des Chatbots'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  <PlaceholderView title="Chatbot Einstellungen" description="Konfiguration des Chatbots" />`

## `src/pages/FeatureView.tsx`:88

- **Text:** 'Seite nicht gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    <h2>Seite nicht gefunden</h2>`

## `src/pages/FeatureView.tsx`:89

- **Text:** 'Diese View existiert nicht oder wurde noch nicht implementiert.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    <p>Diese View existiert nicht oder wurde noch nicht implementiert.</p>`

## `src/pages/FeatureView.tsx`:95

- **Text:** 'Zugriff verweigert'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    <h2>Zugriff verweigert</h2>`

## `src/pages/FeatureView.tsx`:96

- **Text:** 'Du hast keine Berechtigung für diese Ansicht.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    <p>Du hast keine Berechtigung für diese Ansicht.</p>`

## `src/pages/GDPR.tsx`:68

- **Text:** 'Consent information could not be loaded.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setConsentError('Consent information could not be loaded.');`

## `src/pages/GDPR.tsx`:91

- **Text:** 'Data export downloaded.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionMessage({ type: 'success', text: 'Data export downloaded.' });`

## `src/pages/GDPR.tsx`:94

- **Text:** 'Data export failed. Please try again.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionMessage({ type: 'error', text: 'Data export failed. Please try again.' });`

## `src/pages/GDPR.tsx`:109

- **Text:** 'Portable export downloaded.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionMessage({ type: 'success', text: 'Portable export downloaded.' });`

## `src/pages/GDPR.tsx`:112

- **Text:** 'Portable export failed. Please try again.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionMessage({ type: 'error', text: 'Portable export failed. Please try again.' });`

## `src/pages/GDPR.tsx`:121

- **Text:** 'Please type LOESCHEN to confirm deletion.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionMessage({ type: 'error', text: 'Please type LOESCHEN to confirm deletion.' });`

## `src/pages/GDPR.tsx`:132

- **Text:** 'Account deleted. Redirecting to login...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionMessage({ type: 'success', text: 'Account deleted. Redirecting to login...' });`

## `src/pages/GDPR.tsx`:136

- **Text:** 'Account deletion failed. Please try again.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionMessage({ type: 'error', text: 'Account deletion failed. Please try again.' });`

## `src/pages/GDPR.tsx`:161

- **Text:** 'Your data rights'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h2 className={styles.sectionTitle}>Your data rights</h2>`

## `src/pages/GDPR.tsx`:164

- **Text:** 'Access (Article 15)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h3>Access (Article 15)</h3>`

## `src/pages/GDPR.tsx`:165

- **Text:** 'Download a full export of your account data.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <p>Download a full export of your account data.</p>`

## `src/pages/GDPR.tsx`:186

- **Text:** 'Portability (Article 20)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h3>Portability (Article 20)</h3>`

## `src/pages/GDPR.tsx`:187

- **Text:** 'Download a machine-readable JSON-LD export.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <p>Download a machine-readable JSON-LD export.</p>`

## `src/pages/GDPR.tsx`:208

- **Text:** 'Erasure (Article 17)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h3>Erasure (Article 17)</h3>`

## `src/pages/GDPR.tsx`:209

- **Text:** 'Permanently delete your account and all associated data.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <p>Permanently delete your account and all associated data.</p>`

## `src/pages/GDPR.tsx`:229

- **Text:** 'LOESCHEN'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    placeholder="LOESCHEN"`

## `src/pages/GDPR.tsx`:278

- **Text:** 'Processing information'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h2 className={styles.sectionTitle}>Processing information</h2>`

## `src/pages/GDPR.tsx`:279

- **Text:** 'Loading consent info...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          {isLoadingConsent && <p className={styles.mutedText}>Loading consent info...</p>}`

## `src/pages/GDPR.tsx`:284

- **Text:** 'Data collected'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <h3>Data collected</h3>`

## `src/pages/GDPR.tsx`:304

- **Text:** 'Your rights'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <h3>Your rights</h3>`

## `src/pages/InvitePage.tsx`:16

- **Text:** 'Einladung annehmen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * 6. User clicks "Einladung annehmen"`

## `src/pages/InvitePage.tsx`:56

- **Text:** 'Kein Einladungs-Token angegeben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError('Kein Einladungs-Token angegeben');`

## `src/pages/InvitePage.tsx`:71

- **Text:** 'Neues Konto erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        // No targetUsername = new-user invitation (email only) -> only show "Neues Konto erstellen"`

## `src/pages/InvitePage.tsx`:120

- **Text:** 'Not authenticated'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    } else if (result.error?.includes('401') || result.error?.includes('Not authenticated')) {`

## `src/pages/InvitePage.tsx`:125

- **Text:** 'Fehler beim Annehmen der Einladung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(result.error || 'Fehler beim Annehmen der Einladung');`

## `src/pages/InvitePage.tsx`:162

- **Text:** 'Einladung wird überprüft...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Einladung wird überprüft...</p>`

## `src/pages/InvitePage.tsx`:176

- **Text:** 'Ungültige Einladung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h1>Ungültige Einladung</h1>`

## `src/pages/InvitePage.tsx`:177

- **Text:** 'Diese Einladung ist nicht gültig.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <p>{validation?.reason || 'Diese Einladung ist nicht gültig.'}</p>`

## `src/pages/InvitePage.tsx`:195

- **Text:** 'Sie wurden erfolgreich zum Mandanten hinzugefügt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Sie wurden erfolgreich zum Mandanten hinzugefügt.</p>`

## `src/pages/InvitePage.tsx`:196

- **Text:** 'Sie werden weitergeleitet...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.redirectMessage}>Sie werden weitergeleitet...</p>`

## `src/pages/InvitePage.tsx`:211

- **Text:** 'Falsche Anmeldung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h1>Falsche Anmeldung</h1>`

## `src/pages/InvitePage.tsx`:214

- **Text:** 'anderer Benutzer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              Sie sind als <strong>{cachedUser?.username || 'anderer Benutzer'}</strong> angemeldet.`

## `src/pages/InvitePage.tsx`:216

- **Text:** 'Bitte melden Sie sich ab und mit dem richtigen Konto wieder an.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Bitte melden Sie sich ab und mit dem richtigen Konto wieder an.</p>`

## `src/pages/InvitePage.tsx`:229

- **Text:** 'Sie wurden eingeladen, einem Mandanten und einem Feature beizutreten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    ? 'Sie wurden eingeladen, einem Mandanten und einem Feature beizutreten.'`

## `src/pages/InvitePage.tsx`:230

- **Text:** 'Sie wurden eingeladen, einem Mandanten beizutreten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    : 'Sie wurden eingeladen, einem Mandanten beizutreten.';`

## `src/pages/InvitePage.tsx`:231

- **Text:** 'Features mit zugewiesenen Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  const rolesLabel = isFeatureInvite ? 'Features mit zugewiesenen Rollen' : 'Zugewiesene Rollen';`

## `src/pages/InvitePage.tsx`:231

- **Text:** 'Zugewiesene Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  const rolesLabel = isFeatureInvite ? 'Features mit zugewiesenen Rollen' : 'Zugewiesene Rollen';`

## `src/pages/InvitePage.tsx`:241

- **Text:** 'Einladung annehmen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h1>Einladung annehmen</h1>`

## `src/pages/InvitePage.tsx`:287

- **Text:** 'Einladung annehmen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                'Einladung annehmen'`

## `src/pages/InvitePage.tsx`:304

- **Text:** 'Einladung annehmen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h1>Einladung annehmen</h1>`

## `src/pages/InvitePage.tsx`:333

- **Text:** 'Erstellen Sie ein neues Konto mit Ihrem Benutzernamen oder verlinken Sie die Einladung mit Ihrem bestehenden Account.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              : 'Erstellen Sie ein neues Konto mit Ihrem Benutzernamen oder verlinken Sie die Einladung mit Ihrem bestehenden Account.'}`

## `src/pages/Login.tsx`:36

- **Text:** 'PowerOn AI Platform - Login'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `    document.title = "PowerOn AI Platform - Login";`

## `src/pages/Login.tsx`:134

- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            alt="PowerOn"`

## `src/pages/Login.tsx`:145

- **Text:** 'Sie haben eine ausstehende Einladung. Bitte melden Sie sich an, um diese anzunehmen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Sie haben eine ausstehende Einladung. Bitte melden Sie sich an, um diese anzunehmen.</span>`

## `src/pages/Login.tsx`:155

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder=" "`

## `src/pages/Login.tsx`:173

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder=" "`

## `src/pages/Login.tsx`:198

- **Text:** 'wird geladen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isLoginLoading ? "wird geladen..." : "Anmelden"}`

## `src/pages/Login.tsx`:221

- **Text:** 'Signing in...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isMsalLoading ? "Signing in..." : "Mit Microsoft anmelden"}`

## `src/pages/Login.tsx`:221

- **Text:** 'Mit Microsoft anmelden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isMsalLoading ? "Signing in..." : "Mit Microsoft anmelden"}`

## `src/pages/Login.tsx`:232

- **Text:** 'Signing in...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isGoogleLoading ? "Signing in..." : "Mit Google anmelden"}`

## `src/pages/Login.tsx`:232

- **Text:** 'Mit Google anmelden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isGoogleLoading ? "Signing in..." : "Mit Google anmelden"}`

## `src/pages/Login.tsx`:237

- **Text:** 'Du hast noch kein Konto?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span>Du hast noch kein Konto?</span>`

## `src/pages/PasswordResetRequest.tsx`:18

- **Text:** 'PowerOn AI Platform - Passwort zurücksetzen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `    document.title = "PowerOn AI Platform - Passwort zurücksetzen";`

## `src/pages/PasswordResetRequest.tsx`:27

- **Text:** 'Bitte geben Sie Ihren Benutzernamen ein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setValidationError('Bitte geben Sie Ihren Benutzernamen ein.');`

## `src/pages/PasswordResetRequest.tsx`:33

- **Text:** 'Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccessMessage('Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.');`

## `src/pages/PasswordResetRequest.tsx`:40

- **Text:** 'Bitte prüfen Sie Ihre E-Mail für den Passwort-Reset-Link.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            message: 'Bitte prüfen Sie Ihre E-Mail für den Passwort-Reset-Link.'`

## `src/pages/PasswordResetRequest.tsx`:46

- **Text:** 'Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccessMessage('Falls ein Konto mit diesem Benutzernamen existiert, wurde ein Reset-Link an die hinterlegte E-Mail-Adresse gesendet. Bitte prüfen Sie auch Ihren Spam-Ordner.');`

## `src/pages/PasswordResetRequest.tsx`:59

- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            alt="PowerOn"`

## `src/pages/PasswordResetRequest.tsx`:65

- **Text:** 'Passwort zurücksetzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h2 className={styles.title}>Passwort zurücksetzen</h2>`

## `src/pages/PasswordResetRequest.tsx`:80

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder=" "`

## `src/pages/PasswordResetRequest.tsx`:100

- **Text:** 'Geben Sie Ihren Benutzernamen ein. Falls ein Konto existiert, erhalten Sie einen Link zum Zurücksetzen des Passworts an Ihre hinterlegte E-Mail-Adresse.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <p>Geben Sie Ihren Benutzernamen ein. Falls ein Konto existiert, erhalten Sie einen Link zum Zurücksetzen des Passworts an Ihre hinterlegte E-Mail-Adresse.</p>`

## `src/pages/PasswordResetRequest.tsx`:108

- **Text:** 'Wird gesendet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    {isLoading ? "Wird gesendet..." : "Reset-Link anfordern"}`

## `src/pages/PasswordResetRequest.tsx`:108

- **Text:** 'Reset-Link anfordern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    {isLoading ? "Wird gesendet..." : "Reset-Link anfordern"}`

## `src/pages/PasswordResetRequest.tsx`:114

- **Text:** 'Zurück zum'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span>Zurück zum</span>`

## `src/pages/Register.tsx`:40

- **Text:** 'PowerOn AI Platform - Registrieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `    document.title = "PowerOn AI Platform - Registrieren";`

## `src/pages/Register.tsx`:58

- **Text:** 'Bitte füllen Sie alle Pflichtfelder aus.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setValidationError('Bitte füllen Sie alle Pflichtfelder aus.');`

## `src/pages/Register.tsx`:63

- **Text:** 'Bitte geben Sie eine gültige E-Mail-Adresse ein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setValidationError('Bitte geben Sie eine gültige E-Mail-Adresse ein.');`

## `src/pages/Register.tsx`:81

- **Text:** 'Username is not available'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        const errorMessage = availabilityResult.message || 'Username is not available';`

## `src/pages/Register.tsx`:82

- **Text:** 'Username is already taken'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        if (errorMessage === 'Username is already taken') {`

## `src/pages/Register.tsx`:83

- **Text:** 'Benutzername ist bereits vergeben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setValidationError('Benutzername ist bereits vergeben');`

## `src/pages/Register.tsx`:86

- **Text:** 'Benutzername ist nicht verfügbar'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setValidationError('Benutzername ist nicht verfügbar');`

## `src/pages/Register.tsx`:93

- **Text:** 'Registrierung erfolgreich! Bitte prüfen Sie Ihre E-Mail (auch den Spam-Ordner) für den Link zum Setzen Ihres Passworts.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      let message = 'Registrierung erfolgreich! Bitte prüfen Sie Ihre E-Mail (auch den Spam-Ordner) für den Link zum Setzen Ihres Passworts.';`

## `src/pages/Register.tsx`:95

- **Text:** ' Nach dem Setzen Ihres Passworts können Sie sich anmelden und Ihre Einladung annehmen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        message += ' Nach dem Setzen Ihres Passworts können Sie sich anmelden und Ihre Einladung annehmen.';`

## `src/pages/Register.tsx`:104

- **Text:** 'Registrierung erfolgreich. Bitte prüfen Sie Ihre E-Mail für den Passwort-Link.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            message: 'Registrierung erfolgreich. Bitte prüfen Sie Ihre E-Mail für den Passwort-Link.',`

## `src/pages/Register.tsx`:116

- **Text:** 'Registration failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (registerError) return typeof registerError === 'string' ? registerError : 'Registration failed';`

## `src/pages/Register.tsx`:117

- **Text:** 'Microsoft registration failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (msalError) return typeof msalError === 'string' ? msalError : 'Microsoft registration failed';`

## `src/pages/Register.tsx`:118

- **Text:** 'Username availability check failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (availabilityError) return typeof availabilityError === 'string' ? availabilityError : 'Username availability check failed';`

## `src/pages/Register.tsx`:128

- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            alt="PowerOn"`

## `src/pages/Register.tsx`:138

- **Text:** 'Sie haben eine ausstehende Einladung. Nach der Registrierung und Anmeldung können Sie diese annehmen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Sie haben eine ausstehende Einladung. Nach der Registrierung und Anmeldung können Sie diese annehmen.</span>`

## `src/pages/Register.tsx`:156

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder=" "`

## `src/pages/Register.tsx`:170

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder=" "`

## `src/pages/Register.tsx`:184

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder=" "`

## `src/pages/Register.tsx`:191

- **Text:** 'Vollständiger Name'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <label className={fullNameFocused || formData.fullName ? styles.focusedLabel : styles.label}>Vollständiger Name</label>`

## `src/pages/Register.tsx`:195

- **Text:** 'Nach der Registrierung erhalten Sie eine E-Mail mit einem Link zum Setzen Ihres Passworts.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <p>Nach der Registrierung erhalten Sie eine E-Mail mit einem Link zum Setzen Ihres Passworts.</p>`

## `src/pages/Register.tsx`:209

- **Text:** 'Registrierung läuft...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    {isLoading ? "Registrierung läuft..." : isChecking ? "Benutzername wird geprüft..." : 'Kostenlos registrieren'}`

## `src/pages/Register.tsx`:209

- **Text:** 'Benutzername wird geprüft...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    {isLoading ? "Registrierung läuft..." : isChecking ? "Benutzername wird geprüft..." : 'Kostenlos registrieren'}`

## `src/pages/Register.tsx`:209

- **Text:** 'Kostenlos registrieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    {isLoading ? "Registrierung läuft..." : isChecking ? "Benutzername wird geprüft..." : 'Kostenlos registrieren'}`

## `src/pages/Register.tsx`:215

- **Text:** 'Bereits registriert?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span>Bereits registriert?</span>`

## `src/pages/Reset.tsx`:26

- **Text:** 'PowerOn AI Platform - Neues Passwort setzen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `    document.title = "PowerOn AI Platform - Neues Passwort setzen";`

## `src/pages/Reset.tsx`:31

- **Text:** 'Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setTokenError('Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.');`

## `src/pages/Reset.tsx`:33

- **Text:** 'Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setTokenError('Ungültiger Reset-Link. Bitte fordern Sie einen neuen Link an.');`

## `src/pages/Reset.tsx`:44

- **Text:** 'Passwort muss mindestens 8 Zeichen lang sein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setValidationError('Passwort muss mindestens 8 Zeichen lang sein.');`

## `src/pages/Reset.tsx`:49

- **Text:** 'Die Passwörter stimmen nicht überein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setValidationError('Die Passwörter stimmen nicht überein.');`

## `src/pages/Reset.tsx`:65

- **Text:** 'Token fehlt. Bitte fordern Sie einen neuen Reset-Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setValidationError('Token fehlt. Bitte fordern Sie einen neuen Reset-Link an.');`

## `src/pages/Reset.tsx`:71

- **Text:** 'Passwort erfolgreich gesetzt! Sie werden zum Login weitergeleitet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccessMessage('Passwort erfolgreich gesetzt! Sie werden zum Login weitergeleitet...');`

## `src/pages/Reset.tsx`:78

- **Text:** 'Passwort erfolgreich geändert. Bitte melden Sie sich an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            message: 'Passwort erfolgreich geändert. Bitte melden Sie sich an.'`

## `src/pages/Reset.tsx`:84

- **Text:** 'Passwort-Zurücksetzung fehlgeschlagen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMessage = err?.response?.data?.detail || err?.message || 'Passwort-Zurücksetzung fehlgeschlagen.';`

## `src/pages/Reset.tsx`:85

- **Text:** 'Ungültig'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      if (errorMessage.includes('abgelaufen') || errorMessage.includes('expired') || errorMessage.includes('Ungültig') || errorMessage.includes('invalid')) {`

## `src/pages/Reset.tsx`:86

- **Text:** 'Der Reset-Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setValidationError('Der Reset-Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.');`

## `src/pages/Reset.tsx`:101

- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              alt="PowerOn"`

## `src/pages/Reset.tsx`:107

- **Text:** 'Neues Passwort setzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.title}>Neues Passwort setzen</h2>`

## `src/pages/Reset.tsx`:119

- **Text:** 'oder zurück zum'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>oder zurück zum</span>`

## `src/pages/Reset.tsx`:141

- **Text:** 'PowerOn'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            alt="PowerOn"`

## `src/pages/Reset.tsx`:147

- **Text:** 'Neues Passwort setzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h2 className={styles.title}>Neues Passwort setzen</h2>`

## `src/pages/Reset.tsx`:159

- **Text:** 'Mindestens 8 Zeichen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <div className={styles.passwordHint}>Mindestens 8 Zeichen</div>`

## `src/pages/Reset.tsx`:163

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder=" "`

## `src/pages/Reset.tsx`:174

- **Text:** 'Neues Passwort'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <label className={passwordFocused || password ? styles.focusedLabel : styles.label}>Neues Passwort</label>`

## `src/pages/Reset.tsx`:181

- **Text:** ' '
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder=" "`

## `src/pages/Reset.tsx`:192

- **Text:** 'Passwort bestätigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <label className={confirmPasswordFocused || confirmPassword ? styles.focusedLabel : styles.label}>Passwort bestätigen</label>`

## `src/pages/Reset.tsx`:200

- **Text:** 'Wird gespeichert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    {isLoading ? "Wird gespeichert..." : "Passwort setzen"}`

## `src/pages/Reset.tsx`:200

- **Text:** 'Passwort setzen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    {isLoading ? "Wird gespeichert..." : "Passwort setzen"}`

## `src/pages/Reset.tsx`:206

- **Text:** 'Zurück zum'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span>Zurück zum</span>`

## `src/pages/Settings.tsx`:23

- **Text:** 'Profil'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'profile', label: 'Profil' },`

## `src/pages/Settings.tsx`:24

- **Text:** 'Darstellung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'appearance', label: 'Darstellung' },`

## `src/pages/Settings.tsx`:25

- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'voice', label: 'Stimme & Sprache' },`

## `src/pages/Settings.tsx`:26

- **Text:** 'Neutralisierung (lokal)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'neutralization', label: 'Neutralisierung (lokal)' },`

## `src/pages/Settings.tsx`:27

- **Text:** 'Datenschutz'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'privacy', label: 'Datenschutz' },`

## `src/pages/Settings.tsx`:50

- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `          { value: 'de', label: 'Deutsch' },`

## `src/pages/Settings.tsx`:51

- **Text:** 'English'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `          { value: 'en', label: 'English' },`

## `src/pages/Settings.tsx`:52

- **Text:** 'Français'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `          { value: 'fr', label: 'Français' },`

## `src/pages/Settings.tsx`:56

- **Text:** 'Vollstaendiger Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' },`

## `src/pages/Settings.tsx`:56

- **Text:** 'Ihr vollstaendiger Name'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' },`

## `src/pages/Settings.tsx`:56

- **Text:** 'Max Mustermann'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    { name: 'fullName', type: 'string', label: 'Vollstaendiger Name', description: 'Ihr vollstaendiger Name', required: false, placeholder: 'Max Mustermann' },`

## `src/pages/Settings.tsx`:57

- **Text:** 'E-Mail-Adresse'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { name: 'email', type: 'email', label: 'E-Mail-Adresse', description: 'Ihre E-Mail-Adresse fuer Benachrichtigungen', required: true, placeholder: 'name@example.com' },`

## `src/pages/Settings.tsx`:57

- **Text:** 'Ihre E-Mail-Adresse fuer Benachrichtigungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    { name: 'email', type: 'email', label: 'E-Mail-Adresse', description: 'Ihre E-Mail-Adresse fuer Benachrichtigungen', required: true, placeholder: 'name@example.com' },`

## `src/pages/Settings.tsx`:58

- **Text:** 'Sprache'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { name: 'language', type: 'select', label: 'Sprache', description: 'Anzeigesprache der Anwendung', required: true, options: languageOptions },`

## `src/pages/Settings.tsx`:58

- **Text:** 'Anzeigesprache der Anwendung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    { name: 'language', type: 'select', label: 'Sprache', description: 'Anzeigesprache der Anwendung', required: true, options: languageOptions },`

## `src/pages/Settings.tsx`:68

- **Text:** 'Fehler beim Speichern des Profils'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Speichern des Profils');`

## `src/pages/Settings.tsx`:80

- **Text:** 'Profil bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h2>Profil bearbeiten</h2>`

## `src/pages/Settings.tsx`:137

- **Text:** 'Fehler beim Laden der Voice-Einstellungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Laden der Voice-Einstellungen');`

## `src/pages/Settings.tsx`:184

- **Text:** 'Einstellungen gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccess('Einstellungen gespeichert');`

## `src/pages/Settings.tsx`:188

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Speichern');`

## `src/pages/Settings.tsx`:206

- **Text:** 'Stimmtest fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    } catch { setError('Stimmtest fehlgeschlagen'); }`

## `src/pages/Settings.tsx`:216

- **Text:** 'English (US)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    { code: 'de-DE', name: 'Deutsch' }, { code: 'en-US', name: 'English (US)' },`

## `src/pages/Settings.tsx`:230

- **Text:** 'STT-Sprache (Spracheingabe)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h2 className={styles.sectionTitle}>STT-Sprache (Spracheingabe)</h2>`

## `src/pages/Settings.tsx`:233

- **Text:** 'Sprache fuer Spracherkennung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label className={styles.settingLabel}>Sprache fuer Spracherkennung</label>`

## `src/pages/Settings.tsx`:234

- **Text:** 'Wird fuer die Sprache-zu-Text-Erkennung verwendet.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.settingDescription}>Wird fuer die Sprache-zu-Text-Erkennung verwendet.</p>`

## `src/pages/Settings.tsx`:247

- **Text:** 'TTS-Stimmen (Sprachausgabe)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h2 className={styles.sectionTitle}>TTS-Stimmen (Sprachausgabe)</h2>`

## `src/pages/Settings.tsx`:304

- **Text:** 'Einstellungen speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        {saving ? 'Speichern...' : 'Einstellungen speichern'}`

## `src/pages/Settings.tsx`:342

- **Text:** 'Fehler beim Laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Laden');`

## `src/pages/Settings.tsx`:355

- **Text:** 'Fehler beim Loeschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Loeschen');`

## `src/pages/Settings.tsx`:371

- **Text:** 'Platzhalter-Mappings (lokal)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h2 className={styles.sectionTitle}>Platzhalter-Mappings (lokal)</h2>`

## `src/pages/Settings.tsx`:377

- **Text:** '1px solid var(--border-color, #bfdbfe)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, #bfdbfe)',`

## `src/pages/Settings.tsx`:385

- **Text:** 'Mandant → AI-Workspace-Instanz → Einstellungen → Tab „Neutralisierung“'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <strong>Mandant → AI-Workspace-Instanz → Einstellungen → Tab „Neutralisierung“</strong> (nicht auf dieser`

## `src/pages/Settings.tsx`:470

- **Text:** 'Sprache konnte nicht gespeichert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    } catch { setLanguageError('Sprache konnte nicht gespeichert werden'); }`

## `src/pages/Settings.tsx`:475

- **Text:** 'Nicht angemeldet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (!currentUser?.id || !currentUser?.username) throw new Error('Nicht angemeldet');`

## `src/pages/Settings.tsx`:489

- **Text:** 'Persoenliche Einstellungen und Praeferenzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.subtitle}>Persoenliche Einstellungen und Praeferenzen</p>`

## `src/pages/Settings.tsx`:511

- **Text:** 'Profil bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <label className={styles.settingLabel}>Profil bearbeiten</label>`

## `src/pages/Settings.tsx`:512

- **Text:** 'Aendern Sie Ihren Namen und Ihre E-Mail-Adresse.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <p className={styles.settingDescription}>Aendern Sie Ihren Namen und Ihre E-Mail-Adresse.</p>`

## `src/pages/Settings.tsx`:540

- **Text:** 'Waehlen Sie zwischen hellem und dunklem Design.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.settingInfo}><label className={styles.settingLabel}>Theme</label><p className={styles.settingDescription}>Waehlen Sie zwischen hellem und dunklem Design.</p></div>`

## `src/pages/Settings.tsx`:555

- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `                        { code: 'de', label: 'Deutsch' },`

## `src/pages/Settings.tsx`:556

- **Text:** 'English'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `                        { code: 'en', label: 'English' },`

## `src/pages/Settings.tsx`:557

- **Text:** 'Français'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `                        { code: 'fr', label: 'Français' },`

## `src/pages/Settings.tsx`:584

- **Text:** 'GDPR / Privacy'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.settingInfo}><label className={styles.settingLabel}>GDPR / Privacy</label><p className={styles.settingDescription}>Datenexport, Portabilität und Kontolöschung.</p></div>`

## `src/pages/Settings.tsx`:584

- **Text:** 'Datenexport, Portabilität und Kontolöschung.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.settingInfo}><label className={styles.settingLabel}>GDPR / Privacy</label><p className={styles.settingDescription}>Datenexport, Portabilität und Kontolöschung.</p></div>`

## `src/pages/Settings.tsx`:585

- **Text:** 'GDPR öffnen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.settingControl}><Link className={`${styles.button} ${styles.linkButton}`} to="/gdpr">GDPR öffnen</Link></div>`

## `src/pages/Store.tsx`:25

- **Text:** 'Erstelle und verwalte Automatisierungen, um wiederkehrende Aufgaben effizient zu erledigen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    de: 'Erstelle und verwalte Automatisierungen, um wiederkehrende Aufgaben effizient zu erledigen.',`

## `src/pages/Store.tsx`:26

- **Text:** 'Create and manage automations to handle recurring tasks efficiently.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    en: 'Create and manage automations to handle recurring tasks efficiently.',`

## `src/pages/Store.tsx`:27

- **Text:** 'Creer et gerer des automatisations pour traiter efficacement les taches recurrentes.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    fr: 'Creer et gerer des automatisations pour traiter efficacement les taches recurrentes.',`

## `src/pages/Store.tsx`:30

- **Text:** 'n8n-style Flow-Automatisierung mit grafischem Editor, RAG und Tools.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    de: 'n8n-style Flow-Automatisierung mit grafischem Editor, RAG und Tools.',`

## `src/pages/Store.tsx`:31

- **Text:** 'n8n-style flow automation with visual editor, RAG and tools.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    en: 'n8n-style flow automation with visual editor, RAG and tools.',`

## `src/pages/Store.tsx`:32

- **Text:** 'Automatisation de flux style n8n avec editeur visuel, RAG et outils.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    fr: 'Automatisation de flux style n8n avec editeur visuel, RAG et outils.',`

## `src/pages/Store.tsx`:35

- **Text:** 'Integriere einen AI-Bot in deine Microsoft Teams Meetings und Channels.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    de: 'Integriere einen AI-Bot in deine Microsoft Teams Meetings und Channels.',`

## `src/pages/Store.tsx`:36

- **Text:** 'Integrate an AI bot into your Microsoft Teams meetings and channels.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    en: 'Integrate an AI bot into your Microsoft Teams meetings and channels.',`

## `src/pages/Store.tsx`:37

- **Text:** 'Integrez un bot IA dans vos reunions et canaux Microsoft Teams.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    fr: 'Integrez un bot IA dans vos reunions et canaux Microsoft Teams.',`

## `src/pages/Store.tsx`:40

- **Text:** 'Nutze den gemeinsamen AI Workspace: Chats, Tools und Kontext pro Instanz.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    de: 'Nutze den gemeinsamen AI Workspace: Chats, Tools und Kontext pro Instanz.',`

## `src/pages/Store.tsx`:41

- **Text:** 'Use the shared AI workspace: chats, tools, and context per instance.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    en: 'Use the shared AI workspace: chats, tools, and context per instance.',`

## `src/pages/Store.tsx`:42

- **Text:** "Utilisez l'espace de travail IA partage: chats, outils et contexte par instance."
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    fr: 'Utilisez l\'espace de travail IA partage: chats, outils et contexte par instance.',`

## `src/pages/Store.tsx`:45

- **Text:** 'CommCoach: Kommunikation trainieren mit KI-gestütztem Coaching und Feedback.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    de: 'CommCoach: Kommunikation trainieren mit KI-gestütztem Coaching und Feedback.',`

## `src/pages/Store.tsx`:46

- **Text:** 'CommCoach: practice communication with AI-assisted coaching and feedback.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    en: 'CommCoach: practice communication with AI-assisted coaching and feedback.',`

## `src/pages/Store.tsx`:47

- **Text:** 'CommCoach: entrainer la communication avec un coaching assiste par IA.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    fr: 'CommCoach: entrainer la communication avec un coaching assiste par IA.',`

## `src/pages/Store.tsx`:140

- **Text:** 'Wird aktiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? (language === 'de' ? 'Wird aktiviert...' : 'Activating...')`

## `src/pages/Store.tsx`:160

- **Text:** 'Feature Store'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        <h1>{currentLanguage === 'de' ? 'Feature Store' : currentLanguage === 'fr' ? 'Feature Store' : 'Feature Store'}</h1>`

## `src/pages/Store.tsx`:163

- **Text:** 'Aktiviere Features fuer dein Konto. Deine Daten sind isoliert und nur fuer dich sichtbar.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            ? 'Aktiviere Features fuer dein Konto. Deine Daten sind isoliert und nur fuer dich sichtbar.'`

## `src/pages/Store.tsx`:165

- **Text:** 'Activez des fonctionnalites pour votre compte. Vos donnees sont isolees et visibles uniquement par vous.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? 'Activez des fonctionnalites pour votre compte. Vos donnees sont isolees et visibles uniquement par vous.'`

## `src/pages/Store.tsx`:166

- **Text:** 'Activate features for your account. Your data is isolated and only visible to you.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              : 'Activate features for your account. Your data is isolated and only visible to you.'}`

## `src/pages/Store.tsx`:186

- **Text:** 'AI budget'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {currentLanguage === 'de' ? 'AI-Budget' : 'AI budget'}: {subscriptionInfo.budgetAiCHF} CHF`

## `src/pages/Store.tsx`:191

- **Text:** 'Trial endet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {currentLanguage === 'de' ? 'Trial endet' : 'Trial ends'}: {new Date(subscriptionInfo.trialEndsAt).toLocaleDateString()}`

## `src/pages/Store.tsx`:191

- **Text:** 'Trial ends'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {currentLanguage === 'de' ? 'Trial endet' : 'Trial ends'}: {new Date(subscriptionInfo.trialEndsAt).toLocaleDateString()}`

## `src/pages/Store.tsx`:201

- **Text:** 'Lade Features...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {currentLanguage === 'de' ? 'Lade Features...' : 'Loading features...'}`

## `src/pages/Store.tsx`:201

- **Text:** 'Loading features...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {currentLanguage === 'de' ? 'Lade Features...' : 'Loading features...'}`

## `src/pages/Store.tsx`:206

- **Text:** 'Keine Features im Store verfuegbar.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            ? 'Keine Features im Store verfuegbar.'`

## `src/pages/Store.tsx`:207

- **Text:** 'No features available in the store.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            : 'No features available in the store.'}`

## `src/pages/admin/AccessManagementHub.tsx`:147

- **Text:** 'Rollen synchronisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Rollen synchronisiert',`

## `src/pages/admin/AccessManagementHub.tsx`:152

- **Text:** 'Synchronisierung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren');`

## `src/pages/admin/AccessManagementHub.tsx`:152

- **Text:** 'Fehler beim Synchronisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren');`

## `src/pages/admin/AccessManagementHub.tsx`:155

- **Text:** 'Rollen konnten nicht synchronisiert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', 'Rollen konnten nicht synchronisiert werden');`

## `src/pages/admin/AccessManagementHub.tsx`:308

- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler: {error}</p>`

## `src/pages/admin/AccessManagementHub.tsx`:342

- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <option value="">-- Mandant wählen --</option>`

## `src/pages/admin/AccessManagementHub.tsx`:431

- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`

## `src/pages/admin/AccessManagementHub.tsx`:463

- **Text:** 'Rollen (max)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span className={hubStyles.statsLabel}>Rollen (max)</span>`

## `src/pages/admin/AccessManagementHub.tsx`:496

- **Text:** 'Lade Instanzen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span>Lade Instanzen...</span>`

## `src/pages/admin/AccessManagementHub.tsx`:501

- **Text:** 'Keine Feature-Instanzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <h3 className={styles.emptyTitle}>Keine Feature-Instanzen</h3>`

## `src/pages/admin/AccessManagementHub.tsx`:526

- **Text:** 'f.code === inst.featureCode) || { code: inst.featureCode, label: inst.featureCode })}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      <span>{getFeatureLabel(features.find((f) => f.code === inst.featureCode) || { code: inst.featureCode, label: inst.featureCode })}</span>`

## `src/pages/admin/AccessManagementHub.tsx`:543

- **Text:** 'Rollen synchronisieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                        title="Rollen synchronisieren"`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:87

- **Text:** 'Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { key: 'label', label: 'Name', type: 'string' as const, sortable: true, filterable: true, searchable: true, width: 200 },`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:88

- **Text:** 'Feature'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { key: 'featureCode', label: 'Feature', type: 'string' as const, sortable: true, filterable: true, width: 150,`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:100

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { key: 'enabled', label: 'Aktiv', type: 'boolean' as const, sortable: true, filterable: true, width: 80 },`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:123

- **Text:** 'Label ist erforderlich.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', 'Label ist erforderlich.');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:133

- **Text:** 'System Prompt ist erforderlich für Chatbot-Instanzen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Fehler', 'System Prompt ist erforderlich für Chatbot-Instanzen.');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:177

- **Text:** 'Feature-Instanz erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Feature-Instanz erstellt', `Die Instanz "${createLabel}" wurde erfolgreich erstellt.`);`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:179

- **Text:** 'Fehler beim Erstellen der Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Erstellen der Feature-Instanz');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:229

- **Text:** 'System Prompt ist erforderlich für Chatbot-Instanzen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Fehler', 'System Prompt ist erforderlich für Chatbot-Instanzen.');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:271

- **Text:** 'Feature-Instanz aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Feature-Instanz aktualisiert', `Die Instanz "${data.label}" wurde erfolgreich aktualisiert.`);`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:273

- **Text:** 'Fehler beim Aktualisieren der Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Aktualisieren der Feature-Instanz');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:286

- **Text:** 'Instanz gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Instanz gelöscht', 'Die Feature-Instanz wurde gelöscht.');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:286

- **Text:** 'Die Feature-Instanz wurde gelöscht.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Instanz gelöscht', 'Die Feature-Instanz wurde gelöscht.');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:289

- **Text:** 'Fehler beim Löschen der Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Löschen der Feature-Instanz');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:302

- **Text:** 'Rollen synchronisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Rollen synchronisiert',`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:306

- **Text:** 'Synchronisierung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren der Rollen');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:306

- **Text:** 'Fehler beim Synchronisieren der Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Synchronisierung fehlgeschlagen', result.error || 'Fehler beim Synchronisieren der Rollen');`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:338

- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler: {error}</p>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:352

- **Text:** 'Verwalten Sie Feature-Instanzen für jeden Mandanten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Verwalten Sie Feature-Instanzen für jeden Mandanten</p>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:368

- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Mandant wählen --</option>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:390

- **Text:** 'Keine Features verfügbar. Bitte laden Sie die Seite neu oder prüfen Sie die Konsole auf Fehler.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title={features.length === 0 ? 'Keine Features verfügbar. Bitte laden Sie die Seite neu oder prüfen Sie die Konsole auf Fehler.' : undefined}`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:402

- **Text:** 'Verfügbare Features:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Verfügbare Features: </span>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:415

- **Text:** ' Die API hat keine Features zurückgegeben.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {error ? ` Fehler: ${error}` : ' Die API hat keine Features zurückgegeben.'}`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:432

- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:453

- **Text:** 'Instanz löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Instanz löschen',`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:461

- **Text:** 'Instanz bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Instanz bearbeiten',`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:467

- **Text:** 'Rollen synchronisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Rollen synchronisieren',`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:477

- **Text:** 'Keine Feature-Instanzen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Feature-Instanzen gefunden"`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:487

- **Text:** 'Neue Feature-Instanz erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neue Feature-Instanz erstellen</h2>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:497

- **Text:** 'Keine Features verfügbar. Bitte wenden Sie sich an den System-Administrator.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Keine Features verfügbar. Bitte wenden Sie sich an den System-Administrator.</p>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:501

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:528

- **Text:** 'Feature auswählen (erforderlich)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder="Feature auswählen (erforderlich)"`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:555

- **Text:** 'Instanz-Bezeichnung eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                        placeholder="Instanz-Bezeichnung eingeben..."`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:611

- **Text:** 'Feature-Instanz bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Feature-Instanz bearbeiten</h2>`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:625

- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `                    label: 'Bezeichnung',`

## `src/pages/admin/AdminFeatureAccessPage.tsx`:632

- **Text:** 'Aktiviert'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `                    label: 'Aktiviert',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:201

- **Text:** 'Benutzername'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Benutzername',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:210

- **Text:** 'E-Mail'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'E-Mail',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:219

- **Text:** 'Vollständiger Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Vollständiger Name',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:228

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Rollen',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:241

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Aktiv',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:268

- **Text:** 'Benutzer'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Benutzer',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:275

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Rollen',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:288

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Rollen',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:295

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Aktiv',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:312

- **Text:** 'Benutzer hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.');`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:312

- **Text:** 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde erfolgreich zur Feature-Instanz hinzugefügt.');`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:314

- **Text:** 'Fehler beim Hinzufügen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Hinzufügen des Benutzers');`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:336

- **Text:** 'Eintrag aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Eintrag aktualisiert', 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.');`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:336

- **Text:** 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Eintrag aktualisiert', 'Rollen und Aktiv-Status wurden erfolgreich aktualisiert.');`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:338

- **Text:** 'Fehler beim Aktualisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Aktualisieren');`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:352

- **Text:** 'Benutzer entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Benutzer entfernt', `"${user.username}" wurde aus der Feature-Instanz entfernt.`);`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:354

- **Text:** 'Fehler beim Entfernen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Entfernen des Benutzers');`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:396

- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler: {error}</p>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:409

- **Text:** 'Feature Instanz Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h1 className={styles.pageTitle}>Feature Instanz Benutzer</h1>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:410

- **Text:** 'Verwalten Sie Benutzerzugriffe auf Feature-Instanzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Verwalten Sie Benutzerzugriffe auf Feature-Instanzen</p>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:427

- **Text:** '-- Mandant / Feature-Instanz wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Mandant / Feature-Instanz wählen --</option>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:485

- **Text:** 'Verfügbare Rollen:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Verfügbare Rollen: </span>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:499

- **Text:** 'Diese Instanz hat noch keine Rollen. Bitte synchronisieren Sie die Rollen zuerst unter "Feature-Instanzen".'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Diese Instanz hat noch keine Rollen. Bitte synchronisieren Sie die Rollen zuerst unter "Feature-Instanzen".</span>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:507

- **Text:** 'Keine Feature-Instanz ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Keine Feature-Instanz ausgewählt</h3>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:510

- **Text:** 'Es gibt noch keine Feature-Instanzen. Erstellen Sie zuerst Feature-Instanzen unter "Feature-Instanzen".'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? 'Es gibt noch keine Feature-Instanzen. Erstellen Sie zuerst Feature-Instanzen unter "Feature-Instanzen".'`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:511

- **Text:** 'Wählen Sie eine Feature-Instanz aus, um deren Benutzer zu verwalten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              : 'Wählen Sie eine Feature-Instanz aus, um deren Benutzer zu verwalten.'}`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:531

- **Text:** 'Rollen bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Rollen bearbeiten',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:535

- **Text:** 'Aus Instanz entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Aus Instanz entfernen',`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:552

- **Text:** 'Keine Benutzer gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Benutzer gefunden"`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:562

- **Text:** 'Benutzer zur Feature-Instanz hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Benutzer zur Feature-Instanz hinzufügen</h2>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:572

- **Text:** 'Alle Benutzer haben bereits Zugriff auf diese Feature-Instanz.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Alle Benutzer haben bereits Zugriff auf diese Feature-Instanz.</p>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:574

- **Text:** 'Diese Feature-Instanz hat keine Rollen. Bitte synchronisieren Sie zuerst die Rollen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Diese Feature-Instanz hat keine Rollen. Bitte synchronisieren Sie zuerst die Rollen.</p>`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:581

- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText="Hinzufügen"`

## `src/pages/admin/AdminFeatureInstanceUsersPage.tsx`:595

- **Text:** 'Rollen bearbeiten: {editingUser.username}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Rollen bearbeiten: {editingUser.username}</h2>`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:69

- **Text:** 'Fehler beim Laden der Features'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError('Fehler beim Laden der Features');`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:111

- **Text:** 'Fehler beim Laden der Feature-Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Fehler beim Laden der Feature-Rollen');`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:134

- **Text:** 'Rollen-Label'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Rollen-Label',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:143

- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Beschreibung',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:151

- **Text:** 'Feature'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Feature',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:169

- **Text:** 'Rollen-Label'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Rollen-Label',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:172

- **Text:** 'Eindeutiger Bezeichner der Rolle (z.B. trustee-admin)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        description: 'Eindeutiger Bezeichner der Rolle (z.B. trustee-admin)'`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:176

- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Beschreibung',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:179

- **Text:** 'Mehrsprachige Beschreibung der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        description: 'Mehrsprachige Beschreibung der Rolle'`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:190

- **Text:** 'Rollen-Label'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Rollen-Label',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:194

- **Text:** 'Eindeutiger Bezeichner der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        description: 'Eindeutiger Bezeichner der Rolle'`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:198

- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Beschreibung',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:201

- **Text:** 'Mehrsprachige Beschreibung der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        description: 'Mehrsprachige Beschreibung der Rolle'`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:221

- **Text:** 'Fehler beim Erstellen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', err.response?.data?.detail || 'Fehler beim Erstellen der Rolle');`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:240

- **Text:** 'Fehler beim Aktualisieren der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', err.response?.data?.detail || 'Fehler beim Aktualisieren der Rolle');`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:253

- **Text:** 'Fehler beim Löschen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', err.response?.data?.detail || 'Fehler beim Löschen der Rolle');`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:283

- **Text:** 'Feature Rollen & Rechte'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h1 className={styles.pageTitle}>Feature Rollen & Rechte</h1>`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:284

- **Text:** 'Template-Rollen und deren Berechtigungen für Feature-Instanzen verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Template-Rollen und deren Berechtigungen für Feature-Instanzen verwalten</p>`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:300

- **Text:** '-- Feature wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Feature wählen --</option>`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:346

- **Text:** 'Kein Feature ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Kein Feature ausgewählt</h3>`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:368

- **Text:** 'Rolle bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Rolle bearbeiten',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:372

- **Text:** 'Rolle löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Rolle löschen',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:380

- **Text:** 'Berechtigungen verwalten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Berechtigungen verwalten',`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:389

- **Text:** 'Keine Feature-Rollen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Feature-Rollen gefunden"`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:399

- **Text:** 'Neue Feature-Rolle erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neue Feature-Rolle erstellen</h2>`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:417

- **Text:** 'Rolle erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                submitButtonText={isSubmitting ? 'Erstelle...' : 'Rolle erstellen'}`

## `src/pages/admin/AdminFeatureRolesPage.tsx`:430

- **Text:** 'Feature-Rolle bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Feature-Rolle bearbeiten</h2>`

## `src/pages/admin/AdminInvitationsPage.tsx`:86

- **Text:** 'Benutzername'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Benutzername',`

## `src/pages/admin/AdminInvitationsPage.tsx`:95

- **Text:** 'E-Mail'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'E-Mail',`

## `src/pages/admin/AdminInvitationsPage.tsx`:104

- **Text:** 'Email wurde gesendet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <span title={emailSent ? 'Email wurde gesendet' : 'Email nicht gesendet'}>`

## `src/pages/admin/AdminInvitationsPage.tsx`:104

- **Text:** 'Email nicht gesendet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          <span title={emailSent ? 'Email wurde gesendet' : 'Email nicht gesendet'}>`

## `src/pages/admin/AdminInvitationsPage.tsx`:112

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Rollen',`

## `src/pages/admin/AdminInvitationsPage.tsx`:127

- **Text:** 'Gültig bis'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Gültig bis',`

## `src/pages/admin/AdminInvitationsPage.tsx`:143

- **Text:** 'Verwendet'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Verwendet',`

## `src/pages/admin/AdminInvitationsPage.tsx`:151

- **Text:** 'Erstellt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Erstellt',`

## `src/pages/admin/AdminInvitationsPage.tsx`:177

- **Text:** 'Gültigkeitsdauer (Stunden)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      fields.push({ name: 'expiresInHours', label: 'Gültigkeitsdauer (Stunden)', type: 'number',`

## `src/pages/admin/AdminInvitationsPage.tsx`:200

- **Text:** 'Fehler beim Erstellen der Einladung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Erstellen der Einladung');`

## `src/pages/admin/AdminInvitationsPage.tsx`:213

- **Text:** 'Fehler beim Widerrufen der Einladung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Widerrufen der Einladung');`

## `src/pages/admin/AdminInvitationsPage.tsx`:248

- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler: {error}</p>`

## `src/pages/admin/AdminInvitationsPage.tsx`:262

- **Text:** 'Erstellen und verwalten Sie Einladungen für neue Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Erstellen und verwalten Sie Einladungen für neue Benutzer</p>`

## `src/pages/admin/AdminInvitationsPage.tsx`:278

- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Mandant wählen --</option>`

## `src/pages/admin/AdminInvitationsPage.tsx`:329

- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`

## `src/pages/admin/AdminInvitationsPage.tsx`:350

- **Text:** 'Einladung widerrufen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Einladung widerrufen',`

## `src/pages/admin/AdminInvitationsPage.tsx`:358

- **Text:** 'Einladungs-Link anzeigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Einladungs-Link anzeigen',`

## `src/pages/admin/AdminInvitationsPage.tsx`:366

- **Text:** 'Keine Einladungen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Einladungen gefunden"`

## `src/pages/admin/AdminInvitationsPage.tsx`:376

- **Text:** 'Neue Einladung erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neue Einladung erstellen</h2>`

## `src/pages/admin/AdminInvitationsPage.tsx`:388

- **Text:** 'Lade Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Rollen...</span>`

## `src/pages/admin/AdminInvitationsPage.tsx`:393

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/AdminInvitationsPage.tsx`:401

- **Text:** 'Einladung erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText="Einladung erstellen"`

## `src/pages/admin/AdminInvitationsPage.tsx`:438

- **Text:** 'In Zwischenablage kopieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="In Zwischenablage kopieren"`

## `src/pages/admin/AdminInvitationsPage.tsx`:441

- **Text:** ' Kopiert!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {copySuccess ? ' Kopiert!' : ' Kopieren'}`

## `src/pages/admin/AdminInvitationsPage.tsx`:441

- **Text:** ' Kopieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {copySuccess ? ' Kopiert!' : ' Kopieren'}`

## `src/pages/admin/AdminLanguagesPage.tsx`:22

- **Text:** 'Code'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'id', label: 'Code', type: 'text', sortable: true, filterable: true, width: 90 },`

## `src/pages/admin/AdminLanguagesPage.tsx`:23

- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'label', label: 'Bezeichnung', type: 'text', sortable: true, filterable: true, width: 160 },`

## `src/pages/admin/AdminLanguagesPage.tsx`:24

- **Text:** 'Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'status', label: 'Status', type: 'text', sortable: true, filterable: true, width: 120 },`

## `src/pages/admin/AdminLanguagesPage.tsx`:25

- **Text:** 'Keys'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'keysCount', label: 'Keys', type: 'number', sortable: true, width: 90 },`

## `src/pages/admin/AdminLanguagesPage.tsx`:29

- **Text:** 'it — Italiano'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'it', label: 'it — Italiano' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:30

- **Text:** 'es — Español'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'es', label: 'es — Español' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:31

- **Text:** 'pt — Português'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'pt', label: 'pt — Português' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:32

- **Text:** 'nl — Nederlands'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'nl', label: 'nl — Nederlands' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:33

- **Text:** 'pl — Polski'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'pl', label: 'pl — Polski' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:34

- **Text:** 'cs — Čeština'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'cs', label: 'cs — Čeština' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:35

- **Text:** 'sk — Slovenčina'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'sk', label: 'sk — Slovenčina' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:36

- **Text:** 'sv — Svenska'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'sv', label: 'sv — Svenska' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:37

- **Text:** 'no — Norsk'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'no', label: 'no — Norsk' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:38

- **Text:** 'da — Dansk'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { value: 'da', label: 'da — Dansk' },`

## `src/pages/admin/AdminLanguagesPage.tsx`:65

- **Text:** 'Laden fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(e.response?.data?.detail || e.message || 'Laden fehlgeschlagen');`

## `src/pages/admin/AdminLogsPage.tsx`:49

- **Text:** 'Fehler beim Laden der Logs'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.response?.data?.detail || 'Fehler beim Laden der Logs');`

## `src/pages/admin/AdminLogsPage.tsx`:81

- **Text:** 'Fehler beim Download'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.response?.data?.detail || 'Fehler beim Download');`

## `src/pages/admin/AdminLogsPage.tsx`:107

- **Text:** 'Gateway Logs'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h1 className={styles.pageTitle}>Gateway Logs</h1>`

## `src/pages/admin/AdminLogsPage.tsx`:111

- **Text:** 'Keine Logs geladen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              : 'Keine Logs geladen'}`

## `src/pages/admin/AdminLogsPage.tsx`:112

- **Text:** '— {logDir}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            {logDir && <span className={logStyles.logDirHint}> — {logDir}</span>}`

## `src/pages/admin/AdminLogsPage.tsx`:120

- **Text:** 'Log herunterladen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Log herunterladen"`

## `src/pages/admin/AdminLogsPage.tsx`:139

- **Text:** 'Einträge'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label className={logStyles.controlLabel}>Einträge</label>`

## `src/pages/admin/AdminLogsPage.tsx`:182

- **Text:** 'Keine Logs geladen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.emptyTitle}>Keine Logs geladen</p>`

## `src/pages/admin/AdminLogsPage.tsx`:191

- **Text:** 'Logs werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span>Logs werden geladen...</span>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:14

- **Text:** 'Cleanup Duplicates'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Includes a "Cleanup Duplicates" tool to find and remove duplicate AccessRules.`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:180

- **Text:** 'Fehler beim Laden der Duplikate'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setCleanupError(err?.response?.data?.detail || err?.message || 'Fehler beim Laden der Duplikate');`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:200

- **Text:** 'Fehler beim Bereinigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setCleanupError(err?.response?.data?.detail || err?.message || 'Fehler beim Bereinigen');`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:215

- **Text:** 'Mandanten-Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 'mandate', label: 'Mandanten-Rollen' },`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:216

- **Text:** 'Alle (inkl. Templates)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 'all', label: 'Alle (inkl. Templates)' },`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:217

- **Text:** 'Nur Templates'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 'global', label: 'Nur Templates' },`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:225

- **Text:** 'Fehler beim Laden: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden: {error}</p>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:252

- **Text:** 'Doppelte Regeln finden und bereinigen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Doppelte Regeln finden und bereinigen"`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:313

- **Text:** 'Lade Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Lade Rollen...</span>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:321

- **Text:** 'Keine Rollen gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p>Keine Rollen gefunden</p>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:324

- **Text:** 'Es gibt noch keine Mandanten-Rollen. System-Rollen werden bei der Mandant-Erstellung automatisch kopiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? 'Es gibt noch keine Mandanten-Rollen. System-Rollen werden bei der Mandant-Erstellung automatisch kopiert.'`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:326

- **Text:** 'Es gibt noch keine Rollen-Templates.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? 'Es gibt noch keine Rollen-Templates.'`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:327

- **Text:** 'Es gibt noch keine Rollen für diesen Mandanten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              : 'Es gibt noch keine Rollen für diesen Mandanten.'}`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:402

- **Text:** 'Analysiere Duplikate...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  <span>{cleanupPhase === 'idle' ? 'Analysiere Duplikate...' : 'Bereinige Duplikate...'}</span>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:402

- **Text:** 'Bereinige Duplikate...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  <span>{cleanupPhase === 'idle' ? 'Analysiere Duplikate...' : 'Bereinige Duplikate...'}</span>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:436

- **Text:** 'Zu loeschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        {cleanupPhase === 'done' ? 'Geloescht' : 'Zu loeschen'}`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:445

- **Text:** 'doppelte Regeln wurden erfolgreich entfernt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      <span><strong>{cleanupResult.deletedCount}</strong> doppelte Regeln wurden erfolgreich entfernt.</span>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:452

- **Text:** 'Keine Duplikate gefunden. Alles sauber!'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      <span>Keine Duplikate gefunden. Alles sauber!</span>`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:515

- **Text:** 'Zu reparieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            {cleanupPhase === 'done' ? 'Repariert' : 'Zu reparieren'}`

## `src/pages/admin/AdminMandateRolePermissionsPage.tsx`:566

- **Text:** 'Keine fehlerhaften Template-Rollen-Zuweisungen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      <span>Keine fehlerhaften Template-Rollen-Zuweisungen.</span>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:102

- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Bezeichnung',`

## `src/pages/admin/AdminMandateRolesPage.tsx`:111

- **Text:** 'Beschreibung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Beschreibung',`

## `src/pages/admin/AdminMandateRolesPage.tsx`:120

- **Text:** 'Geltungsbereich'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Geltungsbereich',`

## `src/pages/admin/AdminMandateRolesPage.tsx`:161

- **Text:** 'Geltungsbereich'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Geltungsbereich',`

## `src/pages/admin/AdminMandateRolesPage.tsx`:166

- **Text:** 'Nur dieser Mandant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `          { value: 'mandate', label: 'Nur dieser Mandant' },`

## `src/pages/admin/AdminMandateRolesPage.tsx`:167

- **Text:** 'Template (wird bei neuen Mandanten kopiert)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `          { value: 'global', label: 'Template (wird bei neuen Mandanten kopiert)' },`

## `src/pages/admin/AdminMandateRolesPage.tsx`:216

- **Text:** 'Fehler beim Erstellen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Erstellen der Rolle');`

## `src/pages/admin/AdminMandateRolesPage.tsx`:220

- **Text:** 'Fehler beim Erstellen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', err.message || 'Fehler beim Erstellen der Rolle');`

## `src/pages/admin/AdminMandateRolesPage.tsx`:255

- **Text:** 'Fehler beim Aktualisieren der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Aktualisieren der Rolle');`

## `src/pages/admin/AdminMandateRolesPage.tsx`:259

- **Text:** 'Fehler beim Aktualisieren der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', err.message || 'Fehler beim Aktualisieren der Rolle');`

## `src/pages/admin/AdminMandateRolesPage.tsx`:268

- **Text:** 'Nicht erlaubt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Nicht erlaubt', 'System-Rollen können nicht gelöscht werden.');`

## `src/pages/admin/AdminMandateRolesPage.tsx`:268

- **Text:** 'System-Rollen können nicht gelöscht werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Nicht erlaubt', 'System-Rollen können nicht gelöscht werden.');`

## `src/pages/admin/AdminMandateRolesPage.tsx`:277

- **Text:** 'Fehler beim Löschen der Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Löschen der Rolle');`

## `src/pages/admin/AdminMandateRolesPage.tsx`:300

- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler: {error}</p>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:314

- **Text:** 'Verwalten Sie System-, globale und mandantenspezifische Rollen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Verwalten Sie System-, globale und mandantenspezifische Rollen</p>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:346

- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Mandant wählen --</option>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:364

- **Text:** 'Alle (inkl. Templates)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="all">Alle (inkl. Templates)</option>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:365

- **Text:** 'Nur Templates'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="global">Nur Templates</option>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:404

- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:426

- **Text:** 'Rolle bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Rolle bearbeiten',`

## `src/pages/admin/AdminMandateRolesPage.tsx`:427

- **Text:** 'System-Rollen können nicht bearbeitet werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                disabled: (row: Role) => row.isSystemRole ? { disabled: true, message: 'System-Rollen können nicht bearbeitet werden' } : false`

## `src/pages/admin/AdminMandateRolesPage.tsx`:431

- **Text:** 'Rolle löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Rolle löschen',`

## `src/pages/admin/AdminMandateRolesPage.tsx`:432

- **Text:** 'System-Rollen können nicht gelöscht werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                disabled: (row: Role) => row.isSystemRole ? { disabled: true, message: 'System-Rollen können nicht gelöscht werden' } : false`

## `src/pages/admin/AdminMandateRolesPage.tsx`:441

- **Text:** 'Keine Rollen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Rollen gefunden"`

## `src/pages/admin/AdminMandateRolesPage.tsx`:451

- **Text:** 'Neue Rolle erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neue Rolle erstellen</h2>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:463

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:471

- **Text:** 'Rolle erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText={isSubmitting ? 'Erstelle...' : 'Rolle erstellen'}`

## `src/pages/admin/AdminMandateRolesPage.tsx`:485

- **Text:** 'Rolle bearbeiten: {editingRole.roleLabel}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Rolle bearbeiten: {editingRole.roleLabel}</h2>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:497

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/AdminMandateRolesPage.tsx`:504

- **Text:** 'Template (global)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      Geltungsbereich: <strong>{editingRole.mandateId ? 'Mandanten-Instanz' : 'Template (global)'}</strong>`

## `src/pages/admin/AdminMandatesPage.tsx`:76

- **Text:** 'Abrechnungseinstellungen konnten nicht geladen werden. Nur Mandantendaten sind sicher bearbeitbar.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Abrechnungseinstellungen konnten nicht geladen werden. Nur Mandantendaten sind sicher bearbeitbar.'`

## `src/pages/admin/AdminMandatesPage.tsx`:88

- **Text:** 'Mandant inkl. Abrechnungseinstellungen gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Erstellt', 'Mandant inkl. Abrechnungseinstellungen gespeichert.');`

## `src/pages/admin/AdminMandatesPage.tsx`:92

- **Text:** 'Mandant erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Mandant erstellt',`

## `src/pages/admin/AdminMandatesPage.tsx`:93

- **Text:** 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'`

## `src/pages/admin/AdminMandatesPage.tsx`:108

- **Text:** 'Mandant und Abrechnung aktualisiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Gespeichert', 'Mandant und Abrechnung aktualisiert.');`

## `src/pages/admin/AdminMandatesPage.tsx`:111

- **Text:** 'Teilweise gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Teilweise gespeichert', 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.');`

## `src/pages/admin/AdminMandatesPage.tsx`:111

- **Text:** 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Teilweise gespeichert', 'Mandant gespeichert, Abrechnung konnte nicht aktualisiert werden.');`

## `src/pages/admin/AdminMandatesPage.tsx`:123

- **Text:** 'Mandant deaktivieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      { title: 'Mandant deaktivieren', confirmLabel: 'Deaktivieren', variant: 'danger', placeholder: mandate.name },`

## `src/pages/admin/AdminMandatesPage.tsx`:127

- **Text:** 'Der eingegebene Name stimmt nicht überein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Abgebrochen', 'Der eingegebene Name stimmt nicht überein.');`

## `src/pages/admin/AdminMandatesPage.tsx`:135

- **Text:** 'Nicht erlaubt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Nicht erlaubt', 'System-Mandanten können nicht gelöscht werden.');`

## `src/pages/admin/AdminMandatesPage.tsx`:135

- **Text:** 'System-Mandanten können nicht gelöscht werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Nicht erlaubt', 'System-Mandanten können nicht gelöscht werden.');`

## `src/pages/admin/AdminMandatesPage.tsx`:140

- **Text:** 'Hard Delete (irreversibel)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      { title: 'Hard Delete (irreversibel)', confirmLabel: 'Endgültig löschen', variant: 'danger', placeholder: mandate.name },`

## `src/pages/admin/AdminMandatesPage.tsx`:140

- **Text:** 'Endgültig löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      { title: 'Hard Delete (irreversibel)', confirmLabel: 'Endgültig löschen', variant: 'danger', placeholder: mandate.name },`

## `src/pages/admin/AdminMandatesPage.tsx`:144

- **Text:** 'Der eingegebene Name stimmt nicht überein.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showWarning('Abgebrochen', 'Der eingegebene Name stimmt nicht überein.');`

## `src/pages/admin/AdminMandatesPage.tsx`:149

- **Text:** 'Gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Gelöscht', `Mandant "${mandate.name}" wurde endgültig gelöscht.`);`

## `src/pages/admin/AdminMandatesPage.tsx`:158

- **Text:** 'Fehler beim Laden der Mandanten: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Mandanten: {error}</p>`

## `src/pages/admin/AdminMandatesPage.tsx`:172

- **Text:** 'Verwalten Sie alle Mandanten im System'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Verwalten Sie alle Mandanten im System</p>`

## `src/pages/admin/AdminMandatesPage.tsx`:220

- **Text:** 'Deaktivieren (Soft-Delete)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Deaktivieren (Soft-Delete)',`

## `src/pages/admin/AdminMandatesPage.tsx`:222

- **Text:** 'System-Mandanten können nicht gelöscht werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  ? { disabled: true, message: 'System-Mandanten können nicht gelöscht werden' }`

## `src/pages/admin/AdminMandatesPage.tsx`:230

- **Text:** 'Hard Delete (irreversibel)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Hard Delete (irreversibel)',`

## `src/pages/admin/AdminMandatesPage.tsx`:232

- **Text:** 'System-Mandanten können nicht gelöscht werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                ? { disabled: true, message: 'System-Mandanten können nicht gelöscht werden' }`

## `src/pages/admin/AdminMandatesPage.tsx`:244

- **Text:** 'Keine Mandanten gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Mandanten gefunden"`

## `src/pages/admin/AdminMandatesPage.tsx`:253

- **Text:** 'Neuer Mandant'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neuer Mandant</h2>`

## `src/pages/admin/AdminMandatesPage.tsx`:269

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/AdminMandatesPage.tsx`:299

- **Text:** 'Mandant bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Mandant bearbeiten</h2>`

## `src/pages/admin/AdminMandatesPage.tsx`:330

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:105

- **Text:** 'Failed to fetch users'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError(err?.response?.data?.detail || err?.message || 'Failed to fetch users');`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:133

- **Text:** 'Failed to fetch overview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError(err?.response?.data?.detail || err?.message || 'Failed to fetch overview');`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:200

- **Text:** 'Dieser Benutzer ist SysAdmin und hat vollen Systemzugriff.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <span>{overview.sysAdminNote || 'Dieser Benutzer ist SysAdmin und hat vollen Systemzugriff.'}</span>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:207

- **Text:** 'Keine Mandate-Zuordnungen vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.emptyHint}>Keine Mandate-Zuordnungen vorhanden.</p>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:231

- **Text:** 'Keine Rollen direkt am Mandanten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                        <p className={styles.emptyHint}>Keine Rollen direkt am Mandanten.</p>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:256

- **Text:** 'Keine Feature-Instanzen zugewiesen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                        <p className={styles.emptyHint}>Keine Feature-Instanzen zugewiesen.</p>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:358

- **Text:** 'UI-Zugriffsrechte bestimmen, welche Seiten und Views der Benutzer sehen kann.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>UI-Zugriffsrechte bestimmen, welche Seiten und Views der Benutzer sehen kann.</span>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:364

- **Text:** 'Keine UI-Berechtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h3 className={styles.emptyTitle}>Keine UI-Berechtigungen</h3>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:375

- **Text:** 'Gewährt durch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <th style={{ textAlign: 'left', padding: '0.75rem', color: 'var(--text-secondary)' }}>Gewährt durch</th>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:383

- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    borderBottom: '1px solid var(--border-color)',`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:425

- **Text:** 'Keine Daten-Berechtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h3 className={styles.emptyTitle}>Keine Daten-Berechtigungen</h3>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:438

- **Text:** 'Löschen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <th style={{ textAlign: 'center', padding: '0.75rem', color: 'var(--text-secondary)', width: '70px' }}>Löschen</th>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:439

- **Text:** 'Gewährt durch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <th style={{ textAlign: 'left', padding: '0.75rem', color: 'var(--text-secondary)' }}>Gewährt durch</th>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:447

- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    borderBottom: '1px solid var(--border-color)',`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:521

- **Text:** 'Ressourcen-Zugriffsrechte bestimmen, welche System-Ressourcen (z.B. AI-Modelle) der Benutzer verwenden kann.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Ressourcen-Zugriffsrechte bestimmen, welche System-Ressourcen (z.B. AI-Modelle) der Benutzer verwenden kann.</span>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:527

- **Text:** 'Keine Ressourcen-Berechtigungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h3 className={styles.emptyTitle}>Keine Ressourcen-Berechtigungen</h3>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:538

- **Text:** 'Gewährt durch'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <th style={{ textAlign: 'left', padding: '0.75rem', color: 'var(--text-secondary)' }}>Gewährt durch</th>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:546

- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    borderBottom: '1px solid var(--border-color)',`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:577

- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler: {error}</p>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:593

- **Text:** 'Benutzer-Zugriffsübersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h1 className={styles.pageTitle}>Benutzer-Zugriffsübersicht</h1>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:594

- **Text:** 'Zeigt alle Berechtigungen eines Benutzers an'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Zeigt alle Berechtigungen eines Benutzers an</p>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:612

- **Text:** '-- Benutzer wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Benutzer wählen --</option>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:616

- **Text:** ' [SysAdmin]'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {user.isSysAdmin && ' [SysAdmin]'}`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:637

- **Text:** 'Benutzer auswählen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Benutzer auswählen</h3>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:645

- **Text:** 'Lade Zugriffsübersicht...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Lade Zugriffsübersicht...</span>`

## `src/pages/admin/AdminUserAccessOverviewPage.tsx`:669

- **Text:** '1px solid var(--border-color)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            borderBottom: '1px solid var(--border-color)',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:100

- **Text:** 'Benutzername'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Benutzername',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:109

- **Text:** 'E-Mail'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'E-Mail',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:118

- **Text:** 'Vollständiger Name'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Vollständiger Name',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:127

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Rollen',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:140

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Aktiv',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:211

- **Text:** 'Fehler beim Hinzufügen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Hinzufügen des Benutzers');`

## `src/pages/admin/AdminUserMandatesPage.tsx`:228

- **Text:** 'Fehler beim Aktualisieren der Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Fehler beim Aktualisieren der Rollen');`

## `src/pages/admin/AdminUserMandatesPage.tsx`:240

- **Text:** 'Fehler beim Entfernen des Benutzers'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Entfernen des Benutzers');`

## `src/pages/admin/AdminUserMandatesPage.tsx`:263

- **Text:** 'Fehler: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler: {error}</p>`

## `src/pages/admin/AdminUserMandatesPage.tsx`:277

- **Text:** 'Verwalten Sie, welche Benutzer Zugriff auf welche Mandanten haben'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Verwalten Sie, welche Benutzer Zugriff auf welche Mandanten haben</p>`

## `src/pages/admin/AdminUserMandatesPage.tsx`:293

- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">-- Mandant wählen --</option>`

## `src/pages/admin/AdminUserMandatesPage.tsx`:326

- **Text:** 'Kein Mandant ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.emptyTitle}>Kein Mandant ausgewählt</h3>`

## `src/pages/admin/AdminUserMandatesPage.tsx`:348

- **Text:** 'Rollen bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Rollen bearbeiten',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:352

- **Text:** 'Aus Mandant entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Aus Mandant entfernen',`

## `src/pages/admin/AdminUserMandatesPage.tsx`:369

- **Text:** 'Keine Mitglieder gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Mitglieder gefunden"`

## `src/pages/admin/AdminUserMandatesPage.tsx`:379

- **Text:** 'Benutzer zum Mandanten hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Benutzer zum Mandanten hinzufügen</h2>`

## `src/pages/admin/AdminUserMandatesPage.tsx`:389

- **Text:** 'Alle Benutzer sind bereits diesem Mandanten zugewiesen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Alle Benutzer sind bereits diesem Mandanten zugewiesen.</p>`

## `src/pages/admin/AdminUserMandatesPage.tsx`:393

- **Text:** 'Lade Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Rollen...</span>`

## `src/pages/admin/AdminUserMandatesPage.tsx`:401

- **Text:** 'Hinzufügen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText={isSubmitting ? 'Hinzufügen...' : 'Hinzufügen'}`

## `src/pages/admin/AdminUserMandatesPage.tsx`:401

- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText={isSubmitting ? 'Hinzufügen...' : 'Hinzufügen'}`

## `src/pages/admin/AdminUserMandatesPage.tsx`:415

- **Text:** 'Rollen bearbeiten: {editingUser.username}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Rollen bearbeiten: {editingUser.username}</h2>`

## `src/pages/admin/AdminUsersPage.tsx`:131

- **Text:** 'Fehler beim Laden der Benutzer: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Benutzer: {error}</p>`

## `src/pages/admin/AdminUsersPage.tsx`:145

- **Text:** 'Verwalten Sie alle Benutzer im System'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Verwalten Sie alle Benutzer im System</p>`

## `src/pages/admin/AdminUsersPage.tsx`:200

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Löschen',`

## `src/pages/admin/AdminUsersPage.tsx`:208

- **Text:** 'Passwort-Link senden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Passwort-Link senden',`

## `src/pages/admin/AdminUsersPage.tsx`:221

- **Text:** 'Keine Benutzer gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Benutzer gefunden"`

## `src/pages/admin/AdminUsersPage.tsx`:230

- **Text:** 'Neuer Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neuer Benutzer</h2>`

## `src/pages/admin/AdminUsersPage.tsx`:242

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/AdminUsersPage.tsx`:264

- **Text:** 'Benutzer bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Benutzer bearbeiten</h2>`

## `src/pages/admin/AdminUsersPage.tsx`:276

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/admin/ChatbotConfigSection.tsx`:14

- **Text:** 'Anthropic (Claude)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  anthropic: 'Anthropic (Claude)',`

## `src/pages/admin/ChatbotConfigSection.tsx`:15

- **Text:** 'OpenAI (GPT)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  openai: 'OpenAI (GPT)',`

## `src/pages/admin/ChatbotConfigSection.tsx`:17

- **Text:** 'Tavily (Web Search)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  tavily: 'Tavily (Web Search)',`

## `src/pages/admin/ChatbotConfigSection.tsx`:18

- **Text:** 'Private LLM'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  privatellm: 'Private LLM',`

## `src/pages/admin/ChatbotConfigSection.tsx`:57

- **Text:** 'Althaus Preprocessor'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { id: 'preprocessor', label: 'Althaus Preprocessor', value: 'preprocessor' }`

## `src/pages/admin/ChatbotConfigSection.tsx`:113

- **Text:** 'Web Research aktivieren (Tavily)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Web Research aktivieren (Tavily)</span>`

## `src/pages/admin/ChatbotConfigSection.tsx`:158

- **Text:** 'Benutzerdefinierter System-Prompt für den Chatbot...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Benutzerdefinierter System-Prompt für den Chatbot..."`

## `src/pages/admin/InstanceDetailModal.tsx`:115

- **Text:** 'Benutzer hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde der Instanz hinzugefügt.');`

## `src/pages/admin/InstanceDetailModal.tsx`:115

- **Text:** 'Der Benutzer wurde der Instanz hinzugefügt.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Benutzer hinzugefügt', 'Der Benutzer wurde der Instanz hinzugefügt.');`

## `src/pages/admin/InstanceDetailModal.tsx`:117

- **Text:** 'Fehler beim Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Hinzufügen');`

## `src/pages/admin/InstanceDetailModal.tsx`:126

- **Text:** 'Benutzer entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Benutzer entfernt', `"${user.username}" wurde entfernt.`);`

## `src/pages/admin/InstanceDetailModal.tsx`:128

- **Text:** 'Fehler beim Entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Entfernen');`

## `src/pages/admin/InstanceDetailModal.tsx`:146

- **Text:** 'Rollen und Status wurden gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Aktualisiert', 'Rollen und Status wurden gespeichert.');`

## `src/pages/admin/InstanceDetailModal.tsx`:148

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Speichern');`

## `src/pages/admin/InstanceDetailModal.tsx`:160

- **Text:** 'Rollen synchronisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Rollen synchronisiert',`

## `src/pages/admin/InstanceDetailModal.tsx`:164

- **Text:** 'Synchronisierung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Synchronisierung fehlgeschlagen');`

## `src/pages/admin/InstanceDetailModal.tsx`:175

- **Text:** 'Instanz aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Instanz aktualisiert', 'Einstellungen wurden gespeichert.');`

## `src/pages/admin/InstanceDetailModal.tsx`:175

- **Text:** 'Einstellungen wurden gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Instanz aktualisiert', 'Einstellungen wurden gespeichert.');`

## `src/pages/admin/InstanceDetailModal.tsx`:177

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', result.error || 'Fehler beim Speichern');`

## `src/pages/admin/InstanceDetailModal.tsx`:185

- **Text:** 'Benutzer'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Benutzer',`

## `src/pages/admin/InstanceDetailModal.tsx`:195

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Rollen',`

## `src/pages/admin/InstanceDetailModal.tsx`:208

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Rollen',`

## `src/pages/admin/InstanceDetailModal.tsx`:215

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Aktiv',`

## `src/pages/admin/InstanceDetailModal.tsx`:226

- **Text:** 'Benutzer'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Benutzer',`

## `src/pages/admin/InstanceDetailModal.tsx`:232

- **Text:** 'Lade Benutzer...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span>Lade Benutzer...</span>`

## `src/pages/admin/InstanceDetailModal.tsx`:248

- **Text:** 'Rollen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Rollen',`

## `src/pages/admin/InstanceDetailModal.tsx`:272

- **Text:** 'Einstellungen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Einstellungen',`

## `src/pages/admin/InstanceDetailModal.tsx`:277

- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `              { name: 'label', type: 'string' as const, label: 'Bezeichnung', required: true, editable: true },`

## `src/pages/admin/InstanceDetailModal.tsx`:278

- **Text:** 'Aktiviert'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `              { name: 'enabled', type: 'boolean' as const, label: 'Aktiviert', required: false, editable: true },`

## `src/pages/admin/InstanceDetailModal.tsx`:302

- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <button type="button" className={styles.modalClose} onClick={onClose} aria-label="Schließen">`

## `src/pages/admin/InstanceDetailModal.tsx`:315

- **Text:** 'Benutzer hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Benutzer hinzufügen</h2>`

## `src/pages/admin/InstanceDetailModal.tsx`:322

- **Text:** 'Alle Mandanten-Benutzer haben bereits Zugriff.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Alle Mandanten-Benutzer haben bereits Zugriff.</p>`

## `src/pages/admin/InstanceDetailModal.tsx`:331

- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText="Hinzufügen"`

## `src/pages/admin/InstanceDetailModal.tsx`:344

- **Text:** 'Rollen: {editingUser.username}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Rollen: {editingUser.username}</h2>`

## `src/pages/admin/InstanceHierarchyView.tsx`:129

- **Text:** 'Benutzer verwalten'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      title="Benutzer verwalten"`

## `src/pages/admin/InstanceHierarchyView.tsx`:189

- **Text:** 'Lade Hierarchie und Benutzer...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Lade Hierarchie und Benutzer...</span>`

## `src/pages/admin/InstanceHierarchyView.tsx`:266

- **Text:** 'Keine Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      : 'Keine Rollen';`

## `src/pages/admin/InstanceHierarchyView.tsx`:286

- **Text:** 'Zugang: {statusText}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <div className={hierarchyStyles.tooltipStatus}>Zugang: {statusText}</div>`

## `src/pages/admin/PermissionMatrix.tsx`:38

- **Text:** 'Benutzer entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      title: 'Benutzer entfernen',`

## `src/pages/admin/PermissionMatrix.tsx`:51

- **Text:** 'Keine Rollen in dieser Instanz. Bitte zuerst Rollen synchronisieren.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>Keine Rollen in dieser Instanz. Bitte zuerst Rollen synchronisieren.</p>`

## `src/pages/admin/PermissionMatrix.tsx`:114

- **Text:** 'Rollen bearbeiten'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      title="Rollen bearbeiten"`

## `src/pages/admin/PermissionMatrix.tsx`:123

- **Text:** 'Aus Instanz entfernen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      title="Aus Instanz entfernen"`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:5

- **Text:** 'Invite to mandate'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * 1. Choose invite type: "Invite to mandate" OR "Invite to feature instance"`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:5

- **Text:** 'Invite to feature instance'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * 1. Choose invite type: "Invite to mandate" OR "Invite to feature instance"`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:67

- **Text:** '1px solid var(--border-color, #C5D9E8)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  border: '1px solid var(--border-color, #C5D9E8)',`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:172

- **Text:** 'Bitte mindestens eine E-Mail-Adresse oder einen Benutzernamen angeben.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Bitte mindestens eine E-Mail-Adresse oder einen Benutzernamen angeben.');`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:178

- **Text:** 'Diese E-Mail ist bereits in der Liste'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Diese E-Mail ist bereits in der Liste');`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:182

- **Text:** 'Dieser Benutzername ist bereits in der Liste'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Dieser Benutzername ist bereits in der Liste');`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:197

- **Text:** 'Bitte wählen Sie einen Benutzer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Bitte wählen Sie einen Benutzer');`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:204

- **Text:** 'Dieser Benutzer ist bereits in der Liste'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Dieser Benutzer ist bereits in der Liste');`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:234

- **Text:** 'Bitte wählen Sie eine Feature-Instanz aus.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Bitte wählen Sie eine Feature-Instanz aus.');`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:273

- **Text:** 'Fehler beim Versand'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err?.response?.data?.detail || err?.message || 'Fehler beim Versand');`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:295

- **Text:** 'Mandant & Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    ? ['Art', 'Mandant & Instanz', 'Einladungen', 'Zusammenfassung']`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:356

- **Text:** 'Wohin möchten Sie einladen?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 style={{ margin: '0 0 16px 0', fontSize: '16px' }}>Wohin möchten Sie einladen?</h3>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:397

- **Text:** 'Mandant auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {inviteType === 'mandate' ? 'Mandant auswählen' : 'Mandant und Feature-Instanz auswählen'}`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:397

- **Text:** 'Mandant und Feature-Instanz auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {inviteType === 'mandate' ? 'Mandant auswählen' : 'Mandant und Feature-Instanz auswählen'}`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:400

- **Text:** 'Mandant *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label className={styles.formLabel}>Mandant *</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:411

- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="">-- Mandant wählen --</option>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:419

- **Text:** 'Feature-Instanz *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label className={styles.formLabel}>Feature-Instanz *</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:421

- **Text:** 'Keine Feature-Instanzen für diesen Mandanten vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p style={{ fontSize: '13px', color: 'var(--text-secondary)' }}>Keine Feature-Instanzen für diesen Mandanten vorhanden.</p>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:432

- **Text:** '-- Feature-Instanz wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="">-- Feature-Instanz wählen --</option>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:435

- **Text:** ' (deaktiviert)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    const suffix = inst.enabled === false ? ' (deaktiviert)' : '';`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:445

- **Text:** 'setStep(1)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <button className={styles.secondaryButton} onClick={() => setStep(1)}>&larr; Zurück</button>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:461

- **Text:** 'Einladungen hinzufügen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h3 style={{ margin: '0 0 8px 0', fontSize: '16px' }}>Einladungen hinzufügen</h3>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:487

- **Text:** 'E-Mail (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <label className={styles.formLabel}>E-Mail (optional)</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:493

- **Text:** 'beispiel@firma.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    placeholder="beispiel@firma.com"`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:497

- **Text:** 'Benutzername (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <label className={styles.formLabel}>Benutzername (optional)</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:504

- **Text:** 'z. B. vorname.nachname'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    placeholder="z. B. vorname.nachname"`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:512

- **Text:** "Rolle{inviteType === 'featureInstance' ? ' (pro Instanz)' : ''} *"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <label className={styles.formLabel}>Rolle{inviteType === 'featureInstance' ? ' (pro Instanz)' : ''} *</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:512

- **Text:** ' (pro Instanz)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    <label className={styles.formLabel}>Rolle{inviteType === 'featureInstance' ? ' (pro Instanz)' : ''} *</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:552

- **Text:** 'Bestehender Benutzer *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <label className={styles.formLabel}>Bestehender Benutzer *</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:559

- **Text:** '-- Benutzer wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <option value="">-- Benutzer wählen --</option>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:566

- **Text:** 'Keine weiteren Benutzer verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  {availableExistingUsers.length === 0 && <p style={{ fontSize: '12px', color: 'var(--text-secondary)', marginTop: '4px' }}>Keine weiteren Benutzer verfügbar.</p>}`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:570

- **Text:** 'Rolle *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <label className={styles.formLabel}>Rolle *</label>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:644

- **Text:** 'Noch keine Einladungen hinzugefügt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <p style={{ color: 'var(--text-secondary)', fontSize: '13px', marginBottom: '16px' }}>Noch keine Einladungen hinzugefügt.</p>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:649

- **Text:** 'setStep(2)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <button className={styles.secondaryButton} onClick={() => setStep(2)}>&larr; Zurück</button>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:666

- **Text:** 'Einladung zum Mandanten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <strong>Art:</strong> {inviteType === 'mandate' ? 'Einladung zum Mandanten' : 'Einladung zur Feature-Instanz'}`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:666

- **Text:** 'Einladung zur Feature-Instanz'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <strong>Art:</strong> {inviteType === 'mandate' ? 'Einladung zum Mandanten' : 'Einladung zur Feature-Instanz'}`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:677

- **Text:** 'Einladungen ({invitees.length}):'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <strong>Einladungen ({invitees.length}):</strong>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:689

- **Text:** 'setStep(3)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <button className={styles.secondaryButton} onClick={() => setStep(3)}>&larr; Zurück</button>`

## `src/pages/admin/wizards/AdminInvitationWizardPage.tsx`:695

- **Text:** 'Wird versendet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {isLoading ? 'Wird versendet...' : `${invitees.length} Einladungen versenden`}`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:84

- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  const [instanceForm, setInstanceForm] = useState({ label: '', enabled: true });`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:136

- **Text:** 'Fehler beim Laden der Mandanten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError('Fehler beim Laden der Mandanten');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:230

- **Text:** 'Mandant erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Mandant erstellt',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:231

- **Text:** 'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Abrechnungseinstellungen konnten nicht gespeichert werden. Bitte unter Administration → Abrechnung nachpflegen.',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:237

- **Text:** 'Mandant inkl. Abrechnung gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Erstellt', 'Mandant inkl. Abrechnung gespeichert');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:243

- **Text:** 'Fehler beim Erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(e?.response?.data?.detail || e?.message || 'Fehler beim Erstellen');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:267

- **Text:** 'Hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Hinzugefügt', `${ok} Benutzer zum Mandanten hinzugefügt`);`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:272

- **Text:** 'Teilweise fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Teilweise fehlgeschlagen',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:287

- **Text:** 'Benutzer aus Mandant entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Entfernt', 'Benutzer aus Mandant entfernt');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:290

- **Text:** 'Fehler beim Entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(result.error || 'Fehler beim Entfernen');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:306

- **Text:** ''
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        setInstanceForm({ label: '', enabled: true });`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:307

- **Text:** 'Instance erstellt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Erstellt', 'Instance erstellt');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:310

- **Text:** 'Fehler beim Erstellen (Limit erreicht?)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError(result.error || 'Fehler beim Erstellen (Limit erreicht?)');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:321

- **Text:** 'Gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Gelöscht', 'Instance gelöscht');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:321

- **Text:** 'Instance gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Gelöscht', 'Instance gelöscht');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:324

- **Text:** 'Fehler beim Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(result.error || 'Fehler beim Löschen');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:346

- **Text:** 'Hinzugefügt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Hinzugefügt', `${ok} Benutzer zur Feature-Instanz hinzugefügt`);`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:351

- **Text:** 'Teilweise fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Teilweise fehlgeschlagen',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:368

- **Text:** 'Rollen aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Gespeichert', 'Rollen aktualisiert');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:373

- **Text:** 'Rollen konnten nicht gespeichert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', r.error || 'Rollen konnten nicht gespeichert werden');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:389

- **Text:** 'Rollen aktualisiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Gespeichert', 'Rollen aktualisiert');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:394

- **Text:** 'Rollen konnten nicht gespeichert werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', r.error || 'Rollen konnten nicht gespeichert werden');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:403

- **Text:** 'Benutzer aus Feature-Instanz entfernt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Entfernt', 'Benutzer aus Feature-Instanz entfernt');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:406

- **Text:** 'Fehler beim Entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(result.error || 'Fehler beim Entfernen');`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:483

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        border: '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:535

- **Text:** 'Benutzer * (mehrfach möglich)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <label className={styles.formLabel}>Benutzer * (mehrfach möglich)</label>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:540

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:576

- **Text:** 'Rollen (für alle ausgewählten Benutzer)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label className={styles.formLabel}>Rollen (für alle ausgewählten Benutzer)</label>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:604

- **Text:** 'Hinzufügen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {isLoading ? 'Hinzufügen...' : 'Hinzufügen'}`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:604

- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {isLoading ? 'Hinzufügen...' : 'Hinzufügen'}`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:633

- **Text:** 'background 0.2s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            transition: 'background 0.2s',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:657

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    border: '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:671

- **Text:** 'Schritt-für-Schritt Wizard zur Mandanten-Konfiguration'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Schritt-für-Schritt Wizard zur Mandanten-Konfiguration</p>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:679

- **Text:** '1px solid var(--danger-color, #fecaca)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          border: '1px solid var(--danger-color, #fecaca)',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:691

- **Text:** 'Mandant auswählen oder erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 style={{ fontSize: '15px', fontWeight: 600, marginBottom: '16px', marginTop: 0 }}>Mandant auswählen oder erstellen</h3>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:726

- **Text:** 'Formular wird geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Formular wird geladen...</span>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:734

- **Text:** 'Mandant erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText={isLoading ? 'Erstellen...' : 'Mandant erstellen'}`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:786

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              border: '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:836

- **Text:** 'setStep(1)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <button className={styles.secondaryButton} onClick={() => setStep(1)}>&larr; Zurück</button>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:858

- **Text:** 'Feature filtern:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label className={styles.formLabel}>Feature filtern:</label>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:864

- **Text:** 'Alle Features'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="">Alle Features</option>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:875

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:914

- **Text:** 'Feature *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <label className={styles.formLabel}>Feature *</label>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:921

- **Text:** '-- Feature wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="">-- Feature wählen --</option>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:933

- **Text:** 'z.B. Kunde A'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder="z.B. Kunde A"`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:954

- **Text:** 'setStep(2)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <button className={styles.secondaryButton} onClick={() => setStep(2)}>&larr; Zurück</button>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:1003

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              border: '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:1058

- **Text:** 'setStep(3)}>&larr; Zurück'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <button className={styles.secondaryButton} onClick={() => setStep(3)}>&larr; Zurück</button>`

## `src/pages/admin/wizards/AdminMandateWizardPage.tsx`:1060

- **Text:** 'Konfiguration abgeschlossen!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              showSuccess('Fertig', 'Konfiguration abgeschlossen!');`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:36

- **Text:** 'Instanz erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { id: 'create', title: 'Instanz erstellen' },`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:38

- **Text:** 'Benutzer (optional)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  { id: 'users', title: 'Benutzer (optional)' },`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:74

- **Text:** 'Mandant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { name: 'mandateId', label: 'Mandant', type: 'enum' as const, required: true, options: mandateOptions },`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:75

- **Text:** 'Feature'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { name: 'featureCode', label: 'Feature', type: 'enum' as const, required: true, options: featureOptions },`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:76

- **Text:** 'Bezeichnung'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { name: 'label', label: 'Bezeichnung', type: 'string' as const, required: true, editable: true },`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:77

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      { name: 'enabled', label: 'Aktiv', type: 'boolean' as const, required: false, editable: true },`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:104

- **Text:** 'Instanz konnte nicht erstellt werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', result.error || 'Instanz konnte nicht erstellt werden');`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:152

- **Text:** 'Feature-Instanz wurde erstellt und Benutzer zugewiesen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Fertig', 'Feature-Instanz wurde erstellt und Benutzer zugewiesen.');`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:155

- **Text:** 'Einige Benutzer konnten nicht zugewiesen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', 'Einige Benutzer konnten nicht zugewiesen werden.');`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:175

- **Text:** 'Neue Feature-Instanz'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h2 className={styles.modalTitle}>Neue Feature-Instanz</h2>`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:176

- **Text:** 'Schließen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <button type="button" className={styles.modalClose} onClick={onClose} aria-label="Schließen">`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:243

- **Text:** 'Keine Mandanten-Benutzer vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p className={wizardStyles.stepText}>Keine Mandanten-Benutzer vorhanden.</p>`

## `src/pages/admin/wizards/FeatureInstanceWizard.tsx`:261

- **Text:** '— Keine Rolle —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                          <option value="">— Keine Rolle —</option>`

## `src/pages/basedata/ConnectionsPage.tsx`:237

- **Text:** 'Fehler beim Laden der Verbindungen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Verbindungen: {error}</p>`

## `src/pages/basedata/ConnectionsPage.tsx`:253

- **Text:** ', ClickUp'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {isClickupConnectionUiEnabled ? ', ClickUp' : ''})`

## `src/pages/basedata/ConnectionsPage.tsx`:261

- **Text:** 'Microsoft Admin Consent — erteilt der App die nötigen Berechtigungen für den gesamten Tenant'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Microsoft Admin Consent — erteilt der App die nötigen Berechtigungen für den gesamten Tenant"`

## `src/pages/basedata/ConnectionsPage.tsx`:294

- **Text:** 'ClickUp-Konto verbinden'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="ClickUp-Konto verbinden"`

## `src/pages/basedata/ConnectionsPage.tsx`:324

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Löschen',`

## `src/pages/basedata/ConnectionsPage.tsx`:343

- **Text:** 'Token erneuern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Token erneuern',`

## `src/pages/basedata/ConnectionsPage.tsx`:357

- **Text:** 'Keine Verbindungen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Verbindungen gefunden"`

## `src/pages/basedata/ConnectionsPage.tsx`:366

- **Text:** 'Verbindung bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Verbindung bearbeiten</h2>`

## `src/pages/basedata/ConnectionsPage.tsx`:378

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/basedata/FilesPage.tsx`:148

- **Text:** 'Created By'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Created By',`

## `src/pages/basedata/FilesPage.tsx`:218

- **Text:** 'Upload erfolgreich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          'Upload erfolgreich',`

## `src/pages/basedata/FilesPage.tsx`:222

- **Text:** 'Upload fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Upload fehlgeschlagen', `${errorCount} Datei(en) konnten nicht hochgeladen werden`);`

## `src/pages/basedata/FilesPage.tsx`:228

- **Text:** 'Neuer Ordnername:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    const name = await promptInput('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`

## `src/pages/basedata/FilesPage.tsx`:228

- **Text:** 'Neuer Ordner'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    const name = await promptInput('Neuer Ordnername:', { title: 'Neuer Ordner', placeholder: 'Ordnername' });`

## `src/pages/basedata/FilesPage.tsx`:303

- **Text:** 'Fehler beim Laden der Dateien: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Dateien: {error}</p>`

## `src/pages/basedata/FilesPage.tsx`:344

- **Text:** '1px solid var(--color-border, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderRight: '1px solid var(--color-border, #e0e0e0)',`

## `src/pages/basedata/FilesPage.tsx`:385

- **Text:** 'background 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            transition: isDragging ? 'none' : 'background 0.15s',`

## `src/pages/basedata/FilesPage.tsx`:398

- **Text:** '1px solid var(--color-border, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            borderBottom: '1px solid var(--color-border, #e0e0e0)',`

## `src/pages/basedata/FilesPage.tsx`:406

- **Text:** 'Datei hochladen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                <FaUpload /> {uploadingFile ? 'Uploading...' : 'Datei hochladen'}`

## `src/pages/basedata/FilesPage.tsx`:438

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    title: 'Löschen',`

## `src/pages/basedata/FilesPage.tsx`:468

- **Text:** 'Keine Dateien gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                emptyMessage="Keine Dateien gefunden"`

## `src/pages/basedata/FilesPage.tsx`:479

- **Text:** 'Datei bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Datei bearbeiten</h2>`

## `src/pages/basedata/FilesPage.tsx`:486

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/basedata/PromptsPage.tsx`:77

- **Text:** 'Created By'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Created By',`

## `src/pages/basedata/PromptsPage.tsx`:161

- **Text:** 'Fehler beim Laden der Prompts: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Prompts: {error}</p>`

## `src/pages/basedata/PromptsPage.tsx`:175

- **Text:** 'Prompt-Templates verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Prompt-Templates verwalten</p>`

## `src/pages/basedata/PromptsPage.tsx`:221

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Löschen',`

## `src/pages/basedata/PromptsPage.tsx`:234

- **Text:** 'Keine Prompts gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          emptyMessage="Keine Prompts gefunden"`

## `src/pages/basedata/PromptsPage.tsx`:243

- **Text:** 'Neuer Prompt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neuer Prompt</h2>`

## `src/pages/basedata/PromptsPage.tsx`:255

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/basedata/PromptsPage.tsx`:277

- **Text:** 'Prompt bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Prompt bearbeiten</h2>`

## `src/pages/basedata/PromptsPage.tsx`:289

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:11

- **Text:** 'Mandant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'mandateName', label: 'Mandant', type: 'text', sortable: true, filterable: true, width: 180 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:12

- **Text:** 'Plan'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'planTitle', label: 'Plan', type: 'text', sortable: true, filterable: true, width: 180 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:13

- **Text:** 'Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'status', label: 'Status', type: 'text', sortable: true, filterable: true, width: 110 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:14

- **Text:** 'Wiederkehrend'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'recurring', label: 'Wiederkehrend', type: 'boolean', sortable: true, filterable: true, width: 120 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:15

- **Text:** 'User'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'activeUsers', label: 'User', type: 'number', sortable: true, width: 70 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:16

- **Text:** 'Instanzen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'activeInstances', label: 'Instanzen', type: 'number', sortable: true, width: 90 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:17

- **Text:** 'Revenue/Mt (CHF)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'monthlyRevenueCHF', label: 'Revenue/Mt (CHF)', type: 'number', sortable: true, width: 140 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:18

- **Text:** 'Gestartet'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'startedAt', label: 'Gestartet', type: 'date', sortable: true, filterable: true, width: 130 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:19

- **Text:** 'Periodenende'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'currentPeriodEnd', label: 'Periodenende', type: 'date', sortable: true, filterable: true, width: 130 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:20

- **Text:** 'Preis/User'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'snapshotPricePerUserCHF', label: 'Preis/User', type: 'number', sortable: true, width: 100 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:21

- **Text:** 'Preis/Instanz'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'snapshotPricePerInstanceCHF', label: 'Preis/Instanz', type: 'number', sortable: true, width: 110 },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:31

- **Text:** 'Sofort kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      { confirmLabel: 'Sofort kündigen', cancelLabel: 'Abbrechen', variant: 'danger' },`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:46

- **Text:** 'Subscription-Übersicht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h1>Subscription-Übersicht</h1>`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:47

- **Text:** 'Alle Abonnements aller Mandanten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.subtitle}>Alle Abonnements aller Mandanten</p>`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:63

- **Text:** 'Sofort kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Sofort kündigen',`

## `src/pages/billing/AdminSubscriptionsPage.tsx`:69

- **Text:** 'Keine Subscriptions vorhanden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          emptyMessage="Keine Subscriptions vorhanden."`

## `src/pages/billing/BillingAdmin.tsx`:67

- **Text:** '-- Mandant wählen --'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <option value="">-- Mandant wählen --</option>`

## `src/pages/billing/BillingAdmin.tsx`:119

- **Text:** 'Einstellungen gespeichert!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setMessage({ type: 'success', text: 'Einstellungen gespeichert!' });`

## `src/pages/billing/BillingAdmin.tsx`:121

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setMessage({ type: 'error', text: err.message || 'Fehler beim Speichern' });`

## `src/pages/billing/BillingAdmin.tsx`:182

- **Text:** 'Betrag pro Nachladung (CHF)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label>Betrag pro Nachladung (CHF)</label>`

## `src/pages/billing/BillingAdmin.tsx`:384

- **Text:** 'Betrag muss positiv sein'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setLocalMsg('Betrag muss positiv sein');`

## `src/pages/billing/BillingAdmin.tsx`:421

- **Text:** 'Betrag (CHF)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label>Betrag (CHF)</label>`

## `src/pages/billing/BillingAdmin.tsx`:427

- **Text:** 'z.B. 50'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="z.B. 50"`

## `src/pages/billing/BillingAdmin.tsx`:484

- **Text:** 'Mandant nicht ausgewählt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (!selectedMandateId) throw new Error('Mandant nicht ausgewählt');`

## `src/pages/billing/BillingAdmin.tsx`:486

- **Text:** 'Gutschrift konnte nicht erstellt werden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (!result) throw new Error('Gutschrift konnte nicht erstellt werden');`

## `src/pages/billing/BillingAdmin.tsx`:650

- **Text:** '1px solid var(--color-border, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            borderBottom: '1px solid var(--color-border, #333)',`

## `src/pages/billing/BillingDashboard.tsx`:67

- **Text:** 'Lade Statistiken...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.loadingPlaceholder}>Lade Statistiken...</div>;`

## `src/pages/billing/BillingDashboard.tsx`:71

- **Text:** 'Keine Statistiken verfügbar'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.noData}>Keine Statistiken verfügbar</div>;`

## `src/pages/billing/BillingDashboard.tsx`:85

- **Text:** 'Kosten nach Anbieter'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h4>Kosten nach Anbieter</h4>`

## `src/pages/billing/BillingDashboard.tsx`:87

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Daten</div>`

## `src/pages/billing/BillingDashboard.tsx`:107

- **Text:** 'Kosten nach Modell'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h4>Kosten nach Modell</h4>`

## `src/pages/billing/BillingDashboard.tsx`:109

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Daten</div>`

## `src/pages/billing/BillingDashboard.tsx`:129

- **Text:** 'Kosten nach Feature'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h4>Kosten nach Feature</h4>`

## `src/pages/billing/BillingDashboard.tsx`:131

- **Text:** 'Keine Daten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Daten</div>`

## `src/pages/billing/BillingDashboard.tsx`:180

- **Text:** 'Januar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 1, label: 'Januar' },`

## `src/pages/billing/BillingDashboard.tsx`:181

- **Text:** 'Februar'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 2, label: 'Februar' },`

## `src/pages/billing/BillingDashboard.tsx`:182

- **Text:** 'März'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 3, label: 'März' },`

## `src/pages/billing/BillingDashboard.tsx`:183

- **Text:** 'April'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 4, label: 'April' },`

## `src/pages/billing/BillingDashboard.tsx`:184

- **Text:** 'Mai'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 5, label: 'Mai' },`

## `src/pages/billing/BillingDashboard.tsx`:185

- **Text:** 'Juni'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 6, label: 'Juni' },`

## `src/pages/billing/BillingDashboard.tsx`:186

- **Text:** 'Juli'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 7, label: 'Juli' },`

## `src/pages/billing/BillingDashboard.tsx`:187

- **Text:** 'August'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 8, label: 'August' },`

## `src/pages/billing/BillingDashboard.tsx`:188

- **Text:** 'September'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 9, label: 'September' },`

## `src/pages/billing/BillingDashboard.tsx`:189

- **Text:** 'Oktober'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 10, label: 'Oktober' },`

## `src/pages/billing/BillingDashboard.tsx`:190

- **Text:** 'November'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 11, label: 'November' },`

## `src/pages/billing/BillingDashboard.tsx`:191

- **Text:** 'Dezember'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { value: 12, label: 'Dezember' },`

## `src/pages/billing/BillingDashboard.tsx`:198

- **Text:** 'Übersicht über Guthaben und Nutzung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.subtitle}>Übersicht über Guthaben und Nutzung</p>`

## `src/pages/billing/BillingDashboard.tsx`:207

- **Text:** 'Lade Guthaben...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.loadingPlaceholder}>Lade Guthaben...</div>`

## `src/pages/billing/BillingDashboard.tsx`:209

- **Text:** 'Keine Abrechnungskonten vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Abrechnungskonten vorhanden</div>`

## `src/pages/billing/BillingDataView.tsx`:5

- **Text:** 'Übersicht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * - Tab "Übersicht": KPI grid with cost, balance, storage metrics`

## `src/pages/billing/BillingDataView.tsx`:90

- **Text:** '1px solid var(--color-border, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      borderBottom: '1px solid var(--color-border, #333)',`

## `src/pages/billing/BillingDataView.tsx`:133

- **Text:** '{n} Transaktionen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          subtitle: tr('{n} Transaktionen', { n: String(viewStats.transactionCount) }),`

## `src/pages/billing/BillingDataView.tsx`:138

- **Text:** 'Top: {name}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          subtitle: topProvider ? tr('Top: {name}', { name: topProvider[0] }) : tr('Keine Nutzung'),`

## `src/pages/billing/BillingDataView.tsx`:138

- **Text:** 'Keine Nutzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          subtitle: topProvider ? tr('Top: {name}', { name: topProvider[0] }) : tr('Keine Nutzung'),`

## `src/pages/billing/BillingDataView.tsx`:143

- **Text:** 'Top: {name}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          subtitle: topModel ? tr('Top: {name}', { name: topModel[0] }) : tr('Keine Nutzung'),`

## `src/pages/billing/BillingDataView.tsx`:143

- **Text:** 'Keine Nutzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          subtitle: topModel ? tr('Top: {name}', { name: topModel[0] }) : tr('Keine Nutzung'),`

## `src/pages/billing/BillingDataView.tsx`:148

- **Text:** 'Top: {name}'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          subtitle: topFeature ? tr('Top: {name}', { name: topFeature[0] }) : tr('Keine Nutzung'),`

## `src/pages/billing/BillingDataView.tsx`:148

- **Text:** 'Keine Nutzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          subtitle: topFeature ? tr('Top: {name}', { name: topFeature[0] }) : tr('Keine Nutzung'),`

## `src/pages/billing/BillingDataView.tsx`:179

- **Text:** '{n} Transaktionen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        { label: tr('Gesamtkosten'), value: _formatCurrency(viewStats.totalCost), subtitle: tr('{n} Transaktionen', { n: String(viewStats.transactionCount) }) },`

## `src/pages/billing/BillingDataView.tsx`:180

- **Text:** 'pro Transaktion'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        { label: tr('Durchschnitt'), value: _formatCurrency(avgCost), subtitle: tr('pro Transaktion') },`

## `src/pages/billing/BillingDataView.tsx`:196

- **Text:** 'Kosten nach Anbieter'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      title: tr('Kosten nach Anbieter'),`

## `src/pages/billing/BillingDataView.tsx`:204

- **Text:** 'Kosten nach Modell'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      title: tr('Kosten nach Modell'),`

## `src/pages/billing/BillingDataView.tsx`:212

- **Text:** 'Kosten nach Feature'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      title: tr('Kosten nach Feature'),`

## `src/pages/billing/BillingDataView.tsx`:220

- **Text:** 'Kosten nach Mandant'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      title: tr('Kosten nach Mandant'),`

## `src/pages/billing/BillingDataView.tsx`:277

- **Text:** 'Zahlung erfolgreich. Guthaben wurde verbucht.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setCheckoutMessage({ type: 'success', text: 'Zahlung erfolgreich. Guthaben wurde verbucht.' });`

## `src/pages/billing/BillingDataView.tsx`:523

- **Text:** 'Nutzung, Diagramme und Transaktionen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.subtitle}>Nutzung, Diagramme und Transaktionen</p>`

## `src/pages/billing/BillingDataView.tsx`:586

- **Text:** '1px solid var(--border-color, #333)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              border: '1px solid var(--border-color, #333)',`

## `src/pages/billing/BillingMandateView.tsx`:47

- **Text:** 'Anzahl Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <th>Anzahl Benutzer</th>`

## `src/pages/billing/BillingMandateView.tsx`:48

- **Text:** 'Warnschwelle (%)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <th>Warnschwelle (%)</th>`

## `src/pages/billing/BillingMandateView.tsx`:217

- **Text:** 'Guthaben und Transaktionen pro Mandant'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.subtitle}>Guthaben und Transaktionen pro Mandant</p>`

## `src/pages/billing/BillingMandateView.tsx`:228

- **Text:** 'Lade Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.loadingPlaceholder}>Lade Daten...</div>`

## `src/pages/billing/BillingMandateView.tsx`:230

- **Text:** 'Keine Mandanten mit Billing-Settings vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Mandanten mit Billing-Settings vorhanden</div>`

## `src/pages/billing/BillingMandateView.tsx`:253

- **Text:** 'Lade Transaktionen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.loadingPlaceholder}>Lade Transaktionen...</div>`

## `src/pages/billing/BillingMandateView.tsx`:255

- **Text:** 'Keine Transaktionen vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Transaktionen vorhanden</div>`

## `src/pages/billing/BillingMandateView.tsx`:267

- **Text:** 'Mehr laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {loading ? 'Laden...' : 'Mehr laden'}`

## `src/pages/billing/BillingNav.tsx`:27

- **Text:** '1px solid var(--color-border)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      borderBottom: '1px solid var(--color-border)',`

## `src/pages/billing/BillingTransactions.tsx`:97

- **Text:** 'Übersicht aller Kontobewegungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.subtitle}>Übersicht aller Kontobewegungen</p>`

## `src/pages/billing/BillingTransactions.tsx`:104

- **Text:** 'Lade Transaktionen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.loadingPlaceholder}>Lade Transaktionen...</div>`

## `src/pages/billing/BillingTransactions.tsx`:106

- **Text:** 'Keine Transaktionen vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Transaktionen vorhanden</div>`

## `src/pages/billing/BillingTransactions.tsx`:138

- **Text:** 'Mehr laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {loading ? 'Laden...' : 'Mehr laden'}`

## `src/pages/billing/BillingUserView.tsx`:92

- **Text:** 'Alle Mandanten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">Alle Mandanten</option>`

## `src/pages/billing/BillingUserView.tsx`:107

- **Text:** 'Alle Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="">Alle Benutzer</option>`

## `src/pages/billing/BillingUserView.tsx`:313

- **Text:** 'Guthaben und Transaktionen pro Benutzer'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.subtitle}>Guthaben und Transaktionen pro Benutzer</p>`

## `src/pages/billing/BillingUserView.tsx`:322

- **Text:** 'Lade Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.loadingPlaceholder}>Lade Daten...</div>`

## `src/pages/billing/BillingUserView.tsx`:324

- **Text:** 'Keine Benutzer-Konten vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Benutzer-Konten vorhanden</div>`

## `src/pages/billing/BillingUserView.tsx`:349

- **Text:** 'Lade Transaktionen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.loadingPlaceholder}>Lade Transaktionen...</div>`

## `src/pages/billing/BillingUserView.tsx`:351

- **Text:** 'Keine Transaktionen vorhanden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Transaktionen vorhanden</div>`

## `src/pages/billing/BillingUserView.tsx`:367

- **Text:** 'Mehr laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {loading ? 'Laden...' : 'Mehr laden'}`

## `src/pages/billing/SubscriptionTab.tsx`:44

- **Text:** 'Zahlung ausstehend'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  PENDING: { label: 'Zahlung ausstehend', color: '#f59e0b' },`

## `src/pages/billing/SubscriptionTab.tsx`:45

- **Text:** 'Geplant'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  SCHEDULED: { label: 'Geplant', color: '#8b5cf6' },`

## `src/pages/billing/SubscriptionTab.tsx`:46

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  ACTIVE: { label: 'Aktiv', color: '#22c55e' },`

## `src/pages/billing/SubscriptionTab.tsx`:47

- **Text:** 'Testphase'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  TRIALING: { label: 'Testphase', color: '#38bdf8' },`

## `src/pages/billing/SubscriptionTab.tsx`:48

- **Text:** 'Zahlung ausstehend'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  PAST_DUE: { label: 'Zahlung ausstehend', color: '#f59e0b' },`

## `src/pages/billing/SubscriptionTab.tsx`:49

- **Text:** 'Abgelaufen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  EXPIRED: { label: 'Abgelaufen', color: '#6b7280' },`

## `src/pages/billing/SubscriptionTab.tsx`:54

- **Text:** 'Jährlich'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  YEARLY: 'Jährlich',`

## `src/pages/billing/SubscriptionTab.tsx`:78

- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      border: isCurrent ? '2px solid var(--primary-color, #F25843)' : '1px solid var(--color-border, var(--border-color, #333))',`

## `src/pages/billing/SubscriptionTab.tsx`:78

- **Text:** '1px solid var(--color-border, var(--border-color, #333))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      border: isCurrent ? '2px solid var(--primary-color, #F25843)' : '1px solid var(--color-border, var(--border-color, #333))',`

## `src/pages/billing/SubscriptionTab.tsx`:103

- **Text:** '/ {_periodLabel[plan.billingPeriod] || plan.billingPeriod}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div>User: <strong>{_formatCurrency(plan.pricePerUserCHF)}</strong> / {_periodLabel[plan.billingPeriod] || plan.billingPeriod}</div>`

## `src/pages/billing/SubscriptionTab.tsx`:104

- **Text:** '/ {_periodLabel[plan.billingPeriod] || plan.billingPeriod}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div>Instanz: <strong>{_formatCurrency(plan.pricePerFeatureInstanceCHF)}</strong> / {_periodLabel[plan.billingPeriod] || plan.billingPeriod}</div>`

## `src/pages/billing/SubscriptionTab.tsx`:124

- **Text:** '· max. {plan.maxUsers} User'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          {plan.maxUsers && <> · max. {plan.maxUsers} User</>}`

## `src/pages/billing/SubscriptionTab.tsx`:125

- **Text:** '· max. {plan.maxFeatureInstances} Instanzen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          {plan.maxFeatureInstances && <> · max. {plan.maxFeatureInstances} Instanzen</>}`

## `src/pages/billing/SubscriptionTab.tsx`:129

- **Text:** '· Speicher inkl. {formatBinaryDataSizeFromMebibytes(plan.maxDataVolumeMB)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <> · Speicher inkl. {formatBinaryDataSizeFromMebibytes(plan.maxDataVolumeMB)}</>`

## `src/pages/billing/SubscriptionTab.tsx`:131

- **Text:** '· AI-Budget { _formatCurrency(plan.budgetAiCHF ?? 0)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              {(plan.budgetAiCHF ?? 0) > 0 && <> · AI-Budget { _formatCurrency(plan.budgetAiCHF ?? 0)}</>}`

## `src/pages/billing/SubscriptionTab.tsx`:150

- **Text:** 'Kostenpflichtig abonnieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            : (!isFreePlan && !plan.trialDays) ? 'Kostenpflichtig abonnieren' : 'Auswählen'}`

## `src/pages/billing/SubscriptionTab.tsx`:150

- **Text:** 'Auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            : (!isFreePlan && !plan.trialDays) ? 'Kostenpflichtig abonnieren' : 'Auswählen'}`

## `src/pages/billing/SubscriptionTab.tsx`:180

- **Text:** '1px solid var(--color-border, var(--border-color, #333))'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      border: '1px solid var(--color-border, var(--border-color, #333))',`

## `src/pages/billing/SubscriptionTab.tsx`:198

- **Text:** 'Gekündigt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            }}>Gekündigt</span>`

## `src/pages/billing/SubscriptionTab.tsx`:215

- **Text:** 'Zahlung erfolgreich. Abonnement wird aktiviert — bitte warten...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            ? 'Zahlung erfolgreich. Abonnement wird aktiviert — bitte warten...'`

## `src/pages/billing/SubscriptionTab.tsx`:216

- **Text:** 'Die Zahlung wurde noch nicht abgeschlossen. Sie können den Checkout abbrechen oder erneut starten.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            : 'Die Zahlung wurde noch nicht abgeschlossen. Sie können den Checkout abbrechen oder erneut starten.'}`

## `src/pages/billing/SubscriptionTab.tsx`:235

- **Text:** 'Gestartet: {_formatDate(sub.startedAt)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Gestartet: {_formatDate(sub.startedAt)}</span>`

## `src/pages/billing/SubscriptionTab.tsx`:236

- **Text:** "Periode: {_periodLabel[plan.billingPeriod] || '—'}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          {plan && <span>Periode: {_periodLabel[plan.billingPeriod] || '—'}</span>}`

## `src/pages/billing/SubscriptionTab.tsx`:237

- **Text:** 'Periodenende: {_formatDate(sub.currentPeriodEnd)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          {sub.currentPeriodEnd && <span>Periodenende: {_formatDate(sub.currentPeriodEnd)}</span>}`

## `src/pages/billing/SubscriptionTab.tsx`:238

- **Text:** 'Trial endet: {_formatDate(sub.trialEndsAt)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          {sub.trialEndsAt && <span>Trial endet: {_formatDate(sub.trialEndsAt)}</span>}`

## `src/pages/billing/SubscriptionTab.tsx`:240

- **Text:** 'Läuft aus am: {_formatDate(sub.currentPeriodEnd)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span style={{ color: '#ef4444' }}>Läuft aus am: {_formatDate(sub.currentPeriodEnd)}</span>`

## `src/pages/billing/SubscriptionTab.tsx`:244

- **Text:** 'AI-Budget (inkl.): {_formatCurrency(plan.budgetAiCHF ?? 0)} / Periode'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span>AI-Budget (inkl.): {_formatCurrency(plan.budgetAiCHF ?? 0)} / Periode</span>`

## `src/pages/billing/SubscriptionTab.tsx`:270

- **Text:** 'Wird reaktiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {reactivating ? 'Wird reaktiviert...' : 'Reaktivieren'}`

## `src/pages/billing/SubscriptionTab.tsx`:285

- **Text:** 'Wird gekündigt...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {cancelling ? 'Wird gekündigt...' : 'Kündigen'}`

## `src/pages/billing/SubscriptionTab.tsx`:285

- **Text:** 'Kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {cancelling ? 'Wird gekündigt...' : 'Kündigen'}`

## `src/pages/billing/SubscriptionTab.tsx`:300

- **Text:** 'Wird abgebrochen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {cancelling ? 'Wird abgebrochen...' : 'Abbrechen'}`

## `src/pages/billing/SubscriptionTab.tsx`:343

- **Text:** 'Zahlung erfolgreich — Abonnement wird aktiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setCheckoutMessage({ type: 'success', text: 'Zahlung erfolgreich — Abonnement wird aktiviert...' });`

## `src/pages/billing/SubscriptionTab.tsx`:357

- **Text:** 'Abonnement wurde aktiviert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              setCheckoutMessage({ type: 'success', text: 'Abonnement wurde aktiviert.' });`

## `src/pages/billing/SubscriptionTab.tsx`:370

- **Text:** 'Checkout abgebrochen. Ihr bestehendes Abonnement bleibt aktiv.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setCheckoutMessage({ type: 'info', text: 'Checkout abgebrochen. Ihr bestehendes Abonnement bleibt aktiv.' });`

## `src/pages/billing/SubscriptionTab.tsx`:381

- **Text:** 'Abonnement wurde aktiviert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setCheckoutMessage({ type: 'success', text: 'Abonnement wurde aktiviert.' });`

## `src/pages/billing/SubscriptionTab.tsx`:391

- **Text:** 'Fehler beim Aktivieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionError(err?.response?.data?.detail || err.message || 'Fehler beim Aktivieren');`

## `src/pages/billing/SubscriptionTab.tsx`:402

- **Text:** 'Diesen Vorgang abbrechen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        ? 'Diesen Vorgang abbrechen?'`

## `src/pages/billing/SubscriptionTab.tsx`:403

- **Text:** 'Abonnement kündigen? Es bleibt bis zum Periodenende aktiv.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        : 'Abonnement kündigen? Es bleibt bis zum Periodenende aktiv.',`

## `src/pages/billing/SubscriptionTab.tsx`:405

- **Text:** 'Vorgang abbrechen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        title: isPendingOrScheduled ? 'Vorgang abbrechen' : 'Abonnement kündigen',`

## `src/pages/billing/SubscriptionTab.tsx`:405

- **Text:** 'Abonnement kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        title: isPendingOrScheduled ? 'Vorgang abbrechen' : 'Abonnement kündigen',`

## `src/pages/billing/SubscriptionTab.tsx`:406

- **Text:** 'Ja, abbrechen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        confirmLabel: isPendingOrScheduled ? 'Ja, abbrechen' : 'Kündigen',`

## `src/pages/billing/SubscriptionTab.tsx`:406

- **Text:** 'Kündigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        confirmLabel: isPendingOrScheduled ? 'Ja, abbrechen' : 'Kündigen',`

## `src/pages/billing/SubscriptionTab.tsx`:407

- **Text:** 'Nein, zurück'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        cancelLabel: isPendingOrScheduled ? 'Nein, zurück' : 'Abbrechen',`

## `src/pages/billing/SubscriptionTab.tsx`:430

- **Text:** 'Fehler beim Reaktivieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setActionError(err?.response?.data?.detail || err.message || 'Fehler beim Reaktivieren');`

## `src/pages/billing/SubscriptionTab.tsx`:437

- **Text:** 'Lade Abonnement-Daten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.loadingPlaceholder}>Lade Abonnement-Daten...</div>;`

## `src/pages/billing/SubscriptionTab.tsx`:464

- **Text:** 'Aktuelles Abonnement'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h2 className={styles.sectionTitle}>Aktuelles Abonnement</h2>`

## `src/pages/billing/SubscriptionTab.tsx`:470

- **Text:** 'Zahlung wird verarbeitet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? (justPaid ? 'Zahlung wird verarbeitet' : 'Checkout in Bearbeitung')`

## `src/pages/billing/SubscriptionTab.tsx`:470

- **Text:** 'Checkout in Bearbeitung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? (justPaid ? 'Zahlung wird verarbeitet' : 'Checkout in Bearbeitung')`

## `src/pages/billing/SubscriptionTab.tsx`:471

- **Text:** 'Operatives Abonnement'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              : 'Operatives Abonnement'}`

## `src/pages/billing/SubscriptionTab.tsx`:488

- **Text:** 'Geplanter Nachfolger'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h2 className={styles.sectionTitle}>Geplanter Nachfolger</h2>`

## `src/pages/billing/SubscriptionTab.tsx`:492

- **Text:** 'Startet nach Ablauf des aktuellen Abonnements'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            label="Startet nach Ablauf des aktuellen Abonnements"`

## `src/pages/billing/SubscriptionTab.tsx`:502

- **Text:** 'Verfügbare Pläne'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h2 className={styles.sectionTitle}>Verfügbare Pläne</h2>`

## `src/pages/billing/SubscriptionTab.tsx`:504

- **Text:** 'Keine Pläne verfügbar'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.noData}>Keine Pläne verfügbar</div>`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:83

- **Text:** 'Möchten Sie diese Konversation wirklich löschen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    const ok = await confirm('Möchten Sie diese Konversation wirklich löschen?', {`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:84

- **Text:** 'Konversation löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      title: 'Konversation löschen',`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:85

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      confirmLabel: 'Löschen',`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:108

- **Text:** 'Gerade eben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    if (diffMins < 1) return 'Gerade eben';`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:125

- **Text:** 'Neue Konversation'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    return 'Neue Konversation';`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:137

- **Text:** 'Neue Konversation'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Neue Konversation"`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:146

- **Text:** 'Lade Konversationen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span>Lade Konversationen...</span>`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:158

- **Text:** 'Noch keine Konversationen vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Noch keine Konversationen vorhanden.</p>`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:159

- **Text:** 'Starte eine neue Konversation, um zu beginnen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.emptyHint}>Starte eine neue Konversation, um zu beginnen.</p>`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:179

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Löschen"`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:200

- **Text:** 'Lade Nachrichten...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span>Lade Nachrichten...</span>`

## `src/pages/views/chatbot/ChatbotConversationsView.tsx`:249

- **Text:** 'Nachricht eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Nachricht eingeben..."`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:25

- **Text:** 'Dashboard wird geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.loading}>Dashboard wird geladen...</div>;`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:33

- **Text:** 'Keine Daten verfügbar.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.empty}>Keine Daten verfügbar.</div>;`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:42

- **Text:** 'Tage Streak'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.kpiLabel}>Tage Streak</div>`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:43

- **Text:** 'Rekord: {dashboard.longestStreak}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.kpiSub}>Rekord: {dashboard.longestStreak}</div>`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:68

- **Text:** 'Aktive Coaching-Themen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.sectionTitle}>Aktive Coaching-Themen</h3>`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:71

- **Text:** 'Noch keine Coaching-Themen erstellt.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Noch keine Coaching-Themen erstellt.</p>`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:72

- **Text:** 'Wechsle zum Coaching-Tab, um dein erstes Thema anzulegen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Wechsle zum Coaching-Tab, um dein erstes Thema anzulegen.</p>`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:89

- **Text:** 'Ziele: {ctx.goalProgress}%'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  {ctx.goalProgress != null && <span>Ziele: {ctx.goalProgress}%</span>}`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:125

- **Text:** 'Tipp des Tages'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.sectionTitle}>Tipp des Tages</h3>`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:137

- **Text:** 'Führung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    leadership: 'Führung',`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:140

- **Text:** 'Präsentation'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    presentation: 'Präsentation',`

## `src/pages/views/commcoach/CommcoachDashboardView.tsx`:143

- **Text:** 'Change Mgmt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    changeManagement: 'Change Mgmt',`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:262

- **Text:** 'Seitenleiste einblenden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            title={udbCollapsed ? 'Seitenleiste einblenden' : 'Seitenleiste ausblenden'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:262

- **Text:** 'Seitenleiste ausblenden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            title={udbCollapsed ? 'Seitenleiste einblenden' : 'Seitenleiste ausblenden'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:294

- **Text:** 'Neues Thema'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          title="Neues Thema"`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:305

- **Text:** 'Thema / Titel...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Thema / Titel..."`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:313

- **Text:** 'Beschreibung (optional)'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Beschreibung (optional)"`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:319

- **Text:** 'Führung'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="leadership">Führung</option>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:322

- **Text:** 'Präsentation'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="presentation">Präsentation</option>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:325

- **Text:** 'Change Management'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="changeManagement">Change Management</option>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:329

- **Text:** 'Wird erstellt...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {coach.actionLoading === 'creating' ? 'Wird erstellt...' : 'Erstellen'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:339

- **Text:** 'Willkommen beim Kommunikations-Coach'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3>Willkommen beim Kommunikations-Coach</h3>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:340

- **Text:** 'Erstelle ein Thema, um zu beginnen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p>Erstelle ein Thema, um zu beginnen.</p>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:341

- **Text:** 'setShowNewContext(true)}>Neues Thema erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <button className={styles.btnPrimary} onClick={() => setShowNewContext(true)}>Neues Thema erstellen</button>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:362

- **Text:** 'Wird archiviert...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {coach.actionLoading === 'archiving' ? 'Wird archiviert...' : 'Archivieren'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:387

- **Text:** 'Starte eine neue Coaching-Session zu diesem Thema.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <p>Starte eine neue Coaching-Session zu diesem Thema.</p>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:390

- **Text:** 'Gesprächspartner wählen:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <label className={styles.personaLabel}>Gesprächspartner wählen:</label>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:408

- **Text:** 'Wird gestartet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    ? 'Wird gestartet...'`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:411

- **Text:** 'Session starten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      : 'Session starten'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:418

- **Text:** 'Session aktiv'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span className={styles.sessionLabel}>Session aktiv</span>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:432

- **Text:** 'Stummschaltung aufheben'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      title={voice.muted ? 'Stummschaltung aufheben' : 'Stummschalten'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:434

- **Text:** '\\u{1F507} Stumm'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      {voice.muted ? '\u{1F507} Stumm' : '\u{1F3A4} Ton an'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:434

- **Text:** '\\u{1F3A4} Ton an'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      {voice.muted ? '\u{1F507} Stumm' : '\u{1F3A4} Ton an'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:437

- **Text:** 'Wird abgeschlossen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      {coach.actionLoading === 'completing' ? 'Wird abgeschlossen...' : 'Abschliessen'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:440

- **Text:** 'Wird abgebrochen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      {coach.actionLoading === 'cancelling' ? 'Wird abgebrochen...' : 'Abbrechen'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:469

- **Text:** 'Coach denkt nach'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            <div className={styles.typing}>{coach.streamingStatus || 'Coach denkt nach'}<span className={styles.typingDots}>...</span></div>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:489

- **Text:** 'Tool-Aufrufe vorhanden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        {coach.streamingStatus || (coach.agentToolCalls.length > 0 ? 'Tool-Aufrufe vorhanden' : 'Warte auf Agent')}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:489

- **Text:** 'Warte auf Agent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        {coach.streamingStatus || (coach.agentToolCalls.length > 0 ? 'Tool-Aufrufe vorhanden' : 'Warte auf Agent')}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:513

- **Text:** 'läuft'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                                  {toolCall.success === true ? 'fertig' : toolCall.success === false ? 'fehler' : 'läuft'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:539

- **Text:** 'Stumm – Mikrofon aus'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        ? 'Stumm – Mikrofon aus'`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:541

- **Text:** 'Coach spricht...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                          ? (coach.streamingStatus || 'Coach spricht...')`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:543

- **Text:** 'Coach denkt nach...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            ? (coach.streamingStatus || 'Coach denkt nach...')`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:545

- **Text:** 'Unterbrochen – Mikrofon an'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                              ? 'Unterbrochen – Mikrofon an'`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:547

- **Text:** 'Mikrofon an – bitte sprechen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                                ? (voice.liveTranscript ? 'Spricht...' : 'Mikrofon an – bitte sprechen')`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:548

- **Text:** 'Mikrofon wird gestartet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                                : 'Mikrofon wird gestartet...'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:602

- **Text:** 'Nachricht eingeben...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                      placeholder="Nachricht eingeben..."`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:616

- **Text:** 'Datei anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                          title="Datei anhängen"`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:641

- **Text:** 'Dateien anhängen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                            <div style={{ padding: '6px 12px', fontSize: 11, color: '#999', fontWeight: 600, borderBottom: '1px solid #f0f0f0' }}>Dateien anhängen</div>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:671

- **Text:** 'Datenquellen anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                          title="Datenquellen anhängen"`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:698

- **Text:** 'Persönliche Quellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                                <div style={{ padding: '6px 12px', fontSize: 11, color: '#999', fontWeight: 600, borderBottom: '1px solid #f0f0f0' }}>Persönliche Quellen</div>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:775

- **Text:** 'Neue Aufgabe...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                placeholder="Neue Aufgabe..."`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:781

- **Text:** 'Wird hinzugefügt...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {coach.actionLoading === 'addingTask' ? 'Wird hinzugefügt...' : 'Hinzufügen'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:781

- **Text:** 'Hinzufügen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {coach.actionLoading === 'addingTask' ? 'Wird hinzugefügt...' : 'Hinzufügen'}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:785

- **Text:** 'Noch keine Aufgaben. Der Coach schlägt während Sessions Aufgaben vor.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.emptyTab}>Noch keine Aufgaben. Der Coach schlägt während Sessions Aufgaben vor.</div>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:814

- **Text:** 'Noch keine abgeschlossenen Sessions.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.emptyTab}>Noch keine abgeschlossenen Sessions.</div>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:824

- **Text:** 'Score: {Math.round(s.competenceScore)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      {s.competenceScore != null && <span className={styles.sessionScore}>Score: {Math.round(s.competenceScore)}</span>}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:831

- **Text:** '| Persona'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      {s.personaId && <span> | Persona</span>}`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:849

- **Text:** 'Noch keine Bewertungen. Schliesse eine Session ab, um Scores zu erhalten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.emptyTab}>Noch keine Bewertungen. Schliesse eine Session ab, um Scores zu erhalten.</div>`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:899

- **Text:** 'Coaching (aktiv)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    case 'coaching': return coach.session ? 'Coaching (aktiv)' : 'Coaching';`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:925

- **Text:** 'Einfühlungsvermögen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    empathy: 'Einfühlungsvermögen', clarity: 'Klarheit',`

## `src/pages/views/commcoach/CommcoachDossierView.tsx`:926

- **Text:** 'Zuhören'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    assertiveness: 'Durchsetzung', listening: 'Zuhören',`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:5

- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Voice/language settings are in user-level settings (/settings -> "Stimme & Sprache").`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:45

- **Text:** 'Fehler beim Laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError(err.message || 'Fehler beim Laden');`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:65

- **Text:** 'Einstellungen gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccess('Einstellungen gespeichert');`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:68

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Speichern');`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:75

- **Text:** 'Einstellungen werden geladen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.loading}>Einstellungen werden geladen...</div>;`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:86

- **Text:** 'Stimme & Sprache'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.sectionTitle}>Stimme & Sprache</h3>`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:91

- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          Benutzereinstellungen oeffnen (Tab "Stimme & Sprache")`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:121

- **Text:** 'Sessions gesamt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.statItem}><span className={styles.statValue}>{profile.totalSessions}</span><span className={styles.statLabel}>Sessions gesamt</span></div>`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:122

- **Text:** 'Minuten gesamt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.statItem}><span className={styles.statValue}>{profile.totalMinutes}</span><span className={styles.statLabel}>Minuten gesamt</span></div>`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:123

- **Text:** 'Aktueller Streak'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.statItem}><span className={styles.statValue}>{profile.streakDays}</span><span className={styles.statLabel}>Aktueller Streak</span></div>`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:124

- **Text:** 'Laengster Streak'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.statItem}><span className={styles.statValue}>{profile.longestStreak}</span><span className={styles.statLabel}>Laengster Streak</span></div>`

## `src/pages/views/commcoach/CommcoachSettingsView.tsx`:130

- **Text:** 'Einstellungen speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        {saving ? 'Speichern...' : 'Einstellungen speichern'}`

## `src/pages/views/graphicalEditor/GraphicalEditorPage.tsx`:105

- **Text:** 'Graphical Editor'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h2>Graphical Editor</h2>`

## `src/pages/views/graphicalEditor/GraphicalEditorPage.tsx`:106

- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>Keine Feature-Instanz gefunden.</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:80

- **Text:** 'Fehler beim Laden der Vorlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler beim Laden der Vorlagen');`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:95

- **Text:** 'Vorlage gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Vorlage gelöscht');`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:99

- **Text:** 'Löschen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Löschen fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:112

- **Text:** 'Vorlage als Workflow kopiert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Vorlage als Workflow kopiert');`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:114

- **Text:** 'Kopieren fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Kopieren fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:131

- **Text:** 'Scope-Änderung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Scope-Änderung fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:144

- **Text:** 'Neuer Name:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const newLabel = await promptInput('Neuer Name:', {`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:145

- **Text:** 'Vorlage umbenennen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        title: 'Vorlage umbenennen',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:152

- **Text:** 'Vorlage umbenannt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Vorlage umbenannt');`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:155

- **Text:** 'Umbenennen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Umbenennen fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:170

- **Text:** 'Vorlage'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { key: 'label', label: 'Vorlage', type: 'string', width: 220, sortable: true },`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:173

- **Text:** 'Scope'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Scope',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:180

- **Text:** 'Freigegeben'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Freigegeben',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:192

- **Text:** 'Erstellt von'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Erstellt von',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:198

- **Text:** 'Erstellt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Erstellt',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:208

- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>Keine Feature-Instanz gefunden.</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:259

- **Text:** 'Im Editor öffnen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Im Editor öffnen',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:264

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Löschen',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:278

- **Text:** 'Als Workflow kopieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Als Workflow kopieren',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:285

- **Text:** 'Scope ändern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Scope ändern',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:293

- **Text:** 'Keine Vorlagen gefunden. Erstelle eine Vorlage aus einem bestehenden Workflow.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          emptyMessage="Keine Vorlagen gefunden. Erstelle eine Vorlage aus einem bestehenden Workflow."`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:310

- **Text:** 'translate(-50%, -50%)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                position: 'fixed', top: '50%', left: '50%', transform: 'translate(-50%, -50%)',`

## `src/pages/views/graphicalEditor/GraphicalEditorTemplatesPage.tsx`:316

- **Text:** 'Scope ändern'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h4 style={{ margin: '0 0 8px', fontSize: '0.9rem' }}>Scope ändern</h4>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:71

- **Text:** 'Fehler beim Laden der Workflows'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler beim Laden der Workflows');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:86

- **Text:** 'Workflow gelöscht'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Workflow gelöscht');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:90

- **Text:** 'Löschen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Löschen fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:117

- **Text:** 'Workflow aktiviert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess(next ? 'Workflow aktiviert' : 'Workflow deaktiviert');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:117

- **Text:** 'Workflow deaktiviert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess(next ? 'Workflow aktiviert' : 'Workflow deaktiviert');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:120

- **Text:** 'Status-Update fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Status-Update fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:131

- **Text:** 'Neuer Name:'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const newLabel = await promptInput('Neuer Name:', {`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:132

- **Text:** 'Workflow umbenennen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        title: 'Workflow umbenennen',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:139

- **Text:** 'Workflow umbenannt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Workflow umbenannt');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:142

- **Text:** 'Umbenennen fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Umbenennen fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:162

- **Text:** 'Workflow gestartet und bei Human Task pausiert. Öffne Workflows & Tasks.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            showSuccess('Workflow gestartet und bei Human Task pausiert. Öffne Workflows & Tasks.');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:164

- **Text:** 'Workflow ausgeführt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            showSuccess('Workflow ausgeführt');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:168

- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError(result?.error || 'Ausführung fehlgeschlagen');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:171

- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError(`Fehler: ${e?.message || 'Ausführung fehlgeschlagen'}`);`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:180

- **Text:** 'Workflow'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    { key: 'label', label: 'Workflow', type: 'string', width: 200, sortable: true },`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:183

- **Text:** 'Aktiv'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Aktiv',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:195

- **Text:** 'Läuft'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Läuft',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:207

- **Text:** 'Steht bei'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Steht bei',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:217

- **Text:** 'Erstellt'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Erstellt',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:224

- **Text:** 'Zuletzt gestartet'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Zuletzt gestartet',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:231

- **Text:** 'Läufe'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Läufe',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:247

- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>Keine Feature-Instanz gefunden.</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:256

- **Text:** 'Gespeicherte Workflows'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h1 className={styles.pageTitle}>Gespeicherte Workflows</h1>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:303

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Löschen',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:332

- **Text:** 'Ausführen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              title: 'Ausführen',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsPage.tsx`:340

- **Text:** 'Keine Workflows gefunden. Erstelle einen im Editor.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          emptyMessage="Keine Workflows gefunden. Erstelle einen im Editor."`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:34

- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  'input.upload': 'Upload',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:34

- **Text:** 'Upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  'input.upload': 'Upload',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:36

- **Text:** 'Prüfung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  'input.review': 'Prüfung',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:38

- **Text:** 'Bestätigung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  'input.confirmation': 'Bestätigung',`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:159

- **Text:** 'Workflow gestartet und bei Human Task pausiert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            showSuccess('Workflow gestartet und bei Human Task pausiert.');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:161

- **Text:** 'Workflow gestartet'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            showSuccess('Workflow gestartet');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:165

- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError(result?.error || 'Ausführung fehlgeschlagen');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:169

- **Text:** 'Ausführung fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          (e as { message?: string })?.message ?? 'Ausführung fehlgeschlagen';`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:185

- **Text:** 'Keine Feature-Instanz gefunden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>Keine Feature-Instanz gefunden.</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:194

- **Text:** 'Lade Tasks…'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>Lade Tasks…</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:212

- **Text:** 'Keine offenen Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.empty}>Keine offenen Tasks</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:236

- **Text:** 'Erledigte Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span>Erledigte Tasks</span>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:244

- **Text:** 'Keine erledigten Tasks'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <p className={styles.empty}>Keine erledigten Tasks</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:291

- **Text:** 'Workflows starten'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `      <aside className={styles.startSidebar} aria-label="Workflows starten">`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:292

- **Text:** 'Workflow starten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.startSidebarTitle}>Workflow starten</h3>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:315

- **Text:** 'Workflow ausführen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    title="Workflow ausführen"`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:387

- **Text:** 'Kein Output (z.B. Workflow ohne file.create)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.empty}>Kein Output (z.B. Workflow ohne file.create)</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:444

- **Text:** 'Aufgaben konnten nicht geladen werden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setErr('Aufgaben konnten nicht geladen werden.');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:482

- **Text:** '— Aufgabe wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <option value="">— Aufgabe wählen —</option>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:596

- **Text:** '— Status wählen —'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <option value="">— Status wählen —</option>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:630

- **Text:** 'Formular ausfüllen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Formular ausfüllen"`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:644

- **Text:** 'Wird gesendet…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {submitting ? 'Wird gesendet…' : 'Absenden'}`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:736

- **Text:** 'Bestätigen?'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <p>{(config.question as string) ?? 'Bestätigen?'}</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:743

- **Text:** 'Bestätigen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {typeof config.confirmLabel === 'string' ? config.confirmLabel : 'Bestätigen'}`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:755

- **Text:** 'input.upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      case 'input.upload': {`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:765

- **Text:** 'Nur eine Datei erlaubt.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            setUploadError('Nur eine Datei erlaubt.');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:808

- **Text:** 'Upload fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              const msg = (err as { response?: { data?: { detail?: string } }; message?: string })?.response?.data?.detail ?? (err as Error)?.message ?? 'Upload fehlgeschlagen';`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:822

- **Text:** 'Bitte mindestens eine Datei hochladen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            setUploadError('Bitte mindestens eine Datei hochladen.');`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:851

- **Text:** 'Wird hochgeladen…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <FaUpload /> {uploading ? 'Wird hochgeladen…' : 'Datei(en) auswählen'}`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:851

- **Text:** 'Datei(en) auswählen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <FaUpload /> {uploading ? 'Wird hochgeladen…' : 'Datei(en) auswählen'}`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:867

- **Text:** 'Wird gesendet…'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {submitting ? 'Wird gesendet…' : 'Absenden'}`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:875

- **Text:** 'Review – Content anzeigen + Feedback'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Review – Content anzeigen + Feedback</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:877

- **Text:** 'Feedback...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Feedback..."`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:893

- **Text:** 'Unbekannter Task-Typ: {nodeType}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p>Unbekannter Task-Typ: {nodeType}</p>`

## `src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx`:922

- **Text:** 'Fällig'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <span className={styles.metaLabel}>Fällig</span>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:75

- **Text:** 'Error loading configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Error loading configuration';`

## `src/pages/views/neutralization/NeutralizationView.tsx`:77

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', message);`

## `src/pages/views/neutralization/NeutralizationView.tsx`:94

- **Text:** 'Missing mandate or instance context'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        throw new Error('Missing mandate or instance context');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:105

- **Text:** 'Configuration saved successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Saved', 'Configuration saved successfully.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:112

- **Text:** 'Failed to save configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Failed to save configuration';`

## `src/pages/views/neutralization/NeutralizationView.tsx`:114

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', message);`

## `src/pages/views/neutralization/NeutralizationView.tsx`:123

- **Text:** 'Loading configuration...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.loading}>Loading configuration...</div>;`

## `src/pages/views/neutralization/NeutralizationView.tsx`:128

- **Text:** 'Neutralization Configuration'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <h3 className={styles.sectionTitle}>Neutralization Configuration</h3>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:137

- **Text:** 'Dismiss'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            <button type="button" onClick={dismissError} aria-label="Dismiss">`

## `src/pages/views/neutralization/NeutralizationView.tsx`:144

- **Text:** 'Names to Parse (one per line):'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label htmlFor="names-to-parse">Names to Parse (one per line):</label>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:150

- **Text:** 'Enter names to parse, one per line...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Enter names to parse, one per line..."`

## `src/pages/views/neutralization/NeutralizationView.tsx`:162

- **Text:** 'Save Configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {saving ? 'Saving...' : 'Save Configuration'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:217

- **Text:** 'Failed to load SharePoint sites'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setBrowseError(typeof detail === 'string' ? detail : 'Failed to load SharePoint sites');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:236

- **Text:** 'Failed to load folders'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setBrowseError(typeof detail === 'string' ? detail : 'Failed to load folders');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:321

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'Please enter text to neutralize.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:321

- **Text:** 'Please enter text to neutralize.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'Please enter text to neutralize.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:329

- **Text:** 'Text neutralized successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Done', 'Text neutralized successfully.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:335

- **Text:** 'Failed to neutralize text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Failed to neutralize text';`

## `src/pages/views/neutralization/NeutralizationView.tsx`:336

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', message);`

## `src/pages/views/neutralization/NeutralizationView.tsx`:360

- **Text:** 'File neutralized. Download below or find it in your Files.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Done', 'File neutralized. Download below or find it in your Files.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:364

- **Text:** 'File neutralized. Download or find in Files.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Done', result.neutralized_file_id ? 'File neutralized. Download or find in Files.' : 'File neutralized.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:364

- **Text:** 'File neutralized.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Done', result.neutralized_file_id ? 'File neutralized. Download or find in Files.' : 'File neutralized.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:366

- **Text:** 'No result returned'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        const err = (result.processed_info as { error?: string })?.error || 'No result returned';`

## `src/pages/views/neutralization/NeutralizationView.tsx`:368

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Error', err);`

## `src/pages/views/neutralization/NeutralizationView.tsx`:378

- **Text:** 'Failed to neutralize file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Failed to neutralize file';`

## `src/pages/views/neutralization/NeutralizationView.tsx`:379

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', message);`

## `src/pages/views/neutralization/NeutralizationView.tsx`:392

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Error', 'Failed to download file');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:392

- **Text:** 'Failed to download file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Error', 'Failed to download file');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:409

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Error', 'Failed to download file');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:409

- **Text:** 'Failed to download file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Error', 'Failed to download file');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:423

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    showError('Error', 'No file data available to download. The neutralized file may not have been generated.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:423

- **Text:** 'No file data available to download. The neutralized file may not have been generated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    showError('Error', 'No file data available to download. The neutralized file may not have been generated.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:428

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'No neutralized text to resolve.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:428

- **Text:** 'No neutralized text to resolve.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'No neutralized text to resolve.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:435

- **Text:** 'Text resolved successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Done', 'Text resolved successfully.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:441

- **Text:** 'Failed to resolve text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Failed to resolve text';`

## `src/pages/views/neutralization/NeutralizationView.tsx`:442

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', message);`

## `src/pages/views/neutralization/NeutralizationView.tsx`:455

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'Both SharePoint source and target paths are required.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:455

- **Text:** 'Both SharePoint source and target paths are required.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'Both SharePoint source and target paths are required.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:462

- **Text:** 'SharePoint files processed successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Done', result.message || 'SharePoint files processed successfully.');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:464

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Error', result.message || 'Processing failed');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:464

- **Text:** 'Processing failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Error', result.message || 'Processing failed');`

## `src/pages/views/neutralization/NeutralizationView.tsx`:471

- **Text:** 'Failed to process SharePoint files'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        'Failed to process SharePoint files';`

## `src/pages/views/neutralization/NeutralizationView.tsx`:472

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', message);`

## `src/pages/views/neutralization/NeutralizationView.tsx`:481

- **Text:** 'Manual Text &amp; File Neutralization'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <h3 className={styles.sectionTitle}>Manual Text &amp; File Neutralization</h3>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:488

- **Text:** '1. Upload file to neutralize:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>1. Upload file to neutralize:</label>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:503

- **Text:** 'Upload & Neutralize File'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {neutralizing ? 'Processing...' : 'Upload & Neutralize File'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:511

- **Text:** 'Neutralized File'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                Download {fileResult.fileName || 'Neutralized File'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:523

- **Text:** '2. Or paste text:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label htmlFor="input-text">2. Or paste text:</label>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:529

- **Text:** 'Enter text to neutralize...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Enter text to neutralize..."`

## `src/pages/views/neutralization/NeutralizationView.tsx`:540

- **Text:** 'Neutralize Text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {neutralizing ? 'Neutralizing...' : 'Neutralize Text'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:548

- **Text:** 'Resolve Text'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {resolving ? 'Resolving...' : 'Resolve Text'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:553

- **Text:** '3. Or neutralize SharePoint files:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label>3. Or neutralize SharePoint files:</label>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:563

- **Text:** 'SharePoint source path...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder="SharePoint source path..."`

## `src/pages/views/neutralization/NeutralizationView.tsx`:570

- **Text:** 'Browse SharePoint'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:570

- **Text:** 'Add a Microsoft connection first (Basisdaten → Connections)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:584

- **Text:** 'SharePoint target path...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder="SharePoint target path..."`

## `src/pages/views/neutralization/NeutralizationView.tsx`:591

- **Text:** 'Browse SharePoint'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:591

- **Text:** 'Add a Microsoft connection first (Basisdaten → Connections)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  title={hasMsftConnection ? 'Browse SharePoint' : 'Add a Microsoft connection first (Basisdaten → Connections)'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:606

- **Text:** 'Enter source and target SharePoint paths to enable'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  ? 'Enter source and target SharePoint paths to enable'`

## `src/pages/views/neutralization/NeutralizationView.tsx`:610

- **Text:** 'Neutralize SharePoint Files'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {processingSharepoint ? 'Processing...' : 'Neutralize SharePoint Files'}`

## `src/pages/views/neutralization/NeutralizationView.tsx`:617

- **Text:** 'Neutralized Text:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label htmlFor="neutralized-text">Neutralized Text:</label>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:653

- **Text:** 'Loading sites...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.loading}>Loading sites...</div>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:663

- **Text:** 'Select a site...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <option value="">Select a site...</option>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:678

- **Text:** 'Loading folders...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <div className={styles.loading}>Loading folders...</div>`

## `src/pages/views/neutralization/NeutralizationView.tsx`:740

- **Text:** 'Configuration'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { id: 'config', label: 'Configuration', content: <ConfigTab /> },`

## `src/pages/views/neutralization/NeutralizationView.tsx`:741

- **Text:** 'Playground'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { id: 'playground', label: 'Playground', content: <PlaygroundTab /> },`

## `src/pages/views/realestate/RealEstateDashboardView.tsx`:57

- **Text:** 'Deine Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {instance.userRoles.length === 1 ? 'Deine Rolle' : 'Deine Rollen'}`

## `src/pages/views/realestate/RealEstateDashboardView.tsx`:57

- **Text:** 'Deine Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {instance.userRoles.length === 1 ? 'Deine Rolle' : 'Deine Rollen'}`

## `src/pages/views/realestate/RealEstateInstanceRolesPlaceholder.tsx`:4

- **Text:** 'Rollen & Rechte'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Platzhalter für die View "Rollen & Rechte" bei Real-Estate-Instanzen.`

## `src/pages/views/realestate/RealEstateInstanceRolesPlaceholder.tsx`:16

- **Text:** 'Rollen & Rechte'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <h3>Rollen & Rechte</h3>`

## `src/pages/views/realestate/RealEstateParcelsView.tsx`:134

- **Text:** 'Fehler beim Laden der Parzellen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Parzellen: {error}</p>`

## `src/pages/views/realestate/RealEstateParcelsView.tsx`:147

- **Text:** 'Parzellen verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Parzellen verwalten</p>`

## `src/pages/views/realestate/RealEstateParcelsView.tsx`:190

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      title: 'Löschen',`

## `src/pages/views/realestate/RealEstateParcelsView.tsx`:205

- **Text:** 'Keine Parzellen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Parzellen gefunden"`

## `src/pages/views/realestate/RealEstateParcelsView.tsx`:214

- **Text:** 'Neue Parzelle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isCreateMode ? 'Neue Parzelle' : 'Parzelle bearbeiten'}`

## `src/pages/views/realestate/RealEstateParcelsView.tsx`:214

- **Text:** 'Parzelle bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isCreateMode ? 'Neue Parzelle' : 'Parzelle bearbeiten'}`

## `src/pages/views/realestate/RealEstateParcelsView.tsx`:224

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/views/realestate/RealEstateProjectsView.tsx`:124

- **Text:** 'Fehler beim Laden der Projekte: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Projekte: {error}</p>`

## `src/pages/views/realestate/RealEstateProjectsView.tsx`:137

- **Text:** 'Projekte verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Projekte verwalten</p>`

## `src/pages/views/realestate/RealEstateProjectsView.tsx`:164

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ...(canDelete ? [{ type: 'delete' as const, title: 'Löschen', loading: (row: RealEstateProject) => deletingItems.has(row.id) }] : []),`

## `src/pages/views/realestate/RealEstateProjectsView.tsx`:168

- **Text:** 'Keine Projekte gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Projekte gefunden"`

## `src/pages/views/realestate/RealEstateProjectsView.tsx`:176

- **Text:** 'Neues Projekt'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <h2 className={styles.modalTitle}>{isCreateMode ? 'Neues Projekt' : 'Projekt bearbeiten'}</h2>`

## `src/pages/views/realestate/RealEstateProjectsView.tsx`:176

- **Text:** 'Projekt bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <h2 className={styles.modalTitle}>{isCreateMode ? 'Neues Projekt' : 'Projekt bearbeiten'}</h2>`

## `src/pages/views/realestate/RealEstateProjectsView.tsx`:183

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/views/realestate/pek/PekLocationInput.tsx`:37

- **Text:** 'z.B. Bundesplatz 3'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="z.B. Bundesplatz 3"`

## `src/pages/views/realestate/pek/PekLocationInput.tsx`:38

- **Text:** 'Adresse oder Parzelle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            label="Adresse oder Parzelle"`

## `src/pages/views/realestate/pek/PekMapView.tsx`:33

- **Text:** 'Alle Parzellen anzeigen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span>Alle Parzellen anzeigen</span>`

## `src/pages/views/realestate/pek/PekMapView.tsx`:53

- **Text:** 'Klicken Sie auf die Karte, um einen Standort auszuwählen, oder suchen Sie nach einer Adresse oben.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Klicken Sie auf die Karte, um einen Standort auszuwählen, oder suchen Sie nach einer Adresse oben."`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:12

- **Text:** 'Mein Account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Supports "Mein Account" login with saved credentials and MFA relay.`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:55

- **Text:** 'Fehler beim Laden der Sitzungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Laden der Sitzungen');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:103

- **Text:** 'MFA-Zeitlimit ueberschritten. Bitte erneut versuchen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            setError('MFA-Zeitlimit ueberschritten. Bitte erneut versuchen.');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:139

- **Text:** 'Fehler beim Speichern der Zugangsdaten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError(err.message || 'Fehler beim Speichern der Zugangsdaten');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:171

- **Text:** 'Fehler beim Starten der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Starten der Sitzung');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:191

- **Text:** 'Fehler beim Senden des MFA-Codes'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Senden des MFA-Codes');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:202

- **Text:** 'Fehler beim Loeschen der Zugangsdaten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Loeschen der Zugangsdaten');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:211

- **Text:** 'Fehler beim Stoppen der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Stoppen der Sitzung');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:220

- **Text:** 'Fehler beim Loeschen der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Loeschen der Sitzung');`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:272

- **Text:** 'Code eingeben'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  placeholder="Code eingeben"`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:300

- **Text:** 'Neue Bot-Sitzung starten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.cardTitle}>Neue Bot-Sitzung starten</h3>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:306

- **Text:** 'Teams Meeting-Link *'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label className={styles.label}>Teams Meeting-Link *</label>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:325

- **Text:** 'System-Bot (authentifiziert)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            {_isSysAdmin && <option value="systemBot">System-Bot (authentifiziert)</option>}`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:326

- **Text:** 'Anonymer Gast'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="anonymous">Anonymer Gast</option>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:327

- **Text:** 'Mein Account'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <option value="userAccount">Mein Account</option>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:354

- **Text:** 'Microsoft E-Mail'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <label className={styles.label}>Microsoft E-Mail</label>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:358

- **Text:** 'name@example.com'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    placeholder="name@example.com"`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:369

- **Text:** 'Microsoft-Passwort'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                    placeholder="Microsoft-Passwort"`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:393

- **Text:** 'Bot-Name (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label className={styles.label}>Bot-Name (optional)</label>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:397

- **Text:** 'AI Assistant'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="AI Assistant"`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:405

- **Text:** 'Session-Kontext (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <label className={styles.label}>Session-Kontext (optional)</label>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:408

- **Text:** 'Agenda, Hintergrundinformationen, Dokumente oder andere Informationen fuer den Bot...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            placeholder="Agenda, Hintergrundinformationen, Dokumente oder andere Informationen fuer den Bot..."`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:426

- **Text:** 'Wird gestartet...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {isStarting ? 'Wird gestartet...' : 'Bot ins Meeting senden'}`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:426

- **Text:** 'Bot ins Meeting senden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {isStarting ? 'Wird gestartet...' : 'Bot ins Meeting senden'}`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:435

- **Text:** 'Aktive Sitzungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.sectionTitle}>Aktive Sitzungen</h3>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:448

- **Text:** "Seit: {new Date(session.startedAt).toLocaleTimeString('de-CH')}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  {session.startedAt && <span>Seit: {new Date(session.startedAt).toLocaleTimeString('de-CH')}</span>}`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:451

- **Text:** 'navigate(`/mandates/${mandateId}/${featureCode}/${instanceId}/sessions?sessionId=${session.id}`)}>Live ansehen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <button className={styles.viewButton} onClick={() => navigate(`/mandates/${mandateId}/${featureCode}/${instanceId}/sessions?sessionId=${session.id}`)}>Live ansehen</button>`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:467

- **Text:** 'Lade Sitzungen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          {loading ? 'Lade Sitzungen...' : `Vergangene Sitzungen (${pastSessions.length})`}`

## `src/pages/views/teamsbot/TeamsbotDashboardView.tsx`:470

- **Text:** 'Noch keine vergangenen Sitzungen.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.emptyState}>Noch keine vergangenen Sitzungen.</p>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:87

- **Text:** 'Fehler beim Laden der Sitzung'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Laden der Sitzung');`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:199

- **Text:** 'Unbekannter Fehler'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            const errMsg = errData.message || 'Unbekannter Fehler';`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:280

- **Text:** 'Lade Sitzung...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `  if (loading) return <div className={styles.loading}>Lade Sitzung...</div>;`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:283

- **Text:** 'Keine Sitzungen vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <p>Keine Sitzungen vorhanden.</p>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:287

- **Text:** 'Sitzung nicht gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `  if (!session) return <div className={styles.errorBanner}>Sitzung nicht gefunden</div>;`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:305

- **Text:** '2px solid #4A90D9'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: s.id === sessionId ? '2px solid #4A90D9' : '1px solid #ddd',`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:305

- **Text:** '1px solid #ddd'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: s.id === sessionId ? '2px solid #4A90D9' : '1px solid #ddd',`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:313

- **Text:** ' (aktiv)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {['active', 'joining', 'pending'].includes(s.status) && ' (aktiv)'}`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:314

- **Text:** ' (beendet)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {s.status === 'ended' && ' (beendet)'}`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:331

- **Text:** 'Sitzung beenden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <button className={styles.stopButton} onClick={_handleStop}>Sitzung beenden</button>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:342

- **Text:** 'Transkript ({transcripts.length} Segmente)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h4 className={styles.panelTitle}>Transkript ({transcripts.length} Segmente)</h4>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:358

- **Text:** 'Noch kein Transkript vorhanden.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.emptyState}>Noch kein Transkript vorhanden.</div>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:365

- **Text:** 'Bot-Antworten ({botResponses.length})'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h4 className={styles.panelTitle}>Bot-Antworten ({botResponses.length})</h4>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:376

- **Text:** 'Reasoning: {r.reasoning}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <em>Reasoning: {r.reasoning}</em>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:389

- **Text:** 'Noch keine Bot-Antworten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <div className={styles.emptyState}>Noch keine Bot-Antworten.</div>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:405

- **Text:** 'TTS Delivery Status'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h4 className={styles.panelTitle}>TTS Delivery Status</h4>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:407

- **Text:** 'Noch keine TTS-Events.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <div className={styles.emptyState}>Noch keine TTS-Events.</div>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:414

- **Text:** "ws: {ev.hasWebSocket ? 'yes' : 'no'}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <span>ws: {ev.hasWebSocket ? 'yes' : 'no'}</span>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:459

- **Text:** 'Screenshots laden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {screenshotsLoading ? 'Laden...' : screenshotsLoaded ? 'Aktualisieren' : 'Screenshots laden'}`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:463

- **Text:** 'Keine Screenshots fuer diese Session.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <div className={styles.emptyState}>Keine Screenshots fuer diese Session.</div>`

## `src/pages/views/teamsbot/TeamsbotSessionView.tsx`:474

- **Text:** 'noopener noreferrer'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    rel="noopener noreferrer"`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:8

- **Text:** 'Wavenet A'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `/** Format voice name for display: "de-DE-Wavenet-A" -> "Wavenet A" + gender */`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:60

- **Text:** 'Fehler beim Laden der Konfiguration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Laden der Konfiguration');`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:81

- **Text:** 'Einstellungen gespeichert'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccessMsg('Einstellungen gespeichert');`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:84

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Fehler beim Speichern');`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:117

- **Text:** 'AI Assistant'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const botName = formData.botName || 'AI Assistant';`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:135

- **Text:** 'Stimmtest fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError(result.error || 'Stimmtest fehlgeschlagen');`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:139

- **Text:** 'Stimmtest fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Stimmtest fehlgeschlagen');`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:146

- **Text:** 'Lade Konfiguration...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `  if (loading) return <div className={styles.loading}>Lade Konfiguration...</div>;`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:167

- **Text:** 'AI Assistant'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="AI Assistant"`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:170

- **Text:** 'Nyla Larsson'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              Default-Name fuer den Bot im Meeting. Falls keiner angegeben, wird der Name des System-Bots verwendet (z.B. "Nyla Larsson").`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:186

- **Text:** 'Beschreibe, wie sich der Bot im Meeting verhalten soll...'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Beschreibe, wie sich der Bot im Meeting verhalten soll..."`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:188

- **Text:** 'Instruktionen fuer den AI-Bot: Wann und wie soll er antworten?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span className={styles.hint}>Instruktionen fuer den AI-Bot: Wann und wie soll er antworten?</span>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:198

- **Text:** 'Automatisch - AI entscheidet selbst'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="auto">Automatisch - AI entscheidet selbst</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:199

- **Text:** 'Manuell - Antworten muessen bestaetigt werden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="manual">Manuell - Antworten muessen bestaetigt werden</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:200

- **Text:** 'Nur Transkription - Keine AI-Antworten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="transcribeOnly">Nur Transkription - Keine AI-Antworten</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:211

- **Text:** 'Nur Sprache - Bot antwortet per Audio'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="voice">Nur Sprache - Bot antwortet per Audio</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:212

- **Text:** 'Nur Chat - Bot antwortet per Textnachricht'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="chat">Nur Chat - Bot antwortet per Textnachricht</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:213

- **Text:** 'Sprache + Chat - Bot antwortet per Audio und Text'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="both">Sprache + Chat - Bot antwortet per Audio und Text</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:215

- **Text:** 'Wie soll der Bot im Meeting antworten?'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span className={styles.hint}>Wie soll der Bot im Meeting antworten?</span>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:225

- **Text:** 'Automatisch - System waehlt basierend auf Join-Modus'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="auto">Automatisch - System waehlt basierend auf Join-Modus</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:226

- **Text:** 'Captions - Teams Live-Captions (nur Englisch verfuegbar)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="caption">Captions - Teams Live-Captions (nur Englisch verfuegbar)</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:227

- **Text:** 'Audio-Stream - Echtzeit-Spracherkennung ueber Gateway (alle Sprachen)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <option value="audio">Audio-Stream - Echtzeit-Spracherkennung ueber Gateway (alle Sprachen)</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:252

- **Text:** 'Deutsch (Deutschland)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="de-DE">Deutsch (Deutschland)</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:253

- **Text:** 'English (US)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="en-US">English (US)</option>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:258

- **Text:** 'Sprache fuer Captions und Sprachausgabe ({languages.length} Sprachen verfuegbar)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span className={styles.hint}>Sprache fuer Captions und Sprachausgabe ({languages.length} Sprachen verfuegbar)</span>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:282

- **Text:** 'Stimme testen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                title="Stimme testen"`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:290

- **Text:** 'Lade Stimmen...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {loadingVoices ? 'Lade Stimmen...' : `${voices.length} Stimmen verfuegbar - klicke Test fuer Vorschau`}`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:297

- **Text:** 'Erweiterte Einstellungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h4 className={styles.sectionTitle}>Erweiterte Einstellungen</h4>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:301

- **Text:** 'Analyse-Intervall (Sek.)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label className={styles.label}>Analyse-Intervall (Sek.)</label>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:310

- **Text:** 'Periodisches Analyse-Intervall'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span className={styles.hint}>Periodisches Analyse-Intervall</span>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:314

- **Text:** 'Cooldown (Sek.)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label className={styles.label}>Cooldown (Sek.)</label>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:323

- **Text:** 'Min. Abstand zwischen AI-Calls'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span className={styles.hint}>Min. Abstand zwischen AI-Calls</span>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:327

- **Text:** 'Kontext-Fenster (Segmente)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <label className={styles.label}>Kontext-Fenster (Segmente)</label>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:336

- **Text:** 'Anzahl Transkript-Segmente fuer AI-Kontext'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <span className={styles.hint}>Anzahl Transkript-Segmente fuer AI-Kontext</span>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:341

- **Text:** 'Browser Bot URL (optional)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <label className={styles.label}>Browser Bot URL (optional)</label>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:347

- **Text:** 'Automatisch aus Umgebungskonfiguration'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              placeholder="Automatisch aus Umgebungskonfiguration"`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:349

- **Text:** 'URL des Browser Bot Service. Leer lassen fuer Standard-Konfiguration.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span className={styles.hint}>URL des Browser Bot Service. Leer lassen fuer Standard-Konfiguration.</span>`

## `src/pages/views/teamsbot/TeamsbotSettingsView.tsx`:375

- **Text:** 'Konfiguration speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {saving ? 'Speichern...' : 'Konfiguration speichern'}`

## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:193

- **Text:** "&middot; {t('Letzter Sync:')} {existingConfig.lastSyncStatus}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <> &middot; {t('Letzter Sync:')} {existingConfig.lastSyncStatus}</>`

## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:209

- **Text:** "&middot; {t('Status:')} {existingConfig.lastSyncStatus}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      <> &middot; {t('Status:')} {existingConfig.lastSyncStatus}</>`

## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:293

- **Text:** 'Save & Test'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h4>Save & Test</h4>`

## `src/pages/views/trustee/TrusteeAccountingSettingsView.tsx`:458

- **Text:** "&middot; {t('Letzter Import:')} {new Date(importStatus.lastSyncAt * 1000).toLocaleString()}"
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                    <> &middot; {t('Letzter Import:')} {new Date(importStatus.lastSyncAt * 1000).toLocaleString()}</>`

## `src/pages/views/trustee/TrusteeDashboardView.tsx`:81

- **Text:** 'Not configured'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  : 'Not configured'`

## `src/pages/views/trustee/TrusteeDashboardView.tsx`:99

- **Text:** 'Deine Rolle'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {(instance?.userRoles?.length || 0) === 1 ? 'Deine Rolle' : 'Deine Rollen'}`

## `src/pages/views/trustee/TrusteeDashboardView.tsx`:99

- **Text:** 'Deine Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              {(instance?.userRoles?.length || 0) === 1 ? 'Deine Rolle' : 'Deine Rollen'}`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:139

- **Text:** 'Fehler beim Herunterladen des Dokuments.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Fehler', 'Fehler beim Herunterladen des Dokuments.');`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:171

- **Text:** 'Fehler beim Laden der Dokumente: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Dokumente: {error}</p>`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:184

- **Text:** 'Belege und Dokumente verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Belege und Dokumente verwalten</p>`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:225

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Löschen',`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:247

- **Text:** 'Keine Dokumente gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Dokumente gefunden"`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:257

- **Text:** 'Neues Dokument'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isCreateMode ? 'Neues Dokument' : 'Dokument bearbeiten'}`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:257

- **Text:** 'Dokument bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isCreateMode ? 'Neues Dokument' : 'Dokument bearbeiten'}`

## `src/pages/views/trustee/TrusteeDocumentsView.tsx`:270

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:71

- **Text:** 'Trustee Expense Import'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `const EXPENSE_IMPORT_LABEL = 'Trustee Expense Import';`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:72

- **Text:** '0 22 * * *'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `const DAILY_CRON = '0 22 * * *';`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:241

- **Text:** 'Failed to load SharePoint sites'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(_parseErrorDetail(err.response?.data?.detail) || 'Failed to load SharePoint sites');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:263

- **Text:** 'Failed to load folders'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(_parseErrorDetail(err.response?.data?.detail) || 'Failed to load folders');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:318

- **Text:** 'Microsoft connection failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err.message || 'Microsoft connection failed');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:326

- **Text:** 'Missing Connection'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing Connection', 'Please select a Microsoft connection first.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:326

- **Text:** 'Please select a Microsoft connection first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing Connection', 'Please select a Microsoft connection first.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:330

- **Text:** 'Missing Folder'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing Folder', 'Please select a SharePoint folder first.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:330

- **Text:** 'Please select a SharePoint folder first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing Folder', 'Please select a SharePoint folder first.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:334

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'Feature instance not found. Please refresh the page.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:334

- **Text:** 'Feature instance not found. Please refresh the page.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', 'Feature instance not found. Please refresh the page.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:357

- **Text:** 'Daily at 22:00'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `        label: 'Daily at 22:00',`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:373

- **Text:** 'Expense import workflow updated and activated!'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          ? 'Expense import workflow updated and activated!'`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:374

- **Text:** 'Expense import workflow updated and deactivated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          : 'Expense import workflow updated and deactivated.';`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:376

- **Text:** 'Success'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Success', msg);`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:387

- **Text:** 'Expense import workflow created and activated! It will run daily at 22:00.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        const msg = 'Expense import workflow created and activated! It will run daily at 22:00.';`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:389

- **Text:** 'Success'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Success', msg);`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:404

- **Text:** 'Failed to save workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMsg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to save workflow';`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:406

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', errorMsg);`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:414

- **Text:** 'Missing data'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing data', 'Please select connection and folder first.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:414

- **Text:** 'Please select connection and folder first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing data', 'Please select connection and folder first.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:431

- **Text:** 'Workflow started. Extract → Process → Sync will run once.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Started', 'Workflow started. Extract → Process → Sync will run once.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:433

- **Text:** 'Failed to start workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const msg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to start workflow';`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:435

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', msg);`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:454

- **Text:** 'Expense import workflow deactivated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccessMessage('Expense import workflow deactivated.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:455

- **Text:** 'Expense import workflow deactivated.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showSuccess('Deactivated', 'Expense import workflow deactivated.');`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:458

- **Text:** 'Failed to deactivate workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMsg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to deactivate workflow';`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:460

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', errorMsg);`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:469

- **Text:** 'Expense Import Setup'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.sectionTitle}>Expense Import Setup</h3>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:478

- **Text:** 'How it works'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="How it works"`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:484

- **Text:** 'How it works:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <strong>How it works:</strong>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:486

- **Text:** 'Place expense PDF documents (receipts, invoices) in the selected SharePoint folder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <li>Place expense PDF documents (receipts, invoices) in the selected SharePoint folder</li>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:487

- **Text:** 'The system runs daily at 22:00 and processes all PDF files'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <li>The system runs daily at 22:00 and processes all PDF files</li>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:488

- **Text:** 'AI extracts expense data: date, amount, VAT, company, description'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <li>AI extracts expense data: date, amount, VAT, company, description</li>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:489

- **Text:** 'Each expense is saved as a position in this Trustee instance'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <li>Each expense is saved as a position in this Trustee instance</li>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:490

- **Text:** 'Processed PDFs are moved to a "processed" subfolder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <li>Processed PDFs are moved to a "processed" subfolder</li>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:491

- **Text:** 'Failed PDFs are moved to an "error" subfolder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <li>Failed PDFs are moved to an "error" subfolder</li>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:492

- **Text:** 'Maximum 50 PDFs are processed per run'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <li>Maximum 50 PDFs are processed per run</li>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:513

- **Text:** 'Current Status:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <strong>Current Status:</strong> {existingWorkflow.active ? '✓ Active' : '○ Inactive'}`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:513

- **Text:** '✓ Active'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <strong>Current Status:</strong> {existingWorkflow.active ? '✓ Active' : '○ Inactive'}`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:513

- **Text:** '○ Inactive'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            <strong>Current Status:</strong> {existingWorkflow.active ? '✓ Active' : '○ Inactive'}`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:515

- **Text:** 'Folder: {existingWorkflow.sharepointFolder}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <><br />Folder: {existingWorkflow.sharepointFolder}</>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:524

- **Text:** 'Microsoft Connection'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <h4>Microsoft Connection</h4>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:531

- **Text:** 'Connect Microsoft Account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isConnecting ? 'Connecting...' : 'Connect Microsoft Account'}`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:537

- **Text:** 'Microsoft Account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  Connected as <strong>{msftConnections[0].accountName || 'Microsoft Account'}</strong>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:554

- **Text:** 'Select a Microsoft account...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="">Select a Microsoft account...</option>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:567

- **Text:** 'Add another account'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isConnecting ? 'Connecting...' : 'Add another account'}`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:579

- **Text:** 'SharePoint Site'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h4>SharePoint Site</h4>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:581

- **Text:** 'Loading sites...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <div className={styles.loadingText}>Loading sites...</div>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:588

- **Text:** 'Select a site...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <option value="">Select a site...</option>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:605

- **Text:** 'Expense Folder'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h4>Expense Folder</h4>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:610

- **Text:** 'Loading folders...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                <div className={styles.loadingText}>Loading folders...</div>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:651

- **Text:** 'No subfolders found'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                      <div className={styles.emptyText}>No subfolders found</div>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:670

- **Text:** 'Update Configuration'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <h4>{existingWorkflow ? 'Update Configuration' : 'Activate Daily Import'}</h4>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:670

- **Text:** 'Activate Daily Import'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              <h4>{existingWorkflow ? 'Update Configuration' : 'Activate Daily Import'}</h4>`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:681

- **Text:** 'Save & Activate'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isActivating ? 'Saving...' : (existingWorkflow ? 'Save & Activate' : 'Activate Daily Import')}`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:681

- **Text:** 'Activate Daily Import'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isActivating ? 'Saving...' : (existingWorkflow ? 'Save & Activate' : 'Activate Daily Import')}`

## `src/pages/views/trustee/TrusteeExpenseImportView.tsx`:688

- **Text:** 'Jetzt ausführen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  {isRunningNow ? 'Starting...' : 'Jetzt ausführen'}`

## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:56

- **Text:** 'Fehler beim Laden der Rollen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMsg = err.response?.data?.detail || err.message || 'Fehler beim Laden der Rollen';`

## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:76

- **Text:** 'Keine Feature-Instanz ausgewählt'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <div className={styles.error}>Keine Feature-Instanz ausgewählt</div>`

## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:84

- **Text:** 'Lade Instanz-Rollen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <div className={styles.loading}>Lade Instanz-Rollen...</div>`

## `src/pages/views/trustee/TrusteeInstanceRolesView.tsx`:132

- **Text:** 'Keine Instanz-Rollen gefunden'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p>Keine Instanz-Rollen gefunden</p>`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:139

- **Text:** 'Fehler beim Laden der Verknüpfungen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Verknüpfungen: {error}</p>`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:152

- **Text:** 'Belege mit Buchungspositionen verknüpfen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Belege mit Buchungspositionen verknüpfen</p>`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:188

- **Text:** 'Verknüpfung bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Verknüpfung bearbeiten',`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:194

- **Text:** 'Verknüpfung entfernen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Verknüpfung entfernen',`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:206

- **Text:** 'Keine Verknüpfungen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Verknüpfungen gefunden"`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:215

- **Text:** 'Neue Verknüpfung erstellen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Neue Verknüpfung erstellen</h2>`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:227

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:236

- **Text:** 'Verknüpfung erstellen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  submitButtonText="Verknüpfung erstellen"`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:251

- **Text:** 'Verknüpfung bearbeiten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <h2 className={styles.modalTitle}>Verknüpfung bearbeiten</h2>`

## `src/pages/views/trustee/TrusteePositionDocumentsView.tsx`:263

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:91

- **Text:** 'Sync teilweise fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Sync teilweise fehlgeschlagen', `${res.success} OK, ${res.errors} Fehler.`);`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:94

- **Text:** 'Sync fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Sync fehlgeschlagen', firstError?.errorMessage || `${res.errors} Fehler.`);`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:99

- **Text:** 'Sync fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Sync fehlgeschlagen', err.response?.data?.detail || err.message || 'Unbekannter Fehler.');`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:99

- **Text:** 'Unbekannter Fehler.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Sync fehlgeschlagen', err.response?.data?.detail || err.message || 'Unbekannter Fehler.');`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:127

- **Text:** 'Dokument nicht gefunden.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Fehler', 'Dokument nicht gefunden.');`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:145

- **Text:** 'Fehler beim Herunterladen des Dokuments.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Fehler', 'Fehler beim Herunterladen des Dokuments.');`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:163

- **Text:** 'Belege'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `    label: 'Belege',`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:190

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:228

- **Text:** 'Sync-Status'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `      label: 'Sync-Status',`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:393

- **Text:** 'Fehler beim Laden der Positionen: {error}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.errorMessage}>Fehler beim Laden der Positionen: {error}</p>`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:406

- **Text:** 'Buchungspositionen verwalten'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.pageSubtitle}>Buchungspositionen verwalten</p>`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:441

- **Text:** 'Buchhaltung synchronisieren'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `                label: 'Buchhaltung synchronisieren',`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:455

- **Text:** 'Löschen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'Löschen',`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:463

- **Text:** 'In Buchhaltung synchronisieren'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                title: 'In Buchhaltung synchronisieren',`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:477

- **Text:** 'Keine Positionen gefunden'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            emptyMessage="Keine Positionen gefunden"`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:487

- **Text:** 'Neue Position'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isCreateMode ? 'Neue Position' : 'Position bearbeiten'}`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:487

- **Text:** 'Position bearbeiten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                {isCreateMode ? 'Neue Position' : 'Position bearbeiten'}`

## `src/pages/views/trustee/TrusteePositionsView.tsx`:500

- **Text:** 'Lade Formular...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `                  <span>Lade Formular...</span>`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:77

- **Text:** 'Invalid file'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Invalid file', `${file.name}: only PDF and JPG are supported.`);`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:85

- **Text:** 'Upload'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          else showError('Upload', 'Could not get file ID from server.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:85

- **Text:** 'Could not get file ID from server.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          else showError('Upload', 'Could not get file ID from server.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:87

- **Text:** 'Upload failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Upload failed', result.error || 'Unknown error');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:87

- **Text:** 'Unknown error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Upload failed', result.error || 'Unknown error');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:157

- **Text:** 'Step failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          const errMsg = failedStep.error || 'Step failed';`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:161

- **Text:** 'Pipeline error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showError('Pipeline error', errMsg);`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:168

- **Text:** 'Pipeline completed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showSuccess('Pipeline completed', 'Extraction and processing workflow finished successfully.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:168

- **Text:** 'Extraction and processing workflow finished successfully.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showSuccess('Pipeline completed', 'Extraction and processing workflow finished successfully.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:178

- **Text:** 'Polling failed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        const msg = _parseErrorDetail(pollErr.response?.data?.detail) || pollErr.message || 'Polling failed';`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:182

- **Text:** 'Polling error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showError('Polling error', msg);`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:213

- **Text:** 'Missing data'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing data', 'Please upload at least one PDF or JPG first.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:213

- **Text:** 'Please upload at least one PDF or JPG first.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Missing data', 'Please upload at least one PDF or JPG first.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:219

- **Text:** 'Starting pipeline workflow...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    setPipelineSummary('Starting pipeline workflow...');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:233

- **Text:** 'Pipeline completed (synchronous execution).'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          setPipelineSummary('Pipeline completed (synchronous execution).');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:234

- **Text:** 'Pipeline finished: Extract → Process → Sync.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          showSuccess('Completed', 'Pipeline finished: Extract → Process → Sync.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:236

- **Text:** 'Workflow executed but no run ID returned.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          throw new Error(response?.data?.error || 'Workflow executed but no run ID returned.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:242

- **Text:** 'Pipeline started: Extract → Process → Sync. You can follow progress in Workflows.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        showSuccess('Started', 'Pipeline started: Extract → Process → Sync. You can follow progress in Workflows.');`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:245

- **Text:** 'Failed to start workflow'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const msg = _parseErrorDetail(err.response?.data?.detail) || err.message || 'Failed to start workflow';`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:248

- **Text:** 'Error'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      showError('Error', msg);`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:257

- **Text:** 'File upload is not available in this context.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p>File upload is not available in this context.</p>`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:265

- **Text:** 'Scan / Upload'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.sectionTitle}>Scan / Upload</h3>`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:272

- **Text:** 'Pipeline status:'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <strong>Pipeline status:</strong> {pipelineState}`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:308

- **Text:** 'Choose files'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              aria-label="Choose files"`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:310

- **Text:** 'Choose files'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            {uploadingFile ? 'Uploading…' : 'Choose files'}`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:320

- **Text:** 'Take photo'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              aria-label="Take photo"`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:341

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                    borderBottom: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:364

- **Text:** 'Pipeline running...'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  ? 'Pipeline running...'`

## `src/pages/views/trustee/TrusteeScanUploadView.tsx`:365

- **Text:** 'Start pipeline'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  : 'Start pipeline'}`

## `src/pages/views/workspace/ChatStream.tsx`:63

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              : '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/ChatStream.tsx`:108

- **Text:** '2px solid #ddd'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        borderBottom: '2px solid #ddd',`

## `src/pages/views/workspace/ChatStream.tsx`:120

- **Text:** '1px solid #eee'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        borderBottom: '1px solid #eee',`

## `src/pages/views/workspace/ChatStream.tsx`:201

- **Text:** '1px solid var(--warning-color, #ff9800)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--warning-color, #ff9800)',`

## `src/pages/views/workspace/ChatStream.tsx`:246

- **Text:** '1px solid var(--border-color, #ccc)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #ccc)',`

## `src/pages/views/workspace/ChatStream.tsx`:262

- **Text:** '1px solid var(--progress-border, #c8e6c9)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          border: '1px solid var(--progress-border, #c8e6c9)',`

## `src/pages/views/workspace/ChatStream.tsx`:354

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        border: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/ChatStream.tsx`:357

- **Text:** 'background 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        transition: 'background 0.15s',`

## `src/pages/views/workspace/ChatStream.tsx`:376

- **Text:** 'Download'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `      <span style={{ fontSize: 14, color: 'var(--primary-color, #F25843)' }} title="Download">&#x2B07;</span>`

## `src/pages/views/workspace/ChatStream.tsx`:451

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      border: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/ChatStream.tsx`:478

- **Text:** 'width 0.2s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            transition: 'width 0.2s',`

## `src/pages/views/workspace/ChatStream.tsx`:500

- **Text:** 'Stop'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `        title="Stop"`

## `src/pages/views/workspace/ChatStream.tsx`:530

- **Text:** 'Consolas, Monaco, "Courier New", monospace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          fontFamily: 'Consolas, Monaco, "Courier New", monospace',`

## `src/pages/views/workspace/ChatStream.tsx`:557

- **Text:** 'Consolas, Monaco, "Courier New", monospace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        fontFamily: 'Consolas, Monaco, "Courier New", monospace',`

## `src/pages/views/workspace/FilePreview.tsx`:72

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        borderBottom: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/FilePreview.tsx`:106

- **Text:** 'Consolas, Monaco, "Courier New", monospace'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            fontFamily: 'Consolas, Monaco, "Courier New", monospace',`

## `src/pages/views/workspace/FilePreview.tsx`:135

- **Text:** 'File too large for inline preview'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              ? 'File too large for inline preview'`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:214

- **Text:** 'Chat, Prompt & Kontext'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          fileName: 'Chat, Prompt & Kontext',`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:366

- **Text:** '2px solid var(--accent, #4f46e5)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  selectedSource === src.fileId ? '2px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:366

- **Text:** '1px solid var(--border-color, #e5e7eb)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  selectedSource === src.fileId ? '2px solid var(--accent, #4f46e5)' : '1px solid var(--border-color, #e5e7eb)',`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:394

- **Text:** '1px solid var(--border-color, #d1d5db)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                      border: '1px solid var(--border-color, #d1d5db)',`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:423

- **Text:** '1px solid var(--border-color, #f3f4f6)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                  borderTop: '1px solid var(--border-color, #f3f4f6)',`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:437

- **Text:** 'Mapping löschen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                  title="Mapping löschen"`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:450

- **Text:** 'Keine Mappings ohne Dateizuordnung.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            ? 'Keine Mappings ohne Dateizuordnung.'`

## `src/pages/views/workspace/NeutralizationPanel.tsx`:451

- **Text:** 'Keine gespeicherten Mappings für diese Datenquelle.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            : 'Keine gespeicherten Mappings für diese Datenquelle.'}`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:71

- **Text:** 'Zurueck zum Dashboard'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <button onClick={_goBack} style={_btnStyle} title="Zurueck zum Dashboard">`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:80

- **Text:** 'Aktualisieren'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          <button onClick={editor.refresh} style={_btnStyle} title="Aktualisieren">`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:106

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderBottom: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:153

- **Text:** 'Original: {formatBinaryDataSizeBytes(activeEdit.oldContent.length)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span>Original: {formatBinaryDataSizeBytes(activeEdit.oldContent.length)}</span>`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:154

- **Text:** 'Geaendert: {formatBinaryDataSizeBytes(activeEdit.newContent.length)}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <span>Geaendert: {formatBinaryDataSizeBytes(activeEdit.newContent.length)}</span>`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:177

- **Text:** 'TextModel got disposed'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `// Safe DiffEditor wrapper -- prevents "TextModel got disposed" errors`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:239

- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      borderBottom: isActive ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`

## `src/pages/views/workspace/WorkspaceEditorPage.tsx`:239

- **Text:** '2px solid transparent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      borderBottom: isActive ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:50

- **Text:** 'Fehler beim Laden der Einstellungen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err?.message || 'Fehler beim Laden der Einstellungen');`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:67

- **Text:** 'Wert muss zwischen 1 und 100 liegen.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        setError('Wert muss zwischen 1 und 100 liegen.');`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:81

- **Text:** 'Einstellungen gespeichert.'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setSuccess('Einstellungen gespeichert.');`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:84

- **Text:** 'Fehler beim Speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(err?.message || 'Fehler beim Speichern');`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:95

- **Text:** 'Lade Einstellungen...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div className={styles.loading}>Lade Einstellungen...</div>;`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:102

- **Text:** 'Generelle Einstellungen'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      <h2 className={styles.heading}>Generelle Einstellungen</h2>`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:130

- **Text:** 'Auf Standard zurücksetzen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `                title="Auf Standard zurücksetzen"`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:139

- **Text:** 'Ihr Override: {maxRoundsInfo.userOverride}.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `              <> Ihr Override: {maxRoundsInfo.userOverride}.</>`

## `src/pages/views/workspace/WorkspaceGeneralSettings.tsx`:151

- **Text:** 'Einstellungen speichern'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        {saving ? 'Speichern...' : 'Einstellungen speichern'}`

## `src/pages/views/workspace/WorkspaceInput.tsx`:14

- **Text:** 'Deutsch'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'de-DE', label: 'Deutsch' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:15

- **Text:** 'English (US)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'en-US', label: 'English (US)' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:16

- **Text:** 'English (UK)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'en-GB', label: 'English (UK)' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:17

- **Text:** 'Francais'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'fr-FR', label: 'Francais' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:18

- **Text:** 'Italiano'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'it-IT', label: 'Italiano' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:19

- **Text:** 'Espanol'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'es-ES', label: 'Espanol' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:20

- **Text:** 'Portugues'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'pt-BR', label: 'Portugues' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:21

- **Text:** 'Nederlands'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'nl-NL', label: 'Nederlands' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:22

- **Text:** 'Polski'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'pl-PL', label: 'Polski' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:23

- **Text:** 'Russkij'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'ru-RU', label: 'Russkij' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:24

- **Text:** 'Japanese'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'ja-JP', label: 'Japanese' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:25

- **Text:** 'Chinese'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { code: 'zh-CN', label: 'Chinese' },`

## `src/pages/views/workspace/WorkspaceInput.tsx`:324

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        borderTop: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:327

- **Text:** '2px dashed var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        outline: treeDropOver ? '2px dashed var(--primary-color, #F25843)' : 'none',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:329

- **Text:** 'background 0.15s, outline 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        transition: 'background 0.15s, outline 0.15s',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:342

- **Text:** '1px solid var(--border-color, #f0f0f0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderBottom: '1px solid var(--border-color, #f0f0f0)',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:381

- **Text:** '1px solid var(--border-color, #f0f0f0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderBottom: '1px solid var(--border-color, #f0f0f0)',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:471

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          border: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:473

- **Text:** '0 -2px 8px rgba(0,0,0,0.1)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          boxShadow: '0 -2px 8px rgba(0,0,0,0.1)',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:484

- **Text:** '1px solid #f0f0f0'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                borderBottom: '1px solid #f0f0f0',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:512

- **Text:** 'Type a message... Use @filename to reference files'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          placeholder="Type a message... Use @filename to reference files"`

## `src/pages/views/workspace/WorkspaceInput.tsx`:521

- **Text:** '1px solid var(--border-color, #ccc)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            border: '1px solid var(--border-color, #ccc)',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:533

- **Text:** 'Datei anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `          title="Datei anhängen"`

## `src/pages/views/workspace/WorkspaceInput.tsx`:551

- **Text:** 'Datenquellen anhängen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `              title="Datenquellen anhängen"`

## `src/pages/views/workspace/WorkspaceInput.tsx`:600

- **Text:** '2px solid #2e7d32'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:600

- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                        border: isSelected ? '2px solid #2e7d32' : '2px solid #ccc',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:634

- **Text:** '2px solid #7b1fa2'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:634

- **Text:** '2px solid #ccc'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                            border: isSelected ? '2px solid #7b1fa2' : '2px solid #ccc',`

## `src/pages/views/workspace/WorkspaceInput.tsx`:669

- **Text:** 'Sprache waehlen'
- **Art:** string_literal
- **Kontext:** jsx/html attribute (title|placeholder|aria-label|alt)
- **Zeile:** `            title="Sprache waehlen"`

## `src/pages/views/workspace/WorkspaceInput.tsx`:682

- **Text:** 'Aufnahme stoppen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            title={voiceActive ? 'Aufnahme stoppen' : 'Sprachaufnahme starten'}`

## `src/pages/views/workspace/WorkspaceInput.tsx`:682

- **Text:** 'Sprachaufnahme starten'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            title={voiceActive ? 'Aufnahme stoppen' : 'Sprachaufnahme starten'}`

## `src/pages/views/workspace/WorkspaceInput.tsx`:724

- **Text:** 'Neutralisierung aktiv (klicken zum Deaktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          title={neutralizeActive ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`

## `src/pages/views/workspace/WorkspaceInput.tsx`:724

- **Text:** 'Neutralisierung aus (klicken zum Aktivieren)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          title={neutralizeActive ? 'Neutralisierung aktiv (klicken zum Deaktivieren)' : 'Neutralisierung aus (klicken zum Aktivieren)'}`

## `src/pages/views/workspace/WorkspaceInput.tsx`:731

- **Text:** 'all 0.15s'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            transition: 'all 0.15s',`

## `src/pages/views/workspace/WorkspacePage.tsx`:223

- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    borderBottom: active ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`

## `src/pages/views/workspace/WorkspacePage.tsx`:223

- **Text:** '2px solid transparent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    borderBottom: active ? '2px solid var(--primary-color, #F25843)' : '2px solid transparent',`

## `src/pages/views/workspace/WorkspacePage.tsx`:310

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderRight: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspacePage.tsx`:356

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `            borderBottom: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspacePage.tsx`:365

- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #ddd)',`

## `src/pages/views/workspace/WorkspacePage.tsx`:379

- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #ddd)',`

## `src/pages/views/workspace/WorkspacePage.tsx`:392

- **Text:** '1px solid var(--border-color, #ddd)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                border: '1px solid var(--border-color, #ddd)',`

## `src/pages/views/workspace/WorkspacePage.tsx`:465

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `          borderLeft: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspacePage.tsx`:498

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              borderRight: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspacePage.tsx`:532

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `              borderLeft: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:28

- **Text:** 'Office (Text)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  office_doc: 'Office (Text)',`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:29

- **Text:** 'Office (Tabellen)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  office_sheet: 'Office (Tabellen)',`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:30

- **Text:** 'Office (Folien)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `  office_slides: 'Office (Folien)',`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:87

- **Text:** 'Laden fehlgeschlagen'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      setError(e instanceof Error ? e.message : 'Laden fehlgeschlagen');`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:150

- **Text:** 'Indexierte Dokumente'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.kpiLabel}>Indexierte Dokumente</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:154

- **Text:** 'Indexiertes Datenvolumen (geschätzt)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.kpiLabel}>Indexiertes Datenvolumen (geschätzt)</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:158

- **Text:** 'Inhalts-Fragmente (Chunks)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.kpiLabel}>Inhalts-Fragmente (Chunks)</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:164

- **Text:** 'Anteil Fragmente mit Embedding'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.kpiLabel}>Anteil Fragmente mit Embedding</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:168

- **Text:** 'Beitragende Benutzer (Anzahl)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.kpiLabel}>Beitragende Benutzer (Anzahl)</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:172

- **Text:** 'Workflow-Entitäten (Cache)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.kpiLabel}>Workflow-Entitäten (Cache)</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:178

- **Text:** 'Neu indexierte Dokumente pro Tag (letzte Wochen)'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.chartTitle}>Neu indexierte Dokumente pro Tag (letzte Wochen)</h3>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:180

- **Text:** 'Keine Zeitreihen-Daten für den gewählten Zeitraum.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.meta}>Keine Zeitreihen-Daten für den gewählten Zeitraum.</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:196

- **Text:** 'Dokumente nach Format-Kategorie'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <h3 className={styles.chartTitle}>Dokumente nach Format-Kategorie</h3>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:198

- **Text:** 'Keine Daten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.meta}>Keine Daten.</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:215

- **Text:** 'Keine Daten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `            <p className={styles.meta}>Keine Daten.</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:241

- **Text:** 'Fragmente nach Inhaltstyp'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <h3 className={styles.chartTitle}>Fragmente nach Inhaltstyp</h3>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:243

- **Text:** 'Keine Chunk-Daten.'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `          <p className={styles.meta}>Keine Chunk-Daten.</p>`

## `src/pages/views/workspace/WorkspaceRagInsightsPage.tsx`:258

- **Text:** 'Stand (UTC): {stats.generatedAtUtc}'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `        <p className={styles.meta}>Stand (UTC): {stats.generatedAtUtc}</p>`

## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:5

- **Text:** 'Stimme & Sprache'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** ` * Voice settings are now in user-level settings (/settings -> "Stimme & Sprache").`

## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:16

- **Text:** 'Generelle Einstellungen'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'general', label: 'Generelle Einstellungen' },`

## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:17

- **Text:** 'Neutralisierung (Workspace)'
- **Art:** string_literal
- **Kontext:** object property label: (e.g. table column)
- **Zeile:** `  { key: 'neutralization', label: 'Neutralisierung (Workspace)' },`

## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:37

- **Text:** '1px solid var(--border-color, #e0e0e0)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `        borderBottom: '1px solid var(--border-color, #e0e0e0)',`

## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:49

- **Text:** '2px solid var(--primary-color, #F25843)'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                ? '2px solid var(--primary-color, #F25843)'`

## `src/pages/views/workspace/WorkspaceSettingsPage.tsx`:50

- **Text:** '2px solid transparent'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `                : '2px solid transparent',`

## `src/providers/auth/AuthProvider.tsx`:89

- **Text:** 'Loading authentication...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `      return <div>Loading authentication...</div>;`

## `src/providers/auth/ProtectedRoute.tsx`:109

- **Text:** 'Checking authentication...'
- **Art:** jsx_text
- **Kontext:** between tags, user-visible text node
- **Zeile:** `    return <div>Checking authentication...</div>;`

## `src/stores/featureStore.tsx`:124

- **Text:** 'Failed to load features'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `      const errorMessage = err instanceof Error ? err.message : 'Failed to load features';`

## `src/stores/featureStore.tsx`:264

- **Text:** 'useFeatureStore must be used within a FeatureProvider'
- **Art:** string_literal
- **Kontext:** string literal
- **Zeile:** `    throw new Error('useFeatureStore must be used within a FeatureProvider');`
