{"version":3,"file":"index.js","sources":["../../../frontend/main/src/js/utils/api.js","../../../frontend/main/src/js/auth/authSlice.js","../../../frontend/main/src/img/favicon/favicon-32x32.png","../../../frontend/main/src/icons/landwirtschaft.svg","../../../frontend/main/src/icons/traktor.svg","../../../frontend/main/src/icons/logout.svg","../../../frontend/main/src/icons/faq.svg","../../../frontend/main/src/js/common/components/Header.jsx","../../../frontend/main/src/js/common/components/Footer.jsx","../../../frontend/main/src/js/auth/Login.jsx","../../../frontend/main/src/js/auth/Register.jsx","../../../frontend/main/src/js/auth/PasswordReset.jsx","../../../frontend/main/src/js/auth/PasswordResetConfirm.jsx","../../../frontend/main/src/js/slices/farmSlice.js","../../../frontend/main/src/js/components/farms/hooks/useFarmData.js","../../../frontend/main/src/js/components/farms/hooks/useFarmHandlers.js","../../../frontend/main/src/js/utils/rideGrouping.js","../../../frontend/main/src/icons/abbrechen.svg?url","../../../frontend/main/src/icons/achtung.svg?url","../../../frontend/main/src/icons/anhang.svg?url","../../../frontend/main/src/icons/auge.svg?url","../../../frontend/main/src/icons/aussaat.svg?url","../../../frontend/main/src/icons/bauernecke.svg?url","../../../frontend/main/src/icons/bearbeiten.svg?url","../../../frontend/main/src/icons/beratung_chat.svg?url","../../../frontend/main/src/icons/bestaetigen.svg?url","../../../frontend/main/src/icons/bestockung.svg?url","../../../frontend/main/src/icons/bio.svg?url","../../../frontend/main/src/icons/bodenbearbeitung.svg?url","../../../frontend/main/src/icons/co2-senkung.svg?url","../../../frontend/main/src/icons/digitalisierung.svg?url","../../../frontend/main/src/icons/dokument.svg?url","../../../frontend/main/src/icons/download.svg?url","../../../frontend/main/src/icons/drucker.svg?url","../../../frontend/main/src/icons/duenger.svg?url","../../../frontend/main/src/icons/dusche.svg?url","../../../frontend/main/src/icons/einstellungen.svg?url","../../../frontend/main/src/icons/email.svg?url","../../../frontend/main/src/icons/erbse.svg?url","../../../frontend/main/src/icons/ernte.svg?url","../../../frontend/main/src/icons/externallink.svg?url","../../../frontend/main/src/icons/faq.svg?url","../../../frontend/main/src/icons/favoriten.svg?url","../../../frontend/main/src/icons/favoritenfull.svg?url","../../../frontend/main/src/icons/filiale.svg?url","../../../frontend/main/src/icons/filter.svg?url","../../../frontend/main/src/icons/flaechen.svg?url","../../../frontend/main/src/icons/floristik.svg?url","../../../frontend/main/src/icons/garten.svg?url","../../../frontend/main/src/icons/getreide.svg?url","../../../frontend/main/src/icons/getreide_full.svg?url","../../../frontend/main/src/icons/graeser.svg?url","../../../frontend/main/src/icons/gruenduengung.svg?url","../../../frontend/main/src/icons/haken.svg?url","../../../frontend/main/src/icons/hofbedarf.svg?url","../../../frontend/main/src/icons/hvo.svg?url","../../../frontend/main/src/icons/information.svg?url","../../../frontend/main/src/icons/insektizide.svg?url","../../../frontend/main/src/icons/kalender.svg?url","../../../frontend/main/src/icons/kalender_ziffer.svg?url","../../../frontend/main/src/icons/kompass.svg?url","../../../frontend/main/src/icons/kontoabmelden.svg?url","../../../frontend/main/src/icons/korn-produktion.svg?url","../../../frontend/main/src/icons/korn-trocknung.svg?url","../../../frontend/main/src/icons/lagerservice.svg?url","../../../frontend/main/src/icons/landwirtschaft.svg?url","../../../frontend/main/src/icons/loeschen.svg?url","../../../frontend/main/src/icons/login.svg?url","../../../frontend/main/src/icons/logout.svg?url","../../../frontend/main/src/icons/mais.svg?url","../../../frontend/main/src/icons/meinkonto.svg?url","../../../frontend/main/src/icons/meinlagerhaus.svg?url","../../../frontend/main/src/icons/menge.svg?url","../../../frontend/main/src/icons/menu.svg?url","../../../frontend/main/src/icons/messen.svg?url","../../../frontend/main/src/icons/nachhaltigkeit.svg?url","../../../frontend/main/src/icons/notification.svg?url","../../../frontend/main/src/icons/oelfass.svg?url","../../../frontend/main/src/icons/pfeil-links.svg?url","../../../frontend/main/src/icons/pfeil-rechts.svg?url","../../../frontend/main/src/icons/pflanzenschutz.svg?url","../../../frontend/main/src/icons/photovoltaik.svg?url","../../../frontend/main/src/icons/plus.svg?url","../../../frontend/main/src/icons/premium.svg?url","../../../frontend/main/src/icons/qualitaetsservice.svg?url","../../../frontend/main/src/icons/raps.svg?url","../../../frontend/main/src/icons/rechner.svg?url","../../../frontend/main/src/icons/rechner_inverted.svg?url","../../../frontend/main/src/icons/recycling.svg?url","../../../frontend/main/src/icons/region.svg?url","../../../frontend/main/src/icons/rwa.svg?url","../../../frontend/main/src/icons/saatdichte.svg?url","../../../frontend/main/src/icons/saatgut.svg?url","../../../frontend/main/src/icons/schmierstoffberater.svg?url","../../../frontend/main/src/icons/selected.svg?url","../../../frontend/main/src/icons/senkend.svg?url","../../../frontend/main/src/icons/sojabohne.svg?url","../../../frontend/main/src/icons/sonnenblume.svg?url","../../../frontend/main/src/icons/sonstiges.svg?url","../../../frontend/main/src/icons/sorghum.svg?url","../../../frontend/main/src/icons/standfestigkeit.svg?url","../../../frontend/main/src/icons/standorte.svg?url","../../../frontend/main/src/icons/suchen.svg?url","../../../frontend/main/src/icons/tiere.svg?url","../../../frontend/main/src/icons/tierhaltung-gefluegel.svg?url","../../../frontend/main/src/icons/tierhaltung-rind.svg?url","../../../frontend/main/src/icons/tierhaltung-schwein.svg?url","../../../frontend/main/src/icons/traktor.svg?url","../../../frontend/main/src/icons/ueberuns.svg?url","../../../frontend/main/src/icons/upload.svg?url","../../../frontend/main/src/icons/vermarktung.svg?url","../../../frontend/main/src/icons/weiden.svg?url","../../../frontend/main/src/icons/weinbau.svg?url","../../../frontend/main/src/icons/wetter-gewitter.svg?url","../../../frontend/main/src/icons/wetter-mondwolke.svg?url","../../../frontend/main/src/icons/wetter-mondwolkeregen.svg?url","../../../frontend/main/src/icons/wetter-nebel.svg?url","../../../frontend/main/src/icons/wetter-regen.svg?url","../../../frontend/main/src/icons/wetter-regenstark.svg?url","../../../frontend/main/src/icons/wetter-schnee.svg?url","../../../frontend/main/src/icons/wetter-wind.svg?url","../../../frontend/main/src/icons/wetter-wolke.svg?url","../../../frontend/main/src/icons/wetter-wolken.svg?url","../../../frontend/main/src/icons/wetter-wolkesonne.svg?url","../../../frontend/main/src/icons/wetter-wolkesonneregen.svg?url","../../../frontend/main/src/icons/wetter.svg?url","../../../frontend/main/src/icons/windkraft.svg?url","../../../frontend/main/src/icons/wunschliste.svg?url","../../../frontend/main/src/icons/zuckerruebe.svg?url","../../../frontend/main/src/js/utils/operationIcons.js","../../../frontend/main/src/icons/kalender.svg","../../../frontend/main/src/js/components/farms/RideGroupedOperations.jsx","../../../frontend/main/src/js/components/farms/accordion/SchlagAccordionItem.jsx","../../../frontend/main/src/js/components/farms/accordion/FeldstueckAccordionItem.jsx","../../../frontend/main/src/js/components/farms/accordion/YearAccordionItem.jsx","../../../frontend/main/src/js/components/farms/LandUseChangeManager.jsx","../../../frontend/main/src/js/components/farms/FarmingInfoModal.jsx","../../../frontend/main/src/js/components/farms/UnifiedFeldstueckModal.jsx","../../../frontend/main/src/js/utils/uuid.js","../../../frontend/main/src/js/components/farms/QuickOperationModal.jsx","../../../frontend/main/src/js/components/farms/modals/EditModal.jsx","../../../frontend/main/src/js/components/farms/forms/YearForm.jsx","../../../frontend/main/src/js/components/farms/forms/FeldstueckForm.jsx","../../../frontend/main/src/js/components/farms/forms/SchlagForm.jsx","../../../frontend/main/src/js/components/farms/SchlagPolygonEditor.jsx","../../../frontend/main/src/js/components/farms/modals/CrudModal.jsx","../../../frontend/main/src/js/components/farms/DeleteConfirmModal.jsx","../../../frontend/main/src/js/components/farms/modals/OperationDataSheetModal.jsx","../../../frontend/main/src/js/components/farms/FarmDetailsCollapsibleRefactored.jsx","../../../frontend/main/src/js/components/farms/FarmsList.jsx","../../../frontend/main/src/js/components/farms/FarmMapView.jsx","../../../frontend/main/src/js/components/farms/UnifiedMapView.jsx","../../../frontend/main/src/js/components/farms/XMLImportModal.jsx","../../../frontend/main/src/js/components/farms/AgrarCommanderImportModal.jsx","../../../frontend/main/src/js/components/farms/ManualFarmModal.jsx","../../../frontend/main/src/js/common/components/MultiselectAutocomplete.jsx","../../../frontend/main/src/js/components/farms/FilterDrawer.jsx","../../../frontend/main/src/js/components/farms/FarmKPIDisplay.jsx","../../../frontend/main/src/js/pages/FarmManagement.jsx","../../../frontend/main/src/js/pages/FarmOperations.jsx","../../../frontend/main/src/js/pages/AdminDashboard.jsx","../../../frontend/main/src/js/pages/ParticipationVerification.jsx","../../../frontend/main/src/js/pages/OeduePdfImport.jsx","../../../frontend/main/src/js/pages/FarmdokPdfImport.jsx","../../../frontend/main/src/docs/screenshots/main-overview.png","../../../frontend/main/src/docs/screenshots/betrieb-erstellen.png","../../../frontend/main/src/docs/screenshots/betrieb-bearbeiten.png","../../../frontend/main/src/docs/screenshots/erntejahr-hinzufuegen.png","../../../frontend/main/src/docs/screenshots/feldstueck-hinzufuegen.png","../../../frontend/main/src/docs/screenshots/feldstueck-hinzufuegen-2.png","../../../frontend/main/src/docs/screenshots/schlag-hinzufuegen.png","../../../frontend/main/src/docs/screenshots/schlag-hinzufuegen-2.png","../../../frontend/main/src/docs/screenshots/schlag-bearbeiten-karte.png","../../../frontend/main/src/docs/screenshots/schlag-bearbeiten-luc.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-massnahmentyp.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-datum-kraftstoff.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-aussaat.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-beregnung.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-bodenbearbeitung.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-duengung.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-pflanzenschutz.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-ernte.png","../../../frontend/main/src/docs/screenshots/massnahme-erfassen-zusammenfassung.png","../../../frontend/main/src/js/components/UserManual.jsx","../../../frontend/main/src/js/pages/ErrorPage.jsx","../../../frontend/main/src/js/pages/Impressum.jsx","../../../frontend/main/src/js/pages/Datenschutz.jsx","../../../frontend/main/src/js/pages/AGB.jsx","../../../frontend/main/src/js/App.jsx","../../../frontend/main/src/js/config/store.js","../../../frontend/main/src/js/components/ErrorBoundary.jsx","../../../frontend/main/src/index.jsx"],"sourcesContent":["import axios from 'axios';\n\n// Safe localStorage access with fallback\nconst getStorageItem = (key) => {\n  try {\n    return localStorage.getItem(key);\n  } catch (error) {\n    console.warn('localStorage access denied:', error);\n    return null;\n  }\n};\n\nconst removeStorageItem = (key) => {\n  try {\n    localStorage.removeItem(key);\n  } catch (error) {\n    console.warn('localStorage access denied:', error);\n  }\n};\n\n// Get CSRF token from Django template\nconst getCSRFToken = () => {\n  const meta = document.querySelector('meta[name=\"csrf-token\"]');\n  return meta ? meta.getAttribute('content') : '';\n};\n\n// Create an axios instance with default configuration\nconst api = axios.create({\n  baseURL: import.meta.env.VITE_API_BASE_URL || '/api/',\n  timeout: 60000, // Increased to 60 seconds for large data operations\n  withCredentials: true, // Include cookies/session data\n  headers: {\n    'Content-Type': 'application/json',\n  },\n});\n\n// Request interceptor to add auth token and CSRF token\napi.interceptors.request.use(\n  (config) => {\n    // Add Token for Django REST framework authentication\n    const token = getStorageItem('token');\n    if (token) {\n      config.headers.Authorization = `Token ${token}`;\n    }\n\n    // Add CSRF token for Django\n    const csrfToken = getCSRFToken();\n    if (csrfToken) {\n      config.headers['X-CSRFToken'] = csrfToken;\n    }\n\n    return config;\n  },\n  (error) => {\n    return Promise.reject(error);\n  }\n);\n\n// Response interceptor to handle common errors\napi.interceptors.response.use(\n  (response) => {\n    return response;\n  },\n  (error) => {\n    if (error.response?.status === 401) {\n      // Unauthorized - clear token and redirect to login\n      removeStorageItem('token');\n      window.location.href = '/login';\n    }\n    return Promise.reject(error);\n  }\n);\n\nexport default api;\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport api from '../utils/api';\n\n// Safe localStorage access with fallback\nconst getStorageItem = (key) => {\n  try {\n    return localStorage.getItem(key);\n  } catch (error) {\n    console.warn('localStorage access denied:', error);\n    return null;\n  }\n};\n\nconst setStorageItem = (key, value) => {\n  try {\n    localStorage.setItem(key, value);\n  } catch (error) {\n    console.warn('localStorage access denied:', error);\n  }\n};\n\nconst removeStorageItem = (key) => {\n  try {\n    localStorage.removeItem(key);\n  } catch (error) {\n    console.warn('localStorage access denied:', error);\n  }\n};\n\n// Initial state\nconst initialState = {\n  user: null,\n  token: getStorageItem('token'),\n  isAuthenticated: !!getStorageItem('token'),\n  loading: false,\n  error: null,\n  registrationSuccess: false,\n  registrationMessage: null,\n};\n\n// Async thunks\nexport const loginUser = createAsyncThunk(\n  'auth/login',\n  async ({ email, password }, { rejectWithValue }) => {\n    try {\n      const response = await api.post('/auth/login/', { email, password });\n      const { token, user } = response.data;\n      setStorageItem('token', token);\n      return { token, user };\n    } catch (error) {\n      const data = error.response?.data;\n      let message = data?.message || 'Login failed';\n  \n      // If there are specific errors (like inactive account), use them\n      if (data?.errors) {\n        // Check for non_field_errors first (common for general validation like inactive user)\n        if (data.errors.non_field_errors) {\n          message = data.errors.non_field_errors.join(' ');\n        } else {\n          // Append other field errors\n          const fieldErrors = Object.values(data.errors).flat().join(' ');\n          if (fieldErrors) {\n              message = `${message} ${fieldErrors}`;\n          }\n        }\n      }\n  \n      return rejectWithValue(message);\n    }\n  }\n);\n\nexport const registerUser = createAsyncThunk(\n  'auth/register',\n  async ({ email, password, firstName, lastName, contractingAuthority }, { rejectWithValue }) => {\n    try {\n      const response = await api.post('/auth/register/', {\n        email,\n        password,\n        password_confirm: password,\n        first_name: firstName,\n        last_name: lastName,\n        contracting_authority: contractingAuthority,\n      });\n      return response.data;\n    } catch (error) {\n      console.error('Registration error details:', error.response?.data);\n      const data = error.response?.data;\n      let message = data?.message || 'Registration failed';\n  \n      // If there are field errors, append them\n      if (data?.errors) {\n        // data.errors is { field: [msg, ...], ... }\n        const fieldErrors = Object.values(data.errors).flat().join(' ');\n        if (fieldErrors) {\n            message = `${message} ${fieldErrors}`;\n        }\n      }\n  \n      return rejectWithValue(message);\n    }\n  }\n);\n\nexport const fetchUser = createAsyncThunk(\n  'auth/fetchUser',\n  async (_, { rejectWithValue }) => {\n    try {\n      const token = getStorageItem('token');\n      if (!token) {\n        return rejectWithValue('No token found');\n      }\n      const response = await api.get('/auth/user/');\n      return response.data;\n    } catch (error) {\n      removeStorageItem('token');\n      return rejectWithValue(error.response?.data?.message || 'Failed to fetch user');\n    }\n  }\n);\n\nexport const logoutUser = createAsyncThunk('auth/logout', async (_, { rejectWithValue }) => {\n  try {\n    // Call backend logout to clear Django session\n    await api.post('/auth/logout/');\n  } catch (error) {\n    // Even if backend logout fails, we still want to clear frontend state\n    console.error('Backend logout failed:', error);\n  } finally {\n    // Always clear frontend token\n    removeStorageItem('token');\n  }\n  return {};\n});\n\n// Auth slice\nconst authSlice = createSlice({\n  name: 'auth',\n  initialState,\n  reducers: {\n    clearError: (state) => {\n      state.error = null;\n    },\n    resetRegistration: (state) => {\n      state.registrationSuccess = false;\n      state.registrationMessage = null;\n    },\n    setCredentials: (state, action) => {\n      const { user, token } = action.payload;\n      state.user = user;\n      state.token = token;\n      state.isAuthenticated = true;\n    },\n  },\n  extraReducers: (builder) => {\n    builder\n      // Login\n      .addCase(loginUser.pending, (state) => {\n        state.loading = true;\n        state.error = null;\n      })\n      .addCase(loginUser.fulfilled, (state, action) => {\n        state.loading = false;\n        state.isAuthenticated = true;\n        state.user = action.payload.user;\n        state.token = action.payload.token;\n        state.error = null;\n      })\n      .addCase(loginUser.rejected, (state, action) => {\n        state.loading = false;\n        state.error = action.payload;\n        state.isAuthenticated = false;\n        state.user = null;\n        state.token = null;\n      })\n      // Register\n      .addCase(registerUser.pending, (state) => {\n        state.loading = true;\n        state.error = null;\n        state.registrationSuccess = false;\n        state.registrationMessage = null;\n      })\n      .addCase(registerUser.fulfilled, (state, action) => {\n        state.loading = false;\n        state.isAuthenticated = false;\n        state.registrationSuccess = true;\n        state.registrationMessage = action.payload.message;\n        state.error = null;\n      })\n      .addCase(registerUser.rejected, (state, action) => {\n        state.loading = false;\n        state.error = action.payload;\n        state.isAuthenticated = false;\n        state.registrationSuccess = false;\n        state.registrationMessage = null;\n      })\n      // Fetch User\n      .addCase(fetchUser.pending, (state) => {\n        state.loading = true;\n      })\n      .addCase(fetchUser.fulfilled, (state, action) => {\n        state.loading = false;\n        state.user = action.payload;\n        state.isAuthenticated = true;\n        state.error = null;\n      })\n      .addCase(fetchUser.rejected, (state) => {\n        state.loading = false;\n        state.user = null;\n        state.token = null;\n        state.isAuthenticated = false;\n      })\n      // Logout\n      .addCase(logoutUser.fulfilled, (state) => {\n        state.user = null;\n        state.token = null;\n        state.isAuthenticated = false;\n        state.loading = false;\n        state.error = null;\n      });\n  },\n});\n\nexport const { clearError, setCredentials, resetRegistration } = authSlice.actions;\n\n// Selectors\nexport const selectIsAuthenticated = (state) => state.auth.isAuthenticated;\nexport const selectUser = (state) => state.auth.user;\nexport const selectAuthLoading = (state) => state.auth.loading;\nexport const selectAuthError = (state) => state.auth.error;\nexport const selectRegistrationSuccess = (state) => state.auth.registrationSuccess;\nexport const selectRegistrationMessage = (state) => state.auth.registrationMessage;\n\nexport default authSlice.reducer;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALcSURBVHgBxVc/aBNRGP9SnUygXardTMCpHbwMTgpep0gnwXZxMNfBDnEwFaxj0tEOrYKN4NK7xUUEXUSnRtCpg81gcaiYCkK0IBlqER3i+51957t3L3fvXYT8ICS5P+/3e9/3/b73Xobmpns0RBynlBjL5sjKn/F/b7d3qfvjgNLAWED+5ARtVJbInrRC15s72zTfWKH2tw6ZIGOSAsx4s75KYydyyvuIwvTyLT8iuhjRfVAmB9n9F0/Ja74KZo20bNZWg9ToQCsCMjlmiJnyvMvEJpFIjEASuYrQJBIjg5IPKqJvCpLI4Qbr9JEN93b71kFSOpQCMDgGyY9PRMgx8JpTibWhLKK936Hi0oIycsoU2JNnleRlu0TvVh5FyP++Y9GnB4/9Z+RZYyznYklFpRaAQTgwK07uVu4E1zFT2HD5iRdqPniGi1j0GiGBKig7odhoMAuZHN6veutBSOtMhMu6Y9m+FIjgz3GM5rKkLQA54/mrzZWpzj4iudO4G3nHYZECRBHFtDZstT8Gv3XIRRFe82Xw/+bMldC72gLusdx2D8MVm0TeTwSAGmm+b5G2ANhItkyP9LcNPebuyHiHB/oCRBtyOCy3WIaTsMFy79iliICqkI5EAaINYTVdETI5LMrBu6aWANGGVXfd7wVJImTyeVYvdUFAahvaUxa5R0XFiSEC11GYo9ksXT53IZQykLvsnlX4DzaszV7zvyFCjAQI0SOqM7NKcmCtXAmup7YhZspnDhGFG1eV+z4sRuj/nBwp4e03zoZ9l2MQY0XjkCOAFGHVRL2AXBQl1kPScnyMpgp11Q3Uwd7+V5bf8/8Ix0/R8623/v9O9zt9+PI5siU3IY8VAODFOBEyTMkTBcSJeL3Top+/f/nX0GgeXl80Jge0zwWy/5GiZ1tvgnvidt3kbGB0MAERtmNDOZgAcELx9oJf9TK4DU3IgUza0zGaD2wIDHI4zQz7eP4H2pT0C4JEsSUAAAAASUVORK5CYII=\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='Landwirtschaft'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M243,303v-68c53-10,120-56,120-121c0-22-15-37-37-37c-47,0-76,43-91,88C217,86,171,37,126,37%20c-36,0-63,27-63,63c0,53,70,126,160,136v61c-21-9-44-14-69-14H57v20h96c78,0,140,62,140,140h131v-20H312l-3-20h115v-20H303%20c-2-7-5-14-8-20h129v-20H282c-5-7-11-14-18-20h160v-20H243z%20M154,323H57v20h96c56,0,100,44,100,100h20C273,376,221,324,154,323z%20M154,363H57v20h96c34,0,60,26,60,60h20C233,398,199,364,154,363z%20M154,403H57v20h96c11,0,20,9,20,20h20C193,421,176,404,154,403z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20481'%20style='enable-background:new%200%200%20480%20481;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='traktor'%20transform='translate(0.000000,%200.000000)'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M370,145h-50v75h-55l-25-100h25V80H105v149c-30,14-50,45-50,81c0,51,39,90,90,90c40,0,73-24,85-60%20h76c4-35,33-60,69-60c13,0,25,3,35,9l15-29v-40h-55V145z%20M220,120l25,100H145V120H220z%20M145,360c-28,0-50-22-50-51%20c0-28,22-49,50-49s50,21,50,49C195,338,173,360,145,360z%20M375,300c-28,0-50,22-50,50s22,50,50,50s50-22,50-50S403,300,375,300z%20M375,380c-17,0-30-13-30-30s13-30,30-30s30,13,30,30S392,380,375,380z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_3'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cg%20id='kontoabmelden'%3e%3cpath%20id='Fill-1'%20d='M83,385V95h190v40h20v-40c0-13-7-20-20-20H83c-13,0-20,7-20,20v290c0,13,7,20,20,20h190c13,0,20-7,20-20v-40h-20v40H83ZM333,150l-20,20,55,55h-145v30h145l-55,55,20,20,80-80c5-5,5-15,0-20l-80-80Z'%20style='fill:%23009e3c;%20fill-rule:evenodd;%20stroke-width:0px;'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m240,90c-84.38,0-150,65.62-150,150s65.62,150,150,150,150-65.62,150-150-65.62-150-150-150Zm0,276.4c-71.1,0-126.4-55.3-126.4-126.4s55.3-126.4,126.4-126.4,126.4,55.3,126.4,126.4-55.3,126.4-126.4,126.4Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3cpath%20d='m240,157.21c-30.36,0-55.19,24.84-55.19,55.19h27.6c0-15.18,12.42-27.6,27.6-27.6s27.6,12.42,27.6,27.6-12.42,27.6-27.6,27.6h-13.8v27.6h13.8c30.36,0,55.19-24.84,55.19-55.19s-24.84-55.19-55.19-55.19Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3crect%20x='226.2'%20y='295.19'%20width='27.6'%20height='27.6'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","import React from 'react';\nimport { Navbar, Nav, Button } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { selectIsAuthenticated, selectUser, logoutUser } from '../../auth/authSlice';\nimport FaviconIcon from '../../../img/favicon/favicon-32x32.png';\nimport FarmIcon from '../../../icons/landwirtschaft.svg';\nimport TractorIcon from '../../../icons/traktor.svg';\nimport LogoutIcon from '../../../icons/logout.svg';\nimport HelpIcon from '../../../icons/faq.svg';\n\nconst Header = () => {\n  const dispatch = useDispatch();\n  const isAuthenticated = useSelector(selectIsAuthenticated);\n  const user = useSelector(selectUser);\n\n  const handleLogout = () => {\n    dispatch(logoutUser());\n  };\n\n  return (\n    <Navbar expand=\"lg\" className=\"mb-4\" style={{ backgroundColor: '#005541' }}>\n      <div className=\"container-fluid\">\n        <Navbar.Brand href=\"/\" style={{ color: 'white', display: 'flex', alignItems: 'center', gap: '8px' }}>\n          <img \n            src={FaviconIcon} \n            alt=\"Cultivate\" \n            style={{ \n              width: '32px', \n              height: '32px'\n            }} \n          />\n          Cultivate\n        </Navbar.Brand>\n        <Navbar.Toggle aria-controls=\"basic-navbar-nav\" style={{ borderColor: 'transparent' }}>\n          <span style={{ \n            backgroundImage: `url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 1)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")` \n          }} className=\"navbar-toggler-icon\"></span>\n        </Navbar.Toggle>\n        <Navbar.Collapse id=\"basic-navbar-nav\">\n          <Nav className=\"me-auto\">\n            {isAuthenticated && (\n              <>\n                <Nav.Link href=\"/farms\" style={{ color: 'white', display: 'flex', alignItems: 'center', gap: '5px' }}>\n                  <img \n                    src={FarmIcon} \n                    alt=\"Hofbedarf\" \n                    style={{ \n                      width: '28px', \n                      height: '28px', \n                      filter: 'brightness(0) invert(1)' \n                    }} \n                  />\n                  Betriebe\n                </Nav.Link>\n                {/* <Nav.Link href=\"/dashboard\" style={{ color: 'white', display: 'flex', alignItems: 'center', gap: '5px' }}>\n                  Dashboard\n                </Nav.Link> */}\n                <Nav.Link href=\"/operations\" style={{ color: 'white', display: 'flex', alignItems: 'center', gap: '5px' }}>\n                  <img \n                    src={TractorIcon} \n                    alt=\"Hofbedarf\" \n                    style={{ \n                      width: '28px', \n                      height: '28px', \n                      filter: 'brightness(0) invert(1)' \n                    }} \n                  />\n                  Maßnahmen\n                </Nav.Link>\n                <Nav.Link href=\"/hilfe\" style={{ color: 'white', display: 'flex', alignItems: 'center', gap: '5px' }}>\n                  <img \n                    src={HelpIcon} \n                    alt=\"Hilfe\" \n                    style={{ \n                      width: '28px', \n                      height: '28px', \n                      filter: 'brightness(0) invert(1)' \n                    }} \n                  />\n                  Hilfe\n                </Nav.Link>\n                {user?.is_superuser && (\n                  <>\n                    <Nav.Link href=\"/dashboard\" style={{ color: 'white', display: 'flex', alignItems: 'center', gap: '5px' }}>\n                      <i className=\"bi bi-speedometer2\" style={{ fontSize: '24px' }}></i>\n                      Admin Dashboard\n                    </Nav.Link>\n                    <Nav.Link href=\"/teilnahme-verifikation\" style={{ color: 'white', display: 'flex', alignItems: 'center', gap: '5px' }}>\n                      <i className=\"bi bi-clipboard2-check\" style={{ fontSize: '24px' }}></i>\n                      Teilnahme\n                    </Nav.Link>\n                  </>\n                )}\n              </>\n            )}\n          </Nav>\n          <Nav className=\"ms-auto align-items-center user-logout-box\">\n            {isAuthenticated ? (\n              <div style={{ display: 'flex', alignItems: 'center', gap: '15px', flexWrap: 'nowrap' }}>\n                <span style={{ color: 'white', fontWeight: '500', whiteSpace: 'nowrap' }}>\n                  {user?.first_name +' '+ user?.last_name || user?.email || 'User'}\n                </span>\n                <Button \n                  variant=\"alert\" \n                  className=\"btn-logout\"\n                  size=\"sm\"\n                  onClick={handleLogout}\n                >\n                  <img \n                    src={LogoutIcon} \n                    alt=\"Logout\" \n                    style={{ \n                      width: '16px', \n                      height: '16px', \n                      filter: 'brightness(0) invert(1)' \n                    }} \n                  />\n                  Abmelden\n                </Button>\n              </div>\n            ) : (\n              <>\n                {/* <Nav.Link href=\"/login\" style={{ color: 'white' }}>Login</Nav.Link>\n                <Nav.Link href=\"/register\" style={{ color: 'white' }}>Register</Nav.Link> */}\n              </>\n            )}\n          </Nav>\n        </Navbar.Collapse>\n      </div>\n    </Navbar>\n  );\n};\n\nexport default Header;\n","import React from 'react';\nimport { Container } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\n\nconst Footer = () => {\n  return (\n    <footer className=\"footer mt-auto py-3\" style={{ backgroundColor: '#f8f9fa', borderTop: '1px solid #dee2e6' }}>\n      <Container>\n        <div className=\"d-flex justify-content-center align-items-center flex-wrap gap-3\">\n          <Link to=\"/impressum\" className=\"text-decoration-none\" style={{ color: '#005541' }}>\n            Impressum\n          </Link>\n          <span style={{ color: '#dee2e6' }}>|</span>\n          <a href=\"https://www.agrarcommander.at/datenschutzerklaerung/\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-decoration-none\" style={{ color: '#005541' }}>\n            Datenschutz\n          </a>\n          <span style={{ color: '#dee2e6' }}>|</span>\n          <a href=\"https://www.agrarcommander.at/agb/\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-decoration-none\" style={{ color: '#005541' }}>\n            AGB\n          </a>\n        </div>\n        {/* <div className=\"text-center mt-2\" style={{ fontSize: '0.875rem', color: '#6c757d' }}>\n          © {new Date().getFullYear()} AgrarCommander GesmbH. Alle Rechte vorbehalten.\n        </div> */}\n      </Container>\n    </footer>\n  );\n};\n\nexport default Footer;\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Navigate, Link, useSearchParams } from 'react-router-dom';\nimport { Container, Row, Col, Card, Form, Button, Alert } from 'react-bootstrap';\nimport { loginUser, selectIsAuthenticated, selectAuthLoading, selectAuthError, clearError } from './authSlice';\n\nconst Login = () => {\n  const dispatch = useDispatch();\n  const isAuthenticated = useSelector(selectIsAuthenticated);\n  const loading = useSelector(selectAuthLoading);\n  const error = useSelector(selectAuthError);\n  const [searchParams] = useSearchParams();\n\n  const [formData, setFormData] = useState({\n    email: '',\n    password: '',\n  });\n\n  // Check for success messages from URL params\n  const resetSuccess = searchParams.get('reset') === 'success';\n  const verifiedSuccess = searchParams.get('verified') === 'success';\n  const verifiedError = searchParams.get('verified') === 'error';\n\n  useEffect(() => {\n    // Clear any existing errors when component mounts\n    if (error) {\n      dispatch(clearError());\n    }\n  }, [dispatch, error]);\n\n  // Redirect if already authenticated\n  if (isAuthenticated) {\n    return <Navigate to=\"/farms\" replace />;\n  }\n\n  const handleChange = (e) => {\n    setFormData({\n      ...formData,\n      [e.target.name]: e.target.value,\n    });\n  };\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n    try {\n      await dispatch(loginUser(formData)).unwrap();\n      // Navigation will happen automatically due to authentication state change\n    } catch (err) {\n      // Error is handled by the Redux slice\n      console.error('Login failed:', err);\n    }\n  };\n\n  return (\n    <Container className=\"py-5\">\n      <Row className=\"justify-content-center\">\n        <Col md={6} lg={4}>\n          <Card className=\"shadow\">\n            <Card.Body className=\"p-4\">\n              <div className=\"text-center mb-4\">\n                <h2 className=\"fw-bold\">Login</h2>\n                <p className=\"text-muted\">Melden Sie sich bei Ihrem Account an</p>\n              </div>\n\n              {resetSuccess && (\n                <Alert variant=\"success\">\n                  Ihr Passwort wurde erfolgreich geändert. Sie können sich nun anmelden.\n                </Alert>\n              )}\n\n              {verifiedSuccess && (\n                <Alert variant=\"success\">\n                  Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich nun anmelden.\n                </Alert>\n              )}\n\n              {verifiedError && (\n                <Alert variant=\"danger\">\n                  Der Bestätigungslink ist ungültig oder abgelaufen.\n                </Alert>\n              )}\n\n              {error && (\n                <Alert variant=\"danger\" dismissible onClose={() => dispatch(clearError())}>\n                  {error}\n                </Alert>\n              )}\n\n              <Form onSubmit={handleSubmit}>\n                <Form.Group className=\"mb-3\">\n                  <Form.Label>E-Mail-Adresse</Form.Label>\n                  <Form.Control\n                    type=\"email\"\n                    name=\"email\"\n                    value={formData.email}\n                    onChange={handleChange}\n                    required\n                    autoComplete=\"email\"\n                    placeholder=\"ihre.email@example.com\"\n                  />\n                </Form.Group>\n\n                <Form.Group className=\"mb-4\">\n                  <div className=\"d-flex justify-content-between align-items-center\">\n                    <Form.Label>Passwort</Form.Label>\n                    <Link to=\"/password-reset\" className=\"small text-decoration-none\">\n                      Passwort vergessen?\n                    </Link>\n                  </div>\n                  <Form.Control\n                    type=\"password\"\n                    name=\"password\"\n                    value={formData.password}\n                    onChange={handleChange}\n                    required\n                    autoComplete=\"current-password\"\n                    placeholder=\"Ihr Passwort\"\n                  />\n                </Form.Group>\n\n                <div className=\"d-grid\">\n                  <Button\n                    variant=\"primary\"\n                    type=\"submit\"\n                    size=\"lg\"\n                    disabled={loading}\n                  >\n                    {loading ? 'Anmelden...' : 'Anmelden'}\n                  </Button>\n                </div>\n              </Form>\n\n              <hr className=\"my-4\" />\n\n              <div className=\"text-center\">\n                <p className=\"mb-0\">\n                  Noch kein Account?{' '}\n                  <Link to=\"/register\" className=\"text-decoration-none\">\n                    Jetzt registrieren\n                  </Link>\n                </p>\n              </div>\n            </Card.Body>\n          </Card>\n        </Col>\n      </Row>\n    </Container>\n  );\n};\n\nexport default Login;\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Navigate, Link } from 'react-router-dom';\nimport { Container, Row, Col, Card, Form, Button, Alert } from 'react-bootstrap';\nimport { \n  registerUser, \n  selectIsAuthenticated, \n  selectAuthLoading, \n  selectAuthError, \n  selectRegistrationSuccess,\n  selectRegistrationMessage,\n  clearError,\n  resetRegistration\n} from './authSlice';\nimport api from '../utils/api';\n\nconst Register = () => {\n  const dispatch = useDispatch();\n  const isAuthenticated = useSelector(selectIsAuthenticated);\n  const loading = useSelector(selectAuthLoading);\n  const error = useSelector(selectAuthError);\n  const registrationSuccess = useSelector(selectRegistrationSuccess);\n  const registrationMessage = useSelector(selectRegistrationMessage);\n\n  const [formData, setFormData] = useState({\n    firstName: '',\n    lastName: '',\n    email: '',\n    password: '',\n    confirmPassword: '',\n    contractingAuthority: '',\n    privacyPolicy: false,\n    termsAndConditions: false,\n    agranaConsent1: false,\n    agranaConsent2: false,\n  });\n\n  const [contractingAuthorities, setContractingAuthorities] = useState([]);\n  const [formErrors, setFormErrors] = useState({});\n\n  useEffect(() => {\n    // Clear any existing errors and registration state when component mounts\n    dispatch(clearError());\n    dispatch(resetRegistration());\n\n    // Fetch contracting authorities\n    const fetchAuthorities = async () => {\n      try {\n        const response = await api.get('/contracting-authorities/');\n        setContractingAuthorities(response.data);\n        \n        // Preselect Agrana if it exists\n        const agranaAuthority = response.data.find(auth => auth.name === 'Agrana');\n        if (agranaAuthority) {\n          setFormData(prev => ({\n            ...prev,\n            contractingAuthority: agranaAuthority.id.toString()\n          }));\n        }\n      } catch (err) {\n        console.error('Failed to fetch contracting authorities:', err);\n      }\n    };\n\n    fetchAuthorities();\n  }, [dispatch]);\n\n  // Redirect if already authenticated\n  if (isAuthenticated) {\n    return <Navigate to=\"/dashboard\" replace />;\n  }\n\n  // Show success message if registration was successful\n  if (registrationSuccess) {\n    return (\n      <Container className=\"py-5\">\n        <Row className=\"justify-content-center\">\n          <Col md={8} lg={6}>\n            <Card className=\"shadow\">\n              <Card.Body className=\"p-4 text-center\">\n                <div className=\"mb-4 text-success\">\n                  <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" fill=\"currentColor\" className=\"bi bi-check-circle\" viewBox=\"0 0 16 16\">\n                    <path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z\"/>\n                    <path d=\"M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z\"/>\n                  </svg>\n                </div>\n                <h2 className=\"fw-bold mb-3\">Registrierung erfolgreich!</h2>\n                <p className=\"text-muted mb-4\">\n                  {registrationMessage || 'Bitte überprüfen Sie Ihre E-Mails, um Ihr Konto zu bestätigen.'}\n                </p>\n                <div className=\"d-grid gap-2\">\n                  <Link to=\"/login\" className=\"btn btn-primary btn-lg\">\n                    Zum Login\n                  </Link>\n                </div>\n              </Card.Body>\n            </Card>\n          </Col>\n        </Row>\n      </Container>\n    );\n  }\n\n  const handleChange = (e) => {\n    const value = e.target.type === 'checkbox' ? e.target.checked : e.target.value;\n    setFormData({\n      ...formData,\n      [e.target.name]: value,\n    });\n\n    // Clear field-specific error when user starts typing\n    if (formErrors[e.target.name]) {\n      setFormErrors({\n        ...formErrors,\n        [e.target.name]: '',\n      });\n    }\n  };\n\n  const validateForm = () => {\n    const errors = {};\n\n    if (!formData.firstName.trim()) {\n      errors.firstName = 'Vorname ist erforderlich';\n    }\n\n    if (!formData.lastName.trim()) {\n      errors.lastName = 'Nachname ist erforderlich';\n    }\n\n    if (!formData.email.trim()) {\n      errors.email = 'E-Mail-Adresse ist erforderlich';\n    } else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n      errors.email = 'Ungültige E-Mail-Adresse';\n    }\n\n    if (!formData.password) {\n      errors.password = 'Passwort ist erforderlich';\n    } else if (formData.password.length < 12) {\n      errors.password = 'Passwort muss mindestens 12 Zeichen lang sein';\n    }\n\n    if (!formData.confirmPassword) {\n      errors.confirmPassword = 'Passwort bestätigen ist erforderlich';\n    } else if (formData.password !== formData.confirmPassword) {\n      errors.confirmPassword = 'Passwörter stimmen nicht überein';\n    }\n\n    if (!formData.privacyPolicy) {\n      errors.privacyPolicy = 'Sie müssen die Datenschutzbestimmungen akzeptieren.';\n    }\n\n    if (!formData.termsAndConditions) {\n      errors.termsAndConditions = 'Sie müssen die AGB akzeptieren.';\n    }\n\n    // Check if Agrana is selected\n    const selectedAuthority = contractingAuthorities.find(\n      auth => auth.id.toString() === formData.contractingAuthority\n    );\n    \n    if (selectedAuthority && selectedAuthority.name === 'Agrana') {\n      if (!formData.agranaConsent1) {\n        errors.agranaConsent1 = 'Sie müssen dieser Einwilligung zustimmen, um fortzufahren.';\n      }\n      if (!formData.agranaConsent2) {\n        errors.agranaConsent2 = 'Sie müssen dieser Einwilligung zustimmen, um fortzufahren.';\n      }\n    }\n\n    return errors;\n  };\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n\n    const errors = validateForm();\n    if (Object.keys(errors).length > 0) {\n      setFormErrors(errors);\n      return;\n    }\n\n    try {\n      await dispatch(registerUser({\n        firstName: formData.firstName,\n        lastName: formData.lastName,\n        email: formData.email,\n        password: formData.password,\n        contractingAuthority: formData.contractingAuthority || null,\n      })).unwrap();\n      // Navigation will happen automatically due to authentication state change\n    } catch (err) {\n      // Error is handled by the Redux slice\n      console.error('Registration failed:', err);\n    }\n  };\n\n  return (\n    <Container className=\"py-5\">\n      <Row className=\"justify-content-center\">\n        <Col md={8} lg={6}>\n          <Card className=\"shadow\">\n            <Card.Body className=\"p-4\">\n              <div className=\"text-center mb-4\">\n                <h2 className=\"fw-bold\">Registrierung</h2>\n                <p className=\"text-muted\">Erstellen Sie Ihren Account</p>\n              </div>\n\n              {error && (\n                <Alert variant=\"danger\" dismissible onClose={() => dispatch(clearError())}>\n                  {error}\n                </Alert>\n              )}\n\n              <Form onSubmit={handleSubmit}>\n                <Row>\n                  <Col md={6}>\n                    <Form.Group className=\"mb-3\">\n                      <Form.Label>Vorname</Form.Label>\n                      <Form.Control\n                        type=\"text\"\n                        name=\"firstName\"\n                        value={formData.firstName}\n                        onChange={handleChange}\n                        required\n                        autoComplete=\"given-name\"\n                        placeholder=\"Ihr Vorname\"\n                        isInvalid={!!formErrors.firstName}\n                      />\n                      <Form.Control.Feedback type=\"invalid\">\n                        {formErrors.firstName}\n                      </Form.Control.Feedback>\n                    </Form.Group>\n                  </Col>\n                  <Col md={6}>\n                    <Form.Group className=\"mb-3\">\n                      <Form.Label>Nachname</Form.Label>\n                      <Form.Control\n                        type=\"text\"\n                        name=\"lastName\"\n                        value={formData.lastName}\n                        onChange={handleChange}\n                        required\n                        autoComplete=\"family-name\"\n                        placeholder=\"Ihr Nachname\"\n                        isInvalid={!!formErrors.lastName}\n                      />\n                      <Form.Control.Feedback type=\"invalid\">\n                        {formErrors.lastName}\n                      </Form.Control.Feedback>\n                    </Form.Group>\n                  </Col>\n                </Row>\n\n                <Form.Group className=\"mb-3\">\n                  <Form.Label>E-Mail-Adresse</Form.Label>\n                  <Form.Control\n                    type=\"email\"\n                    name=\"email\"\n                    value={formData.email}\n                    onChange={handleChange}\n                    required\n                    autoComplete=\"email\"\n                    placeholder=\"ihre.email@example.com\"\n                    isInvalid={!!formErrors.email}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formErrors.email}\n                  </Form.Control.Feedback>\n                </Form.Group>\n\n                <Form.Group className=\"mb-3\">\n                  <Form.Label>Passwort</Form.Label>\n                  <Form.Control\n                    type=\"password\"\n                    name=\"password\"\n                    value={formData.password}\n                    onChange={handleChange}\n                    required\n                    autoComplete=\"new-password\"\n                    placeholder=\"Mindestens 12 Zeichen\"\n                    isInvalid={!!formErrors.password}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formErrors.password}\n                  </Form.Control.Feedback>\n                </Form.Group>\n\n                <Form.Group className=\"mb-4\">\n                  <Form.Label>Passwort bestätigen</Form.Label>\n                  <Form.Control\n                    type=\"password\"\n                    name=\"confirmPassword\"\n                    value={formData.confirmPassword}\n                    onChange={handleChange}\n                    required\n                    autoComplete=\"new-password\"\n                    placeholder=\"Passwort wiederholen\"\n                    isInvalid={!!formErrors.confirmPassword}\n                  />\n                  <Form.Control.Feedback type=\"invalid\">\n                    {formErrors.confirmPassword}\n                  </Form.Control.Feedback>\n                </Form.Group>\n\n                {contractingAuthorities.length > 0 && (\n                  <Form.Group className=\"mb-4\">\n                    <Form.Label>Vergebende Stelle (Optional)</Form.Label>\n                    <Form.Select\n                      name=\"contractingAuthority\"\n                      value={formData.contractingAuthority}\n                      onChange={handleChange}\n                    >\n                      <option value=\"\">Keine ausgewählt</option>\n                      {contractingAuthorities.map(authority => (\n                        <option key={authority.id} value={authority.id}>\n                          {authority.name}\n                        </option>\n                      ))}\n                    </Form.Select>\n                  </Form.Group>\n                )}\n\n                <Form.Group className=\"mb-3\">\n                  <Form.Check\n                    type=\"checkbox\"\n                    name=\"privacyPolicy\"\n                    id=\"privacyPolicy\"\n                    label={\n                      <span>\n                        Ich habe die <a href=\"https://www.agrarcommander.at/datenschutzerklaerung/\" target=\"_blank\" rel=\"noopener noreferrer\">Datenschutzbestimmungen</a> gelesen und akzeptiere sie.\n                      </span>\n                    }\n                    checked={formData.privacyPolicy}\n                    onChange={handleChange}\n                    isInvalid={!!formErrors.privacyPolicy}\n                    feedback={formErrors.privacyPolicy}\n                    feedbackType=\"invalid\"\n                  />\n                </Form.Group>\n\n                <Form.Group className=\"mb-4\">\n                  <Form.Check\n                    type=\"checkbox\"\n                    name=\"termsAndConditions\"\n                    id=\"termsAndConditions\"\n                    label={\n                      <span>\n                        Ich habe die <a href=\"https://www.agrarcommander.at/agb/\" target=\"_blank\" rel=\"noopener noreferrer\">AGB</a> gelesen und akzeptiere sie.\n                      </span>\n                    }\n                    checked={formData.termsAndConditions}\n                    onChange={handleChange}\n                    isInvalid={!!formErrors.termsAndConditions}\n                    feedback={formErrors.termsAndConditions}\n                    feedbackType=\"invalid\"\n                  />\n                </Form.Group>\n\n                {(() => {\n                  const selectedAuthority = contractingAuthorities.find(\n                    auth => auth.id.toString() === formData.contractingAuthority\n                  );\n                  return selectedAuthority && selectedAuthority.name === 'Agrana' && (\n                    <>\n                      <Form.Group className=\"mb-3\">\n                        <Form.Check\n                          type=\"checkbox\"\n                          name=\"agranaConsent1\"\n                          id=\"agranaConsent1\"\n                          label={\n                            <span style={{ fontSize: '0.9rem' }}>\n                              Durch die Teilnahme am CO₂-Programm erkläre ich mich einverstanden, dass meine in Cultivate verarbeiteten Betriebs- und Personen-Daten (Personendaten: Name, Adresse, Betriebsdaten, Schläge und erfasste Maßnahmen pro Schlag) für die Berechnung des CO2 Footprints meiner Erzeugnisse („CO2 Berechnung\") herangezogen und von der AgrarCommander GesmbH („AC\") hierfür zu folgenden Zwecken an die RWA Raiffeisen Ware Austria AG („RWA\") übermittelt werden. RWA verarbeitet diese Daten zu Zwecken der Durchführung der CO2 Berechnung, dem allfälligen Ankauf und Weiterverkauf der Produkte, Rückverfolgbarkeit in den Handelsstufen sowie der Qualitätssicherung im Rahmen der RWA-Standards und Verwaltung, Erstellung anonymisierter Benchmarks, Branchenauswertungen und Studien (zB Emissions-Durchschnittswerte, Nachhaltigkeitsstudien, Marktstudien). AC verarbeitet meine Daten zudem zur Erstellung anonymisierter Benchmarks, Branchenauswertungen und Studien (zB Emissions-Durchschnittswerte, Nachhaltigkeitsstudien, Marktstudien). Weiters erkläre ich mich einverstanden, dass die Ergebnisse der CO2 Berechnung sowie meine Betriebsdaten in aggregierter Form an die Agrana weitergegeben werden, die diese Daten als Verantwortlicher für die Zwecke der Durchführung des Agrana CO2 Programmes innerhalb der Unternehmensgruppe von Agrana  verarbeitet.\n                              Ich nehme zur Kenntnis, dass eine vollständige CO2 Berechnung nur möglich ist, wenn von mir alle folgenden Prozessschritte des Erntejahres inklusive der diesen Schritten in Cultivate zugeteilten Informationsanforderungen lückenlos dokumentiert werden: Bodenbearbeitung, Anbau von Zwischenfrüchten, Anbau der Hauptfrucht, Umbruch der Hauptfrucht, organische Düngung, mineralische Düngung, Bewässerung, Ausbringung von Pflanzenschutzmitteln sowie die Ernte Hauptfrucht inklusive Erntemengen. Ich übernehme die Verantwortung für die vollständige und korrekte Dokumentation.\n                            </span>\n                          }\n                          checked={formData.agranaConsent1}\n                          onChange={handleChange}\n                          isInvalid={!!formErrors.agranaConsent1}\n                          feedback={formErrors.agranaConsent1}\n                          feedbackType=\"invalid\"\n                        />\n                      </Form.Group>\n\n                      <Form.Group className=\"mb-4\">\n                        <Form.Check\n                          type=\"checkbox\"\n                          name=\"agranaConsent2\"\n                          id=\"agranaConsent2\"\n                          label={\n                            <span style={{ fontSize: '0.9rem' }}>\n                              Ich stimme zu, dass meine Mailadresse und Telefonnummer an die RWA und Agrana zum Zweck der Beratung zu CO2-Reduktionsmaßnahmen übermittelt werden und stimme einer diesbezüglichen Kontaktaufnahme durch RWA und Agrana über die angeführten Kommunikationskanäle zu.\n                            </span>\n                          }\n                          checked={formData.agranaConsent2}\n                          onChange={handleChange}\n                          isInvalid={!!formErrors.agranaConsent2}\n                          feedback={formErrors.agranaConsent2}\n                          feedbackType=\"invalid\"\n                        />\n                      </Form.Group>\n                    </>\n                  );\n                })()}\n\n                <div className=\"d-grid\">\n                  <Button\n                    variant=\"primary\"\n                    type=\"submit\"\n                    size=\"lg\"\n                    disabled={loading}\n                  >\n                    {loading ? 'Registrieren...' : 'Account erstellen'}\n                  </Button>\n                </div>\n              </Form>\n\n              <hr className=\"my-4\" />\n\n              <div className=\"text-center\">\n                <p className=\"mb-0\">\n                  Bereits einen Account?{' '}\n                  <Link to=\"/login\" className=\"text-decoration-none\">\n                    Jetzt anmelden\n                  </Link>\n                </p>\n              </div>\n            </Card.Body>\n          </Card>\n        </Col>\n      </Row>\n    </Container>\n  );\n};\n\nexport default Register;\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Container, Row, Col, Card, Form, Button, Alert } from 'react-bootstrap';\n\nconst PasswordReset = () => {\n  const [email, setEmail] = useState('');\n  const [loading, setLoading] = useState(false);\n  const [success, setSuccess] = useState(false);\n  const [error, setError] = useState(null);\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n    setLoading(true);\n    setError(null);\n    setSuccess(false);\n\n    try {\n      const response = await fetch('/api/auth/password-reset/', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'application/json',\n        },\n        body: JSON.stringify({ email }),\n      });\n\n      const data = await response.json();\n\n      if (response.ok) {\n        setSuccess(true);\n        setEmail('');\n      } else {\n        setError(data.message || 'Ein Fehler ist aufgetreten.');\n      }\n    } catch (err) {\n      setError('Verbindung zum Server fehlgeschlagen.');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return (\n    <Container className=\"py-5\">\n      <Row className=\"justify-content-center\">\n        <Col md={6} lg={4}>\n          <Card className=\"shadow\">\n            <Card.Body className=\"p-4\">\n              <div className=\"text-center mb-4\">\n                <h2 className=\"fw-bold\">Passwort vergessen?</h2>\n                <p className=\"text-muted\">Geben Sie Ihre E-Mail-Adresse ein, um Ihr Passwort zurückzusetzen.</p>\n              </div>\n\n              {error && (\n                <Alert variant=\"danger\" dismissible onClose={() => setError(null)}>\n                  {error}\n                </Alert>\n              )}\n\n              {success && (\n                <Alert variant=\"success\">\n                  Falls ein Konto mit dieser E-Mail-Adresse existiert, wurde ein Link zum Zurücksetzen des Passworts gesendet.\n                </Alert>\n              )}\n\n              <Form onSubmit={handleSubmit}>\n                <Form.Group className=\"mb-4\">\n                  <Form.Label>E-Mail-Adresse</Form.Label>\n                  <Form.Control\n                    type=\"email\"\n                    value={email}\n                    onChange={(e) => setEmail(e.target.value)}\n                    required\n                    placeholder=\"ihre.email@example.com\"\n                  />\n                </Form.Group>\n\n                <div className=\"d-grid gap-2\">\n                  <Button\n                    variant=\"primary\"\n                    type=\"submit\"\n                    size=\"lg\"\n                    disabled={loading}\n                  >\n                    {loading ? 'Senden...' : 'Link senden'}\n                  </Button>\n                  <Link to=\"/login\" className=\"btn btn-outline-secondary\">\n                    Zurück zum Login\n                  </Link>\n                </div>\n              </Form>\n            </Card.Body>\n          </Card>\n        </Col>\n      </Row>\n    </Container>\n  );\n};\n\nexport default PasswordReset;\n","import React, { useState } from 'react';\nimport { useParams, useNavigate, Link } from 'react-router-dom';\nimport { Container, Row, Col, Card, Form, Button, Alert } from 'react-bootstrap';\n\nconst PasswordResetConfirm = () => {\n  const { uid, token } = useParams();\n  const navigate = useNavigate();\n  const [password, setPassword] = useState('');\n  const [passwordConfirm, setPasswordConfirm] = useState('');\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState(null);\n\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n    setLoading(true);\n    setError(null);\n\n    // Validate passwords match\n    if (password !== passwordConfirm) {\n      setError('Die Passwörter stimmen nicht überein.');\n      setLoading(false);\n      return;\n    }\n\n    // Validate password length\n    if (password.length < 8) {\n      setError('Das Passwort muss mindestens 12 Zeichen lang sein.');\n      setLoading(false);\n      return;\n    }\n\n    try {\n      const response = await fetch('/api/auth/password-reset/confirm/', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'application/json',\n        },\n        body: JSON.stringify({\n          uid,\n          token,\n          new_password: password,\n          new_password_confirm: passwordConfirm,\n        }),\n      });\n\n      const data = await response.json();\n\n      if (response.ok) {\n        // Success - redirect to login with success message\n        navigate('/login?reset=success');\n      } else {\n        setError(data.message || 'Ein Fehler ist aufgetreten. Der Link könnte abgelaufen sein.');\n      }\n    } catch (err) {\n      setError('Verbindung zum Server fehlgeschlagen.');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  return (\n    <Container className=\"py-5\">\n      <Row className=\"justify-content-center\">\n        <Col md={6} lg={4}>\n          <Card className=\"shadow\">\n            <Card.Body className=\"p-4\">\n              <div className=\"text-center mb-4\">\n                <h2 className=\"fw-bold\">Neues Passwort vergeben</h2>\n                <p className=\"text-muted\">Bitte geben Sie Ihr neues Passwort ein.</p>\n              </div>\n\n              {error && (\n                <Alert variant=\"danger\" dismissible onClose={() => setError(null)}>\n                  {error}\n                </Alert>\n              )}\n\n              <Form onSubmit={handleSubmit}>\n                <Form.Group className=\"mb-3\">\n                  <Form.Label>Neues Passwort</Form.Label>\n                  <Form.Control\n                    type=\"password\"\n                    value={password}\n                    onChange={(e) => setPassword(e.target.value)}\n                    required\n                    minLength={8}\n                    placeholder=\"Mindestens 12 Zeichen\"\n                  />\n                  <Form.Text className=\"text-muted\">\n                    Das Passwort muss mindestens 12 Zeichen lang sein.\n                  </Form.Text>\n                </Form.Group>\n\n                <Form.Group className=\"mb-4\">\n                  <Form.Label>Passwort bestätigen</Form.Label>\n                  <Form.Control\n                    type=\"password\"\n                    value={passwordConfirm}\n                    onChange={(e) => setPasswordConfirm(e.target.value)}\n                    required\n                    minLength={8}\n                    placeholder=\"Passwort wiederholen\"\n                  />\n                </Form.Group>\n\n                <div className=\"d-grid gap-2\">\n                  <Button\n                    variant=\"primary\"\n                    type=\"submit\"\n                    size=\"lg\"\n                    disabled={loading}\n                  >\n                    {loading ? 'Wird gespeichert...' : 'Passwort ändern'}\n                  </Button>\n                  <Link to=\"/login\" className=\"btn btn-outline-secondary\">\n                    Zurück zum Login\n                  </Link>\n                </div>\n              </Form>\n            </Card.Body>\n          </Card>\n        </Col>\n      </Row>\n    </Container>\n  );\n};\n\nexport default PasswordResetConfirm;\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';\nimport api from '../utils/api';\n\n// Async thunks\nexport const fetchFarms = createAsyncThunk(\n    'farms/fetchFarms',\n    // NOTE:\n    // The farms page should be fast and must not fetch operations for every schlag.\n    // Loading operations can easily blow up payload size after imports and cause the\n    // farms page to error/timeout.\n    async ({ includeGeometry = false, includeOperations = false } = {}, { rejectWithValue }) => {\n        try {\n            const params = {};\n            if (includeGeometry) params.include_geometry = true;\n            if (includeOperations) params.include_operations = true;\n            \n            const response = await api.get('/farms/', { params });\n            return response.data.results || response.data;\n        } catch (error) {\n            return rejectWithValue(error.response?.data?.message || 'Fehler beim Laden der Betriebe');\n        }\n    }\n);\n\nexport const fetchFarmYear = createAsyncThunk(\n    'farms/fetchFarmYear',\n    async (farmYearId, { rejectWithValue }) => {\n        try {\n            const response = await api.get(`/farm-years/${farmYearId}/`);\n            return response.data;\n        } catch (error) {\n            return rejectWithValue(error.response?.data?.message || 'Fehler beim Laden der Betriebsdaten');\n        }\n    }\n);\n\nexport const fetchFarmMapData = createAsyncThunk(\n    'farms/fetchFarmMapData',\n    async (farmYearId, { rejectWithValue }) => {\n        try {\n            const response = await api.get(`/farm-years/${farmYearId}/map_data/`);\n            return response.data;\n        } catch (error) {\n            return rejectWithValue(error.response?.data?.message || 'Fehler beim Laden der Kartendaten');\n        }\n    }\n);\n\nexport const fetchFarmStatistics = createAsyncThunk(\n    'farms/fetchFarmStatistics',\n    async (farmYearId, { rejectWithValue, getState }) => {\n        const state = getState();\n\n        try {\n            const response = await api.get(`/farm-years/${farmYearId}/statistics/`);\n            return { farmYearId, data: response.data };\n        } catch (error) {\n            console.error('fetchFarmStatistics: Error fetching data for farmYearId:', farmYearId, error);\n            return rejectWithValue(error.response?.data?.message || 'Fehler beim Laden der Statistiken');\n        }\n    }\n);\n\nexport const importXMLFile = createAsyncThunk(\n    'farms/importXMLFile',\n    async (formData, { rejectWithValue }) => {\n        try {\n            const response = await api.post('/xml-import/upload/', formData, {\n                headers: {\n                    'Content-Type': 'multipart/form-data',\n                },\n            });\n            return response.data;\n        } catch (error) {\n            return rejectWithValue(error.response?.data?.error || 'Fehler beim XML-Import');\n        }\n    }\n);\n\nexport const batchImportXMLFiles = createAsyncThunk(\n    'farms/batchImportXMLFiles',\n    async (formData, { rejectWithValue }) => {\n        try {\n            const response = await api.post('/xml-import/batch_upload/', formData, {\n                headers: {\n                    'Content-Type': 'multipart/form-data',\n                },\n            });\n            return response.data;\n        } catch (error) {\n            return rejectWithValue(error.response?.data?.error || 'Fehler beim Batch-XML-Import');\n        }\n    }\n);\n\nexport const deleteAllFarms = createAsyncThunk(\n    'farms/deleteAllFarms',\n    async (_, { rejectWithValue }) => {\n        try {\n            const response = await api.delete('/farms/delete_all_data/');\n            return response.data;\n        } catch (error) {\n            return rejectWithValue(error.response?.data?.error || 'Fehler beim Löschen aller Betriebe');\n        }\n    }\n);\n\nexport const deleteFarm = createAsyncThunk(\n    'farms/deleteFarm',\n    async (farmId, { rejectWithValue }) => {\n        try {\n            const response = await api.delete(`/farms/${farmId}/`);\n            return { ...response.data, farmId };\n        } catch (error) {\n            return rejectWithValue(error.response?.data?.error || 'Fehler beim Löschen des Betriebs');\n        }\n    }\n);\n\nconst farmSlice = createSlice({\n    name: 'farms',\n    initialState: {\n        farms: [],\n        selectedFarm: null,\n        selectedYear: null,\n        currentFarmYear: null,\n        mapData: null,\n        statistics: null,\n        statisticsCache: {}, // Cache for statistics data\n        loadedStatisticsIds: [], // Track which statistics are loaded\n        loading: false,\n        mapLoading: false,\n        statisticsLoading: false,\n        importLoading: false,\n        error: null,\n        importError: null,\n        importSuccess: null,\n    },\n    reducers: {\n        setSelectedFarm: (state, action) => {\n            state.selectedFarm = action.payload;\n            state.selectedYear = null;\n            state.currentFarmYear = null;\n            // Clear all data that's farm-specific\n            state.mapData = null;\n            state.statistics = null;\n            // Don't clear the entire cache, but mark it as potentially stale\n        },\n        setSelectedYear: (state, action) => {\n            state.selectedYear = action.payload;\n            state.currentFarmYear = null;\n            // Clear data that's year-specific\n            state.mapData = null;\n            state.statistics = null;\n        },\n        clearError: (state) => {\n            state.error = null;\n        },\n        clearImportError: (state) => {\n            state.importError = null;\n        },\n        setImportSuccess: (state, action) => {\n            state.importSuccess = action.payload;\n        },\n        clearImportSuccess: (state) => {\n            state.importSuccess = null;\n        },\n        updateFarmInList: (state, action) => {\n            const updatedFarm = action.payload;\n            const index = state.farms.findIndex(farm => farm.id === updatedFarm.id);\n            if (index !== -1) {\n                state.farms[index] = updatedFarm;\n            } else {\n                state.farms.unshift(updatedFarm);\n            }\n        }\n    },\n    extraReducers: (builder) => {\n        builder\n            // fetchFarms\n            .addCase(fetchFarms.pending, (state) => {\n                state.loading = true;\n                state.error = null;\n            })\n            .addCase(fetchFarms.fulfilled, (state, action) => {\n                state.loading = false;\n                state.farms = action.payload;\n                state.error = null;\n            })\n            .addCase(fetchFarms.rejected, (state, action) => {\n                state.loading = false;\n                state.error = action.payload;\n            })\n\n            // fetchFarmYear\n            .addCase(fetchFarmYear.pending, (state) => {\n                state.loading = true;\n            })\n            .addCase(fetchFarmYear.fulfilled, (state, action) => {\n                state.loading = false;\n                state.currentFarmYear = action.payload;\n            })\n            .addCase(fetchFarmYear.rejected, (state, action) => {\n                state.loading = false;\n                state.error = action.payload;\n            })\n\n            // fetchFarmMapData\n            .addCase(fetchFarmMapData.pending, (state) => {\n                state.mapLoading = true;\n            })\n            .addCase(fetchFarmMapData.fulfilled, (state, action) => {\n                state.mapLoading = false;\n                state.mapData = action.payload;\n            })\n            .addCase(fetchFarmMapData.rejected, (state, action) => {\n                state.mapLoading = false;\n                state.error = action.payload;\n            })\n\n            // fetchFarmStatistics\n            .addCase(fetchFarmStatistics.pending, (state) => {\n                state.statisticsLoading = true;\n            })\n            .addCase(fetchFarmStatistics.fulfilled, (state, action) => {\n                state.statisticsLoading = false;\n\n                // Handle both cached data and new data\n                if (action.payload.farmYearId && action.payload.data) {\n                    // New data with farmYearId wrapper\n                    const { farmYearId, data } = action.payload;\n                    state.statistics = data;\n                    state.statisticsCache[farmYearId] = data;\n                    if (!state.loadedStatisticsIds.includes(farmYearId)) {\n                        state.loadedStatisticsIds.push(farmYearId);\n                    }\n                } else {\n                    // Cached data or direct data\n                    state.statistics = action.payload;\n                }\n            })\n            .addCase(fetchFarmStatistics.rejected, (state, action) => {\n                state.statisticsLoading = false;\n                state.error = action.payload;\n            })\n\n            // importXMLFile\n            .addCase(importXMLFile.pending, (state) => {\n                state.importLoading = true;\n                state.importError = null;\n                state.importSuccess = null;\n            })\n            .addCase(importXMLFile.fulfilled, (state, action) => {\n                state.importLoading = false;\n                state.importSuccess = action.payload.message;\n\n                // Update farms list if a new farm was created\n                if (action.payload.farm) {\n                    const existingFarmIndex = state.farms.findIndex(\n                        farm => farm.id === action.payload.farm.id\n                    );\n                    if (existingFarmIndex !== -1) {\n                        // Update existing farm\n                        state.farms[existingFarmIndex] = action.payload.farm;\n                    } else {\n                        // Add new farm\n                        state.farms.unshift(action.payload.farm);\n                    }\n                }\n            })\n            .addCase(importXMLFile.rejected, (state, action) => {\n                state.importLoading = false;\n                state.importError = action.payload;\n            })\n\n            // batchImportXMLFiles\n            .addCase(batchImportXMLFiles.pending, (state) => {\n                state.importLoading = true;\n                state.importError = null;\n                state.importSuccess = null;\n            })\n            .addCase(batchImportXMLFiles.fulfilled, (state, action) => {\n                state.importLoading = false;\n                state.importSuccess = action.payload.message;\n\n                // Update farms list with all imported farms\n                if (action.payload.imported_farms && action.payload.imported_farms.length > 0) {\n                    action.payload.imported_farms.forEach(farm => {\n                        const existingFarmIndex = state.farms.findIndex(\n                            existingFarm => existingFarm.id === farm.id\n                        );\n                        if (existingFarmIndex !== -1) {\n                            // Update existing farm\n                            state.farms[existingFarmIndex] = farm;\n                        } else {\n                            // Add new farm\n                            state.farms.unshift(farm);\n                        }\n                    });\n                }\n            })\n            .addCase(batchImportXMLFiles.rejected, (state, action) => {\n                state.importLoading = false;\n                state.importError = action.payload;\n            })\n\n            // deleteAllFarms\n            .addCase(deleteAllFarms.pending, (state) => {\n                state.loading = true;\n                state.error = null;\n            })\n            .addCase(deleteAllFarms.fulfilled, (state, action) => {\n                state.loading = false;\n                state.farms = [];\n                state.selectedFarm = null;\n                state.selectedYear = null;\n                state.currentFarmYear = null;\n                state.mapData = null;\n                state.statistics = null;\n                state.statisticsCache = {};\n                state.loadedStatisticsIds = [];\n                state.importSuccess = action.payload.message;\n            })\n            .addCase(deleteAllFarms.rejected, (state, action) => {\n                state.loading = false;\n                state.error = action.payload;\n            })\n\n            // deleteFarm\n            .addCase(deleteFarm.pending, (state) => {\n                state.loading = true;\n                state.error = null;\n            })\n            .addCase(deleteFarm.fulfilled, (state, action) => {\n                state.loading = false;\n                // Remove farm from list\n                state.farms = state.farms.filter(farm => farm.id !== action.payload.farmId);\n\n                // Clear selected farm if it was deleted\n                if (state.selectedFarm && state.selectedFarm.id === action.payload.farmId) {\n                    state.selectedFarm = null;\n                    state.selectedYear = null;\n                    state.currentFarmYear = null;\n                    state.mapData = null;\n                    state.statistics = null;\n                }\n\n                state.importSuccess = action.payload.message;\n            })\n            .addCase(deleteFarm.rejected, (state, action) => {\n                state.loading = false;\n                state.error = action.payload;\n            });\n    },\n});\n\nexport const { \n    setSelectedFarm, \n    setSelectedYear, \n    clearError, \n    clearImportError, \n    setImportSuccess,\n    clearImportSuccess,\n    updateFarmInList \n} = farmSlice.actions;\n\nexport default farmSlice.reducer;\n\n// Selectors\nexport const selectCurrentFarmYear = (state) => {\n    const { selectedFarm, selectedYear } = state.farms;\n    if (!selectedFarm || !selectedYear) return null;\n    return selectedFarm.years?.find(year => year.year === selectedYear);\n};\n\nexport const selectMapData = (state) => state.farms.mapData;\nexport const selectStatistics = (state) => state.farms.statistics;\nexport const selectFarms = (state) => state.farms.farms;\nexport const selectSelectedFarm = (state) => state.farms.selectedFarm;\nexport const selectSelectedYear = (state) => state.farms.selectedYear;\nexport const selectLoading = (state) => state.farms.loading;\nexport const selectMapLoading = (state) => state.farms.mapLoading;\nexport const selectStatisticsLoading = (state) => state.farms.statisticsLoading;\nexport const selectImportLoading = (state) => state.farms.importLoading;\nexport const selectError = (state) => state.farms.error;\nexport const selectImportError = (state) => state.farms.importError;\nexport const selectImportSuccess = (state) => state.farms.importSuccess;\n","import { useState, useEffect, useRef } from 'react';\nimport api from '../../../utils/api';\n\n/**\n * Custom hook for managing farm data loading and operations data\n */\nexport const useFarmData = (farm, expanded) => {\n  const [farmDetails, setFarmDetails] = useState(null);\n  const [loading, setLoading] = useState(false);\n  const [error, setError] = useState(null);\n  const loadingRef = useRef(false);\n  const [schlagOperations, setSchlagOperations] = useState({});\n  const [schlagOperationsDetails, setSchlagOperationsDetails] = useState({});\n  const [operationsLoading, setOperationsLoading] = useState(false);\n  const loadedYearIdsRef = useRef(new Set());\n\n  const mergeOperationsIntoYears = (years, operations) => {\n    // Build schlag_id -> operations[] map\n    const opBySchlagId = {};\n    (operations || []).forEach(op => {\n      const sid = op?.farming_info?.schlag?.id;\n      if (!sid) return;\n      if (!opBySchlagId[sid]) opBySchlagId[sid] = [];\n      opBySchlagId[sid].push(op);\n    });\n\n    // Return a new years structure with schlag.operations filled\n    return (years || []).map(y => ({\n      ...y,\n      feldstuecke: (y.feldstuecke || []).map(fs => ({\n        ...fs,\n        schlaege: (fs.schlaege || []).map(s => ({\n          ...s,\n          operations: opBySchlagId[s.id] || [],\n        }))\n      }))\n    }));\n  };\n\n  const loadOperationsForFarmYear = async (farmYearId) => {\n    if (!farmYearId) return;\n    // Prevent duplicate loads\n    if (loadedYearIdsRef.current.has(farmYearId)) return;\n    loadedYearIdsRef.current.add(farmYearId);\n    setOperationsLoading(true);\n    try {\n      const response = await api.get('/operations/by_farm_year/', {\n        params: { farm_year: farmYearId }\n      });\n      const ops = response.data || [];\n\n      // Merge into farmDetails\n      setFarmDetails(prev => {\n        if (!prev?.years) return prev;\n        const updatedYears = prev.years.map(y => {\n          if (y.id !== farmYearId) return y;\n          return {\n            ...y,\n            feldstuecke: (y.feldstuecke || []).map(fs => ({\n              ...fs,\n              schlaege: (fs.schlaege || []).map(s => ({\n                ...s,\n                operations: [], // will be filled by merge\n              }))\n            }))\n          };\n        });\n        return {\n          ...prev,\n          years: mergeOperationsIntoYears(updatedYears, ops),\n        };\n      });\n\n      // Update derived maps for icons/counts\n      setSchlagOperationsDetails(prev => {\n        const next = { ...prev };\n        (ops || []).forEach(op => {\n          const sid = op?.farming_info?.schlag?.id;\n          if (!sid) return;\n          if (!next[sid]) next[sid] = [];\n          next[sid].push(op);\n        });\n        return next;\n      });\n      setSchlagOperations(prev => {\n        const next = { ...prev };\n        (ops || []).forEach(op => {\n          const sid = op?.farming_info?.schlag?.id;\n          const typeName = op?.operation_type?.name;\n          if (!sid || !typeName) return;\n          if (!next[sid]) next[sid] = new Set();\n          next[sid].add(typeName);\n        });\n        return next;\n      });\n    } catch (e) {\n      console.error('Error loading operations for farm year', farmYearId, e);\n      setError('Fehler beim Laden der Maßnahmen');\n    } finally {\n      setOperationsLoading(false);\n    }\n  };\n\n  const loadSchlagOperations = async (years) => {\n    if (!years) return;\n\n    const operationsMap = {};\n    const operationsDetailsMap = {};\n\n    // Use pre-loaded operations data from the schlag.operations array\n    for (const year of years) {\n      if (!year.feldstuecke) continue;\n\n      for (const feldstueck of year.feldstuecke) {\n        if (!feldstueck.schlaege) continue;\n\n        for (const schlag of feldstueck.schlaege) {\n          // Use the pre-loaded operations from schlag.operations\n          const operations = schlag.operations || [];\n          \n          if (operations.length > 0) {\n            const schlagId = schlag.id;\n            if (!operationsMap[schlagId]) {\n              operationsMap[schlagId] = new Set();\n            }\n            if (!operationsDetailsMap[schlagId]) {\n              operationsDetailsMap[schlagId] = [];\n            }\n            \n            operations.forEach(op => {\n              if (op.operation_type?.name) {\n                operationsMap[schlagId].add(op.operation_type.name);\n              }\n              operationsDetailsMap[schlagId].push(op);\n            });\n          }\n        }\n      }\n    }\n\n    setSchlagOperations(operationsMap);\n    setSchlagOperationsDetails(operationsDetailsMap);\n  };\n\n  const loadFarmDetails = async (forceReload = false) => {\n    if (!farm) return null;\n    \n    // If we need to force reload (e.g., after updates), fetch fresh data\n    if (forceReload) {\n      // Prevent concurrent fetches\n      if (loadingRef.current) return;\n\n      loadingRef.current = true;\n      setLoading(true);\n      setError(null);\n      try {\n        const response = await api.get(`/farms/${farm.id}/?include_operations=true`);\n        const farmData = response.data;\n        setFarmDetails(farmData);\n        \n        // Load all operations data immediately after loading farm details\n        if (farmData?.years) {\n          await loadSchlagOperations(farmData.years);\n        }\n        \n        return farmData;\n      } catch (error) {\n        console.error('Error loading farm details:', error);\n        setError('Fehler beim Laden der Betriebsdetails');\n        return null;\n      } finally {\n        setLoading(false);\n        loadingRef.current = false;\n      }\n    }\n    \n    // Use the farm prop data directly\n    if (!farmDetails || farmDetails.id !== farm.id || farmDetails !== farm) {\n      setFarmDetails(farm);\n      // Extract operations from the farm prop data if available\n      if (farm?.years) {\n        loadSchlagOperations(farm.years);\n        // Mark all years as loaded since operations come with the farm data\n        farm.years.forEach(y => loadedYearIdsRef.current.add(y.id));\n      } else {\n        // Reset operation caches; will be loaded lazily.\n        setSchlagOperations({});\n        setSchlagOperationsDetails({});\n        loadedYearIdsRef.current = new Set();\n      }\n    }\n    \n    return farm;\n  };\n\n  useEffect(() => {\n    const loadData = async () => {\n      if (expanded) {\n        await loadFarmDetails();\n      }\n    };\n    loadData();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [farm, expanded]);\n\n  return {\n    farmDetails,\n    setFarmDetails,\n    loading,\n    error,\n    setError,\n    schlagOperations,\n    setSchlagOperations,\n    schlagOperationsDetails,\n    setSchlagOperationsDetails,\n    operationsLoading,\n    loadFarmDetails,\n    loadOperationsForFarmYear,\n    loadSchlagOperations,\n  };\n};\n","import { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport api from '../../../utils/api';\nimport { setImportSuccess } from '../../../slices/farmSlice';\n\n/**\n * Custom hook for managing CRUD operations and handlers\n */\nexport const useFarmHandlers = (farmDetails, loadFarmDetails, onFarmUpdate) => {\n  const dispatch = useDispatch();\n  \n  // Edit modal state\n  const [showEditModal, setShowEditModal] = useState(false);\n  const [editTarget, setEditTarget] = useState(null);\n  \n  // Farming info modal state\n  const [showFarmingInfoModal, setShowFarmingInfoModal] = useState(false);\n  const [selectedAreaForEdit, setSelectedAreaForEdit] = useState(null);\n  \n  // CRUD modal state\n  const [showCrudModal, setShowCrudModal] = useState(false);\n  const [crudOperation, setCrudOperation] = useState(null);\n  const [crudTarget, setCrudTarget] = useState(null);\n  const [crudLoading, setCrudLoading] = useState(false);\n  const [crudError, setCrudError] = useState(null);\n  \n  // Delete confirmation modal state\n  const [showDeleteModal, setShowDeleteModal] = useState(false);\n  const [deleteTarget, setDeleteTarget] = useState(null);\n  const [deleteLoading, setDeleteLoading] = useState(false);\n  \n  // Data sheet modal state\n  const [showDataSheetModal, setShowDataSheetModal] = useState(false);\n  const [dataSheetOperations, setDataSheetOperations] = useState([]);\n  const [dataSheetContext, setDataSheetContext] = useState({});\n  const [dataSheetTitle, setDataSheetTitle] = useState('Datenblatt');\n\n  const handleEdit = (type, item, additionalData = null) => {\n    if (type === 'feldstueck' || type === 'schlag') {\n      const areaData = {\n        type,\n        id: item.id,\n        ...item,\n        ...(additionalData || {})\n      };\n\n      if (type === 'feldstueck') {\n        areaData.feldstueck_bezeichnung = item.bezeichnung;\n        areaData.area_ha = parseFloat(item.flaeche) || 0;\n      } else if (type === 'schlag') {\n        areaData.nummer = item.nummer;\n        areaData.area_ha = parseFloat(item.flaeche_netto) || parseFloat(item.flaeche_brutto) || 0;\n      }\n\n      setSelectedAreaForEdit(areaData);\n      setShowFarmingInfoModal(true);\n    } else {\n      setEditTarget({ type, item });\n      setShowEditModal(true);\n    }\n  };\n\n  const handleSave = async (newValue) => {\n    const { type, item } = editTarget;\n\n    try {\n      let endpoint, data;\n\n      switch (type) {\n        case 'farm':\n          endpoint = `/farms/${item.id}/`;\n          data = { name: newValue };\n          break;\n        case 'feldstueck':\n          endpoint = `/feldstuecke/${item.id}/`;\n          data = { bezeichnung: newValue };\n          break;\n        default:\n          throw new Error('Unknown edit type');\n      }\n\n      await api.patch(endpoint, data);\n      const updatedFarm = await loadFarmDetails(true);\n\n      if (type === 'farm' && onFarmUpdate && updatedFarm) {\n        onFarmUpdate(updatedFarm);\n      }\n    } catch (error) {\n      console.error('Error saving:', error);\n      throw error;\n    }\n  };\n\n  const handleCrudOperation = (operation, type, item = null, parentData = null) => {\n    setCrudError(null);\n    setCrudOperation(operation);\n    setCrudTarget({ type, item, parentData });\n    setShowCrudModal(true);\n  };\n\n  const handleCrudModalClose = () => {\n    setCrudError(null);\n    setShowCrudModal(false);\n  };\n\n  const handleCrudSave = async (formData, openAccordionItems, setOpenAccordionItems) => {\n    setCrudLoading(true);\n    setCrudError(null);\n    try {\n      let endpoint, data, method;\n      let createdItemId = null;\n      let parentId = null;\n\n      switch (crudOperation) {\n        case 'create':\n          switch (crudTarget.type) {\n            case 'year':\n              endpoint = '/farm-years-manage/';\n              data = { ...formData, farm_id: farmDetails.id };\n              method = 'POST';\n              break;\n            case 'feldstueck':\n              endpoint = '/feldstuecke-manage/';\n              data = { ...formData, farm_year_id: crudTarget.parentData.id };\n              method = 'POST';\n              parentId = crudTarget.parentData.id;\n              break;\n            case 'schlag':\n              endpoint = '/schlaege-manage/';\n              data = { ...formData, feldstueck_id: crudTarget.parentData.id };\n              method = 'POST';\n              parentId = crudTarget.parentData.id;\n              break;\n            default:\n              break;\n          }\n          break;\n\n        case 'edit':\n          switch (crudTarget.type) {\n            case 'year':\n              endpoint = `/farm-years-manage/${crudTarget.item.id}/`;\n              data = formData;\n              method = 'PATCH';\n              break;\n            case 'feldstueck':\n              endpoint = `/feldstuecke-manage/${crudTarget.item.id}/`;\n              data = formData;\n              method = 'PATCH';\n              break;\n            case 'schlag':\n              endpoint = `/schlaege-manage/${crudTarget.item.id}/`;\n              data = formData;\n              method = 'PATCH';\n              break;\n            default:\n              break;\n          }\n          break;\n\n        default:\n          break;\n      }\n\n      const response = await api({ method, url: endpoint, data });\n      createdItemId = response.data?.id;\n\n      const actionText = crudOperation === 'create' ? 'erstellt' : 'aktualisiert';\n      const itemText = crudTarget.type === 'year' ? 'Erntejahr'\n        : crudTarget.type === 'feldstueck' ? 'Feldstück' : 'Schlag';\n  \n      const updatedFarm = await loadFarmDetails(true);\n      if (onFarmUpdate && updatedFarm) {\n        onFarmUpdate(updatedFarm);\n      }\n\n      // Auto-expand parent after creating new item\n      if (crudOperation === 'create' && parentId && openAccordionItems && setOpenAccordionItems) {\n        const newOpenItems = new Set(openAccordionItems);\n        \n        if (crudTarget.type === 'feldstueck') {\n          newOpenItems.add(`year-${parentId}`);\n        } else if (crudTarget.type === 'schlag') {\n          newOpenItems.add(`feld-${parentId}`);\n        }\n        \n        setOpenAccordionItems(newOpenItems);\n      }\n  \n      setShowCrudModal(false);\n      dispatch(setImportSuccess(`${itemText} erfolgreich ${actionText}!`));\n    } catch (error) {\n      console.error('Error in CRUD operation:', error);\n      let errorMessage = 'Fehler beim Speichern';\n      if (error.response?.data) {\n        const errorData = error.response.data;\n        if (typeof errorData === 'object') {\n          const fieldErrors = [];\n          for (const [field, messages] of Object.entries(errorData)) {\n            if (Array.isArray(messages)) {\n              fieldErrors.push(`${field}: ${messages.join(', ')}`);\n            } else if (typeof messages === 'string') {\n              fieldErrors.push(`${field}: ${messages}`);\n            }\n          }\n          if (fieldErrors.length > 0) {\n            errorMessage = fieldErrors.join('; ');\n          }\n        } else if (typeof errorData === 'string') {\n          errorMessage = errorData;\n        } else if (errorData.error) {\n          errorMessage = errorData.error;\n        }\n      }\n      setCrudError(errorMessage);\n    } finally {\n      setCrudLoading(false);\n    }\n  };\n\n  const handleDelete = (type, item) => {\n    setDeleteTarget({ type, item });\n    setShowDeleteModal(true);\n  };\n\n  const confirmDelete = async (setError) => {\n    if (!deleteTarget) return;\n\n    const { type, item } = deleteTarget;\n    setDeleteLoading(true);\n    \n    try {\n      let endpoint;\n      switch (type) {\n        case 'year':\n          endpoint = `/farm-years-manage/${item.id}/`;\n          break;\n        case 'feldstueck':\n          endpoint = `/feldstuecke-manage/${item.id}/`;\n          break;\n        case 'schlag':\n          endpoint = `/schlaege-manage/${item.id}/`;\n          break;\n        case 'operation':\n          endpoint = `/operations/${item.id}/`;\n          break;\n        default:\n          break;\n      }\n\n      await api.delete(endpoint);\n\n      const itemText = type === 'year' ? 'Erntejahr'\n        : type === 'feldstueck' ? 'Feldstück' \n        : type === 'schlag' ? 'Schlag' \n        : 'Maßnahme';\n  \n      dispatch(setImportSuccess(`${itemText} erfolgreich gelöscht!`));\n\n      setShowDeleteModal(false);\n      setDeleteTarget(null);\n\n      const updatedFarm = await loadFarmDetails(true);\n      if (onFarmUpdate && updatedFarm) {\n        onFarmUpdate(updatedFarm);\n      }\n    } catch (error) {\n      console.error('Error deleting:', error);\n      if (setError) {\n        setError(error.response?.data?.error || 'Fehler beim Löschen');\n      }\n      setShowDeleteModal(false);\n      setDeleteTarget(null);\n    } finally {\n      setDeleteLoading(false);\n    }\n  };\n\n  const getDeleteModalConfig = () => {\n    if (!deleteTarget) return { title: '', message: '', details: [] };\n\n    const { type, item } = deleteTarget;\n    \n    switch (type) {\n      case 'year':\n        return {\n          title: 'Erntejahr löschen',\n          message: `Sind Sie sicher, dass Sie das Erntejahr \"${item.year}\" und alle zugehörigen Daten löschen möchten?`,\n          details: [\n            'Alle Feldstücke dieses Erntejahres',\n            'Alle Schläge und deren Geometriedaten',\n            'Alle Maßnahmen und Bewirtschaftungsdaten'\n          ]\n        };\n      case 'feldstueck':\n        return {\n          title: 'Feldstück löschen',\n          message: `Sind Sie sicher, dass Sie das Feldstück \"${item.bezeichnung || item.nummer}\" und alle zugehörigen Daten löschen möchten?`,\n          details: [\n            'Alle Schläge dieses Feldstücks',\n            'Alle Geometriedaten',\n            'Alle Maßnahmen und Bewirtschaftungsdaten'\n          ]\n        };\n      case 'schlag':\n        return {\n          title: 'Schlag löschen',\n          message: `Sind Sie sicher, dass Sie den Schlag #${item.nummer} und alle zugehörigen Daten löschen möchten?`,\n          details: [\n            'Alle Geometriedaten des Schlags',\n            'Alle Maßnahmen und Bewirtschaftungsdaten',\n            'Alle Landnutzungsänderungen'\n          ]\n        };\n      case 'operation':\n        return {\n          title: 'Maßnahme löschen',\n          message: `Sind Sie sicher, dass Sie die Maßnahme \"${item.operation_type?.name || 'Unbekannt'}\" vom ${item.date ? new Date(item.date).toLocaleDateString('de-DE') : 'unbekanntem Datum'} löschen möchten?`,\n          details: [\n            'Alle zugehörigen Bewirtschaftungsdaten',\n            'Diese Aktion kann nicht rückgängig gemacht werden'\n          ]\n        };\n      default:\n        return { title: '', message: '', details: [] };\n    }\n  };\n\n  return {\n    // Edit modal\n    showEditModal,\n    setShowEditModal,\n    editTarget,\n    handleEdit,\n    handleSave,\n    \n    // Farming info modal\n    showFarmingInfoModal,\n    setShowFarmingInfoModal,\n    selectedAreaForEdit,\n    \n    // CRUD modal\n    showCrudModal,\n    setShowCrudModal,\n    crudOperation,\n    crudTarget,\n    crudLoading,\n    crudError,\n    handleCrudOperation,\n    handleCrudModalClose,\n    handleCrudSave,\n    \n    // Delete modal\n    showDeleteModal,\n    setShowDeleteModal,\n    deleteTarget,\n    deleteLoading,\n    handleDelete,\n    confirmDelete,\n    getDeleteModalConfig,\n    \n    // Data sheet modal\n    showDataSheetModal,\n    setShowDataSheetModal,\n    dataSheetOperations,\n    setDataSheetOperations,\n    dataSheetContext,\n    setDataSheetContext,\n    dataSheetTitle,\n    setDataSheetTitle,\n  };\n};\n","/**\n * Group operations by ride_uuid\n * Operations with the same ride_uuid were performed during the same \"ride\" (Fahrt)\n * \n * @param {Array} operations - Array of operation objects\n * @returns {Array} Array of ride groups, each containing { rideId, date, operations[] }\n */\nexport const groupOperationsByRide = (operations) => {\n  if (!operations || operations.length === 0) {\n    return [];\n  }\n\n  // Group operations by ride_uuid\n  const rideMap = new Map();\n  \n  operations.forEach(op => {\n    const rideId = op.ride_uuid || `single-${op.id}`;\n    \n    if (!rideMap.has(rideId)) {\n      rideMap.set(rideId, {\n        rideId: rideId,\n        ride_uuid: op.ride_uuid,\n        date: op.date,\n        operations: [],\n        isSingleOperation: !op.ride_uuid // Operations without ride_uuid are standalone\n      });\n    }\n    \n    rideMap.get(rideId).operations.push(op);\n  });\n\n  // Convert map to array and sort by date (newest first)\n  const rides = Array.from(rideMap.values()).sort((a, b) => {\n    const dateA = new Date(a.date || 0);\n    const dateB = new Date(b.date || 0);\n    return dateB - dateA;\n  });\n\n  return rides;\n};\n\n/**\n * Get a summary of a ride for display\n * \n * @param {Object} ride - Ride object with operations array\n * @returns {Object} Summary with operation types, total area, etc.\n */\nexport const getRideSummary = (ride) => {\n  if (!ride || !ride.operations || ride.operations.length === 0) {\n    return {\n      operationCount: 0,\n      operationTypes: [],\n      totalArea: 0,\n      date: null\n    };\n  }\n\n  const operationTypes = new Set();\n  let rideArea = 0;\n\n  ride.operations.forEach(op => {\n    if (op.operation_type?.name) {\n      operationTypes.add(op.operation_type.name);\n    }\n    // For a ride, all operations share the same area - use the max value\n    if (op.area_ha) {\n      const area = parseFloat(op.area_ha);\n      if (area > rideArea) {\n        rideArea = area;\n      }\n    }\n  });\n\n  return {\n    operationCount: ride.operations.length,\n    operationTypes: Array.from(operationTypes),\n    totalArea: rideArea,\n    date: ride.date\n  };\n};\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='abbrechen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,70c-95,0-170,75-170,170s75,170,170,170s170-75,170-170S335,70,240,70z%20M240,390%20c-84,0-150-66-150-150S156,90,240,90s150,66,150,150S324,390,240,390z%20M240,220l-70-70l-20,20l70,70l-70,70l20,20l70-70l70,70%20l20-20l-70-70l70-70l-20-20L240,220z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a,.b{fill:%2300a94d;}.a{fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M240,410c95,0,170-75,170-170S335,70,240,70,70,145,70,240,145,410,240,410Zm0-20c-84,0-150-66-150-150S156,90,240,90s150,66,150,150S324,390,240,390Z'/%3e%3crect%20class='b'%20x='226.04'%20y='143.02'%20width='27.93'%20height='130.11'/%3e%3crect%20class='b'%20x='226.04'%20y='301.05'%20width='27.93'%20height='27.93'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='anhang'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M270,340c0,16-13,30-30,30c-16,0-30-14-30-30V110c0-33,26-60,60-60s60,27,60,60v230%20c0,49-40,90-90,90c-49,0-90-41-90-90V110h-30v230c0,66,54,120,120,120s120-54,120-120V110c0-50-40-90-90-90s-90,40-90,90v230%20c0,33,27,60,60,60s60-27,60-60V110h-30V340z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m433.41,230.88c-42.58-66.1-114.88-105.56-193.41-105.56s-150.82,39.46-193.41,105.56l-3.49,5.42,3.49,5.42c42.58,66.1,114.88,105.56,193.41,105.56s150.83-39.46,193.41-105.56l3.49-5.42-3.49-5.42Zm-193.41,88.8c-45.98,0-83.38-37.4-83.38-83.38s37.4-83.38,83.38-83.38,83.38,37.4,83.38,83.38-37.4,83.38-83.38,83.38Zm-172.99-83.38c26.77-38.91,65.11-67.03,108.82-81-23.88,18.95-39.22,48.22-39.22,81s15.34,62.04,39.21,81c-43.71-13.97-82.05-42.09-108.82-81Zm237.15,81c23.87-18.95,39.21-48.22,39.21-81s-15.34-62.05-39.22-81c43.71,13.97,82.05,42.09,108.82,81-26.77,38.91-65.11,67.03-108.82,81Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3ccircle%20cx='240'%20cy='236.3'%20r='42.13'%20transform='translate(-1.94%20470.61)%20rotate(-88.64)'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23029a3c;}.b{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M344.27,293.83a51.28,51.28,0,0,0-40.27,20,77.11,77.11,0,0,1-121.5,0,51.3,51.3,0,0,0-40.28-20H70.38v125H416.12v-125Z'/%3e%3cpath%20class='b'%20d='M211.85,47.34a12.37,12.37,0,0,0-9.29,4.37c-5.81,6.52-12.73,16.81-12.73,28.78s6.92,22.25,12.73,28.77a12.06,12.06,0,0,0,18.58,0c5.81-6.52,12.73-16.81,12.73-28.77S227,58.23,221.14,51.71A12.37,12.37,0,0,0,211.85,47.34Z'/%3e%3cpath%20class='b'%20d='M211.85,174a12.39,12.39,0,0,0-9.29,4.36c-5.81,6.53-12.73,16.82-12.73,28.78s6.92,22.25,12.73,28.78a12.08,12.08,0,0,0,18.58,0c5.81-6.53,12.73-16.82,12.73-28.78s-6.92-22.25-12.73-28.78A12.39,12.39,0,0,0,211.85,174Z'/%3e%3cpath%20class='b'%20d='M271.85,177h0a12.44,12.44,0,0,0,9.3-4.37c5.8-6.53,12.73-16.82,12.73-28.78s-6.93-22.25-12.73-28.77a12.07,12.07,0,0,0-18.59,0c-5.81,6.52-12.73,16.81-12.73,28.77s6.92,22.25,12.73,28.78A12.44,12.44,0,0,0,271.85,177Z'/%3e%3cpath%20class='b'%20d='M271.85,237.35a12.4,12.4,0,0,0-9.29,4.37c-5.81,6.53-12.73,16.82-12.73,28.78s6.92,22.25,12.73,28.77a12.4,12.4,0,0,0,9.29,4.37h0a12.41,12.41,0,0,0,9.3-4.37c5.8-6.52,12.73-16.81,12.73-28.77s-6.93-22.25-12.73-28.78A12.41,12.41,0,0,0,271.85,237.35Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_6'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m379.32,178.89s-.02-.1-.02-.14c-.05-.37-.12-.74-.2-1.11-.02-.09-.05-.19-.07-.28-.1-.38-.22-.75-.37-1.12-.01-.02-.02-.05-.03-.08-.16-.39-.35-.77-.57-1.15-.05-.08-.09-.16-.14-.23-.19-.31-.4-.62-.62-.91-.03-.04-.06-.09-.09-.13l-37.82-47.44v-56.68h11.08c5.52,0,10-4.48,10-10v-25.42c0-5.52-4.48-10-10-10H126.27c-5.52,0-10,4.48-10,10v25.42c0,5.52,4.48,10,10,10h11.08v56.68l-37.82,47.44s-.06.09-.09.13c-.23.29-.43.6-.62.91-.05.08-.1.15-.14.23-.21.37-.41.75-.57,1.15-.01.02-.02.05-.03.08-.15.37-.27.74-.37,1.12-.02.09-.05.18-.07.28-.09.37-.16.74-.2,1.11,0,.05-.02.1-.02.14-.04.36-.06.72-.06,1.09v121.73l-30.7,15.41c-4.94,2.48-6.93,8.49-4.45,13.42,1.75,3.5,5.28,5.52,8.95,5.52,1.51,0,3.04-.34,4.48-1.06l21.73-10.91v119.1c0,5.52,4.48,10,10,10h262.04c5.52,0,10-4.48,10-10V179.98c0-.37-.02-.73-.06-1.09ZM136.27,49.63v-5.42h204.19v5.42h-204.19Zm183.11,20v50.17h-162.04v-50.17h162.04Zm-167.22,70.17h172.4l24.06,30.17h-220.52l24.06-30.17Zm96.78,97c-2.48-4.94-8.49-6.93-13.42-4.45l-15.44,7.75c.62-10.47,9.31-18.8,19.93-18.8s19.99,8.97,19.99,19.99-8.97,19.99-19.99,19.99c-4.05,0-7.81-1.22-10.96-3.29l15.45-7.75c4.94-2.48,6.93-8.49,4.45-13.42Zm-8.94,44.47c22.05,0,39.99-17.94,39.99-39.99s-17.94-39.99-39.99-39.99-39.99,17.94-39.99,39.99c0,2.89.32,5.71.9,8.43l-83.57,41.94v-101.69h242.04v193.03H117.34v-68.97l92.57-46.46c7.34,8.38,18.1,13.7,30.09,13.7Zm119.39,151.9H117.34v-30.17h242.04v30.17Z'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpolygon%20points='361.47%20363.54%20115.08%20363.54%20115.08%20117.15%20273.28%20117.15%20273.28%2097.15%2095.08%2097.15%2095.08%20383.54%20381.47%20383.54%20381.47%20205.34%20361.47%20205.34%20361.47%20363.54'%20style='fill:%23005541;'/%3e%3cpath%20d='m167.57,308.89l67.69-16.09,184.05-184.05-51.6-51.6-184.05,184.05-16.09,67.69Zm34.23-57.55l165.91-165.91,23.32,23.32-165.91,165.91-30.59,7.27,7.27-30.59Z'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m306.68,146.57c-21.54-38.72-63.03-64.51-109.2-64.51-67.38,0-124.79,54.91-124.79,124.79,0,48.67,31.2,93.59,74.87,112.31v37.44c0,7.49,4.99,12.48,12.48,12.48,9.98,0,24.96-12.48,37.44-37.44,11.25,0,22.21-1.61,32.68-4.59,18.95,17.88,44.43,29.04,72.15,29.04,19.14,28.71,40.2,39.24,47.86,39.24,5.74,0,9.57-3.83,9.57-9.57v-47.86c28.71-19.14,47.86-50.73,47.86-86.14,0-56.9-45.45-102.88-100.91-105.19Zm-214.04,60.28c0-58.97,45.86-104.83,104.83-104.83s104.83,45.86,104.83,104.83-45.86,104.83-104.83,104.83-104.83-45.86-104.83-104.83Zm209.67,130.91c-19.93,0-38.29-6.7-52.97-17.95,42.52-20.19,72.92-63.93,72.92-112.97,0-14.99-2.65-29.28-7.46-42.5,42.22,6.06,74.66,42.37,74.66,86.26,0,48.13-39.02,87.16-87.16,87.16Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3crect%20x='233.68'%20y='194.37'%20width='24.96'%20height='24.96'%20style='fill:%23005541;'/%3e%3crect%20x='184.44'%20y='194.37'%20width='24.96'%20height='24.96'%20style='fill:%23005541;'/%3e%3crect%20x='135.2'%20y='194.37'%20width='24.96'%20height='24.96'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='bestaetigen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,410c95,0,170-75,170-170S335,70,240,70S70,145,70,240S145,410,240,410z%20M240,390%20c-84,0-150-66-150-150S156,90,240,90s150,66,150,150S324,390,240,390z%20M162,232l-20,20l68,68l130-130l-20-20L210,280L162,232z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='a'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.b{fill:%23009e3c;fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='b'%20d='M389.44,298.08c24.87,0,38.32-1.73,49.32-11.91,11.45-10.59,14.75-24.29,15.76-50.06-25.75-1.02-38.02,3.32-51.14,11.82-17.79,11.51-26.85,27.24-26.85,47.19v65.68h-4.15v-121.72c24.87,0,38.23-3.22,48.82-13.82,11.03-11.03,13.79-24.85,13.8-50.64-25.77-.02-37.86,4.8-50.64,13.79-17.33,12.2-24.89,27.74-24.89,47.7v124.68h-4.15V196.74c13.22-14.08,19.61-24.63,19.61-37.65,0-15.63-7.82-27.36-26.05-45.59-18.24,18.24-26.05,29.96-26.05,45.59-.02,12.96,6.37,23.51,19.56,37.62v164.09h-3.8v-124.68c0-19.95-7.56-35.5-24.89-47.7-12.78-9-24.87-13.82-50.64-13.79,0,25.79,2.77,39.61,13.8,50.64,10.59,10.59,23.95,13.82,48.82,13.82v121.72h-4.5v-63.35c0-19.95-7.56-35.5-24.89-47.7-12.78-9-24.87-13.82-50.64-13.79,0,25.79,2.77,39.61,13.8,50.64,10.59,10.59,23.95,13.82,48.82,13.82v60.39h-109.85v-110.06c13.22-14.08,19.61-24.63,19.61-37.65,0-15.63-7.82-27.36-26.05-45.59-18.24,18.24-26.05,29.96-26.05,45.59-.02,12.96,6.37,23.51,19.56,37.62v110.09h-3.81v-61.68c0-19.95-7.56-35.5-24.89-47.7-12.78-9-24.87-13.82-50.64-13.79,0,25.79,2.77,39.61,13.8,50.64,10.59,10.59,23.95,13.82,48.82,13.82v58.72H58.13v-54.06c13.22-14.08,19.61-24.63,19.61-37.65,0-15.63-7.82-27.36-26.05-45.59-18.24,18.24-26.05,29.96-26.05,45.59-.02,12.96,6.37,23.51,19.56,37.62v54.09H26.33v12.94H444.67v-12.94h-55.22v-62.72Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20id='Ebene_1'%20data-name='Ebene%201'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M408.17,129.93A10,10,0,0,0,401,127c-4.26.06-104.89,2-158.84,55.93A80,80,0,0,0,237,290.31a167.8,167.8,0,0,0-12.38,22.25q-8.58-16.94-24.26-33.81a53.12,53.12,0,0,0-17.55-70.87C142,181.69,79.53,194.06,76.9,194.6a10,10,0,0,0-7.74,12.05c.6,2.62,15.29,64.48,56.24,90.67a53.19,53.19,0,0,0,61.86-3.21C201.82,310.32,214.9,331,214.9,353h20c0-16.24,6.92-33.06,16.84-48.83A79.94,79.94,0,0,0,355.17,296c54.06-54,55.88-154.59,55.93-158.85A10,10,0,0,0,408.17,129.93Zm-272,150.54c-25-16-38.89-50.51-44.52-67.88,18.14-2.13,55.28-3.93,80.33,12.13h0a33.12,33.12,0,0,1,13.22,39.22,277.34,277.34,0,0,0-44.34-32.36A10,10,0,0,0,131.11,249,261.21,261.21,0,0,1,173,279.83,33.18,33.18,0,0,1,136.19,280.47ZM341,281.82h0a60,60,0,0,1-77.76,6c24.87-31.9,57.17-56.21,57.7-56.61a10,10,0,0,0-11.94-16c-2.24,1.66-33.81,25.4-59.78,58.19a60,60,0,0,1,7-76.3c38.59-38.59,107.78-47.47,134.26-49.49C388.53,174.06,379.69,243.24,341,281.82Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23029a3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M390.81,299.61l-17.6,17.61a16.34,16.34,0,0,1-23.11,0l-17.6-17.61a19.76,19.76,0,0,0-14-5.78H283.12a19.74,19.74,0,0,0-14,5.78l-17.61,17.61a16.33,16.33,0,0,1-23.1,0l-17.61-17.61a19.74,19.74,0,0,0-14-5.78H155.37a19.74,19.74,0,0,0-14,5.78L123.8,317.22a16.33,16.33,0,0,1-23.1,0L83.09,299.61a19.74,19.74,0,0,0-14-5.78H41.68v125H432.23v-125H404.77A19.76,19.76,0,0,0,390.81,299.61Z'/%3e%3cpath%20class='a'%20d='M432.23,150.67V116.75H378.62v-6.58a17,17,0,1,0-33.92,0v6.58H255.91v-6.58a17,17,0,0,0-17-17h0a17,17,0,0,0-17,17v6.58H129.21v-6.58a17,17,0,0,0-17-17h0a17,17,0,0,0-17,17v6.58H41.68v33.92H95.29v35.2l-11.68-4.34c-13.14-4.9-25.69,8.45-20,21.27L102.77,291a10.37,10.37,0,0,0,19,0l39.17-88.18c5.69-12.82-6.86-26.17-20-21.27l-11.68,4.34v-35.2H222v35.2l-11.68-4.34c-13.14-4.9-25.69,8.45-20,21.27L229.47,291a10.37,10.37,0,0,0,18.95,0l39.17-88.18a15.84,15.84,0,0,0-20-21.27l-11.67,4.34v-35.2H344.7v35.2L333,181.53a15.83,15.83,0,0,0-20,21.27L352.18,291a10.37,10.37,0,0,0,18.95,0l39.16-88.18a15.83,15.83,0,0,0-20-21.27l-11.67,4.34v-35.2Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.4.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20.st1{fill:%23009E3C;}%20%3c/style%3e%3cg%20id='Design'%3e%3cg%3e%3cpath%20class='st0'%20d='M458.2,400.9l-15-15l-41.2,41.2V297.9h-22.5v129.3l-41.2-41.2l-15,15l60,60c3.8,3.8,11.2,3.8,15,0%20L458.2,400.9z'/%3e%3cg%3e%3cpath%20class='st1'%20d='M157.4,176.2c24.5,0,39.5,14.3,43.4,35.1h-21.4c-3.5-9.5-10-15.9-21.9-15.9c-16.5,0-26.3,14.5-26.3,34.3%20c0,19.6,9.8,34.3,26.3,34.3c12,0,18.4-6.4,21.9-16h21.4c-3.9,20.9-18.9,35.3-43.4,35.3c-27.7,0-48.3-21.8-48.3-53.5%20C109.2,198,129.8,176.2,157.4,176.2z'/%3e%3cpath%20class='st1'%20d='M259.2,283.3c-28.9,0-49-22.6-49-53.5c0-31.1,20.1-53.5,49-53.5c28.9,0,49.1,22.5,49.1,53.5%20C308.4,260.6,288.1,283.3,259.2,283.3z%20M259.2,195.5c-16.4,0-27,14-27,34.3s10.6,34.3,27,34.3c16.5,0,27.3-14,27.3-34.3%20S275.8,195.5,259.2,195.5z'/%3e%3cpath%20class='st1'%20d='M334.3,258.6c-5.1,0-7.8,3.6-8.1,8.4h-13c1.2-11.2,9.1-19.6,21-19.6c12.7,0,20.3,7.1,20.3,18%20c0,7.6-5.8,13.5-12,20l-11.6,12.5h24.3v10.9h-41.8v-8.2l19.2-20.2c5.3-5.8,9.4-10,9.4-14.6C342,261.6,339.1,258.6,334.3,258.6z'%20/%3e%3c/g%3e%3cpath%20class='st0'%20d='M366.3,358v-20H350H110c-39,0-70-31-70-70c0-24,12-45,30-58l12-6c5-2,8-7,8-12v-14c0-28,22-50,50-50%20c14,0,27,6,36,15c6,5,14,5,18-2c16-25,44-43,76-43c49,0,90,42,90,90c0,6,4,10,10,10c39,0,70,31,70,70c0,22.3-10.2,42-26.2,54.8v24%20C441.4,331.5,460,302,460,268c0-47-35-85-80-90c-5-54-53-100-110-100c-35,0-67,17-87,44c-12-9-27-14-43-14c-39,0-70,31-70,70v9%20c-30,15-50,45-50,81c0,50,40,90,90,90h240H366.3z'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Beschreibung'%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2026.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill:%23009E3C;}%20%3c/style%3e%3cpath%20class='st0'%20d='M209,374.6L209,374.6L209,374.6v-51.8l0,0v-20l0,0v-47.4l0,0v-20l0,0v-47.5l0,0v-20v-51.7V95%20c-2.8-0.2-5.7-0.3-8.6-0.3c-1-0.2-2-0.2-2.9,0c-82.4,0.8-149.2,68.1-149.2,150.7c0,83.1,67.6,150.7,150.7,150.7%20c3.4,0,6.7-0.1,10-0.3V374.6z%20M145.4,126.2c-3.5,4.8-6.6,9.7-9.4,14.9c-4.6,8.6-8.5,17.5-11.6,26.8H93.8%20C107.2,149.8,124.9,135.5,145.4,126.2z%20M81.7,187.9L81.7,187.9h37c-3.6,15.6-5.7,31.5-6.2,47.5H68.7%20C69.9,218.9,74.3,202.8,81.7,187.9z%20M81.6,302.8c-7.3-14.8-11.7-30.9-12.9-47.4h43.7c0.5,16,2.6,31.8,6.2,47.4H81.6z%20M93.8,322.8%20h30.5c3.1,9.3,7,18.3,11.6,26.9c2.8,5.2,6,10.1,9.4,14.9C124.9,355.3,107.1,340.9,93.8,322.8z%20M189,374.6%20c-17.5-5.4-33-24.7-43.4-51.8H189V374.6z%20M189,302.8h-49.8c-3.9-15.5-6.2-31.4-6.8-47.4H189V302.8z%20M189,235.4h-56.6%20c0.6-16,2.9-32,6.9-47.5H189V235.4z%20M189,167.9h-43.4c10.4-27,25.9-46.3,43.4-51.7V167.9z'/%3e%3cg%3e%3cpath%20class='st0'%20d='M297.5,122.2c3.2,1,6.6,1.6,10.1,1.6c18.1,0,32.9-14.8,32.9-32.9S325.7,58,307.6,58%20c-18.1,0-32.9,14.8-32.9,32.9c0,7.3,2.4,14,6.4,19.5l-14.5,14.5H224v20h50.8L297.5,122.2z%20M307.6,78c7.1,0,12.9,5.8,12.9,12.9%20s-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9S300.5,78,307.6,78z'/%3e%3cpath%20class='st0'%20d='M404.2,301.6c-14.7,0-27.1,9.6-31.3,22.9h-23.5l-33.9-33.9H224v20h83.2l33.9,33.9h31.8%20c4.2,13.3,16.7,22.9,31.3,22.9c18.1,0,32.9-14.8,32.9-32.9C437.1,316.4,422.3,301.6,404.2,301.6z%20M404.2,347.4%20c-7.1,0-12.9-5.8-12.9-12.9c0-7.1,5.8-12.9,12.9-12.9c7.1,0,12.9,5.8,12.9,12.9C417.1,341.6,411.3,347.4,404.2,347.4z'/%3e%3cpath%20class='st0'%20d='M284.7,322.9c-14.7,0-27.1,9.6-31.3,22.9H224v20h29.4c4.2,13.3,16.7,22.9,31.3,22.9%20c18.1,0,32.9-14.8,32.9-32.9S302.8,322.9,284.7,322.9z%20M284.7,368.7c-7.1,0-12.9-5.8-12.9-12.9s5.8-12.9,12.9-12.9%20c7.1,0,12.9,5.8,12.9,12.9S291.8,368.7,284.7,368.7z'/%3e%3cpath%20class='st0'%20d='M315.3,160.2H358c4.2,13.3,16.7,22.9,31.3,22.9c18.1,0,32.9-14.8,32.9-32.9s-14.8-32.9-32.9-32.9%20c-14.7,0-27.1,9.6-31.3,22.9h-50.9l-39.9,39.9H224v20h51.4L315.3,160.2z%20M389.3,137.3c7.1,0,12.9,5.8,12.9,12.9%20s-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9S382.2,137.3,389.3,137.3z'/%3e%3cpath%20class='st0'%20d='M354.8,278.2c18.1,0,32.9-14.8,32.9-32.9c0-18.1-14.8-32.9-32.9-32.9c-14.7,0-27.1,9.6-31.3,22.9H224v20h99.5%20C327.7,268.6,340.1,278.2,354.8,278.2z%20M354.8,232.4c7.1,0,12.9,5.8,12.9,12.9c0,7.1-5.8,12.9-12.9,12.9c-7.1,0-12.9-5.8-12.9-12.9%20C341.9,238.2,347.7,232.4,354.8,232.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='dokument'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M130,70c-13,0-20,7-20,20v300c0,13,7,20,20,20h130l110-110V90c0-13-7-20-20-20H130z%20M270,290%20c-13,0-20,7-20,20v80H130V90h220v200H270z%20M270,310h60l-60,60V310z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='download'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M330,210l-20-20l-55,55V100h-30v145l-55-55l-20,20l80,80c5,5,15,5,20,0L330,210z%20M410,360H70V230%20H50v130c0,11,9,20,20,20h340c11,0,20-9,20-20V230h-20V360z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='drucker'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M360,120V80c0-11-9-20-20-20H140c-11,0-20,9-20,20v40H70c-11,0-20,9-20,20v200c0,11,9,20,20,20h50%20v40c0,11,9,20,20,20h200c11,0,20-9,20-20v-40h50c11,0,20-9,20-20V140c0-11-9-20-20-20H360z%20M340,80v40H140V80H340z%20M360,340v-70h20%20v-20H100v20h20v70H70V140h340v200H360z%20M369,210c6,0,10-4,10-10s-4-10-10-10h-48c-6,0-10,4-10,10s4,10,10,10H369z%20M140,400V270h200%20v130H140z%20M170,300v20h140v-20H170z%20M170,350v20h140v-20H170z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='duenger'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M384,335c-23,10-46,15-69,15c-29,0-55-8-82-17c-1-32-7-74-28-105c26-37,17-92-10-118%20c-27-27-84-40-140-40c-6,0-10,4-10,10c0,56,13,113,40,140c22,23,65,31,100,18c19,26,26,59,28,88c-26-9-51-16-78-16%20c-26,0-51,7-77,15c-7,3-10,9-8,15s8,9,15,6c23-9,47-16,70-16c63,0,117,40,180,40c26,0,52-5,78-15c8-3,10-8,7-15%20C397,334,391,332,384,335z%20M295,150c22,0,40-18,40-40s-18-40-40-40s-40,18-40,40S273,150,295,150z%20M295,90c11,0,20,9,20,20%20s-9,20-20,20s-20-9-20-20S284,90,295,90z%20M395,140c-22,0-40,18-40,40s18,40,40,40s40-18,40-40S417,140,395,140z%20M395,200%20c-11,0-20-9-20-20s9-20,20-20s20,9,20,20S406,200,395,200z%20M295,290c22,0,40-18,40-40s-18-40-40-40s-40,18-40,40S273,290,295,290z%20M295,230c11,0,20,9,20,20s-9,20-20,20s-20-9-20-20S284,230,295,230z%20M384,375c-23,10-46,15-69,15c-63,0-117-40-180-40%20c-26,0-50,6-76,15c-7,2-11,9-9,15s9,8,16,6c23-9,46-16,69-16c63,0,117,40,180,40c26,0,52-5,78-15c8-3,10-8,7-15%20C397,374,391,372,384,375z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M390.64,199.81H351.23a79.15,79.15,0,0,0-69.61-72.6V60.35H198.38v66.86a79.15,79.15,0,0,0-69.61,72.6H89.36V245.7H390.64Z'/%3e%3cpath%20class='a'%20d='M123.56,274.65q-19.94,23.16-19.93,39.86a19.93,19.93,0,0,0,39.86,0Q143.49,297.82,123.56,274.65Z'/%3e%3cpath%20class='a'%20d='M201.19,274.65q-19.94,23.16-19.93,39.86a19.93,19.93,0,0,0,39.85,0Q221.11,297.82,201.19,274.65Z'/%3e%3cpath%20class='a'%20d='M278.81,274.65q-19.92,23.16-19.92,39.86a19.93,19.93,0,0,0,39.85,0Q298.74,297.82,278.81,274.65Z'/%3e%3cpath%20class='a'%20d='M356.44,274.65q-19.92,23.16-19.93,39.86a19.93,19.93,0,0,0,39.86,0Q376.37,297.82,356.44,274.65Z'/%3e%3cpath%20class='a'%20d='M142,399.3a19.93,19.93,0,0,0,39.86,0q0-16.69-19.93-39.86Q142,382.6,142,399.3Z'/%3e%3cpath%20class='a'%20d='M219.62,399.3a19.93,19.93,0,0,0,39.86,0q0-16.69-19.93-39.86Q219.61,382.6,219.62,399.3Z'/%3e%3cpath%20class='a'%20d='M65.27,399.3a19.93,19.93,0,1,0,39.85,0q0-16.69-19.93-39.86Q65.27,382.6,65.27,399.3Z'/%3e%3cpath%20class='a'%20d='M297.25,399.3a19.93,19.93,0,1,0,39.85,0q0-16.69-19.92-39.86Q297.25,382.6,297.25,399.3Z'/%3e%3cpath%20class='a'%20d='M394.8,359.44q-19.92,23.16-19.92,39.86a19.93,19.93,0,1,0,39.85,0Q414.73,382.61,394.8,359.44Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='einstellungen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M410,210h-43c-4-14-9-27-16-38l30-31l-42-42l-31,30c-11-7-24-12-38-16V70h-60v43c-14,3-27,9-39,16%20l-30-30l-42,42l30,30c-7,12-13,25-16,39H70v60h43c3,14,9,27,16,39l-30,30l42,42l30-30c12,7,25,13,39,16v43h60v-43c14-3,27-9,39-16%20l30,30l42-42l-30-30c7-12,13-25,16-39h43V210z%20M240,280c-22,0-40-18-40-40s18-40,40-40s40,18,40,40S262,280,240,280z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='email'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M70,110c-11,0-20,9-20,20v220c0,11,9,20,20,20h340c11,0,20-9,20-20V130c0-11-9-20-20-20H70z%20M240,250L70,130h340L240,250z%20M70,157l149,108c12,9,30,9,42,0l149-108v193H70V157z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M453.06,292.9c-9.73-37.26-45.68-45.09-65.9-40.95-1.68.35-61.52,12.74-123.33-22-61-34.31-100.1-93.28-107.78-105.51-.38-.67-.79-1.34-1.25-2l-.14-.24.1.16h0c-14.15-21.09-23.82-22.59-23.82-22.59h0S93.79,85.12,77.66,52.13C73.91,44.46,60.11,42,55.14,56.76c-2.93,8.74-4.67,18.72-6.4,28.63-5.87,33.74-1.44,74.21-.88,78.19s22.8,107.81,96,188.33A303.74,303.74,0,0,0,262,431.55q5.4,2,10.51,3.7c29,9.63,48.13,11.54,52.64,11.94,20.46,1.8,57.36-11.48,59.85-49.91.88-13.56-2.5-24.66-8.14-33.47,19.57-1.17,31.64-3.88,35.07-4.69C432,354.38,462.8,330.16,453.06,292.9Zm-160.68-29A38.27,38.27,0,0,1,320.3,334.7a196,196,0,0,1-54.26-23l-.21-.66A38.27,38.27,0,0,1,292.38,263.86ZM248.63,252a38.27,38.27,0,0,1-10.9,38.43c-4.22-3.85-8.39-8-12.47-12.48A269.25,269.25,0,0,1,191,230.12,38.28,38.28,0,0,1,248.63,252Zm-70.92-65.67a38,38,0,0,1,.44,18.89,371.93,371.93,0,0,1-15.87-40.28A38.06,38.06,0,0,1,177.71,186.29ZM409.36,342.21A38.27,38.27,0,1,1,435.91,295,38.27,38.27,0,0,1,409.36,342.21Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M120.49,253.2A38.82,38.82,0,1,0,159.31,292,38.82,38.82,0,0,0,120.49,253.2Zm0,51.82a13,13,0,1,1,13-13A13,13,0,0,1,120.49,305Z'/%3e%3cpath%20class='a'%20d='M287.81,242.2a44.32,44.32,0,1,0,44.32,44.32A44.32,44.32,0,0,0,287.81,242.2Zm0,65.94a21.63,21.63,0,1,1,21.62-21.62A21.62,21.62,0,0,1,287.81,308.14Z'/%3e%3cpath%20class='a'%20d='M202.8,144.82V166l-19.93-21.14H60.53L29.15,165.58l11.7,18.29,25.06-16.63H174.56l23.93,25.31H88.25L49.18,215.77v58.92L74,285h.33a46.71,46.71,0,0,1,92.35,0h63.67a57.22,57.22,0,0,1,13-34.93v-44.3h.14V175.13h58.93L289.29,229a57.57,57.57,0,0,1,16.43,2.82l13.82-56.72h21.29V144.82Z'/%3e%3cpolygon%20class='a'%20points='424.29%20303.13%20439.54%20294.33%20439.54%20259.57%20409.44%20242.19%20379.34%20259.57%20379.34%20286.5%20424.29%20303.13'/%3e%3cpath%20class='a'%20d='M450.85,319.36,345,280.19a60.12,60.12,0,0,1,.35,6.33,57.33,57.33,0,0,1-15.61,39.38H450.85Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='externallink'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M120,360V120h110v-20H120c-11,0-20,9-20,20v240c0,11,9,20,20,20h240c11,0,20-9,20-20V250h-20v110%20H120z%20M270,100v30h60l-90,90l20,20l90-90v60h30v-99c0-6-4-11-10-11H270z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m240,90c-84.38,0-150,65.62-150,150s65.62,150,150,150,150-65.62,150-150-65.62-150-150-150Zm0,276.4c-71.1,0-126.4-55.3-126.4-126.4s55.3-126.4,126.4-126.4,126.4,55.3,126.4,126.4-55.3,126.4-126.4,126.4Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3cpath%20d='m240,157.21c-30.36,0-55.19,24.84-55.19,55.19h27.6c0-15.18,12.42-27.6,27.6-27.6s27.6,12.42,27.6,27.6-12.42,27.6-27.6,27.6h-13.8v27.6h13.8c30.36,0,55.19-24.84,55.19-55.19s-24.84-55.19-55.19-55.19Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3crect%20x='226.2'%20y='295.19'%20width='27.6'%20height='27.6'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='favoriten'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240.5,339l105,70c7,5,13,1,11-7l-26-113l87-79c6-6,4-11-4-12l-123-9l-43-115c-3-8-11-8-14,0%20l-43,115l-123,9c-8,1-10,6-4,12l87,79l-26,113c-2,8,4,12,11,7L240.5,339z%20M175.5,280l-74-63l103-5l36-98l35,97l104,6l-74,63l25,92%20l-90-59l-90,59L175.5,280z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='favoritenfull'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240.5,339l105,70c7,5,13,1,11-7l-26-113l87-79c6-6,4-11-4-12l-123-9l-43-115c-3-8-11-8-14,0%20l-43,115l-123,9c-8,1-10,6-4,12l87,79l-26,113c-2,8,4,12,11,7L240.5,339z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m388.97,72.67H91.03l-58.16,81.42v3.22c.07,21.38,10.8,40.31,27.13,51.76v199.31h360v-199.31c16.32-11.45,27.06-30.37,27.12-51.76v-3.22s-58.15-81.42-58.15-81.42Zm-33.97,315.71h-60v-125h60v125Zm45,0h-35v-135h-80v135H80v-169.97c5.2,1.39,10.65,2.13,16.28,2.13,18.78,0,36.05-8.09,47.91-21.83,11.85,13.74,29.13,21.83,47.91,21.83s36.05-8.09,47.91-21.83c11.85,13.74,29.13,21.83,47.91,21.83s36.05-8.09,47.91-21.83c11.85,13.74,29.13,21.83,47.91,21.83,5.63,0,11.08-.75,16.28-2.13v169.97Zm-16.28-187.84c-16.64,0-31.56-9.29-38.94-24.24l-8.97-18.17-8.97,18.17c-7.38,14.95-22.3,24.24-38.94,24.24s-31.56-9.29-38.94-24.24l-8.97-18.17-8.97,18.17c-7.38,14.95-22.3,24.24-38.94,24.24s-31.56-9.29-38.94-24.24l-8.97-18.17-8.97,18.17c-7.38,14.95-22.3,24.24-38.94,24.24-22.83,0-41.64-17.78-43.28-40.22l48.32-67.65h277.36l48.33,67.65c-1.65,22.44-20.45,40.22-43.28,40.22Z'%20style='fill:%23005541;'/%3e%3cpath%20d='m105,343.37h150v-110H105v110Zm10-100h130v90H115v-90Z'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m103.82,152.7h22.05c4.36,15.21,18.38,26.38,34.97,26.38s30.61-11.17,34.97-26.38h180.36c5.52,0,10-4.48,10-10s-4.48-10-10-10h-180.36c-4.36-15.21-18.38-26.38-34.97-26.38s-30.61,11.17-34.97,26.38h-22.05c-5.52,0-10,4.48-10,10s4.48,10,10,10Zm57.02-26.38c9.03,0,16.38,7.35,16.38,16.38s-7.35,16.38-16.38,16.38-16.38-7.35-16.38-16.38,7.35-16.38,16.38-16.38Z'%20style='fill:%23005541;'/%3e%3cpath%20d='m376.18,230h-26.67c-4.36-15.21-18.38-26.38-34.97-26.38s-30.61,11.17-34.97,26.38H103.82c-5.52,0-10,4.48-10,10s4.48,10,10,10h175.75c4.36,15.21,18.38,26.38,34.97,26.38s30.61-11.17,34.97-26.38h26.67c5.52,0,10-4.48,10-10s-4.48-10-10-10Zm-61.64,26.38c-9.03,0-16.38-7.35-16.38-16.38s7.35-16.38,16.38-16.38,16.38,7.35,16.38,16.38-7.35,16.38-16.38,16.38Z'%20style='fill:%23005541;'/%3e%3cpath%20d='m376.18,327.3h-119.41c-4.36-15.21-18.38-26.38-34.97-26.38s-30.61,11.17-34.97,26.38h-83c-5.52,0-10,4.48-10,10s4.48,10,10,10h83c4.36,15.21,18.38,26.38,34.97,26.38s30.61-11.17,34.97-26.38h119.41c5.52,0,10-4.48,10-10s-4.48-10-10-10Zm-154.38,26.38c-9.03,0-16.38-7.35-16.38-16.38s7.35-16.38,16.38-16.38,16.38,7.35,16.38,16.38-7.35,16.38-16.38,16.38Z'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='flaechen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M194,120c10,0,16-6,16-15s-6-15-16-15h-88c-10,0-16,6-16,16v88c0,10,6,16,15,16s15-6,15-16v-54%20l69,69c7,7,15,7,21,1s6-14-1-21l-69-69H194z%20M374,90h-88c-10,0-16,6-16,15c0,10,6,15,16,15h54l-69,69c-7,7-7,15-1,21c7,6,14,6,21-1%20l69-69v54c0,10,6,16,15,16s15-6,15-16v-88C390,96,384,90,374,90z%20M210,270c-6-7-14-6-21,1l-69,69v-54c0-10-6-16-15-16s-15,6-15,16%20v88c0,10,6,16,16,16h88c10,0,16-6,16-15c0-10-6-15-16-15h-54l69-69C216,284,216,276,210,270z%20M375,270c-9,0-15,6-15,16v54l-69-69%20c-8-8-15-7-21-1s-6,14,1,21l69,69h-54c-10,0-16,6-16,15s6,15,16,15h88c10,0,16-6,16-16v-88C390,276,384,270,375,270z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BGl8Q3hb__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='garten'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M400,100c-67,0-129,32-168,79c-23-15-50-22-72-29c-53-16-90-27-90-70H50c-13,24-20,61-20,90%20c0,100,48,180,140,180c17,0,25-2,34-4c16,27,44,44,76,44c63,0,109-48,120-129l10-71c5-33,16-48,50-60v-20C440,103,422,100,400,100z%20M380,259c-10,70-47,111-100,111c-10,0-19-2-27-6c25-24,32-51,39-77c9-33,17-61,57-81c13-7,4-25-10-18c-47,25-57,61-66,94%20c-7,26-14,50-38,71c-15-14-25-35-25-63c0-87,88-170,200-170h20c-23,14-35,38-40,70L380,259z%20M100,220c-7-14,14-23,20-10%20c17,35,42,51,70,60v20C159,281,121,264,100,220z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m306.47,220.23c0-20.24-10.12-35.42-33.74-59-23.61,23.61-33.74,38.79-33.74,59,0,9.41,2.36,17.96,7.19,26.82l-38.1-38.1c21.93-22.14,30.91-37.18,30.91-56.21,0-20.24-10.12-35.42-33.74-59-23.61,23.61-33.74,38.79-33.74,59,0,9.41,2.36,17.96,7.19,26.82l-18.69-18.69c-.96-23.59-4.89-38.51-16.42-50.04-14.31-14.31-32.21-17.89-65.6-17.89,0,33.4,3.58,51.29,17.89,65.6,11.46,11.49,26.38,15.42,49.96,16.44l18.71,18.71c-8.88-4.84-17.41-7.19-26.83-7.19-20.16,0-35.3,10.04-58.72,33.46l-.28.28c23.62,23.61,38.8,33.73,59,33.73,19.07,0,34.07-8.98,56.2-30.91l38.11,38.11c-8.88-4.84-17.41-7.19-26.83-7.19-20.16,0-35.3,10.04-58.72,33.46l-.28.28c23.62,23.61,38.8,33.73,59,33.73,19.07,0,34.07-8.98,56.2-30.91l38.06,38.06c-8.88-4.84-17.41-7.19-26.83-7.19-20.16,0-35.3,10.04-58.72,33.46l-.28.28c23.62,23.61,38.8,33.73,59,33.73,19.07,0,34.07-8.98,56.2-30.91l59.07,59.07,1.15-1.15,11.85-11.85,1.15-1.15-59.04-59.04c21.93-22.14,30.91-37.18,30.91-56.21,0-20.24-10.12-35.42-33.74-59-23.61,23.61-33.74,38.79-33.74,59,0,9.41,2.36,17.96,7.19,26.82l-38.05-38.05c21.93-22.14,30.91-37.18,30.91-56.21Zm-40.12,21.62c-5.16-7.93-7.36-14.39-7.36-21.62,0-8.49,2.45-16.27,13.75-29.69,11.28,13.39,13.73,21.18,13.73,29.69,0,8.66-2.57,16.78-14.33,30.53l-5.79-8.91Zm-67.49-67.49c-5.16-7.93-7.36-14.39-7.36-21.62,0-8.49,2.45-16.27,13.75-29.69,11.28,13.39,13.73,21.18,13.73,29.69,0,8.66-2.57,16.78-14.33,30.53l-5.79-8.91Zm-61.16,59.61c-8.48,0-16.27-2.45-29.69-13.74,13.38-11.28,21.17-13.73,29.69-13.73,7.21,0,13.68,2.2,21.62,7.36l8.91,5.78c-13.74,11.76-21.86,14.33-30.53,14.33Zm67.49,67.49c-8.48,0-16.27-2.45-29.69-13.74,13.38-11.28,21.17-13.73,29.69-13.73,7.21,0,13.68,2.2,21.62,7.36l8.91,5.78c-13.74,11.76-21.86,14.33-30.53,14.33Zm67.43,67.43c-8.48,0-16.27-2.45-29.69-13.74,13.38-11.29,21.17-13.73,29.69-13.73,7.21,0,13.68,2.2,21.62,7.36l8.91,5.78c-13.74,11.76-21.86,14.33-30.53,14.33Zm61.16-59.61c-5.16-7.93-7.36-14.39-7.36-21.62,0-8.49,2.45-16.27,13.75-29.69,11.29,13.39,13.73,21.18,13.73,29.69,0,8.66-2.57,16.78-14.33,30.53l-5.79-8.91ZM98.71,113.68c17.46,1.5,24.71,5.28,30.72,11.3,5.18,5.18,8.77,12.27,10.17,29.6-17.37-1.43-24.45-5.01-29.59-10.17-6.01-6.01-9.8-13.26-11.3-30.72Z'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M312.69,211.13c0-20.25-10.12-35.43-33.74-59-23.61,23.61-33.73,38.79-33.73,59,0,11.8,3.37,21.92,11,32.89l-43-43c22.77-22.78,32.05-38,32.05-57.36,0-20.24-10.12-35.42-33.74-59-23.61,23.61-33.74,38.79-33.74,59,0,11.41,3.45,21.54,10.59,32.52l-22-22c-.79-25-4.6-40.51-16.52-52.43-14.31-14.31-32.21-17.89-65.6-17.89,0,33.4,3.58,51.29,17.89,65.6C114,161.34,129.51,165.15,154.5,166l22,22c-11-7.14-21.1-10.58-32.51-10.58-20.24,0-35.42,10.12-59,33.74,23.62,23.61,38.8,33.73,59,33.73,19.4,0,34.58-9.28,57.35-32.05l43,43c-11-7.59-21.08-11-32.89-11-20.24,0-35.42,10.12-59,33.74,23.62,23.61,38.8,33.73,59,33.73,19.4,0,34.58-9.27,57.35-32.05l43,43c-11-7.59-21.08-11-32.89-11-20.24,0-35.42,10.12-59,33.74,23.62,23.61,38.8,33.73,59,33.73,19.4,0,34.58-9.27,57.35-32l59,59L407.15,395l-59-59c22.77-22.77,32.05-37.95,32.05-57.35,0-20.24-10.12-35.43-33.74-59-23.61,23.61-33.73,38.8-33.73,59,0,11.8,3.37,21.93,11,32.89l-43-43C303.41,245.7,312.69,230.52,312.69,211.13Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M202.67,285.81q4.41,8.43,8,17.3a499.34,499.34,0,0,1,13.78-72.45q3.17-11.57,6.84-22.29c-14.09-66.28-37.93-123.16-74.8-159.29,23.9,66.13,39.2,145,42.72,230.41C200.39,281.58,201.55,283.68,202.67,285.81Z'/%3e%3cpath%20class='a'%20d='M260.87,266c.67-1.57,1.38-3.12,2.09-4.66,5.83-52.07,18-100.23,35.11-142C268.51,144.88,248.29,183.56,235.3,229c-8.6,30.07-14,63.08-16.9,97.18a208.27,208.27,0,0,1,7.21,54.33c0,2.7-.06,5.52-.17,8.38h13c-.12-3.45-.18-6.86-.18-10.12a296.38,296.38,0,0,1,7.29-65.53A269.28,269.28,0,0,1,260.87,266Z'/%3e%3cpath%20class='a'%20d='M327.52,191.55c-22.3,18.1-41.12,43-54.82,72.44-2.32,5-4.47,10.12-6.49,15.37q-3.42,8.89-6.24,18.25a281.45,281.45,0,0,0-11.73,81.11q0,5.08.18,10.12h50.67q-2-20.47-2-41.87C297.1,289.08,308.36,235.46,327.52,191.55Z'/%3e%3cpath%20class='a'%20d='M208.28,327a190.28,190.28,0,0,0-8.42-23.75c-13.84-32.14-36-59.14-63.52-77.61,19.15,36.33,30.41,80.7,30.41,128.6a300.61,300.61,0,0,1-2,34.64h50.67q.18-4.17.18-8.38a198.57,198.57,0,0,0-3.47-37C211.08,337.84,209.79,332.34,208.28,327Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20id='Ebene_2'%20data-name='Ebene%202'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M191.47,301a40,40,0,1,0,40-40A40.12,40.12,0,0,0,191.47,301Zm60,0a20,20,0,1,1-20-20A20.06,20.06,0,0,1,251.47,301Z'/%3e%3cpath%20class='cls-1'%20d='M131.47,271a40,40,0,1,0-40-40A40.12,40.12,0,0,0,131.47,271Zm0-60a20,20,0,1,1-20,20A20.06,20.06,0,0,1,131.47,211Z'/%3e%3cpath%20class='cls-1'%20d='M398.6,416.77c-23,10-46,13-69,13-63,0-117-40-180-40-26,0-50,6-76,15-7,2-11,9-9,15s9,8,16,6c23-9,46-16,69-16,63,0,117,40,180,40,26,0,52-3,78-13,8-3,10-8,7-15C411.6,415.77,405.6,413.77,398.6,416.77Z'/%3e%3cpath%20class='cls-1'%20d='M80.6,383.77c23-9,46-14,69-14,63,0,117,40,180,40q39,0,78-15c8-3,10-8,7-15-3-6-9-8-16-5q-34.5,15-69,15c-63,0-117-40-180-40a225,225,0,0,0-76,13c-7,2-11,9-9,15S73.6,385.77,80.6,383.77Z'/%3e%3cpath%20class='cls-1'%20d='M202.34,158.72c.87.29,1.83.55,2.86.79-.69.79-1.32,1.56-1.86,2.31-6,8.31-7.23,19.54-3.28,30.82,3.55,10.16,10.94,19.69,20.8,26.85s21.21,11.24,32,11.49c11.93.28,22.25-4.34,28.29-12.65.54-.75,1.09-1.58,1.63-2.48.54.9,1.08,1.73,1.63,2.48,5.87,8.08,15.78,12.66,27.3,12.66h1c10.76-.25,22.11-4.32,32-11.48s17.24-16.7,20.8-26.86c3.95-11.28,2.75-22.51-3.28-30.82q-.82-1.12-1.86-2.31c1-.24,2-.5,2.86-.79,9.77-3.17,17.34-11.55,20.77-23,3.1-10.31,2.73-22.36-1-33.95C374.56,76.13,352.84,61,333.45,67.29c-.88.28-1.8.64-2.77,1,.09-1,.14-2,.14-3C330.82,45,309.7,29,282.75,29s-48.07,16-48.07,36.37c0,.92,0,1.91.14,3-1-.41-1.9-.77-2.78-1-19.39-6.3-41.1,8.84-49.44,34.48-3.76,11.59-4.13,23.64-1,34C185,147.17,192.57,155.55,202.34,158.72ZM223.2,85.9a8.61,8.61,0,0,1,2.66.41c3.72,1.21,11.55,6,19.35,12.94l8.48,7.51a39.89,39.89,0,0,0-11,27.55,40.82,40.82,0,0,0,.35,5.21l-11.28,1.08c-10.36,1-19.54.31-23.25-.9-4.71-1.53-6.91-6.75-7.8-9.73-1.91-6.35-1.58-14.38.91-22C206.16,94,215.91,85.9,223.2,85.9Zm140.67,22c2.48,7.64,2.81,15.67.91,22-.9,3-3.1,8.2-7.8,9.73-3.71,1.21-12.89,1.9-23.26.9l-11.27-1.08a40.82,40.82,0,0,0,.35-5.21,39.9,39.9,0,0,0-11-27.55l8.49-7.51c7.8-6.9,15.63-11.73,19.34-12.94C347,83.92,358.76,92.22,363.87,108Zm-31,95.36c-6.5,4.73-14,7.52-20.66,7.67-3.12.07-8.76-.41-11.66-4.41-2.3-3.15-5.8-11.67-8.05-21.84l-2.44-11a40.11,40.11,0,0,0,27.87-20.24l9.75,5.74c9,5.28,16,11.24,18.29,14.4,2.9,4,1.61,9.52.58,12.45C344.37,192.29,339.39,198.59,332.88,203.31ZM253.28,211c-6.63-.15-14.17-2.94-20.67-7.67s-11.48-11-13.68-17.28c-1-2.93-2.31-8.45.59-12.45,2.29-3.16,9.31-9.12,18.29-14.4l9.75-5.74a40.11,40.11,0,0,0,27.87,20.24l-2.44,11c-2.26,10.17-5.76,18.69-8.05,21.84C262,210.58,256.38,211.05,253.28,211Zm57.54-145.6c0,3.9-2.17,12.84-6.33,22.39L300,98.15a40.1,40.1,0,0,0-34.46,0L261,87.77c-4.16-9.55-6.33-18.49-6.33-22.39,0-7.75,11.53-16.37,28.07-16.37S310.82,57.63,310.82,65.38Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpolygon%20points='162%20232%20142%20252%20210%20320%20340%20190%20320%20170%20210%20280%20162%20232'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m240,83.24L35.56,188.49l9.15,17.78,15.28-7.87v198.35h360v-198.35l15.28,7.87,9.15-17.78-204.43-105.25Zm6.99,176.56l31.71,54.37-31.71,54.37v-108.73Zm-10,108.57l-31.66-54.28,31.66-54.28v108.57Zm-6.69,8.38h-61.53l30.77-52.74,30.77,52.74Zm54.19-52.66l30.72,52.66h-61.44l30.72-52.66Zm5.79-9.92l31.71-54.37v108.73l-31.71-54.37Zm-5.79-9.92l-30.62-52.49h61.24l-30.62,52.49Zm-84.95-.08l-30.57-52.41h61.14l-30.57,52.41Zm-37.55-44.52l31.76,54.45-31.76,54.45v-108.9Zm238.01,117.12h-68v-135h-180.01v135h-71.99v-188.65l160-82.37,160,82.37v188.65Z'%20style='fill:%23005541;'/%3e%3cpath%20d='m215.27,217.33h53.45v-65.47h-53.45v65.47Zm10-55.47h33.45v45.47h-33.45v-45.47Z'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.4.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20.st1{fill:%23009E3C;}%20%3c/style%3e%3cg%20id='Design'%3e%3cg%3e%3cg%3e%3cpolygon%20class='st1'%20points='172,229.7%20131.7,229.7%20131.7,192.6%20111.4,192.6%20111.4,287.7%20131.7,287.7%20131.7,248.2%20172,248.2%20172,287.7%20192.3,287.7%20192.3,192.6%20172,192.6%20'/%3e%3cpolygon%20class='st1'%20points='268,192.6%20244.2,258.1%20220.4,192.6%20199.1,192.6%20235,287.7%20253,287.7%20288.9,192.6%20'/%3e%3cpath%20class='st1'%20d='M331.3,191.1c-25.5,0-44,20.6-44,49c0,28.4,18.5,49,44,49c25.6,0,44.2-20.6,44.2-49%20C375.4,211.7,356.9,191.1,331.3,191.1z%20M355,240.1c0,18.2-9.6,30.4-23.8,30.4c-14.1,0-23.6-12.2-23.6-30.4%20c0-18.2,9.5-30.4,23.6-30.4C345.5,209.8,355,222,355,240.1z'/%3e%3c/g%3e%3cpath%20class='st1'%20d='M318.3,383.8c-64.5,38-146.6,27.6-199.6-25.4c-61.8-61.8-63.9-161.2-6.2-225.6l-1,39.5l20,0.5l1.8-73.1%20l-73.2-1.8l-0.5,20l38.5,0.9c-65.3,72.3-63.1,184.2,6.4,253.8c59.4,59.4,151.5,71.1,223.8,28.4l8.6-5.1l-10.2-17.2L318.3,383.8z'%20/%3e%3cpath%20class='st1'%20d='M375.4,107.4C315.9,48,223.9,36.4,151.5,79l-8.6,5.1l10.2,17.2l8.6-5.1c64.5-38,146.6-27.6,199.6,25.4%20c61.8,61.8,63.9,161.1,6.3,225.6l0.9-39.4l-20-0.5l-1.6,73.1l73.1,1.8l0.5-20l-38.5-1C447.1,288.9,444.9,177,375.4,107.4z'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Beschreibung'%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m240,90c-84.38,0-150,65.62-150,150s65.62,150,150,150,150-65.62,150-150-65.62-150-150-150Zm0,276.4c-71.1,0-126.4-55.3-126.4-126.4s55.3-126.4,126.4-126.4,126.4,55.3,126.4,126.4-55.3,126.4-126.4,126.4Z'%20style='fill:%23009e3c;%20fill-rule:evenodd;'/%3e%3crect%20x='226.2'%20y='209.08'%20width='27.6'%20height='113.71'%20style='fill:%23009e3c;'/%3e%3crect%20x='226.2'%20y='157.21'%20width='27.6'%20height='27.6'%20style='fill:%23009e3c;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20id='Ebene_1'%20data-name='Ebene%201'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1,.cls-2{fill:%23009e3c;}.cls-1{fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20id='Fill-1'%20class='cls-1'%20d='M313,150a40,40,0,1,0-40-40A40.12,40.12,0,0,0,313,150Zm0-60a20,20,0,1,1-20,20A20.06,20.06,0,0,1,313,90Zm100,50a40,40,0,1,0,40,40A40.12,40.12,0,0,0,413,140Zm0,60a20,20,0,1,1,20-20A20.06,20.06,0,0,1,413,200ZM313,290a40,40,0,1,0-40-40A40.12,40.12,0,0,0,313,290Zm0-60a20,20,0,1,1-20,20A20.06,20.06,0,0,1,313,230Z'/%3e%3cpath%20class='cls-2'%20d='M273,307.27H242.52a129.58,129.58,0,0,0-11.43-45.1l26.5-22.89a10,10,0,0,0-13.07-15.14L221,244.5a99.74,99.74,0,0,0-19.06-20.6,58.63,58.63,0,0,0-7.24-37.52l21.59-18.65a10,10,0,0,0-13.07-15.14l-21.64,18.69c-16.66-13.66-42.27-13.57-58.84.19l-21.86-18.88a10,10,0,0,0-13.07,15.14l21.89,18.91a58.64,58.64,0,0,0-7.08,37.26,99.51,99.51,0,0,0-19.23,20.85L59.48,224.14a10,10,0,0,0-13.07,15.14l26.82,23.17a129.69,129.69,0,0,0-11.29,44.82H31a10,10,0,0,0,0,20H61.94a129.69,129.69,0,0,0,11.29,44.82L46.41,395.26A10,10,0,0,0,59.48,410.4l23.86-20.61C118,441.36,186.1,441.51,221,390l23.57,20.36a10,10,0,0,0,13.07-15.14l-26.5-22.89a129.58,129.58,0,0,0,11.43-45.1H273C286.26,326.74,286.26,307.8,273,307.27Zm-50.11,10c.67,38.21-21.69,83.46-60.89,90.59V281.7h55.33A115.19,115.19,0,0,1,222.89,317.27ZM98.53,376.66c-17.9-27-21.52-64.21-11.4-95H142V407.77C124.7,404.51,109.41,393.11,98.53,376.66Zm26.68-176.59c14.93-31.69,53.86-21.22,57.1,12a76.06,76.06,0,0,0-60.17,0A37.82,37.82,0,0,1,125.21,200.07Zm-15.62,44.31c32.61-32,76.85-20.36,98.73,17.32H96.14A85,85,0,0,1,109.59,244.38Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cg%20id='kalender'%3e%3cpath%20id='Fill-1'%20d='m345,112.5v-45h-30v45h-150v-45h-30v45h-55c-11,0-20,9-20,20v260c0,11,9,20,20,20h320c11,0,20-9,20-20V132.5c0-11-9-20-20-20h-55ZM80,392.5v-200h320v200H80Z'%20style='fill:%23009e3c;%20fill-rule:evenodd;'/%3e%3c/g%3e%3crect%20x='106.94'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='156.94'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='206.94'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='256.95'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='106.94'%20y='269.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='156.94'%20y='269.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='206.94'%20y='269.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='kalender'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M345,113V68h-30v45H165V68h-30v45H80c-11,0-20,9-20,20v260c0,11,9,20,20,20h320c11,0,20-9,20-20%20V133c0-11-9-20-20-20H345z%20M80,393V193h320v200H80z%20M240,343c-14,0-25-11-25-25h-21c0,25,20,45,46,45c25,0,45-20,45-45%20c0-15-7-28-18-36c8-7,13-18,13-29c0-22-18-40-40-40c-23,0-41,18-41,40h21c0-11,9-20,20-20s20,9,20,20s-9,20-20,20h-10v20h10%20c13,0,25,11,25,25S254,343,240,343z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='kompass'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,70c-95,0-170,75-170,170s75,170,170,170s170-75,170-170S335,70,240,70z%20M250,350h-20v40%20c-76-5-135-64-140-140h40v-20H90c5-76,64-135,140-140v40h20V90c76,5,135,64,140,140h-40v20h40c-5,76-64,135-140,140V350z%20M152,326%20l2,2l116-58l57-114l-3-3l-114,57L152,326z%20M220,240l20,20l-50,30L220,240z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='kontoabmelden'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M83,385V95h190v40h20V95c0-13-7-20-20-20H83c-13,0-20,7-20,20v290c0,13,7,20,20,20h190%20c13,0,20-7,20-20v-40h-20v40H83z%20M333,150l-20,20l55,55H223v30h145l-55,55l20,20l80-80c5-5,5-15,0-20L333,150z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a,.b{fill:%23009e3c;}.a{fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M366.55,142.24c0-14.72-7.36-25.76-24.53-42.93-17.18,17.17-24.54,28.21-24.54,42.93,0,8.59,2.46,15.95,8,23.92l-31.28-31.28c16.56-16.56,23.3-27.6,23.3-41.71,0-14.72-7.36-25.76-24.53-42.93-17.17,17.17-24.53,28.21-24.53,42.93,0,8.3,2.5,15.67,7.69,23.65l-16-16c-.58-18.17-3.36-29.46-12-38.13-10.41-10.41-23.42-13-47.71-13,0,24.29,2.6,37.3,13,47.71,8.67,8.66,20,11.44,38.13,12l16,16c-8-5.19-15.35-7.69-23.65-7.69-14.72,0-25.76,7.36-42.93,24.53,17.17,17.17,28.21,24.53,42.93,24.53,14.11,0,25.15-6.74,41.71-23.3l31.28,31.28c-8-5.52-15.33-8-23.92-8-14.72,0-25.76,7.36-42.93,24.54,17.17,17.17,28.21,24.53,42.93,24.53,14.11,0,25.15-6.75,41.71-23.31l31.28,31.28c-8-5.52-15.34-8-23.92-8-14.72,0-25.76,7.36-42.94,24.53,17.18,17.18,28.22,24.54,42.94,24.54,14.1,0,25.14-6.75,41.7-23.31l42.94,42.94,8.59-8.59L392.31,233c16.56-16.56,23.31-27.6,23.31-41.7,0-14.72-7.36-25.76-24.54-42.94-17.17,17.18-24.53,28.22-24.53,42.94,0,8.58,2.45,15.94,8,23.92L343.24,184C359.8,167.39,366.55,156.35,366.55,142.24Z'/%3e%3cpath%20class='b'%20d='M203.88,221.38l-4.08-13.17,9.67-22.79-10.94-13.25-24.13,5.2-11.91-6.47-9.24-23.15-18.05-1.82-14.13,20.89-13.16,4.08-22.8-9.67L71.86,172.17l5.2,24.14-6.47,11.9-23.15,9.24-1.82,18.06,20.89,14.12,4.08,13.17-9.67,22.79,10.94,13.25L96,293.64l11.91,6.47,9.23,23.15,18.06,1.82,14.13-20.89,13.16-4.08,22.79,9.67,13.25-10.94-5.2-24.14,6.47-11.9L223,253.56l1.82-18.05Zm-68.68,35.7a21.58,21.58,0,1,1,21.57-21.57A21.58,21.58,0,0,1,135.2,257.08Z'/%3e%3cpath%20class='b'%20d='M339.56,328.14,335.47,315l9.68-22.8-10.94-13.25-24.14,5.2-11.91-6.46-9.23-23.16-18.06-1.82-14.13,20.89-13.16,4.09L220.79,268l-13.26,10.94,5.21,24.14L206.27,315l-23.15,9.23-1.82,18.06,20.89,14.13,4.08,13.16-9.67,22.79,10.93,13.26,24.14-5.21,11.91,6.47L252.82,430l18.05,1.82L285,411l13.16-4.08L321,416.54l13.26-10.93L329,381.47l6.46-11.91,23.16-9.24,1.82-18.05Zm-68.69,35.7a21.58,21.58,0,1,1,21.58-21.57A21.57,21.57,0,0,1,270.87,363.84Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a,.b{fill:%23009e3c;}.a{fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M277.06,308.3c0-13.74-6.87-24.05-22.91-40.09-16,16-22.91,26.35-22.91,40.09,0,8,2.3,14.89,7.45,22.34l-29.21-29.21c15.46-15.47,21.76-25.77,21.76-38.95,0-13.74-6.87-24.05-22.91-40.09-16,16-22.91,26.35-22.91,40.09,0,7.75,2.34,14.63,7.19,22.08l-15-15c-.55-17-3.13-27.51-11.23-35.6-9.72-9.72-21.87-12.15-44.55-12.15,0,22.68,2.43,34.83,12.15,44.55,8.1,8.09,18.64,10.68,35.61,11.22l15,15c-7.45-4.85-14.33-7.19-22.08-7.19-13.74,0-24,6.87-40.09,22.91,16,16,26.35,22.91,40.1,22.91,13.17,0,23.48-6.3,38.94-21.76l29.21,29.21c-7.44-5.16-14.32-7.45-22.34-7.45-13.74,0-24.05,6.87-40.09,22.91,16,16,26.35,22.91,40.09,22.91,13.18,0,23.49-6.3,38.95-21.76l29.21,29.21c-7.44-5.16-14.32-7.45-22.34-7.45-13.74,0-24.05,6.87-40.09,22.91,16,16,26.35,22.91,40.09,22.91,13.18,0,23.49-6.3,39-21.76l40.09,40.09,8-8-40.09-40.09c15.46-15.47,21.76-25.78,21.76-38.95,0-13.74-6.87-24.05-22.91-40.09-16,16-22.91,26.35-22.91,40.09,0,8,2.3,14.89,7.45,22.34L255.3,347.25C270.76,331.78,277.06,321.47,277.06,308.3Z'/%3e%3cpath%20class='b'%20d='M275,251.71a10.51,10.51,0,0,0,5.94-1.85c13.33-9.15,34.13-37.05,17.41-77.11-14.47-34.67,4.38-51,5.19-51.73l.11-.08a10.5,10.5,0,0,0-13.53-16.07,52.15,52.15,0,0,0-14,20.46c-4.5,11.42-7.66,30.32,2.86,55.52,6,14.38,6.23,27.31.65,38.55A38.83,38.83,0,0,1,269,232.55a10.5,10.5,0,0,0,6,19.16Z'/%3e%3cpath%20class='b'%20d='M216.24,79.33c-4.5,11.42-7.66,30.32,2.86,55.52,6,14.38,6.23,27.31.66,38.54a38.79,38.79,0,0,1-10.56,13.15,10.5,10.5,0,1,0,11.44,17.62l.45-.3c13.33-9.15,34.13-37.05,17.41-77.11C224,92.08,242.88,75.7,243.69,75l.11-.08a10.51,10.51,0,0,0-13.53-16.08A52.25,52.25,0,0,0,216.24,79.33Z'/%3e%3cpath%20class='b'%20d='M181.74,75l.12-.08a10.51,10.51,0,0,0-13.53-16.08,52.28,52.28,0,0,0-14,20.47c-4.49,11.42-7.66,30.32,2.87,55.52,6,14.38,6.23,27.31.65,38.54a38.67,38.67,0,0,1-10.56,13.15,10.51,10.51,0,0,0,11.45,17.62l.45-.3c13.33-9.15,34.13-37.05,17.4-77.11C162.06,92.13,180.9,75.7,181.74,75Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='lagerservice'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M340,250h-20V140h-20v140h-30l-40-160H120c-11,0-20,9-20,20v110l-30,10v90c0,11,9,20,20,20h7%20c6,6,14,10,23,10s17-4,23-10h57v-20c0-28,22-50,50-50s50,22,50,50v10h160v-20H340V250z%20M140,250V150h80l30,130h-39L140,250z%20M250,320c-17,0-30,13-30,30s13,30,30,30s30-13,30-30S267,320,250,320z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='Landwirtschaft'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M243,303v-68c53-10,120-56,120-121c0-22-15-37-37-37c-47,0-76,43-91,88C217,86,171,37,126,37%20c-36,0-63,27-63,63c0,53,70,126,160,136v61c-21-9-44-14-69-14H57v20h96c78,0,140,62,140,140h131v-20H312l-3-20h115v-20H303%20c-2-7-5-14-8-20h129v-20H282c-5-7-11-14-18-20h160v-20H243z%20M154,323H57v20h96c56,0,100,44,100,100h20C273,376,221,324,154,323z%20M154,363H57v20h96c34,0,60,26,60,60h20C233,398,199,364,154,363z%20M154,403H57v20h96c11,0,20,9,20,20h20C193,421,176,404,154,403z'%20/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='loeschen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M250,100V80c0-6-4-10-10-10s-10,4-10,10v20H120c-6,0-10,4-10,10s4,10,10,10h240c6,0,10-4,10-10%20s-4-10-10-10H250z%20M131,140c-6,0-11,5-10,11l28,250c1,7,4,9,10,9h162c6,0,9-2,10-9l28-250c1-6-4-11-10-11H131z%20M168,390l-23-230%20h191l-24,230H168z%20M240,370c6,0,10-4,10-10V190c0-6-4-10-10-10s-10,4-10,10v170C230,366,234,370,240,370z%20M200,360c6,0,10-4,10-10%20l-10-150c0-6-4-10-10-10s-10,4-10,10l10,150C190,356,194,360,200,360z%20M280,360c6,0,10-4,10-10l10-150c0-6-4-10-10-10s-10,4-10,10%20l-10,150C270,356,274,360,280,360z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cg%20id='meinkonto'%3e%3cpath%20id='Fill-1'%20d='m240,410c95,0,170-75,170-170s-75-170-170-170S70,145,70,240s75,170,170,170Zm0-20c-84,0-150-66-150-150S156,90,240,90s150,66,150,150-66,150-150,150Zm-80-60h160c0-45-35-80-80-80s-79,35-80,80Zm80-100c28,0,50-22,50-50s-22-50-50-50-50,22-50,50,22,50,50,50Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_3'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cg%20id='kontoabmelden'%3e%3cpath%20id='Fill-1'%20d='M83,385V95h190v40h20v-40c0-13-7-20-20-20H83c-13,0-20,7-20,20v290c0,13,7,20,20,20h190c13,0,20-7,20-20v-40h-20v40H83ZM333,150l-20,20,55,55h-145v30h145l-55,55,20,20,80-80c5-5,5-15,0-20l-80-80Z'%20style='fill:%23009e3c;%20fill-rule:evenodd;%20stroke-width:0px;'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DtkIUxl0__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='meinkonto'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,410c95,0,170-75,170-170S335,70,240,70S70,145,70,240S145,410,240,410z%20M240,390%20c-84,0-150-66-150-150S156,90,240,90s150,66,150,150S324,390,240,390z%20M160,330h160c0-45-35-80-80-80C196,250,161,285,160,330z%20M240,230c28,0,50-22,50-50s-22-50-50-50s-50,22-50,50S212,230,240,230z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='meinlagerhaus'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M430,255L240,105L50,255v10h40v30H50v80h380v-80h-40v-30h40V255z%20M370,295H110v-50H90l150-116%20l150,116h-20V295z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M324.36,294.58V344a55.55,55.55,0,0,1-55.49,55.48H203.2A55.56,55.56,0,0,1,147.7,344V341.4h58.44v-17H147.7V288.88h28.42v-17H147.7V236.35h49.15l-2.43-2.88a31.22,31.22,0,0,1-6.81-14.12H147.7V183.83h28.42v-17H147.7V131.31h58.44v-17H147.7v-29h-17V344a72.57,72.57,0,0,0,72.5,72.48h65.67A72.56,72.56,0,0,0,341.36,344V267.53Z'/%3e%3cpolygon%20class='a'%20points='341.36%20149.25%20341.36%2085.34%20324.36%2085.34%20324.36%20176.29%20341.36%20149.25'/%3e%3cpath%20class='a'%20d='M204,225.34l68.78,81.36a18.88,18.88,0,0,0,14.41,6.68c.45,0,.89,0,1.33,0a18.83,18.83,0,0,0,14.66-8.8L409.77,135a18.88,18.88,0,1,0-32-20.1L285,262.58l-52.11-61.64A18.89,18.89,0,1,0,204,225.34Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='menu'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M50,350L50,350c0,13,7,20,20,20h340c13,0,20-7,20-20l0,0c0-13-7-20-20-20H70C57,330,50,337,50,350%20z%20M50,130L50,130c0,13,7,20,20,20h340c13,0,20-7,20-20l0,0c0-13-7-20-20-20H70C57,110,50,117,50,130z%20M50,240L50,240%20c0,13,7,20,20,20h340c13,0,20-7,20-20l0,0c0-13-7-20-20-20H70C57,220,50,227,50,240z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M338.37,53,75.24,316.17l86.5,86.5L424.87,139.53ZM161.74,378.63,99.28,316.17l39.26-39.26,41.32,41.33,12-12-41.32-41.33,25.11-25.11,20.1,20.09,12-12-20.1-20.09,25.13-25.13L254.14,244l12-12-41.32-41.32L250,165.49l20.1,20.1,12-12L262,153.47l25.11-25.11,41.33,41.32,12-12-41.32-41.33,39.25-39.25,62.46,62.45Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20id='Ebene_1'%20data-name='Ebene%201'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M189.62,213.1l0,0C157.15,192.33,108.08,202,106,202.4a10,10,0,0,0-7.75,12.06c.48,2.06,12.09,50.8,44.56,71.67a43.08,43.08,0,0,0,23.24,6.79,43.82,43.82,0,0,0,25.4-8.13c10.43,12,19.54,26.89,19.54,42.61h20c0-11.16,4.65-23,11.59-34.56a64.28,64.28,0,0,0,80.87-8.06c42.6-42.4,44-121.32,44-124.66A10,10,0,0,0,357.37,150c-3.33,0-82.15,1.54-124.64,44a64.24,64.24,0,0,0-5.1,85,135.63,135.63,0,0,0-7,12.25,123.41,123.41,0,0,0-15.93-21.68A43.55,43.55,0,0,0,189.62,213.1Zm44.28,26.3a43.93,43.93,0,0,1,13-31.23c28.22-28.22,78.12-35.6,100-37.51-1.89,21.88-9.23,71.81-37.51,100l0,0a44.23,44.23,0,0,1-55.24,5.83,255,255,0,0,1,42.68-41.64,10,10,0,0,0-11.94-16,280,280,0,0,0-44.76,43.13A43.84,43.84,0,0,1,233.9,239.4Zm-80.29,29.89c-17.63-11.33-28-35.05-32.7-48.83,16-1.51,41.27-1.16,57.89,9.46a23.53,23.53,0,0,1,10.26,24.44,214.11,214.11,0,0,0-32.06-23,10,10,0,0,0-9.8,17.43,202.67,202.67,0,0,1,29.71,21.51A23.4,23.4,0,0,1,153.61,269.29Z'/%3e%3cpath%20class='cls-1'%20d='M318.32,383.79a164.33,164.33,0,0,1-199.55-25.36c-61.83-61.83-63.9-161.19-6.25-225.64l-1,39.46,20,.49,1.79-73.09L60.15,97.86l-.49,20,38.54.94C32.92,191.07,35.06,303,104.64,372.58A184.27,184.27,0,0,0,328.48,401l8.61-5.08-10.16-17.22Z'/%3e%3cpath%20class='cls-1'%20d='M375.37,107.42A184.32,184.32,0,0,0,151.52,79l-8.61,5.08,10.16,17.22,8.61-5.08a164.33,164.33,0,0,1,199.55,25.36c61.81,61.81,63.9,161.13,6.3,225.57l.89-39.41-20-.45-1.65,73.07,73.07,1.79.49-20-38.54-.95C447.08,288.93,444.94,177,375.37,107.42Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='notification'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M340,185c0-44-17-100-100-100c-76,0-100,56-100,100c0,77-19,119-60,150v20h121c0,22,18,40,40,40%20s40-18,40-40h119v-20C360,304,340,260,340,185z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M351.92,113.88V90.12H128.08v23.76H143.4V180.3H128.08v23.76H143.4v66.42H128.08v23.76H143.4v66.42H128.08v23.76H351.92V360.66H336.6V294.24h15.32V270.48H336.6V204.06h15.32V180.3H336.6V113.88ZM325.79,285.61H154.41V274.27H325.79Zm0-90.18H154.41V184.09H325.79Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='preil-links'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M160.5,220l84-80l-30-30l-120,120c-6,6-6,14,0,20l120,120l30-30l-84-80h229v-40H160.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='pfeil-rechts'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M265,110l-30,30l84,80H90v40h229l-84,80l30,30l120-120c6-6,6-14,0-20L265,110z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='pflanzenschutz'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M430,106c-56,0-122,22-150,50c-34,33-44,85-26,121c-12,8-23,21-31,34c-5-26-13-53-23-75%20c26-37,17-94-10-120c-27-27-84-40-140-40c-6,0-10,4-10,10c0,56,13,113,40,140c22,23,65,33,100,20c15,34,28,80,28,114v45h20v-45%20c0-25,17-55,40-69c36,20,89,9,122-25c28-28,50-94,50-150C440,110,436,106,430,106z%20M376,252c-26,26-61,35-89,24c31-24,49-52,78-79%20c4-4,5-9,1-14s-9-5-14,0c-29,27-48,55-80,80c-14-28-5-66,22-93c25-25,81-44,126-44C420,171,401,227,376,252z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20id='Ebene_1'%20data-name='Ebene%201'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M450,162.72c-1.8-5.8-6.9-8.4-13.6-6.3l-47.2,14.8,6,19.3,47.2-14.8C449.08,173.62,451.78,168.52,450,162.72Z'/%3e%3cpath%20class='cls-1'%20d='M431.58,265.92l-40.5-21.2-9.9,19,40.4,21.2c6.3,3.3,12.1,1.5,15.1-4.2C440,274.42,437.88,269.22,431.58,265.92Z'/%3e%3cpath%20class='cls-1'%20d='M374.78,83.12c-6.3-3.3-11.5-1.2-14.8,5.1l-21.2,40.5,19,10L379,98.22C382.28,91.92,380.48,86.12,374.78,83.12Z'/%3e%3cpath%20class='cls-1'%20d='M268.68,124.12l19.3-6-14.8-47.2c-2.1-6.7-7.2-9.4-13-7.6s-8.4,6.9-6.3,13.6Z'/%3e%3cpath%20class='cls-1'%20d='M176,156.42l40.5,21.2,10-19L186,137.42c-6.3-3.3-12.1-1.5-15.1,4.2S169.68,153.12,176,156.42Z'/%3e%3cpath%20class='cls-1'%20d='M318.73,211.89a10,10,0,0,0-9.15-6H99.08a10,10,0,0,0-9.15,6Q74.93,245.94,60,280q-14.83,33.78-29.67,67.55a10,10,0,0,0,9.15,14h132.9v19.6H150a10,10,0,0,0,0,20h108.8a10,10,0,0,0,0-20h-22.4v-19.6h132.8a10,10,0,0,0,9.16-14C359.32,304.21,339.27,258.54,318.73,211.89Zm1.61,53.33H258.23q-2.9-19.64-5.8-39.3h50.62Q311.77,245.72,320.34,265.22Zm-79.38,20q4.15,28.18,8.32,56.4H161.72q4-28.22,8-56.4Zm-68.43-20q2.79-19.64,5.56-39.3h54.13l5.79,39.3Zm-66.93-39.3h52.29q-2.77,19.67-5.56,39.3h-64Q97,245.57,105.6,225.92ZM78.31,288.07c.42-.95.84-1.9,1.25-2.85H149.5q-4,28.18-8,56.4H54.8Q66.58,314.86,78.31,288.07Zm138.07,93.15h-24v-19.6h24Zm53.11-39.6q-4.15-28.22-8.31-56.4h67.95q12.6,28.66,24.75,56.4Z'/%3e%3cpath%20class='cls-1'%20d='M256.18,193.32a10.87,10.87,0,0,0,1.7-2.2,50,50,0,0,1,88.6,46.4,5.94,5.94,0,0,1-.4.8c-4.4,10.9,10.2,19.8,18,11a11.55,11.55,0,0,0,1.4-1.9c18.6-35.3,5.3-77.7-30.1-96.3s-77.8-5.3-96.4,30.1a.35.35,0,0,1-.1.2C233.58,192.22,247.58,201.82,256.18,193.32Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='plus'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,70c-95,0-170,75-170,170s75,170,170,170s170-75,170-170S335,70,240,70z%20M240,390%20c-84,0-150-66-150-150S156,90,240,90s150,66,150,150S324,390,240,390z%20M225,140v85h-85v30h85v85h30v-85h85v-30h-85v-85H225z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.4.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20.st1{fill:%23009E3C;}%20%3c/style%3e%3cg%20id='Design'%3e%3cg%3e%3cpolygon%20class='st0'%20points='162,232%20142,252%20210,320%20340,190%20320,170%20210,280%20'/%3e%3cg%3e%3cpath%20class='st1'%20d='M203.4,424c-1.7,0-3.5-0.2-5.2-0.6c-10.4-2.4-16.9-11.1-22.6-18.8c-3.2-4.3-6.8-9.2-9.7-10.6%20c-3.1-1.5-9-1.3-14.7-1.1c-9.5,0.3-20.2,0.7-28.4-5.9c-8.3-6.6-10.3-17.2-12.1-26.5c-1-5.3-2.2-11.4-4.3-14%20c-2.1-2.6-7.7-5-12.6-7.2c-8.7-3.8-18.6-8.2-23.2-17.7c-4.5-9.4-1.8-19.8,0.6-28.9c1.5-5.6,3-11.3,2.2-14.7%20c-0.7-3.1-4.6-7.7-8.1-11.7c-6.3-7.3-13.3-15.6-13.3-26.4c0-10.8,7.1-19.1,13.3-26.4c3.5-4,7.4-8.6,8.1-11.7%20c0.8-3.4-0.7-9.1-2.2-14.7c-2.4-9.1-5.1-19.5-0.6-28.9c4.6-9.6,14.5-13.9,23.2-17.7c4.9-2.2,10.5-4.6,12.6-7.2%20c2.1-2.6,3.3-8.7,4.3-14c1.8-9.3,3.8-19.9,12.1-26.5c8.2-6.6,19-6.2,28.4-5.9c5.7,0.2,11.6,0.4,14.7-1.1%20c2.9-1.4,6.5-6.3,9.7-10.6c5.7-7.7,12.2-16.4,22.6-18.8c10.1-2.3,19.5,2.6,27.8,7c5.1,2.7,10.4,5.5,14,5.5c3.5,0,8.9-2.8,14-5.5%20c8.3-4.4,17.7-9.3,27.8-7c10.4,2.4,16.9,11.1,22.6,18.8c3.2,4.3,6.8,9.2,9.7,10.6c3.1,1.5,9,1.3,14.7,1.1%20c9.5-0.3,20.2-0.7,28.4,5.9c8.3,6.6,10.3,17.2,12.1,26.5c1,5.3,2.2,11.4,4.3,14c2.1,2.6,7.7,5,12.6,7.2%20c8.7,3.8,18.6,8.2,23.2,17.7c4.5,9.4,1.8,19.8-0.6,28.9c-1.5,5.6-3,11.3-2.2,14.7c0.7,3.1,4.6,7.7,8.1,11.7%20c6.3,7.3,13.3,15.6,13.3,26.4c0,10.8-7.1,19.1-13.3,26.4c-3.5,4-7.4,8.6-8.1,11.7c-0.8,3.4,0.7,9.1,2.2,14.7%20c2.4,9.1,5.1,19.5,0.6,28.9c-4.6,9.6-14.5,13.9-23.2,17.7c-4.9,2.2-10.5,4.6-12.6,7.2c-2.1,2.6-3.3,8.7-4.3,14%20c-1.8,9.3-3.8,19.9-12.1,26.5c-8.2,6.6-19,6.2-28.4,5.9c-5.7-0.2-11.6-0.4-14.7,1.1c-2.9,1.4-6.5,6.3-9.7,10.6%20c-5.7,7.7-12.2,16.4-22.6,18.8c-10.1,2.3-19.5-2.6-27.8-7c-5.1-2.7-10.4-5.5-14-5.5c-3.5,0-8.9,2.8-14,5.5%20C219.1,420,211.5,424,203.4,424z%20M240,390.9c8.5,0,16.3,4.1,23.3,7.8c5,2.6,11.2,5.9,14.1,5.2c3.2-0.7,7.3-6.3,11-11.2%20c4.8-6.5,9.7-13.1,17.1-16.7c7.5-3.6,16.3-3.3,24-3.1c5.7,0.2,12.8,0.4,15.3-1.5c2.5-2,3.8-9,4.9-14.7c1.5-7.6,3.1-16.2,8.3-22.7%20c5.1-6.4,13.1-9.9,20.2-13c5.6-2.4,11.9-5.2,13.3-8.1c1.3-2.8-0.5-9.6-1.9-15.1c-2-7.5-4.2-16-2.4-24.2%20c1.8-7.9,7.2-14.2,12.4-20.3c4-4.7,8.5-10,8.5-13.4c0-3.4-4.5-8.7-8.5-13.4c-5.2-6.1-10.6-12.3-12.4-20.3%20c-1.9-8.2,0.4-16.7,2.4-24.2c1.5-5.5,3.3-12.3,1.9-15.1c-1.4-2.9-7.7-5.7-13.3-8.1c-7.1-3.1-15-6.6-20.2-13%20c-5.2-6.5-6.8-15.1-8.3-22.7c-1.1-5.6-2.4-12.7-4.9-14.7c-2.5-2-9.6-1.7-15.3-1.5c-7.8,0.3-16.5,0.5-24-3.1%20c-7.4-3.6-12.3-10.2-17.1-16.7c-3.6-4.9-7.8-10.5-11-11.2c-2.9-0.7-9.1,2.6-14.1,5.2c-6.9,3.6-14.8,7.8-23.3,7.8%20c-8.5,0-16.3-4.1-23.3-7.8c-5-2.6-11.2-5.9-14.1-5.2c-3.2,0.7-7.3,6.3-11,11.2c-4.8,6.5-9.7,13.1-17.1,16.7%20c-7.5,3.6-16.3,3.3-24,3.1c-5.7-0.2-12.8-0.4-15.3,1.5c-2.5,2-3.8,9-4.9,14.7c-1.5,7.6-3.1,16.2-8.3,22.7%20c-5.1,6.4-13.1,9.9-20.2,13c-5.6,2.4-11.9,5.2-13.3,8.1c-1.3,2.8,0.5,9.6,1.9,15.1c2,7.5,4.2,16,2.4,24.2%20c-1.8,7.9-7.2,14.2-12.4,20.3c-4,4.7-8.5,10-8.5,13.4c0,3.4,4.5,8.7,8.5,13.4c5.2,6.1,10.6,12.3,12.4,20.3%20c1.9,8.2-0.4,16.7-2.4,24.2c-1.5,5.5-3.3,12.3-1.9,15.1c1.4,2.9,7.7,5.7,13.3,8.1c7.1,3.1,15,6.6,20.2,13%20c5.2,6.5,6.8,15.1,8.3,22.7c1.1,5.6,2.4,12.7,4.9,14.7c2.5,2,9.6,1.7,15.3,1.5c7.7-0.3,16.5-0.5,24,3.1%20c7.4,3.6,12.3,10.2,17.1,16.7c3.6,4.9,7.8,10.5,11,11.2c2.9,0.7,9.1-2.6,14.1-5.2C223.7,395,231.5,390.9,240,390.9z'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3cg%20id='Beschreibung'%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='qualitaetsservice'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M350,80h-70c0-22-18-40-40-40s-40,18-40,40h-70c-11,0-20,9-20,20v310c0,11,9,20,20,20h220%20c11,0,20-9,20-20V100C370,89,361,80,350,80z%20M130,410V100h30v10c0,11,9,20,20,20h120c11,0,20-9,20-20v-10h30v310H130z%20M170,180%20l-10,10l20,20l40-40l-10-10l-30,30L170,180z%20M240,170v20h70v-20H240z%20M170,250l-10,10l20,20l40-40l-10-10l-30,30L170,250z%20M240,240%20v20h60v-20H240z%20M170,320l-10,10l20,20l40-40l-10-10l-30,30L170,320z%20M320,330v-20h-80v20H320z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20id='Ebene_2'%20data-name='Ebene%202'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M455.64,181.76C449,139,437.21,101.39,386.8,127.46c-2.89-56.72-41.36-47.87-81.6-32.09-24.79,11.47-20.77,36.48-10.05,56.87-23,1-46.64,10.14-44.06,37.35,3.21,18.24,8,50.29,25.71,59.32l-18.87,17.32-5.4-24.5-49.46-52.16c17.89-9.06,22.44-41.22,25.58-59.56,2.43-27.22-21.26-36.21-44.27-37.1C195,72.45,198.87,47.44,174,36.09,133.66,20.53,95.15,11.93,92.59,68.65,72.13,58.05,47.12,54.15,35.77,79c-15.56,40.35-24.15,78.85,32.56,81.42C42.52,211,80.28,222.56,123,229c27.25,2.35,36.14-21.07,37.09-44.27a117.31,117.31,0,0,0,17,6.54l57.12,60.22,20.7,94-23.53-.31C229.71,305.52,213.6,291,174.31,302c8-56.23-31.44-54.9-73.95-47.12-26.53,6.52-27.37,31.84-20.75,53.9-56.23-8-54.9,31.43-47.12,73.95,6.69,26.69,31.76,27.3,53.91,20.75-4.49,29.95,5.25,52.8,39,50.73,42.26-.08,69.36-9.22,55.69-57.51,24.49,3.73,49.86-2.16,50.54-31.45l27.67.36,17.36,78.87,19.54-4.3L262.9,288.81l42.6-39.08a116.43,116.43,0,0,0,14.43-5.84C321,267.1,330,290.46,357.28,288c42.72-6.65,80.39-18.42,54.3-68.84C434.6,218.08,458.23,209,455.64,181.76ZM144.4,203.11a18.28,18.28,0,0,1-19.84,13.42,158.14,158.14,0,0,1-41-10.86C64,197,75.16,174.29,82.32,160.61c3.79-6.1,7-13.93,13.75-17.31A34.64,34.64,0,0,0,131,160.92c2.92,7.5,9.84,13,16.85,17A104.67,104.67,0,0,1,144.4,203.11ZM36.5,124.88a157.72,157.72,0,0,1,10.85-41c8.73-19.58,31.38-8.31,45.07-1.19,6.09,3.8,13.93,7,17.3,13.75C97.43,102.87,90,117.59,92.1,131.33c-7.5,2.92-13,9.85-17,16.85C59.68,147.65,34.35,146.13,36.5,124.88Zm71.8-74.64a18.27,18.27,0,0,1,19.84-13.42A157.9,157.9,0,0,1,169.2,47.67c19.53,8.64,8.34,31.39,1.18,45.07-8.06,0-16.81,1.38-23.06,6.46a34.75,34.75,0,0,0-25.62-6.78c-2.92-7.5-9.85-13-16.86-17A104.6,104.6,0,0,1,108.3,50.24Zm42.2,74.25c1.87,32-44.38,36.2-48.3,4.37C100.32,96.87,146.59,92.66,150.5,124.49Zm9.78,46.21c-6.09-3.8-13.93-7-17.29-13.75,17-8.81,23.21-32.36,12.78-48.38,6.26-4.18,14.66-3.13,21.84-3.41,15.42.54,40.74,2.06,38.59,23.31a157.93,157.93,0,0,1-10.85,41.05C196.65,189.05,174,177.85,160.28,170.7ZM219,367.62c-1.85,21.29-27,18.06-42.25,15.73-7-1.62-15.45-2.13-20.81-7.4,13.24-13.84,11.52-38.09-3.58-49.93,2.77-4,8-6,12.47-7.72a105.56,105.56,0,0,1,32-7.46,18.27,18.27,0,0,1,19.12,14.43A160.11,160.11,0,0,1,219,367.62ZM172.2,419.15a18.28,18.28,0,0,1-14.43,19.12,157.67,157.67,0,0,1-42.35,3c-21.28-1.85-18.06-27-15.73-42.26,1.62-7,2.13-15.44,7.4-20.81,10.19,9.58,26.4,11.75,38.78,5.36,5.19,6.14,13.53,9.11,21.44,10.61A104.75,104.75,0,0,1,172.2,419.15Zm-127.43-39a157.71,157.71,0,0,1-3-42.36c.75-12.77,12.84-18.42,24.38-17.27,9.46,0,32.24,2.14,38.7,8.95a34.74,34.74,0,0,0-5.37,38.78c-6.14,5.19-9.12,13.52-10.61,21.44C74.07,394.13,49.63,400.9,44.77,380.11Zm43.74-93.89a18.27,18.27,0,0,1,14.42-19.12,157.93,157.93,0,0,1,32.36-3.35c30.4-2.23,29.12,19.47,25.72,42.57-7.62,2.61-15.44,6.74-19.71,13.56a34.84,34.84,0,0,0-26.45,1.91c-5.19-6.15-13.54-9.13-21.46-10.62A104.72,104.72,0,0,1,88.51,286.22Zm64,56.57c12.14,29.69-30.28,48.64-44.3,19.8C96.07,332.9,138.47,314,152.5,342.79Zm244.16-78.36a157.65,157.65,0,0,1-41,11.09c-21.24,2.25-22.9-23-23.52-38.47-.13-3.8.12-8.23.31-12.06a18.5,18.5,0,0,1,3-9.78c11.84,7.45,28.16,6.48,39.09-2.16,6.28,5,15,6.35,23.08,6.31C404.82,233,416.14,255.69,396.66,264.43Zm-100.52-25A18.32,18.32,0,0,1,274.61,229a158.33,158.33,0,0,1-11.09-41c-2.25-21.24,23-22.89,38.47-23.52,7.18.23,15.57-.86,21.85,3.28A34.72,34.72,0,0,0,326,206.82c-5,6.27-6.36,15-6.31,23.08A105.35,105.35,0,0,1,296.14,239.47Zm13.93-132.55c13.82-5.7,28.41-9.89,43.33-11.24,19.51.19,20.43,23.94,21.19,38.62-7,4-13.89,9.58-16.76,17.1a34.76,34.76,0,0,0-25.59,6.92c-6.28-5-15-6.37-23.1-6.32C301.92,138.37,290.59,115.66,310.07,106.92Zm63.12,64.81c17.65,26.74-20.44,53.56-39.65,27.89C315.9,172.85,353.94,146.11,373.19,171.73Zm24.3,35.08c-4.83-.14-10.55-.25-14.59-3.19,10.38-16.13,4-39.63-13.07-48.31,3.32-6.75,11.14-10,17.22-13.85,13.73-7.19,36.13-18.65,45.07.93a157.54,157.54,0,0,1,11.09,41C445.3,207.34,414.22,206.79,397.49,206.81Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cg%20id='rechner'%3e%3cpath%20d='m330,410h-180c-18.5,0-30-11.5-30-30V100c0-18.5,11.5-30,30-30h180c18.5,0,30,11.5,30,30v280c0,18.5-11.5,30-30,30ZM150,90c-7.48,0-10,2.52-10,10v280c0,7.48,2.52,10,10,10h180c7.48,0,10-2.52,10-10V100c0-7.48-2.52-10-10-10h-180Z'%20style='fill:%23005541;'/%3e%3c/g%3e%3crect%20x='160'%20y='150'%20width='160'%20height='40'%20style='fill:%23005541;'/%3e%3ccircle%20cx='180'%20cy='230'%20r='20'%20style='fill:%23005541;'/%3e%3ccircle%20cx='240'%20cy='230'%20r='20'%20style='fill:%23005541;'/%3e%3ccircle%20cx='300'%20cy='230'%20r='20'%20style='fill:%23005541;'/%3e%3ccircle%20cx='180'%20cy='290'%20r='20'%20style='fill:%23005541;'/%3e%3ccircle%20cx='240'%20cy='290'%20r='20'%20style='fill:%23005541;'/%3e%3ccircle%20cx='300'%20cy='290'%20r='20'%20style='fill:%23005541;'/%3e%3cpath%20d='m180,370c-11,0-20-9-20-20s9-20,20-20h60c11,0,20,9,20,20s-9,20-20,20h-60Z'%20style='fill:%23005541;%20fill-rule:evenodd;'/%3e%3ccircle%20cx='300'%20cy='350'%20r='20'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='rechner'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M330,400c13,0,20-7,20-20V100c0-13-7-20-20-20H150c-13,0-20,7-20,20v280c0,13,7,20,20,20H330z%20M160,150h160v40H160V150z%20M180,250c-11,0-20-9-20-20s9-20,20-20s20,9,20,20S191,250,180,250z%20M240,250c-11,0-20-9-20-20%20s9-20,20-20s20,9,20,20S251,250,240,250z%20M300,250c-11,0-20-9-20-20s9-20,20-20s20,9,20,20S311,250,300,250z%20M180,310%20c-11,0-20-9-20-20s9-20,20-20s20,9,20,20S191,310,180,310z%20M240,310c-11,0-20-9-20-20s9-20,20-20s20,9,20,20S251,310,240,310z%20M300,310c-11,0-20-9-20-20s9-20,20-20s20,9,20,20S311,310,300,310z%20M180,370c-11,0-20-9-20-20s9-20,20-20h60c11,0,20,9,20,20%20s-9,20-20,20H180z%20M300,370c-11,0-20-9-20-20s9-20,20-20s20,9,20,20S311,370,300,370z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20id='Ebene_1'%20data-name='Ebene%201'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M240,96.4l49.6,85.9-29.8-8-6.4,24.1,70.8,18.9,18.9-70.8L319,140.1l-7.9,29.6-52.3-90.5a21.66,21.66,0,0,0-37.6,0l-66.1,114.4,21.6,12.4Z'/%3e%3cpath%20class='cls-1'%20d='M144.61,261.8l8,29.8,24.1-6.4-18.9-70.8L87,233.3l6.4,24.1,29.6-7.9L70.71,340a21.75,21.75,0,0,0,18.8,32.6h132.1V347.7H95.11Z'/%3e%3cpath%20class='cls-1'%20d='M409.31,340l-66.1-114.4L321.61,238l63.3,109.6h-99.1l21.8-21.8L290,308.2l-51.8,51.7L290,411.7l17.6-17.6-21.7-21.7h104.5a21.55,21.55,0,0,0,18.8-10.9A21,21,0,0,0,409.31,340Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2026.0.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill:%23009E3C;}%20%3c/style%3e%3cg%3e%3ccircle%20class='st0'%20cx='240'%20cy='167.8'%20r='25.9'/%3e%3cpath%20class='st0'%20d='M277.4,327.8c44.1-60.6,66.2-113.9,66.2-160.1c0-57-46.6-103.6-103.6-103.6s-103.6,46.6-103.6,103.6%20c0,46.2,22.1,99.5,66.1,160.1c-47.6,4.7-89,18.6-89,43.1c0,30.9,65.5,44.9,126.4,44.9s126.5-14.1,126.5-44.9%20C366.4,346.4,325,332.5,277.4,327.8z%20M162.3,167.8c0-42.9,34.8-77.7,77.7-77.7s77.7,34.8,77.7,77.7s-34.8,77.7-77.7,77.7l0,0%20c-42.7,0.2-77.5-34.3-77.7-77C162.3,168.2,162.3,168,162.3,167.8z%20M319.4,386c-21.1,6.3-49.3,9.8-79.4,9.8s-58.4-3.5-79.4-9.8%20c-22.2-6.6-27-13.7-27-15.1s4.8-8.5,27-15.1c15.6-4.7,35.1-7.8,56.3-9.1c7.2,9.2,14.9,18.6,23.1,28.1c8.2-9.5,15.9-18.9,23.1-28.1%20c21.3,1.3,40.8,4.4,56.4,9.1c22.2,6.6,27,13.7,27,15.1S341.6,379.4,319.4,386z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M222.47,224.34H211.86v17.41h10.61c5.71,0,7.14-2,7.14-6.48v-4.71C229.61,226.12,227.91,224.34,222.47,224.34Z'/%3e%3cpath%20class='a'%20d='M117,235.84l3-3v-7.17l3.1,3.1v8.66l4.35,4.34-22.09,22.07,8.75,8.75,22.09-22.07,22.28,22.26,8.71-8.71-22.28-22.26,4.34-4.33,0-8.71,3.1-3.1,0,7.18,3,3,10.89-10.9,2.92,2.92a19.52,19.52,0,0,0-5.71-13.39c-5.8-5.65-11.61-2.35-13.61-.35l-10.52,10.52,2.63,2.62-5.8,5.77-5.79-5.78,2.61-2.61L122.5,214.11c-2-2-7.81-5.3-13.61.35a19.23,19.23,0,0,0-5.61,13.38l2.85-2.86Z'/%3e%3cpath%20class='a'%20d='M240,72.11c-95,0-170,75-170,170s75,170,170,170,170-75,170-170S335,72.11,240,72.11Zm-62.26,211.5h-83v-83h83Zm55.07-11.93-13.1-18.39h-7.85v18.39H198.5V212.53h24.69c14.44,0,19.79,5.68,19.79,16.79v7.28c0,7.37-2.68,12.34-8.65,14.83l14.35,20.25Zm68.22,0-10-40.22L281,271.68H264l-14.62-59.15h13.2L272.6,254.8l10.34-42.27h16.31l10.16,42.27,10-42.27h13.19l-14.53,59.15Zm67.12-11.55H348.27l-3.21,11.55H331.15l18.1-59.15h17.83l18.18,59.15H371.35Z'/%3e%3cpolygon%20class='a'%20points='351.3%20249.03%20364.94%20249.03%20358.16%20224.26%20351.3%20249.03'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3ccircle%20class='a'%20cx='97.48'%20cy='322.05'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='97.48'%20cy='243.12'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='97.48'%20cy='164.18'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='238.64'%20cy='348.58'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='238.64'%20cy='243.12'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='238.64'%20cy='137.66'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='379.79'%20cy='375.1'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='379.79'%20cy='243.12'%20r='25.58'/%3e%3ccircle%20class='a'%20cx='379.79'%20cy='111.13'%20r='25.58'/%3e%3cpath%20class='a'%20d='M168.06,432.59a4.36,4.36,0,0,1-4.36-4.35V58a4.36,4.36,0,0,1,8.71,0V428.24A4.35,4.35,0,0,1,168.06,432.59Z'/%3e%3cpath%20class='a'%20d='M309.21,432.59a4.35,4.35,0,0,1-4.35-4.35V58a4.36,4.36,0,0,1,8.71,0V428.24A4.36,4.36,0,0,1,309.21,432.59Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='saatgut'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M361,347c27-27,38-45,38-68c0-24-12-42-40-70c-28,28-40,46-40,70c0,14,4,26,13,39l-51-51%20c27-27,38-45,38-68c0-24-12-42-40-70c-28,28-40,46-40,70c0,14,4,26,13,39l-51-51c27-27,38-45,38-68c0-24-12-42-40-70%20c-28,28-40,46-40,70c0,19,8,35,25,55l-10,10c-20-17-36-25-55-25c-24,0-42,12-70,40c28,28,46,40,70,40c23,0,41-11,68-38l51,51%20c-13-9-25-13-39-13c-24,0-42,12-70,40c28,28,46,40,70,40c23,0,41-11,68-38l51,51c-13-9-25-13-39-13c-24,0-42,12-70,40%20c28,28,46,40,70,40c23,0,41-11,68-38l70,70l14-14L361,347z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='schmierstoffberater'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,420c66,0,120-54,120-120c0-67-40-147-120-240c-80,93-120,173-120,240%20C120,366,174,420,240,420z%20M240,380c-46,0-81-35-80-80c0-8,7-15,15-15s15,7,15,15c0,28,22,50,50,50c8,0,15,7,15,15S248,380,240,380%20z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='selected'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,410c-95,0-170-75-170-170S145,70,240,70s170,75,170,170S335,410,240,410z%20M162,232l-20,20%20l68,68l130-130l-20-20L210,280L162,232z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.4.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20.st1{fill:%23009E3C;}%20%3c/style%3e%3cg%20id='Design'%3e%3cg%20id='pfeil-rechts_1_'%3e%3cpath%20id='Fill-1_2_'%20class='st0'%20d='M345.7,166.3l-42.4-0.1l2.4,116L144.3,119.7l-28.4,28.2l161.4,162.5l-116-3.2l-0.1,42.4%20l169.7,0.6c8.5,0,14.2-5.6,14.2-14.1L345.7,166.3z'/%3e%3c/g%3e%3c/g%3e%3cg%20id='Beschreibung'%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M435.48,236.2l-12.89-2.14a13.22,13.22,0,0,1-11-12.83,57.39,57.39,0,0,0-11.66-33.1c-9.57-12.81-23.91-22-40.39-26-15.67-3.75-31.2-.32-45.84,4C286,174.3,281.9,148.75,252.75,139a70.27,70.27,0,0,0-36.2-2.65c-17.2,3.48-25.21-5.52-28.85-12.18a71.17,71.17,0,0,0-34.27-30.69c-15.55-6.74-32.56-8-47.9-3.46a57.44,57.44,0,0,0-29.12,19.37A13.2,13.2,0,0,1,59.93,113l-9.14-4.76a5.2,5.2,0,0,0-7.53,5.42c-5.16,16.23-12.34,51.5,6.05,88.4a70.41,70.41,0,0,0,11.21,18.18c22,25.85,48.58,15.93,54.3,49.69,2.67,15.77,8.67,31.34,20.59,43.39s27.19,20.38,43.16,21.05c25,1,21.84,30.86,49.11,54.83a68.87,68.87,0,0,0,10,7.28c40.17,25.95,80.69,18.36,98.51,12.91a5.2,5.2,0,0,0,1.57-9.16l-10.53-7.73a13.2,13.2,0,0,1-4-16.42,57.44,57.44,0,0,0,4.55-34.8c-2.74-15.75-11.37-30.46-24.29-41.42-12.28-10.42-27.69-14.39-42.69-17.16-18.48-3.41-21.59-15-27.46-28.8,10.57,1,21.08-.27,30.41-4.52,22.8-10.38,33.43,17.66,68.59,26.72a70,70,0,0,0,12.2,2c47.56,5,80.27-20.1,93.71-33A5.2,5.2,0,0,0,435.48,236.2Zm-301.1-18.67c-16,13.25-41.8,8.47-57.7-10.69C61.49,188.55,60.86,163.76,74.75,150c.65-.65,1.34-1.27,2-1.86,16-13.26,41.81-8.47,57.71,10.68,15.18,18.3,15.82,43.09,1.93,56.82C135.79,216.31,135.1,216.93,134.38,217.53Zm74.37,86.64c-14.75,14.6-40.9,12.09-58.41-5.61s-19.75-43.88-5-58.47,40.9-12.09,58.41,5.61S223.51,289.58,208.75,304.17Zm81.13,11.71c19,16.1,23.49,42,10.07,57.82-.61.71-1.24,1.39-1.89,2-13.89,13.74-38.67,12.84-56.8-2.54-19-16.1-23.49-42-10.07-57.81q.92-1.06,1.89-2C247,299.6,271.74,300.5,289.88,315.88Z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__fGA6Lxhs__\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m240,111.95c34.2,0,66.36,13.32,90.55,37.51,24.19,24.19,37.51,56.34,37.51,90.55s-13.32,66.36-37.51,90.55c-24.19,24.19-56.34,37.51-90.55,37.51s-66.36-13.32-90.55-37.51c-24.19-24.19-37.51-56.34-37.51-90.55s13.32-66.36,37.51-90.55c24.19-24.19,56.34-37.51,90.55-37.51m0-20c-81.77,0-148.05,66.29-148.05,148.05s66.28,148.05,148.05,148.05,148.05-66.29,148.05-148.05-66.28-148.05-148.05-148.05h0Z'%20style='fill:%23005541;'/%3e%3cpolygon%20points='190.08%20224.92%20159.91%20224.92%20159.91%20255.08%20190.08%20255.08%20190.08%20224.92%20190.08%20224.92'%20style='fill:%23005541;'/%3e%3cpolygon%20points='255.08%20224.92%20224.92%20224.92%20224.92%20255.08%20255.08%20255.08%20255.08%20224.92%20255.08%20224.92'%20style='fill:%23005541;'/%3e%3cpolygon%20points='320.09%20224.92%20289.92%20224.92%20289.92%20255.08%20320.09%20255.08%20320.09%20224.92%20320.09%20224.92'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__XdrJU9In__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a,.b{fill:%23009e3c;}.a{fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M285,255.78c9-9,11.25-20.26,11.25-41.26-21,0-32.25,2.25-41.26,11.25-5.25,5.25-8.25,11.25-9.75,19.5V207c20.26,0,31.13-2.63,39.76-11.26,9-9,11.25-20.25,11.25-41.26-21,0-32.25,2.25-41.26,11.26-5.07,5.07-8.05,11.11-9.75,19.16V165.33c10.76-11.46,16-20.06,16-30.66,0-12.73-6.37-22.28-21.22-37.14-14.85,14.86-21.22,24.41-21.22,37.14,0,10.6,5.21,19.2,16,30.66v19.59c-1.71-8-4.68-14.09-9.75-19.16-9-9-20.26-11.26-41.26-11.26,0,21,2.25,32.26,11.25,41.26,8.63,8.63,19.5,11.26,39.76,11.26v38.25c-1.5-8.25-4.5-14.25-9.75-19.5-9-9-20.26-11.25-41.26-11.25,0,21,2.25,32.26,11.25,41.26,8.63,8.62,19.5,11.25,39.76,11.25v38.26c-1.5-8.25-4.5-14.25-9.75-19.51-9-9-20.26-11.25-41.26-11.25,0,21,2.25,32.26,11.25,41.26,8.63,8.63,19.5,11.25,39.76,11.25v52.52h10.5V327c20.26,0,31.13-2.62,39.76-11.25,9-9,11.25-20.25,11.25-41.26-21,0-32.25,2.25-41.26,11.25-5.25,5.26-8.25,11.26-9.75,19.51V267C265.51,267,276.38,264.4,285,255.78Z'/%3e%3cpath%20class='b'%20d='M412.4,116l-.5-7.1L240,52.55h0L68.1,108.85l-.5,7.1q-1.16,16.44-1.09,32.35c.17,46.62,8.12,89.57,23.75,128.3q1.06,2.64,2.17,5.26,4.45,10.45,9.67,20.49a287.65,287.65,0,0,0,50.64,69.55c1.36,1.38,2.73,2.74,4.12,4.1q8.32,8.12,17.39,15.68,4.53,3.78,9.24,7.42,9.44,7.27,19.57,14,5.07,3.34,10.32,6.57Q223.9,426.09,235.1,432l4.9,2.6h0l4.9-2.6q11.21-5.85,21.71-12.28,5.26-3.23,10.33-6.57,10.14-6.72,19.56-14,4.72-3.64,9.25-7.42,9.06-7.56,17.39-15.68c1.39-1.36,2.76-2.72,4.12-4.1a287.65,287.65,0,0,0,50.64-69.55q5.21-10,9.66-20.49c.75-1.75,1.47-3.5,2.18-5.26,15.63-38.73,23.58-81.68,23.75-128.3Q413.55,132.4,412.4,116Zm-26.5,99.1a287.2,287.2,0,0,1-26.7,77.6q-3.42,6.56-7.17,12.89h0c-25,42-61,76.47-107.45,102.59-1.51.84-3,1.68-4.55,2.51-1.53-.83-3-1.67-4.55-2.51C189,382,153,347.58,128,305.55h0q-3.75-6.35-7.17-12.89a287.2,287.2,0,0,1-26.7-77.6l-.21-.1q-1.89-9.6-3.22-19.48a1.59,1.59,0,0,1,.13-.22,373.77,373.77,0,0,1-2.5-70.7L240,74.75l151.7,49.8a373.77,373.77,0,0,1-2.5,70.7,1.59,1.59,0,0,1,.13.22Q388,205.36,386.11,215Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='standorte'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,420c80-93,120-173,120-240c0-66-54-120-120-120s-120,54-120,120C120,247,160,327,240,420z%20M240,270c-50,0-90-40-90-90s40-90,90-90s90,40,90,90S290,270,240,270z%20M240,210c17,0,30-13,30-30s-13-30-30-30s-30,13-30,30%20S223,210,240,210z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='suchen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M341,306c19-25,30-56,30-90c0-84-66-150-150-150S71,132,71,216s66,150,150,150c29,0,56-8,78-22%20l62,62c11,11,29,11,40,0s11-29,0-40L341,306z%20M101,216c0-67,53-120,120-120s120,53,120,120s-53,120-120,120S101,283,101,216z%20M221,136c-46,0-81,35-80,80c0,8,7,15,15,15s15-7,15-15c0-28,22-50,50-50c8,0,15-7,15-15S229,136,221,136z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='tiere'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,400c71,0,130-27,130-80c0-40-45-55-60-70c-20-20-44-40-70-40s-51,20-71,40%20c-15,14-60,30-60,70C109,373,168,400,240,400z%20M110,250c22,0,40-18,40-40c0-23-18-40-40-40s-40,17-40,40C70,232,88,250,110,250z%20M240,370c-34,0-60-18-60-40s26-40,60-40s60,18,60,40S274,370,240,370z%20M200,200c17,0,30-22,30-50c0-38-22-70-50-70%20c-17,0-30,22-30,50C150,168,171,200,200,200z%20M370,250c22,0,40-18,40-40c0-23-18-40-40-40s-40,17-40,40C330,232,348,250,370,250z%20M280,200c29,0,50-32,50-70c0-28-13-50-30-50c-28,0-50,32-50,70C250,178,263,200,280,200z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='tierhaltung-gefluegel'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M395.4,155l-30-20c0-28-23-50-50-50h-20c-14,0-25,11-25,25s11,25,25,25h10c-28,0-50,22-50,50h-55%20c-24,0-41-10-55-30l-20-30c-13-19-44-9-40,20l10,80c0,64,48,115,110,120v10h-10c-6,0-10,4-10,10s4,10,10,10h10v10c0,6,4,10,10,10%20h20c6,0,10-4,10-10s-4-10-10-10h-10v-30c14-1,27-5,39-10h21v10c0,6,4,10,10,10s10-4,10-10v-10h20v20c0,6,4,10,10,10s10-4,10-10v-30%20c0-6-4-10-10-10h-40c25-22,40-54,40-90v2c0,14,11,25,25,25s25-11,25-25c0-20-12-38-30-46L395.4,155z%20M330.4,167c-9,0-15-6-15-15%20s6-15,15-15s15,6,15,15S339.4,167,330.4,167z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='tierhaltung-rind'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M399,140c13-9,33-22,40-40l-10-10c-14,14-36,24-63,33l-17-23h-10v31l-50,9H89c-28,0-50,22-50,50%20v47l10,33l-2,30l9,90h40v-10l13-70l10-10l41,10l109-10l10,90h40l10-100l40-60h50c16,0,26-21,20-30L399,140z%20M369,180%20c-9,0-15-6-15-15s6-15,15-15s15,6,15,15S378,180,369,180z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='tierhaltung-schwein'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M125,355l10-40c11-10,21-19,30-30c37,17,82,29,130,20l10,50h40l10-50c22,4,54,3,70,0%20c9-2,17-2,20-10l10-30c2-6-2-3-10-10c-11-9-23-29-40-60v-40h-10l-30,20c-45-25-83-40-120-40H115c-28,0-50,22-50,50%20c-11,0-20-9-20-20s9-20,20-20c6,0,10-4,10-10s-4-10-10-10c-22,0-40,18-40,40s18,40,40,40v30c0,18,5,44,10,70l10,50H125z%20M385,255%20c-9,0-15-6-15-15s6-15,15-15s15,6,15,15S394,255,385,255z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20481'%20style='enable-background:new%200%200%20480%20481;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='traktor'%20transform='translate(0.000000,%200.000000)'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M370,145h-50v75h-55l-25-100h25V80H105v149c-30,14-50,45-50,81c0,51,39,90,90,90c40,0,73-24,85-60%20h76c4-35,33-60,69-60c13,0,25,3,35,9l15-29v-40h-55V145z%20M220,120l25,100H145V120H220z%20M145,360c-28,0-50-22-50-51%20c0-28,22-49,50-49s50,21,50,49C195,338,173,360,145,360z%20M375,300c-28,0-50,22-50,50s22,50,50,50s50-22,50-50S403,300,375,300z%20M375,380c-17,0-30-13-30-30s13-30,30-30s30,13,30,30S392,380,375,380z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='ueberuns'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,410c-95,0-170-75-170-170S145,70,240,70s170,75,170,170S335,410,240,410z%20M220,220v110h40%20V220H220z%20M240,200c17,0,30-13,30-30s-13-30-30-30s-30,13-30,30S223,200,240,200z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='upload'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M380,178c-5-54-53-100-110-100c-35,0-67,17-87,44c-12-9-27-14-43-14c-39,0-70,31-70,70v9%20c-30,15-50,45-50,81c0,50,40,90,90,90h19v-20h-19c-39,0-70-31-70-70c0-24,12-45,30-58l12-6c5-2,8-7,8-12v-14c0-28,22-50,50-50%20c14,0,27,6,36,15c6,5,14,5,18-2c16-25,44-43,76-43c49,0,90,42,90,90c0,6,4,10,10,10c39,0,70,31,70,70s-31,70-70,70h-20v20h20%20c50,0,90-40,90-90C460,221,425,183,380,178z%20M150,292l20,20l55-55v145h30V257l55,55l20-20l-80-80c-5-5-15-5-20,0L150,292z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='vermarktung'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M345,120c-12,0-24,2-35,5c-11-3-23-5-35-5s-24,2-35,5c-11-3-23-5-35-5s-24,2-35,5c-11-3-23-5-35-5%20c-67,0-120,54-120,120s53,120,120,120c12,0,24-2,34-5c12,3,24,5,36,5s24-2,34-5c12,3,24,5,36,5s24-2,34-5c12,3,24,5,36,5%20c66,0,120-54,120-120S411,120,345,120z%20M135,340c-56,0-100-45-100-100s44-100,100-100h3c-32,22-53,58-53,100s21,78,53,100H135z%20M205,340c-56,0-100-45-100-100s44-100,100-100h3c-32,22-53,58-53,100s21,78,53,100H205z%20M275,340c-56,0-100-45-100-100%20s44-100,100-100h3c-32,22-53,58-53,100s21,78,53,100H275z%20M345,340c-56,0-100-45-100-100s44-100,100-100c55,0,100,45,100,100%20S400,340,345,340z%20M355,190c16,0,29,9,36,24l17-8c-10-22-30-36-53-36c-25,0-45,16-54,40h-21v20h16c-1,3-1,7-1,10s0,7,1,10h-16v20%20h21c9,23,30,40,54,40c23,0,43-15,53-37l-17-8c-6,15-20,25-36,25c-13,0-24-8-32-20h37v-20h-44c-1-3-1-7-1-10s0-7,1-10h44v-20h-37%20C330,198,342,190,355,190z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.a,.b{fill:%23009e3c;}.a{fill-rule:evenodd;}%3c/style%3e%3c/defs%3e%3cpath%20class='a'%20d='M386.19,183c11.22-1.26,28.2-2.68,38.69-11.64L422,161.65c-13.54,4.08-30.76,2.93-50.79-.54l-2.92-20.21L362,137.51,351.49,157,320.91,121.8a41.34,41.34,0,0,0-31.2-14.22h-153A35.71,35.71,0,0,0,101,143.29v33.56l7.15,23.57-1.43,21.43,6.43,64.27h28.56V279L151,229l7.14-7.14L187.39,229l77.85-7.14,7.14,64.27H301l7.14-71.41,28.8,14.73,31.45,16.9c10.07,5.41,23.46-4.42,22.73-12.11Zm-32.4,15c-5.66-3-7.4-8.84-4.36-14.5s8.85-7.41,14.51-4.37,7.41,8.85,4.36,14.51S359.46,201,353.79,198Z'/%3e%3cpath%20class='b'%20d='M75.82,410.84a10,10,0,0,1-4.94-18.7c2.73-1.54,68.22-38.21,184.65-67.55,116.15-29.27,191-32.28,194.16-32.4a10,10,0,0,1,.73,20c-25.87,1-98.87,8.84-190,31.8-113.57,28.62-179,65.2-179.69,65.57A10,10,0,0,1,75.82,410.84Z'/%3e%3cpath%20class='b'%20d='M198.4,329.16a10.27,10.27,0,0,1-2.32-.27c-14.49-3.45-39.76-8.47-77.81-12.83-67.28-7.71-95.21-5.33-95.48-5.3a10,10,0,0,1-1.88-19.91c1.19-.11,29.78-2.67,99.63,5.34,39,4.48,65.14,9.67,80.16,13.24a10,10,0,0,1-2.3,19.73Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='weinbau'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M305,210.4c-11,0-21,5-29,12c5-18,12-37,23-54l0,0c19-32,47-59,76-68l-10-20c-28,13-61,38-84,76%20c-14-7-31-9-46-12c6-10,10-21,10-34c0-22-17-40-40-40c-21,0-40,18-40,40c0,21,11,33,25,40h-5c-43,0-60-25-60-60c0-9,2-19,4-25%20c2-8,1-13-4-15c-12-4-20,21-20,40c0,46,24,80,80,80c13,0,25-4,35-11c2,0,3,1,5,1c18,4,34,6,47,12c-7,16-13,33-16,53%20c-7-9-18-15-31-15c-22,0-40,19-40,40c0,23,18,40,40,40c23,0,40-17,40-40c0,23,18,40,40,40c23,0,40-17,40-40%20C345,229.4,328,210.4,305,210.4z%20M212,139.4c-23-7-27-15-27-29c0-11,9-20,20-20c12,0,20,9,20,20C224,121.4,220,131.4,212,139.4z%20M145,210.4c-22,0-40,19-40,40c0,23,18,40,40,40c23,0,40-17,40-40C185,229.4,168,210.4,145,210.4z%20M185,280.4c-22,0-40,18-40,40%20c0,23,18,40,40,40c23,0,40-17,40-40C225,298.4,208,280.4,185,280.4z%20M265,280.4c-22,0-40,18-40,40c0,23,18,40,40,40%20c23,0,40-17,40-40C305,298.4,288,280.4,265,280.4z%20M225,350.4c-22,0-40,18-40,40c0,23,18,40,40,40c23,0,40-17,40-40%20C265,368.4,248,350.4,225,350.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-gewitter'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M384,135c-7-54-52-95-109-95c-36,0-69,17-89,44c-6-3-13-4-21-4c-31,0-56,22-60,52%20c-35,9-60,40-60,78c0,45,35,80,80,80h87l-57,50l90,30l-50,70h10l110-90l-90-20l53-40h77c45,0,80-35,80-80C435,175,414,147,384,135z%20M355,270H125c-34,0-60-26-60-60c0-29,22-55,50-59c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10%20s10-4,10-10c0-19-8-35-21-46c16-21,43-34,71-34c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60%20s60,26,60,60S389,270,355,270z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-mondwolke'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M379,255c-2-17-8-32-16-45h7c27,0,58-17,70-40c-11,7-21,10-30,10c-34,0-60-26-60-60%20c0-21,10-41,30-50c-41,0-80,26-80,70c0,9,2,18,4,25c-10-3-22-5-34-5c-36,0-69,17-89,44c-6-3-13-4-21-4c-31,0-56,22-60,52%20c-35,9-60,40-60,78c0,45,35,80,80,80h230c45,0,80-35,80-80C430,295,409,267,379,255z%20M120,390c-34,0-60-26-60-60c0-29,22-55,50-59%20c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10c0-19-8-35-21-46c16-21,43-34,71-34%20c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60s60,26,60,60s-26,60-60,60H120z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-mondwolkeregen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M379,220c-2-17-8-32-16-45h7c27,0,58-17,70-40c-11,7-21,10-30,10c-34,0-60-26-60-60%20c0-21,10-41,30-50c-41,0-80,26-80,70c0,9,2,18,4,25c-10-3-22-5-34-5c-36,0-69,17-89,44c-6-3-13-4-21-4c-31,0-56,22-60,52%20c-35,9-60,40-60,78c0,45,35,80,80,80h230c45,0,80-35,80-80C430,260,409,232,379,220z%20M120,355c-34,0-60-26-60-60c0-29,22-55,50-59%20c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10c0-19-8-35-21-46c16-21,43-34,71-34%20c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60s60,26,60,60s-26,60-60,60H120z%20M120,385%20c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C130,389,126,385,120,385z%20M280,385c-6,0-10,4-10,10v30c0,5,4,10,10,10%20s10-4,10-10v-30C290,389,286,385,280,385z%20M200,395c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C210,399,206,395,200,395z%20M360,395c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C370,399,366,395,360,395z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20481%20480'%20style='enable-background:new%200%200%20481%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-nebel'%20transform='translate(1.000000,%200.000000)'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M470,205c0-38-25-69-60-78c-4-41-38-72-80-72c-31,0-57,17-71,42c-6-1-12-2-19-2c-36,0-69,17-89,44%20c-6-3-13-4-21-4c-31,0-56,22-60,52c-35,9-60,40-60,78c0,45,35,80,80,80h230c38,0,69-25,78-60C439,281,470,247,470,205z%20M400,264%20c0-34-21-63-51-74c-5-41-32-74-69-88c11-16,30-27,50-27c34,0,60,26,60,60c0,5,4,10,10,11c28,4,50,30,50,59C450,236,429,260,400,264%20z%20M90,325c-34,0-60-26-60-60c0-29,22-55,50-59c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10%20c0-19-8-35-21-46c16-21,43-34,71-34c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60%20s60,26,60,60s-26,60-60,60H90z%20M160,375c0-6-5-10-10-10h-30c-6,0-10,4-10,10s4,10,10,10h30C156,385,160,381,160,375z%20M230,375%20c0-6-5-10-10-10h-30c-6,0-10,4-10,10s4,10,10,10h30C226,385,230,381,230,375z%20M300,375c0-6-5-10-10-10h-30c-6,0-10,4-10,10%20s4,10,10,10h30C296,385,300,381,300,375z%20M330,365c-6,0-10,4-10,10s4,10,10,10h30c6,0,10-4,10-10s-5-10-10-10H330z%20M80,405%20c-6,0-10,4-10,10s4,10,10,10h30c6,0,10-4,10-10s-5-10-10-10H80z%20M150,405c-6,0-10,4-10,10s4,10,10,10h30c6,0,10-4,10-10%20s-5-10-10-10H150z%20M220,405c-6,0-10,4-10,10s4,10,10,10h30c6,0,10-4,10-10s-5-10-10-10H220z%20M290,405c-6,0-10,4-10,10s4,10,10,10%20h30c6,0,10-4,10-10s-5-10-10-10H290z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-regen'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M470,210c0-38-25-69-60-78c-4-41-38-72-80-72c-31,0-57,17-71,42c-6-1-12-2-19-2c-36,0-69,17-89,44%20c-6-3-13-4-21-4c-31,0-56,22-60,52c-35,9-60,40-60,78c0,45,35,80,80,80h230c38,0,69-25,78-60C439,286,470,252,470,210z%20M400,269%20c0-34-21-63-51-74c-5-41-32-74-69-88c11-16,30-27,50-27c34,0,60,26,60,60c0,5,4,10,10,11c28,4,50,30,50,59C450,241,429,265,400,269%20z%20M90,330c-34,0-60-26-60-60c0-29,22-55,50-59c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10%20c0-19-8-35-21-46c16-21,43-34,71-34c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60%20s60,26,60,60s-26,60-60,60H90z%20M90,360c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C100,364,96,360,90,360z%20M250,360%20c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C260,364,256,360,250,360z%20M170,370c-6,0-10,4-10,10v30c0,5,4,10,10,10%20s10-4,10-10v-30C180,374,176,370,170,370z%20M330,370c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C340,374,336,370,330,370z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-regenstark'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M470,190c0-38-25-69-60-78c-4-41-38-72-80-72c-31,0-57,17-71,42c-6-1-12-2-19-2c-36,0-69,17-89,44%20c-6-3-13-4-21-4c-31,0-56,22-60,52c-35,9-60,40-60,78c0,45,35,80,80,80h230c38,0,69-25,78-60C439,266,470,232,470,190z%20M400,249%20c0-34-21-63-51-74c-5-41-32-74-69-88c11-16,30-27,50-27c34,0,60,26,60,60c0,5,4,10,10,11c28,4,50,30,50,59C450,221,429,245,400,249%20z%20M90,310c-34,0-60-26-60-60c0-29,22-55,50-59c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10%20c0-19-8-35-21-46c16-21,43-34,71-34c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60%20s60,26,60,60s-26,60-60,60H90z%20M70,350c-6,0-10,4-10,10v50c0,5,4,10,10,10s10-4,10-10v-50C80,354,76,350,70,350z%20M150,350%20c-6,0-10,4-10,10v50c0,5,4,10,10,10s10-4,10-10v-50C160,354,156,350,150,350z%20M230,350c-6,0-10,4-10,10v50c0,5,4,10,10,10%20s10-4,10-10v-50C240,354,236,350,230,350z%20M310,350c-6,0-10,4-10,10v50c0,5,4,10,10,10s10-4,10-10v-50C320,354,316,350,310,350z%20M110,370c-6,0-10,4-10,10v50c0,5,4,10,10,10s10-4,10-10v-50C120,374,116,370,110,370z%20M190,370c-6,0-10,4-10,10v50c0,5,4,10,10,10%20s10-4,10-10v-50C200,374,196,370,190,370z%20M270,370c-6,0-10,4-10,10v50c0,5,4,10,10,10s10-4,10-10v-50C280,374,276,370,270,370z%20M350,370c-6,0-10,4-10,10v50c0,5,4,10,10,10s10-4,10-10v-50C360,374,356,370,350,370z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-schnee'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M470,185c0-38-25-69-60-78c-4-41-38-72-80-72c-31,0-57,17-71,42c-6-1-12-2-19-2c-36,0-69,17-89,44%20c-6-3-13-4-21-4c-31,0-56,22-60,52c-35,9-60,40-60,78c0,45,35,80,80,80h230c38,0,69-25,78-60C439,261,470,227,470,185z%20M400,244%20c0-34-21-63-51-74c-5-41-32-74-69-88c11-16,30-27,50-27c34,0,60,26,60,60c0,5,4,10,10,11c28,4,50,30,50,59C450,216,429,240,400,244%20z%20M90,305c-34,0-60-26-60-60c0-29,22-55,50-59c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10%20c0-19-8-35-21-46c16-21,43-34,71-34c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60%20s60,26,60,60s-26,60-60,60H90z%20M133,370c-3-5-8-7-13-4l-20,11v-22c0-6-4-10-10-10s-10,4-10,10v22l-20-11c-5-3-10-1-13,4s-1,12,3,14%20l19,11l-19,11c-4,2-6,9-3,14s8,7,13,4l20-11v22c0,5,4,10,10,10s10-4,10-10v-22l20,11c5,3,10,1,13-4s2-11-3-14l-19-11l19-11%20C135,381,136,375,133,370z%20M243,370c-3-5-8-7-13-4l-20,11v-22c0-6-4-10-10-10s-10,4-10,10v22l-20-11c-5-3-10-1-13,4s-1,12,3,14%20l19,11l-19,11c-4,2-6,9-3,14s8,7,13,4l20-11v22c0,5,4,10,10,10s10-4,10-10v-22l20,11c5,3,10,1,13-4s2-11-3-14l-19-11l19-11%20C245,381,246,375,243,370z%20M353,370c-3-5-8-7-13-4l-20,11v-22c0-6-4-10-10-10s-10,4-10,10v22l-20-11c-5-3-10-1-13,4s-1,11,3,14%20l19,11l-19,11c-4,3-6,9-3,14s8,7,13,4l20-11v22c0,5,4,10,10,10s10-4,10-10v-22l20,11c5,3,10,1,13-4s2-11-3-14l-19-11l19-11%20C355,381,356,375,353,370z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-wind'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M399,210c-7-54-52-95-109-95c-62,0-110,39-110,90c0,6,4,10,10,10s10-4,10-10c0-39,40-70,90-70%20c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60s60,26,60,60s-26,60-60,60H150c-6,0-10,4-10,10%20s4,10,10,10h220c45,0,80-35,80-80C450,250,429,222,399,210z%20M270,245c6,0,10-4,10-10s-4-10-10-10H110c-17,0-30-13-30-30%20c0-6-4-10-10-10s-10,4-10,10c0,28,22,50,50,50H270z%20M230,285c6,0,10-4,10-10s-4-10-10-10H40c-6,0-10,4-10,10s4,10,10,10H230z%20M280,315c0-6-4-10-10-10H80c-28,0-50,22-50,50c0,6,4,10,10,10s10-4,10-10c0-17,13-30,30-30h190C276,325,280,321,280,315z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-wolke'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M380,200c-5-54-53-100-110-100c-35,0-67,17-87,44c-12-9-27-14-43-14c-39,0-70,31-70,70v9%20c-30,15-50,45-50,81c0,50,40,90,90,90h260c50,0,90-40,90-90C460,243,425,205,380,200z%20M110,360c-39,0-70-31-70-70c0-24,12-45,30-58%20l12-6c5-2,8-7,8-12v-14c0-28,22-50,50-50s50,22,50,50c0,6,4,10,10,10s10-4,10-10c0-15-5-30-13-41c16-24,43-39,73-39%20c46,0,85,37,89,81c-44,5-79,43-79,89c0,6,4,10,10,10s10-4,10-10c0-39,31-70,70-70s70,31,70,70s-31,70-70,70H110z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-wolken'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M470,245c0-38-25-69-60-78c-4-41-38-72-80-72c-31,0-57,17-71,42c-6-1-12-2-19-2c-36,0-69,17-89,44%20c-6-3-13-4-21-4c-31,0-56,22-60,52c-35,9-60,40-60,78c0,45,35,80,80,80h230c38,0,69-25,78-60C439,321,470,287,470,245z%20M400,304%20c0-34-21-63-51-74c-5-41-32-74-69-88c11-16,30-27,50-27c34,0,60,26,60,60c0,5,4,10,10,11c28,4,50,30,50,59C450,276,429,300,400,304%20z%20M90,365c-34,0-60-26-60-60c0-29,22-55,50-59c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10%20c0-19-8-35-21-46c16-21,43-34,71-34c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60%20s60,26,60,60s-26,60-60,60H90z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20481%20480'%20style='enable-background:new%200%200%20481%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-wolkesonne'%20transform='translate(0.000000,%200.000000)'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M345,65c0-6-4-10-10-10s-10,4-10,10v40h20V65z%20M278,124l-28-28c-4-4-10-4-14,0s-4,10,0,14l28,28%20L278,124z%20M434,110c4-4,4-10,0-14s-10-4-14,0l-28,28l14,14L434,110z%20M344,270c0-2,0-4-1-5c34-5,62-35,62-70c0-38-32-70-70-70%20c-33,0-61,24-68,54c-10-2-21-4-32-4c-36,0-69,17-89,44c-6-3-13-4-21-4c-31,0-56,22-60,52c-35,9-60,40-60,78c0,45,35,80,80,80h230%20c45,0,80-35,80-80C395,310,374,282,344,270z%20M335,145c27,0,50,24,50,50c0,25-22,48-47,50c-10-26-28-46-52-58%20C290,164,311,145,335,145z%20M425,185v20h40c6,0,10-4,10-10s-4-10-10-10H425z%20M85,405c-34,0-60-26-60-60c0-29,22-55,50-59%20c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10c0-19-8-35-21-46c16-21,43-34,71-34%20c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60s60,26,60,60s-26,60-60,60H85z%20M392,266l28,28%20c4,4,10,4,14,0s4-10,0-14l-28-28L392,266z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20481%20480'%20style='enable-background:new%200%200%20481%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter-wolkesonneregen'%20transform='translate(0.000000,%200.000000)'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M345,30c0-6-4-10-10-10s-10,4-10,10v40h20V30z%20M278,89l-28-28c-4-4-10-4-14,0s-4,10,0,14l28,28%20L278,89z%20M434,75c4-4,4-10,0-14s-10-4-14,0l-28,28l14,14L434,75z%20M344,235c0-2,0-4-1-5c34-5,62-35,62-70c0-38-32-70-70-70%20c-33,0-61,24-68,54c-10-2-21-4-32-4c-36,0-69,17-89,44c-6-3-13-4-21-4c-31,0-56,22-60,52c-35,9-60,40-60,78c0,45,35,80,80,80h230%20c45,0,80-35,80-80C395,275,374,247,344,235z%20M335,110c27,0,50,24,50,50c0,25-22,48-47,50c-10-26-28-46-52-58%20C290,129,311,110,335,110z%20M425,150v20h40c6,0,10-4,10-10s-4-10-10-10H425z%20M85,370c-34,0-60-26-60-60c0-29,22-55,50-59%20c2,0,4-1,6-3c2-1,4-4,4-8c0-22,18-40,40-40s40,18,40,40c0,6,4,10,10,10s10-4,10-10c0-19-8-35-21-46c16-21,43-34,71-34%20c43,0,79,30,88,70h-8c-45,0-80,35-80,80c0,6,4,10,10,10s10-4,10-10c0-34,26-60,60-60s60,26,60,60s-26,60-60,60H85z%20M392,231l28,28%20c4,4,10,4,14,0s4-10,0-14l-28-28L392,231z%20M85,400c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C95,404,91,400,85,400z%20M245,400c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C255,404,251,400,245,400z%20M165,410c-6,0-10,4-10,10v30c0,5,4,10,10,10%20s10-4,10-10v-30C175,414,171,410,165,410z%20M325,410c-6,0-10,4-10,10v30c0,5,4,10,10,10s10-4,10-10v-30C335,414,331,410,325,410z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Generator:%20Adobe%20Illustrator%2025.2.1,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%206.00%20Build%200)%20--%3e%3csvg%20version='1.1'%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20480%20480'%20style='enable-background:new%200%200%20480%20480;'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e%20.st0{fill-rule:evenodd;clip-rule:evenodd;fill:%23009E3C;}%20%3c/style%3e%3cg%20id='wetter'%3e%3cpath%20id='Fill-1'%20class='st0'%20d='M240,340c56,0,100-44,100-100s-44-100-100-100s-100,44-100,100S184,340,240,340z%20M240,310%20c-39,0-70-31-70-70s31-70,70-70s70,31,70,70S279,310,240,310z%20M30,235c0,10,6,15,16,15h64v-30H46C36,220,30,226,30,235z%20M370,230%20v30h64c10,0,16-6,16-15s-6-15-16-15H370z%20M330,140l20,20l49-49c7-7,7-15,1-21s-14-6-21,1L330,140z%20M150,140l-49-49c-7-7-15-7-21-1%20s-6,14,1,21l49,49L150,140z%20M330,340l49,49c8,8,15,7,21,1s6-14-1-21l-49-49L330,340z%20M150,340l-20-20l-49,49c-7,7-7,15-1,21%20s14,6,21-1L150,340z%20M245,30c-10,0-15,6-15,16v64h30V46C260,36,254,30,245,30z%20M250,370h-30v64c0,10,6,16,15,16s15-6,15-16V370z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23009e3c;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M249.28,278.69l-8.75-24.74c-.98,.1-1.96,.16-2.94,.16-4.27,0-8.41-.96-12.19-2.8l-4.88,2.82-10.23,185.86h54.61l-8.36-151.89c-3.31-2.26-5.88-5.53-7.25-9.4Z'/%3e%3cpath%20class='cls-1'%20d='M408.57,314.77l-150.09-86.66c.06-.66,.1-1.32,.1-2,0-6.56-3.02-12.42-7.73-16.27l21.11-24.7c2.56-2.99,3.5-7.04,2.52-10.85L238.1,32.55c-.62-2.4-2.55-3.52-4.49-3.52-2.36,0-4.73,1.66-4.73,4.69V207.04c-6.26,2.87-10.86,8.71-11.98,15.73l-31.96-5.94c-.73-.14-1.47-.2-2.21-.2-3.13,0-6.17,1.22-8.45,3.45l-104.57,102.37c-3.27,3.2-.53,8.08,3.22,8.08,.77,0,1.58-.21,2.4-.68l150.1-86.66c3.43,2.45,7.62,3.91,12.16,3.91,2.63,0,5.14-.5,7.46-1.39l10.84,30.64c1.31,3.71,4.35,6.55,8.14,7.61l140.94,39.38c.48,.13,.94,.2,1.38,.2,4.41,0,6.56-6.26,2.22-8.77Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cpath%20d='m240,392.2l-5.92-4.34c-1.47-1.08-36.38-26.83-71.83-65.26-48.47-52.55-73.04-101.27-73.04-144.8,0-49.63,37.89-90,84.47-90,26.29,0,50.48,12.78,66.31,34.23,15.81-21.45,40-34.23,66.31-34.23,46.58,0,84.47,40.37,84.47,90,0,43.52-24.57,92.23-73.04,144.79-35.44,38.43-70.36,64.2-71.82,65.27l-5.92,4.34ZM173.69,107.8c-35.55,0-64.47,31.4-64.47,70,0,81.28,104.52,168.71,130.78,189.38,26.25-20.68,130.78-108.14,130.78-189.38,0-38.6-28.92-70-64.47-70-24.21,0-46.16,14.53-57.28,37.92l-9.02,18.99-9.04-18.98c-11.14-23.4-33.09-37.93-57.28-37.93Z'%20style='fill:%23005541;'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%20aria-labelledby='title'%20role='img'%3e%3ctitle%3eSugar%20beet%20line%20icon%20(green%20%23009e3c)%3c/title%3e%3cg%20fill='none'%20stroke='%23009e3c'%20stroke-width='25'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3c!--%20Uneven%20leaves%20(left%20smaller,%20right%20larger)%20--%3e%3cpath%20d='M230%20100c-38-8-78-42-74-76%203-24%2030-36%2056-16%2028%2022%2028%2056%2018%2092Z'/%3e%3cpath%20d='M240%20132c42-4%2050-6%20100-76%201-14-26-32-56-12-34%2020-40%2058-44%2098Z'/%3e%3c!--%20Stem%20--%3e%3cpath%20d='M240%20135c6-35%208-28%200-36'/%3e%3c!--%20Root%20outline%20(teardrop)%20--%3e%3cpath%20d='M240%20448c-108-84-132-164-104-228%2024-54%2090-82%20104-82s80%2028%20104%2082c28%2064%204%20144-104%20228Z'/%3e%3c!--%20Interior%20stripes%20(kept%20well%20inside%20the%20root%20boundary)%20--%3e%3cline%20x1='140'%20y1='280'%20x2='232'%20y2='280'/%3e%3cline%20x1='288'%20y1='308'%20x2='335'%20y2='308'/%3e%3cline%20x1='224'%20y1='348'%20x2='330'%20y2='348'/%3e%3cline%20x1='190'%20y1='392'%20x2='250'%20y2='392'/%3e%3c/g%3e%3c/svg%3e\"","// Icon mapping for operation types (Maßnahmentypen)\n// Import all SVG icons using Vite's glob import\nconst iconModules = import.meta.glob('../../icons/*.svg', { eager: true, query: '?url', import: 'default' });\n\n// Create a mapping of icon names to their imported URLs\nconst iconUrls = {};\nObject.keys(iconModules).forEach(path => {\n  const filename = path.split('/').pop();\n  iconUrls[filename] = iconModules[path];\n});\n\nconst OPERATION_ICONS = {\n  'Aussaat': 'aussaat.svg',\n  'Düngung': 'duenger.svg',\n  'Ernte': 'ernte.svg',\n  'Pflanzenschutz': 'insektizide.svg',\n  'Bodenbearbeitung': 'bodenbearbeitung.svg',\n  'Beregnung': 'dusche.svg',\n};\n\n/**\n * Get the icon URL for a given operation type name\n * @param {string} operationTypeName - The name of the operation type\n * @returns {string|null} - The icon URL or null if not found\n */\nexport const getOperationIcon = (operationTypeName) => {\n  if (!operationTypeName) return null;\n  \n  // Try exact match first\n  if (OPERATION_ICONS[operationTypeName]) {\n    const iconFile = OPERATION_ICONS[operationTypeName];\n    return iconUrls[iconFile] || null;\n  }\n  \n  // Try partial match (case-insensitive)\n  const lowerName = operationTypeName.toLowerCase();\n  for (const [key, iconFile] of Object.entries(OPERATION_ICONS)) {\n    if (lowerName.includes(key.toLowerCase()) || key.toLowerCase().includes(lowerName)) {\n      return iconUrls[iconFile] || null;\n    }\n  }\n  \n  return null;\n};\n\n/**\n * Get all unique operation types present in a list of operations\n * @param {Array} operations - Array of operation objects\n * @returns {Array} - Array of unique operation type names that have icons\n */\nexport const getUniqueOperationTypesWithIcons = (operations) => {\n  if (!operations || !Array.isArray(operations)) return [];\n  \n  const uniqueTypes = new Set();\n  operations.forEach(op => {\n    const typeName = op.operation_type?.name;\n    if (typeName && getOperationIcon(typeName)) {\n      uniqueTypes.add(typeName);\n    }\n  });\n  \n  return Array.from(uniqueTypes).sort();\n};\n\nexport default OPERATION_ICONS;\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Ebene_1'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20480%20480'%3e%3cg%20id='kalender'%3e%3cpath%20id='Fill-1'%20d='m345,112.5v-45h-30v45h-150v-45h-30v45h-55c-11,0-20,9-20,20v260c0,11,9,20,20,20h320c11,0,20-9,20-20V132.5c0-11-9-20-20-20h-55ZM80,392.5v-200h320v200H80Z'%20style='fill:%23009e3c;%20fill-rule:evenodd;'/%3e%3c/g%3e%3crect%20x='106.94'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='156.94'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='206.94'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='256.95'%20y='219.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='106.94'%20y='269.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='156.94'%20y='269.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3crect%20x='206.94'%20y='269.35'%20width='33.42'%20height='33.42'%20style='fill:%23009e3c;'/%3e%3c/svg%3e\"","import React from 'react';\nimport { Accordion, Badge, Dropdown } from 'react-bootstrap';\nimport { groupOperationsByRide, getRideSummary } from '../../utils/rideGrouping';\nimport { getOperationIcon } from '../../utils/operationIcons';\nimport calendar_svg from '../../../icons/kalender.svg';\n\n// Helper function to format numbers as German decimals\nconst formatGermanDecimal = (value) => {\n  if (value === null || value === undefined || value === '') return '0,00';\n  const num = parseFloat(value);\n  if (isNaN(num)) return '0,00';\n  return num.toFixed(2).replace('.', ',');\n};\n\n/**\n * Component to render operations grouped by ride (Fahrt)\n * Operations with the same ride_uuid are grouped together in a collapsible accordion\n */\nconst RideGroupedOperations = ({\n  operations,\n  feldstueck,\n  schlag,\n  farmDetails,\n  year,\n  isSuperuser,\n  effectiveOpenDropdownId,\n  effectiveSetOpenDropdownId,\n  setEditOperationData,\n  setShowQuickOperationModal,\n  handleDelete,\n  setDataSheetOperations,\n  setDataSheetContext,\n  setDataSheetTitle,\n  setShowDataSheetModal\n}) => {\n  // Group operations by ride\n  const rides = groupOperationsByRide(operations);\n\n  return rides.map((ride, rideIdx) => {\n    const rideSummary = getRideSummary(ride);\n\n    // If it's a single operation without ride_uuid, render it directly (no grouping)\n    if (ride.isSingleOperation) {\n      const operation = ride.operations[0];\n      return (\n        <OperationItem\n          key={operation.id || rideIdx}\n          operation={operation}\n          feldstueck={feldstueck}\n          schlag={schlag}\n          farmDetails={farmDetails}\n          year={year}\n          isSuperuser={isSuperuser}\n          effectiveOpenDropdownId={effectiveOpenDropdownId}\n          effectiveSetOpenDropdownId={effectiveSetOpenDropdownId}\n          setEditOperationData={setEditOperationData}\n          setShowQuickOperationModal={setShowQuickOperationModal}\n          handleDelete={handleDelete}\n          setDataSheetOperations={setDataSheetOperations}\n          setDataSheetContext={setDataSheetContext}\n          setDataSheetTitle={setDataSheetTitle}\n          setShowDataSheetModal={setShowDataSheetModal}\n        />\n      );\n    }\n\n    // For multiple operations with same ride_uuid, render as collapsible ride group\n    return (\n      <Accordion key={ride.rideId} className=\"mb-2 ride-accordion\" defaultActiveKey={ride.rideId}>\n        <Accordion.Item eventKey={ride.rideId}>\n          <Accordion.Header className=\"ride-header py-2\">\n            <div className=\"d-flex align-items-center gap-2 flex-grow-1\">\n              <i className=\"bi bi-truck text-primary\"></i>\n              <span className=\"fw-semibold\">\n                Fahrt vom {ride.date ? new Date(ride.date).toLocaleDateString('de-DE') : 'unbekannt'}\n              </span>\n              <Badge bg=\"info\" className=\"ms-2\">\n                {rideSummary.operationCount} Maßnahme{rideSummary.operationCount !== 1 ? 'n' : ''}\n              </Badge>\n              {rideSummary.totalArea > 0 && (\n                <Badge bg=\"secondary\" className=\"ms-1\">\n                  {formatGermanDecimal(rideSummary.totalArea)} ha\n                </Badge>\n              )}\n              {rideSummary.operationTypes.length > 0 && (\n                <span className=\"ms-2 text-muted small\">\n                  ({rideSummary.operationTypes.join(', ')})\n                </span>\n              )}\n            </div>\n          </Accordion.Header>\n          <Accordion.Body className=\"ride-body p-2\">\n            {ride.operations.map((operation, idx) => (\n              <OperationItem\n                key={operation.id || idx}\n                operation={operation}\n                feldstueck={feldstueck}\n                schlag={schlag}\n                farmDetails={farmDetails}\n                year={year}\n                isSuperuser={isSuperuser}\n                effectiveOpenDropdownId={effectiveOpenDropdownId}\n                effectiveSetOpenDropdownId={effectiveSetOpenDropdownId}\n                setEditOperationData={setEditOperationData}\n                setShowQuickOperationModal={setShowQuickOperationModal}\n                handleDelete={handleDelete}\n                setDataSheetOperations={setDataSheetOperations}\n                setDataSheetContext={setDataSheetContext}\n                setDataSheetTitle={setDataSheetTitle}\n                setShowDataSheetModal={setShowDataSheetModal}\n              />\n            ))}\n          </Accordion.Body>\n        </Accordion.Item>\n      </Accordion>\n    );\n  });\n};\n\n/**\n * Individual operation item component\n */\nconst OperationItem = ({\n  operation,\n  feldstueck,\n  schlag,\n  farmDetails,\n  year,\n  isSuperuser,\n  effectiveOpenDropdownId,\n  effectiveSetOpenDropdownId,\n  setEditOperationData,\n  setShowQuickOperationModal,\n  handleDelete,\n  setDataSheetOperations,\n  setDataSheetContext,\n  setDataSheetTitle,\n  setShowDataSheetModal\n}) => {\n  return (\n    <div\n      className=\"d-flex align-items-start gap-2 operations-item accordion-level-5 mb-2\"\n      onClick={(e) => {\n        e.stopPropagation();\n        if (effectiveOpenDropdownId) {\n          effectiveSetOpenDropdownId(null);\n        }\n      }}\n    >\n      <div className=\"d-flex gap-2 flex-grow-1 operations-detail\">\n        <div className=\"d-flex flex-column flex-grow-1 row-gap-2\">\n          <div className=\"d-flex flex-row\">\n            <span className=\"hidden-feldstueck\">{feldstueck.bezeichnung || feldstueck.nummer}</span>\n            <span className=\"hidden-seperator\"> | </span>\n            <span className=\"hidden-schlag\">Schlag #{schlag.nummer}</span>\n          </div>\n          <div className=\"d-flex justify-content-between gap-2 text-muted small operations-date\">\n            {operation.date && (\n              <span className=\"d-flex gap-2 align-items-center\">\n                <img\n                  src={calendar_svg}\n                  alt=\"Datum\"\n                  style={{ width: '20px', height: '20px' }}\n                  title=\"Datum\"\n                />\n                {new Date(operation.date).toLocaleDateString('de-DE')}\n              </span>\n            )}\n          </div>\n          <div className=\"d-flex flex-wrap align-items-center gap-2 fw-semibold operations-name\">\n            {operation.operation_type?.name && (\n              <img\n                src={getOperationIcon(operation.operation_type.name)}\n                alt={operation.operation_type.name}\n                style={{ width: '20px', height: '20px' }}\n                title={operation.operation_type.name}\n              />\n            )}\n            <span className=\"could-be-long-txt\">{operation.operation_type?.name || 'Unbekannte Maßnahme'}</span>\n\n            <Dropdown\n              onClick={(e) => e.stopPropagation()}\n              className=\"ms-2\"\n              show={effectiveOpenDropdownId === `operation-${operation.id}`}\n              onToggle={(isOpen) => {\n                effectiveSetOpenDropdownId(isOpen ? `operation-${operation.id}` : null);\n              }}\n            >\n              <Dropdown.Toggle\n                as=\"span\"\n                className=\"btn btn-inline-dropdown btn-sm dropdown-toggle-no-caret\"\n                style={{ cursor: 'pointer' }}\n                id={`dropdown-operation-${operation.id}`}\n              >\n                <i className=\"bi bi-three-dots-vertical\"></i>\n              </Dropdown.Toggle>\n              <Dropdown.Menu>\n                <Dropdown.Item\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    effectiveSetOpenDropdownId(null);\n                    setEditOperationData({\n                      farm: farmDetails,\n                      year: year,\n                      feldstueck: feldstueck,\n                      schlag: schlag,\n                      operation: operation\n                    });\n                    setShowQuickOperationModal(true);\n                  }}\n                >\n                  <i className=\"bi bi-pencil-square me-2\"></i> Bearbeiten\n                </Dropdown.Item>\n                <Dropdown.Divider />\n                <Dropdown.Item\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    effectiveSetOpenDropdownId(null);\n                    handleDelete('operation', operation);\n                  }}\n                  className=\"text-danger\"\n                >\n                  <i className=\"bi bi-x-square me-2\"></i> Löschen\n                </Dropdown.Item>\n                <Dropdown.Divider />\n                <Dropdown.Item\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    effectiveSetOpenDropdownId(null);\n                    setDataSheetOperations([operation]);\n                    setDataSheetContext({\n                      farm: farmDetails,\n                      year: year,\n                      feldstueck: feldstueck,\n                      schlag: schlag\n                    });\n                    setDataSheetTitle(`Datenblatt - ${operation.operation_type?.name || 'Maßnahme'}`);\n                    setShowDataSheetModal(true);\n                  }}\n                >\n                  <i className=\"bi bi-file-earmark-text me-2\"></i> Datenblatt\n                </Dropdown.Item>\n              </Dropdown.Menu>\n            </Dropdown>\n\n            {operation.soil_work_data && operation.soil_work_data.soil_work_type?.name && (\n              <Badge className=\"operations-soil-work-detail\">\n                <span className=\"could-be-long-txt\">{operation.soil_work_data.soil_work_type.name}</span>\n              </Badge>\n            )}\n            {operation.seeding_data && operation.seeding_data.crop && (\n              <Badge className=\"operations-seeding-detail\">\n                <i className=\"bi bi-flower2 me-1\"></i>\n                <span className=\"could-be-long-txt\">{operation.seeding_data.crop.name}</span>\n                {operation.seeding_data.seed_amount && operation.seeding_data.seed_unit && (\n                  <span className=\"ms-1\">\n                    ({operation.seeding_data.seed_amount} {operation.seeding_data.seed_unit.code})\n                  </span>\n                )}\n              </Badge>\n            )}\n            {operation.fertilizing_data && (\n              <Badge className=\"operations-fertilizing-detail\">\n                {operation.fertilizing_data.specific_product && (\n                  <>\n                    <i className=\"bi bi-droplet me-1\"></i>\n                    <span className=\"could-be-long-txt\">{operation.fertilizing_data.specific_product.name}</span>\n                  </>\n                )}\n                {operation.fertilizing_data.organic_fertilizer_type && (\n                  <>\n                    <i className=\"bi bi-droplet me-1\"></i>\n                    <span className=\"could-be-long-txt\">{operation.fertilizing_data.organic_fertilizer_type.name}</span>\n                  </>\n                )}\n                {operation.fertilizing_data.amount && operation.fertilizing_data.unit && (\n                  <span className=\"ms-1\">\n                    ({operation.fertilizing_data.amount} {operation.fertilizing_data.unit.code})\n                  </span>\n                )}\n              </Badge>\n            )}\n            {operation.pest_control_data && (\n              <Badge className=\"operations-pest-control-detail\">\n                {operation.pest_control_data.specific_product && (\n                  <>\n                    <i className=\"bi bi-droplet me-1\"></i>\n                    <span className=\"could-be-long-txt\">{operation.pest_control_data.specific_product.name}</span>\n                  </>\n                )}\n                {operation.pest_control_data.amount && operation.pest_control_data.unit && (\n                  <span className=\"ms-1\">\n                    ({operation.pest_control_data.amount} {operation.pest_control_data.unit.code})\n                  </span>\n                )}\n              </Badge>\n            )}\n            {operation.harvest_data && operation.harvest_data.crop && (\n              <Badge className=\"operations-harvesting-detail\">\n                <i className=\"bi bi-basket me-1\"></i>\n                <span className=\"could-be-long-txt\">{operation.harvest_data.crop.name}</span>\n                {operation.harvest_data.harvest_amount && operation.harvest_data.harvest_unit && (\n                  <span className=\"ms-1\">\n                    ({operation.harvest_data.harvest_amount} {operation.harvest_data.harvest_unit.code})\n                  </span>\n                )}\n              </Badge>\n            )}\n          </div>\n          {operation.notes && (\n            <div className=\"d-flex gap-2 text-muted small mt-1 operations-info\">\n              <i className=\"bi bi-card-text me-1\"></i>\n              {operation.notes}\n            </div>\n          )}\n        </div>\n        {operation.area_ha && (\n          <div className=\"text-end text-muted small total-column operation-total\">\n            {formatGermanDecimal(operation.area_ha)} ha\n            {isSuperuser && operation.co2_total_gwp > 0 && (\n              <div className=\"text-success small\">\n                <i className=\"bi bi-cloud me-1\"></i>\n                {formatGermanDecimal(operation.co2_total_gwp)} kg CO₂eq\n              </div>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default RideGroupedOperations;\n","import React from 'react';\nimport { Accordion, Badge, Dropdown, DropdownDivider } from 'react-bootstrap';\nimport RideGroupedOperations from '../RideGroupedOperations';\n\n// Helper function to format numbers as German decimals with 2 decimal places\nconst formatGermanDecimal = (value) => {\n  if (value === null || value === undefined || value === '') return '0,00';\n  const num = parseFloat(value);\n  if (isNaN(num)) return '0,00';\n  return num.toFixed(2).replace('.', ',');\n};\n\nconst SchlagAccordionItem = ({\n  schlag,\n  feldstueck,\n  year,\n  farmDetails,\n  isSuperuser,\n  openAccordionItems,\n  setOpenAccordionItems,\n  effectiveOpenDropdownId,\n  effectiveSetOpenDropdownId,\n  schlagOperationsDetails,\n  visibleLevels,\n  unifiedSearchTerm,\n  operationSearch,\n  handleCrudOperation,\n  handleDelete,\n  setPreselectedSchlagData,\n  setShowQuickOperationModal,\n  setDataSheetOperations,\n  setDataSheetContext,\n  setDataSheetTitle,\n  setShowDataSheetModal,\n  setEditOperationData,\n  yearMatches,\n  feldstueckMatchesSearch,\n}) => {\n  const operations = schlagOperationsDetails[schlag.id] || [];\n  const operationsCount = operations.length;\n\n  // Check if schlag matches search term\n  let schlagMatchesSearch = false;\n  if (unifiedSearchTerm && unifiedSearchTerm.trim()) {\n    const searchLower = unifiedSearchTerm.toLowerCase().trim();\n    schlagMatchesSearch = \n      (schlag.nummer && schlag.nummer.toString().includes(searchLower)) ||\n      (schlag.schlag_nutzungsart?.name && schlag.schlag_nutzungsart.name.toLowerCase().includes(searchLower)) ||\n      (schlag.nutzungsart?.name && schlag.nutzungsart.name.toLowerCase().includes(searchLower)) ||\n      (schlag.codes && schlag.codes.toLowerCase().includes(searchLower));\n  }\n\n  return (\n    <Accordion.Item eventKey={`schlag-${schlag.id}`} key={schlag.id} className=\"level-4\">\n      <Accordion.Header \n        className=\"level-4\"\n        onClick={(e) => {\n          e.preventDefault();\n          e.stopPropagation();\n        }}\n      >\n        <div className=\"d-flex align-items-center flex-wrap justify-content-between gap-2 toggle-area\">\n          <div className=\"d-flex flex-grow-1 justify-content-between align-items-stretch btn-group btn-group-sm btn-group-add-toggle\" role=\"group\">\n            <div\n              className={`d-flex align-items-center btn btn-years btn-sm${operationsCount === 0 ? ' disabled' : ''}`}\n              onClick={(e) => {\n                e.stopPropagation();\n                if (operationsCount > 0) {\n                  const newOpenItems = new Set(openAccordionItems);\n                  if (newOpenItems.has(`schlag-${schlag.id}`)) {\n                    newOpenItems.delete(`schlag-${schlag.id}`);\n                  } else {\n                    newOpenItems.add(`schlag-${schlag.id}`);\n                  }\n                  setOpenAccordionItems(newOpenItems);\n                }\n              }}\n              title={operationsCount > 0 ? \"Details anzeigen\" : \"Keine Maßnahmen vorhanden\"}\n              role=\"button\"\n              tabIndex={operationsCount > 0 ? 0 : -1}\n              style={{ cursor: operationsCount > 0 ? 'pointer' : 'not-allowed' }}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter' || e.key === ' ') {\n                  e.stopPropagation();\n                  if (operationsCount > 0) {\n                    const newOpenItems = new Set(openAccordionItems);\n                    if (newOpenItems.has(`schlag-${schlag.id}`)) {\n                      newOpenItems.delete(`schlag-${schlag.id}`);\n                    } else {\n                      newOpenItems.add(`schlag-${schlag.id}`);\n                    }\n                    setOpenAccordionItems(newOpenItems);\n                  }\n                }\n              }}\n            >\n              <i className={`bi ${openAccordionItems.has(`schlag-${schlag.id}`) ? 'bi-arrows-collapse' : 'bi-arrows-expand'}`}></i>\n            </div>\n            <div className=\"d-flex flex-grow-1 align-items-center ms-2 me-2 schlag-title\">\n              <div className=\"fw-semibold d-flex align-items-center flex-wrap\">\n                <span className=\" could-be-long-txt\">Schlag #{schlag.nummer}<sup className=\"hidden-feldstueck\"> {feldstueck.bezeichnung || feldstueck.nummer}</sup></span>\n\n                <Dropdown \n                  onClick={(e) => e.stopPropagation()} \n                  className=\"ms-2\"\n                  show={effectiveOpenDropdownId === `schlag-${schlag.id}`}\n                  onToggle={(isOpen) => {\n                    effectiveSetOpenDropdownId(isOpen ? `schlag-${schlag.id}` : null);\n                  }}\n                >\n                  <Dropdown.Toggle \n                    as=\"span\"\n                    className=\"btn btn-inline-dropdown btn-sm dropdown-toggle-no-caret\"\n                    style={{ cursor: 'pointer' }}\n                    id={`dropdown-schlag-${schlag.id}`}\n                  >\n                    <i className=\"bi bi-three-dots-vertical\"></i>\n                  </Dropdown.Toggle>\n                  <Dropdown.Menu>\n                    <Dropdown.Item\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        effectiveSetOpenDropdownId(null);\n                        handleCrudOperation('edit', 'schlag', schlag, feldstueck);\n                      }}\n                    >\n                      <i className=\"bi bi-pencil-square me-2\"></i> Bearbeiten\n                    </Dropdown.Item>\n                    <Dropdown.Divider />\n                    <Dropdown.Item\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        effectiveSetOpenDropdownId(null);\n                        handleDelete('schlag', schlag);\n                      }}\n                      className=\"text-danger\"\n                    >\n                      <i className=\"bi bi-x-square me-2\"></i> Löschen\n                    </Dropdown.Item>\n                    <DropdownDivider />\n                    <Dropdown.Item\n                      onClick={() => {\n                        effectiveSetOpenDropdownId(null);\n                        setPreselectedSchlagData({\n                          farm: farmDetails,\n                          year: year,\n                          feldstueck: feldstueck,\n                          schlag: schlag\n                        });\n                        setShowQuickOperationModal(true);\n                      }}\n                    >\n                      <i className=\"bi bi-lightning me-2\"></i>Maßnahme erfassen\n                    </Dropdown.Item>\n                    <DropdownDivider />\n                    <Dropdown.Item\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        effectiveSetOpenDropdownId(null);\n                        const schlagOps = schlagOperationsDetails[schlag.id] || [];\n                        setDataSheetOperations(schlagOps);\n                        setDataSheetContext({\n                          farm: farmDetails,\n                          year: year,\n                          feldstueck: feldstueck,\n                          schlag: schlag\n                        });\n                        setDataSheetTitle(`Datenblatt - Schlag #${schlag.nummer}`);\n                        setShowDataSheetModal(true);\n                      }}\n                    >\n                      <i className=\"bi bi-file-earmark-text me-2\"></i> Datenblatt\n                    </Dropdown.Item>\n                  </Dropdown.Menu>\n                </Dropdown>\n                {(() => {\n                  const item = schlag.crop || schlag.schlag_nutzungsart || schlag.nutzungsart;\n                  const displayName = item?.name || item?.bezeichnung;\n                  \n                  return displayName && (\n                    <Badge className=\"ms-2 small bg-secondary\">\n                      <i className=\"bi bi-flower2 me-1\"></i>\n                      <span className=\"could-be-long-txt\">{displayName}</span>\n                    </Badge>\n                  );\n                })()}\n                {schlag.land_use_changes_count > 0 && (\n                  <Badge \n                    className=\"ms-2 small bg-warning text-dark\"\n                    title=\"Landnutzungsänderungen vorhanden\"\n                  >\n                    <span className=\"could-be-long-txt\">Landnutzungsänderung</span>\n                  </Badge>\n                )}\n              </div>\n            </div>\n            <div className=\"d-flex align-items-center btn btn-years btn-sm btn-group-title disabled\">\n              <Badge className=\"title-inline bg-warning text-black\">\n                <i className=\"bi bi-lightning me-1\"></i>\n                <span className=\"could-be-long-txt\">{operationsCount} {operationsCount !== 1 ? 'Maßnahmen' : 'Maßnahme'}</span>\n              </Badge>\n            </div>\n            <div className=\"d-flex align-items-center justify-content-end text-muted small total-column schlag-total\">\n              <div>\n                <strong>{formatGermanDecimal(schlag.flaeche_netto)} ha</strong>\n                {isSuperuser && schlag.co2_total_gwp > 0 && (\n                  <div className=\"text-success small\">\n                    <i className=\"bi bi-cloud me-1\"></i>\n                    {formatGermanDecimal(schlag.co2_total_gwp)} kg CO₂eq\n                  </div>\n                )}\n              </div>\n              {schlag.flaeche_netto !== schlag.flaeche_brutto ?\n              <div className=\"text-success\">\n                Netto: {formatGermanDecimal(schlag.flaeche_netto)} ha\n              </div>\n              : ''}\n            </div>\n          </div>\n        </div>\n      </Accordion.Header>\n\n      <Accordion.Body className=\"level-4\">\n        {/* Operations List with Ride Grouping */}\n        {visibleLevels?.operation !== false && operationsCount > 0 ? (\n          <div className=\"d-flex flex-column operations-list\">\n            {(() => {\n              // Filter operations if there's a search term\n              let displayOperations = operations;\n              if (unifiedSearchTerm && unifiedSearchTerm.trim()) {\n                // If parent matched (Year, FS, or Schlag), show all operations\n                if (yearMatches || feldstueckMatchesSearch || schlagMatchesSearch) {\n                    // Show all operations\n                } else {\n                    const searchLower = unifiedSearchTerm.toLowerCase().trim();\n                    displayOperations = operations.filter(op => {\n                      return (\n                        (op.operation_type?.name && op.operation_type.name.toLowerCase().includes(searchLower)) ||\n                        (op.notes && op.notes.toLowerCase().includes(searchLower)) ||\n                        (op.seeding_data?.crop?.name && op.seeding_data.crop.name.toLowerCase().includes(searchLower)) ||\n                        (op.fertilizing_data?.specific_product?.name && op.fertilizing_data.specific_product.name.toLowerCase().includes(searchLower)) ||\n                        (op.harvest_data?.crop?.name && op.harvest_data.crop.name.toLowerCase().includes(searchLower))\n                      );\n                    });\n                }\n              }\n\n              // Filter based on local search\n              const localSearch = operationSearch[schlag.id];\n              if (localSearch && localSearch.trim()) {\n                const searchLower = localSearch.toLowerCase().trim();\n                displayOperations = displayOperations.filter(op => {\n                  return (\n                    (op.operation_type?.name && op.operation_type.name.toLowerCase().includes(searchLower)) ||\n                    (op.notes && op.notes.toLowerCase().includes(searchLower)) ||\n                    (op.seeding_data?.crop?.name && op.seeding_data.crop.name.toLowerCase().includes(searchLower)) ||\n                    (op.fertilizing_data?.specific_product?.name && op.fertilizing_data.specific_product.name.toLowerCase().includes(searchLower)) ||\n                    (op.harvest_data?.crop?.name && op.harvest_data.crop.name.toLowerCase().includes(searchLower))\n                  );\n                });\n              }\n\n              return (\n                <RideGroupedOperations\n                  operations={displayOperations}\n                  feldstueck={feldstueck}\n                  schlag={schlag}\n                  farmDetails={farmDetails}\n                  year={year}\n                  isSuperuser={isSuperuser}\n                  effectiveOpenDropdownId={effectiveOpenDropdownId}\n                  effectiveSetOpenDropdownId={effectiveSetOpenDropdownId}\n                  setEditOperationData={setEditOperationData}\n                  setShowQuickOperationModal={setShowQuickOperationModal}\n                  handleDelete={handleDelete}\n                  setDataSheetOperations={setDataSheetOperations}\n                  setDataSheetContext={setDataSheetContext}\n                  setDataSheetTitle={setDataSheetTitle}\n                  setShowDataSheetModal={setShowDataSheetModal}\n                />\n              );\n            })()}\n          </div>\n        ) : (\n          <></>\n        )}\n      </Accordion.Body>\n    </Accordion.Item>\n  );\n};\n\nexport default SchlagAccordionItem;\n","import React from 'react';\nimport { Accordion, Badge, Dropdown, DropdownDivider } from 'react-bootstrap';\nimport SchlagAccordionItem from './SchlagAccordionItem';\n\n// Helper function to format numbers as German decimals with 2 decimal places\nconst formatGermanDecimal = (value) => {\n  if (value === null || value === undefined || value === '') return '0,00';\n  const num = parseFloat(value);\n  if (isNaN(num)) return '0,00';\n  return num.toFixed(2).replace('.', ',');\n};\n\nconst FeldstueckAccordionItem = ({\n  feldstueck,\n  year,\n  farmDetails,\n  isSuperuser,\n  openAccordionItems,\n  setOpenAccordionItems,\n  activeAccordionKey,\n  effectiveOpenDropdownId,\n  effectiveSetOpenDropdownId,\n  schlagOperationsDetails,\n  visibleIds,\n  visibleLevels,\n  unifiedSearchTerm,\n  schlagSearch,\n  operationSearch,\n  handleCrudOperation,\n  handleDelete,\n  setUnifiedFeldstueckYear,\n  setEditingFeldstueck,\n  setShowUnifiedFeldstueckModal,\n  setPreselectedSchlagData,\n  setShowQuickOperationModal,\n  setDataSheetOperations,\n  setDataSheetContext,\n  setDataSheetTitle,\n  setShowDataSheetModal,\n  setEditOperationData,\n  yearMatches,\n}) => {\n  // Filter schläge within this feldstueck based on search term\n  let schlaege = feldstueck.schlaege || [];\n\n  // Filter schläge based on visibleIds\n  if (visibleIds && visibleIds.schlaege) {\n    schlaege = schlaege.filter(s => visibleIds.schlaege.has(s.id));\n  }\n\n  // Check if feldstueck matches search term\n  let feldstueckMatchesSearch = false;\n  if (unifiedSearchTerm && unifiedSearchTerm.trim()) {\n    const searchLower = unifiedSearchTerm.toLowerCase().trim();\n    feldstueckMatchesSearch = \n      (feldstueck.bezeichnung && feldstueck.bezeichnung.toLowerCase().includes(searchLower)) ||\n      (feldstueck.nummer && feldstueck.nummer.toString().includes(searchLower));\n\n    schlaege = schlaege.filter(schlag => {\n      // Check schlag fields\n      const matchesSchlag = \n        (schlag.nummer && schlag.nummer.toString().includes(searchLower)) ||\n        (schlag.schlag_nutzungsart?.name && schlag.schlag_nutzungsart.name.toLowerCase().includes(searchLower)) ||\n        (schlag.nutzungsart?.name && schlag.nutzungsart.name.toLowerCase().includes(searchLower)) ||\n        (schlag.codes && schlag.codes.toLowerCase().includes(searchLower));\n\n      // Check if any operation matches\n      const operations = schlagOperationsDetails[schlag.id] || [];\n      const hasMatchingOperation = operations.some(op => {\n        return (\n          (op.operation_type?.name && op.operation_type.name.toLowerCase().includes(searchLower)) ||\n          (op.notes && op.notes.toLowerCase().includes(searchLower)) ||\n          (op.seeding_data?.crop?.name && op.seeding_data.crop.name.toLowerCase().includes(searchLower)) ||\n          (op.fertilizing_data?.specific_product?.name && op.fertilizing_data.specific_product.name.toLowerCase().includes(searchLower)) ||\n          (op.harvest_data?.crop?.name && op.harvest_data.crop.name.toLowerCase().includes(searchLower))\n        );\n      });\n\n      return matchesSchlag || hasMatchingOperation;\n    });\n  }\n\n  // Filter based on local search\n  const localSearch = schlagSearch[feldstueck.id];\n  if (localSearch && localSearch.trim()) {\n    const searchLower = localSearch.toLowerCase().trim();\n    schlaege = schlaege.filter(schlag => \n      (schlag.nummer && schlag.nummer.toString().includes(searchLower)) ||\n      (schlag.schlag_nutzungsart?.name && schlag.schlag_nutzungsart.name.toLowerCase().includes(searchLower)) ||\n      (schlag.nutzungsart?.name && schlag.nutzungsart.name.toLowerCase().includes(searchLower))\n    );\n  }\n\n  return (\n    <Accordion.Item eventKey={`feld-${feldstueck.id}`} key={feldstueck.id} className=\"level-3\">\n      <Accordion.Header \n        className=\"level-3\"\n        onClick={(e) => {\n          e.preventDefault();\n          e.stopPropagation();\n        }}\n      >\n        <div className=\"d-flex align-items-center flex-wrap justify-content-between gap-2 toggle-area\">\n          <div className=\"d-flex flex-grow-1 justify-content-between align-items-stretch btn-group btn-group-sm btn-group-add-toggle\" role=\"group\">\n            <div\n              className={`d-flex align-items-center btn btn-years btn-sm${!(feldstueck.schlaege && feldstueck.schlaege.length > 0) ? ' disabled' : ''}`}\n              onClick={(e) => {\n                e.stopPropagation();\n                if (feldstueck.schlaege && feldstueck.schlaege.length > 0) {\n                  const newOpenItems = new Set(openAccordionItems);\n                  if (newOpenItems.has(`feld-${feldstueck.id}`)) {\n                    newOpenItems.delete(`feld-${feldstueck.id}`);\n                  } else {\n                    newOpenItems.add(`feld-${feldstueck.id}`);\n                  }\n                  setOpenAccordionItems(newOpenItems);\n                }\n              }}\n              title={feldstueck.schlaege && feldstueck.schlaege.length > 0 ? \"Details anzeigen\" : \"Keine Schläge vorhanden\"}\n              role=\"button\"\n              tabIndex={feldstueck.schlaege && feldstueck.schlaege.length > 0 ? 0 : -1}\n              style={{ cursor: feldstueck.schlaege && feldstueck.schlaege.length > 0 ? 'pointer' : 'not-allowed' }}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter' || e.key === ' ') {\n                  e.stopPropagation();\n                  if (feldstueck.schlaege && feldstueck.schlaege.length > 0) {\n                    const newOpenItems = new Set(openAccordionItems);\n                    if (newOpenItems.has(`feld-${feldstueck.id}`)) {\n                      newOpenItems.delete(`feld-${feldstueck.id}`);\n                    } else {\n                      newOpenItems.add(`feld-${feldstueck.id}`);\n                    }\n                    setOpenAccordionItems(newOpenItems);\n                  }\n                }\n              }}\n            >\n              <i className={`bi ${openAccordionItems.has(`feld-${feldstueck.id}`) ? 'bi-arrows-collapse' : 'bi-arrows-expand'}`}></i>\n            </div>\n\n            <div className=\"d-flex flex-grow-1 align-items-center ms-2 me-2 feldstueck-title\">\n              <div className=\"fw-semibold d-flex align-items-center flex-wrap\">\n                <span className=\"could-be-long-txt\">{feldstueck.bezeichnung || 'Keine Bezeichnung'} <span className=\"text-muted small\">(# {feldstueck.nummer})</span></span>\n\n                <Dropdown \n                  onClick={(e) => e.stopPropagation()} \n                  className=\"ms-2\"\n                  show={effectiveOpenDropdownId === `feldstueck-${feldstueck.id}`}\n                  onToggle={(isOpen) => {\n                    effectiveSetOpenDropdownId(isOpen ? `feldstueck-${feldstueck.id}` : null);\n                  }}\n                >\n                  <Dropdown.Toggle \n                    as=\"span\"\n                    className=\"btn btn-inline-dropdown btn-sm dropdown-toggle-no-caret\"\n                    style={{ cursor: 'pointer' }}\n                    id={`dropdown-feldstueck-${feldstueck.id}`}\n                  >\n                    <i className=\"bi bi-three-dots-vertical\"></i>\n                  </Dropdown.Toggle>\n                  <Dropdown.Menu>\n                    <Dropdown.Item\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        effectiveSetOpenDropdownId(null);\n                        setUnifiedFeldstueckYear(year);\n                        setEditingFeldstueck(feldstueck);\n                        setShowUnifiedFeldstueckModal(true);\n                      }}\n                    >\n                      <i className=\"bi bi-pencil-square me-2\"></i> Bearbeiten\n                    </Dropdown.Item>\n                    <Dropdown.Divider />\n                    <Dropdown.Item\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        effectiveSetOpenDropdownId(null);\n                        handleDelete('feldstueck', feldstueck);\n                      }}\n                      className=\"text-danger\"\n                    >\n                      <i className=\"bi bi-x-square me-2\"></i> Löschen\n                    </Dropdown.Item>\n                    <DropdownDivider />\n                    <Dropdown.Item\n                      onClick={() => {\n                        effectiveSetOpenDropdownId(null);\n                        handleCrudOperation('create', 'schlag', null, feldstueck);\n                      }}\n                    >\n                      <i className=\"bi bi-plus-square me-2\"></i> Schlag hinzufügen\n                    </Dropdown.Item>\n                    <DropdownDivider />\n                    <Dropdown.Item\n                      onClick={(e) => {\n                        e.stopPropagation();\n                        effectiveSetOpenDropdownId(null);\n                        const feldstueckOperations = [];\n                        (feldstueck.schlaege || []).forEach(s => {\n                          const ops = schlagOperationsDetails[s.id] || [];\n                          ops.forEach(op => {\n                            feldstueckOperations.push({\n                              ...op,\n                              _feldstueck: feldstueck,\n                              _schlag: s\n                            });\n                          });\n                        });\n                        setDataSheetOperations(feldstueckOperations);\n                        setDataSheetContext({\n                          farm: farmDetails,\n                          year: year,\n                          feldstueck: feldstueck\n                        });\n                        setDataSheetTitle(`Datenblatt - ${feldstueck.bezeichnung || 'Feldstück #' + feldstueck.nummer}`);\n                        setShowDataSheetModal(true);\n                      }}\n                    >\n                      <i className=\"bi bi-file-earmark-text me-2\"></i> Datenblatt\n                    </Dropdown.Item>\n                  </Dropdown.Menu>\n                </Dropdown>\n                <Badge \n                  className={\"ms-2 small nutzungsart dm-none \"+(feldstueck.feldstueck_nutzungsart || feldstueck.nutzungsart)?.bezeichnung}\n                >\n                  <i className=\"bi bi-flower2 me-1\"></i>\n                  <span className=\"could-be-long-txt\">{(feldstueck.feldstueck_nutzungsart || feldstueck.nutzungsart)?.bezeichnung}</span>\n                </Badge>\n                <Badge \n                  bg=\"warning\"\n                  className=\"ms-2 small dm-none text-black\"\n                  title=\"Anzahl der Maßnahmen in allen Schlägen\"\n                >\n                  <i className=\"bi bi-lightning me-1\"></i>\n                  <span className=\"could-be-long-txt\">\n                  {(() => {\n                    let totalOps = 0;\n                    (feldstueck.schlaege || []).forEach(schlag => {\n                      const ops = schlagOperationsDetails[schlag.id] || [];\n                      totalOps += ops.length;\n                    });\n                    return totalOps;\n                  })()} Maßnahmen\n                  </span>\n                </Badge>\n              </div>\n            </div>\n\n            <div className=\"d-flex align-items-center btn btn-years btn-sm btn-group-title disabled\">\n              <Badge className=\"title-inline\">\n                <i className=\"bi bi-grid-3x3 me-1\"></i>\n                <span className=\"could-be-long-txt\">\n                  {feldstueck.schlaege_count} {feldstueck.schlaege_count !== 1 ? 'Schläge' : 'Schlag'}\n                </span>\n              </Badge>\n            </div>\n            <div className=\"d-flex align-items-center justify-content-end text-muted small total-column feldstueck-total\">\n              <div>\n                <strong>{formatGermanDecimal(feldstueck.flaeche)} ha </strong>\n                  {isSuperuser && feldstueck.co2_total_gwp > 0 && (\n                  <div className=\"text-success small\">\n                    <i className=\"bi bi-cloud me-1\"></i>\n                    {formatGermanDecimal(feldstueck.co2_total_gwp)} kg CO₂eq\n                  </div>\n                )}\n              </div>\n            </div>\n          </div>\n        </div>\n      </Accordion.Header>\n\n      <Accordion.Body className=\"level-3\">\n        {/* Level 4: Schläge */}\n        <Accordion \n          flush \n          alwaysOpen\n          activeKey={activeAccordionKey}\n          className=\"level-4\"\n          onSelect={(eventKeys) => {\n            setOpenAccordionItems(new Set(eventKeys));\n          }}\n        >\n          {schlaege && schlaege.length > 0 ? (\n            schlaege.map(schlag => (\n              <SchlagAccordionItem\n                key={schlag.id}\n                schlag={schlag}\n                feldstueck={feldstueck}\n                year={year}\n                farmDetails={farmDetails}\n                isSuperuser={isSuperuser}\n                openAccordionItems={openAccordionItems}\n                setOpenAccordionItems={setOpenAccordionItems}\n                effectiveOpenDropdownId={effectiveOpenDropdownId}\n                effectiveSetOpenDropdownId={effectiveSetOpenDropdownId}\n                schlagOperationsDetails={schlagOperationsDetails}\n                visibleLevels={visibleLevels}\n                unifiedSearchTerm={unifiedSearchTerm}\n                operationSearch={operationSearch}\n                handleCrudOperation={handleCrudOperation}\n                handleDelete={handleDelete}\n                setPreselectedSchlagData={setPreselectedSchlagData}\n                setShowQuickOperationModal={setShowQuickOperationModal}\n                setDataSheetOperations={setDataSheetOperations}\n                setDataSheetContext={setDataSheetContext}\n                setDataSheetTitle={setDataSheetTitle}\n                setShowDataSheetModal={setShowDataSheetModal}\n                setEditOperationData={setEditOperationData}\n                yearMatches={yearMatches}\n                feldstueckMatchesSearch={feldstueckMatchesSearch}\n              />\n            ))\n          ) : (\n            <></>\n          )}\n        </Accordion>\n      </Accordion.Body>\n    </Accordion.Item>\n  );\n};\n\nexport default FeldstueckAccordionItem;\n","import React from 'react';\nimport { Accordion, Badge, Dropdown, DropdownDivider } from 'react-bootstrap';\nimport FeldstueckAccordionItem from './FeldstueckAccordionItem';\n\n// Helper function to format numbers as German decimals with 2 decimal places\nconst formatGermanDecimal = (value) => {\n  if (value === null || value === undefined || value === '') return '0,00';\n  const num = parseFloat(value);\n  if (isNaN(num)) return '0,00';\n  return num.toFixed(2).replace('.', ',');\n};\n\nconst YearAccordionItem = ({\n  year,\n  farmDetails,\n  isSuperuser,\n  openAccordionItems,\n  setOpenAccordionItems,\n  activeAccordionKey,\n  effectiveOpenDropdownId,\n  effectiveSetOpenDropdownId,\n  schlagOperationsDetails,\n  visibleIds,\n  visibleLevels,\n  unifiedSearchTerm,\n  feldstueckSearch,\n  schlagSearch,\n  operationSearch,\n  handleCrudOperation,\n  handleDelete,\n  setUnifiedFeldstueckYear,\n  setEditingFeldstueck,\n  setShowUnifiedFeldstueckModal,\n  setPreselectedSchlagData,\n  setShowQuickOperationModal,\n  setDataSheetOperations,\n  setDataSheetContext,\n  setDataSheetTitle,\n  setShowDataSheetModal,\n  setEditOperationData,\n}) => {\n  // Check if year matches search term\n  let yearMatches = false;\n  if (unifiedSearchTerm && unifiedSearchTerm.trim()) {\n    const searchLower = unifiedSearchTerm.toLowerCase().trim();\n    yearMatches = year.year.toString().includes(searchLower);\n  }\n\n  return (\n    <Accordion.Item className=\"level-2\" eventKey={`year-${year.id}`} key={year.id}>\n      <Accordion.Header\n        className=\"level-2\"\n        onClick={(e) => {\n          e.preventDefault();\n          e.stopPropagation();\n        }}\n      >\n        <div className=\"d-flex align-items-center flex-wrap justify-content-between gap-2 toggle-area\">\n          <div className=\"d-flex flex-grow-1 justify-content-between align-items-stretch btn-group btn-group-sm btn-group-add-toggle\" role=\"group\">\n            <div\n              className={`d-flex align-items-center btn btn-years btn-sm${!(year.feldstuecke && year.feldstuecke.length > 0) ? ' disabled' : ''}`}\n              onClick={(e) => {\n                e.stopPropagation();\n                if (year.feldstuecke && year.feldstuecke.length > 0) {\n                  const newOpenItems = new Set(openAccordionItems);\n                  if (newOpenItems.has(`year-${year.id}`)) {\n                    newOpenItems.delete(`year-${year.id}`);\n                  } else {\n                    newOpenItems.add(`year-${year.id}`);\n                  }\n                  setOpenAccordionItems(newOpenItems);\n                }\n              }}\n              title={year.feldstuecke && year.feldstuecke.length > 0 ? \"Details anzeigen\" : \"Keine Feldstücke vorhanden\"}\n              role=\"button\"\n              tabIndex={year.feldstuecke && year.feldstuecke.length > 0 ? 0 : -1}\n              style={{ \n                cursor: year.feldstuecke && year.feldstuecke.length > 0 ? 'pointer' : 'not-allowed'\n              }}\n              onKeyDown={(e) => {\n                if (e.key === 'Enter' || e.key === ' ') {\n                  e.stopPropagation();\n                  if (year.feldstuecke && year.feldstuecke.length > 0) {\n                    const newOpenItems = new Set(openAccordionItems);\n                    if (newOpenItems.has(`year-${year.id}`)) {\n                      newOpenItems.delete(`year-${year.id}`);\n                    } else {\n                      newOpenItems.add(`year-${year.id}`);\n                    }\n                    setOpenAccordionItems(newOpenItems);\n                  }\n                }\n              }}\n            >\n              <i className={`bi ${openAccordionItems.has(`year-${year.id}`) ? 'bi-arrows-collapse' : 'bi-arrows-expand'}`}></i>\n            </div>\n            <div className=\"d-flex flex-grow-1 align-items-center ms-2 me-2 year-title\">\n              <div className=\"fw-semibold\">\n                {year.year}\n              </div>\n              <Dropdown \n                onClick={(e) => e.stopPropagation()} \n                className=\"ms-2\"\n                show={effectiveOpenDropdownId === `year-${year.id}`}\n                onToggle={(isOpen) => {\n                  effectiveSetOpenDropdownId(isOpen ? `year-${year.id}` : null);\n                }}\n              >\n                <Dropdown.Toggle \n                  as=\"span\"\n                  className=\"btn btn-inline-dropdown btn-sm dropdown-toggle-no-caret\"\n                  style={{ cursor: 'pointer' }}\n                  id={`dropdown-year-${year.id}`}\n                >\n                  <i className=\"bi bi-three-dots-vertical\"></i>\n                </Dropdown.Toggle>\n                <Dropdown.Menu>\n                  <Dropdown.Item\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      effectiveSetOpenDropdownId(null);\n                      handleCrudOperation('edit', 'year', year);\n                    }}\n                  >\n                    <i className=\"bi bi-pencil-square me-2\"></i> Bearbeiten\n                  </Dropdown.Item>\n                  <Dropdown.Divider />\n                  <Dropdown.Item\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      effectiveSetOpenDropdownId(null);\n                      handleDelete('year', year);\n                    }}\n                    className=\"text-danger\"\n                  >\n                    <i className=\"bi bi-x-square me-2\"></i> Löschen\n                  </Dropdown.Item>\n                  <DropdownDivider />\n                  <Dropdown.Item\n                    onClick={() => {\n                      effectiveSetOpenDropdownId(null);\n                      setUnifiedFeldstueckYear(year);\n                      setEditingFeldstueck(null);\n                      setShowUnifiedFeldstueckModal(true);\n                    }}\n                  >\n                    <i className=\"bi bi-plus-square me-1\"></i> Feldstück hinzufügen\n                  </Dropdown.Item>\n                  <Dropdown.Divider />\n                  <Dropdown.Item\n                    onClick={(e) => {\n                      e.stopPropagation();\n                      effectiveSetOpenDropdownId(null);\n                      const yearOperations = [];\n                      (year.feldstuecke || []).forEach(fs => {\n                        (fs.schlaege || []).forEach(s => {\n                          const ops = schlagOperationsDetails[s.id] || [];\n                          ops.forEach(op => {\n                            yearOperations.push({\n                              ...op,\n                              _feldstueck: fs,\n                              _schlag: s\n                            });\n                          });\n                        });\n                      });\n                      setDataSheetOperations(yearOperations);\n                      setDataSheetContext({\n                        farm: farmDetails,\n                        year: year\n                      });\n                      setDataSheetTitle(`Datenblatt - Erntejahr ${year.year}`);\n                      setShowDataSheetModal(true);\n                    }}\n                  >\n                    <i className=\"bi bi-file-earmark-text me-2\"></i> Datenblatt\n                  </Dropdown.Item>\n                </Dropdown.Menu>\n              </Dropdown>\n            </div>\n            <div className=\"d-flex align-items-center btn btn-years btn-sm btn-group-title disabled\">\n              <Badge className=\"title-inline\">\n                <i className=\"bi bi-pin-map me-1\"></i>\n                <span className=\"could-be-long-txt\">{(year.feldstuecke || []).length} Feldstück{(year.feldstuecke || []).length !== 1 ? 'e' : ''}</span>\n              </Badge>\n            </div>\n            <div className=\"d-flex align-items-center justify-content-end text-muted small total-column year-total\">\n              <div>\n                <strong>{formatGermanDecimal(year.total_flaeche)} ha </strong>\n                {isSuperuser && year.co2_total_gwp > 0 && (\n                  <div className=\"text-success small\">\n                    <i className=\"bi bi-cloud me-1\"></i>\n                    {formatGermanDecimal(year.co2_total_gwp)} kg CO₂eq\n                  </div>\n                )}\n              </div>\n            </div>\n          </div>\n        </div>\n      </Accordion.Header>\n\n      <Accordion.Body className=\"level-2\">\n        {/* Level 3: Feldstücke */}\n        <Accordion\n          flush \n          alwaysOpen\n          activeKey={activeAccordionKey}\n          className=\"level-3\"\n          onSelect={(eventKeys) => {\n            setOpenAccordionItems(new Set(eventKeys));\n          }}\n        >\n          {(() => {\n            let feldstuecke = year.feldstuecke || [];\n\n            // Filter feldstücke based on visibleIds\n            if (visibleIds && visibleIds.feldstuecke) {\n              feldstuecke = feldstuecke.filter(fs => visibleIds.feldstuecke.has(fs.id));\n            }\n\n            // Filter feldstücke based on search term\n            if (unifiedSearchTerm && unifiedSearchTerm.trim()) {\n              const searchLower = unifiedSearchTerm.toLowerCase().trim();\n\n              // If year matches, show all feldstücke; otherwise filter them\n              if (!yearMatches) {\n                feldstuecke = feldstuecke.filter(feldstueck => {\n                  // Check feldstueck fields\n                  const matchesFeldstueck = \n                    (feldstueck.bezeichnung && feldstueck.bezeichnung.toLowerCase().includes(searchLower)) ||\n                    (feldstueck.nummer && feldstueck.nummer.toString().includes(searchLower));\n\n                  // Check if any schlag matches (including operations)\n                  const hasMatchingSchlag = feldstueck.schlaege && feldstueck.schlaege.some(schlag => {\n                    // Check schlag fields\n                    const matchesSchlag = \n                      (schlag.nummer && schlag.nummer.toString().includes(searchLower)) ||\n                      (schlag.schlag_nutzungsart?.name && schlag.schlag_nutzungsart.name.toLowerCase().includes(searchLower)) ||\n                      (schlag.nutzungsart?.name && schlag.nutzungsart.name.toLowerCase().includes(searchLower)) ||\n                      (schlag.codes && schlag.codes.toLowerCase().includes(searchLower));\n\n                    // Check if any operation matches\n                    const operations = schlagOperationsDetails[schlag.id] || [];\n                    const hasMatchingOperation = operations.some(op => {\n                      return (\n                        (op.operation_type?.name && op.operation_type.name.toLowerCase().includes(searchLower)) ||\n                        (op.notes && op.notes.toLowerCase().includes(searchLower)) ||\n                        (op.seeding_data?.crop?.name && op.seeding_data.crop.name.toLowerCase().includes(searchLower)) ||\n                        (op.fertilizing_data?.specific_product?.name && op.fertilizing_data.specific_product.name.toLowerCase().includes(searchLower)) ||\n                        (op.harvest_data?.crop?.name && op.harvest_data.crop.name.toLowerCase().includes(searchLower))\n                      );\n                    });\n\n                    return matchesSchlag || hasMatchingOperation;\n                  });\n\n                  return matchesFeldstueck || hasMatchingSchlag;\n                });\n              }\n            }\n\n            // Filter based on local search\n            const localSearch = feldstueckSearch[year.id];\n            if (localSearch && localSearch.trim()) {\n              const searchLower = localSearch.toLowerCase().trim();\n              feldstuecke = feldstuecke.filter(feldstueck => \n                (feldstueck.bezeichnung && feldstueck.bezeichnung.toLowerCase().includes(searchLower)) ||\n                (feldstueck.nummer && feldstueck.nummer.toString().includes(searchLower))\n              );\n            }\n\n            return feldstuecke.map(feldstueck => (\n              <FeldstueckAccordionItem\n                key={feldstueck.id}\n                feldstueck={feldstueck}\n                year={year}\n                farmDetails={farmDetails}\n                isSuperuser={isSuperuser}\n                openAccordionItems={openAccordionItems}\n                setOpenAccordionItems={setOpenAccordionItems}\n                activeAccordionKey={activeAccordionKey}\n                effectiveOpenDropdownId={effectiveOpenDropdownId}\n                effectiveSetOpenDropdownId={effectiveSetOpenDropdownId}\n                schlagOperationsDetails={schlagOperationsDetails}\n                visibleIds={visibleIds}\n                visibleLevels={visibleLevels}\n                unifiedSearchTerm={unifiedSearchTerm}\n                schlagSearch={schlagSearch}\n                operationSearch={operationSearch}\n                handleCrudOperation={handleCrudOperation}\n                handleDelete={handleDelete}\n                setUnifiedFeldstueckYear={setUnifiedFeldstueckYear}\n                setEditingFeldstueck={setEditingFeldstueck}\n                setShowUnifiedFeldstueckModal={setShowUnifiedFeldstueckModal}\n                setPreselectedSchlagData={setPreselectedSchlagData}\n                setShowQuickOperationModal={setShowQuickOperationModal}\n                setDataSheetOperations={setDataSheetOperations}\n                setDataSheetContext={setDataSheetContext}\n                setDataSheetTitle={setDataSheetTitle}\n                setShowDataSheetModal={setShowDataSheetModal}\n                setEditOperationData={setEditOperationData}\n                yearMatches={yearMatches}\n              />\n            ));\n          })()}\n        </Accordion>\n      </Accordion.Body>\n    </Accordion.Item>\n  );\n};\n\nexport default YearAccordionItem;\n","import React, { useState, useEffect } from 'react';\nimport { Card, Button, Table, Form, Row, Col, Alert, Spinner, Badge, Modal } from 'react-bootstrap';\nimport api from '../../utils/api';\n\nconst LandUseChangeManager = ({ schlagId, schlagFlaecheBrutto, onUpdate }) => {\n    const [loading, setLoading] = useState(false);\n    const [saving, setSaving] = useState(false);\n    const [error, setError] = useState(null);\n    const [success, setSuccess] = useState(null);\n\n    const [landUseChanges, setLandUseChanges] = useState([]);\n    const [showAddForm, setShowAddForm] = useState(false);\n    const [editingEntry, setEditingEntry] = useState(null);\n\n    const [formData, setFormData] = useState({\n        schlag: schlagId,\n        land_use: '',\n        soil_work: '',\n        carbon_input: '',\n        since_year: new Date().getFullYear(),\n        area: ''\n    });\n\n    // Land use choices from the model (LandUseChoices)\n    const landUseChoices = [\n        { value: 'ANNUAL_CROPLAND', label: 'einjährige Anbaufläche' },\n        { value: 'PERENNIAL CROPLAND', label: 'mehrjährige Anbaufläche' },\n        { value: 'SET-ASIDE CROPLAND', label: 'Stillgelegte Flächen (<20 Jahre)' },\n        { value: 'GRASSLAND', label: 'Grünland' },\n        { value: 'FOREST', label: 'Wald' }\n    ];\n\n    const soilWorkChoices = [\n        { value: 'REDUCED', label: 'Reduziert' },\n        { value: 'COMPLETE', label: 'Vollständig' },\n        { value: 'DIRECT_SEEDING', label: 'Direktsaat' }\n    ];\n\n    const carbonInputChoices = [\n        { value: 'LOW', label: 'Niedrig' },\n        { value: 'MEDIUM', label: 'Mittel' },\n        { value: 'HIGH WITHOUT FERTILIZER', label: 'Hoch ohne Dünger' },\n        { value: 'HIGH WITH FERTILIZER', label: 'Hoch mit Dünger' }\n    ];\n\n    useEffect(() => {\n        if (schlagId) {\n            loadLandUseChanges();\n        }\n    }, [schlagId]);\n\n    const loadLandUseChanges = async () => {\n        setLoading(true);\n        setError(null);\n\n        try {\n            const response = await api.get(`/land-use-changes/?schlag=${schlagId}`);\n            setLandUseChanges(response.data.results || response.data || []);\n        } catch (err) {\n            console.error('Error loading land use changes:', err);\n            setError('Fehler beim Laden der Landnutzungsänderungen: ' + err.message);\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const handleFormChange = (field, value) => {\n        setFormData(prev => ({\n            ...prev,\n            [field]: value\n        }));\n    };\n\n    const resetForm = () => {\n        setFormData({\n            schlag: schlagId,\n            land_use: '',\n            soil_work: '',\n            carbon_input: '',\n            since_year: new Date().getFullYear(),\n            area: ''\n        });\n        setEditingEntry(null);\n        setShowAddForm(false);\n    };\n\n    const handleAdd = (e) => {\n        if (e) {\n            e.preventDefault();\n            e.stopPropagation();\n        }\n        console.log('handleAdd called, current showAddForm:', showAddForm); // Debug log\n        setShowAddForm(true);\n        setEditingEntry(null);\n        // Don't call resetForm here as it sets showAddForm to false\n        setFormData({\n            schlag: schlagId,\n            land_use: '',\n            soil_work: '',\n            carbon_input: '',\n            since_year: new Date().getFullYear(),\n            area: schlagFlaecheBrutto || ''\n        });\n        console.log('After setState, showAddForm should be true');\n    };\n\n    const handleEdit = (entry) => {\n        setEditingEntry(entry);\n        setFormData({\n            schlag: schlagId,\n            land_use: entry.land_use,\n            soil_work: entry.soil_work,\n            carbon_input: entry.carbon_input,\n            since_year: entry.since_year,\n            area: entry.area\n        });\n        setShowAddForm(true);\n    };\n\n    const handleSave = async () => {\n        setSaving(true);\n        setError(null);\n        setSuccess(null);\n\n        try {\n            if (editingEntry) {\n                // Update existing entry\n                await api.put(`/land-use-changes/${editingEntry.id}/`, formData);\n                setSuccess('Landnutzungsänderung erfolgreich aktualisiert!');\n            } else {\n                // Create new entry\n                await api.post('/land-use-changes/', formData);\n                setSuccess('Landnutzungsänderung erfolgreich hinzugefügt!');\n            }\n\n            setTimeout(() => setSuccess(null), 3000);\n            resetForm();\n            await loadLandUseChanges();\n\n            if (onUpdate) {\n                onUpdate();\n            }\n        } catch (err) {\n            console.error('Error saving land use change:', err);\n            console.error('Error response data:', err.response?.data);\n\n            // Extract error messages from response\n            let errorMessage = '';\n            if (err.response?.data) {\n                const data = err.response.data;\n                if (typeof data === 'string') {\n                    errorMessage = data;\n                } else if (data.non_field_errors) {\n                    errorMessage = data.non_field_errors.join(', ');\n                } else if (data.detail) {\n                    errorMessage = data.detail;\n                } else {\n                    // Collect all field errors\n                    const fieldErrors = Object.entries(data).map(([field, errors]) => {\n                        const errorList = Array.isArray(errors) ? errors : [errors];\n                        return `${field}: ${errorList.join(', ')}`;\n                    });\n                    errorMessage = fieldErrors.join('; ');\n                }\n            } else {\n                errorMessage = err.message;\n            }\n\n            setError('Fehler beim Speichern: ' + errorMessage);\n        } finally {\n            setSaving(false);\n        }\n    };\n\n    const handleDelete = async (id) => {\n        if (!window.confirm('Möchten Sie diese Landnutzungsänderung wirklich löschen?')) {\n            return;\n        }\n\n        setSaving(true);\n        setError(null);\n\n        try {\n            await api.delete(`/land-use-changes/${id}/`);\n            setSuccess('Landnutzungsänderung erfolgreich gelöscht!');\n            setTimeout(() => setSuccess(null), 3000);\n            await loadLandUseChanges();\n\n            if (onUpdate) {\n                onUpdate();\n            }\n        } catch (err) {\n            console.error('Error deleting land use change:', err);\n            setError('Fehler beim Löschen: ' + (err.response?.data?.detail || err.message));\n        } finally {\n            setSaving(false);\n        }\n    };\n\n    // Get year range for the last 20 years\n    const currentYear = new Date().getFullYear();\n    const yearOptions = [];\n    for (let i = 0; i < 20; i++) {\n        yearOptions.push(currentYear - i);\n    }\n\n    return (\n        <div>\n            {error && <Alert variant=\"danger\" dismissible onClose={() => setError(null)}>{error}</Alert>}\n            {success && <Alert variant=\"success\" dismissible onClose={() => setSuccess(null)}>{success}</Alert>}\n\n            {loading ? (\n                <div className=\"text-center py-4\">\n                    <Spinner animation=\"border\" />\n                    <p className=\"mt-2 text-muted\">Lade Landnutzungsänderungen...</p>\n                </div>\n            ) : (\n                <>\n                    {/* Existing Land Use Changes */}\n                    {landUseChanges.length > 0 && (\n                        <Card className=\"mb-3\">\n                            <Card.Header>\n                                <i className=\"bi bi-list-check me-2\"></i>\n                                Vorhandene Landnutzungsänderungen\n                                <Badge bg=\"primary\" className=\"ms-2\">{landUseChanges.length}</Badge>\n                            </Card.Header>\n                            <Card.Body className=\"p-0\">\n                                <Table responsive striped hover>\n                                    <thead>\n                                        <tr>\n                                            <th>Jahr</th>\n                                            <th>Landnutzung</th>\n                                            <th>Bodenbearbeitung</th>\n                                            <th>Kohlenstoffeintrag</th>\n                                            <th>Fläche (ha)</th>\n                                            <th>Aktionen</th>\n                                        </tr>\n                                    </thead>\n                                    <tbody>\n                                        {landUseChanges.map(entry => (\n                                            <tr key={entry.id}>\n                                                <td><strong>{entry.since_year}</strong></td>\n                                                <td>{entry.land_use_display}</td>\n                                                <td>{entry.soil_work_display}</td>\n                                                <td>{entry.carbon_input_display}</td>\n                                                <td>{entry.area}</td>\n                                                <td>\n                                                    <Button\n                                                        variant=\"outline-primary\"\n                                                        size=\"sm\"\n                                                        className=\"me-2\"\n                                                        onClick={() => handleEdit(entry)}\n                                                        disabled={saving}\n                                                    >\n                                                        <i className=\"bi bi-pencil\"></i>\n                                                    </Button>\n                                                    <Button\n                                                        variant=\"outline-danger\"\n                                                        size=\"sm\"\n                                                        onClick={() => handleDelete(entry.id)}\n                                                        disabled={saving}\n                                                    >\n                                                        <i className=\"bi bi-trash\"></i>\n                                                    </Button>\n                                                </td>\n                                            </tr>\n                                        ))}\n                                    </tbody>\n                                </Table>\n                            </Card.Body>\n                        </Card>\n                    )}\n\n                    {/* Add/Edit Form */}\n                    {showAddForm ? (\n                        <Card>\n                            <Card.Header>\n                                <i className={`bi ${editingEntry ? 'bi-pencil-square' : 'bi-plus-square'} me-2`}></i>\n                                {editingEntry ? 'Landnutzungsänderung bearbeiten' : 'Neue Landnutzungsänderung hinzufügen'}\n                                <Button\n                                    variant=\"outline-secondary\"\n                                    size=\"sm\"\n                                    className=\"float-end\"\n                                    onClick={resetForm}\n                                    disabled={saving}\n                                >\n                                    Abbrechen\n                                </Button>\n                            </Card.Header>\n                            <Card.Body>\n                                <Row>\n                                    <Col md={6}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Jahr <span className=\"text-danger\">*</span></Form.Label>\n                                            <Form.Select\n                                                value={formData.since_year}\n                                                onChange={(e) => handleFormChange('since_year', parseInt(e.target.value))}\n                                                required\n                                            >\n                                                <option value=\"\">Bitte wählen...</option>\n                                                {yearOptions.map(year => (\n                                                    <option key={year} value={year}>{year}</option>\n                                                ))}\n                                            </Form.Select>\n                                            <Form.Text className=\"text-muted\">\n                                                Wählen Sie das Jahr, ab dem diese Landnutzung gilt\n                                            </Form.Text>\n                                        </Form.Group>\n                                    </Col>\n                                    <Col md={6}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Fläche (ha) <span className=\"text-danger\">*</span></Form.Label>\n                                            <Form.Control\n                                                type=\"number\"\n                                                step=\"0.0001\"\n                                                value={formData.area}\n                                                onChange={(e) => handleFormChange('area', e.target.value)}\n                                                placeholder=\"z.B. 10.5\"\n                                                required\n                                            />\n                                        </Form.Group>\n                                    </Col>\n                                </Row>\n                                <Row>\n                                    <Col md={4}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Landnutzung <span className=\"text-danger\">*</span></Form.Label>\n                                            <Form.Select\n                                                value={formData.land_use}\n                                                onChange={(e) => handleFormChange('land_use', e.target.value)}\n                                                required\n                                            >\n                                                <option value=\"\">Bitte wählen...</option>\n                                                {landUseChoices.map(choice => (\n                                                    <option key={choice.value} value={choice.value}>\n                                                        {choice.label}\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </Form.Group>\n                                    </Col>\n                                    <Col md={4}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Bodenbearbeitung <span className=\"text-danger\">*</span></Form.Label>\n                                            <Form.Select\n                                                value={formData.soil_work}\n                                                onChange={(e) => handleFormChange('soil_work', e.target.value)}\n                                                required\n                                            >\n                                                <option value=\"\">Bitte wählen...</option>\n                                                {soilWorkChoices.map(choice => (\n                                                    <option key={choice.value} value={choice.value}>\n                                                        {choice.label}\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </Form.Group>\n                                    </Col>\n                                    <Col md={4}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Kohlenstoffeintrag <span className=\"text-danger\">*</span></Form.Label>\n                                            <Form.Select\n                                                value={formData.carbon_input}\n                                                onChange={(e) => handleFormChange('carbon_input', e.target.value)}\n                                                required\n                                            >\n                                                <option value=\"\">Bitte wählen...</option>\n                                                {carbonInputChoices.map(choice => (\n                                                    <option key={choice.value} value={choice.value}>\n                                                        {choice.label}\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </Form.Group>\n                                    </Col>\n                                </Row>\n                                <div className=\"d-flex justify-content-end\">\n                                    <Button\n                                        variant=\"success\"\n                                        onClick={handleSave}\n                                        disabled={saving || !formData.land_use || !formData.soil_work || !formData.carbon_input || !formData.since_year || !formData.area}\n                                    >\n                                        {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n                                        {editingEntry ? 'Aktualisieren' : 'Hinzufügen'}\n                                    </Button>\n                                </div>\n                            </Card.Body>\n                        </Card>\n                    ) : (\n                        <div className=\"text-center py-4\">\n                            <Button variant=\"primary\" onClick={handleAdd}>\n                                <i className=\"bi bi-plus-square me-2\"></i>\n                                Neue Landnutzungsänderung hinzufügen\n                            </Button>\n                            {landUseChanges.length === 0 && (\n                                <p className=\"text-muted mt-3\">\n                                    <i className=\"bi bi-info-circle me-1\"></i>\n                                    Noch keine Landnutzungsänderungen erfasst\n                                </p>\n                            )}\n                        </div>\n                    )}\n                </>\n            )}\n        </div>\n    );\n};\n\nexport default LandUseChangeManager;\n","import React, { useState, useEffect } from 'react';\nimport {\n    Modal, Button, Form, Row, Col, Card, Alert, Spinner, Badge,\n    Accordion, InputGroup, Nav, Tab, Table\n} from 'react-bootstrap';\nimport api from '../../utils/api';\nimport LandUseChangeManager from './LandUseChangeManager';\n\nconst FarmingInfoModal = ({ show, onHide, selectedArea, farmYear, editMode = false, onUpdate }) => {\n    const [activeTab, setActiveTab] = useState('general');\n    const [loading, setLoading] = useState(false);\n    const [saving, setSaving] = useState(false);\n    const [error, setError] = useState(null);\n    const [success, setSuccess] = useState(null);\n\n    // Form state\n    const [farmingInfo, setFarmingInfo] = useState({\n        type_of_farming: '',\n        main_crop_id: '',\n        feldstueck_id: null,\n        schlag_id: null\n    });\n\n    // Area name editing\n    const [areaName, setAreaName] = useState('');\n    const [editingAreaName, setEditingAreaName] = useState(false);\n\n    // Area selection for new operations\n    const [selectedAreaForOperation, setSelectedAreaForOperation] = useState(null);\n    const [showAreaSelection, setShowAreaSelection] = useState(false);\n\n    // Track if we're editing an existing operation\n    const [editingOperation, setEditingOperation] = useState(null);\n    const [isEditingMode, setIsEditingMode] = useState(false);\n\n    const [newOperation, setNewOperation] = useState({\n        date: new Date().toISOString().split('T')[0],\n        area_ha: selectedArea?.area_ha || 0,\n        fuel_type_id: '',\n        operation_type_id: '',\n        notes: '',\n        // Conditional operation data\n        soil_work_data: {\n            soil_work_type_id: '',\n            depth: 'SHALLOW'\n        },\n        seeding_data: {\n            seed_amount: '',\n            seed_unit_id: '',\n            crop_id: ''\n        },\n        fertilizing_data: {\n            specific_product_id: '',\n            organic_fertilizer_type_id: '',\n            nitrogen_percent: '',\n            phosphorus_percent: '',\n            potassium_percent: '',\n            amount: '',\n            unit_id: ''\n        },\n        pest_control_data: {\n            specific_product_id: '',\n            herbicide_content_gl: '',\n            fungicide_content_gl: '',\n            insecticide_content_gl: '',\n            amount: '',\n            unit_id: ''\n        },\n        harvest_data: {\n            harvest_amount: '',\n            harvest_unit_id: '',\n            crop_id: '',\n            moisture_percent: '',\n            quality_grade: ''\n        },\n        irrigation_data: {\n            irrigation_type_id: '',\n            irrigation_amount: '',\n            irrigation_unit_id: ''\n        }\n    });\n\n    // Options data from API\n    const [options, setOptions] = useState({\n        crops: [],\n        fuel_types: [],\n        operation_types: [],\n        soil_work_types: [],\n        units: [],\n        fertilizer_products: [],\n        organic_fertilizer_types: [],\n        pesticide_products: []\n    });\n\n    // Current farming info and operations\n    const [existingFarmingInfo, setExistingFarmingInfo] = useState(null);\n    const [existingOperations, setExistingOperations] = useState([]);\n    const [farmDefaultTypeOfFarming, setFarmDefaultTypeOfFarming] = useState('');\n\n    // Toast notification function (simple implementation without Bootstrap JS)\n    const showToast = (message, type = 'success') => {\n        // Create toast container if it doesn't exist\n        const toastContainer = document.getElementById('toast-container') || createToastContainer();\n\n        const toast = document.createElement('div');\n        toast.className = `alert alert-${type === 'success' ? 'success' : 'danger'} alert-dismissible fade show`;\n        toast.style.cssText = `\n            margin-bottom: 0.5rem;\n            animation: slideIn 0.3s ease-out;\n        `;\n        toast.setAttribute('role', 'alert');\n\n        // Create toast content\n        const toastContent = document.createElement('div');\n        toastContent.className = 'd-flex align-items-center';\n\n        const icon = document.createElement('i');\n        icon.className = `bi ${type === 'success' ? 'bi-check-circle' : 'bi-exclamation-circle'} me-2`;\n\n        const messageSpan = document.createElement('span');\n        messageSpan.textContent = message;\n\n        const closeButton = document.createElement('button');\n        closeButton.type = 'button';\n        closeButton.className = 'btn-close ms-auto';\n        closeButton.setAttribute('aria-label', 'Close');\n\n        // Add proper close functionality\n        closeButton.addEventListener('click', () => {\n            toast.style.animation = 'slideOut 0.3s ease-in';\n            setTimeout(() => {\n                if (toast.parentNode) {\n                    toast.remove();\n                }\n            }, 300);\n        });\n\n        toastContent.appendChild(icon);\n        toastContent.appendChild(messageSpan);\n        toastContent.appendChild(closeButton);\n        toast.appendChild(toastContent);\n\n        toastContainer.appendChild(toast);\n\n        // Auto-remove after 3 seconds\n        setTimeout(() => {\n            if (toast.parentNode) {\n                toast.style.animation = 'slideOut 0.3s ease-in';\n                setTimeout(() => {\n                    if (toast.parentNode) {\n                        toast.remove();\n                    }\n                }, 300);\n            }\n        }, 3000);\n    };\n\n    const createToastContainer = () => {\n        const container = document.createElement('div');\n        container.id = 'toast-container';\n        container.className = 'position-fixed top-0 end-0 p-3';\n        container.style.zIndex = '9999';\n        container.style.minWidth = '300px';\n\n        // Add CSS animations if not already present\n        if (!document.getElementById('toast-animations')) {\n            const style = document.createElement('style');\n            style.id = 'toast-animations';\n            style.textContent = `\n                @keyframes slideIn {\n                    from { transform: translateX(100%); opacity: 0; }\n                    to { transform: translateX(0); opacity: 1; }\n                }\n                @keyframes slideOut {\n                    from { transform: translateX(0); opacity: 1; }\n                    to { transform: translateX(100%); opacity: 0; }\n                }\n            `;\n            document.head.appendChild(style);\n        }\n\n        document.body.appendChild(container);\n        return container;\n    };\n\n    // Load options and existing data when modal opens\n    useEffect(() => {\n        if (show && selectedArea) {\n            // Handle area selection mode for new operations\n            if (selectedArea.type === 'selection') {\n                setShowAreaSelection(true);\n                setActiveTab('operations'); // Switch to operations tab for new operation creation\n            } else {\n                setShowAreaSelection(false);\n                setSelectedAreaForOperation(selectedArea);\n            }\n\n            loadData();\n\n            // Set initial area name\n            if (selectedArea.type === 'feldstueck') {\n                setAreaName(selectedArea.feldstueck_bezeichnung || selectedArea.bezeichnung || '');\n            } else if (selectedArea.type === 'schlag') {\n                setAreaName(`Schlag ${selectedArea.nummer}`);\n            }\n        }\n    }, [show, selectedArea]);\n\n    const loadData = async () => {\n        setLoading(true);\n        setError(null);\n\n        try {\n            // Load farming options\n            const optionsResponse = await api.get('/farming-options/');\n            setOptions(optionsResponse.data);\n\n            // Set area-specific data - skip for area selection mode\n            if (selectedArea.type !== 'selection') {\n                if (selectedArea.type === 'schlag') {\n                    setFarmingInfo(prev => ({\n                        ...prev,\n                        schlag_id: selectedArea.id,\n                        feldstueck_id: null\n                    }));\n                } else if (selectedArea.type === 'feldstueck') {\n                    setFarmingInfo(prev => ({\n                        ...prev,\n                        feldstueck_id: selectedArea.id,\n                        schlag_id: null\n                    }));\n                }\n\n                // Set default area in operation\n                setNewOperation(prev => ({\n                    ...prev,\n                    area_ha: selectedArea.area_ha || 0\n                }));\n            }\n\n            // Load existing farming info and farm defaults\n            await loadExistingFarmingInfo();\n\n        } catch (err) {\n            console.error('Error loading data:', err);\n            setError('Fehler beim Laden der Daten: ' + err.message);\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const loadExistingFarmingInfo = async () => {\n        // Skip loading existing info for area selection mode\n        if (selectedArea.type === 'selection') return;\n\n        try {\n            const queryParams = selectedArea.type === 'schlag' \n                ? `schlag=${selectedArea.id}`\n                : `feldstueck=${selectedArea.id}`;\n\n            const response = await api.get(`/farming-info/?${queryParams}`);\n\n            if (response.data.results && response.data.results.length > 0) {\n                const existing = response.data.results[0];\n                setExistingFarmingInfo(existing);\n\n                // Store farm's default type_of_farming for display\n                if (existing.farm_default_type_of_farming) {\n                    setFarmDefaultTypeOfFarming(existing.farm_default_type_of_farming);\n                }\n\n                // If existing farming info has no type_of_farming set, use farm default\n                const typeOfFarming = existing.type_of_farming || existing.farm_default_type_of_farming || '';\n\n                setFarmingInfo({\n                    type_of_farming: typeOfFarming,\n                    main_crop_id: existing.main_crop?.id || '',\n                    feldstueck_id: existing.feldstueck?.id || null,\n                    schlag_id: existing.schlag?.id || null\n                });\n\n                // Load operations for this farming info\n                const opsResponse = await api.get(`/operations/?farming_info=${existing.id}`);\n                let operations = opsResponse.data.results || [];\n\n                // If editing specific operation, set up edit mode\n                if (selectedArea.editingOperationId) {\n                    const operationToEdit = operations.find(op => op.id === selectedArea.editingOperationId);\n                    if (operationToEdit) {\n                        setEditingOperation(operationToEdit);\n                        setIsEditingMode(true);\n                        loadOperationForEditing(operationToEdit);\n                        setActiveTab('operations'); // Switch to operations tab for editing\n                    }\n                    // Still show all operations for context\n                    setExistingOperations(operations);\n                } else {\n                    setExistingOperations(operations);\n                }\n            } else {\n                // No existing farming info found - load farm's default type_of_farming\n                await loadFarmDefault();\n            }\n        } catch (err) {\n            console.log('No existing farming info found (this is normal for new areas)');\n            // Still try to load farm default even if farming info query failed\n            await loadFarmDefault();\n        }\n    };\n\n    const loadFarmDefault = async () => {\n        // Load farm's default type_of_farming when no existing farming info exists\n        try {\n            let farmDefault = null;\n            let feldstueckResponse = null;\n\n            if (selectedArea.type === 'schlag') {\n                // For schlag, we need to get the farm through feldstueck -> farm_year -> farm\n                feldstueckResponse = await api.get(`/feldstuecke/${selectedArea.feldstueck_id || selectedArea.feldstueck?.id}/`);\n                farmDefault = feldstueckResponse.data.farm_year?.farm?.type_of_farming;\n            } else if (selectedArea.type === 'feldstueck') {\n                // For feldstueck, we can get the farm directly from the response\n                feldstueckResponse = await api.get(`/feldstuecke/${selectedArea.id}/`);\n                farmDefault = feldstueckResponse.data.farm_year?.farm?.type_of_farming;\n            }\n\n            console.log('Loaded farm default:', farmDefault);\n            console.log('Selected area:', selectedArea);\n            console.log('Feldstueck response:', feldstueckResponse?.data);\n\n            if (farmDefault) {\n                console.log('Setting farm default type_of_farming:', farmDefault);\n                setFarmDefaultTypeOfFarming(farmDefault);\n                setFarmingInfo(prev => ({\n                    ...prev,\n                    type_of_farming: farmDefault\n                }));\n            } else {\n                console.log('No farm default found');\n            }\n        } catch (err) {\n            console.log('Could not load farm default type_of_farming:', err);\n        }\n    };\n\n    const loadOperationForEditing = (operation) => {\n        // Load the operation data into the form for editing\n        setNewOperation({\n            date: operation.date || new Date().toISOString().split('T')[0],\n            area_ha: operation.area_ha || 0,\n            fuel_type_id: operation.fuel_type?.id || '',\n            operation_type_id: operation.operation_type?.id || '',\n            notes: operation.notes || '',\n            // Load conditional data with existing values\n            soil_work_data: {\n                soil_work_type_id: operation.soil_work_data?.soil_work_type?.id || operation.soil_work_data?.soil_work_type_id || '',\n                depth: operation.soil_work_data?.depth || 'SHALLOW'\n            },\n            seeding_data: {\n                seed_amount: operation.seeding_data?.seed_amount || '',\n                seed_unit_id: operation.seeding_data?.seed_unit?.id || operation.seeding_data?.seed_unit_id || '',\n                crop_id: operation.seeding_data?.crop?.id || operation.seeding_data?.crop_id || ''\n            },\n            fertilizing_data: {\n                specific_product_id: operation.fertilizing_data?.specific_product?.id || operation.fertilizing_data?.specific_product_id || '',\n                organic_fertilizer_type_id: operation.fertilizing_data?.organic_fertilizer_type?.id || operation.fertilizing_data?.organic_fertilizer_type_id || '',\n                nitrogen_percent: operation.fertilizing_data?.nitrogen_percent || '',\n                phosphorus_percent: operation.fertilizing_data?.phosphorus_percent || '',\n                potassium_percent: operation.fertilizing_data?.potassium_percent || '',\n                amount: operation.fertilizing_data?.amount || '',\n                unit_id: operation.fertilizing_data?.unit?.id || operation.fertilizing_data?.unit_id || ''\n            },\n            pest_control_data: {\n                specific_product_id: operation.pest_control_data?.specific_product?.id || operation.pest_control_data?.specific_product_id || '',\n                herbicide_content_gl: operation.pest_control_data?.herbicide_content_gl || '',\n                fungicide_content_gl: operation.pest_control_data?.fungicide_content_gl || '',\n                insecticide_content_gl: operation.pest_control_data?.insecticide_content_gl || '',\n                amount: operation.pest_control_data?.amount || '',\n                unit_id: operation.pest_control_data?.unit?.id || operation.pest_control_data?.unit_id || ''\n            },\n            harvest_data: {\n                harvest_amount: operation.harvest_data?.harvest_amount || '',\n                harvest_unit_id: operation.harvest_data?.harvest_unit?.id || operation.harvest_data?.harvest_unit_id || '',\n                crop_id: operation.harvest_data?.crop?.id || operation.harvest_data?.crop_id || '',\n                moisture_percent: operation.harvest_data?.moisture_percent || '',\n                quality_grade: operation.harvest_data?.quality_grade || ''\n            },\n            irrigation_data: {\n                irrigation_type_id: operation.irrigation_data?.irrigation_type?.id || operation.irrigation_data?.irrigation_type_id || '',\n                irrigation_amount: operation.irrigation_data?.irrigation_amount || '',\n                irrigation_unit_id: operation.irrigation_data?.irrigation_unit?.id || operation.irrigation_data?.irrigation_unit_id || ''\n            }\n        });\n    };\n\n    const handleAreaSelection = (area) => {\n        setSelectedAreaForOperation(area);\n        setShowAreaSelection(false);\n\n        // Update farming info for selected area\n        if (area.type === 'schlag') {\n            setFarmingInfo(prev => ({\n                ...prev,\n                schlag_id: area.data.id,\n                feldstueck_id: null\n            }));\n        } else if (area.type === 'feldstueck') {\n            setFarmingInfo(prev => ({\n                ...prev,\n                feldstueck_id: area.data.id,\n                schlag_id: null\n            }));\n        }\n\n        // Set area in operation\n        setNewOperation(prev => ({\n            ...prev,\n            area_ha: area.area_ha || 0\n        }));\n\n        // Load existing farming info for this area\n        const tempSelectedArea = {\n            type: area.type,\n            id: area.id,\n            ...area.data\n        };\n\n        (async () => {\n            try {\n                const queryParams = area.type === 'schlag' \n                    ? `schlag=${area.id}`\n                    : `feldstueck=${area.id}`;\n\n                const response = await api.get(`/farming-info/?${queryParams}`);\n\n                if (response.data.results && response.data.results.length > 0) {\n                    const existing = response.data.results[0];\n                    setExistingFarmingInfo(existing);\n                    setFarmingInfo({\n                        type_of_farming: existing.type_of_farming || '',\n                        main_crop_id: existing.main_crop?.id || '',\n                        feldstueck_id: existing.feldstueck?.id || null,\n                        schlag_id: existing.schlag?.id || null\n                    });\n                } else {\n                    // No existing farming info, use area data to set up new one\n                    setExistingFarmingInfo(null);\n\n                    // For new farming info, try to get farm's default type_of_farming\n                    // We can get this from the farm via the area's relationship\n                    if (area.type === 'schlag' && area.data?.feldstueck?.farm_year?.farm?.type_of_farming) {\n                        const farmDefault = area.data.feldstueck.farm_year.farm.type_of_farming;\n                        setFarmDefaultTypeOfFarming(farmDefault);\n                        setFarmingInfo(prev => ({\n                            ...prev,\n                            type_of_farming: farmDefault\n                        }));\n                    } else if (area.type === 'feldstueck' && area.data?.farm_year?.farm?.type_of_farming) {\n                        const farmDefault = area.data.farm_year.farm.type_of_farming;\n                        setFarmDefaultTypeOfFarming(farmDefault);\n                        setFarmingInfo(prev => ({\n                            ...prev,\n                            type_of_farming: farmDefault\n                        }));\n                    }\n                }\n            } catch (err) {\n                console.log('No existing farming info found for selected area');\n                setExistingFarmingInfo(null);\n            }\n        })();\n    };\n\n    const handleFarmingInfoChange = (field, value) => {\n        setFarmingInfo(prev => ({\n            ...prev,\n            [field]: value\n        }));\n    };\n\n    const handleOperationChange = (field, value) => {\n        setNewOperation(prev => ({\n            ...prev,\n            [field]: value\n        }));\n    };\n\n    const handleConditionalDataChange = (operationType, field, value) => {\n        setNewOperation(prev => ({\n            ...prev,\n            [operationType]: {\n                ...prev[operationType],\n                [field]: value\n            }\n        }));\n    };\n\n    const getOperationTypeCode = () => {\n        const selectedOpType = options.operation_types.find(ot => ot.id == newOperation.operation_type_id);\n        return selectedOpType?.code || '';\n    };\n\n    const saveFarmingInfo = async () => {\n        setSaving(true);\n        setError(null);\n\n        try {\n            let farmingInfoResponse;\n\n            if (existingFarmingInfo) {\n                // Update existing\n                farmingInfoResponse = await api.patch(`/farming-info/${existingFarmingInfo.id}/`, farmingInfo);\n            } else {\n                // Create new\n                farmingInfoResponse = await api.post('/farming-info/', farmingInfo);\n                setExistingFarmingInfo(farmingInfoResponse.data);\n            }\n\n            setSuccess('Bewirtschaftungsinformationen erfolgreich gespeichert!');\n            setTimeout(() => setSuccess(null), 3000);\n\n            // Notify parent component of update if provided\n            if (onUpdate) {\n                onUpdate();\n            }\n\n        } catch (err) {\n            console.error('Error saving farming info:', err);\n            setError('Fehler beim Speichern: ' + (err.response?.data?.detail || err.message));\n        } finally {\n            setSaving(false);\n        }\n    };\n\n    const saveAreaName = async () => {\n        if (!editingAreaName || !areaName.trim()) return;\n\n        setSaving(true);\n        setError(null);\n\n        try {\n            let endpoint, data;\n\n            if (selectedArea.type === 'feldstueck') {\n                endpoint = `/feldstuecke/${selectedArea.id}/`;\n                data = { bezeichnung: areaName.trim() };\n            } else if (selectedArea.type === 'schlag') {\n                // Note: Schläge typically don't have editable names, but we can handle this case\n                setError('Schlag-Namen können derzeit nicht bearbeitet werden.');\n                return;\n            }\n\n            await api.patch(endpoint, data);\n            setEditingAreaName(false);\n            setSuccess('Name erfolgreich aktualisiert!');\n            setTimeout(() => setSuccess(null), 3000);\n\n            // Notify parent component of update if provided\n            if (onUpdate) {\n                onUpdate();\n            }\n\n        } catch (err) {\n            console.error('Error saving area name:', err);\n            setError('Fehler beim Speichern des Namens: ' + (err.response?.data?.detail || err.message));\n        } finally {\n            setSaving(false);\n        }\n    };\n\n    const saveOperation = async () => {\n        if (!existingFarmingInfo) {\n            setError('Bitte speichern Sie zuerst die allgemeinen Informationen.');\n            return;\n        }\n\n        setSaving(true);\n        setError(null);\n\n        try {\n            const operationData = {\n                ...newOperation,\n                farming_info_id: existingFarmingInfo.id\n            };\n\n            // Add conditional data based on operation type\n            const opTypeCode = getOperationTypeCode();\n\n            if (opTypeCode === 'SOIL_WORK' && newOperation.soil_work_data.soil_work_type_id) {\n                operationData.soil_work_data = newOperation.soil_work_data;\n            } else if (opTypeCode.includes('SEEDING') && newOperation.seeding_data.seed_unit_id) {\n                operationData.seeding_data = newOperation.seeding_data;\n            } else if (opTypeCode === 'FERTILIZING' && newOperation.fertilizing_data.unit_id) {\n                operationData.fertilizing_data = newOperation.fertilizing_data;\n            } else if (opTypeCode === 'PEST_CONTROL' && newOperation.pest_control_data.unit_id) {\n                operationData.pest_control_data = newOperation.pest_control_data;\n            } else if (opTypeCode === 'HARVEST' && newOperation.harvest_data.harvest_unit_id) {\n                operationData.harvest_data = newOperation.harvest_data;\n            } else if (opTypeCode === 'IRRIGATION' && newOperation.irrigation_data.irrigation_type_id && newOperation.irrigation_data.irrigation_unit_id) {\n                operationData.irrigation_data = newOperation.irrigation_data;\n            }\n\n            if (isEditingMode && editingOperation) {\n                // Update existing operation\n                await api.patch(`/operations/${editingOperation.id}/`, operationData);\n\n                // For focused editing mode, show toast and close modal\n                if (selectedArea.editingOperationId) {\n                    // Show toast notification\n                    showToast('Maßnahme erfolgreich aktualisiert!', 'success');\n\n                    // Notify parent component of update if provided\n                    if (onUpdate) {\n                        onUpdate();\n                    }\n                    onHide();\n                    return; // Exit early\n                } else {\n                    // Clear editing mode for normal modal view\n                    setIsEditingMode(false);\n                    setEditingOperation(null);\n                    resetOperationForm();\n                    setSuccess('Maßnahme erfolgreich aktualisiert!');\n                    setTimeout(() => setSuccess(null), 3000);\n                }\n            } else {\n                // Create new operation\n                await api.post('/operations/', operationData);\n                setSuccess('Maßnahme erfolgreich hinzugefügt!');\n                setTimeout(() => setSuccess(null), 3000);\n                resetOperationForm();\n            }\n\n            // Only reload operations if not in focused editing mode\n            if (!selectedArea.editingOperationId) {\n                await loadExistingFarmingInfo();\n            }\n\n            // Notify parent component of update if provided\n            if (onUpdate) {\n                onUpdate();\n            }\n\n        } catch (err) {\n            console.error('Error saving operation:', err);\n            setError('Fehler beim Speichern der Maßnahme: ' + (err.response?.data?.detail || err.message));\n        } finally {\n            setSaving(false);\n        }\n    };\n\n    const resetOperationForm = () => {\n        setNewOperation({\n            date: new Date().toISOString().split('T')[0],\n            area_ha: selectedArea?.area_ha || 0,\n            fuel_type_id: '',\n            operation_type_id: '',\n            notes: '',\n            soil_work_data: { soil_work_type_id: '', depth: 'SHALLOW' },\n            seeding_data: { seed_amount: '', seed_unit_id: '', crop_id: '' },\n            fertilizing_data: { specific_product_id: '', organic_fertilizer_type_id: '', nitrogen_percent: '', phosphorus_percent: '', potassium_percent: '', amount: '', unit_id: '' },\n            pest_control_data: { specific_product_id: '', herbicide_content_gl: '', fungicide_content_gl: '', insecticide_content_gl: '', amount: '', unit_id: '' },\n            harvest_data: { harvest_amount: '', harvest_unit_id: '', crop_id: '', moisture_percent: '', quality_grade: '' },\n            irrigation_data: { irrigation_type_id: '', irrigation_amount: '', irrigation_unit_id: '' }\n        });\n    };\n\n    const cancelEdit = () => {\n        // If we're in focused editing mode (came from operations list), close the modal entirely\n        if (selectedArea.editingOperationId) {\n            onHide();\n            return;\n        }\n\n        // Otherwise, just exit editing mode and return to normal modal view\n        setIsEditingMode(false);\n        setEditingOperation(null);\n        resetOperationForm();\n    };\n\n    // Get proper display name for header\n    const getHeaderDisplayName = () => {\n        if (showAreaSelection) {\n            return 'Bereich auswählen';\n        }\n\n        const area = selectedAreaForOperation || selectedArea;\n        if (!area) return 'Unbekannt';\n\n        if (area.type === 'schlag') {\n            // Always show feldstück info for schläge\n            const feldstueckInfo = area.feldstueck || (area.data && area.data.feldstueck) || area;\n            const feldstueckName = feldstueckInfo?.bezeichnung || feldstueckInfo?.feldstueck_bezeichnung || `Feldstück #${feldstueckInfo?.nummer}`;\n            const schlagName = area.bezeichnung || area.name || `Schlag #${area.nummer}`;\n            return `${feldstueckName} / ${schlagName}`;\n        } else if (area.type === 'feldstueck') {\n            const feldstueckName = area.feldstueck_bezeichnung || area.bezeichnung || `Feldstück #${area.nummer}`;\n            return feldstueckName;\n        }\n\n        return 'Unbekannt';\n    };\n\n    const renderConditionalFields = () => {\n        const opTypeCode = getOperationTypeCode();\n\n        switch (opTypeCode) {\n            case 'SOIL_WORK':\n                return (\n                    <Card className=\"mt-3\">\n                        <Card.Header>\n                            <i className=\"bi bi-tools me-2\"></i>\n                            Bodenbearbeitung Details\n                        </Card.Header>\n                        <Card.Body>\n                            <Row>\n                                <Col md={6}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Art der Bodenbearbeitung</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.soil_work_data.soil_work_type_id}\n                                            onChange={(e) => handleConditionalDataChange('soil_work_data', 'soil_work_type_id', e.target.value)}\n                                        >\n                                            <option value=\"\">Bitte wählen...</option>\n                                            {options.soil_work_types.map(type => (\n                                                <option key={type.id} value={type.id}>\n                                                    {type.name}\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                                <Col md={6}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Tiefe</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.soil_work_data.depth}\n                                            onChange={(e) => handleConditionalDataChange('soil_work_data', 'depth', e.target.value)}\n                                        >\n                                            <option value=\"SHALLOW\">Seicht</option>\n                                            <option value=\"DEEP\">Tief</option>\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                        </Card.Body>\n                    </Card>\n                );\n\n            case 'SEEDING_MAIN':\n            case 'SEEDING_CATCH':\n                return (\n                    <Card className=\"mt-3\">\n                        <Card.Header>\n                            <i className=\"bi bi-seed me-2\"></i>\n                            Aussaat Details\n                        </Card.Header>\n                        <Card.Body>\n                            <Row>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Saatgutmenge</Form.Label>\n                                        <Form.Control\n                                            type=\"number\"\n                                            step=\"0.01\"\n                                            value={newOperation.seeding_data.seed_amount}\n                                            onChange={(e) => handleConditionalDataChange('seeding_data', 'seed_amount', e.target.value)}\n                                        />\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Einheit</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.seeding_data.seed_unit_id}\n                                            onChange={(e) => handleConditionalDataChange('seeding_data', 'seed_unit_id', e.target.value)}\n                                        >\n                                            <option value=\"\">Bitte wählen...</option>\n                                            {options.units.filter(u => u.category === 'WEIGHT').map(unit => (\n                                                <option key={unit.id} value={unit.id}>\n                                                    {unit.name} ({unit.code})\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Kultur</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.seeding_data.crop_id}\n                                            onChange={(e) => handleConditionalDataChange('seeding_data', 'crop_id', e.target.value)}\n                                        >\n                                            <option value=\"\">Bitte wählen...</option>\n                                            {options.crops.filter(c => opTypeCode === 'SEEDING_MAIN' ? c.is_main_crop : c.is_catch_crop).map(crop => (\n                                                <option key={crop.id} value={crop.id}>\n                                                    {crop.name}\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                        </Card.Body>\n                    </Card>\n                );\n\n            case 'FERTILIZING':\n                const hasSpecificProduct = newOperation.fertilizing_data.specific_product_id;\n                const hasOrganicFertilizer = newOperation.fertilizing_data.organic_fertilizer_type_id;\n                const hasManualValues = newOperation.fertilizing_data.nitrogen_percent || \n                                       newOperation.fertilizing_data.phosphorus_percent || \n                                       newOperation.fertilizing_data.potassium_percent;\n\n                return (\n                    <Card className=\"mt-3\">\n                        <Card.Header>\n                            <i className=\"bi bi-droplet me-2\"></i>\n                            Düngung Details\n                        </Card.Header>\n                        <Card.Body>\n                            <Row>\n                                {!hasManualValues && !hasOrganicFertilizer && (\n                                    <Col md={hasSpecificProduct ? 12 : 6}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Spezifisches Produkt</Form.Label>\n                                            <Form.Select\n                                                value={newOperation.fertilizing_data.specific_product_id}\n                                                onChange={(e) => handleConditionalDataChange('fertilizing_data', 'specific_product_id', e.target.value)}\n                                            >\n                                                <option value=\"\">Kein spezifisches Produkt</option>\n                                                {options.fertilizer_products.map(product => (\n                                                    <option key={product.id} value={product.id}>\n                                                        {product.name}\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </Form.Group>\n                                    </Col>\n                                )}\n                                {!hasManualValues && !hasSpecificProduct && (\n                                    <Col md={hasOrganicFertilizer ? 12 : 6}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Organischer Dünger</Form.Label>\n                                            <Form.Select\n                                                value={newOperation.fertilizing_data.organic_fertilizer_type_id}\n                                                onChange={(e) => handleConditionalDataChange('fertilizing_data', 'organic_fertilizer_type_id', e.target.value)}\n                                            >\n                                                <option value=\"\">Kein organischer Dünger</option>\n                                                {options.organic_fertilizer_types.map(type => (\n                                                    <option key={type.id} value={type.id}>\n                                                        {type.name}\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </Form.Group>\n                                    </Col>\n                                )}\n                            </Row>\n                            <Row>\n                                {!hasSpecificProduct && !hasOrganicFertilizer && (\n                                    <>\n                                        <Col md={3}>\n                                            <Form.Group className=\"mb-3\">\n                                                <Form.Label>N-Gehalt (%)</Form.Label>\n                                                <Form.Control\n                                                    type=\"number\"\n                                                    step=\"0.1\"\n                                                    value={newOperation.fertilizing_data.nitrogen_percent}\n                                                    onChange={(e) => handleConditionalDataChange('fertilizing_data', 'nitrogen_percent', e.target.value)}\n                                                />\n                                            </Form.Group>\n                                        </Col>\n                                        <Col md={3}>\n                                            <Form.Group className=\"mb-3\">\n                                                <Form.Label>P-Gehalt (%)</Form.Label>\n                                                <Form.Control\n                                                    type=\"number\"\n                                                    step=\"0.1\"\n                                                    value={newOperation.fertilizing_data.phosphorus_percent}\n                                                    onChange={(e) => handleConditionalDataChange('fertilizing_data', 'phosphorus_percent', e.target.value)}\n                                                />\n                                            </Form.Group>\n                                        </Col>\n                                        <Col md={3}>\n                                            <Form.Group className=\"mb-3\">\n                                                <Form.Label>K-Gehalt (%)</Form.Label>\n                                                <Form.Control\n                                                    type=\"number\"\n                                                    step=\"0.1\"\n                                                    value={newOperation.fertilizing_data.potassium_percent}\n                                                    onChange={(e) => handleConditionalDataChange('fertilizing_data', 'potassium_percent', e.target.value)}\n                                                />\n                                            </Form.Group>\n                                        </Col>\n                                    </>\n                                )}\n                                <Col md={hasSpecificProduct || hasOrganicFertilizer ? 12 : 3}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Menge</Form.Label>\n                                        <InputGroup>\n                                            <Form.Control\n                                                type=\"number\"\n                                                step=\"0.01\"\n                                                value={newOperation.fertilizing_data.amount}\n                                                onChange={(e) => handleConditionalDataChange('fertilizing_data', 'amount', e.target.value)}\n                                            />\n                                            <Form.Select\n                                                style={{ maxWidth: '100px' }}\n                                                value={newOperation.fertilizing_data.unit_id}\n                                                onChange={(e) => handleConditionalDataChange('fertilizing_data', 'unit_id', e.target.value)}\n                                            >\n                                                <option value=\"\">Einheit</option>\n                                                {options.units.filter(u => ['WEIGHT', 'VOLUME'].includes(u.category)).map(unit => (\n                                                    <option key={unit.id} value={unit.id}>\n                                                        {unit.code}\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </InputGroup>\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                        </Card.Body>\n                    </Card>\n                );\n\n            case 'PEST_CONTROL':\n                const hasSpecificPesticideProduct = newOperation.pest_control_data.specific_product_id;\n                const hasManualPesticideValues = newOperation.pest_control_data.herbicide_content_gl || \n                                                 newOperation.pest_control_data.fungicide_content_gl || \n                                                 newOperation.pest_control_data.insecticide_content_gl;\n\n                return (\n                    <Card className=\"mt-3\">\n                        <Card.Header>\n                            <i className=\"bi bi-shield me-2\"></i>\n                            Pflanzenschutz Details\n                        </Card.Header>\n                        <Card.Body>\n                            <Row>\n                                {!hasManualPesticideValues && (\n                                    <Col md={12}>\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Spezifisches Produkt</Form.Label>\n                                            <Form.Select\n                                                value={newOperation.pest_control_data.specific_product_id}\n                                                onChange={(e) => handleConditionalDataChange('pest_control_data', 'specific_product_id', e.target.value)}\n                                            >\n                                                <option value=\"\">Kein spezifisches Produkt</option>\n                                                {options.pesticide_products.map(product => (\n                                                    <option key={product.id} value={product.id}>\n                                                        {product.name} ({product.pesticide_type})\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </Form.Group>\n                                    </Col>\n                                )}\n                            </Row>\n                            <Row>\n                                {!hasSpecificPesticideProduct && (\n                                    <>\n                                        <Col md={3}>\n                                            <Form.Group className=\"mb-3\">\n                                                <Form.Label>Herbizid (g/L)</Form.Label>\n                                                <Form.Control\n                                                    type=\"number\"\n                                                    step=\"0.1\"\n                                                    value={newOperation.pest_control_data.herbicide_content_gl}\n                                                    onChange={(e) => handleConditionalDataChange('pest_control_data', 'herbicide_content_gl', e.target.value)}\n                                                />\n                                            </Form.Group>\n                                        </Col>\n                                        <Col md={3}>\n                                            <Form.Group className=\"mb-3\">\n                                                <Form.Label>Fungizid (g/L)</Form.Label>\n                                                <Form.Control\n                                                    type=\"number\"\n                                                    step=\"0.1\"\n                                                    value={newOperation.pest_control_data.fungicide_content_gl}\n                                                    onChange={(e) => handleConditionalDataChange('pest_control_data', 'fungicide_content_gl', e.target.value)}\n                                                />\n                                            </Form.Group>\n                                        </Col>\n                                        <Col md={3}>\n                                            <Form.Group className=\"mb-3\">\n                                                <Form.Label>Insektizid (g/L)</Form.Label>\n                                                <Form.Control\n                                                    type=\"number\"\n                                                    step=\"0.1\"\n                                                    value={newOperation.pest_control_data.insecticide_content_gl}\n                                                    onChange={(e) => handleConditionalDataChange('pest_control_data', 'insecticide_content_gl', e.target.value)}\n                                                />\n                                            </Form.Group>\n                                        </Col>\n                                    </>\n                                )}\n                                <Col md={hasSpecificPesticideProduct ? 12 : 3}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Menge</Form.Label>\n                                        <InputGroup>\n                                            <Form.Control\n                                                type=\"number\"\n                                                step=\"0.01\"\n                                                value={newOperation.pest_control_data.amount}\n                                                onChange={(e) => handleConditionalDataChange('pest_control_data', 'amount', e.target.value)}\n                                            />\n                                            <Form.Select\n                                                style={{ maxWidth: '100px' }}\n                                                value={newOperation.pest_control_data.unit_id}\n                                                onChange={(e) => handleConditionalDataChange('pest_control_data', 'unit_id', e.target.value)}\n                                            >\n                                                <option value=\"\">Einheit</option>\n                                                {options.units.filter(u => u.category === 'VOLUME').map(unit => (\n                                                    <option key={unit.id} value={unit.id}>\n                                                        {unit.code}\n                                                    </option>\n                                                ))}\n                                            </Form.Select>\n                                        </InputGroup>\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                        </Card.Body>\n                    </Card>\n                );\n\n            case 'HARVEST':\n                return (\n                    <Card className=\"mt-3\">\n                        <Card.Header>\n                            <i className=\"bi bi-basket me-2\"></i>\n                            Ernte Details\n                        </Card.Header>\n                        <Card.Body>\n                            <Row>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Erntemenge</Form.Label>\n                                        <Form.Control\n                                            type=\"number\"\n                                            step=\"0.01\"\n                                            value={newOperation.harvest_data.harvest_amount}\n                                            onChange={(e) => handleConditionalDataChange('harvest_data', 'harvest_amount', e.target.value)}\n                                        />\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Einheit</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.harvest_data.harvest_unit_id}\n                                            onChange={(e) => handleConditionalDataChange('harvest_data', 'harvest_unit_id', e.target.value)}\n                                        >\n                                            <option value=\"\">Bitte wählen...</option>\n                                            {options.units.filter(u => u.category === 'WEIGHT').map(unit => (\n                                                <option key={unit.id} value={unit.id}>\n                                                    {unit.name} ({unit.code})\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Kultur</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.harvest_data.crop_id}\n                                            onChange={(e) => handleConditionalDataChange('harvest_data', 'crop_id', e.target.value)}\n                                        >\n                                            <option value=\"\">Bitte wählen...</option>\n                                            {options.crops.map(crop => (\n                                                <option key={crop.id} value={crop.id}>\n                                                    {crop.name}\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                            <Row>\n                                <Col md={6}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Feuchtigkeit (%)</Form.Label>\n                                        <Form.Control\n                                            type=\"number\"\n                                            step=\"0.1\"\n                                            value={newOperation.harvest_data.moisture_percent}\n                                            onChange={(e) => handleConditionalDataChange('harvest_data', 'moisture_percent', e.target.value)}\n                                        />\n                                    </Form.Group>\n                                </Col>\n                                <Col md={6}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Qualitätsklasse</Form.Label>\n                                        <Form.Control\n                                            type=\"text\"\n                                            value={newOperation.harvest_data.quality_grade}\n                                            onChange={(e) => handleConditionalDataChange('harvest_data', 'quality_grade', e.target.value)}\n                                        />\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                        </Card.Body>\n                    </Card>\n                );\n\n            case 'IRRIGATION':\n                return (\n                    <Card className=\"mt-3\">\n                        <Card.Header>\n                            <i className=\"bi bi-droplet-fill me-2\"></i>\n                            Beregnung Details\n                        </Card.Header>\n                        <Card.Body>\n                            <Row>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Beregnungstyp *</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.irrigation_data?.irrigation_type_id || ''}\n                                            onChange={(e) => handleConditionalDataChange('irrigation_data', 'irrigation_type_id', e.target.value)}\n                                            required\n                                        >\n                                            <option value=\"\">Bitte wählen...</option>\n                                            {(options.irrigation_types || []).map(type => (\n                                                <option key={type.id} value={type.id}>\n                                                    {type.name}\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Beregnungsmenge</Form.Label>\n                                        <Form.Control\n                                            type=\"number\"\n                                            step=\"0.01\"\n                                            value={newOperation.irrigation_data?.irrigation_amount || ''}\n                                            onChange={(e) => handleConditionalDataChange('irrigation_data', 'irrigation_amount', e.target.value)}\n                                            placeholder=\"Optional\"\n                                        />\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Einheit *</Form.Label>\n                                        <Form.Select\n                                            value={newOperation.irrigation_data?.irrigation_unit_id || ''}\n                                            onChange={(e) => handleConditionalDataChange('irrigation_data', 'irrigation_unit_id', e.target.value)}\n                                            required\n                                        >\n                                            <option value=\"\">Bitte wählen...</option>\n                                            {options.units.filter(u => u.category === 'VOLUME').map(unit => (\n                                                <option key={unit.id} value={unit.id}>\n                                                    {unit.name} ({unit.code})\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                        </Card.Body>\n                    </Card>\n                );\n\n            default:\n                return null;\n        }\n    };\n\n    if (!selectedArea) return null;\n\n    return (\n        <Modal \n            show={show} \n            onHide={onHide} \n            size=\"xl\" \n            centered\n            backdrop=\"static\"\n        >\n            <Modal.Header closeButton>\n                <Modal.Title>\n                    <i className=\"bi bi-plant me-2\"></i>\n                    {showAreaSelection ? (\n                        'Neue Maßnahme - Bereich auswählen'\n                    ) : (\n                        <>\n                            Bewirtschaftungsinformationen - \n                            {editingAreaName ? (\n                                <span className=\"ms-2\">\n                                    <input\n                                        type=\"text\"\n                                        className=\"form-control d-inline-block\"\n                                        style={{ width: 'auto', minWidth: '200px' }}\n                                        value={areaName}\n                                        onChange={(e) => setAreaName(e.target.value)}\n                                        onKeyPress={(e) => e.key === 'Enter' && saveAreaName()}\n                                        onBlur={saveAreaName}\n                                        autoFocus\n                                    />\n                                </span>\n                            ) : (\n                                <span className=\"ms-2\">\n                                    {getHeaderDisplayName()}\n                                    {(selectedArea.type === 'feldstueck' || selectedAreaForOperation?.type === 'feldstueck') && (\n                                        <Button\n                                            variant=\"link\"\n                                            size=\"sm\"\n                                            className=\"p-0 ms-2\"\n                                            onClick={() => setEditingAreaName(true)}\n                                            title=\"Name bearbeiten\"\n                                        >\n                                            <i className=\"bi bi-pencil\"></i>\n                                        </Button>\n                                    )}\n                                </span>\n                            )}\n                        </>\n                    )}\n                </Modal.Title>\n            </Modal.Header>\n\n            <Modal.Body style={{ maxHeight: '70vh', overflowY: 'auto' }}>\n                {loading && (\n                    <div className=\"text-center py-4\">\n                        <Spinner animation=\"border\" />\n                        <p className=\"mt-2 text-muted\">Lade Daten...</p>\n                    </div>\n                )}\n\n                {error && <Alert variant=\"danger\">{error}</Alert>}\n                {success && <Alert variant=\"success\">{success}</Alert>}\n\n                {!loading && (\n                    <>\n                        {showAreaSelection ? (\n                            <Card>\n                                <Card.Header>\n                                    <Card.Title className=\"h6 mb-0\">\n                                        <i className=\"bi bi-pin-map me-2\"></i>\n                                        Bereich für neue Maßnahme auswählen\n                                    </Card.Title>\n                                </Card.Header>\n                                <Card.Body>\n                                    {selectedArea.availableAreas && selectedArea.availableAreas.length > 0 ? (\n                                        <div className=\"list-group\">\n                                            {selectedArea.availableAreas.map(area => (\n                                                <button\n                                                    key={`${area.type}-${area.id}`}\n                                                    type=\"button\"\n                                                    className=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\n                                                    onClick={() => handleAreaSelection(area)}\n                                                >\n                                                    <div>\n                                                        <i className={`bi ${area.type === 'schlag' ? 'bi-grid-3x3' : 'bi-pin-map'} me-2`}></i>\n                                                        {area.label}\n                                                    </div>\n                                                    <Badge bg=\"secondary\">{area.area_ha} ha</Badge>\n                                                </button>\n                                            ))}\n                                        </div>\n                                    ) : (\n                                        <div className=\"text-center py-4\">\n                                            <i className=\"bi bi-exclamation-circle display-1 text-muted\"></i>\n                                            <h5 className=\"mt-3\">Keine Bereiche verfügbar</h5>\n                                            <p className=\"text-muted\">\n                                                Es wurden keine Feldstücke oder Schläge für dieses Jahr gefunden.\n                                            </p>\n                                        </div>\n                                    )}\n                                </Card.Body>\n                            </Card>\n                        ) : isEditingMode ? (\n                            // Focused editing mode - show only the operation form\n                            <>\n                                <Card>\n                                    <Card.Header>\n                                        <i className=\"bi bi-pencil-square me-2\"></i>\n                                        Maßnahme bearbeiten\n                                        <Button \n                                            variant=\"outline-secondary\" \n                                            size=\"sm\"\n                                            className=\"float-end\"\n                                            onClick={cancelEdit}\n                                        >\n                                            Abbrechen\n                                        </Button>\n                                    </Card.Header>\n                                    <Card.Body>\n                                        <Row>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Datum</Form.Label>\n                                                    <Form.Control\n                                                        type=\"date\"\n                                                        value={newOperation.date}\n                                                        onChange={(e) => handleOperationChange('date', e.target.value)}\n                                                    />\n                                                </Form.Group>\n                                            </Col>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Fläche (ha)</Form.Label>\n                                                    <Form.Control\n                                                        type=\"number\"\n                                                        step=\"0.0001\"\n                                                        value={newOperation.area_ha}\n                                                        onChange={(e) => handleOperationChange('area_ha', e.target.value)}\n                                                    />\n                                                </Form.Group>\n                                            </Col>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Kraftstoff</Form.Label>\n                                                    <Form.Select\n                                                        value={newOperation.fuel_type_id}\n                                                        onChange={(e) => handleOperationChange('fuel_type_id', e.target.value)}\n                                                    >\n                                                        <option value=\"\">Bitte wählen...</option>\n                                                        {options.fuel_types.map(fuel => (\n                                                            <option key={fuel.id} value={fuel.id}>\n                                                                {fuel.name}\n                                                            </option>\n                                                        ))}\n                                                    </Form.Select>\n                                                </Form.Group>\n                                            </Col>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Maßnahmentyp</Form.Label>\n                                                    <Form.Select\n                                                        value={newOperation.operation_type_id}\n                                                        onChange={(e) => handleOperationChange('operation_type_id', e.target.value)}\n                                                    >\n                                                        <option value=\"\">Bitte wählen...</option>\n                                                        {options.operation_types.map(type => (\n                                                            <option key={type.id} value={type.id}>\n                                                                {type.name}\n                                                            </option>\n                                                        ))}\n                                                    </Form.Select>\n                                                </Form.Group>\n                                            </Col>\n                                        </Row>\n\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Notizen</Form.Label>\n                                            <Form.Control\n                                                as=\"textarea\"\n                                                rows={2}\n                                                value={newOperation.notes}\n                                                onChange={(e) => handleOperationChange('notes', e.target.value)}\n                                                placeholder=\"Optional: Zusätzliche Informationen...\"\n                                            />\n                                        </Form.Group>\n\n                                        {/* Conditional fields based on operation type */}\n                                        {renderConditionalFields()}\n\n                                        <div className=\"d-flex justify-content-end mt-3\">\n                                            <Button \n                                                variant=\"success\" \n                                                onClick={saveOperation}\n                                                disabled={saving || !newOperation.operation_type_id || !existingFarmingInfo}\n                                            >\n                                                {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n                                                Maßnahme aktualisieren\n                                            </Button>\n                                        </div>\n                                    </Card.Body>\n                                </Card>\n                            </>\n                        ) : (\n                            <Tab.Container activeKey={activeTab} onSelect={setActiveTab}>\n                                <Nav variant=\"tabs\" className=\"mb-3\">\n                                    <Nav.Item>\n                                        <Nav.Link eventKey=\"general\">\n                                            <i className=\"bi bi-info-circle me-2\"></i>\n                                            Allgemeine Informationen\n                                        </Nav.Link>\n                                    </Nav.Item>\n                                    <Nav.Item>\n                                        <Nav.Link eventKey=\"operations\">\n                                            <i className=\"bi bi-list-task me-2\"></i>\n                                            Maßnahmen {existingOperations.length > 0 && <Badge bg=\"primary\">{existingOperations.length}</Badge>}\n                                        </Nav.Link>\n                                    </Nav.Item>\n                                    {selectedArea.type === 'schlag' && (\n                                        <Nav.Item>\n                                            <Nav.Link eventKey=\"landuse\">\n                                                <i className=\"bi bi-globe me-2\"></i>\n                                                Landnutzungsänderungen\n                                            </Nav.Link>\n                                        </Nav.Item>\n                                    )}\n                                </Nav>\n\n                        <Tab.Content>\n                            <Tab.Pane eventKey=\"general\">\n                                <Card>\n                                    <Card.Header>\n                                        <i className=\"bi bi-gear me-2\"></i>\n                                        Grundlegende Bewirtschaftung\n                                    </Card.Header>\n                                    <Card.Body>\n                                        <Row>\n                                            <Col md={6}>\n                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Bewirtschaftungsart</Form.Label>\n                                                    <Form.Select\n                                                        value={farmingInfo.type_of_farming}\n                                                        onChange={(e) => handleFarmingInfoChange('type_of_farming', e.target.value)}\n                                                    >\n                                                        <option value=\"\">Bitte wählen...</option>\n                                                        <option value=\"BIO\">Bio</option>\n                                                        <option value=\"CONVENTIONAL\">Konventionell</option>\n                                                    </Form.Select>\n                                                    {farmDefaultTypeOfFarming && (!existingFarmingInfo || !existingFarmingInfo.type_of_farming) && (\n                                                        <Form.Text className=\"text-muted\">\n                                                            <i className=\"bi bi-info-circle me-1\"></i>\n                                                            Betriebsstandard: {farmDefaultTypeOfFarming === 'BIO' ? 'Bio' : 'Konventionell'}\n                                                        </Form.Text>\n                                                    )}\n                                                </Form.Group>\n                                            </Col>\n                                            <Col md={6}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Hauptkultur</Form.Label>\n                                                    <Form.Select\n                                                        value={farmingInfo.main_crop_id}\n                                                        onChange={(e) => handleFarmingInfoChange('main_crop_id', e.target.value)}\n                                                    >\n                                                        <option value=\"\">Bitte wählen...</option>\n                                                        {options.crops.filter(c => c.is_main_crop).map(crop => (\n                                                            <option key={crop.id} value={crop.id}>\n                                                                {crop.name}\n                                                            </option>\n                                                        ))}\n                                                    </Form.Select>\n                                                </Form.Group>\n                                            </Col>\n                                        </Row>\n                                        <div className=\"d-flex justify-content-end\">\n                                            <Button \n                                                variant=\"primary\" \n                                                onClick={saveFarmingInfo}\n                                                disabled={saving}\n                                            >\n                                                {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n                                                {existingFarmingInfo ? 'Aktualisieren' : 'Speichern'}\n                                            </Button>\n                                        </div>\n                                    </Card.Body>\n                                </Card>\n                            </Tab.Pane>\n\n                            <Tab.Pane eventKey=\"landuse\">\n                                <LandUseChangeManager \n                                    schlagId={selectedArea.id}\n                                    onUpdate={onUpdate}\n                                />\n                            </Tab.Pane>\n\n                            <Tab.Pane eventKey=\"operations\">\n                                {/* Existing Operations */}\n                                {existingOperations.length > 0 && (\n                                    <Card className=\"mb-4\">\n                                        <Card.Header>\n                                            <i className=\"bi bi-list-check me-2\"></i>\n                                            Vorhandene Maßnahmen\n                                        </Card.Header>\n                                        <Card.Body className=\"p-0\">\n                                            <Table responsive striped>\n                                                <thead>\n                                                    <tr>\n                                                        <th>Datum</th>\n                                                        <th>Maßnahme</th>\n                                                        <th>Fläche</th>\n                                                        <th>Kraftstoff</th>\n                                                        <th>Details</th>\n                                                    </tr>\n                                                </thead>\n                                                <tbody>\n                                                    {existingOperations.map(operation => (\n                                                        <tr key={operation.id}>\n                                                            <td>{new Date(operation.date).toLocaleDateString('de-DE')}</td>\n                                                            <td>{operation.operation_type?.name}</td>\n                                                            <td>{operation.area_ha} ha</td>\n                                                            <td>{operation.fuel_type?.name || '-'}</td>\n                                                            <td>\n                                                                {operation.seeding_data && (\n                                                                    <small>Saatgut: {operation.seeding_data.seed_amount} {operation.seeding_data.seed_unit?.code}</small>\n                                                                )}\n                                                                {operation.fertilizing_data && (\n                                                                    <small>Dünger: {operation.fertilizing_data.amount} {operation.fertilizing_data.unit?.code}</small>\n                                                                )}\n                                                                {operation.pest_control_data && (\n                                                                    <small>PSM: {operation.pest_control_data.amount} {operation.pest_control_data.unit?.code}</small>\n                                                                )}\n                                                                {operation.harvest_data && (\n                                                                    <small>Ernte: {operation.harvest_data.harvest_amount} {operation.harvest_data.harvest_unit?.code}</small>\n                                                                )}\n                                                            </td>\n                                                        </tr>\n                                                    ))}\n                                                </tbody>\n                                            </Table>\n                                        </Card.Body>\n                                    </Card>\n                                )}\n\n                                {/* Add New/Edit Operation */}\n                                <Card>\n                                    <Card.Header>\n                                        <i className={`bi ${isEditingMode ? 'bi-lightning' : 'bi-lightning'} me-2`}></i>\n                                        {isEditingMode ? 'Maßnahme bearbeiten' : 'Neue Maßnahme erfassen'}\n                                        {isEditingMode && (\n                                            <Button \n                                                variant=\"outline-secondary\" \n                                                size=\"sm\"\n                                                className=\"float-end\"\n                                                onClick={cancelEdit}\n                                            >\n                                                Abbrechen\n                                            </Button>\n                                        )}\n                                    </Card.Header>\n                                    <Card.Body>\n                                        <Row>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Datum</Form.Label>\n                                                    <Form.Control\n                                                        type=\"date\"\n                                                        value={newOperation.date}\n                                                        onChange={(e) => handleOperationChange('date', e.target.value)}\n                                                    />\n                                                </Form.Group>\n                                            </Col>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Fläche (ha)</Form.Label>\n                                                    <Form.Control\n                                                        type=\"number\"\n                                                        step=\"0.0001\"\n                                                        value={newOperation.area_ha}\n                                                        onChange={(e) => handleOperationChange('area_ha', e.target.value)}\n                                                    />\n                                                </Form.Group>\n                                            </Col>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Kraftstoff</Form.Label>\n                                                    <Form.Select\n                                                        value={newOperation.fuel_type_id}\n                                                        onChange={(e) => handleOperationChange('fuel_type_id', e.target.value)}\n                                                    >\n                                                        <option value=\"\">Bitte wählen...</option>\n                                                        {options.fuel_types.map(fuel => (\n                                                            <option key={fuel.id} value={fuel.id}>\n                                                                {fuel.name}\n                                                            </option>\n                                                        ))}\n                                                    </Form.Select>\n                                                </Form.Group>\n                                            </Col>\n                                            <Col md={3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Maßnahmentyp</Form.Label>\n                                                    <Form.Select\n                                                        value={newOperation.operation_type_id}\n                                                        onChange={(e) => handleOperationChange('operation_type_id', e.target.value)}\n                                                    >\n                                                        <option value=\"\">Bitte wählen...</option>\n                                                        {options.operation_types.map(type => (\n                                                            <option key={type.id} value={type.id}>\n                                                                {type.name}\n                                                            </option>\n                                                        ))}\n                                                    </Form.Select>\n                                                </Form.Group>\n                                            </Col>\n                                        </Row>\n\n                                        <Form.Group className=\"mb-3\">\n                                            <Form.Label>Notizen</Form.Label>\n                                            <Form.Control\n                                                as=\"textarea\"\n                                                rows={2}\n                                                value={newOperation.notes}\n                                                onChange={(e) => handleOperationChange('notes', e.target.value)}\n                                                placeholder=\"Optional: Zusätzliche Informationen...\"\n                                            />\n                                        </Form.Group>\n\n                                        {/* Conditional fields based on operation type */}\n                                        {renderConditionalFields()}\n\n                                        <div className=\"d-flex justify-content-end mt-3\">\n                                            <Button \n                                                variant=\"success\" \n                                                onClick={saveOperation}\n                                                disabled={saving || !newOperation.operation_type_id || !existingFarmingInfo}\n                                            >\n                                                {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n                                                {isEditingMode ? 'Maßnahme aktualisieren' : 'Maßnahme speichern'}\n                                            </Button>\n                                        </div>\n                                    </Card.Body>\n                                </Card>\n                            </Tab.Pane>\n                            </Tab.Content>\n                        </Tab.Container>\n                        )}\n                    </>\n                )}\n            </Modal.Body>\n\n            <Modal.Footer>\n                {isEditingMode && selectedArea.editingOperationId ? (\n                    // Focused editing mode - show save button that saves and closes\n                    <>\n                        <Button variant=\"secondary\" onClick={cancelEdit}>\n                            Abbrechen\n                        </Button>\n                        <Button \n                            variant=\"primary\" \n                            onClick={saveOperation}\n                            disabled={saving || !newOperation.operation_type_id || !existingFarmingInfo}\n                        >\n                            {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n                            Speichern\n                        </Button>\n                    </>\n                ) : (\n                    // Normal mode - show close button\n                    <Button variant=\"secondary\" onClick={onHide}>\n                        Schließen\n                    </Button>\n                )}\n            </Modal.Footer>\n        </Modal>\n    );\n};\n\nexport default FarmingInfoModal;\n","import React, { useState, useEffect } from 'react';\nimport {\n    Modal, Button, Form, Row, Col, Card, Alert, Spinner\n} from 'react-bootstrap';\nimport api from '../../utils/api';\n\nconst UnifiedFeldstueckModal = ({ \n    show, \n    onHide, \n    selectedFarmYear, \n    editFeldstueck = null, \n    onUpdate \n}) => {\n    const [loading, setLoading] = useState(false);\n    const [saving, setSaving] = useState(false);\n    const [error, setError] = useState(null);\n    const [success, setSuccess] = useState(null);\n\n    // Form state for Feldstück\n    const [feldstueckData, setFeldstueckData] = useState({\n        farm_year_id: null,\n        nummer: '',\n        bezeichnung: '',\n        feldstueck_nutzungsart_id: '',\n        flaeche: ''\n    });\n\n    // Options data from API\n    const [options, setOptions] = useState({\n        nutzungsarten: []\n    });\n\n    // Initialize form when modal opens\n    useEffect(() => {\n        if (show && selectedFarmYear) {\n            loadData();\n\n            if (editFeldstueck) {\n                // Editing existing Feldstück\n                setFeldstueckData({\n                    farm_year_id: selectedFarmYear.id,\n                    nummer: editFeldstueck.nummer || '',\n                    bezeichnung: editFeldstueck.bezeichnung || '',\n                    feldstueck_nutzungsart_id: editFeldstueck.feldstueck_nutzungsart?.id || '',\n                    flaeche: editFeldstueck.flaeche || ''\n                });\n            } else {\n                // Creating new Feldstück\n                setFeldstueckData({\n                    farm_year_id: selectedFarmYear.id,\n                    nummer: '',\n                    bezeichnung: '',\n                    feldstueck_nutzungsart_id: '',\n                    flaeche: ''\n                });\n            }\n        }\n    }, [show, selectedFarmYear, editFeldstueck]);\n\n    const loadData = async () => {\n        setLoading(true);\n        setError(null);\n\n        try {\n            // Load feldstueck nutzungsarten\n            const feldstueckNutzungsartenRes = await api.get('/feldstueck-nutzungsarten/');\n\n            // Handle feldstueck nutzungsarten (might be paginated)\n            const feldstueckNutzungsartenData = feldstueckNutzungsartenRes.data.results || feldstueckNutzungsartenRes.data || [];\n\n            setOptions({\n                nutzungsarten: Array.isArray(feldstueckNutzungsartenData) ? feldstueckNutzungsartenData : []\n            });\n\n        } catch (err) {\n            console.error('Error loading data:', err);\n            setError('Fehler beim Laden der Daten: ' + err.message);\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const handleFeldstueckChange = (field, value) => {\n        setFeldstueckData(prev => ({\n            ...prev,\n            [field]: value\n        }));\n\n        setError('');\n    };\n\n    const saveFeldstueck = async () => {\n        setSaving(true);\n        setError(null);\n\n        try {\n            // Convert comma decimal separator to dot for API\n            const dataToSend = {\n                ...feldstueckData,\n                flaeche: typeof feldstueckData.flaeche === 'string' \n                    ? feldstueckData.flaeche.replace(',', '.') \n                    : feldstueckData.flaeche\n            };\n\n            if (editFeldstueck) {\n                // Update existing Feldstück\n                await api.put(`/feldstuecke-manage/${editFeldstueck.id}/`, dataToSend);\n            } else {\n                // Create new Feldstück\n                await api.post('/feldstuecke-manage/', dataToSend);\n            }\n\n            if (onUpdate) {\n                onUpdate();\n            }\n\n            // Close modal after successful save\n            handleClose();\n\n        } catch (err) {\n            console.error('Error saving Feldstück:', err);\n            setError('Fehler beim Speichern: ' + (err.response?.data?.error || err.response?.data?.detail || err.message));\n        } finally {\n            setSaving(false);\n        }\n    };\n\n    const handleClose = () => {\n        setError(null);\n        setSuccess(null);\n        onHide();\n    };\n\n    if (!selectedFarmYear) return null;\n\n    return (\n        <Modal \n            show={show} \n            onHide={handleClose} \n            size=\"xl\" \n            centered\n            backdrop=\"static\"\n        >\n            <Modal.Header closeButton>\n                <Modal.Title>\n                    <i className=\"bi bi-pin-map me-2\"></i>\n                    {editFeldstueck ? 'Feldstück bearbeiten' : 'Feldstück hinzufügen'}\n                    {editFeldstueck && (\n                        <span className=\"ms-2 text-muted\">\n                            #{editFeldstueck.nummer} - {editFeldstueck.bezeichnung || 'Ohne Bezeichnung'}\n                        </span>\n                    )}\n                </Modal.Title>\n            </Modal.Header>\n\n            <Modal.Body style={{ maxHeight: '70vh', overflowY: 'auto' }}>\n                {loading && (\n                    <div className=\"text-center py-4\">\n                        <Spinner animation=\"border\" />\n                        <p className=\"mt-2 text-muted\">Lade Daten...</p>\n                    </div>\n                )}\n\n                {error && <Alert variant=\"danger\">{error}</Alert>}\n\n                {!loading && (\n                    <Card>\n                        <Card.Header>\n                            <i className=\"bi bi-pin-map me-2\"></i>\n                            Feldstück-Informationen\n                        </Card.Header>\n                        <Card.Body>\n                            <Row>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Feldstück-Nummer *</Form.Label>\n                                        <Form.Control\n                                            type=\"number\"\n                                            value={feldstueckData.nummer}\n                                            onChange={(e) => handleFeldstueckChange('nummer', parseInt(e.target.value) || '')}\n                                            min=\"1\"\n                                            required\n                                        />\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Bezeichnung</Form.Label>\n                                        <Form.Control\n                                            type=\"text\"\n                                            value={feldstueckData.bezeichnung}\n                                            onChange={(e) => handleFeldstueckChange('bezeichnung', e.target.value)}\n                                            placeholder=\"Optional\"\n                                        />\n                                    </Form.Group>\n                                </Col>\n                                <Col md={4}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Fläche (ha) *</Form.Label>\n                                        <Form.Control\n                                            type=\"number\"\n                                            step=\"0.0001\"\n                                            value={feldstueckData.flaeche}\n                                            onChange={(e) => handleFeldstueckChange('flaeche', e.target.value)}\n                                            min=\"0.0001\"\n                                            required\n                                        />\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                            <Row>\n                                <Col md={12}>\n                                    <Form.Group className=\"mb-3\">\n                                        <Form.Label>Nutzungsart *</Form.Label>\n                                        <Form.Select\n                                            value={feldstueckData.feldstueck_nutzungsart_id}\n                                            onChange={(e) => handleFeldstueckChange('feldstueck_nutzungsart_id', parseInt(e.target.value) || '')}\n                                            required\n                                        >\n                                            <option value=\"\">Auswählen...</option>\n                                            {options.nutzungsarten.map(na => (\n                                                <option key={na.id} value={na.id}>\n                                                    {na.code} - {na.bezeichnung}\n                                                </option>\n                                            ))}\n                                        </Form.Select>\n                                    </Form.Group>\n                                </Col>\n                            </Row>\n                        </Card.Body>\n                    </Card>\n                )}\n            </Modal.Body>\n\n            <Modal.Footer>\n                <Button \n                    variant=\"primary\" \n                    onClick={saveFeldstueck}\n                    disabled={saving || !feldstueckData.nummer || !feldstueckData.flaeche || !feldstueckData.feldstueck_nutzungsart_id}\n                >\n                    {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n                    Speichern\n                </Button>\n            </Modal.Footer>\n        </Modal>\n    );\n};\n\nexport default UnifiedFeldstueckModal;\n","/**\n * Generate a UUID v4\n * Provides a polyfill for crypto.randomUUID() for environments that don't support it\n */\nexport function generateUUID() {\n    // Check if crypto.randomUUID is available (modern browsers and Node.js 14.17+)\n    if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n        return crypto.randomUUID();\n    }\n\n    // Fallback implementation for older environments\n    // This generates a RFC4122 version 4 compliant UUID\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n        const r = Math.random() * 16 | 0;\n        const v = c === 'x' ? r : (r & 0x3 | 0x8);\n        return v.toString(16);\n    });\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport {\n    Modal, Button, Form, Row, Col, Card, Alert, Spinner, Badge,\n    ListGroup, InputGroup, Table\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport api from '../../utils/api';\nimport { getOperationIcon } from '../../utils/operationIcons';\nimport { generateUUID } from '../../utils/uuid';\n\n// Round numeric strings to 4 decimal places (keeps empty strings).\nconst roundTo4 = (v) => {\n    if (v === '' || v === null || v === undefined) return v;\n    const n = Number(String(v).replace(',', '.'));\n    if (Number.isNaN(n)) return v;\n    return n.toFixed(4);\n};\n\n// Shared styles for react-select to match the app theme\nconst selectStyles = {\n    menuPortal: (base) => ({ ...base, zIndex: 9999 }),\n    menuPosition: 'fixed',\n    control: (base, state) => ({\n        ...base,\n        borderColor: state.isFocused ? '#005541' : base.borderColor,\n        boxShadow: state.isFocused ? '0 0 0 1px #005541' : base.boxShadow,\n        '&:hover': {\n            borderColor: state.isFocused ? '#005541' : base.borderColor\n        }\n    }),\n    option: (base, state) => ({\n        ...base,\n        backgroundColor: state.isSelected ? '#005541' : state.isFocused ? '#e6f2ef' : base.backgroundColor,\n        color: state.isSelected ? 'white' : base.color,\n        '&:active': {\n            backgroundColor: '#005541'\n        }\n    }),\n    input: (base) => ({\n        ...base,\n        // Prevent mobile keyboard from opening\n        'input:focus': {\n            boxShadow: 'none'\n        }\n    })\n};\n\n// Props to prevent mobile keyboard issues\nconst mobileSelectProps = {\n    openMenuOnFocus: false,\n    blurInputOnSelect: true,\n    // Prevent keyboard on mobile by making input readonly when menu is closed\n    onMenuOpen: () => {},\n    onMenuClose: () => {}\n};\n\nconst QuickOperationModal = ({ show, onHide, farms, onSuccess, preselectedData, editOperation }) => {\n    const [currentStep, setCurrentStep] = useState(1);\n    const [loading, setLoading] = useState(false);\n    const [error, setError] = useState(null);\n    const [saving, setSaving] = useState(false);\n\n    // Edit mode flag\n    const isEditMode = !!editOperation;\n\n    // Step 1: Farm and Year selection\n    const [selectedFarm, setSelectedFarm] = useState(null);\n    const [selectedYear, setSelectedYear] = useState(null);\n    const [availableYears, setAvailableYears] = useState([]);\n\n    // Step 2: Operation types selection (multiple)\n    const [selectedOperationTypes, setSelectedOperationTypes] = useState([]);\n    const [operationTypes, setOperationTypes] = useState([]);\n\n    // Step 3: Schläge selection\n    const [selectedSchlaege, setSelectedSchlaege] = useState([]);\n    const [availableSchlaege, setAvailableSchlaege] = useState([]);\n    const [schlagSearchTerm, setSchlagSearchTerm] = useState('');\n\n    // Step 4: Date, Fuel, and Area editing\n    const [operationDate, setOperationDate] = useState(new Date().toISOString().split('T')[0]);\n    const [selectedFuelType, setSelectedFuelType] = useState('');\n    const [fuelTypes, setFuelTypes] = useState([]);\n    const [schlagAreas, setSchlagAreas] = useState({});\n\n    // Step 5: Operation-specific details for each type\n    const [currentDetailStep, setCurrentDetailStep] = useState(0);\n    const [operationTypeDetails, setOperationTypeDetails] = useState({});\n    const [sharedNotes, setSharedNotes] = useState('');\n\n    // Options for operation details\n    const [options, setOptions] = useState({\n        crops: [],\n        soil_work_types: [],\n        units: [],\n        fertilizer_products: [],\n        organic_fertilizer_types: [],\n        pesticide_products: []\n    });\n\n    // Initialize modal\n    useEffect(() => {\n        if (show) {\n            resetModal();\n            loadInitialData();\n\n            // If editing an existing operation\n            if (editOperation) {\n                initializeEditMode();\n            }\n            // If preselectedData is provided, skip to step 2 and preselect farm/year/schlag\n            else if (preselectedData) {\n                setSelectedFarm(preselectedData.farm);\n                setSelectedYear(preselectedData.year);\n                setSelectedSchlaege([{\n                    ...preselectedData.schlag,\n                    feldstueck: preselectedData.feldstueck,\n                    displayName: `${preselectedData.feldstueck.bezeichnung || 'Feldstück #' + preselectedData.feldstueck.nummer} / Schlag #${preselectedData.schlag.nummer}`,\n                    searchText: `${preselectedData.feldstueck.bezeichnung} ${preselectedData.feldstueck.nummer} ${preselectedData.schlag.nummer}`.toLowerCase()\n                }]);\n                setSchlagAreas({\n                    [preselectedData.schlag.id]: parseFloat(preselectedData.schlag.flaeche_netto) || 0\n                });\n                // Set preferred fuel type from farm if available\n                if (preselectedData.farm?.prefered_fuel_type?.id) {\n                    setSelectedFuelType(preselectedData.farm.prefered_fuel_type.id);\n                }\n                setCurrentStep(2); // Skip to operation type selection\n            }\n        }\n    }, [show, preselectedData, editOperation]);\n\n    // Initialize edit mode with existing operation data\n    const initializeEditMode = () => {\n        if (!editOperation) return;\n\n        // Set farm, year, schlag from editOperation context\n        if (editOperation.farm) {\n            setSelectedFarm(editOperation.farm);\n            setAvailableYears(editOperation.farm.years || []);\n        }\n        if (editOperation.year) {\n            setSelectedYear(editOperation.year);\n        }\n        if (editOperation.schlag && editOperation.feldstueck) {\n            setSelectedSchlaege([{\n                ...editOperation.schlag,\n                feldstueck: editOperation.feldstueck,\n                displayName: `${editOperation.feldstueck.bezeichnung || 'Feldstück #' + editOperation.feldstueck.nummer} / Schlag #${editOperation.schlag.nummer}`,\n                searchText: `${editOperation.feldstueck.bezeichnung} ${editOperation.feldstueck.nummer} ${editOperation.schlag.nummer}`.toLowerCase()\n            }]);\n            setSchlagAreas({\n                [editOperation.schlag.id]: parseFloat(editOperation.operation.area_ha) || parseFloat(editOperation.schlag.flaeche_netto) || 0\n            });\n        }\n\n        // Set operation date and fuel type\n        const op = editOperation.operation;\n        setOperationDate(op.date || new Date().toISOString().split('T')[0]);\n        setSelectedFuelType(op.fuel_type?.id || op.fuel_type_id || '');\n        setSharedNotes(op.notes || '');\n\n        // Set operation type - wait for operationTypes to be loaded\n        // This will be handled in a separate effect\n    };\n\n    // Effect to set operation type after operationTypes are loaded (for edit mode)\n    useEffect(() => {\n        if (isEditMode && editOperation && operationTypes.length > 0) {\n            const op = editOperation.operation;\n            const opTypeId = op.operation_type?.id || op.operation_type_id;\n            const opType = operationTypes.find(t => t.id === opTypeId);\n            \n            if (opType) {\n                // Set the operation type\n                setSelectedOperationTypes([opType]);\n                \n                // Initialize details for this operation type with existing data\n                const details = getDetailsFromOperation(opType.code, op);\n                setOperationTypeDetails({\n                    [opType.id]: details\n                });\n                \n                // Skip to step 4 (date & fuel) since we already have all selections\n                setCurrentStep(4);\n            }\n        }\n    }, [isEditMode, editOperation, operationTypes]);\n\n    // Extract details from existing operation for editing\n    const getDetailsFromOperation = (code, op) => {\n        const base = { default_unit_id: op.default_unit?.id || op.default_unit_id || '' };\n        \n        if (code === 'SOIL_WORK' && op.soil_work_data) {\n            base.soil_work_data = {\n                soil_work_type_id: op.soil_work_data.soil_work_type?.id || op.soil_work_data.soil_work_type_id || '',\n                depth: op.soil_work_data.depth || 'SHALLOW'\n            };\n        } else if (code.includes('SEEDING') && op.seeding_data) {\n            base.seeding_data = {\n                seed_amount: op.seeding_data.seed_amount || '',\n                seed_unit_id: op.seeding_data.seed_unit?.id || op.seeding_data.seed_unit_id || '',\n                crop_id: op.seeding_data.crop?.id || op.seeding_data.crop_id || ''\n            };\n        } else if (code === 'FERTILIZING' && op.fertilizing_data) {\n            base.fertilizing_data = {\n                specific_product_id: op.fertilizing_data.specific_product?.id || op.fertilizing_data.specific_product_id || '',\n                organic_fertilizer_type_id: op.fertilizing_data.organic_fertilizer_type?.id || op.fertilizing_data.organic_fertilizer_type_id || '',\n                nitrogen_percent: op.fertilizing_data.nitrogen_percent || '',\n                phosphorus_percent: op.fertilizing_data.phosphorus_percent || '',\n                potassium_percent: op.fertilizing_data.potassium_percent || '',\n                amount: op.fertilizing_data.amount || '',\n                unit_id: op.fertilizing_data.unit?.id || op.fertilizing_data.unit_id || ''\n            };\n        } else if (code === 'PEST_CONTROL' && op.pest_control_data) {\n            base.pest_control_data = {\n                specific_product_id: op.pest_control_data.specific_product?.id || op.pest_control_data.specific_product_id || '',\n                herbicide_content_gl: op.pest_control_data.herbicide_content_gl || '',\n                fungicide_content_gl: op.pest_control_data.fungicide_content_gl || '',\n                insecticide_content_gl: op.pest_control_data.insecticide_content_gl || '',\n                amount: op.pest_control_data.amount || '',\n                unit_id: op.pest_control_data.unit?.id || op.pest_control_data.unit_id || ''\n            };\n        } else if (code === 'IRRIGATION' && op.irrigation_data) {\n            base.irrigation_data = {\n                irrigation_type_id: op.irrigation_data.irrigation_type?.id || op.irrigation_data.irrigation_type_id || '',\n                irrigation_amount: op.irrigation_data.irrigation_amount || '',\n                irrigation_unit_id: op.irrigation_data.irrigation_unit?.id || op.irrigation_data.irrigation_unit_id || ''\n            };\n        } else if (code === 'HARVEST' && op.harvest_data) {\n            base.harvest_data = {\n                harvest_amount: op.harvest_data.harvest_amount || '',\n                harvest_unit_id: op.harvest_data.harvest_unit?.id || op.harvest_data.harvest_unit_id || '',\n                crop_id: op.harvest_data.crop?.id || op.harvest_data.crop_id || '',\n                moisture_percent: op.harvest_data.moisture_percent || '',\n                quality_grade: op.harvest_data.quality_grade || ''\n            };\n        } else {\n            // Initialize with defaults if no existing data\n            return getDefaultDetailsForType(code);\n        }\n        \n        return base;\n    };\n\n    const resetModal = () => {\n        setCurrentStep(1);\n        setError(null);\n        setSelectedFarm(null);\n        setSelectedYear(null);\n        setSelectedOperationTypes([]);\n        setSelectedSchlaege([]);\n        setSchlagSearchTerm('');\n        setOperationDate(new Date().toISOString().split('T')[0]);\n        setSelectedFuelType('');\n        setSchlagAreas({});\n        setCurrentDetailStep(0);\n        setOperationTypeDetails({});\n        setSharedNotes('');\n    };\n\n    const loadInitialData = async () => {\n        setLoading(true);\n        try {\n            const [opTypesRes, fuelTypesRes, optionsRes] = await Promise.all([\n                api.get('/operation-types/'),\n                api.get('/fuel-types/'),\n                api.get('/farming-options/')\n            ]);\n\n            setOperationTypes(opTypesRes.data.results || opTypesRes.data || []);\n            setFuelTypes(fuelTypesRes.data.results || fuelTypesRes.data || []);\n            setOptions(optionsRes.data);\n\n            if (farms && farms.length === 1) {\n                handleFarmSelect(farms[0]);\n            }\n        } catch (err) {\n            console.error('Error loading initial data:', err);\n            setError('Fehler beim Laden der Daten: ' + err.message);\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const handleFarmSelect = (farm) => {\n        setSelectedFarm(farm);\n        setAvailableYears(farm.years || []);\n\n        const currentYear = new Date().getFullYear();\n        const yearMatch = farm.years?.find(y => y.year === currentYear);\n        if (yearMatch) {\n            setSelectedYear(yearMatch);\n        } else if (farm.years && farm.years.length > 0) {\n            setSelectedYear(farm.years[0]);\n        }\n\n        // Set preferred fuel type from farm if available (only in create mode, not edit mode)\n        if (!isEditMode && farm.prefered_fuel_type?.id) {\n            setSelectedFuelType(farm.prefered_fuel_type.id);\n        }\n    };\n\n    const handleYearSelect = (year) => {\n        setSelectedYear(year);\n    };\n\n    // Helper function to get common crop from selected Schläge\n    const getCommonCropFromSchlaege = () => {\n        if (selectedSchlaege.length === 0) return null;\n        \n        // Get the crop from the first schlag\n        const firstCrop = selectedSchlaege[0].crop;\n        if (!firstCrop) return null;\n        \n        // Check if all schläge have the same crop\n        const allSameCrop = selectedSchlaege.every(schlag => \n            schlag.crop && schlag.crop.id === firstCrop.id\n        );\n        \n        return allSameCrop ? firstCrop.id : null;\n    };\n\n    const handleOperationTypeToggle = (opType) => {\n        setSelectedOperationTypes(prev => {\n            const isSelected = prev.some(t => t.id === opType.id);\n            if (isSelected) {\n                // Remove from selection and clear its details\n                const newDetails = { ...operationTypeDetails };\n                delete newDetails[opType.id];\n                setOperationTypeDetails(newDetails);\n                return prev.filter(t => t.id !== opType.id);\n            } else {\n                // Add to selection and initialize details\n                setOperationTypeDetails(prev => ({\n                    ...prev,\n                    [opType.id]: getDefaultDetailsForType(opType.code)\n                }));\n                return [...prev, opType];\n            }\n        });\n    };\n\n    const getDefaultDetailsForType = (code) => {\n        const base = { default_unit_id: '' };\n        \n        // Get common crop for seeding and harvest operations\n        const commonCropId = getCommonCropFromSchlaege();\n        \n        if (code === 'SOIL_WORK') {\n            base.soil_work_data = { soil_work_type_id: '', depth: 'SHALLOW' };\n        } else if (code.includes('SEEDING')) {\n            // Get default unit from crop if available\n            let seed_unit_id = '';\n            if (commonCropId) {\n                const crop = options.crops.find(c => c.id == commonCropId);\n                if (crop?.default_unit) {\n                    seed_unit_id = typeof crop.default_unit === 'object' ? crop.default_unit.id : crop.default_unit;\n                }\n            }\n            base.seeding_data = { \n                seed_amount: '', \n                seed_unit_id: seed_unit_id, \n                crop_id: commonCropId || '' \n            };\n        } else if (code === 'FERTILIZING') {\n            // Mixture support: use fertilizing_data_items (list) in create mode.\n            // Keep fertilizing_data for backward compatibility / edit mode.\n            base.fertilizing_data_items = [{\n                specific_product_id: '',\n                organic_fertilizer_type_id: '',\n                nitrogen_percent: '',\n                phosphorus_percent: '',\n                potassium_percent: '',\n                amount: '',\n                unit_id: ''\n            }];\n            base.fertilizing_data = { \n                specific_product_id: '', organic_fertilizer_type_id: '',\n                nitrogen_percent: '', phosphorus_percent: '', potassium_percent: '',\n                amount: '', unit_id: ''\n            };\n        } else if (code === 'PEST_CONTROL') {\n            // Mixture support\n            base.pest_control_data_items = [{\n                specific_product_id: '',\n                herbicide_content_gl: '',\n                fungicide_content_gl: '',\n                insecticide_content_gl: '',\n                amount: '',\n                unit_id: ''\n            }];\n            base.pest_control_data = {\n                specific_product_id: '', herbicide_content_gl: '',\n                fungicide_content_gl: '', insecticide_content_gl: '',\n                amount: '', unit_id: ''\n            };\n        } else if (code === 'IRRIGATION') {\n            base.irrigation_data = {\n                irrigation_type_id: '', irrigation_amount: '', irrigation_unit_id: ''\n            };\n        } else if (code === 'HARVEST') {\n            base.harvest_data = {\n                harvest_amount: '', \n                harvest_unit_id: '', \n                crop_id: commonCropId || '',\n                moisture_percent: '', \n                quality_grade: ''\n            };\n        }\n        return base;\n    };\n\n    const loadSchlaege = async () => {\n        if (!selectedYear || !selectedFarm) return;\n\n        setLoading(true);\n        try {\n            const response = await api.get(`/farms/${selectedFarm.id}/`, {\n                params: { include_geometry: false }\n            });\n\n            const fullFarmData = response.data;\n            const fullFarmYear = fullFarmData.years?.find(y => y.id === selectedYear.id);\n\n            if (!fullFarmYear || !fullFarmYear.feldstuecke) {\n                setAvailableSchlaege([]);\n                return;\n            }\n\n            const allSchlaege = [];\n            fullFarmYear.feldstuecke.forEach(feldstueck => {\n                if (feldstueck.schlaege && feldstueck.schlaege.length > 0) {\n                    feldstueck.schlaege.forEach(schlag => {\n                        allSchlaege.push({\n                            ...schlag,\n                            feldstueck: feldstueck,\n                            displayName: `${feldstueck.bezeichnung || 'Feldstück #' + feldstueck.nummer} / Schlag #${schlag.nummer}`,\n                            searchText: `${feldstueck.bezeichnung} ${feldstueck.nummer} ${schlag.nummer}`.toLowerCase()\n                        });\n                    });\n                }\n            });\n\n            setAvailableSchlaege(allSchlaege);\n        } catch (err) {\n            console.error('Error loading Schläge:', err);\n            setError('Fehler beim Laden der Schläge: ' + err.message);\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const handleSchlagToggle = (schlag) => {\n        setSelectedSchlaege(prev => {\n            const isSelected = prev.some(s => s.id === schlag.id);\n            let newSelection;\n            \n            if (isSelected) {\n                newSelection = prev.filter(s => s.id !== schlag.id);\n                const newAreas = { ...schlagAreas };\n                delete newAreas[schlag.id];\n                setSchlagAreas(newAreas);\n            } else {\n                newSelection = [...prev, schlag];\n                setSchlagAreas(prevAreas => ({\n                    ...prevAreas,\n                    [schlag.id]: parseFloat(schlag.flaeche_netto) || 0\n                }));\n            }\n            \n            // Update crop_id for seeding and harvest operations when Schläge selection changes\n            updateCropForOperations(newSelection);\n            \n            return newSelection;\n        });\n    };\n    \n    // Helper function to update crop_id for seeding and harvest operations when Schläge selection changes\n    const updateCropForOperations = (schlaege) => {\n        if (schlaege.length === 0) return;\n        \n        // Get common crop from the new selection\n        const firstCrop = schlaege[0].crop;\n        if (!firstCrop) return;\n        \n        const allSameCrop = schlaege.every(s => s.crop && s.crop.id === firstCrop.id);\n        const commonCropId = allSameCrop ? firstCrop.id : null;\n        \n        // Update existing operation type details for seeding and harvest\n        setOperationTypeDetails(prev => {\n            const updated = { ...prev };\n            let hasChanges = false;\n            \n            selectedOperationTypes.forEach(opType => {\n                const code = opType.code;\n                const details = updated[opType.id];\n                \n                if (code.includes('SEEDING_MAIN') && details?.seeding_data) {\n                    // Only update if current crop_id is empty or if we have a common crop\n                    if (!details.seeding_data.crop_id || commonCropId) {\n                        updated[opType.id] = {\n                            ...details,\n                            seeding_data: {\n                                ...details.seeding_data,\n                                crop_id: commonCropId || ''\n                            }\n                        };\n                        hasChanges = true;\n                    }\n                } else if (code === 'HARVEST' && details?.harvest_data) {\n                    // Only update if current crop_id is empty or if we have a common crop\n                    if (!details.harvest_data.crop_id || commonCropId) {\n                        updated[opType.id] = {\n                            ...details,\n                            harvest_data: {\n                                ...details.harvest_data,\n                                crop_id: commonCropId || ''\n                            }\n                        };\n                        hasChanges = true;\n                    }\n                }\n            });\n            \n            return hasChanges ? updated : prev;\n        });\n    };\n\n    const handleAreaChange = (schlagId, value) => {\n        setSchlagAreas(prev => ({\n            ...prev,\n            [schlagId]: parseFloat(value) || 0\n        }));\n    };\n\n    const filteredSchlaege = useMemo(() => {\n        if (!schlagSearchTerm) return availableSchlaege;\n        const searchLower = schlagSearchTerm.toLowerCase();\n        return availableSchlaege.filter(schlag => {\n            // Search in the existing searchText (feldstueck bezeichnung, nummer, schlag nummer)\n            const matchesBasicSearch = schlag.searchText.includes(searchLower);\n            \n            // Also search in crop name if crop exists\n            const matchesCrop = schlag.crop?.name?.toLowerCase().includes(searchLower);\n            \n            return matchesBasicSearch || matchesCrop;\n        });\n    }, [availableSchlaege, schlagSearchTerm]);\n\n    const handleDetailChange = (opTypeId, dataType, field, value) => {\n        setOperationTypeDetails(prev => {\n            const opDetails = prev[opTypeId];\n            if (dataType) {\n                return {\n                    ...prev,\n                    [opTypeId]: {\n                        ...opDetails,\n                        [dataType]: {\n                            ...opDetails[dataType],\n                            [field]: value\n                        }\n                    }\n                };\n            } else {\n                return {\n                    ...prev,\n                    [opTypeId]: {\n                        ...opDetails,\n                        [field]: value\n                    }\n                };\n            }\n        });\n    };\n\n    const handleDetailBlur = (opTypeId, dataType, field, value) => {\n        handleDetailChange(opTypeId, dataType, field, roundTo4(value));\n    };\n\n    const canProceedToNextStep = () => {\n        switch (currentStep) {\n            case 1:\n                return selectedFarm && selectedYear;\n            case 2:\n                return selectedOperationTypes.length > 0;\n            case 3:\n                return selectedSchlaege.length > 0;\n            case 4:\n                return operationDate && selectedFuelType;\n            case 5:\n                // Check if current operation type has required fields filled\n                const currentOpType = selectedOperationTypes[currentDetailStep];\n                if (!currentOpType) return false;\n\n                const details = operationTypeDetails[currentOpType.id];\n                if (!details) return false;\n\n                const code = currentOpType.code;\n                if (code === 'SOIL_WORK') {\n                    return details.soil_work_data?.soil_work_type_id;\n                } else if (code.includes('SEEDING')) {\n                    return details.seeding_data?.seed_unit_id;\n                } else if (code === 'FERTILIZING') {\n                    // mixture support\n                    const items = details.fertilizing_data_items || [];\n                    if (items.length > 0) {\n                        return items.every(i => i?.unit_id);\n                    }\n                    return details.fertilizing_data?.unit_id;\n                } else if (code === 'PEST_CONTROL') {\n                    const items = details.pest_control_data_items || [];\n                    if (items.length > 0) {\n                        return items.every(i => i?.unit_id);\n                    }\n                    return details.pest_control_data?.unit_id;\n                } else if (code === 'IRRIGATION') {\n                    return details.irrigation_data?.irrigation_unit_id;\n                } else if (code === 'HARVEST') {\n                    return details.harvest_data?.harvest_unit_id;\n                }\n                return true;\n            default:\n                return true;\n        }\n    };\n\n    const handleNext = async () => {\n        if (currentStep === 2 && !preselectedData) {\n            // Only load schlaege if not preselected\n            await loadSchlaege();\n        } else if (currentStep === 5 && currentDetailStep < selectedOperationTypes.length - 1) {\n            // Move to next operation type detail\n            setCurrentDetailStep(prev => prev + 1);\n            return;\n        }\n\n        // Skip step 3 if preselectedData is provided\n        if (currentStep === 2 && preselectedData) {\n            setCurrentStep(4); // Skip directly to step 4 (date & fuel)\n            return;\n        }\n\n        setCurrentStep(prev => prev + 1);\n    };\n\n    const handleBack = () => {\n        if (currentStep === 5 && currentDetailStep > 0) {\n            // Go back to previous operation type detail\n            setCurrentDetailStep(prev => prev - 1);\n            return;\n        }\n        if (currentStep === 5) {\n            setCurrentDetailStep(0);\n        }\n\n        // Skip step 3 when going back if preselectedData is provided\n        if (currentStep === 4 && preselectedData) {\n            setCurrentStep(2); // Go back to step 2 (operation types)\n            setError(null);\n            return;\n        }\n\n        setCurrentStep(prev => prev - 1);\n        setError(null);\n    };\n\n    const handleSave = async () => {\n        setSaving(true);\n        setError(null);\n\n        try {\n            // Edit mode: update existing operation\n            if (isEditMode && editOperation) {\n                const opType = selectedOperationTypes[0];\n                const schlag = selectedSchlaege[0];\n                \n                const operationData = {\n                    date: operationDate,\n                    area_ha: roundTo4(schlagAreas[schlag.id] || parseFloat(schlag.flaeche_netto) || 0),\n                    fuel_type_id: selectedFuelType,\n                    operation_type_id: opType.id,\n                    notes: sharedNotes,\n                    default_unit_id: operationTypeDetails[opType.id]?.default_unit_id || null\n                };\n\n                // Add conditional data based on operation type\n                const details = operationTypeDetails[opType.id];\n                const code = opType.code;\n\n                // Round numeric conditional fields (4 decimals) before submit.\n                const roundedDetails = JSON.parse(JSON.stringify(details || {}));\n                if (roundedDetails?.seeding_data) roundedDetails.seeding_data.seed_amount = roundTo4(roundedDetails.seeding_data.seed_amount);\n                if (roundedDetails?.fertilizing_data) roundedDetails.fertilizing_data.amount = roundTo4(roundedDetails.fertilizing_data.amount);\n                if (roundedDetails?.pest_control_data) roundedDetails.pest_control_data.amount = roundTo4(roundedDetails.pest_control_data.amount);\n                if (roundedDetails?.irrigation_data) roundedDetails.irrigation_data.irrigation_amount = roundTo4(roundedDetails.irrigation_data.irrigation_amount);\n                if (roundedDetails?.harvest_data) roundedDetails.harvest_data.harvest_amount = roundTo4(roundedDetails.harvest_data.harvest_amount);\n\n                if (code === 'SOIL_WORK') {\n                    operationData.soil_work_data = roundedDetails.soil_work_data?.soil_work_type_id ? roundedDetails.soil_work_data : null;\n                } else if (code.includes('SEEDING')) {\n                    operationData.seeding_data = roundedDetails.seeding_data?.seed_unit_id ? roundedDetails.seeding_data : null;\n                } else if (code === 'FERTILIZING') {\n                    operationData.fertilizing_data = roundedDetails.fertilizing_data?.unit_id ? roundedDetails.fertilizing_data : null;\n                } else if (code === 'PEST_CONTROL') {\n                    operationData.pest_control_data = roundedDetails.pest_control_data?.unit_id ? roundedDetails.pest_control_data : null;\n                } else if (code === 'IRRIGATION') {\n                    operationData.irrigation_data = roundedDetails.irrigation_data?.irrigation_unit_id ? roundedDetails.irrigation_data : null;\n                } else if (code === 'HARVEST') {\n                    operationData.harvest_data = roundedDetails.harvest_data?.harvest_unit_id ? roundedDetails.harvest_data : null;\n                }\n\n                const updatedOp = await api.patch(`/operations/${editOperation.operation.id}/`, operationData);\n                \n                if (onSuccess) {\n                    onSuccess([updatedOp.data], true); // Pass true to indicate edit mode\n                }\n                onHide();\n                return;\n            }\n\n            // Create mode: create new operations\n            // Generate a single ride_uuid for all operations in this batch\n            const rideUuid = generateUUID();\n            const createdOperations = [];\n\n            // Create operations for each combination of operation type and schlag\n            for (const opType of selectedOperationTypes) {\n                for (const schlag of selectedSchlaege) {\n                    // Ensure FarmingInfo exists\n                    let farmingInfo;\n                    try {\n                        const farmingInfoRes = await api.get(`/farming-info/?schlag=${schlag.id}`);\n                        if (farmingInfoRes.data.results && farmingInfoRes.data.results.length > 0) {\n                            farmingInfo = farmingInfoRes.data.results[0];\n                        } else {\n                            const newFarmingInfo = await api.post('/farming-info/', {\n                                schlag_id: schlag.id,\n                                type_of_farming: schlag.type_of_farming || schlag.feldstueck?.farm_year?.type_of_farming || ''\n                            });\n                            farmingInfo = newFarmingInfo.data;\n                        }\n                    } catch (err) {\n                        console.error('Error getting/creating FarmingInfo:', err);\n                        throw new Error(`Fehler beim Erstellen der Bewirtschaftungsinfo für Schlag #${schlag.nummer}`);\n                    }\n\n                    // Create the operation\n                    const operationData = {\n                        farming_info_id: farmingInfo.id,\n                        date: operationDate,\n                        area_ha: roundTo4(schlagAreas[schlag.id] || parseFloat(schlag.flaeche_netto) || 0),\n                        fuel_type_id: selectedFuelType,\n                        operation_type_id: opType.id,\n                        ride_uuid: rideUuid,\n                        notes: sharedNotes,\n                        default_unit_id: operationTypeDetails[opType.id]?.default_unit_id || null\n                    };\n\n                    // Add conditional data based on operation type\n                    const details = operationTypeDetails[opType.id];\n                    const code = opType.code;\n\n                    const roundedDetails = JSON.parse(JSON.stringify(details || {}));\n                    if (roundedDetails?.seeding_data) roundedDetails.seeding_data.seed_amount = roundTo4(roundedDetails.seeding_data.seed_amount);\n                    if (roundedDetails?.fertilizing_data) roundedDetails.fertilizing_data.amount = roundTo4(roundedDetails.fertilizing_data.amount);\n                    if (Array.isArray(roundedDetails?.fertilizing_data_items)) {\n                        roundedDetails.fertilizing_data_items = roundedDetails.fertilizing_data_items.map(i => ({\n                            ...i,\n                            amount: roundTo4(i.amount)\n                        }));\n                    }\n                    if (roundedDetails?.pest_control_data) roundedDetails.pest_control_data.amount = roundTo4(roundedDetails.pest_control_data.amount);\n                    if (Array.isArray(roundedDetails?.pest_control_data_items)) {\n                        roundedDetails.pest_control_data_items = roundedDetails.pest_control_data_items.map(i => ({\n                            ...i,\n                            amount: roundTo4(i.amount)\n                        }));\n                    }\n                    if (roundedDetails?.irrigation_data) roundedDetails.irrigation_data.irrigation_amount = roundTo4(roundedDetails.irrigation_data.irrigation_amount);\n                    if (roundedDetails?.harvest_data) roundedDetails.harvest_data.harvest_amount = roundTo4(roundedDetails.harvest_data.harvest_amount);\n\n                    if (code === 'SOIL_WORK' && roundedDetails.soil_work_data?.soil_work_type_id) {\n                        operationData.soil_work_data = roundedDetails.soil_work_data;\n                    } else if (code.includes('SEEDING') && roundedDetails.seeding_data?.seed_unit_id) {\n                        operationData.seeding_data = roundedDetails.seeding_data;\n                    } else if (code === 'FERTILIZING') {\n                        if (Array.isArray(roundedDetails.fertilizing_data_items) && roundedDetails.fertilizing_data_items.length > 0) {\n                            operationData.fertilizing_data_items = roundedDetails.fertilizing_data_items;\n                        } else if (roundedDetails.fertilizing_data?.unit_id) {\n                            operationData.fertilizing_data = roundedDetails.fertilizing_data;\n                        }\n                    } else if (code === 'PEST_CONTROL') {\n                        if (Array.isArray(roundedDetails.pest_control_data_items) && roundedDetails.pest_control_data_items.length > 0) {\n                            operationData.pest_control_data_items = roundedDetails.pest_control_data_items;\n                        } else if (roundedDetails.pest_control_data?.unit_id) {\n                            operationData.pest_control_data = roundedDetails.pest_control_data;\n                        }\n                    } else if (code === 'IRRIGATION' && roundedDetails.irrigation_data?.irrigation_unit_id) {\n                        operationData.irrigation_data = roundedDetails.irrigation_data;\n                    } else if (code === 'HARVEST' && roundedDetails.harvest_data?.harvest_unit_id) {\n                        operationData.harvest_data = roundedDetails.harvest_data;\n                    }\n\n                    const createdOp = await api.post('/operations/', operationData);\n                    createdOperations.push(createdOp.data);\n                }\n            }\n\n            if (onSuccess) {\n                onSuccess(createdOperations);\n            }\n            onHide();\n        } catch (err) {\n            console.error('Error saving operations:', err);\n            setError('Fehler beim Speichern: ' + (err.response?.data?.detail || err.message));\n        } finally {\n            setSaving(false);\n        }\n    };\n\n    const renderStepContent = () => {\n        // In edit mode, render a single combined form\n        if (isEditMode) {\n            return renderEditForm();\n        }\n        \n        switch (currentStep) {\n            case 1:\n                return renderStep1();\n            case 2:\n                return renderStep2();\n            case 3:\n                return renderStep3();\n            case 4:\n                return renderStep4();\n            case 5:\n                return renderStep5();\n            case 6:\n                return renderStep6();\n            default:\n                return null;\n        }\n    };\n\n    // Render a single combined form for edit mode\n    const renderEditForm = () => {\n        const currentOpType = selectedOperationTypes[0];\n        if (!currentOpType) return null;\n\n        const details = operationTypeDetails[currentOpType.id] || {};\n        const code = currentOpType.code;\n        const schlag = selectedSchlaege[0];\n\n        // Filter fuel types based on operation type (same logic as renderStep4)\n        const isIrrigationOperation = code === 'IRRIGATION';\n        const filteredFuelTypes = fuelTypes.filter(fuel => {\n            // If operation is irrigation, only show \"Elektro\"\n            if (isIrrigationOperation) {\n                return fuel.name === 'Elektro';\n            }\n            // For all other operations, hide \"Elektro\"\n            return fuel.name !== 'Elektro';\n        });\n\n        return (\n            <Card>\n                <Card.Body>\n                    {/* Operation Type Info */}\n                    <div className=\"d-flex align-items-center gap-3 mb-4 pb-3 border-bottom\">\n                        {getOperationIcon(currentOpType.name) && (\n                            <img \n                                src={getOperationIcon(currentOpType.name)} \n                                alt={currentOpType.name}\n                                style={{ width: '40px', height: '40px' }}\n                            />\n                        )}\n                        <div>\n                            <h5 className=\"mb-1\">{currentOpType.name}</h5>\n                            {schlag && (\n                                <small className=\"text-muted\">{schlag.displayName}</small>\n                            )}\n                        </div>\n                    </div>\n\n                    {/* Date, Fuel, and Area */}\n                    <Row className=\"mb-3\">\n                        <Col md={4}>\n                            <Form.Group>\n                                <Form.Label>Datum</Form.Label>\n                                <Form.Control\n                                    type=\"date\"\n                                    value={operationDate}\n                                    onChange={(e) => setOperationDate(e.target.value)}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group>\n                                <Form.Label>Kraftstoff</Form.Label>\n                                <Select\n                                    placeholder=\"Bitte wählen...\"\n                                    menuPortalTarget={document.body}\n                                    menuPosition=\"fixed\"\n                                    styles={selectStyles}\n                                    maxMenuHeight={200}\n                                    {...mobileSelectProps}\n                                    value={selectedFuelType ? filteredFuelTypes.find(f => f.id == selectedFuelType) ? { value: selectedFuelType, label: filteredFuelTypes.find(f => f.id == selectedFuelType).name } : null : null}\n                                    options={filteredFuelTypes.map(fuel => ({ value: fuel.id, label: fuel.name }))}\n                                    onChange={(option) => setSelectedFuelType(option ? option.value : '')}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group>\n                                <Form.Label>Fläche (ha)</Form.Label>\n                                <Form.Control\n                                    type=\"number\"\n                                    step=\"0.0001\"\n                                    value={schlag ? (schlagAreas[schlag.id] || '') : ''}\n                                    onChange={(e) => schlag && handleAreaChange(schlag.id, e.target.value)}\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    {/* Operation-specific fields */}\n                    <hr className=\"my-4\" />\n                    <h6 className=\"mb-3\">Details</h6>\n                    {renderConditionalFields(code, currentOpType.id, details)}\n\n                    {/* Notes */}\n                    <Form.Group className=\"mt-4\">\n                        <Form.Label>Notizen (optional)</Form.Label>\n                        <Form.Control\n                            as=\"textarea\"\n                            rows={2}\n                            value={sharedNotes}\n                            onChange={(e) => setSharedNotes(e.target.value)}\n                            placeholder=\"Notizen...\"\n                        />\n                    </Form.Group>\n                </Card.Body>\n            </Card>\n        );\n    };\n\n    const renderStep1 = () => (\n        <Card>\n            <Card.Header>\n                <Card.Title className=\"h6 mb-0\">\n                    <i className=\"bi bi-building me-2\"></i>\n                    Schritt {getDisplayStepInfo().current}: Betrieb und Erntejahr auswählen\n                </Card.Title>\n            </Card.Header>\n            <Card.Body>\n                {farms && farms.length > 1 ? (\n                    <Form.Group className=\"mb-3\">\n                        <Form.Label>Betrieb</Form.Label>\n                        <Form.Select\n                            value={selectedFarm?.id || ''}\n                            onChange={(e) => {\n                                const farm = farms.find(f => f.id === parseInt(e.target.value));\n                                handleFarmSelect(farm);\n                            }}\n                        >\n                            <option value=\"\">Bitte wählen...</option>\n                            {farms.map(farm => (\n                                <option key={farm.id} value={farm.id}>\n                                    {farm.name || farm.hauptbetriebsnummer}\n                                </option>\n                            ))}\n                        </Form.Select>\n                    </Form.Group>\n                ) : farms && farms.length === 1 ? (\n                    <Alert variant=\"info\">\n                        <strong>Betrieb:</strong> {farms[0].name || farms[0].hauptbetriebsnummer}\n                    </Alert>\n                ) : null}\n\n                {selectedFarm && (\n                    <Form.Group className=\"mb-3\">\n                        <Form.Label>Erntejahr</Form.Label>\n                        <Form.Select\n                            value={selectedYear?.id || ''}\n                            onChange={(e) => {\n                                const year = availableYears.find(y => y.id === parseInt(e.target.value));\n                                handleYearSelect(year);\n                            }}\n                        >\n                            <option value=\"\">Bitte wählen...</option>\n                            {availableYears.map(year => (\n                                <option key={year.id} value={year.id}>\n                                    {year.year}\n                                </option>\n                            ))}\n                        </Form.Select>\n                    </Form.Group>\n                )}\n            </Card.Body>\n        </Card>\n    );\n\n    const renderStep2 = () => (\n        <Card>\n            <Card.Header>\n                <Card.Title className=\"h6 mb-0\">\n                    <i className=\"bi bi-list-task me-2\"></i>\n                    Schritt {getDisplayStepInfo().current}: Maßnahmentyp(en) auswählen\n                {selectedOperationTypes.length > 0 && (\n                    <Badge\n                      bg=\"success\"\n                      pill\n                      style={{ \n                        position: 'absolute', \n                        top: '-8px', \n                        right: '-8px',\n                        fontSize: '0.65rem'\n                    }}\n                    >\n                        {selectedOperationTypes.length}\n                    </Badge>\n                )}\n                </Card.Title>\n            </Card.Header>\n            <Card.Body>\n                {/* <Alert variant=\"info\" className=\"mb-3\">\n                    <i className=\"bi bi-info-circle me-2\"></i>\n                    bei mehreren Maßnahmen mit einer Ausfahrt: Mehrfachauswahl.\n                </Alert> */}\n                <ListGroup>\n                    {operationTypes.map(opType => {\n                        const isSelected = selectedOperationTypes.some(t => t.id === opType.id);\n                        const iconUrl = getOperationIcon(opType.name);\n                        return (\n                            <ListGroup.Item\n                                key={opType.id}\n                                action\n                                active={isSelected}\n                                onClick={() => handleOperationTypeToggle(opType)}\n                                className=\"d-flex justify-content-between align-items-center\"\n                            >\n                                <div className=\"d-flex align-items-center gap-3\">\n                                    {iconUrl && (\n                                        <img \n                                            className='icon-img'\n                                            src={iconUrl} \n                                            alt={opType.name}\n                                            style={{ width: '35px', height: '35px' }}\n                                            title={opType.name}\n                                        />\n                                    )}\n                                    <div>\n                                        <strong>{opType.name}</strong>\n                                        {opType.description && (\n                                            <div className=\"small text-muted\">{opType.description}</div>\n                                        )}\n                                    </div>\n                                </div>\n                                {isSelected && (\n                                    <i className=\"bi bi-check-circle-fill text-success\"></i>\n                                )}\n                            </ListGroup.Item>\n                        );\n                    })}\n                </ListGroup>\n            </Card.Body>\n        </Card>\n    );\n\n    const renderStep3 = () => (\n        <Card>\n            <Card.Header>\n                <Card.Title className=\"h6 mb-0\">\n                    <i className=\"bi bi-grid-3x3 me-2\"></i>\n                    Schritt {getDisplayStepInfo().current}: Schlag / Schläge auswählen\n\n                    {selectedSchlaege.length > 0 && (\n                        <Badge\n                        bg=\"success\"\n                        pill\n                        style={{ \n                            position: 'absolute', \n                            top: '-8px', \n                            right: '-8px',\n                            fontSize: '0.65rem'\n                        }}\n                        >\n                            {selectedSchlaege.length}\n                        </Badge>\n                    )}\n\n                </Card.Title>\n            </Card.Header>\n            <Card.Body>\n                <Form.Group className=\"mb-3\">\n                    <InputGroup>\n                        <InputGroup.Text>\n                            <i className=\"bi bi-search\"></i>\n                        </InputGroup.Text>\n                        <Form.Control\n                            type=\"text\"\n                            placeholder=\"Suche nach Feldstück,Schlag oder Kultur...\"\n                            value={schlagSearchTerm}\n                            onChange={(e) => setSchlagSearchTerm(e.target.value)}\n                        />\n                        {schlagSearchTerm && (\n                            <Button\n                                variant=\"outline-secondary\"\n                                onClick={() => setSchlagSearchTerm('')}\n                            >\n                                <i className=\"bi bi-x\"></i>\n                            </Button>\n                        )}\n                    </InputGroup>\n                </Form.Group>\n\n                {loading ? (\n                    <div className=\"text-center py-4\">\n                        <Spinner animation=\"border\" />\n                        <p className=\"mt-2 text-muted\">Lade Schläge...</p>\n                    </div>\n                ) : filteredSchlaege.length === 0 ? (\n                    <Alert variant=\"warning\">\n                        Keine Schläge gefunden. Bitte überprüfen Sie die Auswahl von Betrieb und Jahr.\n                    </Alert>\n                ) : (\n                    <div style={{ maxHeight: '400px', overflowY: 'auto' }}>\n                        <ListGroup>\n                            {filteredSchlaege.map(schlag => {\n                                const isSelected = selectedSchlaege.some(s => s.id === schlag.id);\n                                return (\n                                    <ListGroup.Item\n                                        key={schlag.id}\n                                        action\n                                        active={isSelected}\n                                        onClick={() => handleSchlagToggle(schlag)}\n                                        className=\"d-flex justify-content-between align-items-center\"\n                                    >\n                                        <div>\n                                            <strong>\n                                                {schlag.displayName}\n                                                {schlag.crop && (\n                                                    <span className=\"ms-2 text-muted\">\n                                                        ({schlag.crop.name})\n                                                    </span>\n                                                )}\n                                            </strong>\n                                            <div className=\"small text-muted\">\n                                                Fläche: {schlag.flaeche_netto} ha\n                                            </div>\n                                        </div>\n                                        {isSelected && (\n                                            <i className=\"bi bi-check-circle-fill text-success\"></i>\n                                        )}\n                                    </ListGroup.Item>\n                                );\n                            })}\n                        </ListGroup>\n                    </div>\n                )}\n            </Card.Body>\n        </Card>\n    );\n\n    const renderStep4 = () => {\n        // Filter fuel types based on selected operation types\n        const hasIrrigationOperation = selectedOperationTypes.some(opType => opType.code === 'IRRIGATION');\n        const filteredFuelTypes = fuelTypes.filter(fuel => {\n            // If any selected operation is irrigation, only show \"Elektro\"\n            if (hasIrrigationOperation) {\n                return fuel.name === 'Elektro';\n            }\n            // For all other operations, hide \"Elektro\"\n            return fuel.name !== 'Elektro';\n        });\n\n        return (\n            <Card>\n                <Card.Header>\n                    <Card.Title className=\"h6 mb-0\">\n                        <i className=\"bi bi-calendar-check me-2\"></i>\n                        Schritt {getDisplayStepInfo().current}: Datum, Kraftstoff und Flächen\n                    </Card.Title>\n                </Card.Header>\n                <Card.Body>\n                    <Row>\n                        <Col md={6}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Datum</Form.Label>\n                                <Form.Control\n                                    type=\"date\"\n                                    value={operationDate}\n                                    onChange={(e) => setOperationDate(e.target.value)}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={6}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Kraftstoff</Form.Label>\n                                <Select\n                                    placeholder=\"Bitte wählen...\"\n                                    menuPortalTarget={document.body}\n                                    menuPosition=\"fixed\"\n                                    styles={selectStyles}\n                                    maxMenuHeight={200}\n                                    value={selectedFuelType ? filteredFuelTypes.find(f => f.id == selectedFuelType) ? { value: selectedFuelType, label: filteredFuelTypes.find(f => f.id == selectedFuelType).name } : null : null}\n                                    options={filteredFuelTypes.map(fuel => ({ value: fuel.id, label: fuel.name }))}\n                                    onChange={(option) => setSelectedFuelType(option ? option.value : '')}\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    {selectedSchlaege.length >= 1 && (\n                        <>\n                            <hr />\n                            <h6>Flächen pro Schlag bearbeiten</h6>\n                            <Table striped bordered size=\"sm\">\n                                <thead>\n                                    <tr>\n                                        <th>Schlag</th>\n                                        <th>Standard-Fläche</th>\n                                        <th>Angewendete Fläche (ha)</th>\n                                    </tr>\n                                </thead>\n                                <tbody>\n                                    {selectedSchlaege.map(schlag => (\n                                        <tr key={schlag.id}>\n                                            <td>{schlag.displayName}</td>\n                                            <td>{schlag.flaeche_netto} ha</td>\n                                            <td>\n                                                <Form.Control\n                                                    type=\"number\"\n                                                    step=\"0.0001\"\n                                                    value={schlagAreas[schlag.id] || ''}\n                                                    onChange={(e) => handleAreaChange(schlag.id, e.target.value)}\n                                                    size=\"sm\"\n                                                />\n                                            </td>\n                                        </tr>\n                                    ))}\n                                </tbody>\n                            </Table>\n                        </>\n                    )}\n                </Card.Body>\n            </Card>\n        );\n    };\n\n    const renderStep5 = () => {\n        const currentOpType = selectedOperationTypes[currentDetailStep];\n        if (!currentOpType) return null;\n\n        const details = operationTypeDetails[currentOpType.id] || {};\n        const code = currentOpType.code;\n\n        return (\n            <Card>\n                <Card.Header>\n                    <Card.Title className=\"h6 mb-0\">\n                        <i className=\"bi bi-gear me-2\"></i>\n                        Schritt {getDisplayStepInfo().current}: Details für {currentOpType.name}\n                        <Badge bg=\"secondary\" className=\"ms-2\">\n                            {currentDetailStep + 1} von {selectedOperationTypes.length}\n                        </Badge>\n                    </Card.Title>\n                </Card.Header>\n                <Card.Body>\n                    {renderConditionalFields(code, currentOpType.id, details)}\n\n                    {currentDetailStep === selectedOperationTypes.length - 1 && (\n                        <Form.Group className=\"mt-3\">\n                            <Form.Label>Notizen (optional)</Form.Label>\n                            <Form.Control\n                                as=\"textarea\"\n                                rows={3}\n                                value={sharedNotes}\n                                onChange={(e) => setSharedNotes(e.target.value)}\n                                placeholder=\"Notizen für alle Maßnahmen...\"\n                            />\n                        </Form.Group>\n                    )}\n                </Card.Body>\n            </Card>\n        );\n    };\n\n    const renderConditionalFields = (opTypeCode, opTypeId, details) => {\n        switch (opTypeCode) {\n            case 'SOIL_WORK':\n                const selectedSoilWorkType = options.soil_work_types.find(t => t.id == details.soil_work_data?.soil_work_type_id);\n                const needsDepth = selectedSoilWorkType?.needs_depth || false;\n                const soilWorkTypeOptions = options.soil_work_types.map(type => ({ value: type.id, label: type.name }));\n\n                return (\n                    <Row>\n                        <Col md={needsDepth ? 6 : 12}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Art der Bodenbearbeitung *</Form.Label>\n                                <Select\n                                    placeholder=\"Bitte wählen...\"\n                                    menuPortalTarget={document.body}\n                                    menuPosition=\"fixed\"\n                                    styles={selectStyles}\n                                    maxMenuHeight={200}\n                                    {...mobileSelectProps}\n                                    value={details.soil_work_data?.soil_work_type_id ? soilWorkTypeOptions.find(o => o.value == details.soil_work_data.soil_work_type_id) : null}\n                                    options={soilWorkTypeOptions}\n                                    onChange={(option) => {\n                                        const val = option ? option.value : '';\n                                        handleDetailChange(opTypeId, 'soil_work_data', 'soil_work_type_id', val);\n                                        // Clear depth if the new type doesn't need it\n                                        const type = options.soil_work_types.find(t => t.id == val);\n                                        if (!type?.needs_depth) {\n                                            handleDetailChange(opTypeId, 'soil_work_data', 'depth', '');\n                                        }\n                                    }}\n                                />\n                            </Form.Group>\n                        </Col>\n                        {needsDepth && (\n                            <Col md={6}>\n                                <Form.Group className=\"mb-3\">\n                                    <Form.Label>Tiefe *<sup> Tief &gt;= 25cm</sup></Form.Label>\n                                    <Select\n                                        placeholder=\"Bitte wählen...\"\n                                        menuPortalTarget={document.body}\n                                        menuPosition=\"fixed\"\n                                        styles={selectStyles}\n                                        maxMenuHeight={200}\n                                        {...mobileSelectProps}\n                                        value={details.soil_work_data?.depth ? { value: details.soil_work_data.depth, label: details.soil_work_data.depth === 'DEEP' ? 'Tief' : 'Seicht' } : { value: 'SHALLOW', label: 'Seicht' }}\n                                        options={[{ value: 'SHALLOW', label: 'Seicht' }, { value: 'DEEP', label: 'Tief' }]}\n                                        onChange={(option) => handleDetailChange(opTypeId, 'soil_work_data', 'depth', option ? option.value : 'SHALLOW')}\n                                    />\n                                </Form.Group>\n                            </Col>\n                        )}\n                    </Row>\n                );\n\n            case 'SEEDING_MAIN':\n            case 'SEEDING_CATCH':\n                // Get selected crop to determine unit category filter\n                const selectedSeedingCrop = options.crops.find(c => c.id == details.seeding_data?.crop_id);\n                const seedingUnitCategory = selectedSeedingCrop?.default_unit_category;\n                \n                // Filter units based on crop's default_unit_category, or default to WEIGHT\n                const seedingUnitOptions = options.units.filter(u => {\n                    if (seedingUnitCategory) {\n                        return u.category === seedingUnitCategory;\n                    }\n                    return u.category === 'WEIGHT';\n                }).map(unit => ({ value: unit.id, label: `${unit.name} (${unit.code})` }));\n                \n                const seedingCropOptions = options.crops.filter(c => opTypeCode === 'SEEDING_MAIN' ? c.is_main_crop : c.is_catch_crop).map(crop => ({ value: crop.id, label: crop.name }));\n\n                return (\n                    <Row>\n                        <Col md={4}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Kultur</Form.Label>\n                                <Select\n                                    isClearable\n                                    placeholder=\"Bitte wählen...\"\n                                    menuPortalTarget={document.body}\n                                    menuPosition=\"fixed\"\n                                    styles={selectStyles}\n                                    maxMenuHeight={200}\n                                    {...mobileSelectProps}\n                                    value={details.seeding_data?.crop_id ? seedingCropOptions.find(o => o.value == details.seeding_data.crop_id) : null}\n                                    options={seedingCropOptions}\n                                    onChange={(option) => {\n                                        const val = option ? option.value : '';\n                                        \n                                        if (val) {\n                                            const crop = options.crops.find(c => c.id == val);\n                                            \n                                            if (crop?.default_unit) {\n                                                // Handle both cases: default_unit as ID or as object\n                                                const unitId = typeof crop.default_unit === 'object' ? crop.default_unit.id : crop.default_unit;\n                                                \n                                                // Update both crop_id and seed_unit_id together\n                                                setOperationTypeDetails(prev => {\n                                                    const opDetails = prev[opTypeId];\n                                                    return {\n                                                        ...prev,\n                                                        [opTypeId]: {\n                                                            ...opDetails,\n                                                            seeding_data: {\n                                                                ...opDetails.seeding_data,\n                                                                crop_id: val,\n                                                                seed_unit_id: unitId\n                                                            }\n                                                        }\n                                                    };\n                                                });\n                                            } else {\n                                                // No default_unit: clear the unit selection\n                                                setOperationTypeDetails(prev => {\n                                                    const opDetails = prev[opTypeId];\n                                                    return {\n                                                        ...prev,\n                                                        [opTypeId]: {\n                                                            ...opDetails,\n                                                            seeding_data: {\n                                                                ...opDetails.seeding_data,\n                                                                crop_id: val,\n                                                                seed_unit_id: ''\n                                                            }\n                                                        }\n                                                    };\n                                                });\n                                            }\n                                        } else {\n                                            // Crop cleared: clear both crop_id and seed_unit_id\n                                            setOperationTypeDetails(prev => {\n                                                const opDetails = prev[opTypeId];\n                                                return {\n                                                    ...prev,\n                                                    [opTypeId]: {\n                                                        ...opDetails,\n                                                        seeding_data: {\n                                                            ...opDetails.seeding_data,\n                                                            crop_id: '',\n                                                            seed_unit_id: ''\n                                                        }\n                                                    }\n                                                };\n                                            });\n                                        }\n                                    }}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Saatgutmenge</Form.Label>\n                                <Form.Control\n                                    type=\"number\"\n                                    step=\"0.01\"\n                                    value={details.seeding_data?.seed_amount || ''}\n                                    onChange={(e) => handleDetailChange(opTypeId, 'seeding_data', 'seed_amount', e.target.value)}\n                                    onBlur={(e) => handleDetailBlur(opTypeId, 'seeding_data', 'seed_amount', e.target.value)}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Einheit *</Form.Label>\n                                <Select\n                                    placeholder=\"Bitte wählen...\"\n                                    menuPortalTarget={document.body}\n                                    menuPosition=\"fixed\"\n                                    styles={selectStyles}\n                                    maxMenuHeight={200}\n                                    {...mobileSelectProps}\n                                    value={details.seeding_data?.seed_unit_id ? seedingUnitOptions.find(o => o.value == details.seeding_data.seed_unit_id) : null}\n                                    options={seedingUnitOptions}\n                                    onChange={(option) => handleDetailChange(opTypeId, 'seeding_data', 'seed_unit_id', option ? option.value : '')}\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n                );\n\n            case 'FERTILIZING':\n                const fertItems = details.fertilizing_data_items || [details.fertilizing_data].filter(Boolean);\n\n                const updateFertItem = (idx, field, value) => {\n                    setOperationTypeDetails(prev => {\n                        const opDetails = prev[opTypeId] || {};\n                        const items = (opDetails.fertilizing_data_items || []).slice();\n                        items[idx] = { ...(items[idx] || {}), [field]: value };\n                        return {\n                            ...prev,\n                            [opTypeId]: {\n                                ...opDetails,\n                                fertilizing_data_items: items\n                            }\n                        };\n                    });\n                };\n\n                const addFertItem = () => {\n                    setOperationTypeDetails(prev => {\n                        const opDetails = prev[opTypeId] || {};\n                        const items = (opDetails.fertilizing_data_items || []).slice();\n                        items.push({\n                            specific_product_id: '',\n                            organic_fertilizer_type_id: '',\n                            nitrogen_percent: '',\n                            phosphorus_percent: '',\n                            potassium_percent: '',\n                            amount: '',\n                            unit_id: ''\n                        });\n                        return { ...prev, [opTypeId]: { ...opDetails, fertilizing_data_items: items } };\n                    });\n                };\n\n                const removeFertItem = (idx) => {\n                    setOperationTypeDetails(prev => {\n                        const opDetails = prev[opTypeId] || {};\n                        const items = (opDetails.fertilizing_data_items || []).slice();\n                        items.splice(idx, 1);\n                        return { ...prev, [opTypeId]: { ...opDetails, fertilizing_data_items: items.length ? items : items } };\n                    });\n                };\n\n                return (\n                    <>\n                        {fertItems.map((item, idx) => {\n                            const hasSpecificProduct = item?.specific_product_id;\n                            const hasOrganicFertilizer = item?.organic_fertilizer_type_id;\n                            const hasManualValues = item?.nitrogen_percent || item?.phosphorus_percent || item?.potassium_percent;\n\n                            const selectedProduct = options.fertilizer_products.find(p => p.id == item?.specific_product_id);\n                            const selectedOrganicType = options.organic_fertilizer_types.find(t => t.id == item?.organic_fertilizer_type_id);\n                            const defaultUnitCategory = selectedProduct?.default_unit_category || selectedOrganicType?.default_unit_category;\n\n                            const filteredUnits = options.units.filter(u => {\n                                if (defaultUnitCategory) return u.category === defaultUnitCategory;\n                                return ['WEIGHT', 'VOLUME'].includes(u.category);\n                            });\n\n                            return (\n                                <Card key={idx} className=\"mb-3\">\n                                    <Card.Header className=\"d-flex justify-content-between align-items-center\">\n                                        <div>\n                                            Mischung {idx + 1}\n                                        </div>\n                                        <div className=\"d-flex gap-2\">\n                                            {fertItems.length > 1 && (\n                                                <Button variant=\"outline-danger\" size=\"sm\" onClick={() => removeFertItem(idx)}>\n                                                    <i className=\"bi bi-trash\"></i>\n                                                </Button>\n                                            )}\n                                            {idx === fertItems.length - 1 && (\n                                                <Button variant=\"outline-secondary\" size=\"sm\" onClick={addFertItem}>\n                                                    <i className=\"bi bi-plus\"></i> Produkt\n                                                </Button>\n                                            )}\n                                        </div>\n                                    </Card.Header>\n                                    <Card.Body>\n                                        <Row>\n                                            {!hasManualValues && !hasOrganicFertilizer && (\n                                                <Col md={hasSpecificProduct ? 12 : 6}>\n                                                    <Form.Group className=\"mb-3\">\n                                                        <Form.Label>Spezifisches Produkt</Form.Label>\n                                                        <Select\n                                                            isClearable\n                                                            placeholder=\"Kein spezifisches Produkt\"\n                                                            menuPortalTarget={document.body}\n                                                            menuPosition=\"fixed\"\n                                                            styles={selectStyles}\n                                                            maxMenuHeight={200}\n                                                            {...mobileSelectProps}\n                                                            value={item?.specific_product_id ?\n                                                                options.fertilizer_products.find(p => p.id == item.specific_product_id)\n                                                                    ? { value: item.specific_product_id, label: `${options.fertilizer_products.find(p => p.id == item.specific_product_id).name}` }\n                                                                    : null\n                                                                : null\n                                                            }\n                                                            options={options.fertilizer_products.map(product => ({\n                                                                value: product.id,\n                                                                label: `${product.name} (${product.code})`\n                                                            }))}\n                                                            onChange={(selectedOption) => {\n                                                                const val = selectedOption?.value || '';\n                                                                updateFertItem(idx, 'specific_product_id', val);\n                                                                const product = options.fertilizer_products.find(p => p.id == val);\n                                                                if (product?.default_unit) {\n                                                                    updateFertItem(idx, 'unit_id', product.default_unit);\n                                                                }\n                                                            }}\n                                                        />\n                                                    </Form.Group>\n                                                </Col>\n                                            )}\n                                            {!hasManualValues && !hasSpecificProduct && (\n                                                <Col md={hasOrganicFertilizer ? 12 : 6}>\n                                                    <Form.Group className=\"mb-3\">\n                                                        <Form.Label>Organischer Dünger</Form.Label>\n                                                        <Select\n                                                            isClearable\n                                                            placeholder=\"Kein organischer Dünger\"\n                                                            menuPortalTarget={document.body}\n                                                            menuPosition=\"fixed\"\n                                                            styles={selectStyles}\n                                                            maxMenuHeight={200}\n                                                            {...mobileSelectProps}\n                                                            value={item?.organic_fertilizer_type_id ?\n                                                                options.organic_fertilizer_types.find(t => t.id == item.organic_fertilizer_type_id)\n                                                                    ? { value: item.organic_fertilizer_type_id, label: options.organic_fertilizer_types.find(t => t.id == item.organic_fertilizer_type_id).name }\n                                                                    : null\n                                                                : null\n                                                            }\n                                                            options={options.organic_fertilizer_types.map(type => ({\n                                                                value: type.id,\n                                                                label: type.name\n                                                            }))}\n                                                            onChange={(selectedOption) => {\n                                                                const val = selectedOption?.value || '';\n                                                                updateFertItem(idx, 'organic_fertilizer_type_id', val);\n                                                                const type = options.organic_fertilizer_types.find(t => t.id == val);\n                                                                if (type?.default_unit) {\n                                                                    updateFertItem(idx, 'unit_id', type.default_unit);\n                                                                }\n                                                            }}\n                                                        />\n                                                    </Form.Group>\n                                                </Col>\n                                            )}\n                                        </Row>\n\n                                        <Row>\n                                            {!hasSpecificProduct && !hasOrganicFertilizer && (\n                                                <>\n                                                    <Col md={3}>\n                                                        <Form.Group className=\"mb-3\">\n                                                            <Form.Label>N-Gehalt (%)</Form.Label>\n                                                            <Form.Control\n                                                                type=\"number\"\n                                                                step=\"0.1\"\n                                                                value={item?.nitrogen_percent || ''}\n                                                                onChange={(e) => updateFertItem(idx, 'nitrogen_percent', e.target.value)}\n                                                            />\n                                                        </Form.Group>\n                                                    </Col>\n                                                    <Col md={3}>\n                                                        <Form.Group className=\"mb-3\">\n                                                            <Form.Label>P-Gehalt (%)</Form.Label>\n                                                            <Form.Control\n                                                                type=\"number\"\n                                                                step=\"0.1\"\n                                                                value={item?.phosphorus_percent || ''}\n                                                                onChange={(e) => updateFertItem(idx, 'phosphorus_percent', e.target.value)}\n                                                            />\n                                                        </Form.Group>\n                                                    </Col>\n                                                    <Col md={3}>\n                                                        <Form.Group className=\"mb-3\">\n                                                            <Form.Label>K-Gehalt (%)</Form.Label>\n                                                            <Form.Control\n                                                                type=\"number\"\n                                                                step=\"0.1\"\n                                                                value={item?.potassium_percent || ''}\n                                                                onChange={(e) => updateFertItem(idx, 'potassium_percent', e.target.value)}\n                                                            />\n                                                        </Form.Group>\n                                                    </Col>\n                                                </>\n                                            )}\n                                            <Col md={hasSpecificProduct || hasOrganicFertilizer ? 12 : 3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Menge *</Form.Label>\n                                                    <InputGroup>\n                                                        <Form.Control\n                                                            type=\"number\"\n                                                            step=\"0.01\"\n                                                            value={item?.amount || ''}\n                                                            onChange={(e) => updateFertItem(idx, 'amount', e.target.value)}\n                                                            onBlur={(e) => updateFertItem(idx, 'amount', roundTo4(e.target.value))}\n                                                        />\n                                                        <Form.Select\n                                                            style={{ maxWidth: '100px' }}\n                                                            value={item?.unit_id || ''}\n                                                            onChange={(e) => updateFertItem(idx, 'unit_id', e.target.value)}\n                                                        >\n                                                            <option value=\"\">Einheit</option>\n                                                            {filteredUnits.map(unit => (\n                                                                <option key={unit.id} value={unit.id}>\n                                                                    {unit.code}\n                                                                </option>\n                                                            ))}\n                                                        </Form.Select>\n                                                    </InputGroup>\n                                                </Form.Group>\n                                            </Col>\n                                        </Row>\n                                    </Card.Body>\n                                </Card>\n                            );\n                        })}\n                    </>\n                );\n\n            case 'PEST_CONTROL':\n                const psmItems = details.pest_control_data_items || [details.pest_control_data].filter(Boolean);\n\n                const updatePsmItem = (idx, field, value) => {\n                    setOperationTypeDetails(prev => {\n                        const opDetails = prev[opTypeId] || {};\n                        const items = (opDetails.pest_control_data_items || []).slice();\n                        items[idx] = { ...(items[idx] || {}), [field]: value };\n                        return {\n                            ...prev,\n                            [opTypeId]: {\n                                ...opDetails,\n                                pest_control_data_items: items\n                            }\n                        };\n                    });\n                };\n\n                const addPsmItem = () => {\n                    setOperationTypeDetails(prev => {\n                        const opDetails = prev[opTypeId] || {};\n                        const items = (opDetails.pest_control_data_items || []).slice();\n                        items.push({\n                            specific_product_id: '',\n                            herbicide_content_gl: '',\n                            fungicide_content_gl: '',\n                            insecticide_content_gl: '',\n                            amount: '',\n                            unit_id: ''\n                        });\n                        return { ...prev, [opTypeId]: { ...opDetails, pest_control_data_items: items } };\n                    });\n                };\n\n                const removePsmItem = (idx) => {\n                    setOperationTypeDetails(prev => {\n                        const opDetails = prev[opTypeId] || {};\n                        const items = (opDetails.pest_control_data_items || []).slice();\n                        items.splice(idx, 1);\n                        return { ...prev, [opTypeId]: { ...opDetails, pest_control_data_items: items.length ? items : items } };\n                    });\n                };\n\n                return (\n                    <>\n                        {psmItems.map((item, idx) => {\n                            const hasSpecificPesticideProduct = item?.specific_product_id;\n                            const hasManualPesticideValues = item?.herbicide_content_gl || item?.fungicide_content_gl || item?.insecticide_content_gl;\n                            const selectedPesticide = options.pesticide_products.find(p => p.id == item?.specific_product_id);\n                            const pesticideDefaultUnitCategory = selectedPesticide?.default_unit_category;\n\n                            const filteredPesticideUnits = options.units.filter(u => {\n                                if (pesticideDefaultUnitCategory) return u.category === pesticideDefaultUnitCategory;\n                                return u.category === 'VOLUME';\n                            });\n\n                            return (\n                                <Card key={idx} className=\"mb-3\">\n                                    <Card.Header className=\"d-flex justify-content-between align-items-center\">\n                                        <div>Mischung {idx + 1}</div>\n                                        <div className=\"d-flex gap-2\">\n                                            {psmItems.length > 1 && (\n                                                <Button variant=\"outline-danger\" size=\"sm\" onClick={() => removePsmItem(idx)}>\n                                                    <i className=\"bi bi-trash\"></i>\n                                                </Button>\n                                            )}\n                                            {idx === psmItems.length - 1 && (\n                                                <Button variant=\"outline-secondary\" size=\"sm\" onClick={addPsmItem}>\n                                                    <i className=\"bi bi-plus\"></i> Produkt\n                                                </Button>\n                                            )}\n                                        </div>\n                                    </Card.Header>\n                                    <Card.Body>\n                                        <Row>\n                                            {!hasManualPesticideValues && (\n                                                <Col md={12}>\n                                                    <Form.Group className=\"mb-3\">\n                                                        <Form.Label>Spezifisches Produkt</Form.Label>\n                                                        <Select\n                                                            isClearable\n                                                            placeholder=\"Kein spezifisches Produkt\"\n                                                            menuPortalTarget={document.body}\n                                                            menuPosition=\"fixed\"\n                                                            styles={selectStyles}\n                                                            maxMenuHeight={200}\n                                                            {...mobileSelectProps}\n                                                            value={item?.specific_product_id ?\n                                                                options.pesticide_products.find(p => p.id == item.specific_product_id)\n                                                                    ? { value: item.specific_product_id, label: `${options.pesticide_products.find(p => p.id == item.specific_product_id).name} (${options.pesticide_products.find(p => p.id == item.specific_product_id).pesticide_type})` }\n                                                                    : null\n                                                                : null\n                                                            }\n                                                            options={options.pesticide_products.map(product => ({\n                                                                value: product.id,\n                                                                label: `${product.name} (${product.pesticide_type})`\n                                                            }))}\n                                                            onChange={(selectedOption) => {\n                                                                const val = selectedOption?.value || '';\n                                                                updatePsmItem(idx, 'specific_product_id', val);\n                                                                const product = options.pesticide_products.find(p => p.id == val);\n                                                                if (product?.default_unit) {\n                                                                    updatePsmItem(idx, 'unit_id', product.default_unit);\n                                                                }\n                                                            }}\n                                                        />\n                                                    </Form.Group>\n                                                </Col>\n                                            )}\n                                        </Row>\n\n                                        <Row>\n                                            {!hasSpecificPesticideProduct && (\n                                                <>\n                                                    <Col md={3}>\n                                                        <Form.Group className=\"mb-3\">\n                                                            <Form.Label>Herbizid (g/L)</Form.Label>\n                                                            <Form.Control\n                                                                type=\"number\"\n                                                                step=\"0.1\"\n                                                                value={item?.herbicide_content_gl || ''}\n                                                                onChange={(e) => updatePsmItem(idx, 'herbicide_content_gl', e.target.value)}\n                                                            />\n                                                        </Form.Group>\n                                                    </Col>\n                                                    <Col md={3}>\n                                                        <Form.Group className=\"mb-3\">\n                                                            <Form.Label>Fungizid (g/L)</Form.Label>\n                                                            <Form.Control\n                                                                type=\"number\"\n                                                                step=\"0.1\"\n                                                                value={item?.fungicide_content_gl || ''}\n                                                                onChange={(e) => updatePsmItem(idx, 'fungicide_content_gl', e.target.value)}\n                                                            />\n                                                        </Form.Group>\n                                                    </Col>\n                                                    <Col md={3}>\n                                                        <Form.Group className=\"mb-3\">\n                                                            <Form.Label>Insektizid (g/L)</Form.Label>\n                                                            <Form.Control\n                                                                type=\"number\"\n                                                                step=\"0.1\"\n                                                                value={item?.insecticide_content_gl || ''}\n                                                                onChange={(e) => updatePsmItem(idx, 'insecticide_content_gl', e.target.value)}\n                                                            />\n                                                        </Form.Group>\n                                                    </Col>\n                                                </>\n                                            )}\n                                            <Col md={hasSpecificPesticideProduct ? 12 : 3}>\n                                                <Form.Group className=\"mb-3\">\n                                                    <Form.Label>Menge *</Form.Label>\n                                                    <InputGroup>\n                                                        <Form.Control\n                                                            type=\"number\"\n                                                            step=\"0.01\"\n                                                            value={item?.amount || ''}\n                                                            onChange={(e) => updatePsmItem(idx, 'amount', e.target.value)}\n                                                            onBlur={(e) => updatePsmItem(idx, 'amount', roundTo4(e.target.value))}\n                                                        />\n                                                        <Form.Select\n                                                            style={{ maxWidth: '100px' }}\n                                                            value={item?.unit_id || ''}\n                                                            onChange={(e) => updatePsmItem(idx, 'unit_id', e.target.value)}\n                                                        >\n                                                            <option value=\"\">Einheit</option>\n                                                            {filteredPesticideUnits.map(unit => (\n                                                                <option key={unit.id} value={unit.id}>\n                                                                    {unit.code}\n                                                                </option>\n                                                            ))}\n                                                        </Form.Select>\n                                                    </InputGroup>\n                                                </Form.Group>\n                                            </Col>\n                                        </Row>\n                                    </Card.Body>\n                                </Card>\n                            );\n                        })}\n                    </>\n                );\n\n            case 'IRRIGATION':\n                const selectedIrrigationType = options.irrigation_types?.find(t => t.id == details.irrigation_data?.irrigation_type_id);\n                const irrigationDefaultUnitCategory = selectedIrrigationType?.default_unit_category;\n\n                const filteredIrrigationUnits = options.units.filter(u => {\n                    if (irrigationDefaultUnitCategory) {\n                        return u.category === irrigationDefaultUnitCategory;\n                    }\n                    return u.category === 'VOLUME';\n                });\n\n                const irrigationTypeOptions = (options.irrigation_types || []).map(type => ({ value: type.id, label: type.name }));\n                const irrigationUnitOptions = filteredIrrigationUnits.map(unit => ({ value: unit.id, label: `${unit.name} (${unit.code})` }));\n\n                return (\n                    <Row>\n                        <Col md={4}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Beregnungstyp *</Form.Label>\n                                <Select\n                                    placeholder=\"Bitte wählen...\"\n                                    menuPortalTarget={document.body}\n                                    menuPosition=\"fixed\"\n                                    styles={selectStyles}\n                                    maxMenuHeight={200}\n                                    {...mobileSelectProps}\n                                    value={details.irrigation_data?.irrigation_type_id ? irrigationTypeOptions.find(o => o.value == details.irrigation_data.irrigation_type_id) : null}\n                                    options={irrigationTypeOptions}\n                                    onChange={(option) => {\n                                        const val = option ? option.value : '';\n                                        handleDetailChange(opTypeId, 'irrigation_data', 'irrigation_type_id', val);\n\n                                        // Preselect unit\n                                        const type = options.irrigation_types?.find(t => t.id == val);\n                                        if (type?.default_unit) {\n                                            handleDetailChange(opTypeId, 'irrigation_data', 'irrigation_unit_id', type.default_unit);\n                                        }\n                                    }}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Beregnungsmenge</Form.Label>\n                                <Form.Control\n                                    type=\"number\"\n                                    step=\"0.01\"\n                                    value={details.irrigation_data?.irrigation_amount || ''}\n                                    onChange={(e) => handleDetailChange(opTypeId, 'irrigation_data', 'irrigation_amount', e.target.value)}\n                                    onBlur={(e) => handleDetailBlur(opTypeId, 'irrigation_data', 'irrigation_amount', e.target.value)}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group className=\"mb-3\">\n                                <Form.Label>Einheit *</Form.Label>\n                                <Select\n                                    placeholder=\"Bitte wählen...\"\n                                    menuPortalTarget={document.body}\n                                    menuPosition=\"fixed\"\n                                    styles={selectStyles}\n                                    maxMenuHeight={200}\n                                    {...mobileSelectProps}\n                                    value={details.irrigation_data?.irrigation_unit_id ? irrigationUnitOptions.find(o => o.value == details.irrigation_data.irrigation_unit_id) : null}\n                                    options={irrigationUnitOptions}\n                                    onChange={(option) => handleDetailChange(opTypeId, 'irrigation_data', 'irrigation_unit_id', option ? option.value : '')}\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n                );\n\n            case 'HARVEST':\n                const harvestUnitOptions = options.units.filter(u => u.category === 'WEIGHT').map(unit => ({ value: unit.id, label: `${unit.name} (${unit.code})` }));\n                const harvestCropOptions = options.crops.map(crop => ({ value: crop.id, label: crop.name }));\n\n                return (\n                    <>\n                        <Row>\n                            <Col md={4}>\n                                <Form.Group className=\"mb-3\">\n                                    <Form.Label>Erntemenge</Form.Label>\n                                    <Form.Control\n                                        type=\"number\"\n                                        step=\"0.01\"\n                                        value={details.harvest_data?.harvest_amount || ''}\n                                        onChange={(e) => handleDetailChange(opTypeId, 'harvest_data', 'harvest_amount', e.target.value)}\n                                        onBlur={(e) => handleDetailBlur(opTypeId, 'harvest_data', 'harvest_amount', e.target.value)}\n                                    />\n                                </Form.Group>\n                            </Col>\n                            <Col md={4}>\n                                <Form.Group className=\"mb-3\">\n                                    <Form.Label>Einheit *</Form.Label>\n                                    <Select\n                                        placeholder=\"Bitte wählen...\"\n                                        menuPortalTarget={document.body}\n                                        menuPosition=\"fixed\"\n                                        styles={selectStyles}\n                                        maxMenuHeight={200}\n                                        {...mobileSelectProps}\n                                        value={details.harvest_data?.harvest_unit_id ? harvestUnitOptions.find(o => o.value == details.harvest_data.harvest_unit_id) : null}\n                                        options={harvestUnitOptions}\n                                        onChange={(option) => handleDetailChange(opTypeId, 'harvest_data', 'harvest_unit_id', option ? option.value : '')}\n                                    />\n                                </Form.Group>\n                            </Col>\n                            <Col md={4}>\n                                <Form.Group className=\"mb-3\">\n                                    <Form.Label>Kultur</Form.Label>\n                                    <Select\n                                        isClearable\n                                        placeholder=\"Bitte wählen...\"\n                                        menuPortalTarget={document.body}\n                                        menuPosition=\"fixed\"\n                                        styles={selectStyles}\n                                        maxMenuHeight={200}\n                                        {...mobileSelectProps}\n                                        value={details.harvest_data?.crop_id ? harvestCropOptions.find(o => o.value == details.harvest_data.crop_id) : null}\n                                        options={harvestCropOptions}\n                                        onChange={(option) => {\n                                            const val = option ? option.value : '';\n                                            handleDetailChange(opTypeId, 'harvest_data', 'crop_id', val);\n                                            \n                                            // Preselect unit based on crop's default_unit\n                                            const crop = options.crops.find(c => c.id == val);\n                                            if (crop?.default_unit) {\n                                                // Handle both cases: default_unit as ID or as object\n                                                const unitId = typeof crop.default_unit === 'object' ? crop.default_unit.id : crop.default_unit;\n                                                handleDetailChange(opTypeId, 'harvest_data', 'harvest_unit_id', unitId);\n                                            }\n                                        }}\n                                    />\n                                </Form.Group>\n                            </Col>\n                        </Row>\n                        <Row>\n                            <Col md={6}>\n                                <Form.Group className=\"mb-3\">\n                                    <Form.Label>Feuchtigkeit (%)</Form.Label>\n                                    <Form.Control\n                                        type=\"number\"\n                                        step=\"0.1\"\n                                        value={details.harvest_data?.moisture_percent || ''}\n                                        onChange={(e) => handleDetailChange(opTypeId, 'harvest_data', 'moisture_percent', e.target.value)}\n                                    />\n                                </Form.Group>\n                            </Col>\n                            <Col md={6}>\n                                <Form.Group className=\"mb-3\">\n                                    <Form.Label>Qualitätsklasse</Form.Label>\n                                    <Form.Control\n                                        type=\"text\"\n                                        value={details.harvest_data?.quality_grade || ''}\n                                        onChange={(e) => handleDetailChange(opTypeId, 'harvest_data', 'quality_grade', e.target.value)}\n                                    />\n                                </Form.Group>\n                            </Col>\n                        </Row>\n                    </>\n                );\n\n            default:\n                return (\n                    <Alert variant=\"info\">\n                        Für diesen Maßnahmentyp sind keine zusätzlichen Details erforderlich.\n                    </Alert>\n                );\n        }\n    };\n\n    // Helper function to get unit name by ID\n    const getUnitName = (unitId) => {\n        const unit = options.units.find(u => u.id == unitId);\n        return unit ? unit.code : '';\n    };\n\n    // Helper function to render operation type details for summary\n    const renderOperationTypeDetailsSummary = (opType) => {\n        const details = operationTypeDetails[opType.id];\n        if (!details) return null;\n\n        const code = opType.code;\n\n        switch (code) {\n            case 'SOIL_WORK': {\n                const soilWorkType = options.soil_work_types.find(t => t.id == details.soil_work_data?.soil_work_type_id);\n                const depth = details.soil_work_data?.depth;\n                const depthLabel = depth === 'DEEP' ? 'Tief' : depth === 'SHALLOW' ? 'Seicht' : '';\n                \n                return (\n                    <div className=\"small\">\n                        {soilWorkType && <div><strong>Art:</strong> {soilWorkType.name}</div>}\n                        {depthLabel && soilWorkType?.needs_depth && <div><strong>Tiefe:</strong> {depthLabel}</div>}\n                    </div>\n                );\n            }\n\n            case 'SEEDING_MAIN':\n            case 'SEEDING_CATCH': {\n                const crop = options.crops.find(c => c.id == details.seeding_data?.crop_id);\n                const amount = details.seeding_data?.seed_amount;\n                const unitName = getUnitName(details.seeding_data?.seed_unit_id);\n                \n                return (\n                    <div className=\"small\">\n                        {crop && <div><strong>Kultur:</strong> {crop.name}</div>}\n                        {amount && unitName && <div><strong>Menge:</strong> {amount} {unitName}</div>}\n                    </div>\n                );\n            }\n\n            case 'FERTILIZING': {\n                const items = details.fertilizing_data_items || (details.fertilizing_data ? [details.fertilizing_data] : []);\n                return (\n                    <div className=\"small\">\n                        {items.map((item, idx) => {\n                            const product = options.fertilizer_products.find(p => p.id == item?.specific_product_id);\n                            const organicType = options.organic_fertilizer_types.find(t => t.id == item?.organic_fertilizer_type_id);\n                            const amount = item?.amount;\n                            const unitName = getUnitName(item?.unit_id);\n                            const nitrogen = item?.nitrogen_percent;\n                            const phosphorus = item?.phosphorus_percent;\n                            const potassium = item?.potassium_percent;\n                            return (\n                                <div key={idx} className={idx > 0 ? 'mt-1 pt-1 border-top' : ''}>\n                                    {items.length > 1 && <div><strong>Mischung {idx + 1}</strong></div>}\n                                    {product && <div><strong>Produkt:</strong> {product.name} ({product.code})</div>}\n                                    {organicType && <div><strong>Organischer Dünger:</strong> {organicType.name}</div>}\n                                    {!product && !organicType && (nitrogen || phosphorus || potassium) && (\n                                        <div><strong>NPK:</strong> {nitrogen || 0}% N / {phosphorus || 0}% P / {potassium || 0}% K</div>\n                                    )}\n                                    {amount && unitName && <div><strong>Menge:</strong> {amount} {unitName}</div>}\n                                </div>\n                            );\n                        })}\n                    </div>\n                );\n            }\n\n            case 'PEST_CONTROL': {\n                const items = details.pest_control_data_items || (details.pest_control_data ? [details.pest_control_data] : []);\n                return (\n                    <div className=\"small\">\n                        {items.map((item, idx) => {\n                            const product = options.pesticide_products.find(p => p.id == item?.specific_product_id);\n                            const amount = item?.amount;\n                            const unitName = getUnitName(item?.unit_id);\n                            const herbicide = item?.herbicide_content_gl;\n                            const fungicide = item?.fungicide_content_gl;\n                            const insecticide = item?.insecticide_content_gl;\n                            return (\n                                <div key={idx} className={idx > 0 ? 'mt-1 pt-1 border-top' : ''}>\n                                    {items.length > 1 && <div><strong>Mischung {idx + 1}</strong></div>}\n                                    {product && <div><strong>Produkt:</strong> {product.name} ({product.pesticide_type})</div>}\n                                    {!product && (herbicide || fungicide || insecticide) && (\n                                        <div>\n                                            <strong>Wirkstoffe:</strong>{' '}\n                                            {herbicide && `Herbizid: ${herbicide} g/L`}\n                                            {herbicide && (fungicide || insecticide) && ', '}\n                                            {fungicide && `Fungizid: ${fungicide} g/L`}\n                                            {fungicide && insecticide && ', '}\n                                            {insecticide && `Insektizid: ${insecticide} g/L`}\n                                        </div>\n                                    )}\n                                    {amount && unitName && <div><strong>Menge:</strong> {amount} {unitName}</div>}\n                                </div>\n                            );\n                        })}\n                    </div>\n                );\n            }\n\n            case 'IRRIGATION': {\n                const irrigationType = options.irrigation_types?.find(t => t.id == details.irrigation_data?.irrigation_type_id);\n                const amount = details.irrigation_data?.irrigation_amount;\n                const unitName = getUnitName(details.irrigation_data?.irrigation_unit_id);\n                \n                return (\n                    <div className=\"small\">\n                        {irrigationType && <div><strong>Typ:</strong> {irrigationType.name}</div>}\n                        {amount && unitName && <div><strong>Menge:</strong> {amount} {unitName}</div>}\n                    </div>\n                );\n            }\n\n            case 'HARVEST': {\n                const crop = options.crops.find(c => c.id == details.harvest_data?.crop_id);\n                const amount = details.harvest_data?.harvest_amount;\n                const unitName = getUnitName(details.harvest_data?.harvest_unit_id);\n                const moisture = details.harvest_data?.moisture_percent;\n                const quality = details.harvest_data?.quality_grade;\n                \n                return (\n                    <div className=\"small\">\n                        {crop && <div><strong>Kultur:</strong> {crop.name}</div>}\n                        {amount && unitName && <div><strong>Menge:</strong> {amount} {unitName}</div>}\n                        {moisture && <div><strong>Feuchtigkeit:</strong> {moisture}%</div>}\n                        {quality && <div><strong>Qualität:</strong> {quality}</div>}\n                    </div>\n                );\n            }\n\n            default:\n                return null;\n        }\n    };\n\n    const renderStep6 = () => {\n        const totalOperations = selectedOperationTypes.length * selectedSchlaege.length;\n\n        return (\n            <Card>\n                <Card.Header>\n                    <Card.Title className=\"h6 mb-0\">\n                        <i className=\"bi bi-check-circle me-2\"></i>\n                        Schritt {getDisplayStepInfo().current}: Zusammenfassung\n                    </Card.Title>\n                </Card.Header>\n                <Card.Body>\n                    <h6>Übersicht der zu erstellenden Maßnahmen</h6>\n\n                    <Table striped bordered>\n                        <tbody>\n                            <tr>\n                                <th style={{ width: '30%' }}>Betrieb</th>\n                                <td>{selectedFarm?.name || selectedFarm?.hauptbetriebsnummer}</td>\n                            </tr>\n                            <tr>\n                                <th>Erntejahr</th>\n                                <td>{selectedYear?.year}</td>\n                            </tr>\n                            <tr>\n                                <th>Datum</th>\n                                <td>{new Date(operationDate).toLocaleDateString('de-DE')}</td>\n                            </tr>\n                            <tr>\n                                <th>Kraftstoff</th>\n                                <td>{fuelTypes.find(f => f.id == selectedFuelType)?.name || '-'}</td>\n                            </tr>\n                            <tr>\n                                <th>Anzahl Schläge</th>\n                                <td>{selectedSchlaege.length}</td>\n                            </tr>\n                            <tr>\n                                <th>Gesamt Maßnahmen</th>\n                                <td><strong>{totalOperations}</strong></td>\n                            </tr>\n                        </tbody>\n                    </Table>\n\n                    <h6 className=\"mt-4\">Maßnahmendetails</h6>\n                    <Table striped bordered size=\"sm\">\n                        <thead>\n                            <tr>\n                                <th style={{ width: '30%' }}>Maßnahmentyp</th>\n                                <th>Details</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            {selectedOperationTypes.map(opType => {\n                                const iconUrl = getOperationIcon(opType.name);\n                                return (\n                                    <tr key={opType.id}>\n                                        <td>\n                                            <div className=\"d-flex align-items-center gap-2\">\n                                                {iconUrl && (\n                                                    <img \n                                                        src={iconUrl} \n                                                        alt={opType.name}\n                                                        style={{ width: '24px', height: '24px' }}\n                                                    />\n                                                )}\n                                                <span>{opType.name}</span>\n                                            </div>\n                                        </td>\n                                        <td>\n                                            {renderOperationTypeDetailsSummary(opType) || (\n                                                <span className=\"text-muted small\">Keine zusätzlichen Details</span>\n                                            )}\n                                        </td>\n                                    </tr>\n                                );\n                            })}\n                        </tbody>\n                    </Table>\n\n                    <h6 className=\"mt-4\">Betroffene Schläge</h6>\n                    <Table striped bordered size=\"sm\">\n                        <thead>\n                            <tr>\n                                <th>Schlag</th>\n                                <th>Fläche (ha)</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            {selectedSchlaege.map(schlag => (\n                                <tr key={schlag.id}>\n                                    <td>{schlag.displayName}</td>\n                                    <td>{schlagAreas[schlag.id] || schlag.flaeche_netto}</td>\n                                </tr>\n                            ))}\n                        </tbody>\n                    </Table>\n\n                    {sharedNotes && (\n                        <>\n                            <h6 className=\"mt-4\">Notizen</h6>\n                            <Alert variant=\"secondary\">\n                                {sharedNotes}\n                            </Alert>\n                        </>\n                    )}\n\n                    <Alert variant=\"info\" className=\"mt-4\">\n                        <i className=\"bi bi-info-circle me-2\"></i>\n                        Es werden <strong>{totalOperations} Maßnahmen</strong> erstellt ({selectedOperationTypes.length} Typ{selectedOperationTypes.length !== 1 ? 'en' : ''} × {selectedSchlaege.length} Schlag{selectedSchlaege.length !== 1 ? 'e' : ''}).\n                        Alle Maßnahmen werden mit derselben Fahrt-UUID gruppiert.\n                    </Alert>\n                </Card.Body>\n            </Card>\n        );\n    };\n\n    const getStepTitle = () => {\n        switch (currentStep) {\n            case 1: return 'Betrieb & Jahr';\n            case 2: return 'Maßnahmentypen';\n            case 3: return 'Schläge';\n            case 4: return 'Datum & Kraftstoff';\n            case 5: return 'Details';\n            case 6: return 'Zusammenfassung';\n            default: return '';\n        }\n    };\n\n    // Calculate actual step numbers for display\n    const getDisplayStepInfo = () => {\n        if (isEditMode) {\n            // Edit mode: steps 4, 5, 6 (3 steps total)\n            const stepMapping = {\n                4: { current: 1, total: 3 },\n                5: { current: 2, total: 3 },\n                6: { current: 3, total: 3 }\n            };\n            return stepMapping[currentStep] || { current: currentStep, total: 3 };\n        } else if (preselectedData) {\n            // When preselected: steps 2, 4, 5, 6 (4 steps total)\n            const stepMapping = {\n                2: { current: 1, total: 4 },\n                4: { current: 2, total: 4 },\n                5: { current: 3, total: 4 },\n                6: { current: 4, total: 4 }\n            };\n            return stepMapping[currentStep] || { current: currentStep, total: 6 };\n        } else {\n            // Normal flow: all 6 steps\n            return { current: currentStep, total: 6 };\n        }\n    };\n\n    return (\n        <Modal\n            show={show}\n            onHide={onHide}\n            size=\"xl\"\n            centered\n            backdrop=\"static\"\n        >\n            <Modal.Header closeButton>\n            <Modal.Title>\n                    <i className={`bi ${isEditMode ? 'bi-pencil-square' : 'bi-lightning'} me-2`}></i>\n                    {isEditMode ? 'Maßnahme bearbeiten' : 'Maßnahme erfassen'}\n                    {!isEditMode && (\n                        <Badge bg=\"secondary\" className=\"ms-3\">\n                            Schritt {getDisplayStepInfo().current} von {getDisplayStepInfo().total}: {getStepTitle()}\n                        </Badge>\n                    )}\n                </Modal.Title>\n            </Modal.Header>\n\n            <Modal.Body>\n                {error && <Alert variant=\"danger\" dismissible onClose={() => setError(null)}>{error}</Alert>}\n\n                {loading && currentStep === 1 ? (\n                    <div className=\"text-center py-5\">\n                        <Spinner animation=\"border\" />\n                        <p className=\"mt-2 text-muted\">Lade Daten...</p>\n                    </div>\n                ) : (\n                    renderStepContent()\n                )}\n            </Modal.Body>\n\n            <Modal.Footer>\n                <div className=\"d-flex justify-content-between w-100\">\n                    <div>\n                        {currentStep > 1 && !isEditMode && (\n                            <Button variant=\"outline-secondary\" onClick={handleBack} disabled={saving}>\n                                <i className=\"bi bi-arrow-left me-2\"></i>\n                                Zurück\n                            </Button>\n                        )}\n                    </div>\n                    <div>\n                        <Button variant=\"secondary\" onClick={onHide} disabled={saving} className=\"me-2\">\n                            Abbrechen\n                        </Button>\n                        {/* In edit mode: always show save button (single form view) */}\n                        {/* In create mode: show save button only on step 6 (summary) */}\n                        {isEditMode || currentStep === 6 ? (\n                            <Button\n                                variant=\"success\"\n                                onClick={handleSave}\n                                disabled={saving || !operationDate || !selectedFuelType}\n                            >\n                                {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n                                <i className=\"bi bi-check-circle me-2\"></i>\n                                Speichern\n                            </Button>\n                        ) : currentStep < 6 ? (\n                            <Button\n                                variant=\"primary\"\n                                onClick={handleNext}\n                                disabled={!canProceedToNextStep() || loading}\n                            >\n                                Weiter\n                                <i className=\"bi bi-arrow-right ms-2\"></i>\n                            </Button>\n                        ) : null}\n                    </div>\n                </div>\n            </Modal.Footer>\n        </Modal>\n    );\n};\n\nexport default QuickOperationModal;\n","import React, { useState, useEffect } from 'react';\nimport { Modal, Form, Button, Spinner, Alert } from 'react-bootstrap';\n\nconst EditModal = ({ show, onHide, title, value, onSave, placeholder = \"Name eingeben...\" }) => {\n  const [editValue, setEditValue] = useState(value ?? '');\n  const [saving, setSaving] = useState(false);\n  const [error, setError] = useState(null);\n\n  useEffect(() => {\n    setEditValue(value ?? '');\n    setError(null);\n  }, [value, show]);\n\n  const handleSave = async () => {\n    setSaving(true);\n    setError(null);\n    try {\n      await onSave(editValue);\n      onHide();\n    } catch (error) {\n      console.error('Error saving:', error);\n      setError('Fehler beim Speichern. Bitte versuchen Sie es erneut.');\n    } finally {\n      setSaving(false);\n    }\n  };\n\n  return (\n    <Modal show={show} onHide={onHide} centered>\n      <Modal.Header closeButton>\n        <Modal.Title className=\"h6\">{title}</Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        {error && (\n          <Alert variant=\"danger\" className=\"mb-3\">\n            <i className=\"bi bi-exclamation-triangle me-2\"></i>\n            {error}\n          </Alert>\n        )}\n        <Form.Group>\n          <Form.Label>Name/Bezeichnung</Form.Label>\n          <Form.Control\n            type=\"text\"\n            value={editValue}\n            onChange={(e) => setEditValue(e.target.value)}\n            placeholder={placeholder}\n            autoFocus\n          />\n        </Form.Group>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button variant=\"secondary\" onClick={onHide} disabled={saving}>\n          Abbrechen\n        </Button>\n        <Button variant=\"primary\" onClick={handleSave} disabled={saving}>\n          {saving && <Spinner size=\"sm\" className=\"me-2\" />}\n          Speichern\n        </Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n\nexport default EditModal;\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nconst YearForm = ({ formData, onInputChange, parentData }) => {\n  return (\n    <>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Jahr *</Form.Label>\n        <Form.Control\n          type=\"number\"\n          value={formData.year ?? ''}\n          onChange={(e) => onInputChange('year', e.target.value ? parseInt(e.target.value, 10) : '')}\n          min=\"2000\"\n          max={new Date().getFullYear() + 5}\n          required\n        />\n      </Form.Group>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Bewirtschaftungsart</Form.Label>\n        <Form.Select\n          value={formData.type_of_farming ?? ''}\n          onChange={(e) => onInputChange('type_of_farming', e.target.value)}\n        >\n          <option value=\"\">Von Betrieb erben</option>\n          <option value=\"BIO\">Bio</option>\n          <option value=\"CONVENTIONAL\">Konventionell</option>\n        </Form.Select>\n        {parentData?.type_of_farming && (\n          <Form.Text className=\"text-muted\">\n            <i className=\"bi bi-info-circle me-1\"></i>\n            Betrieb: {parentData.type_of_farming === 'BIO' ? 'Bio' : 'Konventionell'}\n          </Form.Text>\n        )}\n      </Form.Group>\n    </>\n  );\n};\n\nexport default YearForm;\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\n\nconst FeldstueckForm = ({ formData, onInputChange, nutzungsarten }) => {\n  return (\n    <>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Feldstück-Nummer *</Form.Label>\n        <Form.Control\n          type=\"number\"\n          value={formData.nummer ?? ''}\n          onChange={(e) => onInputChange('nummer', e.target.value ? parseInt(e.target.value, 10) : '')}\n          min=\"1\"\n          required\n        />\n      </Form.Group>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Bezeichnung</Form.Label>\n        <Form.Control\n          type=\"text\"\n          value={formData.bezeichnung ?? ''}\n          onChange={(e) => onInputChange('bezeichnung', e.target.value)}\n          placeholder=\"Feldstück-Bezeichnung\"\n        />\n      </Form.Group>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Fläche (ha) *</Form.Label>\n        <Form.Control\n          type=\"number\"\n          step=\"0.01\"\n          value={formData.flaeche ?? ''}\n          onChange={(e) => onInputChange('flaeche', e.target.value ? parseFloat(e.target.value) : '')}\n          min=\"0.01\"\n          required\n        />\n      </Form.Group>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Nutzungsart *</Form.Label>\n        <Form.Select\n          value={formData.schlag_nutzungsart_id ?? ''}\n          onChange={(e) => onInputChange('schlag_nutzungsart_id', e.target.value ? parseInt(e.target.value, 10) : '')}\n          required\n        >\n          <option value=\"\">Nutzungsart wählen...</option>\n          {nutzungsarten.map(na => (\n            <option key={na.id} value={na.id}>\n              {na.code} - {na.bezeichnung}\n            </option>\n          ))}\n        </Form.Select>\n      </Form.Group>\n    </>\n  );\n};\n\nexport default FeldstueckForm;\n","import React, { useMemo } from 'react';\nimport { Form, Row, Col, Alert } from 'react-bootstrap';\nimport Select from 'react-select';\n\nconst SchlagForm = ({ formData, onInputChange, crops, begruenungsvarianten, parentData }) => {\n  // Filter and transform crops for react-select\n  const cropOptions = useMemo(() => {\n    return crops\n      .filter(crop => crop.is_main_crop)\n      .map(crop => ({\n        value: crop.id,\n        label: crop.name,\n        crop: crop // Keep full crop object for custom rendering\n      }));\n  }, [crops]);\n\n  // Find the currently selected crop option\n  const selectedCropOption = useMemo(() => {\n    if (!formData.crop_id) return null;\n    return cropOptions.find(option => option.value === formData.crop_id) || null;\n  }, [formData.crop_id, cropOptions]);\n\n  // Custom filter function to search by name and scientific name\n  const filterOption = (option, inputValue) => {\n    const crop = option.data.crop;\n    const searchLower = inputValue.toLowerCase();\n    return (\n      crop.name.toLowerCase().includes(searchLower) ||\n      (crop.name_scientific && crop.name_scientific.toLowerCase().includes(searchLower))\n    );\n  };\n\n  // Custom option rendering to show scientific name\n  const formatOptionLabel = (option) => (\n    <div>\n      <strong>{option.label}</strong>\n      {option.crop?.name_scientific && (\n        <small className=\"text-muted d-block\">{option.crop.name_scientific}</small>\n      )}\n    </div>\n  );\n\n  // Custom styles for react-select to match the app theme\n  const selectStyles = {\n    menuPortal: (base) => ({ ...base, zIndex: 9999 }),\n    control: (base, state) => ({\n      ...base,\n      borderColor: state.isFocused ? '#005541' : base.borderColor,\n      boxShadow: state.isFocused ? '0 0 0 1px #005541' : base.boxShadow,\n      '&:hover': {\n        borderColor: state.isFocused ? '#005541' : base.borderColor\n      }\n    }),\n    option: (base, state) => ({\n      ...base,\n      backgroundColor: state.isSelected ? '#005541' : state.isFocused ? '#e6f2ef' : base.backgroundColor,\n      color: state.isSelected ? 'white' : base.color,\n      '&:active': {\n        backgroundColor: '#005541'\n      }\n    }),\n    input: (base) => ({\n      ...base,\n      // Prevent mobile keyboard from opening\n      'input:focus': {\n        boxShadow: 'none'\n      }\n    })\n  };\n\n  // Props to prevent mobile keyboard issues\n  const mobileSelectProps = {\n    openMenuOnFocus: false,\n    blurInputOnSelect: true,\n    // Prevent keyboard on mobile by making input readonly when menu is closed\n    onMenuOpen: () => {},\n    onMenuClose: () => {}\n  };\n\n  const handleCropChange = (selectedOption) => {\n    onInputChange('crop_id', selectedOption ? selectedOption.value : '');\n  };\n\n  return (\n    <>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Schlag-Nummer *</Form.Label>\n        <Form.Control\n          type=\"number\"\n          value={formData.nummer ?? ''}\n          onChange={(e) => onInputChange('nummer', e.target.value ? parseInt(e.target.value, 10) : '')}\n          min=\"1\"\n          required\n        />\n      </Form.Group>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Bewirtschaftungsart</Form.Label>\n        <Form.Select\n          value={formData.type_of_farming ?? ''}\n          onChange={(e) => onInputChange('type_of_farming', e.target.value)}\n        >\n          <option value=\"\">Erben</option>\n          <option value=\"BIO\">Bio</option>\n          <option value=\"CONVENTIONAL\">Konventionell</option>\n        </Form.Select>\n        {parentData && (\n          <Form.Text className=\"text-muted\">\n            <i className=\"bi bi-info-circle me-1\"></i>\n            Wird geerbt von übergeordneter Ebene\n          </Form.Text>\n        )}\n      </Form.Group>\n      <Row>\n        <Col md={6}>\n          <Form.Group className=\"mb-3\">\n            <Form.Label>Bruttofläche (ha) *</Form.Label>\n            <Form.Control\n              type=\"number\"\n              step=\"0.01\"\n              value={formData.flaeche_brutto ?? ''}\n              onChange={(e) => onInputChange('flaeche_brutto', e.target.value ? parseFloat(e.target.value) : '')}\n              min=\"0.01\"\n              required\n            />\n          </Form.Group>\n        </Col>\n        <Col md={6}>\n          <Form.Group className=\"mb-3\">\n            <Form.Label>Nettofläche (ha) *</Form.Label>\n            <Form.Control\n              type=\"number\"\n              step=\"0.01\"\n              value={formData.flaeche_netto ?? ''}\n              onChange={(e) => onInputChange('flaeche_netto', e.target.value ? parseFloat(e.target.value) : '')}\n              min=\"0.01\"\n              max={formData.flaeche_brutto || undefined}\n              required\n            />\n          </Form.Group>\n        </Col>\n      </Row>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Kultur</Form.Label>\n        <Select\n          isClearable\n          placeholder=\"Kultur suchen...\"\n          noOptionsMessage={() => \"Keine Ergebnisse gefunden\"}\n          menuPortalTarget={document.body}\n          menuPosition=\"fixed\"\n          styles={selectStyles}\n          maxMenuHeight={200}\n          {...mobileSelectProps}\n          value={selectedCropOption}\n          options={cropOptions}\n          onChange={handleCropChange}\n          filterOption={filterOption}\n          formatOptionLabel={formatOptionLabel}\n        />\n        <Form.Text className=\"text-muted\">\n          <i className=\"bi bi-info-circle me-1\"></i>\n          Wählen Sie die Kultur für diesen Schlag\n        </Form.Text>\n      </Form.Group>\n      {formData.schlag_nutzungsart && (\n        <Alert variant=\"info\" className=\"mb-3\">\n          <small>\n            <i className=\"bi bi-info-circle me-1\"></i>\n            Schlag-Nutzungsart (aus Import): <strong>{formData.schlag_nutzungsart.name}</strong>\n          </small>\n        </Alert>\n      )}\n      {/* <Form.Group className=\"mb-3\">\n        <Form.Label>Begrünungsvariante</Form.Label>\n        <Form.Select\n          value={formData.begruenungsvariante_id ?? ''}\n          onChange={(e) => onInputChange('begruenungsvariante_id', e.target.value ? parseInt(e.target.value, 10) : '')}\n        >\n          <option value=\"\">Keine Begrünungsvariante</option>\n          {begruenungsvarianten.map(bv => (\n            <option key={bv.id} value={bv.id}>\n              {bv.code} - {bv.bezeichnung}\n            </option>\n          ))}\n        </Form.Select>\n      </Form.Group>\n      <Form.Group className=\"mb-3\">\n        <Form.Label>Codes</Form.Label>\n        <Form.Control\n          type=\"text\"\n          value={formData.codes ?? ''}\n          onChange={(e) => onInputChange('codes', e.target.value)}\n          placeholder=\"Zusätzliche Codes\"\n        />\n      </Form.Group> */}\n    </>\n  );\n};\n\nexport default SchlagForm;\n","import React, { useEffect, useState, useRef, useCallback } from 'react';\nimport { MapContainer, TileLayer, GeoJSON, useMap } from 'react-leaflet';\nimport L from 'leaflet';\nimport proj4 from 'proj4';\nimport 'leaflet/dist/leaflet.css';\nimport 'leaflet-draw';\nimport 'leaflet-draw/dist/leaflet.draw.css';\n\n// Define Austrian coordinate systems\nproj4.defs(\"EPSG:31287\", \"+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs\");\n\n// Fix for default markers\ndelete L.Icon.Default.prototype._getIconUrl;\nL.Icon.Default.mergeOptions({\n    iconRetinaUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png',\n    iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png',\n    shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png',\n});\n\n/**\n * Convert WGS84 coordinates to Austrian MGI (EPSG:31287)\n */\nconst convertToMGI = (coordinates) => {\n    try {\n        return coordinates.map(ring => {\n            return ring.map(coord => {\n                const [lng, lat] = coord;\n                const [x, y] = proj4('EPSG:4326', 'EPSG:31287', [lng, lat]);\n                return [x, y];\n            });\n        });\n    } catch (err) {\n        console.error('Coordinate conversion error (to MGI):', err);\n        return coordinates;\n    }\n};\n\n/**\n * Convert Austrian MGI (EPSG:31287) to WGS84 for display\n */\nconst convertToWGS84 = (coordinates) => {\n    try {\n        return coordinates.map(ring => {\n            return ring.map(coord => {\n                const [x, y] = coord;\n                const [lng, lat] = proj4('EPSG:31287', 'EPSG:4326', [x, y]);\n                return [lng, lat];\n            });\n        });\n    } catch (err) {\n        console.error('Coordinate conversion error (to WGS84):', err);\n        return coordinates;\n    }\n};\n\n/**\n * Calculate area in hectares from WGS84 coordinates using geodesic calculation\n */\nconst calculateAreaHectares = (layer) => {\n    if (!layer || !layer.getLatLngs) return 0;\n    \n    try {\n        // Use Leaflet's geodesic area calculation\n        const latlngs = layer.getLatLngs()[0]; // Get outer ring\n        if (!latlngs || latlngs.length < 3) return 0;\n        \n        // Calculate geodesic area using the Shoelace formula with geodesic distances\n        // For more accuracy, we use L.GeometryUtil if available, otherwise approximate\n        let area = 0;\n        \n        // Use Leaflet's built-in geodesic area calculation\n        if (L.GeometryUtil && L.GeometryUtil.geodesicArea) {\n            area = L.GeometryUtil.geodesicArea(latlngs);\n        } else {\n            // Fallback: Calculate using spherical excess formula\n            const earthRadius = 6371000; // meters\n            const toRad = (deg) => deg * Math.PI / 180;\n            \n            let total = 0;\n            const n = latlngs.length;\n            \n            for (let i = 0; i < n; i++) {\n                const j = (i + 1) % n;\n                const lat1 = toRad(latlngs[i].lat);\n                const lat2 = toRad(latlngs[j].lat);\n                const lng1 = toRad(latlngs[i].lng);\n                const lng2 = toRad(latlngs[j].lng);\n                \n                total += (lng2 - lng1) * (2 + Math.sin(lat1) + Math.sin(lat2));\n            }\n            \n            area = Math.abs(total * earthRadius * earthRadius / 2);\n        }\n        \n        // Convert from square meters to hectares\n        return area / 10000;\n    } catch (err) {\n        console.error('Area calculation error:', err);\n        return 0;\n    }\n};\n\n/**\n * Component to handle map resizing when container becomes visible\n */\nconst MapResizer = ({ isVisible, featureGroupRef }) => {\n    const map = useMap();\n\n    useEffect(() => {\n        if (!isVisible) return;\n        \n        // Multiple timeouts to ensure proper sizing after tab switch\n        const timers = [\n            setTimeout(() => {\n                map.invalidateSize();\n            }, 50),\n            setTimeout(() => {\n                map.invalidateSize();\n                // Fit to bounds of drawn items if they exist\n                if (featureGroupRef?.current) {\n                    const bounds = featureGroupRef.current.getBounds();\n                    if (bounds.isValid()) {\n                        map.fitBounds(bounds, { padding: [50, 50], maxZoom: 18 });\n                    }\n                }\n            }, 200),\n            setTimeout(() => {\n                map.invalidateSize();\n                // Final fit to bounds\n                if (featureGroupRef?.current) {\n                    const bounds = featureGroupRef.current.getBounds();\n                    if (bounds.isValid()) {\n                        map.fitBounds(bounds, { padding: [50, 50], maxZoom: 18 });\n                    }\n                }\n            }, 500)\n        ];\n\n        return () => timers.forEach(t => clearTimeout(t));\n    }, [map, isVisible, featureGroupRef]);\n\n    return null;\n};\n\n/**\n * Component to handle map centering\n */\nconst MapController = ({ geometry }) => {\n    const map = useMap();\n\n    useEffect(() => {\n        if (geometry) {\n            try {\n                const geoJsonLayer = L.geoJSON(geometry);\n                const bounds = geoJsonLayer.getBounds();\n                if (bounds.isValid()) {\n                    map.fitBounds(bounds, { padding: [50, 50] });\n                    return;\n                }\n            } catch (err) {\n                console.error('Error fitting bounds:', err);\n            }\n        }\n        // Default center (Austria)\n        map.setView([48.2082, 16.3738], 7);\n    }, [map, geometry]);\n\n    return null;\n};\n\n/**\n * Draw control component that manages polygon drawing and editing\n */\nconst DrawControl = ({ \n    existingGeometry, \n    onGeometryChange, \n    onAreaChange,\n    featureGroupRef \n}) => {\n    const map = useMap();\n    const drawControlRef = useRef(null);\n    const initializedRef = useRef(false);\n\n    useEffect(() => {\n        if (!map || initializedRef.current) return;\n        initializedRef.current = true;\n\n        // Create feature group for drawn items\n        const drawnItems = new L.FeatureGroup();\n        map.addLayer(drawnItems);\n        featureGroupRef.current = drawnItems;\n\n        // Add existing geometry if present\n        if (existingGeometry && existingGeometry.coordinates) {\n            try {\n                const wgs84Coords = convertToWGS84(existingGeometry.coordinates);\n                const geoJsonFeature = {\n                    type: 'Feature',\n                    properties: {},\n                    geometry: {\n                        type: existingGeometry.type,\n                        coordinates: wgs84Coords\n                    }\n                };\n                \n                const layer = L.geoJSON(geoJsonFeature, {\n                    style: {\n                        color: '#3388ff',\n                        fillColor: '#3388ff',\n                        fillOpacity: 0.4,\n                        weight: 2\n                    }\n                });\n                \n                layer.eachLayer((l) => {\n                    drawnItems.addLayer(l);\n                    // Calculate initial area\n                    const area = calculateAreaHectares(l);\n                    onAreaChange(area);\n                });\n                \n                // Fit map to geometry\n                const bounds = drawnItems.getBounds();\n                if (bounds.isValid()) {\n                    map.fitBounds(bounds, { padding: [50, 50] });\n                }\n            } catch (err) {\n                console.error('Error adding existing geometry:', err);\n            }\n        }\n\n        // Create draw control\n        const drawControl = new L.Control.Draw({\n            position: 'topleft',\n            draw: {\n                polyline: false,\n                polygon: {\n                    allowIntersection: false,\n                    drawError: {\n                        color: '#e74c3c',\n                        message: '<strong>Fehler:</strong> Kanten dürfen sich nicht kreuzen!'\n                    },\n                    shapeOptions: {\n                        color: '#3388ff',\n                        fillColor: '#3388ff',\n                        fillOpacity: 0.4\n                    }\n                },\n                circle: false,\n                circlemarker: false,\n                rectangle: false,\n                marker: false\n            },\n            edit: {\n                featureGroup: drawnItems,\n                edit: {},\n                remove: {}\n            }\n        });\n\n        map.addControl(drawControl);\n        drawControlRef.current = drawControl;\n\n        // Handle polygon creation\n        const handleCreated = (e) => {\n            const layer = e.layer;\n            \n            // Remove existing polygons (only allow one)\n            drawnItems.clearLayers();\n            drawnItems.addLayer(layer);\n            \n            // Calculate area\n            const area = calculateAreaHectares(layer);\n            onAreaChange(area);\n            \n            // Convert to MGI and notify parent\n            const latlngs = layer.getLatLngs()[0];\n            const wgs84Coords = latlngs.map(ll => [ll.lng, ll.lat]);\n            wgs84Coords.push(wgs84Coords[0]); // Close the ring\n            \n            const mgiCoords = convertToMGI([wgs84Coords]);\n            \n            onGeometryChange({\n                type: 'Polygon',\n                coordinates: mgiCoords\n            });\n        };\n\n        // Handle polygon editing\n        const handleEdited = (e) => {\n            const layers = e.layers;\n            layers.eachLayer((layer) => {\n                // Calculate area\n                const area = calculateAreaHectares(layer);\n                onAreaChange(area);\n                \n                // Convert to MGI and notify parent\n                const latlngs = layer.getLatLngs()[0];\n                const wgs84Coords = latlngs.map(ll => [ll.lng, ll.lat]);\n                wgs84Coords.push(wgs84Coords[0]); // Close the ring\n                \n                const mgiCoords = convertToMGI([wgs84Coords]);\n                \n                onGeometryChange({\n                    type: 'Polygon',\n                    coordinates: mgiCoords\n                });\n            });\n        };\n\n        // Handle polygon deletion\n        const handleDeleted = (e) => {\n            if (drawnItems.getLayers().length === 0) {\n                onGeometryChange(null);\n                onAreaChange(0);\n            }\n        };\n\n        // Attach event listeners\n        map.on(L.Draw.Event.CREATED, handleCreated);\n        map.on(L.Draw.Event.EDITED, handleEdited);\n        map.on(L.Draw.Event.DELETED, handleDeleted);\n\n        // Cleanup\n        return () => {\n            map.off(L.Draw.Event.CREATED, handleCreated);\n            map.off(L.Draw.Event.EDITED, handleEdited);\n            map.off(L.Draw.Event.DELETED, handleDeleted);\n            \n            if (drawControlRef.current) {\n                map.removeControl(drawControlRef.current);\n            }\n            if (featureGroupRef.current) {\n                map.removeLayer(featureGroupRef.current);\n            }\n        };\n    }, [map, existingGeometry, onGeometryChange, onAreaChange, featureGroupRef]);\n\n    return null;\n};\n\n/**\n * Main polygon editor component for Schlag\n */\nconst SchlagPolygonEditor = ({ \n    existingGeometry, \n    feldstueckGeometry,\n    onGeometryChange,\n    onAreaChange,\n    isVisible = true \n}) => {\n    const [geoJsonData, setGeoJsonData] = useState(null);\n    const featureGroupRef = useRef(null);\n    \n    // Default center (Austria - Vienna)\n    const defaultCenter = [48.2082, 16.3738];\n    const defaultZoom = 7;\n\n    // Convert Feldstück geometry for background display\n    useEffect(() => {\n        if (!feldstueckGeometry) {\n            setGeoJsonData(null);\n            return;\n        }\n\n        try {\n            const wgs84Coords = convertToWGS84(feldstueckGeometry.coordinates);\n            \n            setGeoJsonData({\n                type: 'FeatureCollection',\n                features: [{\n                    type: 'Feature',\n                    properties: { type: 'feldstueck' },\n                    geometry: {\n                        type: feldstueckGeometry.type,\n                        coordinates: wgs84Coords\n                    }\n                }]\n            });\n        } catch (err) {\n            console.error('Error converting Feldstück geometry:', err);\n            setGeoJsonData(null);\n        }\n    }, [feldstueckGeometry]);\n\n    const feldstueckStyle = {\n        color: '#999',\n        fillColor: '#ddd',\n        fillOpacity: 0.2,\n        weight: 2,\n        dashArray: '5, 5'\n    };\n\n    return (\n        <div style={{ height: '400px', width: '100%' }} className=\"border rounded\">\n            <MapContainer\n                center={defaultCenter}\n                zoom={defaultZoom}\n                maxZoom={19}\n                style={{ height: '100%', width: '100%' }}\n                scrollWheelZoom={true}\n            >\n                <TileLayer\n                    attribution='&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>'\n                    url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n                    maxZoom={19}\n                />\n                \n                {/* Feldstück boundary as background reference */}\n                {geoJsonData && (\n                    <GeoJSON\n                        data={geoJsonData}\n                        style={feldstueckStyle}\n                    />\n                )}\n                \n                <DrawControl\n                    existingGeometry={existingGeometry}\n                    onGeometryChange={onGeometryChange}\n                    onAreaChange={onAreaChange}\n                    featureGroupRef={featureGroupRef}\n                />\n                \n                <MapResizer isVisible={isVisible} featureGroupRef={featureGroupRef} />\n            </MapContainer>\n        </div>\n    );\n};\n\nexport default SchlagPolygonEditor;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Modal, Button, Spinner, Nav, Tab, Alert, Form, Row, Col } from 'react-bootstrap';\nimport api from '../../../utils/api';\nimport YearForm from '../forms/YearForm';\nimport FeldstueckForm from '../forms/FeldstueckForm';\nimport SchlagForm from '../forms/SchlagForm';\nimport LandUseChangeManager from '../LandUseChangeManager';\nimport SchlagPolygonEditor from '../SchlagPolygonEditor';\n\nconst CrudModal = ({ show, onHide, operation, target, onSave, loading, error }) => {\n  const [formData, setFormData] = useState({});\n  const [nutzungsarten, setNutzungsarten] = useState([]);\n  const [begruenungsvarianten, setBegruenungsvarianten] = useState([]);\n  const [loadingOptions, setLoadingOptions] = useState(false);\n  const [activeTab, setActiveTab] = useState('basic');\n  \n  // Polygon state\n  const [existingGeometry, setExistingGeometry] = useState(null);\n  const [feldstueckGeometry, setFeldstueckGeometry] = useState(null);\n  const [hasGeometry, setHasGeometry] = useState(false);\n  const [loadingGeometry, setLoadingGeometry] = useState(false);\n  \n  // Polygon editing state\n  const [pendingGeometry, setPendingGeometry] = useState(null);\n  const [calculatedArea, setCalculatedArea] = useState(0);\n  const [geometryChanged, setGeometryChanged] = useState(false);\n\n  useEffect(() => {\n    // Load options when the modal opens and they're needed\n    if (show && (operation === 'create' || operation === 'edit')) {\n      loadOptions();\n    }\n    if (show) initializeFormData();\n    \n    // Load geometry if editing a Schlag\n    if (show && operation === 'edit' && target?.type === 'schlag' && target?.item?.id) {\n      loadSchlagGeometry(target.item.id);\n    }\n    \n    // Reset polygon editing state when modal opens/closes\n    if (show) {\n      setPendingGeometry(null);\n      setCalculatedArea(0);\n      setGeometryChanged(false);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [show, operation, target]);\n\n  const loadSchlagGeometry = async (schlagId) => {\n    setLoadingGeometry(true);\n    try {\n      const response = await api.get(`/schlaege/${schlagId}/get_geometry/`);\n      if (response.data.has_geometry) {\n        setExistingGeometry(response.data.geometry);\n        setHasGeometry(true);\n      } else {\n        setExistingGeometry(null);\n        setHasGeometry(false);\n      }\n    } catch (error) {\n      console.error('Error loading geometry:', error);\n      setExistingGeometry(null);\n      setHasGeometry(false);\n    } finally {\n      setLoadingGeometry(false);\n    }\n  };\n\n  // Handle geometry changes from the polygon editor\n  const handleGeometryChange = useCallback((newGeometry) => {\n    setPendingGeometry(newGeometry);\n    setGeometryChanged(true);\n    setHasGeometry(!!newGeometry);\n  }, []);\n\n  // Handle area changes from the polygon editor\n  const handleAreaChange = useCallback((areaInHectares) => {\n    setCalculatedArea(areaInHectares);\n  }, []);\n\n  // Apply calculated area to form fields\n  const handleApplyAreaToForm = useCallback(() => {\n    if (calculatedArea > 0) {\n      // Cap at maximum allowed value (database field is max_digits=10, decimal_places=4)\n      // Max value is 999999.9999 ha, but realistically fields are much smaller\n      const maxArea = 9999.9999; // 10,000 ha is already a very large field\n      let areaToApply = calculatedArea;\n      \n      if (areaToApply > maxArea) {\n        alert(`Die berechnete Fläche (${calculatedArea.toFixed(4)} ha) ist unrealistisch groß. Bitte überprüfen Sie das Polygon.`);\n        return;\n      }\n      \n      const roundedArea = Math.round(areaToApply * 10000) / 10000; // Round to 4 decimal places\n      setFormData(prev => ({\n        ...prev,\n        flaeche_brutto: roundedArea,\n        flaeche_netto: roundedArea\n      }));\n    }\n  }, [calculatedArea]);\n\n  const loadOptions = async () => {\n    setLoadingOptions(true);\n    try {\n      // Load different options based on target type\n      let optionsEndpoint = '/nutzungsarten/';\n  \n      if (target?.type === 'schlag') {\n        // For Schlag, load crops\n        optionsEndpoint = '/crops/?is_active=true';\n      } else if (target?.type === 'feldstueck') {\n        // For Feldstück, load feldstueck-nutzungsarten\n        optionsEndpoint = '/feldstueck-nutzungsarten/';\n      }\n  \n      const [optionsRes, begruenungsvariantenRes] = await Promise.all([\n        api.get(optionsEndpoint),\n        api.get('/begruenungsvarianten/')\n      ]);\n      setNutzungsarten(optionsRes.data.results || optionsRes.data || []);\n      setBegruenungsvarianten(begruenungsvariantenRes.data.results || begruenungsvariantenRes.data || []);\n    } catch (error) {\n      console.error('Error loading options:', error);\n    } finally {\n      setLoadingOptions(false);\n    }\n  };\n\n  const initializeFormData = () => {\n    if (operation === 'create') {\n      switch (target?.type) {\n        case 'year':\n          setFormData({ year: new Date().getFullYear(), foerderart: 'ÖPUL', type_of_farming: '' });\n          break;\n        case 'feldstueck':\n          setFormData({ nummer: '', bezeichnung: '', flaeche: '', nutzungsart_id: '' });\n          break;\n        case 'schlag':\n          setFormData({\n            nummer: '',\n            flaeche_brutto: '',\n            flaeche_netto: '',\n            codes: '',\n            crop_id: '',\n            begruenungsvariante_id: '',\n            type_of_farming: ''\n          });\n          break;\n        default:\n          break;\n      }\n    } else if (operation === 'edit') {\n      switch (target?.type) {\n        case 'year':\n          setFormData({\n            year: target.item.year,\n            foerderart: target.item.foerderart || 'ÖPUL',\n            type_of_farming: target.item.type_of_farming || ''\n          });\n          break;\n        case 'feldstueck':\n          setFormData({\n            nummer: target.item.nummer,\n            bezeichnung: target.item.bezeichnung || '',\n            flaeche: target.item.flaeche,\n            nutzungsart_id: target.item.nutzungsart?.id || ''\n          });\n          break;\n        case 'schlag':\n          // Get the crop_id from the schlag's crop field\n          const cropId = target.item.crop?.id || '';\n          \n          // Use the schlag's type_of_farming directly - it should be the actual DB value\n          // If it's empty string or null, that means it inherits from parent\n          const schlagTypeOfFarming = target.item.type_of_farming || '';\n\n          setFormData({\n            nummer: target.item.nummer,\n            flaeche_brutto: target.item.flaeche_brutto,\n            flaeche_netto: target.item.flaeche_netto,\n            codes: target.item.codes || '',\n            crop_id: cropId,\n            begruenungsvariante_id: target.item.begruenungsvariante?.id || '',\n            type_of_farming: schlagTypeOfFarming,\n            schlag_nutzungsart: target.item.schlag_nutzungsart || null\n          });\n          break;\n        default:\n          break;\n      }\n    }\n  };\n\n  const handleInputChange = (field, value) => {\n    setFormData(prev => ({ ...prev, [field]: value }));\n  };\n\n  const handleSave = async () => {\n    // Remove schlag_nutzungsart object before sending (it's just for display)\n    const { schlag_nutzungsart, ...dataToSend } = formData;\n    \n    try {\n      // First save the form data\n      await onSave(dataToSend);\n      \n      // Then save the geometry if it was changed\n      if (geometryChanged && target?.type === 'schlag' && target?.item?.id) {\n        try {\n          // Save geometry (or delete if null)\n          await api.post(\n            `/schlaege/${target.item.id}/save_geometry/`,\n            { geometry: pendingGeometry }\n          );\n          // Reset geometry state after successful save\n          setGeometryChanged(false);\n          setPendingGeometry(null);\n        } catch (geoError) {\n          console.error('Error saving geometry:', geoError);\n          // Don't throw - the main save was successful\n          alert('Warnung: Polygon konnte nicht gespeichert werden: ' + (geoError.response?.data?.error || geoError.message));\n        }\n      }\n      // Don't call onHide() here - let the parent component handle closing after all updates\n    } catch (error) {\n      console.error('CrudModal - Error in handleSave:', error);\n    }\n  };\n\n  const getModalTitle = () => {\n    const actionText = operation === 'create' ? 'Hinzufügen' : 'Bearbeiten';\n    switch (target?.type) {\n      case 'year':\n        return `Erntejahr ${formData.year} ${actionText}`;\n      case 'feldstueck':\n        return `Feldstück ${actionText}`;\n      case 'schlag':\n        return `Schlag ${formData.nummer} ${actionText}`;\n      default:\n        return actionText;\n    }\n  };\n\n  const renderFormFields = () => {\n    if (loadingOptions) {\n      return (\n        <div className=\"text-center py-3\">\n          <Spinner size=\"sm\" className=\"me-2\" />\n          <small>Lade Optionen...</small>\n        </div>\n      );\n    }\n\n    switch (target?.type) {\n      case 'year':\n        return (\n          <YearForm\n            formData={formData}\n            onInputChange={handleInputChange}\n            parentData={target?.parentData}\n          />\n        );\n\n      case 'feldstueck':\n        return (\n          <FeldstueckForm\n            formData={formData}\n            onInputChange={handleInputChange}\n            nutzungsarten={nutzungsarten}\n          />\n        );\n\n      case 'schlag':\n        return (\n          <SchlagForm\n            formData={formData}\n            onInputChange={handleInputChange}\n            crops={nutzungsarten}\n            begruenungsvarianten={begruenungsvarianten}\n            parentData={target?.parentData}\n          />\n        );\n\n      default:\n        return <div>Unbekannter Typ</div>;\n    }\n  };\n\n  // Check if we should show tabs (only for editing Schlag)\n  const showTabs = target?.type === 'schlag' && operation === 'edit';\n\n  return (\n    <>\n      <Modal \n        show={show} \n        onHide={onHide}\n        centered \n        size={showTabs ? 'lg' : undefined}\n        backdrop={error ? 'static' : true}\n        keyboard={!error}\n        className={showTabs ? 'modal-with-tabs' : ''}\n      >\n        <Modal.Header closeButton={!error}>\n          <Modal.Title className=\"h6\">{getModalTitle()}</Modal.Title>\n        </Modal.Header>\n        <Modal.Body>\n          {error && (\n            <Alert variant=\"danger\" className=\"mb-3\">\n              <i className=\"bi bi-exclamation-triangle me-2\"></i>\n              {error}\n            </Alert>\n          )}\n          {showTabs ? (\n            <Tab.Container activeKey={activeTab} onSelect={(k) => setActiveTab(k)}>\n              <Nav variant=\"tabs\" className=\"mb-3\">\n                <Nav.Item>\n                  <Nav.Link eventKey=\"basic\">Grunddaten</Nav.Link>\n                </Nav.Item>\n                <Nav.Item>\n                  <Nav.Link eventKey=\"polygon\">\n                    Karte\n                  </Nav.Link>\n                </Nav.Item>\n                <Nav.Item>\n                  <Nav.Link eventKey=\"landuse\">Landnutzungsänderungen</Nav.Link>\n                </Nav.Item>\n              </Nav>\n              <Tab.Content>\n                <Tab.Pane eventKey=\"basic\">\n                  {renderFormFields()}\n                </Tab.Pane>\n                <Tab.Pane eventKey=\"polygon\">\n                  {loadingGeometry ? (\n                    <div className=\"text-center py-4\">\n                      <Spinner animation=\"border\" />\n                      <p className=\"mt-2 text-muted\">Lade Geometriedaten...</p>\n                    </div>\n                  ) : (\n                    <div className=\"\">\n\n                      {/* Area Display and Actions */}\n                      <div className=\"mb-1 bg-light rounded\">\n                        <Row className=\"align-items-center\">\n                          <Col md={6}>\n                            <div className=\"mb-2\">\n                              <small className=\"text-muted\">Aktuelle Fläche:</small>\n                            </div>\n                            <div className=\"d-flex gap-3 mb-2\">\n                              <div>\n                                <small className=\"text-muted\">Brutto:</small>\n                                <div className=\"fw-semibold\">{formData.flaeche_brutto || '—'} ha</div>\n                              </div>\n                              <div>\n                                <small className=\"text-muted\">Netto:</small>\n                                <div className=\"fw-semibold\">{formData.flaeche_netto || '—'} ha</div>\n                              </div>\n                            </div>\n                            {calculatedArea > 0 && (\n                              <Button \n                                variant=\"outline-primary\" \n                                size=\"sm\"\n                                onClick={handleApplyAreaToForm}\n                              >\n                                <i className=\"bi bi-arrow-left-circle me-1\"></i>\n                                Fläche übernehmen\n                              </Button>\n                            )}\n                          </Col>\n                          {calculatedArea.toFixed(4) !== formData.flaeche_brutto ?\n                              <div>TEST TEST</div>\n                              : <div>NEGATIV</div>\n                          }\n                          <div>\n                            <h6 className=\"mb-2\">\n                              <i className=\"bi bi-rulers me-2\"></i>\n                              Berechnete Fläche\n                            </h6>\n                            <div className=\"d-flex align-items-baseline\">\n                              <span className=\"fs-4 fw-bold text-primary\">\n                                {calculatedArea > 0 ? calculatedArea.toFixed(4) : '—'}\n                              </span>\n                              <span className=\"ms-2 text-muted\">ha</span>\n                            </div>\n                            {calculatedArea > 0 && (\n                              <small className=\"text-muted\">\n                                = {(calculatedArea * 10000).toFixed(0)} m²\n                              </small>\n                            )}\n                          </div>\n\n                        </Row>\n                      </div>\n\n                      {/* Instructions */}\n                      {/* <Alert variant=\"info\" className=\"mb-3\">\n                        <i className=\"bi bi-info-circle me-2\"></i>\n                        <strong>Anleitung:</strong> Verwenden Sie die Werkzeuge links auf der Karte, um ein Polygon zu zeichnen oder zu bearbeiten.\n                        <ul className=\"mb-0 mt-2\">\n                          <li><i className=\"bi bi-pentagon\"></i> Polygon zeichnen: Klicken Sie auf die Karte, um Punkte zu setzen. Doppelklick zum Abschließen.</li>\n                          <li><i className=\"bi bi-pencil\"></i> Bearbeiten: Klicken Sie auf das Bearbeiten-Symbol und ziehen Sie die Punkte.</li>\n                          <li><i className=\"bi bi-trash\"></i> Löschen: Klicken Sie auf das Löschen-Symbol und dann auf das Polygon.</li>\n                        </ul>\n                      </Alert> */}\n\n                      {/* Polygon Editor */}\n                      <SchlagPolygonEditor\n                        existingGeometry={existingGeometry}\n                        feldstueckGeometry={feldstueckGeometry}\n                        onGeometryChange={handleGeometryChange}\n                        onAreaChange={handleAreaChange}\n                        isVisible={activeTab === 'polygon'}\n                      />\n\n\n\n                      {/* Status indicator */}\n                      {geometryChanged && (\n                        <Alert variant=\"warning\" className=\"mt-3 mb-0\">\n                          <i className=\"bi bi-exclamation-triangle me-2\"></i>\n                          Das Polygon wurde geändert. Klicken Sie auf \"Speichern\", um die Änderungen zu übernehmen.\n                        </Alert>\n                      )}\n                    </div>\n                  )}\n                </Tab.Pane>\n                <Tab.Pane eventKey=\"landuse\">\n                  <LandUseChangeManager \n                    schlagId={target.item.id} \n                    schlagFlaecheBrutto={target.item.flaeche_brutto}\n                  />\n                </Tab.Pane>\n              </Tab.Content>\n            </Tab.Container>\n          ) : (\n            renderFormFields()\n          )}\n        </Modal.Body>\n        <Modal.Footer>\n          <Button variant=\"secondary\" onClick={onHide} disabled={loading}>\n            Abbrechen\n          </Button>\n          {(!showTabs || activeTab === 'basic' || activeTab === 'polygon') && (\n            <Button variant=\"primary\" onClick={handleSave} disabled={loading}>\n              {loading && <Spinner size=\"sm\" className=\"me-2\" />}\n              {operation === 'create' ? 'Hinzufügen' : 'Speichern'}\n              {geometryChanged && activeTab === 'polygon' && (\n                <span className=\"ms-1\">\n                  <i className=\"bi bi-geo-alt-fill\"></i>\n                </span>\n              )}\n            </Button>\n          )}\n        </Modal.Footer>\n      </Modal>\n    </>\n  );\n};\n\nexport default CrudModal;\n","import React from 'react';\nimport { Modal, Button, Alert } from 'react-bootstrap';\n\nconst DeleteConfirmModal = ({ \n    show, \n    onHide, \n    onConfirm, \n    title, \n    message, \n    confirmText = \"Löschen\", \n    confirmVariant = \"danger\",\n    isLoading = false,\n    details = null // Optional: array of strings or null to hide the details section\n}) => {\n    return (\n        <Modal show={show} onHide={onHide} centered>\n            <Modal.Header closeButton>\n                <Modal.Title className=\"text-danger\">\n                    <i className=\"bi bi-exclamation-triangle me-2\"></i>\n                    {title}\n                </Modal.Title>\n            </Modal.Header>\n            <Modal.Body>\n                <Alert variant=\"warning\" className=\"mb-3\">\n                    <i className=\"bi bi-warning me-2\"></i>\n                    <strong>Achtung:</strong> Diese Aktion kann nicht rückgängig gemacht werden!\n                </Alert>\n\n                <p>{message}</p>\n\n                {details && details.length > 0 && (\n                    <div className=\"bg-light p-3 rounded mt-3\">\n                        <small className=\"text-muted\">\n                            <strong>Was wird gelöscht:</strong>\n                            <ul className=\"mt-2 mb-0\">\n                                {details.map((detail, index) => (\n                                    <li key={index}>{detail}</li>\n                                ))}\n                            </ul>\n                        </small>\n                    </div>\n                )}\n            </Modal.Body>\n            <Modal.Footer>\n                <Button \n                    variant=\"secondary\" \n                    onClick={onHide}\n                    disabled={isLoading}\n                >\n                    Abbrechen\n                </Button>\n                <Button\n                    variant={confirmVariant}\n                    onClick={onConfirm}\n                    disabled={isLoading}\n                >\n                    {isLoading ? (\n                        <>\n                            <span className=\"spinner-border spinner-border-sm me-2\" role=\"status\"></span>\n                            Lösche...\n                        </>\n                    ) : (\n                        <>\n                            <i className=\"bi bi-trash me-2\"></i>\n                            {confirmText}\n                        </>\n                    )}\n                </Button>\n            </Modal.Footer>\n        </Modal>\n    );\n};\n\nexport default DeleteConfirmModal;\n","import React, { useRef, useState, useEffect } from 'react';\nimport { Modal, Button, Table, Spinner } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport api from '../../../utils/api';\nimport { getOperationIcon } from '../../../utils/operationIcons';\n\n// Helper function to format numbers as German decimals with 2 decimal places\nconst formatGermanDecimal = (value) => {\n  if (value === null || value === undefined || value === '') return '—';\n  const num = parseFloat(value);\n  if (isNaN(num)) return '—';\n  return num.toFixed(2).replace('.', ',');\n};\n\n// Helper function to format date in German format\nconst formatDate = (dateString) => {\n  if (!dateString) return '—';\n  return new Date(dateString).toLocaleDateString('de-DE', {\n    day: '2-digit',\n    month: '2-digit',\n    year: 'numeric'\n  });\n};\n\nconst OperationDataSheetModal = ({ \n  show, \n  onHide, \n  operations = [], \n  context = {},  // { farm, year, feldstueck, schlag }\n  title = 'Datenblatt'\n}) => {\n  const printRef = useRef(null);\n  const user = useSelector((state) => state.auth.user);\n  // const [co2Data, setCo2Data] = useState(null);\n  // const [co2Loading, setCo2Loading] = useState(false);\n\n  // // Fetch CO2 data when modal opens (only for superusers and if schlag context exists)\n  // useEffect(() => {\n  //   const fetchCO2Data = async () => {\n  //     if (!show || !user?.is_superuser || !context.schlag?.id) {\n  //       setCo2Data(null);\n  //       return;\n  //     }\n\n  //     setCo2Loading(true);\n  //     try {\n  //       const response = await api.get(`/co2-calculations/schlag/${context.schlag.id}/`);\n  //       setCo2Data(response.data);\n  //     } catch (error) {\n  //       console.error('Error fetching CO2 data:', error);\n  //       setCo2Data(null);\n  //     } finally {\n  //       setCo2Loading(false);\n  //     }\n  //   };\n\n  //   fetchCO2Data();\n  // }, [show, user, context.schlag]);\n\n  // Generate print styles as a string for the print window\n  const getPrintStyles = () => `\n    @page {\n      size: A4;\n      margin: 15mm;\n    }\n    * {\n      box-sizing: border-box;\n    }\n    html, body {\n      width: 210mm;\n      margin: 0 auto;\n      padding: 0;\n    }\n    body {\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n      font-size: 11pt;\n      line-height: 1.4;\n      color: #333;\n      padding: 10mm;\n      background: white;\n    }\n    .operation-datasheet {\n      font-size: 12px;\n    }\n    .datasheet-header {\n      border-bottom: 3px solid #005541;\n      padding-bottom: 15px;\n      margin-bottom: 20px;\n    }\n    .datasheet-header h1 {\n      color: #005541;\n      font-size: 24px;\n      font-weight: 600;\n      margin: 0 0 10px 0;\n    }\n    .header-meta {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 20px;\n      font-size: 11px;\n      color: #666;\n    }\n    .meta-item {\n      display: flex;\n      align-items: center;\n      gap: 5px;\n    }\n    .meta-item strong {\n      color: #333;\n    }\n    .datasheet-context {\n      background: #f8f9fa;\n      border: 1px solid #dee2e6;\n      padding: 15px;\n      margin-bottom: 20px;\n    }\n    .datasheet-context h2 {\n      font-size: 14px;\n      font-weight: 600;\n      margin: 0 0 10px 0;\n      color: #005541;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n    }\n    .context-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n      gap: 10px;\n    }\n    .context-item {\n      display: flex;\n      flex-direction: column;\n      gap: 2px;\n    }\n    .context-item label {\n      font-size: 10px;\n      color: #666;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n      margin: 0;\n    }\n    .context-item span {\n      font-weight: 600;\n      font-size: 12px;\n    }\n    .datasheet-summary {\n      margin-bottom: 20px;\n    }\n    .datasheet-summary h2,\n    .datasheet-operations h2 {\n      font-size: 16px;\n      font-weight: 600;\n      color: #005541;\n      margin: 0 0 15px 0;\n      padding-bottom: 5px;\n      border-bottom: 2px solid #dee2e6;\n    }\n    .summary-table {\n      width: 100%;\n      border-collapse: collapse;\n    }\n    .summary-table th,\n    .summary-table td {\n      border: 1px solid #dee2e6;\n      padding: 8px 12px;\n      text-align: left;\n    }\n    .summary-table th {\n      background: #005541;\n      color: #fff;\n      font-weight: 600;\n      font-size: 11px;\n      text-transform: uppercase;\n    }\n    .summary-table td {\n      font-size: 12px;\n    }\n    .summary-table .text-end {\n      text-align: right;\n    }\n    .summary-total-row {\n      font-weight: bold;\n      background: #f8f9fa;\n    }\n    .summary-total-row td {\n      border-top: 2px solid #005541;\n    }\n    .operation-card {\n      border: 1px solid #dee2e6;\n      margin-bottom: 15px;\n      page-break-inside: avoid;\n      overflow: hidden;\n    }\n    .operation-card-header {\n      background: #f8f9fa;\n      padding: 10px 15px;\n      border-bottom: 1px solid #dee2e6;\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n    }\n    .operation-card-header h3 {\n      font-size: 14px;\n      font-weight: 600;\n      margin: 0;\n      display: flex;\n      align-items: center;\n      gap: 8px;\n    }\n    .operation-icon {\n      width: 20px;\n      height: 20px;\n    }\n    .operation-date {\n      font-size: 12px;\n      color: #666;\n      display: flex;\n      align-items: center;\n      gap: 4px;\n    }\n    .operation-card-body {\n      padding: 15px;\n    }\n    .operation-details-grid {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n      gap: 10px;\n    }\n    .detail-item {\n      display: flex;\n      flex-direction: column;\n      padding: 8px;\n      background: #f8f9fa;\n    }\n    .detail-item label {\n      font-size: 10px;\n      color: #666;\n      text-transform: uppercase;\n      letter-spacing: 0.5px;\n      margin: 0;\n    }\n    .detail-item span {\n      font-weight: 600;\n      font-size: 12px;\n    }\n    .operation-notes {\n      margin-top: 10px;\n      padding-top: 10px;\n      border-top: 1px dashed #dee2e6;\n    }\n    .operation-notes label {\n      font-size: 10px;\n      color: #666;\n      text-transform: uppercase;\n      display: block;\n      margin-bottom: 5px;\n    }\n    .operation-notes p {\n      margin: 0;\n      font-style: italic;\n      color: #555;\n      background: #fffef5;\n      padding: 8px;\n      border: 1px solid #f0e68c;\n    }\n    .datasheet-footer {\n      margin-top: 30px;\n      padding-top: 15px;\n      border-top: 2px solid #dee2e6;\n      font-size: 10px;\n      color: #666;\n      display: flex;\n      justify-content: space-between;\n    }\n    .footer-brand {\n      font-weight: 600;\n      color: #005541;\n    }\n    .feldstueck-group {\n      margin-bottom: 15px;\n      border: 1px solid #dee2e6;\n      overflow: hidden;\n    }\n    .feldstueck-header {\n      background: #005541;\n      color: #fff;\n      padding: 10px 15px;\n      font-weight: 600;\n      font-size: 13px;\n      display: flex;\n      align-items: center;\n      gap: 8px;\n    }\n    .feldstueck-header i {\n      font-size: 14px;\n    }\n    .feldstueck-area {\n      font-weight: 400;\n      opacity: 0.9;\n      margin-left: 4px;\n    }\n    .schlag-group {\n      border-top: 1px solid #dee2e6;\n    }\n    .schlag-group:first-child {\n      border-top: none;\n    }\n    .schlag-header {\n      background: #f8f9fa;\n      padding: 8px 15px 8px 20px;\n      font-weight: 600;\n      font-size: 12px;\n      color: #333;\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      border-bottom: 1px solid #dee2e6;\n    }\n    .schlag-header i {\n      color: #009e3c;\n    }\n    .schlag-area {\n      font-weight: 400;\n      color: #666;\n      margin-left: 4px;\n    }\n    .schlag-crop {\n      font-weight: 400;\n      color: #666;\n      font-style: italic;\n    }\n    .schlag-operations {\n      padding: 15px;\n      background: #fff;\n    }\n    @media print {\n      body {\n        padding: 0;\n      }\n      .operation-card {\n        page-break-inside: avoid;\n      }\n    }\n  `;\n\n  const handlePrint = () => {\n    const printContent = printRef.current;\n    if (!printContent) return;\n\n    // Create a hidden iframe for printing\n    const printFrame = document.createElement('iframe');\n    printFrame.style.position = 'fixed';\n    printFrame.style.right = '0';\n    printFrame.style.bottom = '0';\n    printFrame.style.width = '0';\n    printFrame.style.height = '0';\n    printFrame.style.border = 'none';\n    printFrame.style.visibility = 'hidden';\n    document.body.appendChild(printFrame);\n\n    const frameDoc = printFrame.contentDocument || printFrame.contentWindow.document;\n    \n    // Build HTML content for print\n    frameDoc.open();\n    frameDoc.write(`<!DOCTYPE html>\n<html lang=\"de\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>${title}</title>\n  <style>${getPrintStyles()}</style>\n</head>\n<body>\n  ${printContent.innerHTML}\n</body>\n</html>`);\n    frameDoc.close();\n\n    // Flag to prevent double printing\n    let hasPrinted = false;\n\n    const triggerPrint = () => {\n      if (hasPrinted) return;\n      hasPrinted = true;\n      \n      try {\n        printFrame.contentWindow.focus();\n        printFrame.contentWindow.print();\n      } catch (e) {\n        console.error('Print error:', e);\n      }\n      \n      // Remove iframe after a delay (to allow print dialog to complete)\n      setTimeout(() => {\n        if (document.body.contains(printFrame)) {\n          document.body.removeChild(printFrame);\n        }\n      }, 100);\n    };\n\n    // Wait for content to load, then print\n    printFrame.onload = () => {\n      setTimeout(triggerPrint, 250);\n    };\n\n    // Fallback if onload doesn't fire (some browsers)\n    setTimeout(() => {\n      if (!hasPrinted && document.body.contains(printFrame)) {\n        triggerPrint();\n      }\n    }, 1000);\n  };\n\n  const handleDownloadPDF = () => {\n    // Use print dialog with \"Save as PDF\" option\n    handlePrint();\n  };\n\n  // Render operation-specific details\n  const renderOperationDetails = (operation) => {\n    const details = [];\n\n    // Common details\n    if (operation.area_ha) {\n      details.push({ label: 'Fläche', value: `${formatGermanDecimal(operation.area_ha)} ha` });\n    }\n    if (operation.fuel_type?.name) {\n      details.push({ label: 'Kraftstoff', value: operation.fuel_type.name });\n    }\n    if (operation.default_unit?.name) {\n      details.push({ label: 'Einheit', value: `${operation.default_unit.name} (${operation.default_unit.code})` });\n    }\n\n    // Soil work details\n    if (operation.soil_work_data) {\n      const sw = operation.soil_work_data;\n      if (sw.soil_work_type?.name) {\n        details.push({ label: 'Art der Bodenbearbeitung', value: sw.soil_work_type.name });\n      }\n      if (sw.depth) {\n        details.push({ label: 'Tiefe', value: sw.depth === 'DEEP' ? 'Tief (≥25cm)' : 'Seicht (<25cm)' });\n      }\n    }\n\n    // Seeding details\n    if (operation.seeding_data) {\n      const sd = operation.seeding_data;\n      if (sd.crop?.name) {\n        details.push({ label: 'Kultur', value: sd.crop.name });\n      }\n      if (sd.seed_amount && sd.seed_unit?.code) {\n        details.push({ label: 'Saatgutmenge', value: `${sd.seed_amount} ${sd.seed_unit.code}` });\n      }\n    }\n\n    // Fertilizing details\n    if (operation.fertilizing_data) {\n      const fd = operation.fertilizing_data;\n      if (fd.specific_product?.name) {\n        details.push({ label: 'Produkt', value: `${fd.specific_product.name} (${fd.specific_product.code})` });\n      }\n      if (fd.organic_fertilizer_type?.name) {\n        details.push({ label: 'Organischer Dünger', value: fd.organic_fertilizer_type.name });\n      }\n      if (fd.nitrogen_percent) {\n        details.push({ label: 'Stickstoff (N)', value: `${fd.nitrogen_percent}%` });\n      }\n      if (fd.phosphorus_percent) {\n        details.push({ label: 'Phosphor (P)', value: `${fd.phosphorus_percent}%` });\n      }\n      if (fd.potassium_percent) {\n        details.push({ label: 'Kalium (K)', value: `${fd.potassium_percent}%` });\n      }\n      if (fd.amount && fd.unit?.code) {\n        details.push({ label: 'Menge', value: `${fd.amount} ${fd.unit.code}` });\n      }\n    }\n\n    // Pest control details\n    if (operation.pest_control_data) {\n      const pc = operation.pest_control_data;\n      if (pc.specific_product?.name) {\n        details.push({ label: 'Produkt', value: `${pc.specific_product.name} (${pc.specific_product.pesticide_type})` });\n      }\n      if (pc.herbicide_content_gl) {\n        details.push({ label: 'Herbizid', value: `${pc.herbicide_content_gl} g/L` });\n      }\n      if (pc.fungicide_content_gl) {\n        details.push({ label: 'Fungizid', value: `${pc.fungicide_content_gl} g/L` });\n      }\n      if (pc.insecticide_content_gl) {\n        details.push({ label: 'Insektizid', value: `${pc.insecticide_content_gl} g/L` });\n      }\n      if (pc.amount && pc.unit?.code) {\n        details.push({ label: 'Menge', value: `${pc.amount} ${pc.unit.code}` });\n      }\n    }\n\n    // Irrigation details\n    if (operation.irrigation_data) {\n      const ir = operation.irrigation_data;\n      if (ir.irrigation_type?.name) {\n        details.push({ label: 'Beregnungstyp', value: ir.irrigation_type.name });\n      }\n      if (ir.irrigation_amount && ir.irrigation_unit?.code) {\n        details.push({ label: 'Beregnungsmenge', value: `${ir.irrigation_amount} ${ir.irrigation_unit.code}` });\n      }\n    }\n\n    // Harvest details\n    if (operation.harvest_data) {\n      const hd = operation.harvest_data;\n      if (hd.crop?.name) {\n        details.push({ label: 'Kultur', value: hd.crop.name });\n      }\n      if (hd.harvest_amount && hd.harvest_unit?.code) {\n        details.push({ label: 'Erntemenge', value: `${hd.harvest_amount} ${hd.harvest_unit.code}` });\n      }\n      if (hd.moisture_percent) {\n        details.push({ label: 'Feuchtigkeit', value: `${hd.moisture_percent}%` });\n      }\n      if (hd.quality_grade) {\n        details.push({ label: 'Qualitätsklasse', value: hd.quality_grade });\n      }\n    }\n\n    return details;\n  };\n\n  // Group operations by type for summary\n  const getOperationsSummary = () => {\n    const summary = {};\n    operations.forEach(op => {\n      const typeName = op.operation_type?.name || 'Unbekannt';\n      if (!summary[typeName]) {\n        summary[typeName] = {\n          count: 0,\n          totalArea: 0\n        };\n      }\n      summary[typeName].count++;\n      summary[typeName].totalArea += parseFloat(op.area_ha) || 0;\n    });\n    return summary;\n  };\n\n  // Group operations by Feldstück and Schlag for hierarchical display\n  const getGroupedOperations = () => {\n    // Check if operations have parent context\n    const hasParentContext = operations.some(op => op._feldstueck || op._schlag);\n    \n    if (!hasParentContext) {\n      // No grouping needed - return flat list\n      return null;\n    }\n\n    // Group by Feldstück, then by Schlag\n    const grouped = {};\n    operations.forEach(op => {\n      const feldstueckId = op._feldstueck?.id || 'unknown';\n      const feldstueckName = op._feldstueck?.bezeichnung || op._feldstueck?.nummer || 'Unbekannt';\n      const schlagId = op._schlag?.id || 'unknown';\n      const schlagNummer = op._schlag?.nummer || 'Unbekannt';\n\n      if (!grouped[feldstueckId]) {\n        grouped[feldstueckId] = {\n          feldstueck: op._feldstueck,\n          name: feldstueckName,\n          schlaege: {}\n        };\n      }\n\n      if (!grouped[feldstueckId].schlaege[schlagId]) {\n        grouped[feldstueckId].schlaege[schlagId] = {\n          schlag: op._schlag,\n          nummer: schlagNummer,\n          operations: []\n        };\n      }\n\n      grouped[feldstueckId].schlaege[schlagId].operations.push(op);\n    });\n\n    return grouped;\n  };\n\n  const summary = getOperationsSummary();\n  const totalArea = operations.reduce((sum, op) => sum + (parseFloat(op.area_ha) || 0), 0);\n  const groupedOperations = getGroupedOperations();\n\n  return (\n    <Modal \n      show={show} \n      onHide={onHide} \n      size=\"xl\" \n      centered \n      scrollable\n      dialogClassName=\"operation-datasheet-modal\"\n    >\n      <Modal.Header closeButton>\n        <Modal.Title>\n          <i className=\"bi bi-file-earmark-text me-2\"></i>\n          {title}\n        </Modal.Title>\n      </Modal.Header>\n      <Modal.Body>\n        <div ref={printRef} className=\"operation-datasheet\">\n          {/* Header */}\n          <div className=\"datasheet-header\">\n            <h1>{title}</h1>\n            <div className=\"header-meta\">\n              <div className=\"meta-item\">\n                <i className=\"bi bi-calendar-event\"></i>\n                <strong>Erstellt am:</strong>\n                <span>{new Date().toLocaleDateString('de-DE', { \n                  day: '2-digit', \n                  month: '2-digit', \n                  year: 'numeric',\n                  hour: '2-digit',\n                  minute: '2-digit'\n                })}</span>\n              </div>\n              <div className=\"meta-item\">\n                <i className=\"bi bi-lightning\"></i>\n                <strong>Anzahl Maßnahmen:</strong>\n                <span>{operations.length}</span>\n              </div>\n            </div>\n          </div>\n\n          {/* Context Section */}\n          {(context.farm || context.year || context.feldstueck || context.schlag) && (\n            <div className=\"datasheet-context\">\n              <h2>Kontext</h2>\n              <div className=\"context-grid\">\n                {context.farm && (\n                  <div className=\"context-item\">\n                    <label>Betrieb</label>\n                    <span>{context.farm.name || context.farm.hauptbetriebsnummer}</span>\n                  </div>\n                )}\n                {context.year && (\n                  <div className=\"context-item\">\n                    <label>Erntejahr</label>\n                    <span>{context.year.year}</span>\n                  </div>\n                )}\n                {context.feldstueck && (\n                  <div className=\"context-item\">\n                    <label>Feldstück</label>\n                    <span>{context.feldstueck.bezeichnung || `#${context.feldstueck.nummer}`}</span>\n                  </div>\n                )}\n                {context.schlag && (\n                  <div className=\"context-item\">\n                    <label>Schlag</label>\n                    <span>#{context.schlag.nummer}</span>\n                  </div>\n                )}\n                {context.schlag?.flaeche_netto && (\n                  <div className=\"context-item\">\n                    <label>Schlagfläche</label>\n                    <span>{formatGermanDecimal(context.schlag.flaeche_netto)} ha</span>\n                  </div>\n                )}\n                {(context.schlag?.crop?.name || context.schlag?.schlag_nutzungsart?.name) && (\n                  <div className=\"context-item\">\n                    <label>Kultur / Nutzungsart</label>\n                    <span>{context.schlag.crop?.name || context.schlag.schlag_nutzungsart?.name}</span>\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n\n          {/* Summary Table */}\n          {operations.length > 1 && (\n            <div className=\"datasheet-summary\">\n              <h2>Zusammenfassung</h2>\n              <table className=\"summary-table\">\n                <thead>\n                  <tr>\n                    <th>Maßnahmentyp</th>\n                    <th className=\"text-end\">Anzahl</th>\n                    <th className=\"text-end\">Gesamtfläche</th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {Object.entries(summary).map(([typeName, data]) => (\n                    <tr key={typeName}>\n                      <td>{typeName}</td>\n                      <td className=\"text-end\">{data.count}</td>\n                      <td className=\"text-end\">{formatGermanDecimal(data.totalArea)} ha</td>\n                    </tr>\n                  ))}\n                  <tr className=\"summary-total-row\">\n                    <td>Gesamt</td>\n                    <td className=\"text-end\">{operations.length}</td>\n                    <td className=\"text-end\">{formatGermanDecimal(totalArea)} ha</td>\n                  </tr>\n                </tbody>\n              </table>\n            </div>\n          )}\n\n          {/* CO2 Bilanz (nur für Superuser) */}\n          {/* {user?.is_superuser && context.schlag && (\n            <div className=\"datasheet-summary\">\n              <h2>\n                <i className=\"bi bi-cloud me-2\"></i>\n                CO₂-Bilanz (Detailliert)\n              </h2> */}\n              {/* {co2Loading ? (\n                <div className=\"text-center py-3\">\n                  <Spinner animation=\"border\" size=\"sm\" className=\"me-2\" />\n                  <span className=\"text-muted\">Lade CO₂-Daten...</span>\n                </div>\n              ) : co2Data && co2Data.operations && co2Data.operations.length > 0 ? (\n                <Table striped bordered hover size=\"sm\" className=\"summary-table\">\n                  <thead>\n                    <tr>\n                      <th>Maßnahme</th>\n                      <th>Datum</th>\n                      <th className=\"text-end\">GWP Total</th>\n                      <th className=\"text-end\">Biogen</th>\n                      <th className=\"text-end\">Fossil</th>\n                      <th className=\"text-end\">Landnutzung</th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    {co2Data.operations.map((op, idx) => (\n                      <tr key={idx}>\n                        <td>{op.operation?.operation_type?.name || 'Unbekannt'}</td>\n                        <td>{formatDate(op.operation?.date)}</td>\n                        <td className=\"text-end\">{formatGermanDecimal(op.total_gwp)} kg CO₂eq</td>\n                        <td className=\"text-end\">{formatGermanDecimal(op.total_biogenic)} kg CO₂eq</td>\n                        <td className=\"text-end\">{formatGermanDecimal(op.total_fossil)} kg CO₂eq</td>\n                        <td className=\"text-end\">{formatGermanDecimal(op.total_land_use)} kg CO₂eq</td>\n                      </tr>\n                    ))}\n                    <tr className=\"summary-total-row\">\n                      <td colSpan=\"2\"><strong>Gesamt</strong></td>\n                      <td className=\"text-end\"><strong>{formatGermanDecimal(co2Data.total_gwp)} kg CO₂eq</strong></td>\n                      <td className=\"text-end\"><strong>{formatGermanDecimal(co2Data.total_biogenic)} kg CO₂eq</strong></td>\n                      <td className=\"text-end\"><strong>{formatGermanDecimal(co2Data.total_fossil)} kg CO₂eq</strong></td>\n                      <td className=\"text-end\"><strong>{formatGermanDecimal(co2Data.total_land_use)} kg CO₂eq</strong></td>\n                    </tr>\n                  </tbody>\n                </Table>\n              ) : (\n                <p className=\"text-muted\">Keine CO₂-Daten verfügbar</p>\n              )} */}\n            {/* </div>\n          )} */}\n\n          {/* Operations List */}\n          <div className=\"datasheet-operations\">\n            <h2>Maßnahmen im Detail</h2>\n            {operations.length === 0 ? (\n              <div className=\"datasheet-empty\">\n                <i className=\"bi bi-inbox\"></i>\n                <p>Keine Maßnahmen vorhanden</p>\n              </div>\n            ) : groupedOperations ? (\n              // Render grouped by Feldstück and Schlag\n              Object.entries(groupedOperations).map(([feldstueckId, feldstueckData]) => (\n                <div key={feldstueckId} className=\"feldstueck-group\">\n                  <div className=\"feldstueck-header\">\n                    <i className=\"bi bi-pin-map\"></i>\n                    <span>Feldstück: {feldstueckData.name}</span>\n                    {feldstueckData.feldstueck?.flaeche && (\n                      <span className=\"feldstueck-area\">\n                        ({formatGermanDecimal(feldstueckData.feldstueck.flaeche)} ha)\n                      </span>\n                    )}\n                  </div>\n                  {Object.entries(feldstueckData.schlaege).map(([schlagId, schlagData]) => (\n                    <div key={schlagId} className=\"schlag-group\">\n                      <div className=\"schlag-header\">\n                        <i className=\"bi bi-grid-3x3\"></i>\n                        <span>Schlag #{schlagData.nummer}</span>\n                        {schlagData.schlag?.flaeche_netto && (\n                          <span className=\"schlag-area\">\n                            ({formatGermanDecimal(schlagData.schlag.flaeche_netto)} ha)\n                          </span>\n                        )}\n                        {(schlagData.schlag?.crop?.name || schlagData.schlag?.schlag_nutzungsart?.name) && (\n                          <span className=\"schlag-crop\">\n                            — {schlagData.schlag.crop?.name || schlagData.schlag.schlag_nutzungsart?.name}\n                          </span>\n                        )}\n                      </div>\n                      <div className=\"schlag-operations\">\n                        {schlagData.operations.map((operation, index) => {\n                          const iconUrl = getOperationIcon(operation.operation_type?.name);\n                          const details = renderOperationDetails(operation);\n\n                          return (\n                            <div key={operation.id || index} className=\"operation-card\">\n                              <div className=\"operation-card-header\">\n                                <h3>\n                                  {iconUrl && (\n                                    <img \n                                      src={iconUrl} \n                                      alt={operation.operation_type?.name}\n                                      className=\"operation-icon\"\n                                    />\n                                  )}\n                                  {operation.operation_type?.name || 'Unbekannte Maßnahme'}\n                                </h3>\n                                <span className=\"operation-date\">\n                                  <i className=\"bi bi-calendar3\"></i>\n                                  {formatDate(operation.date)}\n                                </span>\n                              </div>\n                              <div className=\"operation-card-body\">\n                                {details.length > 0 ? (\n                                  <div className=\"operation-details-grid\">\n                                    {details.map((detail, idx) => (\n                                      <div key={idx} className=\"detail-item\">\n                                        <label>{detail.label}</label>\n                                        <span>{detail.value}</span>\n                                      </div>\n                                    ))}\n                                  </div>\n                                ) : (\n                                  <p className=\"text-muted mb-0\">Keine weiteren Details verfügbar</p>\n                                )}\n                                {operation.notes && (\n                                  <div className=\"operation-notes\">\n                                    <label>Notizen</label>\n                                    <p>{operation.notes}</p>\n                                  </div>\n                                )}\n                              </div>\n                            </div>\n                          );\n                        })}\n                      </div>\n                    </div>\n                  ))}\n                </div>\n              ))\n            ) : (\n              // Render flat list (no grouping)\n              operations.map((operation, index) => {\n                const iconUrl = getOperationIcon(operation.operation_type?.name);\n                const details = renderOperationDetails(operation);\n\n                return (\n                  <div key={operation.id || index} className=\"operation-card\">\n                    <div className=\"operation-card-header\">\n                      <h3>\n                        {iconUrl && (\n                          <img \n                            src={iconUrl} \n                            alt={operation.operation_type?.name}\n                            className=\"operation-icon\"\n                          />\n                        )}\n                        {operation.operation_type?.name || 'Unbekannte Maßnahme'}\n                      </h3>\n                      <span className=\"operation-date\">\n                        <i className=\"bi bi-calendar3\"></i>\n                        {formatDate(operation.date)}\n                      </span>\n                    </div>\n                    <div className=\"operation-card-body\">\n                      {details.length > 0 ? (\n                        <div className=\"operation-details-grid\">\n                          {details.map((detail, idx) => (\n                            <div key={idx} className=\"detail-item\">\n                              <label>{detail.label}</label>\n                              <span>{detail.value}</span>\n                            </div>\n                          ))}\n                        </div>\n                      ) : (\n                        <p className=\"text-muted mb-0\">Keine weiteren Details verfügbar</p>\n                      )}\n                      {operation.notes && (\n                        <div className=\"operation-notes\">\n                          <label>Notizen</label>\n                          <p>{operation.notes}</p>\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                );\n              })\n            )}\n          </div>\n\n          {/* Footer */}\n          <div className=\"datasheet-footer\">\n            <span className=\"footer-brand\">Cultivate - Betriebsmanagement</span>\n          </div>\n        </div>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button variant=\"secondary\" onClick={onHide}>\n          <i className=\"bi bi-x-lg me-2\"></i>\n          Schließen\n        </Button>\n        <Button variant=\"outline-primary\" onClick={handlePrint}>\n          <i className=\"bi bi-printer me-2\"></i>\n          Drucken\n        </Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n\nexport default OperationDataSheetModal;\n","import React, { useState, useEffect, useRef, useMemo } from 'react';\nimport { Accordion, Alert, Spinner } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectUser } from '../../auth/authSlice';\nimport { setImportSuccess } from '../../slices/farmSlice';\n\n// Custom hooks\nimport { useFarmData } from './hooks/useFarmData';\nimport { useFarmHandlers } from './hooks/useFarmHandlers';\n\n// Accordion components\nimport YearAccordionItem from './accordion/YearAccordionItem';\n\n// Modals\nimport FarmingInfoModal from './FarmingInfoModal';\nimport UnifiedFeldstueckModal from './UnifiedFeldstueckModal';\nimport QuickOperationModal from './QuickOperationModal';\nimport EditModal from './modals/EditModal';\nimport CrudModal from './modals/CrudModal';\nimport DeleteConfirmModal from './DeleteConfirmModal';\nimport OperationDataSheetModal from './modals/OperationDataSheetModal';\n\nconst FarmDetailsCollapsible = ({\n  farm,\n  onFarmUpdate,\n  collapseAll,\n  toggleAllLevel,\n  onLevelExpandStateChange,\n  unifiedSearchTerm,\n  expanded,\n  expandedIds,\n  visibleIds,\n  visibleLevels,\n  expandLevels,\n  openDropdownId,\n  setOpenDropdownId,\n}) => {\n  const dispatch = useDispatch();\n  const user = useSelector(selectUser);\n  const isSuperuser = user?.is_superuser || false;\n\n  // ── Data hook ──\n  const {\n    farmDetails,\n    loading,\n    error,\n    setError,\n    schlagOperationsDetails,\n    loadFarmDetails,\n    loadOperationsForFarmYear,\n  } = useFarmData(farm, expanded);\n\n  // ── Handler hook ──\n  const handlers = useFarmHandlers(farmDetails, loadFarmDetails, onFarmUpdate);\n\n  // ── Quick Operation Modal state ──\n  const [showQuickOperationModal, setShowQuickOperationModal] = useState(false);\n  const [preselectedSchlagData, setPreselectedSchlagData] = useState(null);\n  const [editOperationData, setEditOperationData] = useState(null);\n\n  // ── Unified Feldstück Modal state ──\n  const [showUnifiedFeldstueckModal, setShowUnifiedFeldstueckModal] = useState(false);\n  const [unifiedFeldstueckYear, setUnifiedFeldstueckYear] = useState(null);\n  const [editingFeldstueck, setEditingFeldstueck] = useState(null);\n\n  // ── Local search states ──\n  const [yearSearch, setYearSearch] = useState('');\n  const [feldstueckSearch, setFeldstueckSearch] = useState({});\n  const [schlagSearch, setSchlagSearch] = useState({});\n  const [operationSearch, setOperationSearch] = useState({});\n\n  // ── Dropdown state (local fallback) ──\n  const [localOpenDropdownId, setLocalOpenDropdownId] = useState(null);\n  const effectiveOpenDropdownId = openDropdownId !== undefined ? openDropdownId : localOpenDropdownId;\n  const effectiveSetOpenDropdownId = setOpenDropdownId !== undefined ? setOpenDropdownId : setLocalOpenDropdownId;\n\n  // ── Accordion open items ──\n  const [openAccordionItems, setOpenAccordionItems] = useState(() => {\n    const initial = new Set();\n    if (farm?.years) {\n      farm.years.forEach(year => {\n        initial.add(`year-${year.id}`);\n        if (year.feldstuecke) {\n          year.feldstuecke.forEach(fs => {\n            initial.add(`feld-${fs.id}`);\n            if (fs.schlaege) {\n              fs.schlaege.forEach(s => initial.add(`schlag-${s.id}`));\n            }\n          });\n        }\n      });\n    }\n    return initial;\n  });\n\n  const activeAccordionKey = useMemo(() => Array.from(openAccordionItems), [openAccordionItems]);\n\n  // ── Lazy-load operations when year accordion opens (fallback for when operations aren't in farm data) ──\n  // The hook's loadedYearIdsRef prevents duplicate API calls\n  useEffect(() => {\n    if (!farmDetails?.years) return;\n    farmDetails.years\n      .filter(y => openAccordionItems.has(`year-${y.id}`))\n      .forEach(year => {\n        // Only load if not already loaded (loadedYearIdsRef handles dedup)\n        loadOperationsForFarmYear(year.id);\n      });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [openAccordionItems, farmDetails]);\n\n  // ── Handle expandedIds prop ──\n  useEffect(() => {\n    if (!expandedIds) return;\n    const newOpenItems = new Set(openAccordionItems);\n    let hasChanges = false;\n    if (expandedIds.years) {\n      expandedIds.years.forEach(id => {\n        const key = `year-${id}`;\n        if (!newOpenItems.has(key)) { newOpenItems.add(key); hasChanges = true; }\n      });\n    }\n    if (expandedIds.feldstuecke) {\n      expandedIds.feldstuecke.forEach(id => {\n        const key = `feld-${id}`;\n        if (!newOpenItems.has(key)) { newOpenItems.add(key); hasChanges = true; }\n      });\n    }\n    if (hasChanges) setOpenAccordionItems(newOpenItems);\n  }, [expandedIds]);\n\n  // ── Handle expandLevels prop ──\n  const lastExpandLevels = useRef(null);\n  useEffect(() => {\n    if (expandLevels === lastExpandLevels.current) return;\n    lastExpandLevels.current = expandLevels;\n    if (!expandLevels || !farmDetails) return;\n\n    const newOpenItems = new Set();\n    if (expandLevels.farm_year && farmDetails.years) {\n      farmDetails.years.forEach(year => {\n        newOpenItems.add(`year-${year.id}`);\n        if (expandLevels.feldstueck && year.feldstuecke) {\n          year.feldstuecke.forEach(fs => {\n            newOpenItems.add(`feld-${fs.id}`);\n            if (expandLevels.schlag && fs.schlaege) {\n              fs.schlaege.forEach(s => newOpenItems.add(`schlag-${s.id}`));\n            }\n          });\n        }\n      });\n    }\n    setOpenAccordionItems(newOpenItems);\n  }, [expandLevels, farmDetails]);\n\n  // ── Handle toggleAllLevel prop ──\n  const lastToggleAllLevel = useRef(null);\n  useEffect(() => {\n    if (toggleAllLevel === lastToggleAllLevel.current) return;\n    lastToggleAllLevel.current = toggleAllLevel;\n    if (!toggleAllLevel || !farmDetails) return;\n\n    const newOpenItems = new Set(openAccordionItems);\n    const { level, expand } = toggleAllLevel;\n\n    if (level === 'farm_year' && farmDetails.years) {\n      farmDetails.years.forEach(y => expand ? newOpenItems.add(`year-${y.id}`) : newOpenItems.delete(`year-${y.id}`));\n    } else if (level === 'feldstueck' && farmDetails.years) {\n      farmDetails.years.forEach(y => (y.feldstuecke || []).forEach(fs => expand ? newOpenItems.add(`feld-${fs.id}`) : newOpenItems.delete(`feld-${fs.id}`)));\n    } else if (level === 'schlag' && farmDetails.years) {\n      farmDetails.years.forEach(y => (y.feldstuecke || []).forEach(fs => (fs.schlaege || []).forEach(s => expand ? newOpenItems.add(`schlag-${s.id}`) : newOpenItems.delete(`schlag-${s.id}`))));\n    }\n\n    setOpenAccordionItems(newOpenItems);\n    if (onLevelExpandStateChange) onLevelExpandStateChange(level, expand);\n  }, [toggleAllLevel, farmDetails, openAccordionItems, onLevelExpandStateChange]);\n\n  // ── Expand relevant items on search ──\n  const lastSearchTerm = useRef('');\n  useEffect(() => {\n    if (unifiedSearchTerm === lastSearchTerm.current) return;\n    lastSearchTerm.current = unifiedSearchTerm;\n\n    if (unifiedSearchTerm && unifiedSearchTerm.trim() && farmDetails?.years) {\n      const searchLower = unifiedSearchTerm.toLowerCase().trim();\n      const itemsToOpen = new Set();\n\n      farmDetails.years.forEach(year => {\n        let yearHasMatch = false;\n        (year.feldstuecke || []).forEach(feldstueck => {\n          const feldstueckMatches =\n            (feldstueck.bezeichnung && feldstueck.bezeichnung.toLowerCase().includes(searchLower)) ||\n            (feldstueck.nummer && feldstueck.nummer.toString().includes(searchLower));\n\n          let feldstueckHasMatchingSchlag = false;\n          (feldstueck.schlaege || []).forEach(schlag => {\n            const schlagMatches =\n              (schlag.nummer && schlag.nummer.toString().includes(searchLower)) ||\n              (schlag.schlag_nutzungsart?.name && schlag.schlag_nutzungsart.name.toLowerCase().includes(searchLower)) ||\n              (schlag.nutzungsart?.name && schlag.nutzungsart.name.toLowerCase().includes(searchLower)) ||\n              (schlag.codes && schlag.codes.toLowerCase().includes(searchLower));\n\n            const operations = schlagOperationsDetails[schlag.id] || [];\n            const hasMatchingOperation = operations.some(op =>\n              (op.operation_type?.name && op.operation_type.name.toLowerCase().includes(searchLower)) ||\n              (op.notes && op.notes.toLowerCase().includes(searchLower)) ||\n              (op.seeding_data?.crop?.name && op.seeding_data.crop.name.toLowerCase().includes(searchLower)) ||\n              (op.fertilizing_data?.specific_product?.name && op.fertilizing_data.specific_product.name.toLowerCase().includes(searchLower)) ||\n              (op.harvest_data?.crop?.name && op.harvest_data.crop.name.toLowerCase().includes(searchLower))\n            );\n\n            if (schlagMatches || hasMatchingOperation) feldstueckHasMatchingSchlag = true;\n          });\n\n          if (feldstueckMatches || feldstueckHasMatchingSchlag) {\n            yearHasMatch = true;\n            itemsToOpen.add(`feld-${feldstueck.id}`);\n          }\n        });\n        if (yearHasMatch) itemsToOpen.add(`year-${year.id}`);\n      });\n\n      setOpenAccordionItems(itemsToOpen);\n    } else if (!unifiedSearchTerm || !unifiedSearchTerm.trim()) {\n      if (!expandedIds) {\n        setOpenAccordionItems(new Set());\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [unifiedSearchTerm]);\n\n  // ── Loading / error states ──\n  if (loading) {\n    return (\n      <div className=\"text-center py-3\">\n        <Spinner size=\"sm\" className=\"me-2\" />\n        <small className=\"text-muted\">Lade Details...</small>\n      </div>\n    );\n  }\n\n  if (error && (!farmDetails || !Array.isArray(farmDetails.years))) {\n    return <Alert variant=\"warning\" className=\"small mb-2\">{error}</Alert>;\n  }\n\n  if (!farmDetails || !Array.isArray(farmDetails.years)) return null;\n\n  // ── Render ──\n  return (\n    <div>\n      {error && <Alert variant=\"warning\" className=\"small mb-2\">{error}</Alert>}\n\n      {/* Years Accordion */}\n      <Accordion\n        flush\n        alwaysOpen\n        activeKey={activeAccordionKey}\n        onSelect={(eventKeys) => setOpenAccordionItems(new Set(eventKeys))}\n      >\n        {farmDetails.years\n          .filter(year => {\n            if (visibleIds && visibleIds.years && !visibleIds.years.has(year.id)) return false;\n            if (!yearSearch) return true;\n            return year.year.toString().includes(yearSearch);\n          })\n          .map(year => (\n            <YearAccordionItem\n              key={year.id}\n              year={year}\n              farmDetails={farmDetails}\n              isSuperuser={isSuperuser}\n              openAccordionItems={openAccordionItems}\n              setOpenAccordionItems={setOpenAccordionItems}\n              activeAccordionKey={activeAccordionKey}\n              effectiveOpenDropdownId={effectiveOpenDropdownId}\n              effectiveSetOpenDropdownId={effectiveSetOpenDropdownId}\n              schlagOperationsDetails={schlagOperationsDetails}\n              visibleIds={visibleIds}\n              visibleLevels={visibleLevels}\n              unifiedSearchTerm={unifiedSearchTerm}\n              feldstueckSearch={feldstueckSearch}\n              schlagSearch={schlagSearch}\n              operationSearch={operationSearch}\n              handleCrudOperation={handlers.handleCrudOperation}\n              handleDelete={handlers.handleDelete}\n              setUnifiedFeldstueckYear={setUnifiedFeldstueckYear}\n              setEditingFeldstueck={setEditingFeldstueck}\n              setShowUnifiedFeldstueckModal={setShowUnifiedFeldstueckModal}\n              setPreselectedSchlagData={setPreselectedSchlagData}\n              setShowQuickOperationModal={setShowQuickOperationModal}\n              setDataSheetOperations={handlers.setDataSheetOperations}\n              setDataSheetContext={handlers.setDataSheetContext}\n              setDataSheetTitle={handlers.setDataSheetTitle}\n              setShowDataSheetModal={handlers.setShowDataSheetModal}\n              setEditOperationData={setEditOperationData}\n            />\n          ))}\n      </Accordion>\n\n      {/* ── Modals ── */}\n\n      <EditModal\n        show={handlers.showEditModal}\n        onHide={() => handlers.setShowEditModal(false)}\n        title={handlers.editTarget?.type === 'farm' ? 'Betriebsname bearbeiten' : 'Bezeichnung bearbeiten'}\n        value={handlers.editTarget?.type === 'farm' ? handlers.editTarget?.item?.name : handlers.editTarget?.item?.bezeichnung}\n        onSave={handlers.handleSave}\n        placeholder={handlers.editTarget?.type === 'farm' ? 'Betriebsname eingeben...' : 'Bezeichnung eingeben...'}\n      />\n\n      <FarmingInfoModal\n        show={handlers.showFarmingInfoModal}\n        onHide={() => handlers.setShowFarmingInfoModal(false)}\n        selectedArea={handlers.selectedAreaForEdit}\n        editMode={true}\n        onUpdate={async () => {\n          const updatedFarm = await loadFarmDetails(true);\n          if (onFarmUpdate && updatedFarm) onFarmUpdate(updatedFarm);\n        }}\n      />\n\n      <CrudModal\n        show={handlers.showCrudModal}\n        onHide={handlers.handleCrudModalClose}\n        operation={handlers.crudOperation}\n        target={handlers.crudTarget}\n        onSave={(formData) => handlers.handleCrudSave(formData, openAccordionItems, setOpenAccordionItems)}\n        loading={handlers.crudLoading}\n        error={handlers.crudError}\n      />\n\n      <UnifiedFeldstueckModal\n        show={showUnifiedFeldstueckModal}\n        onHide={() => {\n          setShowUnifiedFeldstueckModal(false);\n          setEditingFeldstueck(null);\n          setUnifiedFeldstueckYear(null);\n        }}\n        selectedFarmYear={unifiedFeldstueckYear}\n        editFeldstueck={editingFeldstueck}\n        onUpdate={async () => {\n          const updatedFarm = await loadFarmDetails(true);\n          if (onFarmUpdate && updatedFarm) onFarmUpdate(updatedFarm);\n        }}\n      />\n\n      <QuickOperationModal\n        show={showQuickOperationModal}\n        onHide={() => {\n          setShowQuickOperationModal(false);\n          setPreselectedSchlagData(null);\n          setEditOperationData(null);\n        }}\n        farms={preselectedSchlagData ? [preselectedSchlagData.farm] : (editOperationData ? [editOperationData.farm] : [])}\n        preselectedData={preselectedSchlagData}\n        editOperation={editOperationData}\n        onSuccess={async (operations, isEdit = false) => {\n          const schlagIds = new Set();\n          if (preselectedSchlagData) {\n            schlagIds.add(preselectedSchlagData.schlag.id);\n          } else if (editOperationData) {\n            schlagIds.add(editOperationData.schlag.id);\n          } else {\n            operations.forEach(op => {\n              if (op.farming_info?.schlag?.id) schlagIds.add(op.farming_info.schlag.id);\n            });\n          }\n\n          setShowQuickOperationModal(false);\n          setPreselectedSchlagData(null);\n          setEditOperationData(null);\n\n          if (isEdit) {\n            dispatch(setImportSuccess('Maßnahme erfolgreich aktualisiert!'));\n          } else {\n            dispatch(setImportSuccess(`${operations.length} Maßnahme${operations.length !== 1 ? 'n' : ''} erfolgreich erstellt!`));\n          }\n\n          const updatedFarm = await loadFarmDetails(true);\n          if (onFarmUpdate && updatedFarm) onFarmUpdate(updatedFarm);\n\n          if (!isEdit && schlagIds.size > 0) {\n            const newOpenItems = new Set(openAccordionItems);\n            schlagIds.forEach(id => newOpenItems.add(`schlag-${id}`));\n            setOpenAccordionItems(newOpenItems);\n          }\n        }}\n      />\n\n      <DeleteConfirmModal\n        show={handlers.showDeleteModal}\n        onHide={() => {\n          handlers.setShowDeleteModal(false);\n        }}\n        onConfirm={() => handlers.confirmDelete(setError)}\n        title={handlers.getDeleteModalConfig().title}\n        message={handlers.getDeleteModalConfig().message}\n        confirmText={\n          handlers.deleteTarget?.type === 'operation' ? 'Maßnahme löschen' :\n          handlers.deleteTarget?.type === 'year' ? 'Erntejahr löschen' :\n          handlers.deleteTarget?.type === 'feldstueck' ? 'Feldstück löschen' :\n          handlers.deleteTarget?.type === 'schlag' ? 'Schlag löschen' : 'Löschen'\n        }\n        isLoading={handlers.deleteLoading}\n        details={handlers.getDeleteModalConfig().details}\n      />\n\n      <OperationDataSheetModal\n        show={handlers.showDataSheetModal}\n        onHide={() => {\n          handlers.setShowDataSheetModal(false);\n          handlers.setDataSheetOperations([]);\n          handlers.setDataSheetContext({});\n        }}\n        operations={handlers.dataSheetOperations}\n        context={handlers.dataSheetContext}\n        title={handlers.dataSheetTitle}\n      />\n    </div>\n  );\n};\n\nexport default FarmDetailsCollapsible;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { ListGroup, Badge, Button, Collapse, Dropdown } from 'react-bootstrap';\nimport FarmDetailsCollapsible from './FarmDetailsCollapsibleRefactored';\nimport FarmTimeline from './FarmTimeline';\n\nconst FarmsList = ({ farms, onFarmDelete, onFarmUpdate, onFarmEdit, onAddYear, collapseAll, onCollapseAllComplete, toggleAllLevel, onToggleAllLevelComplete, onLevelExpandStateChange, expandedIds, visibleIds, searchTerm, visibleLevels, expandLevels, onExpandLevelsComplete }) => {\n    // Initialize all farms as expanded by default\n    const [showDetails, setShowDetails] = useState(() => {\n        const initialState = {};\n        farms.forEach(farm => {\n            initialState[farm.id] = true;\n        });\n        return initialState;\n    });\n\n    // Track which dropdown is currently open (shared across FarmsList and FarmDetailsCollapsible)\n    const [openDropdownId, setOpenDropdownId] = useState(null);\n\n    // Track if any modal is open to prevent collapse/expand\n    const isAnyModalOpenRef = useRef(false);\n\n    // Detect if any modal is open by checking for modal backdrop\n    useEffect(() => {\n        const checkForModals = () => {\n            const modalBackdrop = document.querySelector('.modal-backdrop');\n            const modalOpen = document.querySelector('.modal.show');\n            isAnyModalOpenRef.current = !!(modalBackdrop || modalOpen);\n        };\n\n        // Check initially\n        checkForModals();\n\n        // Set up observer to watch for modal changes\n        const observer = new MutationObserver(checkForModals);\n        observer.observe(document.body, {\n            childList: true,\n            subtree: true,\n            attributes: true,\n            attributeFilter: ['class']\n        });\n\n        return () => observer.disconnect();\n    }, []);\n\n    const toggleDetails = (farmId) => {\n        // Don't toggle if a modal is open\n        if (isAnyModalOpenRef.current) {\n            return;\n        }\n\n        setShowDetails(prev => ({\n            ...prev,\n            [farmId]: !prev[farmId]\n        }));\n    };\n\n    // Handle expandedIds changes\n    useEffect(() => {\n        if (expandedIds && expandedIds.farms && expandedIds.farms.size > 0) {\n            const newShowDetails = { ...showDetails };\n            expandedIds.farms.forEach(id => {\n                newShowDetails[id] = true;\n            });\n            setShowDetails(newShowDetails);\n        }\n    }, [expandedIds]);\n\n    // Handle collapse/uncollapse all\n    const lastCollapseAll = useRef(null);\n    useEffect(() => {\n        // Don't collapse/expand if a modal is open\n        if (isAnyModalOpenRef.current) {\n            return;\n        }\n\n        // Only process if collapseAll actually changed\n        if (collapseAll === lastCollapseAll.current) {\n            return;\n        }\n\n        lastCollapseAll.current = collapseAll;\n\n        if (collapseAll !== null) {\n            if (collapseAll === true) {\n                // Collapse all - set all to false\n                setShowDetails({});\n            } else {\n                // Expand all - set all farms to true\n                const allExpanded = {};\n                farms.forEach(farm => {\n                    allExpanded[farm.id] = true;\n                });\n                setShowDetails(allExpanded);\n            }\n            // Notify parent that collapse all is complete\n            if (onCollapseAllComplete) {\n                onCollapseAllComplete();\n            }\n        }\n    }, [collapseAll, farms, onCollapseAllComplete]);\n\n    // Handle expandLevels - expand farms when visibility buttons are activated\n    const lastExpandLevels = useRef(null);\n    useEffect(() => {\n        // Don't expand if a modal is open\n        if (isAnyModalOpenRef.current) {\n            return;\n        }\n\n        // Only process if expandLevels actually changed\n        if (expandLevels === lastExpandLevels.current) {\n            return;\n        }\n\n        lastExpandLevels.current = expandLevels;\n\n        if (expandLevels && expandLevels.farm) {\n            // Expand all farms\n            const allExpanded = {};\n            farms.forEach(farm => {\n                allExpanded[farm.id] = true;\n            });\n            setShowDetails(allExpanded);\n            \n            // Notify parent that expand is complete\n            if (onExpandLevelsComplete) {\n                onExpandLevelsComplete();\n            }\n        }\n    }, [expandLevels, farms, onExpandLevelsComplete]);\n\n    if (!farms || farms.length === 0) {\n        return (\n            <div className=\"text-center text-muted py-4\">\n                <p className=\"mb-2\">Keine Betriebe gefunden</p>\n                <small>Importieren Sie eine XML-Datei, um zu beginnen.</small>\n            </div>\n        );\n    }\n\n    // Build CSS classes based on visibleLevels\n    const getContainerClasses = () => {\n        const classes = [];\n        if (visibleLevels?.farm_year === false) classes.push('hide-farm-year');\n        if (visibleLevels?.feldstueck === false) classes.push('hide-feldstueck');\n        if (visibleLevels?.schlag === false) classes.push('hide-schlag');\n        if (visibleLevels?.operation === false) classes.push('hide-operation');\n        return classes.join(' ');\n    };\n\n    return (\n        <ListGroup variant=\"flush\" className={getContainerClasses()}>\n            {farms.map((farm) => {\n                const hasYears = farm.years_count > 0;\n\n                return (\n                    <ListGroup.Item\n                        key={farm.id}\n                        className=\"px-0 py-3\"\n                    >\n                        {/* <div className=\"ms-2 d-flex flex-row align-items-center justify-content-between gap-4 title-edit\">\n                            <div className=\"flex-grow-1 flex-column accordion-level-1\">\n                                <div className=\"fw-semibold\">\n                                    {farm.name || `Betrieb ${farm.hauptbetriebsnummer}`}\n                                </div>\n                            </div>\n                        </div> */}\n                        <div className=\"d-flex align-items-center flex-wrap gap-2 justify-content-between toggle-area\">\n                            <div className=\"d-flex flex-grow-1 align-items-stretch btn-group btn-group-sm btn-group-add-toggle\" role=\"group\">\n                                <div\n                                    className={`d-flex align-items-center btn btn-years btn-sm${!hasYears ? ' disabled' : ''}`}\n                                    onClick={(e) => {\n                                        e.stopPropagation();\n                                        if (hasYears) {\n                                            toggleDetails(farm.id);\n                                        }\n                                    }}\n                                    title={hasYears ? \"Details anzeigen\" : \"Keine Jahre vorhanden\"}\n                                    role=\"button\"\n                                    tabIndex={hasYears ? 0 : -1}\n                                    style={{\n                                        cursor: hasYears ? \"pointer\" : \"not-allowed\"\n                                    }}\n                                >\n                                    <i className={`bi ${showDetails[farm.id] ? 'bi-arrows-collapse' : 'bi-arrows-expand'}`}></i>\n                                </div>\n                                <div className=\"d-flex flex-grow-1 align-items-center ms-2 me-2 farm-title\">\n                                    <div className=\"fw-semibold\">\n                                        {farm.name || `Betrieb ${farm.hauptbetriebsnummer}`}\n                                    </div>\n                                    <Dropdown \n                                        onClick={(e) => e.stopPropagation()} \n                                        className=\"ms-2\"\n                                        show={openDropdownId === `farm-${farm.id}`}\n                                        onToggle={(isOpen) => {\n                                            setOpenDropdownId(isOpen ? `farm-${farm.id}` : null);\n                                        }}\n                                    >\n                                        <Dropdown.Toggle \n                                            as=\"span\"\n                                            className={`btn btn-inline-dropdown btn-sm dropdown-toggle-no-caret${!(onAddYear || onFarmEdit || onFarmDelete) ? ' disabled' : ''}`}\n                                            style={{ cursor: (onAddYear || onFarmEdit || onFarmDelete) ? 'pointer' : 'not-allowed' }}\n                                            id={`dropdown-farm-${farm.id}`}\n                                            disabled={!(onAddYear || onFarmEdit || onFarmDelete)}\n                                        >\n                                            <i className=\"bi bi-three-dots-vertical\"></i>\n                                        </Dropdown.Toggle>\n                                        <Dropdown.Menu>\n                                            {onAddYear && (\n                                                <Dropdown.Item\n                                                    onClick={(e) => {\n                                                        e.stopPropagation();\n                                                        setOpenDropdownId(null);\n                                                        onAddYear(farm);\n                                                    }}\n                                                >\n                                                    <i className=\"bi bi-plus-square me-2\"></i> Erntejahr hinzufügen\n                                                </Dropdown.Item>\n                                            )}\n                                            {onAddYear && onFarmEdit && <Dropdown.Divider />}\n                                            {onFarmEdit && (\n                                                <Dropdown.Item\n                                                    onClick={(e) => {\n                                                        e.stopPropagation();\n                                                        setOpenDropdownId(null);\n                                                        onFarmEdit(farm);\n                                                    }}\n                                                >\n                                                    <i className=\"bi bi-pencil-square me-2\"></i> Bearbeiten\n                                                </Dropdown.Item>\n                                            )}\n                                            {(onFarmEdit || onAddYear) && onFarmDelete && <Dropdown.Divider />}\n                                            {onFarmDelete && (\n                                                <Dropdown.Item\n                                                    onClick={(e) => {\n                                                        e.stopPropagation();\n                                                        setOpenDropdownId(null);\n                                                        onFarmDelete(farm);\n                                                    }}\n                                                    className=\"text-danger\"\n                                                >\n                                                    <i className=\"bi bi-x-square me-2\"></i> Löschen\n                                                </Dropdown.Item>\n                                            )}\n                                        </Dropdown.Menu>\n                                    </Dropdown>\n                                </div>\n                                <div className=\"d-flex align-items-center btn btn-years btn-sm btn-group-title disabled\">\n                                    <Badge className=\"title-inline\">\n                                        {(farm.years_count)} Jahr{(farm.years_count) !== 1 ? 'e': ''}\n                                    </Badge>\n                                </div>\n                                <div className=\"d-flex align-items-center justify-content-end text-muted small total-column\">\n                                    {farm.created_at && (\n                                        <div>\n                                            {/* Erstellt: {new Date(farm.created_at).toLocaleDateString('de-DE')} */}\n                                        </div>\n                                    )}\n                                </div>\n                            </div>\n\n                        </div>\n\n\n                        <Collapse in={showDetails[farm.id]}>\n                            <div>\n                                <div className=\"mt-2\">\n                                    {/* Farm Details */}\n                                    <FarmDetailsCollapsible \n                                        farm={farm}\n                                        onFarmUpdate={onFarmUpdate}\n                                        collapseAll={collapseAll}\n                                        toggleAllLevel={toggleAllLevel}\n                                        onLevelExpandStateChange={onLevelExpandStateChange}\n                                        expanded={showDetails[farm.id]}\n                                        expandedIds={expandedIds}\n                                        visibleIds={visibleIds}\n                                        unifiedSearchTerm={searchTerm}\n                                        visibleLevels={visibleLevels}\n                                        expandLevels={expandLevels}\n                                        openDropdownId={openDropdownId}\n                                        setOpenDropdownId={setOpenDropdownId}\n                                    />\n                                </div>\n                            </div>\n                        </Collapse>\n                    </ListGroup.Item>\n                );\n            })}\n        </ListGroup>\n    );\n};\n\nexport default FarmsList;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { MapContainer, TileLayer, GeoJSON, useMap } from 'react-leaflet';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Spinner, Alert } from 'react-bootstrap';\nimport L from 'leaflet';\nimport proj4 from 'proj4';\nimport { fetchFarmMapData, selectMapData, selectMapLoading } from '../../slices/farmSlice';\nimport 'leaflet/dist/leaflet.css';\n\n// Fix for default markers in react-leaflet\ndelete L.Icon.Default.prototype._getIconUrl;\nL.Icon.Default.mergeOptions({\n    iconRetinaUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png',\n    iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png',\n    shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png',\n});\n\n// Define Austrian coordinate systems\n// SRID 14202 is MGI / Austria Central Zone  \nproj4.defs(\"EPSG:31287\", \"+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs\");\nproj4.defs(\"EPSG:14202\", \"+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs\");\n\nconst FarmMapView = ({ farmYear, height = '400px', interactive = false, isActive = true, isFiltered = false }) => {\n    const dispatch = useDispatch();\n    const mapData = useSelector(selectMapData);\n    const mapLoading = useSelector(selectMapLoading);\n    const [geoJsonData, setGeoJsonData] = useState(null);\n    const [error, setError] = useState(null);\n    const [mapReady, setMapReady] = useState(false);\n    const mapRef = useRef(null);\n    const containerRef = useRef(null);\n\n    useEffect(() => {\n        // Always clear data first when farmYear changes\n        setGeoJsonData(null);\n        setError(null);\n\n        if (farmYear?.id) {\n            // Check if this is a combined/multi-farm view or if we have direct feldstuecke data\n            const isCombinedView = farmYear.id === 'combined';\n            const hasDirectData = farmYear.feldstuecke && Array.isArray(farmYear.feldstuecke);\n            \n            // Use direct processing if:\n            // 1. It's a combined view (multiple farms), OR\n            // 2. We have explicitly filtered data, OR  \n            // 3. We have direct feldstuecke data available\n            if (isCombinedView || isFiltered || hasDirectData) {\n                if (hasDirectData) {\n                    processDirectFeldstueckeData(farmYear.feldstuecke);\n                } else {\n                    setError('Keine Feldstückdaten verfügbar');\n                }\n            } else {\n                // Fetch from API for single farm-year views\n                dispatch(fetchFarmMapData(farmYear.id));\n            }\n        }\n    }, [farmYear?.id, isFiltered, dispatch, farmYear?.feldstuecke]);\n\n    const processDirectFeldstueckeData = (feldstuecke) => {\n        try {\n\n            // Convert feldstuecke with schlaege to GeoJSON features\n            const features = [];\n\n            feldstuecke.forEach(fs => {\n                if (fs.schlaege && fs.schlaege.length > 0) {\n                    fs.schlaege.forEach(schlag => {\n\n                        // Check both 'geometry' and 'geometrie' fields (GeoFeatureModelSerializer uses 'geometry')\n                        const geometry = schlag.geometry || schlag.geometrie;\n\n                        // Skip schläge without actual geometry data (has_geometry is just a flag, not the actual geometry)\n                        if (geometry && typeof geometry === 'object' && geometry.coordinates) {\n\n                            // Transform coordinates from Austrian MGI to WGS84\n                            let transformedGeometry = geometry;\n                            if (geometry.coordinates && geometry.coordinates.length > 0) {\n                                const transformedCoordinates = convertCoordinates(geometry.coordinates);\n                                transformedGeometry = {\n                                    ...geometry,\n                                    coordinates: transformedCoordinates\n                                };\n                            }\n\n                            const feature = {\n                                type: 'Feature',\n                                properties: {\n                                    id: schlag.id, // Add the missing id field\n                                    nummer: schlag.nummer,\n                                    flaeche_brutto: schlag.flaeche_brutto,\n                                    flaeche_netto: schlag.flaeche_netto,\n                                    schlag_kultur_name: schlag.crop?.name,\n                                    schlag_nutzungsart_name: schlag.schlag_nutzungsart?.name || schlag.nutzungsart?.bezeichnung,\n                                    feldstueck_nutzungsart_code: schlag.schlag_nutzungsart?.feldstueck_nutzungsart?.code || fs.feldstueck_nutzungsart?.code || fs.nutzungsart?.code,\n                                    feldstueck_bezeichnung: fs.bezeichnung || `Feldstück ${fs.nummer}`\n                                },\n                                geometry: transformedGeometry\n                            };\n                            features.push(feature);\n                        }\n                    });\n                }\n            });\n\n\n            if (features.length === 0) {\n                setError('Keine Schläge mit gültigen Geometrien in gefilterten Daten gefunden.');\n                setGeoJsonData(null);\n                return;\n            }\n\n            const geoJson = {\n                type: 'FeatureCollection',\n                features: features\n            };\n\n            setGeoJsonData(geoJson);\n            setError(null);\n\n        } catch (err) {\n            console.error('Error processing direct feldstuecke data:', err);\n            setError('Fehler beim Verarbeiten der gefilterten Daten: ' + err.message);\n        }\n    };\n\n    useEffect(() => {\n        // Only process API map data if we don't have filtered data\n        if (mapData && mapData.schlaege && !isFiltered) {\n            try {\n                // The schlaege data is already properly formatted as GeoJSON from the backend\n                if (mapData.schlaege.type === 'FeatureCollection' && mapData.schlaege.features) {\n\n                    // Handle features as object or array\n                    let featuresArray;\n                    if (Array.isArray(mapData.schlaege.features)) {\n                        featuresArray = mapData.schlaege.features;\n                    } else if (typeof mapData.schlaege.features === 'object') {\n                        // Check if it's a nested GeoJSON structure\n                        if (mapData.schlaege.features.type === 'FeatureCollection' && Array.isArray(mapData.schlaege.features.features)) {\n                            featuresArray = mapData.schlaege.features.features;\n                        } else {\n                            // Convert object to array of values\n                            featuresArray = Object.values(mapData.schlaege.features);\n                        }\n                    } else {\n                        console.error('Features is neither array nor object:', typeof mapData.schlaege.features);\n                        setError('Ungültiges Features-Format');\n                        return;\n                    }\n\n                    // Filter out features without valid geometry and transform coordinates\n                    const validFeatures = featuresArray.filter(feature => {\n                        return feature && feature.geometry && feature.geometry.coordinates && feature.geometry.coordinates.length > 0;\n                    }).map(feature => {\n                        // Transform coordinates from Austrian MGI (EPSG:31287) to WGS84\n                        const transformedCoordinates = convertCoordinates(feature.geometry.coordinates);\n\n                        // Create a new feature with transformed coordinates\n                        // Ensure id is in properties for popup buttons\n                        return {\n                            ...feature,\n                            properties: {\n                                ...feature.properties,\n                                id: feature.properties.id || feature.id // Ensure id is available\n                            },\n                            geometry: {\n                                ...feature.geometry,\n                                coordinates: transformedCoordinates\n                            }\n                        };\n                    });\n\n                    if (validFeatures.length === 0) {\n                        setError('Keine gültigen Geometrien gefunden');\n                        setGeoJsonData(null);\n                        return;\n                    }\n\n                    const geoJson = {\n                        type: 'FeatureCollection',\n                        features: validFeatures\n                    };\n\n                    setGeoJsonData(geoJson);\n                    setError(null);\n                } else {\n                    setError('Ungültiges Kartendatenformat');\n                }\n            } catch (err) {\n                setError('Fehler beim Verarbeiten der Kartendaten');\n            }\n        }\n    }, [mapData, farmYear?.feldstuecke]);\n\n    const convertCoordinates = (coordinates) => {\n        // Handle different coordinate structures\n        if (!coordinates || !coordinates[0]) return [];\n\n        try {\n            return coordinates.map(ring => {\n                if (!Array.isArray(ring)) return [];\n                return ring.map(coord => {\n                    if (Array.isArray(coord) && coord.length >= 2) {\n                        const [x, y] = coord;\n\n                        // Convert from Austrian MGI / Austria Central Zone (EPSG:31287) to WGS84\n                        // This must match the SRID used in the Django model (31287)\n                        const converted = proj4('EPSG:31287', 'EPSG:4326', [x, y]);\n                        const [lng, lat] = converted;\n\n                        // Return [lng, lat] format for GeoJSON standard (GeoJSON expects longitude first)\n                        // The react-leaflet GeoJSON component will handle the conversion to Leaflet's format\n                        return [lng, lat];\n                    }\n                    return coord;\n                });\n            });\n        } catch (err) {\n            console.error('Coordinate conversion error:', err);\n            return [];\n        }\n    };\n\n    const getFeatureStyle = (feature) => {\n        const feldstueckCategory = feature.properties.feldstueck_nutzungsart_code;\n        const schlagName = feature.properties.schlag_nutzungsart_name;\n\n        // Color scheme based on land use category\n        let color = '#3388ff'; // Default blue\n        let fillOpacity = 0.6;\n        switch (feldstueckCategory) {\n            case 'A': // Ackerland\n                // Use schlag name for more specific coloring if needed\n                color = '#ffc107'; // Ackerland - Amber\n                break;\n            case 'G': // Grünland\n                color = '#4caf50'; // Grünland - Green\n                break;\n            case 'S': // Spezialkulturen\n            case 'WI': // Weingarten\n            case 'WT': // Weingarten mit Terrassen\n                color = '#ff5722'; // Spezialkulturen - Deep Orange\n                break;\n            default:\n                color = '#607d8b'; // Grey for unknown\n        }\n\n        return {\n            fillColor: color,\n            weight: 2,\n            opacity: 0.8,\n            color: '#333',\n            fillOpacity: fillOpacity\n        };\n    };\n\n    const onEachFeature = (feature, layer) => {\n        if (interactive) {\n            const props = feature.properties;\n\n            // Create tooltip content for mouseover\n            const tooltipContent = `\n                <div>\n                    <strong>${props.feldstueck_bezeichnung}</strong><br/>\n                    <strong>Schlag ${props.nummer}</strong><br/>\n                    <em>${props.schlag_nutzungsart_name || props.schlag_kultur_name || 'Keine Nutzungsart'}</em><br/>\n                    Bruttofläche: ${props.flaeche_brutto} ha<br/>\n                    Nettofläche: ${props.flaeche_netto} ha\n                </div>\n            `;\n\n            // Create popup content with action buttons\n            const popupContent = `\n                <div style=\"min-width: 200px;\">\n                    <div style=\"margin-bottom: 10px;\">\n                        <strong>${props.feldstueck_bezeichnung}</strong><br/>\n                        <strong>Schlag ${props.nummer}</strong><br/>\n                        <em>${props.schlag_nutzungsart_name || 'Keine Nutzungsart'}</em>\n                    </div>\n                    <div style=\"display: flex; flex-direction: column; gap: 8px;\">\n                        <button \n                            class=\"btn btn-sm btn-primary w-100\" \n                            onclick=\"window.handleSchlagEdit && window.handleSchlagEdit(${props.id})\"\n                            style=\"cursor: pointer;\"\n                        >\n                            <i class=\"bi bi-pencil-square me-1\"></i>\n                            Schlag bearbeiten\n                        </button>\n                        <button \n                            class=\"btn btn-sm btn-warning w-100\" \n                            onclick=\"window.handleSchlagAddOperation && window.handleSchlagAddOperation(${props.id})\"\n                            style=\"cursor: pointer;\"\n                        >\n                            <i class=\"bi bi-lightning me-1\"></i>\n                            Maßnahme erfassen\n                        </button>\n                    </div>\n                </div>\n            `;\n\n            // Bind tooltip for hover\n            layer.bindTooltip(tooltipContent, {\n                permanent: false,\n                direction: 'auto',\n                className: 'farm-area-tooltip',\n                offset: [10, 0]\n            });\n\n            // Bind popup for click\n            layer.bindPopup(popupContent, {\n                maxWidth: 250,\n                className: 'schlag-action-popup'\n            });\n\n            layer.on({\n                mouseover: (e) => {\n                    const layer = e.target;\n                    layer.setStyle({\n                        weight: 4,\n                        opacity: 1,\n                        fillOpacity: 0.8\n                    });\n                    // Open tooltip on mouseover\n                    layer.openTooltip();\n                },\n                mouseout: (e) => {\n                    const layer = e.target;\n                    layer.setStyle(getFeatureStyle(feature));\n                    // Close tooltip on mouseout\n                    layer.closeTooltip();\n                },\n                click: (e) => {\n                    // Open popup on click\n                    layer.openPopup();\n                    // Stop event propagation\n                    e.originalEvent.stopPropagation();\n                }\n            });\n        }\n    };\n\n    // Component to handle map resize and bounds\n    const MapController = ({ data }) => {\n        const map = useMap();\n\n        useEffect(() => {\n            // Store map instance in ref for external access\n            mapRef.current = map;\n\n            if (data && data.features && data.features.length > 0) {\n                const geoJsonLayer = L.geoJSON(data);\n                const bounds = geoJsonLayer.getBounds();\n                if (bounds.isValid()) {\n                    map.fitBounds(bounds, { padding: [20, 20] });\n                }\n            }\n        }, [data, map]);\n\n        return null;\n    };\n\n    // Handle map visibility and resize\n    useEffect(() => {\n        const handleResize = () => {\n            if (mapRef.current && containerRef.current) {\n                const container = containerRef.current;\n                // Check if container is visible and has dimensions\n                if (container.offsetWidth > 0 && container.offsetHeight > 0) {\n                    setTimeout(() => {\n                        mapRef.current.invalidateSize();\n                    }, 50);\n                }\n            }\n        };\n\n        const checkVisibility = () => {\n            if (containerRef.current) {\n                const container = containerRef.current;\n                // Check if container is visible\n                const isVisible = container.offsetWidth > 0 && container.offsetHeight > 0;\n                if (isVisible && mapRef.current) {\n                    // Map is visible, trigger resize\n                    handleResize();\n                }\n            }\n        };\n\n        // Use IntersectionObserver to detect when map becomes visible\n        let intersectionObserver;\n        if (containerRef.current && window.IntersectionObserver) {\n            intersectionObserver = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        setTimeout(checkVisibility, 100);\n                    }\n                });\n            }, { threshold: 0.1 });\n            intersectionObserver.observe(containerRef.current);\n        }\n\n        // Use ResizeObserver for dimension changes\n        let resizeObserver;\n        if (containerRef.current && window.ResizeObserver) {\n            resizeObserver = new ResizeObserver(() => {\n                checkVisibility();\n            });\n            resizeObserver.observe(containerRef.current);\n        }\n\n        // Fallback: listen for window resize\n        window.addEventListener('resize', handleResize);\n\n        // Trigger initial check after delays to handle different scenarios\n        const timeouts = [\n            setTimeout(checkVisibility, 100),\n            setTimeout(checkVisibility, 300),\n            setTimeout(checkVisibility, 500)\n        ];\n\n        return () => {\n            if (intersectionObserver) {\n                intersectionObserver.disconnect();\n            }\n            if (resizeObserver) {\n                resizeObserver.disconnect();\n            }\n            window.removeEventListener('resize', handleResize);\n            timeouts.forEach(timeout => clearTimeout(timeout));\n        };\n    }, [geoJsonData]);\n\n    if (mapLoading) {\n        return (\n            <div \n                className=\"d-flex justify-content-center align-items-center border rounded\"\n                style={{ height }}\n            >\n                <Spinner animation=\"border\" />\n            </div>\n        );\n    }\n\n    if (error) {\n        return <Alert variant=\"danger\">{error}</Alert>;\n    }\n\n    if (!geoJsonData || geoJsonData.features.length === 0) {\n        return (\n            <div \n                className=\"d-flex justify-content-center align-items-center border rounded bg-light text-muted\"\n                style={{ height }}\n            >\n                <div className=\"text-center\">\n                    <p>Keine Kartendaten verfügbar</p>\n                    {farmYear && <small>Jahr: {farmYear.year}</small>}\n                </div>\n            </div>\n        );\n    }\n\n    // Calculate center coordinates\n    const defaultCenter = mapData?.center ? [mapData.center[1], mapData.center[0]] : [48.2, 16.3];\n\n    return (\n        <div ref={containerRef} style={{ height }} className=\"border rounded overflow-hidden\">\n            <MapContainer\n                key={farmYear?.id || 'no-farm'} // Force re-render when farm changes\n                center={defaultCenter}\n                zoom={13}\n                style={{ height: '100%', width: '100%' }}\n                zoomControl={interactive}\n                scrollWheelZoom={interactive}\n                doubleClickZoom={interactive}\n                dragging={interactive}\n                touchZoom={interactive}\n            >\n                <TileLayer\n                    attribution='&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>'\n                    url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n                />\n                <GeoJSON\n                    key={`geojson-${farmYear?.id || 'no-farm'}`} // Force GeoJSON re-render\n                    data={geoJsonData}\n                    style={getFeatureStyle}\n                    onEachFeature={onEachFeature}\n                />\n                <MapController data={geoJsonData} />\n            </MapContainer>\n        </div>\n    );\n};\n\nexport default FarmMapView;\n","import React, { useState, useMemo, useRef, useEffect } from 'react';\nimport { Form, Badge, Button, Dropdown, Spinner, Alert } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { MapContainer, TileLayer, GeoJSON, useMap } from 'react-leaflet';\nimport L from 'leaflet';\nimport proj4 from 'proj4';\nimport api from '../../utils/api';\nimport 'leaflet/dist/leaflet.css';\n\n// Fix for default markers in react-leaflet\ndelete L.Icon.Default.prototype._getIconUrl;\nL.Icon.Default.mergeOptions({\n    iconRetinaUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon-2x.png',\n    iconUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-icon.png',\n    shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/images/marker-shadow.png',\n});\n\n// Define Austrian coordinate systems\nproj4.defs(\"EPSG:31287\", \"+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs\");\n\n// Component to fetch and display multiple farm-years on a single map\nconst MultiYearMapView = ({ yearIds, height = '600px', interactive = false }) => {\n    const [geoJsonData, setGeoJsonData] = useState(null);\n    const [loading, setLoading] = useState(true);\n    const [error, setError] = useState(null);\n    const mapRef = useRef(null);\n\n    useEffect(() => {\n        const fetchMapData = async () => {\n            setLoading(true);\n            setError(null);\n            \n            try {\n                // Fetch map data for each year ID\n                const promises = yearIds.map(yearId => \n                    api.get(`/farm-years/${yearId}/map_data/`)\n                );\n                \n                const responses = await Promise.all(promises);\n                \n                // Combine all features from all responses\n                const allFeatures = [];\n                \n                responses.forEach((response, index) => {\n                    if (response.data?.schlaege) {\n                        // Handle nested FeatureCollection structure\n                        let features = [];\n                        \n                        if (response.data.schlaege.type === 'FeatureCollection') {\n                            if (response.data.schlaege.features) {\n                                // Check if features is an array\n                                if (Array.isArray(response.data.schlaege.features)) {\n                                    features = response.data.schlaege.features;\n                                } \n                                // Check if features is a nested FeatureCollection object\n                                else if (response.data.schlaege.features.type === 'FeatureCollection' && \n                                         Array.isArray(response.data.schlaege.features.features)) {\n                                    features = response.data.schlaege.features.features;\n                                }\n                                // Check if features is an object (convert to array)\n                                else if (typeof response.data.schlaege.features === 'object') {\n                                    features = Object.values(response.data.schlaege.features);\n                                }\n                            }\n                        }\n                        \n                        features.forEach((feature) => {\n                            if (feature?.geometry?.coordinates) {\n                                // Transform coordinates\n                                const transformedCoordinates = convertCoordinates(feature.geometry.coordinates);\n                                allFeatures.push({\n                                    ...feature,\n                                    properties: {\n                                        ...feature.properties,\n                                        id: feature.properties.id || feature.id\n                                    },\n                                    geometry: {\n                                        ...feature.geometry,\n                                        coordinates: transformedCoordinates\n                                    }\n                                });\n                            }\n                        });\n                    }\n                });\n                \n                if (allFeatures.length === 0) {\n                    setError('Keine Geometriedaten gefunden');\n                    setGeoJsonData(null);\n                } else {\n                    setGeoJsonData({\n                        type: 'FeatureCollection',\n                        features: allFeatures\n                    });\n                }\n            } catch (err) {\n                console.error('Error fetching map data:', err);\n                setError('Fehler beim Laden der Kartendaten');\n            } finally {\n                setLoading(false);\n            }\n        };\n        \n        if (yearIds && yearIds.length > 0) {\n            fetchMapData();\n        }\n    }, [yearIds]);\n\n    const convertCoordinates = (coordinates) => {\n        if (!coordinates || !coordinates[0]) return [];\n        \n        try {\n            return coordinates.map(ring => {\n                if (!Array.isArray(ring)) return [];\n                return ring.map(coord => {\n                    if (Array.isArray(coord) && coord.length >= 2) {\n                        const [x, y] = coord;\n                        const converted = proj4('EPSG:31287', 'EPSG:4326', [x, y]);\n                        const [lng, lat] = converted;\n                        return [lng, lat];\n                    }\n                    return coord;\n                });\n            });\n        } catch (err) {\n            console.error('Coordinate conversion error:', err);\n            return [];\n        }\n    };\n\n    const getFeatureStyle = (feature) => {\n        const feldstueckCategory = feature.properties.feldstueck_nutzungsart_code;\n        let color = '#3388ff';\n        switch (feldstueckCategory) {\n            case 'A': color = '#8b7e40'; break;\n            case 'G': color = '#009e3c'; break;\n            case 'S': color = '#542e74'; break;\n            case 'WI':\n            case 'WT': color = '#ff5722'; break;\n            default: color = '#607d8b';\n        }\n        \n        return {\n            fillColor: color,\n            weight: 2,\n            opacity: 0.8,\n            color: '#333',\n            fillOpacity: 0.6\n        };\n    };\n\n    const onEachFeature = (feature, layer) => {\n        if (interactive) {\n            const props = feature.properties;\n            // Create tooltip content for mouseover\n            const tooltipContent = `\n                <div>\n                    <strong>${props.feldstueck_bezeichnung}</strong><br/>\n                    <strong>Schlag ${props.nummer}</strong><br/>\n                    <em>${props.crop_name || props.schlag_nutzungsart_name || 'Keine Nutzungsart'}</em><br/>\n                    Bruttofläche: ${props.flaeche_brutto} ha<br/>\n                    Nettofläche: ${props.flaeche_netto} ha\n                </div>\n            `;\n            \n            // Create popup content with action buttons\n            const popupContent = `\n                <div style=\"min-width: 200px;\">\n                    <div style=\"margin-bottom: 10px;\">\n                        <strong>${props.feldstueck_bezeichnung}</strong><br/>\n                        <strong>Schlag ${props.nummer}</strong><br/>\n                        <em>${props.crop_name || props.schlag_nutzungsart_name || 'Keine Nutzungsart'}</em>\n                    </div>\n                    <div style=\"display: flex; flex-direction: column; gap: 8px;\">\n                        <button \n                            class=\"btn btn-sm btn-primary w-100\" \n                            onclick=\"window.handleSchlagEdit && window.handleSchlagEdit(${props.id})\"\n                            style=\"cursor: pointer;\"\n                        >\n                            <i class=\"bi bi-pencil-square me-1\"></i>\n                            Schlag bearbeiten\n                        </button>\n                        <button \n                            class=\"btn btn-sm btn-warning w-100\" \n                            onclick=\"window.handleSchlagAddOperation && window.handleSchlagAddOperation(${props.id})\"\n                            style=\"cursor: pointer;\"\n                        >\n                            <i class=\"bi bi-lightning me-1\"></i>\n                            Maßnahme erfassen\n                        </button>\n                    </div>\n                </div>\n            `;\n            \n            // Bind tooltip for hover\n            layer.bindTooltip(tooltipContent, {\n                permanent: false,\n                direction: 'auto',\n                className: 'farm-area-tooltip',\n                offset: [10, 0]\n            });\n            \n            // Bind popup for click\n            layer.bindPopup(popupContent, {\n                maxWidth: 250,\n                className: 'schlag-action-popup'\n            });\n            \n            layer.on({\n                mouseover: (e) => {\n                    e.target.setStyle({ weight: 4, opacity: 1, fillOpacity: 0.8 });\n                    e.target.openTooltip();\n                },\n                mouseout: (e) => {\n                    e.target.setStyle(getFeatureStyle(feature));\n                    e.target.closeTooltip();\n                },\n                click: (e) => {\n                    // Open popup on click\n                    layer.openPopup();\n                }\n            });\n        }\n    };\n\n    // Component to fit map bounds to data\n    const MapController = ({ data }) => {\n        const map = useMap();\n        \n        useEffect(() => {\n            if (data && data.features && data.features.length > 0) {\n                try {\n                    const geoJsonLayer = L.geoJSON(data);\n                    const bounds = geoJsonLayer.getBounds();\n                    if (bounds.isValid()) {\n                        map.fitBounds(bounds, { padding: [20, 20] });\n                    }\n                } catch (err) {\n                    console.error('Error fitting bounds:', err);\n                }\n            }\n        }, [data, map]);\n        \n        return null;\n    };\n\n    if (loading) {\n        return (\n            <div style={{ height }} className=\"d-flex align-items-center justify-content-center border rounded\">\n                <Spinner animation=\"border\" variant=\"primary\" />\n            </div>\n        );\n    }\n\n    if (error || !geoJsonData) {\n        return (\n            <div style={{ height }} className=\"d-flex align-items-center justify-content-center border rounded\">\n                <Alert variant=\"warning\" className=\"mb-0\">\n                    {error || 'Keine Kartendaten verfügbar'}\n                </Alert>\n            </div>\n        );\n    }\n\n    return (\n        <div style={{ height }} className=\"border rounded overflow-hidden\">\n            <MapContainer\n                center={[48.2, 16.3]}\n                zoom={13}\n                style={{ height: '100%', width: '100%' }}\n                zoomControl={interactive}\n                scrollWheelZoom={interactive}\n                doubleClickZoom={interactive}\n                dragging={interactive}\n                touchZoom={interactive}\n            >\n                <TileLayer\n                    attribution='&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>'\n                    url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n                />\n                <GeoJSON\n                    data={geoJsonData}\n                    style={getFeatureStyle}\n                    onEachFeature={onEachFeature}\n                />\n                <MapController data={geoJsonData} />\n            </MapContainer>\n        </div>\n    );\n};\n\nconst UnifiedMapView = ({ farms, isFiltered }) => {\n    const [selectedFarmIds, setSelectedFarmIds] = useState([]);\n    const [searchTerm, setSearchTerm] = useState('');\n    const [showDropdown, setShowDropdown] = useState(false);\n    const dropdownRef = useRef(null);\n\n    // Get all farm-year combinations with geometry\n    const farmYearOptions = useMemo(() => {\n        const options = [];\n        farms.forEach(farm => {\n            if (farm.years && farm.years.length > 0) {\n                farm.years.forEach(year => {\n                    // Check if this year has any schläge with geometry\n                    const hasGeometry = year.feldstuecke?.some(fs => \n                        fs.schlaege?.some(schlag => schlag.has_geometry === true)\n                    );\n                    \n                    if (hasGeometry) {\n                        options.push({\n                            farmId: farm.id,\n                            yearId: year.id,\n                            farmName: farm.name || `Betrieb ${farm.hauptbetriebsnummer}`,\n                            year: year.year,\n                            label: `Betrieb ${farm.hauptbetriebsnummer || farm.name}|${year.year}`,\n                            data: { farm, year }\n                        });\n                    }\n                });\n            }\n        });\n        return options;\n    }, [farms]);\n\n    // Initialize with all farms selected and update when farmYearOptions change\n    useEffect(() => {\n        // When farmYearOptions change (e.g., due to filtering), update selected farms\n        // to only include farms that still exist in the options\n        setSelectedFarmIds(prev => {\n            const validKeys = farmYearOptions.map(opt => `${opt.farmId}-${opt.yearId}`);\n            const filteredPrev = prev.filter(key => validKeys.includes(key));\n            \n            // If no farms were previously selected or all were filtered out, select all available\n            if (filteredPrev.length === 0 && validKeys.length > 0) {\n                return validKeys;\n            }\n            \n            return filteredPrev;\n        });\n    }, [farmYearOptions]);\n\n    // Filter options based on search term\n    const filteredOptions = useMemo(() => {\n        if (!searchTerm) return farmYearOptions;\n        const searchLower = searchTerm.toLowerCase();\n        return farmYearOptions.filter(opt => \n            opt.label.toLowerCase().includes(searchLower)\n        );\n    }, [farmYearOptions, searchTerm]);\n\n    // Close dropdown when clicking outside\n    useEffect(() => {\n        const handleClickOutside = (event) => {\n            if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n                setShowDropdown(false);\n            }\n        };\n        document.addEventListener('mousedown', handleClickOutside);\n        return () => document.removeEventListener('mousedown', handleClickOutside);\n    }, []);\n\n    // Get selected farm-year IDs for map display\n    const selectedYearIds = useMemo(() => {\n        if (selectedFarmIds.length === 0) return [];\n        \n        return selectedFarmIds.map(key => {\n            const option = farmYearOptions.find(opt => `${opt.farmId}-${opt.yearId}` === key);\n            return option ? option.yearId : null;\n        }).filter(id => id !== null);\n    }, [farmYearOptions, selectedFarmIds]);\n\n    const handleFarmYearToggle = (key) => {\n        setSelectedFarmIds(prev => {\n            if (prev.includes(key)) {\n                return prev.filter(id => id !== key);\n            } else {\n                return [...prev, key];\n            }\n        });\n    };\n\n    const handleSelectAll = () => {\n        setSelectedFarmIds(farmYearOptions.map(opt => `${opt.farmId}-${opt.yearId}`));\n    };\n\n    const handleDeselectAll = () => {\n        setSelectedFarmIds([]);\n    };\n\n    if (farmYearOptions.length === 0) {\n        return (\n            <div className=\"text-center text-muted py-5\">\n                <p>Keine Betriebe mit Geometriedaten gefunden</p>\n            </div>\n        );\n    }\n\n    const removeSelection = (key) => {\n        setSelectedFarmIds(prev => prev.filter(id => id !== key));\n    };\n\n    return (\n        <div>\n            <div className=\"mb-3\">\n                <div className=\"d-flex align-items-center gap-2 mb-2\">\n                    <Form.Label className=\"mb-0\">\n                        <strong>Betriebe anzeigen:</strong>\n                    </Form.Label>\n                    <div className=\"position-relative flex-grow-1\" style={{ maxWidth: '400px' }} ref={dropdownRef}>\n                        <div \n                            className=\"form-control d-flex align-items-center justify-content-between\"\n                            style={{ cursor: 'pointer', minHeight: '38px' }}\n                            onClick={() => setShowDropdown(!showDropdown)}\n                        >\n                            <span className=\"text-muted\">\n                                {selectedFarmIds.length === 0 \n                                    ? 'Betriebe auswählen...' \n                                    : `${selectedFarmIds.length} Betrieb${selectedFarmIds.length !== 1 ? 'e' : ''} ausgewählt`\n                                }\n                            </span>\n                            {/* <i className={`bi bi-chevron-${showDropdown ? 'up' : 'down'}`}></i> */}\n                        </div>\n                        \n                        {showDropdown && (\n                            <div \n                                className=\"position-absolute w-100 bg-white border rounded shadow-sm mt-1\" \n                                style={{ zIndex: 1000, maxHeight: '300px', overflow: 'auto' }}\n                            >\n                                <div className=\"p-2 border-bottom\">\n                                    <Form.Control\n                                        type=\"text\"\n                                        placeholder=\"Suchen...\"\n                                        value={searchTerm}\n                                        onChange={(e) => setSearchTerm(e.target.value)}\n                                        size=\"sm\"\n                                        autoFocus\n                                    />\n                                </div>\n                                <div className=\"p-2 border-bottom d-flex gap-2\">\n                                    <Button \n                                        variant=\"success\" \n                                        size=\"sm\" \n                                        onClick={handleSelectAll}\n                                        className=\"flex-grow-1\"\n                                    >\n                                        Alle auswählen\n                                    </Button>\n                                    <Button \n                                        variant=\"danger\" \n                                        size=\"sm\" \n                                        onClick={handleDeselectAll}\n                                        className=\"flex-grow-1\"\n                                    >\n                                        Alle abwählen\n                                    </Button>\n                                </div>\n                                <div>\n                                    {filteredOptions.length === 0 ? (\n                                        <div className=\"p-3 text-center text-muted\">\n                                            Keine Betriebe gefunden\n                                        </div>\n                                    ) : (\n                                        filteredOptions.map(option => {\n                                            const key = `${option.farmId}-${option.yearId}`;\n                                            const isSelected = selectedFarmIds.includes(key);\n                                            return (\n                                                <div\n                                                    key={key}\n                                                    className={`p-2 d-flex align-items-center gap-2 ${isSelected ? 'bg-light' : ''}`}\n                                                    style={{ cursor: 'pointer' }}\n                                                    onClick={() => handleFarmYearToggle(key)}\n                                                    onMouseEnter={(e) => e.currentTarget.style.backgroundColor = '#f8f9fa'}\n                                                    onMouseLeave={(e) => e.currentTarget.style.backgroundColor = isSelected ? '#f8f9fa' : 'transparent'}\n                                                >\n                                                    <Form.Check\n                                                        type=\"checkbox\"\n                                                        checked={isSelected}\n                                                        onChange={() => {}}\n                                                        style={{ pointerEvents: 'none' }}\n                                                    />\n                                                    <span>{option.label}</span>\n                                                </div>\n                                            );\n                                        })\n                                    )}\n                                </div>\n                            </div>\n                        )}\n                    </div>\n                    {/* <Button \n                        variant=\"outline-secondary\" \n                        size=\"sm\"\n                        onClick={() => setShowDropdown(!showDropdown)}\n                    >\n                        <i className=\"bi bi-list\"></i>\n                    </Button> */}\n                </div>\n\n                {/* Selected items as badges */}\n                {selectedFarmIds.length > 0 && (\n                    <div className=\"d-flex flex-wrap gap-2\">\n                        {selectedFarmIds.map(key => {\n                            const option = farmYearOptions.find(opt => `${opt.farmId}-${opt.yearId}` === key);\n                            if (!option) return null;\n                            return (\n                                <Badge \n                                    key={key} \n                                    bg=\"primary\" \n                                    className=\"d-flex align-items-center gap-1 filter-chip\"\n                                    style={{ fontSize: '0.875rem', padding: '0.35rem 0.65rem' }}\n                                >\n                                    <span className=\"badge-section-1\">{option.year}</span>\n                                    <span className=\"badge-section-2\">{option.farmName}</span>\n                                    <i \n                                        className=\"bi bi-x-circle badge-inline-button\" \n                                        style={{ cursor: 'pointer' }}\n                                        onClick={() => removeSelection(key)}\n                                    ></i>\n                                </Badge>\n                            );\n                        })}\n                    </div>\n                )}\n            </div>\n\n            {selectedYearIds.length > 0 ? (\n                <MultiYearMapView\n                    key={selectedYearIds.join('-')}\n                    yearIds={selectedYearIds}\n                    height=\"55vh\"\n                    interactive={true}\n                />\n            ) : (\n                <div className=\"text-center text-muted py-5 border rounded\">\n                    <p>Bitte wählen Sie mindestens einen Betrieb aus</p>\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default UnifiedMapView;\n","import React, { useState, useCallback } from 'react';\nimport { Modal, Button, Alert, ProgressBar, Form, Card, Badge, Tabs, Tab, ListGroup } from 'react-bootstrap';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useDropzone } from 'react-dropzone';\nimport { importXMLFile, batchImportXMLFiles, clearImportError, clearImportSuccess, selectImportLoading, selectImportError, selectImportSuccess } from '../../slices/farmSlice';\n\nconst XMLImportModal = ({ show, onHide, onSuccess }) => {\n    const dispatch = useDispatch();\n    const importLoading = useSelector(selectImportLoading);\n    const importError = useSelector(selectImportError);\n    const importSuccess = useSelector(selectImportSuccess);\n\n    const [selectedFiles, setSelectedFiles] = useState([]);\n    const [importMode, setImportMode] = useState('single'); // 'single' or 'batch'\n    const [importResults, setImportResults] = useState(null);\n\n    // Single file dropzone\n    const onDropSingle = useCallback((acceptedFiles) => {\n        if (acceptedFiles && acceptedFiles.length > 0) {\n            const file = acceptedFiles[0];\n            setSelectedFiles([file]);\n            dispatch(clearImportError());\n        }\n    }, [dispatch]);\n\n    const { getRootProps: getRootPropsSingle, getInputProps: getInputPropsSingle, isDragActive: isDragActiveSingle } = useDropzone({\n        onDrop: onDropSingle,\n        accept: {\n            'application/xml': ['.xml'],\n            'text/xml': ['.xml']\n        },\n        maxFiles: 1,\n        multiple: false\n    });\n\n    // Multiple files dropzone\n    const onDropMultiple = useCallback((acceptedFiles) => {\n        if (acceptedFiles && acceptedFiles.length > 0) {\n            setSelectedFiles(prev => [...prev, ...acceptedFiles]);\n            dispatch(clearImportError());\n        }\n    }, [dispatch]);\n\n    const { getRootProps: getRootPropsMultiple, getInputProps: getInputPropsMultiple, isDragActive: isDragActiveMultiple } = useDropzone({\n        onDrop: onDropMultiple,\n        accept: {\n            'application/xml': ['.xml'],\n            'text/xml': ['.xml']\n        },\n        multiple: true\n    });\n\n    const handleFileSelect = (event) => {\n        const files = Array.from(event.target.files || []);\n        if (files.length > 0) {\n            if (importMode === 'single') {\n                setSelectedFiles([files[0]]);\n            } else {\n                setSelectedFiles(prev => [...prev, ...files]);\n            }\n            dispatch(clearImportError());\n        }\n    };\n\n    const handleRemoveFile = (index) => {\n        setSelectedFiles(prev => prev.filter((_, i) => i !== index));\n    };\n\n    const handleImport = async () => {\n        if (selectedFiles.length === 0) {\n            return;\n        }\n\n        try {\n            let result;\n\n            if (importMode === 'single' || selectedFiles.length === 1) {\n                // Single file import\n                const formData = new FormData();\n                formData.append('xml_file', selectedFiles[0]);\n                result = await dispatch(importXMLFile(formData)).unwrap();\n            } else {\n                // Batch import\n                const formData = new FormData();\n                selectedFiles.forEach(file => {\n                    formData.append('xml_files', file);\n                });\n                result = await dispatch(batchImportXMLFiles(formData)).unwrap();\n                setImportResults(result);\n            }\n\n            if (result) {\n                setTimeout(() => {\n                    handleClose();\n                    if (onSuccess) {\n                        onSuccess(result);\n                    }\n                }, 3000); // Show success message for 3 seconds\n            }\n        } catch (error) {\n            // Error is handled by the slice\n            console.error('Import failed:', error);\n        }\n    };\n\n    const handleClose = () => {\n        setSelectedFiles([]);\n        setImportResults(null);\n        dispatch(clearImportError());\n        dispatch(clearImportSuccess());\n        onHide();\n    };\n\n    const handleModeChange = (mode) => {\n        setImportMode(mode);\n        setSelectedFiles([]);\n        dispatch(clearImportError());\n        dispatch(clearImportSuccess());\n    };\n\n    const formatFileSize = (bytes) => {\n        if (bytes === 0) return '0 Bytes';\n        const k = 1024;\n        const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n        const i = Math.floor(Math.log(bytes) / Math.log(k));\n        return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n    };\n\n    const renderImportResults = () => {\n        if (!importResults) return null;\n\n        return (\n            <Alert variant=\"info\" className=\"mt-3\">\n                <h6>Import-Ergebnisse:</h6>\n                <div className=\"mb-2\">\n                    <Badge bg=\"success\" className=\"me-2\">\n                        {importResults.successful_imports} erfolgreich\n                    </Badge>\n                    {importResults.failed_imports > 0 && (\n                        <Badge bg=\"danger\">\n                            {importResults.failed_imports} fehlgeschlagen\n                        </Badge>\n                    )}\n                </div>\n\n                {importResults.import_results && importResults.import_results.length > 0 && (\n                    <div className=\"mt-2\">\n                        <small className=\"text-muted\">Details:</small>\n                        <ListGroup size=\"sm\" className=\"mt-1\">\n                            {importResults.import_results.map((result, index) => (\n                                <ListGroup.Item key={index} className={result.status === 'SUCCESS' ? 'list-group-item-success' : 'list-group-item-danger'}>\n                                    <div className=\"d-flex justify-content-between align-items-center\">\n                                        <div>\n                                            <strong>{result.filename}</strong>\n                                            {result.hauptbetriebsnummer && (\n                                                <small className=\"text-muted d-block\">\n                                                    Hauptbetriebsnummer: {result.hauptbetriebsnummer}\n                                                </small>\n                                            )}\n                                        </div>\n                                        <div>\n                                            {result.status === 'SUCCESS' ? (\n                                                <Badge bg=\"success\">✓</Badge>\n                                            ) : (\n                                                <Badge bg=\"danger\">✗</Badge>\n                                            )}\n                                        </div>\n                                    </div>\n                                    {result.error && (\n                                        <small className=\"text-danger d-block mt-1\">{result.error}</small>\n                                    )}\n                                </ListGroup.Item>\n                            ))}\n                        </ListGroup>\n                    </div>\n                )}\n            </Alert>\n        );\n    };\n\n    const isDragActive = importMode === 'single' ? isDragActiveSingle : isDragActiveMultiple;\n    const getRootProps = importMode === 'single' ? getRootPropsSingle : getRootPropsMultiple;\n    const getInputProps = importMode === 'single' ? getInputPropsSingle : getInputPropsMultiple;\n\n    return (\n        <Modal show={show} onHide={handleClose} size=\"xl\" centered>\n            <Modal.Header closeButton>\n                <Modal.Title>XML-Dateien importieren</Modal.Title>\n            </Modal.Header>\n            <Modal.Body>\n                {importError && (\n                    <Alert variant=\"danger\" onClose={() => dispatch(clearImportError())} dismissible>\n                        <strong>Importfehler:</strong> {importError}\n                    </Alert>\n                )}\n\n                {importSuccess && (\n                    <Alert variant=\"success\">\n                        <strong>Import erfolgreich!</strong> {importSuccess}\n                        {renderImportResults()}\n                    </Alert>\n                )}\n\n                {importLoading && (\n                    <div className=\"mb-3\">\n                        <div className=\"text-center mb-2\">\n                            <strong>Import läuft...</strong>\n                        </div>\n                        <ProgressBar animated now={100} />\n                    </div>\n                )}\n\n                {!importLoading && !importSuccess && (\n                    <>\n                        {/* Import Mode Tabs */}\n                        <Tabs\n                            activeKey={importMode}\n                            onSelect={handleModeChange}\n                            className=\"mb-4\"\n                        >\n                            <Tab eventKey=\"single\" title=\"Einzelne Datei\">\n                                <div className=\"mt-3\">\n                                    <p className=\"text-muted\">\n                                        Importieren Sie eine einzelne österreichische Feldstückliste (XML).\n                                    </p>\n                                </div>\n                            </Tab>\n                            <Tab eventKey=\"batch\" title=\"Mehrere Dateien\">\n                                <div className=\"mt-3\">\n                                    <p className=\"text-muted\">\n                                        Importieren Sie mehrere XML-Dateien gleichzeitig für verschiedene Hauptbetriebsnummern.\n                                        Dies ermöglicht es, alle Ihre Betriebe in einem Vorgang zu importieren.\n                                    </p>\n                                </div>\n                            </Tab>\n                        </Tabs>\n\n                        {/* File Drop Zone */}\n                        <div\n                            {...getRootProps()}\n                            className={`border-2 border-dashed rounded p-4 text-center mb-3 ${\n                                isDragActive \n                                    ? 'border-primary bg-primary bg-opacity-10' \n                                    : 'border-secondary bg-light'\n                            }`}\n                            style={{ cursor: 'pointer', minHeight: '120px' }}\n                        >\n                            <input {...getInputProps()} />\n                            <div className=\"d-flex flex-column align-items-center justify-content-center h-100\">\n                                <i className=\"bi bi-cloud-upload fs-2 text-muted mb-2\"></i>\n                                {isDragActive ? (\n                                    <p className=\"mb-0 text-primary\">\n                                        XML-Dateien hier ablegen...\n                                    </p>\n                                ) : (\n                                    <>\n                                        <p className=\"mb-1\">\n                                            <strong>\n                                                {importMode === 'single' \n                                                    ? 'Klicken Sie hier oder ziehen Sie eine XML-Datei hierher'\n                                                    : 'Klicken Sie hier oder ziehen Sie mehrere XML-Dateien hierher'\n                                                }\n                                            </strong>\n                                        </p>\n                                        <small className=\"text-muted\">\n                                            Unterstützte Formate: .xml (max. 10MB pro Datei)\n                                        </small>\n                                    </>\n                                )}\n                            </div>\n                        </div>\n\n                        {/* Alternative File Input */}\n                        <Form.Group className=\"mb-3\">\n                            <Form.Label>\n                                {importMode === 'single' \n                                    ? 'Oder wählen Sie eine Datei aus:'\n                                    : 'Oder wählen Sie mehrere Dateien aus:'\n                                }\n                            </Form.Label>\n                            <Form.Control\n                                type=\"file\"\n                                accept=\".xml\"\n                                multiple={importMode === 'batch'}\n                                onChange={handleFileSelect}\n                            />\n                        </Form.Group>\n\n                        {/* Selected Files Info */}\n                        {selectedFiles.length > 0 && (\n                            <Card className=\"mb-3\">\n                                <Card.Header className=\"d-flex justify-content-between align-items-center\">\n                                    <span>\n                                        <strong>Ausgewählte Dateien ({selectedFiles.length})</strong>\n                                    </span>\n                                    <Button\n                                        variant=\"outline-danger\"\n                                        size=\"sm\"\n                                        onClick={() => setSelectedFiles([])}\n                                    >\n                                        Alle entfernen\n                                    </Button>\n                                </Card.Header>\n                                <Card.Body className=\"p-0\">\n                                    <ListGroup variant=\"flush\">\n                                        {selectedFiles.map((file, index) => (\n                                            <ListGroup.Item key={index} className=\"d-flex justify-content-between align-items-center\">\n                                                <div>\n                                                    <strong>{file.name}</strong>\n                                                    <br />\n                                                    <small className=\"text-muted\">\n                                                        {formatFileSize(file.size)} • {file.type || 'XML-Datei'}\n                                                    </small>\n                                                </div>\n                                                <Button\n                                                    variant=\"outline-secondary\"\n                                                    size=\"sm\"\n                                                    onClick={() => handleRemoveFile(index)}\n                                                >\n                                                    Entfernen\n                                                </Button>\n                                            </ListGroup.Item>\n                                        ))}\n                                    </ListGroup>\n                                </Card.Body>\n                            </Card>\n                        )}\n\n                        {/* Import Guidelines */}\n                        <div className=\"border rounded p-3 bg-light\">\n                            <h6 className=\"mb-2\">Wichtige Hinweise:</h6>\n                            <ul className=\"mb-0 small\">\n                                <li>Die XML-Dateien müssen das österreichische Feldstücklisten-Format verwenden</li>\n                                <li>Bereits vorhandene Daten für das gleiche Jahr werden überschrieben</li>\n                                <li>Der Import kann je nach Anzahl und Größe der Dateien einige Minuten dauern</li>\n                                <li>Geometriedaten werden automatisch in das korrekte Format konvertiert</li>\n                                {importMode === 'batch' && (\n                                    <>\n                                        <li><strong>Batch-Import:</strong> Jede XML-Datei kann eine andere Hauptbetriebsnummer haben</li>\n                                        <li>Bei Fehlern in einzelnen Dateien werden die anderen trotzdem importiert</li>\n                                    </>\n                                )}\n                            </ul>\n                        </div>\n                    </>\n                )}\n            </Modal.Body>\n            <Modal.Footer>\n                <Button \n                    variant=\"secondary\" \n                    onClick={handleClose}\n                    disabled={importLoading}\n                >\n                    {importSuccess ? 'Schließen' : 'Abbrechen'}\n                </Button>\n                {!importSuccess && (\n                    <Button\n                        variant=\"primary\"\n                        onClick={handleImport}\n                        disabled={selectedFiles.length === 0 || importLoading}\n                    >\n                        {importLoading \n                            ? 'Importiere...' \n                            : `Import starten ${selectedFiles.length > 1 ? `(${selectedFiles.length} Dateien)` : ''}`\n                        }\n                    </Button>\n                )}\n            </Modal.Footer>\n        </Modal>\n    );\n};\n\nexport default XMLImportModal;\n","import React, { useState } from 'react';\nimport { Modal, Button, Form, Alert, Spinner } from 'react-bootstrap';\nimport api from '../../utils/api';\n\nconst AgrarCommanderImportModal = ({ show, onHide, onSuccess }) => {\n    const [betriebId, setBetriebId] = useState('');\n    const [year, setYear] = useState(new Date().getFullYear());\n    const [mfanr, setMfanr] = useState('');\n    const [loading, setLoading] = useState(false);\n    const [error, setError] = useState(null);\n    const [success, setSuccess] = useState(null);\n\n    const handleSubmit = async (e) => {\n        e.preventDefault();\n\n        if (!betriebId || !year) {\n            setError('Bitte füllen Sie alle Felder aus.');\n            return;\n        }\n\n        setLoading(true);\n        setError(null);\n        setSuccess(null);\n\n        try {\n            const payload = {\n                betrieb_id: betriebId,\n                year: parseInt(year)\n            };\n            \n            // Add mfanr if provided\n            if (mfanr && mfanr.trim()) {\n                payload.mfanr = mfanr.trim();\n            }\n            \n            const response = await api.post('/agrarcommander-import/import_data/', payload, {\n                timeout: 300000 // 5 minutes timeout for import operations\n            });\n\n            setSuccess(response.data.message);\n\n            // If import completed successfully (200) or is still running (202),\n            // refresh farms data and close the modal after a short delay\n            setTimeout(() => {\n                if (onSuccess) {\n                    onSuccess();\n                }\n                handleClose();\n            }, 1500);\n\n        } catch (err) {\n            console.error('AgrarCommander import error:', err);\n            setError(\n                err.response?.data?.error || \n                'Fehler beim Import. Bitte überprüfen Sie Ihre Eingaben und versuchen Sie es erneut.'\n            );\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const handleClose = () => {\n        setBetriebId('');\n        setYear(new Date().getFullYear());\n        setMfanr('');\n        setError(null);\n        setSuccess(null);\n        setLoading(false);\n        onHide();\n    };\n\n    return (\n        <Modal show={show} onHide={handleClose} centered>\n            <Modal.Header closeButton>\n                <Modal.Title>\n                    <i className=\"bi bi-database me-2\"></i>\n                    Import aus AgrarCommander\n                </Modal.Title>\n            </Modal.Header>\n\n            <Form onSubmit={handleSubmit}>\n                <Modal.Body>\n                    {error && (\n                        <Alert variant=\"danger\" dismissible onClose={() => setError(null)}>\n                            <i className=\"bi bi-exclamation-triangle me-2\"></i>\n                            {error}\n                        </Alert>\n                    )}\n\n                    {success && (\n                        <Alert variant=\"success\">\n                            <i className=\"bi bi-check-circle me-2\"></i>\n                            {success}\n                        </Alert>\n                    )}\n\n                    <Form.Group className=\"mb-3\">\n                        <Form.Label>\n                            Betrieb ID <span className=\"text-danger\">*</span>\n                        </Form.Label>\n                        <Form.Control\n                            type=\"text\"\n                            placeholder=\"z.B. 12345\"\n                            value={betriebId}\n                            onChange={(e) => setBetriebId(e.target.value)}\n                            disabled={loading || success}\n                            required\n                        />\n                        <Form.Text className=\"text-muted\">\n                            Die Betrieb ID (bet_id_key) aus der AgrarCommander Datenbank\n                        </Form.Text>\n                    </Form.Group>\n\n                    <Form.Group className=\"mb-3\">\n                        <Form.Label>\n                            Jahr <span className=\"text-danger\">*</span>\n                        </Form.Label>\n                        <Form.Control\n                            type=\"number\"\n                            min=\"2000\"\n                            max={new Date().getFullYear() + 1}\n                            value={year}\n                            onChange={(e) => setYear(e.target.value)}\n                            disabled={loading || success}\n                            required\n                        />\n                        <Form.Text className=\"text-muted\">\n                            Das Wirtschaftsjahr für den Import\n                        </Form.Text>\n                    </Form.Group>\n\n                    <Form.Group className=\"mb-3\">\n                        <Form.Label>\n                            MFANR (optional)\n                        </Form.Label>\n                        <Form.Control\n                            type=\"text\"\n                            placeholder=\"z.B. 123 oder 123,456,789\"\n                            value={mfanr}\n                            onChange={(e) => setMfanr(e.target.value)}\n                            disabled={loading || success}\n                        />\n                        <Form.Text className=\"text-muted\">\n                            Optional: Nur bestimmte Feldstücke importieren. Mehrere Nummern mit Komma trennen.\n                        </Form.Text>\n                    </Form.Group>\n\n                    {!success && (\n                        <Alert variant=\"info\">\n                            <i className=\"bi bi-info-circle me-2\"></i>\n                            <strong>Hinweis:</strong> Der Import kann einige Minuten dauern. \n                            Bitte warten Sie, bis der Import abgeschlossen ist.\n                        </Alert>\n                    )}\n                </Modal.Body>\n\n                <Modal.Footer>\n                    <Button \n                        variant=\"secondary\" \n                        onClick={handleClose}\n                        disabled={loading}\n                    >\n                        Abbrechen\n                    </Button>\n                    <Button \n                        variant=\"primary\" \n                        type=\"submit\"\n                        disabled={loading || success || !betriebId || !year}\n                    >\n                        {loading ? (\n                            <>\n                                <Spinner\n                                    as=\"span\"\n                                    animation=\"border\"\n                                    size=\"sm\"\n                                    role=\"status\"\n                                    aria-hidden=\"true\"\n                                    className=\"me-2\"\n                                />\n                                Import läuft...\n                            </>\n                        ) : success ? (\n                            <>\n                                <i className=\"bi bi-check-circle me-2\"></i>\n                                Import abgeschlossen\n                            </>\n                        ) : (\n                            <>\n                                <i className=\"bi bi-download me-2\"></i>\n                                Import starten\n                            </>\n                        )}\n                    </Button>\n                </Modal.Footer>\n            </Form>\n        </Modal>\n    );\n};\n\nexport default AgrarCommanderImportModal;\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Modal, Button, Form, Alert, Spinner, Row, Col, Dropdown } from 'react-bootstrap';\nimport api from '../../utils/api';\n\n// Custom SearchableSelect Component\nconst SearchableSelect = ({ \n    options, \n    value, \n    onChange, \n    placeholder, \n    displayKey = 'name', \n    valueKey = 'id',\n    disabled = false,\n    onSearchChange = null \n}) => {\n    const [isOpen, setIsOpen] = useState(false);\n    const [searchTerm, setSearchTerm] = useState('');\n    const [displayValue, setDisplayValue] = useState('');\n\n    // Set display value when value prop changes\n    useEffect(() => {\n        if (value && options.length > 0) {\n            const selectedOption = options.find(opt => opt[valueKey] === value);\n            setDisplayValue(selectedOption ? selectedOption[displayKey] : '');\n            setSearchTerm('');\n        } else {\n            setDisplayValue('');\n            setSearchTerm('');\n        }\n    }, [value, options, displayKey, valueKey]);\n\n    // Filter options based on search term\n    const filteredOptions = options.filter(option =>\n        option[displayKey].toLowerCase().includes(searchTerm.toLowerCase())\n    );\n\n    const handleSelect = (option) => {\n        onChange(option[valueKey]);\n        setDisplayValue(option[displayKey]);\n        setSearchTerm('');\n        setIsOpen(false);\n        if (onSearchChange) {\n            onSearchChange('');\n        }\n    };\n\n    const handleSearchChange = (e) => {\n        const term = e.target.value;\n        setSearchTerm(term);\n        if (onSearchChange) {\n            onSearchChange(term);\n        }\n    };\n\n    const handleInputFocus = () => {\n        if (!disabled) {\n            setIsOpen(true);\n            setSearchTerm(displayValue);\n        }\n    };\n\n    const handleInputBlur = () => {\n        // Delay closing to allow for option selection\n        setTimeout(() => {\n            setIsOpen(false);\n            setSearchTerm('');\n        }, 150);\n    };\n\n    return (\n        <div className=\"position-relative\">\n            <Form.Control\n                type=\"text\"\n                value={isOpen ? searchTerm : displayValue}\n                onChange={handleSearchChange}\n                onFocus={handleInputFocus}\n                onBlur={handleInputBlur}\n                placeholder={placeholder}\n                disabled={disabled}\n                autoComplete=\"off\"\n            />\n\n            {isOpen && !disabled && (\n                <div \n                    className=\"position-absolute w-100 bg-white border border-top-0 rounded-bottom shadow-sm\"\n                    style={{ zIndex: 1000, maxHeight: '200px', overflowY: 'auto' }}\n                >\n                    {filteredOptions.length > 0 ? (\n                        filteredOptions.map(option => (\n                            <div\n                                key={option[valueKey]}\n                                className=\"p-2 border-bottom cursor-pointer hover-bg-light\"\n                                style={{ cursor: 'pointer' }}\n                                onMouseDown={() => handleSelect(option)}\n                                onMouseEnter={(e) => e.target.style.backgroundColor = '#f8f9fa'}\n                                onMouseLeave={(e) => e.target.style.backgroundColor = 'white'}\n                            >\n                                {option[displayKey]}\n                            </div>\n                        ))\n                    ) : (\n                        <div className=\"p-2 text-muted\">\n                            Keine Ergebnisse gefunden\n                        </div>\n                    )}\n                </div>\n            )}\n        </div>\n    );\n};\n\nconst ManualFarmModal = ({ show, onHide, onSuccess, editFarm = null }) => {\n    const [formData, setFormData] = useState({\n        hauptbetriebsnummer: '',\n        bbknummer: '',\n        name: '',\n        street_name_id: '',\n        street_number: '',\n        zip_code: '',\n        city: '',\n        state_id: '',\n        country_id: '',\n        type_of_farming: '',\n        prefered_fuel_type_id: '',\n        production_numbers: []\n    });\n\n    const [isEditMode, setIsEditMode] = useState(false);\n    const [successMessage, setSuccessMessage] = useState('');\n\n    const [loading, setLoading] = useState(false);\n    const [error, setError] = useState('');\n    const [countries, setCountries] = useState([]);\n    const [states, setStates] = useState([]);\n    const [crops, setCrops] = useState([]);\n    const [fuelTypes, setFuelTypes] = useState([]);\n    const [streetSuggestions, setStreetSuggestions] = useState([]);\n    const [showStreetSuggestions, setShowStreetSuggestions] = useState(false);\n    const [streetSearchQuery, setStreetSearchQuery] = useState('');\n\n    // Set edit mode and populate form when editFarm changes\n    useEffect(() => {\n        if (editFarm) {\n            setIsEditMode(true);\n            \n            // Parse production numbers\n            const parsedProductionNumbers = editFarm.production_numbers \n                ? editFarm.production_numbers.map(s => {\n                    const parts = s.split(':');\n                    if (parts.length === 2) {\n                        return { crop_id: parseInt(parts[0]), number: parts[1] };\n                    }\n                    return null;\n                }).filter(item => item !== null)\n                : [];\n\n            setFormData({\n                hauptbetriebsnummer: editFarm.hauptbetriebsnummer || '',\n                bbknummer: editFarm.bbknummer || '',\n                name: editFarm.name || '',\n                street_name_id: editFarm.street_name?.id || '',\n                street_number: editFarm.street_number || '',\n                zip_code: editFarm.zip_code || '',\n                city: editFarm.city || '',\n                state_id: editFarm.state?.id || '',\n                country_id: editFarm.country?.id || '',\n                type_of_farming: editFarm.type_of_farming || '',\n                prefered_fuel_type_id: editFarm.prefered_fuel_type?.id || '',\n                production_numbers: parsedProductionNumbers\n            });\n            // Set street search query if we have street name\n            if (editFarm.street_name?.street) {\n                setStreetSearchQuery(editFarm.street_name.street);\n            }\n        } else {\n            setIsEditMode(false);\n            resetForm();\n        }\n    }, [editFarm]);\n\n    // Load countries and crops on component mount\n    useEffect(() => {\n        const loadData = async () => {\n            try {\n                // Load countries\n                const countriesResponse = await api.get('/countries/');\n                const countriesData = countriesResponse.data;\n                setCountries(countriesData);\n\n                // Load main crops\n                const cropsResponse = await api.get('/crops/?is_main_crop=true');\n                setCrops(cropsResponse.data.results || cropsResponse.data);\n\n                // Load fuel types\n                const fuelTypesResponse = await api.get('/fuel-types/');\n                setFuelTypes(fuelTypesResponse.data.results || fuelTypesResponse.data || []);\n\n                // Auto-select Austria (Österreich) as default - check both name and ISO code (only for new farms)\n                if (!isEditMode) {\n                    const austria = countriesData.find(c => \n                        c.name_de === 'Österreich' || \n                        c.iso2 === 'AT' || \n                        c.name_de.toLowerCase().includes('österreich') ||\n                        c.name_de.toLowerCase().includes('austria')\n                    );\n\n                    if (austria && !formData.country_id) {\n                        setFormData(prev => ({ ...prev, country_id: austria.id }));\n                        loadStatesForCountry(austria.id);\n                    }\n                }\n\n                // Load states for existing country in edit mode\n                if (isEditMode && formData.country_id) {\n                    loadStatesForCountry(formData.country_id);\n                }\n            } catch (err) {\n                console.error('Error loading data:', err);\n            }\n        };\n\n        if (show) {\n            loadData();\n        }\n    }, [show, isEditMode]);\n\n    // Load states when formData.country_id changes in edit mode\n    useEffect(() => {\n        if (isEditMode && formData.country_id && countries.length > 0) {\n            loadStatesForCountry(formData.country_id);\n        }\n    }, [formData.country_id, isEditMode, countries]);\n\n    // Load states when country changes\n    const loadStatesForCountry = async (countryId = null) => {\n        try {\n            const url = countryId ? `/states/?country=${countryId}&limit=20` : '/states/?limit=20';\n            const response = await api.get(url);\n            setStates(response.data);\n\n            // Auto-select Austria if no country selected and Austria is available\n            if (!countryId && !formData.country_id) {\n                const austria = countries.find(c => c.iso2 === 'AT');\n                if (austria) {\n                    setFormData(prev => ({ ...prev, country_id: austria.id }));\n                }\n            }\n        } catch (err) {\n            console.error('Error loading states:', err);\n        }\n    };\n\n    const handleInputChange = (field, value) => {\n        setFormData(prev => ({ ...prev, [field]: value }));\n        setError('');\n\n        // Handle country change\n        if (field === 'country_id') {\n            loadStatesForCountry(value);\n            setFormData(prev => ({ \n                ...prev, \n                [field]: value,\n                state_id: '' // Reset state selection\n            }));\n        }\n\n        // Handle ZIP code change - autofill city if available\n        if (field === 'zip_code' && value.length >= 4) {\n            searchCityByZipCode(value);\n        }\n    };\n\n    // Search for city by ZIP code\n    const searchCityByZipCode = async (zipCode) => {\n        try {\n            const params = {\n                zip_code: zipCode,\n                limit: 1\n            };\n\n            if (formData.state_id) {\n                params.state = formData.state_id;\n            }\n\n            const response = await api.get('/communities/by_zip/', { params });\n            const communities = response.data.results || [];\n\n            if (communities.length > 0) {\n                const community = communities[0];\n                setFormData(prev => ({\n                    ...prev,\n                    city: community.community || prev.city\n                }));\n            }\n        } catch (err) {\n            console.error('Error searching city by ZIP code:', err);\n        }\n    };\n\n    // Debounced street name search\n    const searchStreetNames = useCallback(\n        async (query) => {\n            if (query.length < 2) {\n                setStreetSuggestions([]);\n                setShowStreetSuggestions(false);\n                return;\n            }\n\n            try {\n                const params = {\n                    q: query,\n                    limit: 10\n                };\n\n                if (formData.state_id) {\n                    params.state = formData.state_id;\n                }\n\n                if (formData.zip_code) {\n                    params.zip_code = formData.zip_code;\n                }\n\n                const response = await api.get('/street-names/autocomplete/', { params });\n                setStreetSuggestions(response.data.results || []);\n                setShowStreetSuggestions(true);\n            } catch (err) {\n                console.error('Error searching street names:', err);\n                setStreetSuggestions([]);\n                setShowStreetSuggestions(false);\n            }\n        },\n        [formData.state_id, formData.zip_code]\n    );\n\n    const handleStreetSearch = (value) => {\n        setStreetSearchQuery(value);\n        searchStreetNames(value);\n    };\n\n    const selectStreetSuggestion = (suggestion) => {\n        // Auto-fill state from street suggestion if available\n        if (suggestion.state && suggestion.state.id) {\n            // Also update the states list if needed\n            const stateExists = states.find(s => s.id === suggestion.state.id);\n            if (!stateExists && suggestion.state) {\n                setStates(prev => [...prev, suggestion.state]);\n            }\n        }\n\n        setFormData(prev => ({\n            ...prev,\n            street_name_id: suggestion.id,\n            zip_code: suggestion.zip_code || prev.zip_code,\n            city: suggestion.community || prev.city,\n            // Auto-fill state if available from street data\n            state_id: suggestion.state_id || prev.state_id\n        }));\n        setStreetSearchQuery(suggestion.text);\n        setShowStreetSuggestions(false);\n    };\n\n    // Production Numbers Management\n    const addProductionNumber = () => {\n        setFormData(prev => ({\n            ...prev,\n            production_numbers: [...prev.production_numbers, { crop_id: '', number: '' }]\n        }));\n    };\n\n    const removeProductionNumber = (index) => {\n        setFormData(prev => ({\n            ...prev,\n            production_numbers: prev.production_numbers.filter((_, i) => i !== index)\n        }));\n    };\n\n    const handleProductionNumberChange = (index, field, value) => {\n        setFormData(prev => {\n            const newProductionNumbers = [...prev.production_numbers];\n            newProductionNumbers[index] = {\n                ...newProductionNumbers[index],\n                [field]: value\n            };\n            return {\n                ...prev,\n                production_numbers: newProductionNumbers\n            };\n        });\n    };\n\n    const handleSubmit = async (e) => {\n        e.preventDefault();\n        setLoading(true);\n        setError('');\n\n        try {\n            // Prepare payload with formatted production numbers\n            const payload = {\n                ...formData,\n                production_numbers: formData.production_numbers\n                    .filter(item => item.crop_id && item.number)\n                    .map(item => `${item.crop_id}:${item.number}`)\n            };\n\n            let response;\n            if (isEditMode) {\n                // Update existing farm\n                response = await api.put(`/farms/${editFarm.id}/`, payload);\n                setSuccessMessage(`Betrieb \"${response.data.name || response.data.hauptbetriebsnummer}\" erfolgreich aktualisiert!`);\n                onSuccess({ farm: response.data });\n            } else {\n                // Create new farm\n                response = await api.post('/manual-farms/create_manual_farm/', payload);\n                setSuccessMessage(`Betrieb \"${response.data.farm.name || response.data.farm.hauptbetriebsnummer}\" erfolgreich erstellt!`);\n                onSuccess(response.data);\n            }\n            // Don't reset form or close modal - let user decide\n        } catch (err) {\n            if (err.response?.data) {\n                const errorData = err.response.data;\n                if (typeof errorData === 'object') {\n                    // Handle field-specific errors\n                    const errorMessages = [];\n                    Object.entries(errorData).forEach(([field, messages]) => {\n                        if (Array.isArray(messages)) {\n                            errorMessages.push(`${field}: ${messages.join(', ')}`);\n                        } else {\n                            errorMessages.push(`${field}: ${messages}`);\n                        }\n                    });\n                    setError(errorMessages.join(' | '));\n                } else {\n                    const action = isEditMode ? 'Aktualisieren' : 'Erstellen';\n                    setError(errorData.message || `Fehler beim ${action} des Betriebs`);\n                }\n            } else {\n                const action = isEditMode ? 'Aktualisieren' : 'Erstellen';\n                setError(`Fehler beim ${action} des Betriebs`);\n            }\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    const handleCreateAnother = () => {\n        resetForm();\n        setError('');\n        setSuccessMessage('');\n        // Keep modal open for another farm creation\n    };\n\n    const resetForm = () => {\n        setFormData({\n            hauptbetriebsnummer: '',\n            bbknummer: '',\n            name: '',\n            street_name_id: '',\n            street_number: '',\n            zip_code: '',\n            city: '',\n            state_id: '',\n            country_id: '',\n            type_of_farming: '',\n            prefered_fuel_type_id: '',\n            production_numbers: []\n        });\n        setStreetSearchQuery('');\n        setError('');\n        setSuccessMessage('');\n        setStreetSuggestions([]);\n        setShowStreetSuggestions(false);\n    };\n\n    const handleClose = () => {\n        resetForm();\n        onHide();\n    };\n\n    return (\n        <Modal show={show} onHide={handleClose} size=\"lg\">\n            <Modal.Header closeButton>\n                <Modal.Title>\n                    <i className={`bi ${isEditMode ? 'bi-pencil' : 'bi-plus-square'} me-2`}></i>\n                    {isEditMode ? 'Betrieb ' + formData.hauptbetriebsnummer + ' bearbeiten' : 'neuen Betrieb erstellen'}\n                </Modal.Title>\n            </Modal.Header>\n\n            <Form onSubmit={handleSubmit} autoComplete=\"off\">\n                <Modal.Body>\n                    {error && (\n                        <Alert variant=\"danger\" className=\"mb-1\">\n                            {error}\n                        </Alert>\n                    )}\n\n                    {successMessage && (\n                        <Alert variant=\"success\" className=\"mb-1\">\n                            <i className=\"bi bi-check-circle me-2\"></i>\n                            {successMessage}\n                        </Alert>\n                    )}\n\n                    {/* Basic Farm Information */}\n                    <h6 className=\"text-primary section-header\">Betriebsdaten</h6>\n                    <Row className=\"mb-1\">\n                        <Col md={6}>\n                            <Form.Group className=\"mb-1\">\n                                <Form.Label>\n                                    Hauptbetriebsnummer <span className=\"text-danger\">*</span>\n                                </Form.Label>\n                                <Form.Control\n                                    type=\"text\"\n                                    value={formData.hauptbetriebsnummer}\n                                    onChange={(e) => handleInputChange('hauptbetriebsnummer', e.target.value)}\n                                    placeholder=\"z.B. 123456789\"\n                                    required\n                                    autoComplete=\"off\"\n                                />\n                                <Form.Text className=\"text-muted\">\n                                    Eindeutige Identifikationsnummer des Betriebs\n                                </Form.Text>\n                            </Form.Group>\n                        </Col>\n                        <Col md={6}>\n                            <Form.Group className=\"mb-1\">\n                                <Form.Label>BBK-Nummer</Form.Label>\n                                <Form.Control\n                                    type=\"text\"\n                                    value={formData.bbknummer}\n                                    onChange={(e) => handleInputChange('bbknummer', e.target.value)}\n                                    placeholder=\"Optional\"\n                                    autoComplete=\"off\"\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    <Row className=\"mb-2\">\n                        <Col md={12}>\n                            <Form.Group>\n                                <Form.Label>Betriebsname</Form.Label>\n                                <Form.Control\n                                    type=\"text\"\n                                    value={formData.name}\n                                    onChange={(e) => handleInputChange('name', e.target.value)}\n                                    placeholder=\"Name des landwirtschaftlichen Betriebs\"\n                                    autoComplete=\"off\"\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n                    <Row className=\"mb-4\">\n                        <Col md={6}>\n                            <Form.Group>\n                                <Form.Label>Bewirtschaftungsart</Form.Label>\n                                <Form.Select\n                                    value={formData.type_of_farming}\n                                    onChange={(e) => handleInputChange('type_of_farming', e.target.value)}\n                                >\n                                    <option value=\"\">Nicht angegeben</option>\n                                    <option value=\"BIO\">Bio</option>\n                                    <option value=\"CONVENTIONAL\">Konventionell</option>\n                                </Form.Select>\n                                <Form.Text className=\"text-muted\">\n                                    Standard für Feldstücke/Schläge\n                                </Form.Text>\n                            </Form.Group>\n                        </Col>\n                        <Col md={6}>\n                            <Form.Group>\n                                <Form.Label>Bevorzugter Kraftstoff</Form.Label>\n                                <Form.Select\n                                    value={formData.prefered_fuel_type_id}\n                                    onChange={(e) => handleInputChange('prefered_fuel_type_id', e.target.value)}\n                                >\n                                    <option value=\"\">Nicht angegeben</option>\n                                    {fuelTypes.filter(fuel => fuel.name !== 'Elektro').map(fuel => (\n                                        <option key={fuel.id} value={fuel.id}>\n                                            {fuel.name}\n                                        </option>\n                                    ))}\n                                </Form.Select>\n                                <Form.Text className=\"text-muted\">\n                                    Standard für neue Maßnahmen\n                                </Form.Text>\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    {/* Address Information */}\n                    <h6 className=\"text-primary section-header\">Adresse</h6>\n\n                    {/* Row 1: Street and Number */}\n                    <Row className=\"mb-1\">\n                        <Col md={8}>\n                            <Form.Group className=\"mb-1 position-relative\">\n                                <Form.Label>Straßenname</Form.Label>\n                                <Form.Control\n                                    type=\"text\"\n                                    value={streetSearchQuery}\n                                    onChange={(e) => handleStreetSearch(e.target.value)}\n                                    placeholder=\"Straßenname eingeben...\"\n                                    autoComplete=\"off\"\n                                />\n                                <Form.Text className=\"text-muted\">\n                                    Beginnen Sie zu tippen für Vorschläge\n                                </Form.Text>\n\n                                {showStreetSuggestions && streetSuggestions.length > 0 && (\n                                    <div className=\"position-absolute w-100 bg-white border border-top-0 rounded-bottom shadow-sm\" \n                                         style={{ zIndex: 1000, maxHeight: '200px', overflowY: 'auto' }}>\n                                        {streetSuggestions.map(suggestion => (\n                                            <div\n                                                key={suggestion.id}\n                                                className=\"p-2 border-bottom cursor-pointer hover-bg-light\"\n                                                style={{ cursor: 'pointer' }}\n                                                onClick={() => selectStreetSuggestion(suggestion)}\n                                                onMouseEnter={(e) => e.target.style.backgroundColor = '#f8f9fa'}\n                                                onMouseLeave={(e) => e.target.style.backgroundColor = 'white'}\n                                            >\n                                                <div className=\"fw-bold\">{suggestion.text}</div>\n                                                <small className=\"text-muted\">{suggestion.full_text}</small>\n                                            </div>\n                                        ))}\n                                    </div>\n                                )}\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group className=\"mb-1\">\n                                <Form.Label>Hausnummer</Form.Label>\n                                <Form.Control\n                                    type=\"text\"\n                                    value={formData.street_number}\n                                    onChange={(e) => handleInputChange('street_number', e.target.value)}\n                                    placeholder=\"z.B. 123a\"\n                                    autoComplete=\"off\"\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    {/* Row 2: Zip Code and City */}\n                    <Row className=\"mb-1\">\n                        <Col md={4}>\n                            <Form.Group className=\"mb-1\">\n                                <Form.Label>Postleitzahl</Form.Label>\n                                <Form.Control\n                                    type=\"text\"\n                                    value={formData.zip_code}\n                                    onChange={(e) => handleInputChange('zip_code', e.target.value)}\n                                    placeholder=\"z.B. 1010\"\n                                    autoComplete=\"off\"\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={8}>\n                            <Form.Group className=\"mb-1\">\n                                <Form.Label>Ort</Form.Label>\n                                <Form.Control\n                                    type=\"text\"\n                                    value={formData.city}\n                                    onChange={(e) => handleInputChange('city', e.target.value)}\n                                    placeholder=\"z.B. Wien\"\n                                    autoComplete=\"off\"\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    {/* Row 3: Country and State */}\n                    <Row>\n                        <Col md={6}>\n                            <Form.Group className=\"mb-1\">\n                                <Form.Label>Land</Form.Label>\n                                <SearchableSelect\n                                    options={countries}\n                                    value={formData.country_id}\n                                    onChange={(value) => handleInputChange('country_id', value)}\n                                    placeholder=\"Land auswählen...\"\n                                    displayKey=\"name_de\"\n                                    valueKey=\"id\"\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={6}>\n                            <Form.Group className=\"mb-1\">\n                                <Form.Label>Bundesland</Form.Label>\n                                <SearchableSelect\n                                    options={states.map(state => ({\n                                        ...state,\n                                        display_name: `${state.name_de} (${state.shortname})`\n                                    }))}\n                                    value={formData.state_id}\n                                    onChange={(value) => handleInputChange('state_id', value)}\n                                    placeholder=\"Bundesland auswählen...\"\n                                    displayKey=\"display_name\"\n                                    valueKey=\"id\"\n                                    disabled={!formData.country_id}\n                                />\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    {/* Production Numbers */}\n                    <h6 className=\"mb-1 pb-1 mt-4 text-primary d-flex justify-content-between align-items-center section-header\">\n                        <span>Produzentennummern</span>\n                        <Button \n                            variant=\"outline-primary\" \n                            size=\"sm\" \n                            onClick={addProductionNumber}\n                        >\n                            <i className=\"bi bi-plus-square me-1\"></i>\n                            Hinzufügen\n                        </Button>\n                    </h6>\n                    \n                    {formData.production_numbers.length > 0 ? (\n                        <div className=\"mb-4\">\n                            {formData.production_numbers.map((item, index) => (\n                                <Row key={index} className=\"mb-2 align-items-end\">\n                                    <Col md={6}>\n                                        <Form.Group>\n                                            <Form.Label className=\"small text-muted mb-1\">Kultur</Form.Label>\n                                            <SearchableSelect\n                                                options={crops}\n                                                value={item.crop_id}\n                                                onChange={(value) => handleProductionNumberChange(index, 'crop_id', value)}\n                                                placeholder=\"Kultur auswählen...\"\n                                                displayKey=\"name\"\n                                                valueKey=\"id\"\n                                            />\n                                        </Form.Group>\n                                    </Col>\n                                    <Col md={5}>\n                                        <Form.Group>\n                                            <Form.Label className=\"small text-muted mb-1\">Nummer</Form.Label>\n                                            <Form.Control\n                                                type=\"text\"\n                                                value={item.number}\n                                                onChange={(e) => handleProductionNumberChange(index, 'number', e.target.value)}\n                                                placeholder=\"Produzentennummer\"\n                                            />\n                                        </Form.Group>\n                                    </Col>\n                                    <Col md={1}>\n                                        <Button \n                                            variant=\"outline-danger\" \n                                            size=\"sm\"\n                                            onClick={() => removeProductionNumber(index)}\n                                            title=\"Entfernen\"\n                                        >\n                                            <i className=\"bi bi-trash\"></i>\n                                        </Button>\n                                    </Col>\n                                </Row>\n                            ))}\n                        </div>\n                    ) : (\n                        <div className=\"text-muted small mb-4 fst-italic\">\n                            Keine Produzentennummer erfasst.\n                        </div>\n                    )}\n\n                    {/* {!isEditMode && (\n                        <Alert variant=\"info\" className=\"mt-3\">\n                            <i className=\"bi bi-info-circle me-2\"></i>\n                            <strong>Hinweis:</strong> Nach der Erstellung des Betriebs können Sie manuell Betriebsjahre, \n                            Feldstücke und Schläge hinzufügen oder die Daten später per XML-Import ergänzen.\n                        </Alert>\n                    )} */}\n                </Modal.Body>\n\n                <Modal.Footer>\n                    <div className=\"d-flex justify-content-between w-100\">\n                        <Button variant=\"secondary\" onClick={handleClose} disabled={loading}>\n                            Schließen\n                        </Button>\n                        <div>\n                            {successMessage && !isEditMode && (\n                                <Button \n                                    variant=\"outline-primary\" \n                                    onClick={handleCreateAnother}\n                                    className=\"me-2\"\n                                    disabled={loading}\n                                >\n                                    <i className=\"bi bi-plus-square me-2\"></i>\n                                    Weiteren Betrieb erstellen\n                                </Button>\n                            )}\n                            <Button variant=\"primary\" type=\"submit\" disabled={loading || !formData.hauptbetriebsnummer}>\n                                {loading ? (\n                                    <>\n                                        <Spinner animation=\"border\" size=\"sm\" className=\"me-2\" />\n                                        {isEditMode ? 'Aktualisieren...' : 'Erstellen...'}\n                                    </>\n                                ) : (\n                                    <>\n                                        <i className={`bi ${isEditMode ? 'bi-check-circle' : 'bi-check-circle'} me-2`}></i>\n                                        {isEditMode ? 'Betrieb aktualisieren' : 'Betrieb erstellen'}\n                                    </>\n                                )}\n                            </Button>\n                        </div>\n                    </div>\n                </Modal.Footer>\n            </Form>\n        </Modal>\n    );\n};\n\nexport default ManualFarmModal;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Form, Dropdown, Badge, CloseButton } from 'react-bootstrap';\n\nconst MultiselectAutocomplete = ({ \n    options = [], \n    selected = [], \n    onChange, \n    placeholder = \"Select...\", \n    labelKey = \"label\", \n    valueKey = \"id\" \n}) => {\n    const [searchTerm, setSearchTerm] = useState('');\n    const [isOpen, setIsOpen] = useState(false);\n    const wrapperRef = useRef(null);\n\n    // Filter options based on search term\n    const filteredOptions = options.filter(option => \n        option[labelKey].toLowerCase().includes(searchTerm.toLowerCase())\n    );\n\n    // Handle outside click to close dropdown\n    useEffect(() => {\n        const handleClickOutside = (event) => {\n            if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\n                setIsOpen(false);\n            }\n        };\n\n        document.addEventListener('mousedown', handleClickOutside);\n        return () => {\n            document.removeEventListener('mousedown', handleClickOutside);\n        };\n    }, [wrapperRef]);\n\n    const handleSelect = (option) => {\n        const isSelected = selected.some(item => item[valueKey] === option[valueKey]);\n        let newSelected;\n        \n        if (isSelected) {\n            newSelected = selected.filter(item => item[valueKey] !== option[valueKey]);\n        } else {\n            newSelected = [...selected, option];\n        }\n        \n        onChange(newSelected);\n    };\n\n    const removeOption = (optionToRemove, e) => {\n        e.stopPropagation();\n        const newSelected = selected.filter(item => item[valueKey] !== optionToRemove[valueKey]);\n        onChange(newSelected);\n    };\n\n    return (\n        <div className=\"multiselect-autocomplete position-relative\" ref={wrapperRef}>\n            <div \n                className=\"form-control d-flex flex-wrap gap-1 align-items-center\" \n                onClick={() => setIsOpen(true)}\n                style={{ minHeight: '38px', cursor: 'text' }}\n            >\n                {selected.map(option => (\n                    <Badge \n                        key={option[valueKey]} \n                        bg=\"secondary\" \n                        className=\"d-flex align-items-center gap-1\"\n                    >\n                        {option[labelKey]}\n                        <span \n                            onClick={(e) => removeOption(option, e)}\n                            style={{ cursor: 'pointer' }}\n                        >\n                            &times;\n                        </span>\n                    </Badge>\n                ))}\n                <input\n                    type=\"text\"\n                    className=\"border-0 flex-grow-1\"\n                    style={{ outline: 'none', minWidth: '60px' }}\n                    placeholder={selected.length === 0 ? placeholder : \"\"}\n                    value={searchTerm}\n                    onChange={(e) => {\n                        setSearchTerm(e.target.value);\n                        setIsOpen(true);\n                    }}\n                    onFocus={() => setIsOpen(true)}\n                />\n            </div>\n\n            {isOpen && (\n                <div \n                    className=\"position-absolute w-100 bg-white border rounded shadow-sm mt-1\" \n                    style={{ zIndex: 1000, maxHeight: '200px', overflowY: 'auto' }}\n                >\n                    {filteredOptions.length > 0 ? (\n                        filteredOptions.map(option => {\n                            const isSelected = selected.some(item => item[valueKey] === option[valueKey]);\n                            return (\n                                <div\n                                    key={option[valueKey]}\n                                    className={`px-3 py-2 ${isSelected ? 'bg-primary text-white' : 'hover-bg-light'}`}\n                                    style={{ cursor: 'pointer' }}\n                                    onClick={() => handleSelect(option)}\n                                >\n                                    <Form.Check\n                                        type=\"checkbox\"\n                                        checked={isSelected}\n                                        readOnly\n                                        label={option[labelKey]}\n                                        style={{ pointerEvents: 'none' }}\n                                    />\n                                </div>\n                            );\n                        })\n                    ) : (\n                        <div className=\"px-3 py-2 text-muted\">No options found</div>\n                    )}\n                </div>\n            )}\n        </div>\n    );\n};\n\nexport default MultiselectAutocomplete;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { \n    Offcanvas, Form, Button, InputGroup, Badge, Card, \n    Row, Col, Spinner, Alert\n} from 'react-bootstrap';\nimport api from '../../utils/api';\nimport MultiselectAutocomplete from '../../common/components/MultiselectAutocomplete';\nimport FarmIcon from '../../../icons/landwirtschaft.svg';\n\nconst FilterDrawer = ({ show, onHide, farms, onFilterApply, onFilterClear, currentFilters }) => {\n    const [filters, setFilters] = useState({\n        textSearch: '',\n        selectedFarms: [],\n        selectedYears: [],\n        selectedFeldstuecke: [],\n        selectedSchlaege: [],\n        selectedOperationTypes: [],\n        selectedCrops: [],\n        selectedDataSources: []\n    });\n\n    // Sync with currentFilters when drawer opens\n    useEffect(() => {\n        if (show && currentFilters) {\n            setFilters(currentFilters);\n        }\n    }, [show, currentFilters]);\n\n    const [operationTypes, setOperationTypes] = useState([]);\n    const [loadingOps, setLoadingOps] = useState(false);\n    const [crops, setCrops] = useState([]);\n    const [loadingCrops, setLoadingCrops] = useState(false);\n\n    // Data source options (from Schlag.DataSource choices in models.py)\n    const dataSourceOptions = [\n        { id: 'XML', label: 'XML Import' },\n        { id: 'AC', label: 'AgrarCommander' },\n        { id: 'OEDUE', label: 'ÖDÜ-Plan' },\n        { id: 'FARMDOK', label: 'Farmdok' },\n        { id: 'MANUAL', label: 'Manuell' }\n    ];\n\n    // Extract options from farms data\n    const options = useMemo(() => {\n        const farmOptions = [];\n        const yearOptions = new Set();\n        const feldstueckOptions = [];\n        const schlagOptions = [];\n\n        if (!farms || !Array.isArray(farms)) {\n            return {\n                farms: [],\n                years: [],\n                feldstuecke: [],\n                schlaege: []\n            };\n        }\n\n        farms.forEach(farm => {\n            farmOptions.push({\n                id: farm.id,\n                label: farm.name || `Betrieb ${farm.hauptbetriebsnummer}`\n            });\n\n            if (farm.years) {\n                farm.years.forEach(year => {\n                    yearOptions.add(year.year);\n\n                    if (year.feldstuecke) {\n                        year.feldstuecke.forEach(fs => {\n                            feldstueckOptions.push({\n                                id: fs.id,\n                                label: `${fs.nummer} - ${fs.bezeichnung || 'Unbenannt'} (${year.year})`\n                            });\n\n                            if (fs.schlaege) {\n                                fs.schlaege.forEach(schlag => {\n                                    schlagOptions.push({\n                                        id: schlag.id,\n                                        label: `Schlag ${schlag.nummer} (FS ${fs.nummer})`\n                                    });\n                                });\n                            }\n                        });\n                    }\n                });\n            }\n        });\n\n        // Sort year options\n        const sortedYearOptions = Array.from(yearOptions).sort((a, b) => b - a).map(y => ({\n            id: y,\n            label: y.toString()\n        }));\n\n        return {\n            farms: farmOptions,\n            years: sortedYearOptions,\n            feldstuecke: feldstueckOptions,\n            schlaege: schlagOptions\n        };\n    }, [farms]);\n\n    // Fetch operation types\n    useEffect(() => {\n        const fetchOperationTypes = async () => {\n            if (operationTypes.length > 0) return;\n            \n            setLoadingOps(true);\n            try {\n                const response = await api.get('/operation-types/');\n                if (response.data && response.data.results) {\n                    setOperationTypes(response.data.results.map(op => ({\n                        id: op.id,\n                        label: op.name\n                    })));\n                }\n            } catch (error) {\n                console.error('Error fetching operation types:', error);\n            } finally {\n                setLoadingOps(false);\n            }\n        };\n\n        if (show) {\n            fetchOperationTypes();\n        }\n    }, [show]);\n\n    // Fetch crops\n    useEffect(() => {\n        const fetchCrops = async () => {\n            if (crops.length > 0) return;\n            \n            setLoadingCrops(true);\n            try {\n                const response = await api.get('/crops/');\n                // Handle both paginated and non-paginated responses\n                const cropsData = response.data.results || response.data;\n                if (Array.isArray(cropsData)) {\n                    setCrops(cropsData.map(crop => ({\n                        id: crop.id,\n                        label: crop.name\n                    })));\n                }\n            } catch (error) {\n                console.error('Error fetching crops:', error);\n            } finally {\n                setLoadingCrops(false);\n            }\n        };\n\n        if (show) {\n            fetchCrops();\n        }\n    }, [show]);\n\n    const handleFilterChange = (key, value) => {\n        setFilters(prev => ({\n            ...prev,\n            [key]: value\n        }));\n    };\n\n    const getActiveFiltersCount = () => {\n        let count = 0;\n        if (filters.textSearch) count++;\n        if (filters.selectedFarms?.length > 0) count++;\n        if (filters.selectedYears?.length > 0) count++;\n        if (filters.selectedFeldstuecke?.length > 0) count++;\n        if (filters.selectedSchlaege?.length > 0) count++;\n        if (filters.selectedOperationTypes?.length > 0) count++;\n        if (filters.selectedCrops?.length > 0) count++;\n        if (filters.selectedDataSources?.length > 0) count++;\n        return count;\n    };\n\n    const applyFilters = () => {\n        onFilterApply(filters);\n        onHide();\n    };\n\n    const clearAllFilters = () => {\n        setFilters({\n            textSearch: '',\n            selectedFarms: [],\n            selectedYears: [],\n            selectedFeldstuecke: [],\n            selectedSchlaege: [],\n            selectedOperationTypes: [],\n            selectedCrops: [],\n            selectedDataSources: []\n        });\n        onFilterClear();\n    };\n\n    return (\n        <Offcanvas show={show} onHide={onHide} placement=\"end\" style={{ width: '400px' }}>\n            <Offcanvas.Header closeButton>\n                <Offcanvas.Title>\n                    <i className=\"bi bi-funnel me-2\"></i>\n                    Filter\n                    {getActiveFiltersCount() > 0 && (\n                        <Badge bg=\"primary\" className=\"ms-2\">\n                            {getActiveFiltersCount()}\n                        </Badge>\n                    )}\n                </Offcanvas.Title>\n            </Offcanvas.Header>\n            <Offcanvas.Body className=\"filter-drawer\">\n                {/* Text Search */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                            <i className=\"bi bi-search me-2\"></i>\n                            Textsuche\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        <InputGroup size=\"sm\">\n                            <Form.Control\n                                type=\"text\"\n                                placeholder=\"Suche in allen Textwerten...\"\n                                value={filters.textSearch}\n                                onChange={(e) => handleFilterChange('textSearch', e.target.value)}\n                            />\n                            {filters.textSearch && (\n                                <Button\n                                    variant=\"outline-secondary\"\n                                    onClick={() => handleFilterChange('textSearch', '')}\n                                >\n                                    <i className=\"bi bi-x\"></i>\n                                </Button>\n                            )}\n                        </InputGroup>\n                    </Card.Body>\n                </Card>\n\n                {/* Farms Filter */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                        <img \n                            src={FarmIcon} \n                            alt=\"Hofbedarf\"\n                            className=\"me-2\"\n                            style={{ \n                            width: '1.25rem', \n                            height: '1.25rem',\n                            filter: 'brightness(0)',\n                            }} \n                        />\n                            Betriebe\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        <MultiselectAutocomplete\n                            options={options.farms}\n                            selected={filters.selectedFarms}\n                            onChange={(selected) => handleFilterChange('selectedFarms', selected)}\n                            placeholder=\"Betriebe auswählen...\"\n                        />\n                    </Card.Body>\n                </Card>\n\n                {/* Years Filter */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                            <i className=\"bi bi-calendar me-2\"></i>\n                            Jahrgänge\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        <MultiselectAutocomplete\n                            options={options.years}\n                            selected={filters.selectedYears}\n                            onChange={(selected) => handleFilterChange('selectedYears', selected)}\n                            placeholder=\"Jahrgänge auswählen...\"\n                            valueKey=\"id\" \n                        />\n                    </Card.Body>\n                </Card>\n\n                {/* Feldstücke Filter */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                            <i className=\"bi bi-pin-map me-2\"></i>\n                            Feldstücke\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        <MultiselectAutocomplete\n                            options={options.feldstuecke}\n                            selected={filters.selectedFeldstuecke}\n                            onChange={(selected) => handleFilterChange('selectedFeldstuecke', selected)}\n                            placeholder=\"Feldstücke auswählen...\"\n                        />\n                    </Card.Body>\n                </Card>\n\n                {/* Schläge Filter */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                            <i className=\"bi bi-grid-3x3 me-2\"></i>\n                            Schläge\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        <MultiselectAutocomplete\n                            options={options.schlaege}\n                            selected={filters.selectedSchlaege}\n                            onChange={(selected) => handleFilterChange('selectedSchlaege', selected)}\n                            placeholder=\"Schläge auswählen...\"\n                        />\n                    </Card.Body>\n                </Card>\n\n                {/* Operation Types Filter */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                            <i className=\"bi bi-lightning me-2\"></i>\n                            Maßnahmenarten\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        {loadingOps ? (\n                            <div className=\"text-center py-1\">\n                                <Spinner size=\"sm\" animation=\"border\" />\n                            </div>\n                        ) : (\n                            <MultiselectAutocomplete\n                                options={operationTypes}\n                                selected={filters.selectedOperationTypes}\n                                onChange={(selected) => handleFilterChange('selectedOperationTypes', selected)}\n                                placeholder=\"Maßnahmenarten auswählen...\"\n                            />\n                        )}\n                    </Card.Body>\n                </Card>\n\n                {/* Crops Filter */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                            <i className=\"bi bi-flower2 me-2\"></i>\n                            Kulturen\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        {loadingCrops ? (\n                            <div className=\"text-center py-1\">\n                                <Spinner size=\"sm\" animation=\"border\" />\n                            </div>\n                        ) : (\n                            <MultiselectAutocomplete\n                                options={crops}\n                                selected={filters.selectedCrops}\n                                onChange={(selected) => handleFilterChange('selectedCrops', selected)}\n                                placeholder=\"Kulturen auswählen...\"\n                            />\n                        )}\n                    </Card.Body>\n                </Card>\n\n                {/* Data Source Filter */}\n                <Card className=\"mb-2\">\n                    <Card.Header className=\"py-1\">\n                        <strong className=\"small\">\n                            <i className=\"bi bi-database me-2\"></i>\n                            Datenquelle\n                        </strong>\n                    </Card.Header>\n                    <Card.Body className=\"py-1\">\n                        <MultiselectAutocomplete\n                            options={dataSourceOptions}\n                            selected={filters.selectedDataSources}\n                            onChange={(selected) => handleFilterChange('selectedDataSources', selected)}\n                            placeholder=\"Datenquellen auswählen...\"\n                        />\n                    </Card.Body>\n                </Card>\n\n                {/* Action Buttons */}\n                <div className=\"d-grid gap-2 mt-auto pb-3\">\n                    <Button \n                        variant=\"primary\" \n                        onClick={applyFilters}\n                        disabled={getActiveFiltersCount() === 0}\n                    >\n                        <i className=\"bi bi-check-circle me-2\"></i>\n                        Filter anwenden ({getActiveFiltersCount()})\n                    </Button>\n\n                    {getActiveFiltersCount() > 0 && (\n                        <Button \n                            variant=\"outline-secondary\" \n                            onClick={clearAllFilters}\n                        >\n                            <i className=\"bi bi-x-circle me-2\"></i>\n                            Alle Filter löschen\n                        </Button>\n                    )}\n                </div>\n            </Offcanvas.Body>\n        </Offcanvas>\n    );\n};\n\nexport default FilterDrawer;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Card, Table, Badge, Spinner, Alert, Button, Collapse } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { selectUser } from '../../auth/authSlice';\nimport api from '../../utils/api';\n\n/**\n * FarmKPIDisplay - Shows KPIs for area per crop per farm year\n * Only visible to superusers.\n * \n * Props:\n * - filteredFarms: Array of filtered farm objects\n * - quickSelectedFarms: Array of farm IDs from quick selector\n */\nconst FarmKPIDisplay = ({ filteredFarms, quickSelectedFarms }) => {\n    const user = useSelector(selectUser);\n    const [kpiData, setKpiData] = useState(null);\n    const [loading, setLoading] = useState(false);\n    const [error, setError] = useState(null);\n    const [isExpanded, setIsExpanded] = useState(true);\n\n    // Only show KPIs to superusers\n    if (!user?.is_superuser) {\n        return null;\n    }\n\n    // Determine which farms to show KPIs for\n    const farmIdsToFetch = useMemo(() => {\n        if (quickSelectedFarms && quickSelectedFarms.length > 0) {\n            return quickSelectedFarms;\n        }\n        if (filteredFarms && filteredFarms.length > 0) {\n            return filteredFarms.map(f => f.id);\n        }\n        return [];\n    }, [filteredFarms, quickSelectedFarms]);\n\n    useEffect(() => {\n        const fetchKPIs = async () => {\n            if (farmIdsToFetch.length === 0) {\n                setKpiData(null);\n                return;\n            }\n\n            setLoading(true);\n            setError(null);\n\n            try {\n                const response = await api.get('/farm-kpis/area_per_crop/', {\n                    params: {\n                        farm_ids: farmIdsToFetch.join(',')\n                    }\n                });\n                setKpiData(response.data);\n            } catch (err) {\n                console.error('Error fetching KPIs:', err);\n                setError('Fehler beim Laden der KPIs');\n            } finally {\n                setLoading(false);\n            }\n        };\n\n        fetchKPIs();\n    }, [farmIdsToFetch]);\n\n    if (loading) {\n        return (\n            <Card className=\"mb-3\">\n                <Card.Body className=\"text-center py-4\">\n                    <Spinner animation=\"border\" size=\"sm\" className=\"me-2\" />\n                    <span className=\"text-muted\">Lade KPIs...</span>\n                </Card.Body>\n            </Card>\n        );\n    }\n\n    if (error) {\n        return (\n            <Alert variant=\"danger\" className=\"mb-3\">\n                {error}\n            </Alert>\n        );\n    }\n\n    if (!kpiData || !kpiData.kpis || kpiData.kpis.length === 0) {\n        return null;\n    }\n\n    // Get top 5 crops across all years\n    const cropTotals = {};\n    kpiData.kpis.forEach(fy => {\n        fy.crops.forEach(crop => {\n            if (crop.crop_id) {\n                if (!cropTotals[crop.crop_id]) {\n                    cropTotals[crop.crop_id] = {\n                        name: crop.crop_name,\n                        total: 0\n                    };\n                }\n                cropTotals[crop.crop_id].total += crop.area;\n            }\n        });\n    });\n\n    const topCrops = Object.values(cropTotals)\n        .sort((a, b) => b.total - a.total)\n        .slice(0, 5);\n\n    // Excel export function - calls backend endpoint\n    const handleExportToExcel = async () => {\n        try {\n            const params = new URLSearchParams();\n            if (farmIdsToFetch.length > 0) {\n                params.append('farm_ids', farmIdsToFetch.join(','));\n            }\n\n            // Make request to backend Excel export endpoint\n            const response = await api.get('/farm-kpis/export_excel/', {\n                params: params,\n                responseType: 'blob'\n            });\n\n            // Create download link\n            const url = window.URL.createObjectURL(new Blob([response.data]));\n            const link = document.createElement('a');\n            link.href = url;\n            \n            // Extract filename from Content-Disposition header or use default\n            const contentDisposition = response.headers['content-disposition'];\n            let filename = 'Flaeche_pro_Kultur.xlsx';\n            if (contentDisposition) {\n                const filenameMatch = contentDisposition.match(/filename=\"?(.+)\"?/);\n                if (filenameMatch) {\n                    filename = filenameMatch[1];\n                }\n            }\n            \n            link.setAttribute('download', filename);\n            document.body.appendChild(link);\n            link.click();\n            link.remove();\n            window.URL.revokeObjectURL(url);\n        } catch (err) {\n            console.error('Error exporting to Excel:', err);\n            alert('Fehler beim Exportieren der Daten');\n        }\n    };\n\n    return (\n        <Card className=\"mb-3\">\n            <Card.Header \n                className=\"bg-light\"\n                style={{ cursor: 'pointer' }}\n                onClick={() => setIsExpanded(!isExpanded)}\n            >\n                <div className=\"d-flex justify-content-between align-items-center\">\n                    <div className=\"d-flex align-items-center gap-2\">\n                        <i className={`bi bi-chevron-${isExpanded ? 'down' : 'right'}`}></i>\n                        <i className=\"bi bi-bar-chart-fill\"></i>\n                        <strong>Fläche pro Kultur</strong>\n                        <span className=\"text-muted small\">\n                            ({kpiData.farm_years_count} Jahr{kpiData.farm_years_count !== 1 ? 'e' : ''} • {' '}\n                            {kpiData.total_area_all.toFixed(2)} ha gesamt)\n                        </span>\n                    </div>\n                    <Button\n                        variant=\"outline-success\"\n                        size=\"sm\"\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            handleExportToExcel();\n                        }}\n                        title=\"Als Excel exportieren\"\n                    >\n                        <i className=\"bi bi-file-earmark-excel me-1\"></i>\n                        Excel Export\n                    </Button>\n                </div>\n            </Card.Header>\n            <Collapse in={isExpanded}>\n                <Card.Body className=\"p-0\">\n                {/* Summary Row */}\n                {topCrops.length > 0 && (\n                    <div className=\"p-3 border-bottom bg-light\">\n                        <div className=\"small text-muted mb-2\">Top 5 Kulturen (gesamt):</div>\n                        <div className=\"d-flex flex-wrap gap-2\">\n                            {topCrops.map((crop, idx) => (\n                                <Badge \n                                    key={idx} \n                                    bg=\"success\" \n                                    className=\"d-flex align-items-center\"\n                                >\n                                    {crop.name}: {crop.total.toFixed(2)} ha\n                                </Badge>\n                            ))}\n                        </div>\n                    </div>\n                )}\n\n                {/* KPI Table */}\n                <div className=\"table-responsive\">\n                    <Table className=\"mb-0\" size=\"sm\" hover>\n                        <thead className=\"table-light\">\n                            <tr>\n                                <th style={{ width: '80px' }}>Jahr</th>\n                                <th style={{ width: '200px' }}>Betrieb</th>\n                                <th style={{ width: '100px' }} className=\"text-end\">Fläche (ha)</th>\n                                <th>Kulturen</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            {kpiData.kpis.map((farmYear, idx) => (\n                                <tr key={idx}>\n                                    <td>\n                                        <Badge bg=\"secondary\">{farmYear.year}</Badge>\n                                    </td>\n                                    <td className=\"small\">{farmYear.farm_name}</td>\n                                    <td className=\"text-end\">\n                                        <strong>{farmYear.total_area.toFixed(2)}</strong>\n                                    </td>\n                                    <td>\n                                        <div className=\"d-flex flex-wrap gap-1\">\n                                            {farmYear.crops.slice(0, 3).map((crop, cropIdx) => {\n                                                const harvestInfo = crop.harvest_amount \n                                                    ? ` | ${crop.harvest_amount.toFixed(1)} ${crop.harvest_unit_code}` \n                                                    : '';\n                                                return (\n                                                    <Badge \n                                                        key={cropIdx} \n                                                        bg={crop.crop_id ? 'primary' : 'secondary'}\n                                                        className=\"small\"\n                                                        title={`${crop.crop_name}: ${crop.area.toFixed(2)} ha (${crop.percentage}%)${harvestInfo}`}\n                                                    >\n                                                        {crop.crop_name}: {crop.area.toFixed(1)} ha\n                                                        <span className=\"ms-1 opacity-75\">({crop.percentage}%)</span>\n                                                        {crop.harvest_amount && (\n                                                            <span className=\"ms-1 opacity-75\">\n                                                                | {crop.harvest_amount.toFixed(1)} {crop.harvest_unit_code}\n                                                            </span>\n                                                        )}\n                                                    </Badge>\n                                                );\n                                            })}\n                                            {farmYear.crops.length > 3 && (\n                                                <Badge \n                                                    bg=\"light\" \n                                                    text=\"dark\"\n                                                    className=\"small\"\n                                                    title={farmYear.crops.slice(3).map(c => {\n                                                        const harvestInfo = c.harvest_amount \n                                                            ? ` | ${c.harvest_amount.toFixed(1)} ${c.harvest_unit_code}` \n                                                            : '';\n                                                        return `${c.crop_name}: ${c.area.toFixed(2)} ha${harvestInfo}`;\n                                                    }).join('\\n')}\n                                                >\n                                                    +{farmYear.crops.length - 3} weitere\n                                                </Badge>\n                                            )}\n                                        </div>\n                                    </td>\n                                </tr>\n                            ))}\n                        </tbody>\n                    </Table>\n                </div>\n                </Card.Body>\n            </Collapse>\n        </Card>\n    );\n};\n\nexport default FarmKPIDisplay;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Container, Row, Col, Card, Alert, Spinner, Button, Badge, ButtonGroup, Dropdown, DropdownDivider, Pagination, Form } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport FarmsList from '../components/farms/FarmsList';\nimport FarmMapView from '../components/farms/FarmMapView';\nimport UnifiedMapView from '../components/farms/UnifiedMapView';\nimport XMLImportModal from '../components/farms/XMLImportModal';\nimport AgrarCommanderImportModal from '../components/farms/AgrarCommanderImportModal';\nimport DeleteConfirmModal from '../components/farms/DeleteConfirmModal';\nimport ManualFarmModal from '../components/farms/ManualFarmModal';\nimport QuickOperationModal from '../components/farms/QuickOperationModal';\nimport CrudModal from '../components/farms/modals/CrudModal';\nimport FilterDrawer from '../components/farms/FilterDrawer';\nimport FarmKPIDisplay from '../components/farms/FarmKPIDisplay';\nimport FarmIcon from '../../icons/landwirtschaft.svg';\nimport { fetchFarms, deleteAllFarms, deleteFarm, clearImportSuccess, setImportSuccess } from '../slices/farmSlice';\nimport api from '../utils/api';\n\nconst FarmManagement = () => {\n    const dispatch = useDispatch();\n    const { \n        farms, \n        loading, \n        error,\n        importSuccess\n    } = useSelector(state => state.farms);\n    const { user } = useSelector(state => state.auth);\n\n    const [showImportModal, setShowImportModal] = useState(false);\n    const [showAgrarCommanderImportModal, setShowAgrarCommanderImportModal] = useState(false);\n    const [showDeleteAllModal, setShowDeleteAllModal] = useState(false);\n    const [showDeleteFarmModal, setShowDeleteFarmModal] = useState(false);\n    const [farmToDelete, setFarmToDelete] = useState(null);\n    const [showManualFarmModal, setShowManualFarmModal] = useState(false);\n    const [editingFarm, setEditingFarm] = useState(null);\n    const [showQuickOperationModal, setShowQuickOperationModal] = useState(false);\n    const [preselectedSchlagData, setPreselectedSchlagData] = useState(null);\n    const [collapseAll, setCollapseAll] = useState(null);\n    const [toggleAllLevel, setToggleAllLevel] = useState(null);\n    const [viewMode, setViewMode] = useState('list'); // 'list' or 'map'\n    \n    // Callback to update expand state from child components\n    const handleLevelExpandStateChange = (level, isExpanded) => {\n        setLevelExpandState(prev => ({ ...prev, [level]: isExpanded }));\n    };\n    \n    // Level visibility state\n    const [visibleLevels, setVisibleLevels] = useState({\n        farm: true,\n        farm_year: true,\n        feldstueck: true,\n        schlag: true,\n        operation: true\n    });\n    \n    // Track which levels should be expanded when visibility is toggled\n    const [expandLevels, setExpandLevels] = useState(null);\n    \n    // Track expand/collapse state for each level\n    const [levelExpandState, setLevelExpandState] = useState({\n        farm_year: true,\n        feldstueck: true,\n        schlag: true,\n        operation: true\n    });\n    \n    // CRUD Modal state\n    const [showCrudModal, setShowCrudModal] = useState(false);\n    const [crudOperation, setCrudOperation] = useState(null);\n    const [crudTarget, setCrudTarget] = useState(null);\n    const [crudLoading, setCrudLoading] = useState(false);\n    const [crudError, setCrudError] = useState(null);\n    \n    // Filter state\n    const [showFilterDrawer, setShowFilterDrawer] = useState(false);\n    const [activeFilters, setActiveFilters] = useState({\n        textSearch: '',\n        selectedFarms: [],\n        selectedYears: [],\n        selectedFeldstuecke: [],\n        selectedSchlaege: [],\n        selectedOperationTypes: [],\n        selectedCrops: [],\n        selectedDataSources: []\n    });\n    \n    // Pagination state\n    const [currentPage, setCurrentPage] = useState(1);\n    const farmsPerPage = 5;\n    \n    // Quick farm selector state\n    const [quickSelectedFarms, setQuickSelectedFarms] = useState([]);\n\n    useEffect(() => {\n        // Fetch all farms on mount\n        dispatch(fetchFarms());\n    }, [dispatch]);\n\n    // Set up global handlers for map schlag actions\n    useEffect(() => {\n        window.handleSchlagEdit = (schlagId) => {\n            // Find the schlag in the farms data\n            let foundSchlag = null;\n            let foundFeldstueck = null;\n            let foundYear = null;\n            let foundFarm = null;\n            \n            for (const farm of farms) {\n                for (const year of farm.years || []) {\n                    for (const fs of year.feldstuecke || []) {\n                        for (const schlag of fs.schlaege || []) {\n                            if (schlag.id === schlagId) {\n                                foundSchlag = schlag;\n                                foundFeldstueck = fs;\n                                foundYear = year;\n                                foundFarm = farm;\n                                break;\n                            }\n                        }\n                        if (foundSchlag) break;\n                    }\n                    if (foundSchlag) break;\n                }\n                if (foundSchlag) break;\n            }\n\n            if (foundSchlag && foundFeldstueck && foundYear && foundFarm) {\n                // Open the CRUD modal for editing the schlag\n                setCrudOperation('edit');\n                setCrudTarget({ \n                    type: 'schlag', \n                    item: foundSchlag, \n                    parentData: foundFeldstueck \n                });\n                setShowCrudModal(true);\n            }\n        };\n\n        window.handleSchlagAddOperation = (schlagId) => {\n            // Find the schlag in the farms data to get context\n            let foundSchlag = null;\n            let foundFeldstueck = null;\n            let foundYear = null;\n            let foundFarm = null;\n            \n            for (const farm of farms) {\n                for (const year of farm.years || []) {\n                    for (const fs of year.feldstuecke || []) {\n                        for (const schlag of fs.schlaege || []) {\n                            if (schlag.id === schlagId) {\n                                foundSchlag = schlag;\n                                foundFeldstueck = fs;\n                                foundYear = year;\n                                foundFarm = farm;\n                                break;\n                            }\n                        }\n                        if (foundSchlag) break;\n                    }\n                    if (foundSchlag) break;\n                }\n                if (foundSchlag) break;\n            }\n\n            if (foundSchlag && foundFeldstueck && foundYear && foundFarm) {\n                // Open the quick operation modal with preselected data\n                setPreselectedSchlagData({\n                    farm: foundFarm,\n                    year: foundYear,\n                    feldstueck: foundFeldstueck,\n                    schlag: foundSchlag\n                });\n                setShowQuickOperationModal(true);\n            }\n        };\n\n        return () => {\n            delete window.handleSchlagEdit;\n            delete window.handleSchlagAddOperation;\n        };\n    }, [farms]);\n\n    const handleFarmUpdate = () => {\n        // Refresh farms to get updated data\n        dispatch(fetchFarms());\n    };\n\n    const handleFarmEdit = (farm) => {\n        setEditingFarm(farm);\n        setShowManualFarmModal(true);\n    };\n\n    const handleAddYear = (farm) => {\n        // Open the CRUD modal for creating a new year for this farm\n        setCrudOperation('create');\n        setCrudTarget({ \n            type: 'year', \n            item: null, \n            parentData: farm \n        });\n        setShowCrudModal(true);\n    };\n\n    const handleFarmDelete = (farm) => {\n        setFarmToDelete(farm);\n        setShowDeleteFarmModal(true);\n    };\n\n    const handleDeleteAllData = () => {\n        setShowDeleteAllModal(true);\n    };\n\n    const confirmDeleteFarm = async () => {\n        if (farmToDelete) {\n            await dispatch(deleteFarm(farmToDelete.id));\n            setShowDeleteFarmModal(false);\n            setFarmToDelete(null);\n        }\n    };\n\n    const confirmDeleteAll = async () => {\n        await dispatch(deleteAllFarms());\n        setShowDeleteAllModal(false);\n    };\n\n    // CRUD Modal handlers\n    const handleCrudSave = async (formData) => {\n        setCrudLoading(true);\n        setCrudError(null);\n        try {\n            let endpoint, data, method;\n            let itemText = 'Schlag';\n\n            switch (crudTarget.type) {\n                case 'year':\n                    itemText = 'Erntejahr';\n                    if (crudOperation === 'create') {\n                        endpoint = '/farm-years-manage/';\n                        data = { ...formData, farm_id: crudTarget.parentData.id };\n                        method = 'POST';\n                    } else if (crudOperation === 'edit') {\n                        endpoint = `/farm-years-manage/${crudTarget.item.id}/`;\n                        data = formData;\n                        method = 'PATCH';\n                    }\n                    break;\n                case 'schlag':\n                    itemText = 'Schlag';\n                    if (crudOperation === 'edit') {\n                        endpoint = `/schlaege-manage/${crudTarget.item.id}/`;\n                        // Ensure we include feldstueck_id for the update\n                        data = {\n                            ...formData,\n                            feldstueck_id: crudTarget.item.feldstueck?.id || crudTarget.parentData?.id\n                        };\n                        method = 'PUT';\n                    } else if (crudOperation === 'create') {\n                        endpoint = '/schlaege-manage/';\n                        data = formData;\n                        method = 'POST';\n                    }\n                    break;\n                default:\n                    throw new Error('Unsupported CRUD type');\n            }\n\n            await api({ method, url: endpoint, data });\n\n            const actionText = crudOperation === 'create' ? 'erstellt' : 'aktualisiert';\n            dispatch(setImportSuccess(`${itemText} erfolgreich ${actionText}!`));\n\n            // Refresh farms\n            await dispatch(fetchFarms());\n\n            // Close modal\n            setShowCrudModal(false);\n            setCrudOperation(null);\n            setCrudTarget(null);\n        } catch (error) {\n            console.error('Error in CRUD operation:', error);\n            let errorMessage = 'Fehler beim Speichern';\n            if (error.response?.data) {\n                const errorData = error.response.data;\n                if (typeof errorData === 'object') {\n                    const fieldErrors = [];\n                    for (const [field, messages] of Object.entries(errorData)) {\n                        if (Array.isArray(messages)) {\n                            fieldErrors.push(`${field}: ${messages.join(', ')}`);\n                        } else if (typeof messages === 'string') {\n                            fieldErrors.push(`${field}: ${messages}`);\n                        }\n                    }\n                    if (fieldErrors.length > 0) {\n                        errorMessage = fieldErrors.join('; ');\n                    }\n                } else if (typeof errorData === 'string') {\n                    errorMessage = errorData;\n                }\n            }\n            setCrudError(errorMessage);\n        } finally {\n            setCrudLoading(false);\n        }\n    };\n\n    // Clear success message after showing\n    useEffect(() => {\n        if (importSuccess) {\n            setTimeout(() => {\n                dispatch(clearImportSuccess());\n            }, 3000);\n        }\n    }, [importSuccess, dispatch]);\n\n    // Check if any farms have geometric data\n    const hasGeometricData = useMemo(() => {\n        // Check if farms have any years with geometry indicators\n        return farms.some(farm => {\n            // Check if farm has years with feldstuecke that have schlaege with geometry\n            if (farm.years && farm.years.length > 0) {\n                return farm.years.some(year => {\n                    if (year.feldstuecke && year.feldstuecke.length > 0) {\n                        return year.feldstuecke.some(fs => {\n                            if (fs.schlaege && fs.schlaege.length > 0) {\n                                return fs.schlaege.some(schlag => {\n                                    return schlag.has_geometry === true;\n                                });\n                            }\n                            return false;\n                        });\n                    }\n                    return false;\n                });\n            }\n            return false;\n        });\n    }, [farms]);\n\n    // Apply quick farm selector filter\n    const farmsAfterQuickSelect = useMemo(() => {\n        if (quickSelectedFarms.length === 0) return farms;\n        return farms.filter(farm => quickSelectedFarms.includes(farm.id));\n    }, [farms, quickSelectedFarms]);\n    \n    // Reset page when quick selector changes\n    useEffect(() => {\n        setCurrentPage(1);\n    }, [quickSelectedFarms]);\n\n    // Filter Logic\n    const { filteredFarms, expandedIds, visibleIds } = useMemo(() => {\n        const { textSearch, selectedFarms, selectedYears, selectedFeldstuecke, selectedSchlaege, selectedOperationTypes, selectedCrops, selectedDataSources } = activeFilters;\n        \n        const hasFilters = textSearch || selectedFarms.length > 0 || selectedYears.length > 0 || \n                          selectedFeldstuecke.length > 0 || selectedSchlaege.length > 0 || \n                          selectedOperationTypes.length > 0 || selectedCrops.length > 0 ||\n                          selectedDataSources.length > 0;\n\n        if (!hasFilters) return { filteredFarms: farmsAfterQuickSelect, expandedIds: null, visibleIds: null };\n\n        const expanded = {\n            farms: new Set(),\n            years: new Set(),\n            feldstuecke: new Set(),\n            schlaege: new Set()\n        };\n\n        const visible = {\n            years: new Set(),\n            feldstuecke: new Set(),\n            schlaege: new Set()\n        };\n\n        const filtered = farmsAfterQuickSelect.reduce((acc, farm) => {\n            // 1. Farm Level Filter\n            if (selectedFarms.length > 0 && !selectedFarms.some(f => f.id === farm.id)) {\n                return acc;\n            }\n\n            let farmMatchesText = false;\n            if (textSearch) {\n                const searchLower = textSearch.toLowerCase();\n                if (farm.name?.toLowerCase().includes(searchLower) || \n                    farm.hauptbetriebsnummer?.toString().includes(searchLower)) {\n                    farmMatchesText = true;\n                }\n            }\n\n            // 2. Process Years\n            let yearsToKeep = [];\n            if (farm.years) {\n                yearsToKeep = farm.years.reduce((yAcc, year) => {\n                    // Year Level Filter\n                    if (selectedYears.length > 0 && !selectedYears.some(y => y.id === year.year)) {\n                        return yAcc;\n                    }\n\n                    // Process Feldstuecke\n                    let feldstueckeToKeep = [];\n                    if (year.feldstuecke) {\n                        feldstueckeToKeep = year.feldstuecke.reduce((fsAcc, fs) => {\n                            // Feldstueck Level Filter\n                            if (selectedFeldstuecke.length > 0 && !selectedFeldstuecke.some(f => f.id === fs.id)) {\n                                return fsAcc;\n                            }\n\n                            let fsMatchesText = false;\n                            if (textSearch) {\n                                const searchLower = textSearch.toLowerCase();\n                                if (fs.bezeichnung?.toLowerCase().includes(searchLower) || \n                                    fs.nummer?.toString().includes(searchLower)) {\n                                    fsMatchesText = true;\n                                }\n                            }\n\n                            // Process Schlaege\n                            let schlaegeToKeep = [];\n                            if (fs.schlaege) {\n                                schlaegeToKeep = fs.schlaege.reduce((schlagAcc, schlag) => {\n                                    if (selectedSchlaege.length > 0 && !selectedSchlaege.some(s => s.id === schlag.id)) {\n                                        return schlagAcc;\n                                    }\n                                    \n                                    // Data source filter\n                                    if (selectedDataSources.length > 0 && !selectedDataSources.some(ds => ds.id === schlag.data_source)) {\n                                        return schlagAcc;\n                                    }\n                                    \n                                    let schlagMatchesText = false;\n                                    if (textSearch) {\n                                        const searchLower = textSearch.toLowerCase();\n                                        if (schlag.nummer?.toString().includes(searchLower) ||\n                                            schlag.schlag_nutzungsart?.name?.toLowerCase().includes(searchLower) ||\n                                            schlag.nutzungsart?.name?.toLowerCase().includes(searchLower)) {\n                                            schlagMatchesText = true;\n                                        }\n                                    }\n                                    \n                                    // Combined operation type and crop filter logic\n                                    const operations = schlag.operations || [];\n                                    const hasOperationTypeFilter = selectedOperationTypes.length > 0;\n                                    const hasCropFilter = selectedCrops.length > 0;\n                                    \n                                    let filteredOperations = operations;\n                                    let keepSchlag = false;\n                                    \n                                    if (hasOperationTypeFilter || hasCropFilter) {\n                                        // Check if schlag has the crop assigned directly\n                                        const schlagCropMatch = hasCropFilter && selectedCrops.some(crop => \n                                            schlag.crop?.name === crop.label\n                                        );\n                                        \n                                        // CASE 1: Only crop filter (no operation type filter)\n                                        if (hasCropFilter && !hasOperationTypeFilter) {\n                                            if (schlagCropMatch) {\n                                                // Schlag crop matches: show ALL operations\n                                                keepSchlag = true;\n                                                filteredOperations = operations;\n                                            } else {\n                                                // Schlag crop doesn't match: show only operations with matching crop\n                                                filteredOperations = operations.filter(op => {\n                                                    return selectedCrops.some(crop => {\n                                                        if (op.seeding_data?.crop?.name === crop.label) return true;\n                                                        if (op.harvest_data?.crop?.name === crop.label) return true;\n                                                        return false;\n                                                    });\n                                                });\n                                                keepSchlag = filteredOperations.length > 0;\n                                            }\n                                        }\n                                        // CASE 2: Both crop and operation type filters\n                                        else if (hasCropFilter && hasOperationTypeFilter) {\n                                            if (schlagCropMatch) {\n                                                // Schlag crop matches: show operations that match operation type\n                                                filteredOperations = operations.filter(op => {\n                                                    return selectedOperationTypes.some(opType => \n                                                        op.operation_type?.name === opType.label\n                                                    );\n                                                });\n                                                keepSchlag = filteredOperations.length > 0;\n                                            } else {\n                                                // Schlag crop doesn't match: show operations that match BOTH filters\n                                                filteredOperations = operations.filter(op => {\n                                                    const opTypeMatches = selectedOperationTypes.some(opType => \n                                                        op.operation_type?.name === opType.label\n                                                    );\n                                                    \n                                                    const opCropMatches = selectedCrops.some(crop => {\n                                                        if (op.seeding_data?.crop?.name === crop.label) return true;\n                                                        if (op.harvest_data?.crop?.name === crop.label) return true;\n                                                        return false;\n                                                    });\n                                                    \n                                                    return opTypeMatches && opCropMatches;\n                                                });\n                                                keepSchlag = filteredOperations.length > 0;\n                                            }\n                                        }\n                                        // CASE 3: Only operation type filter (no crop filter)\n                                        else if (hasOperationTypeFilter && !hasCropFilter) {\n                                            filteredOperations = operations.filter(op => {\n                                                return selectedOperationTypes.some(opType => \n                                                    op.operation_type?.name === opType.label\n                                                );\n                                            });\n                                            keepSchlag = filteredOperations.length > 0;\n                                        }\n                                    } else {\n                                        // No operation/crop filters active\n                                        keepSchlag = true;\n                                    }\n                                    \n                                    if (schlagMatchesText) {\n                                        // If schlag matches text, we keep it\n                                        keepSchlag = true;\n                                        // But still filter operations if filters are active\n                                        if (!hasOperationTypeFilter && !hasCropFilter) {\n                                            filteredOperations = operations;\n                                        }\n                                    }\n                                    \n                                    // If text search is active and didn't match schlag\n                                    if (textSearch && !schlagMatchesText) {\n                                        // If parent (FS or Farm) matched text, keep all children\n                                        if (farmMatchesText || fsMatchesText) {\n                                            keepSchlag = true;\n                                            if (!hasOperationTypeFilter && !hasCropFilter) {\n                                                filteredOperations = operations;\n                                            }\n                                        } else {\n                                            keepSchlag = false;\n                                        }\n                                    }\n\n                                    if (keepSchlag) {\n                                        schlagAcc.push({\n                                            ...schlag,\n                                            operations: filteredOperations\n                                        });\n                                    }\n                                    \n                                    return schlagAcc;\n                                }, []);\n                            }\n\n                            const hasMatchingSchlaege = schlaegeToKeep.length > 0;\n                            \n                            let keepFs = false;\n                            if (selectedFeldstuecke.length > 0 && selectedFeldstuecke.some(f => f.id === fs.id)) keepFs = true;\n                            if (fsMatchesText) keepFs = true;\n                            \n                            // If we have schlag filters, we only keep FS if it has matching schlaege\n                            if (selectedSchlaege.length > 0) {\n                                if (hasMatchingSchlaege) keepFs = true;\n                                else keepFs = false;\n                            } else if (hasMatchingSchlaege) {\n                                keepFs = true;\n                            }\n                            \n                            // If only text search and it matched FS, keep it\n                            if (textSearch) {\n                                if (fsMatchesText) keepFs = true;\n                                else if (farmMatchesText) keepFs = true; // Keep if farm matches\n                                else if (!hasMatchingSchlaege) keepFs = false; // If nothing matched\n                            }\n\n                            if (keepFs) {\n                                if (hasMatchingSchlaege || fsMatchesText) {\n                                     expanded.years.add(year.id);\n                                     expanded.farms.add(farm.id);\n                                     if (hasMatchingSchlaege) {\n                                         expanded.feldstuecke.add(fs.id);\n                                     }\n                                }\n                                \n                                visible.feldstuecke.add(fs.id);\n                                schlaegeToKeep.forEach(s => visible.schlaege.add(s.id));\n\n                                fsAcc.push({\n                                    ...fs,\n                                    schlaege: schlaegeToKeep\n                                });\n                            }\n                            \n                            return fsAcc;\n                        }, []);\n                    }\n                    \n                    const hasMatchingFeldstuecke = feldstueckeToKeep.length > 0;\n                    let keepYear = false;\n                    if (selectedYears.length > 0 && selectedYears.some(y => y.id === year.year)) keepYear = true;\n                    if (hasMatchingFeldstuecke) keepYear = true;\n                    \n                    if (textSearch && farmMatchesText) keepYear = true;\n\n                    if (keepYear) {\n                        visible.years.add(year.id);\n                        yAcc.push({\n                            ...year,\n                            feldstuecke: feldstueckeToKeep\n                        });\n                    }\n                    \n                    return yAcc;\n                }, []);\n            }\n\n            const hasMatchingYears = yearsToKeep.length > 0;\n            let keepFarm = false;\n            if (selectedFarms.length > 0 && selectedFarms.some(f => f.id === farm.id)) keepFarm = true;\n            if (farmMatchesText) keepFarm = true;\n            if (hasMatchingYears) keepFarm = true;\n\n            if (keepFarm) {\n                if (hasMatchingYears) expanded.farms.add(farm.id);\n                \n                acc.push({\n                    ...farm,\n                    years: yearsToKeep\n                });\n            }\n\n            return acc;\n        }, []);\n\n        return { filteredFarms: filtered, expandedIds: expanded, visibleIds: visible };\n    }, [farms, activeFilters]);\n    \n    // Pagination logic\n    const totalPages = Math.ceil(filteredFarms.length / farmsPerPage);\n    const indexOfLastFarm = currentPage * farmsPerPage;\n    const indexOfFirstFarm = indexOfLastFarm - farmsPerPage;\n    const currentFarms = filteredFarms.slice(indexOfFirstFarm, indexOfLastFarm);\n    \n    // Reset to page 1 when filters change\n    useEffect(() => {\n        setCurrentPage(1);\n    }, [activeFilters]);\n    \n    const handlePageChange = (pageNumber) => {\n        setCurrentPage(pageNumber);\n        window.scrollTo({ top: 0, behavior: 'smooth' });\n    };\n\n    const getActiveFiltersCount = () => {\n        let count = 0;\n        if (activeFilters.textSearch) count++;\n        count += activeFilters.selectedFarms.length;\n        count += activeFilters.selectedYears.length;\n        count += activeFilters.selectedFeldstuecke.length;\n        count += activeFilters.selectedSchlaege.length;\n        count += activeFilters.selectedOperationTypes.length;\n        count += activeFilters.selectedCrops.length;\n        count += activeFilters.selectedDataSources.length;\n        return count;\n    };\n\n    const removeFilter = (type, item) => {\n        setActiveFilters(prev => {\n            const newFilters = { ...prev };\n            if (type === 'textSearch') {\n                newFilters.textSearch = '';\n            } else {\n                newFilters[type] = prev[type].filter(i => i.id !== item.id);\n            }\n            return newFilters;\n        });\n    };\n\n    if (loading && farms.length === 0) {\n        return null;\n    }\n\n    return (\n        <Container fluid>\n            <Row className=\"mb-4\">\n                <Col>\n                    <div className=\"d-flex flex-wrap justify-content-between align-items-center\">\n                        <div className=\"d-flex w-100 justify-content-between align-items-center\">\n                            <div className=\"me-2 mb-2\">\n                                <h1 className=\"h3 mb-0\">Betriebsverwaltung</h1>\n                            </div>\n                            <div>\n                                <Button\n                                    variant=\"outline-primary\"\n                                    size=\"sm\"\n                                    onClick={() => setShowFilterDrawer(true)}\n                                    title=\"Filter\"\n                                >\n                                    <i className=\"bi bi-funnel me-1\"></i>\n                                    Filter\n                                    {getActiveFiltersCount() > 0 && (\n                                        <Badge bg=\"secondary\" className=\"ms-1\">\n                                            {getActiveFiltersCount()}\n                                        </Badge>\n                                    )}\n                                </Button>\n                            </div>\n                        </div>\n                        {farms.length > 0 ? (\n                            <div className=\"d-flex flex-wrap gap-2\">\n                                <Button\n                                    variant=\"success\"\n                                    size=\"sm\"\n                                    onClick={() => setShowManualFarmModal(true)}\n                                    title=\"Betrieb erstellen\"\n                                >\n                                    <i className=\"bi bi-plus-square me-1\"></i>\n                                    Betrieb erstellen\n                                </Button>\n                                <Button\n                                    variant=\"primary\"\n                                    size=\"sm\"\n                                    onClick={() => setShowImportModal(true)}\n                                    title=\"XML-Import\"\n                                >\n                                    <i className=\"bi bi-upload me-1\"></i>\n                                    XML-Import\n                                </Button>\n                                <Button\n                                    variant=\"warning\"\n                                    size=\"sm\"\n                                    onClick={() => setShowQuickOperationModal(true)}\n                                    title=\"Maßnahme erfassen\"\n                                    disabled={!farms || farms.length === 0}\n                                >\n                                    <i className=\"bi bi-lightning me-1\"></i>\n                                    Maßnahme erfassen\n                                </Button>\n                                {user?.is_superuser && (\n                                    <Button\n                                        variant=\"outline-info\"\n                                        size=\"sm\"\n                                        className=\"py-2 px-2\"\n                                        onClick={() => setShowAgrarCommanderImportModal(true)}\n                                        title=\"AgrarCommander Import (nur für Superuser)\"\n                                    >\n                                        <i className=\"bi bi-database me-1\"></i>\n                                        AC-Import\n                                    </Button>\n                                )}\n                                <Button\n                                    variant=\"danger\"\n                                    size=\"sm\"\n                                    onClick={handleDeleteAllData}\n                                    title=\"Alle Betriebe löschen\"\n                                >\n                                    <i className=\"bi bi-trash me-1\"></i>\n                                    Alle löschen\n                                </Button>\n                            </div>\n                        ) : \"\"}\n                    </div>\n                </Col>\n            </Row>\n\n            {error && (\n                <Row className=\"mb-4\">\n                    <Col>\n                        <Alert variant=\"danger\">{error}</Alert>\n                    </Col>\n                </Row>\n            )}\n\n            <Row>\n                {farms.length > 0 ? (\n                    <Col>\n                        {/* KPI Display - Area per Crop */}\n                        <FarmKPIDisplay \n                            filteredFarms={filteredFarms}\n                            quickSelectedFarms={quickSelectedFarms}\n                        />\n                        \n                        <Card className=\"mb-4\">\n                            <Card.Header>\n                                <div className=\"d-flex justify-content-between align-items-center flex-wrap gap-2\">\n                                    <div className=\"d-flex align-items-center gap-2 flex-wrap\">\n                                        <Card.Title className=\"h6 mb-0\">\n                                            Meine Betriebe\n                                            {getActiveFiltersCount() > 0 && (\n                                                <span className=\"text-muted small ms-2 fw-normal\">\n                                                    (Gefiltert: {filteredFarms.length} von {farms.length})\n                                                </span>\n                                            )}\n                                        </Card.Title>\n                                        \n                                        {/* Quick Farm Selector Dropdown */}\n                                        {farms.length > 1 && (\n                                            <Dropdown>\n                                                <Dropdown.Toggle variant=\"outline-secondary\" size=\"sm\" id=\"farm-selector-dropdown\">\n                                                    <i className=\"bi bi-building me-1\"></i>\n                                                    {quickSelectedFarms.length === 0 ? 'Alle Betriebe' : \n                                                     quickSelectedFarms.length === 1 ? '1 Betrieb' : \n                                                     `${quickSelectedFarms.length} Betriebe`}\n                                                </Dropdown.Toggle>\n                                                <Dropdown.Menu style={{ maxHeight: '300px', overflowY: 'auto' }}>\n                                                    <Dropdown.Item\n                                                        onClick={() => setQuickSelectedFarms([])}\n                                                        active={quickSelectedFarms.length === 0}\n                                                    >\n                                                        <i className=\"bi bi-check-all me-2\"></i>\n                                                        Alle Betriebe anzeigen\n                                                    </Dropdown.Item>\n                                                    <Dropdown.Divider />\n                                                    {farms.map(farm => (\n                                                        <Dropdown.Item\n                                                            key={farm.id}\n                                                            onClick={() => {\n                                                                setQuickSelectedFarms(prev => {\n                                                                    if (prev.includes(farm.id)) {\n                                                                        return prev.filter(id => id !== farm.id);\n                                                                    } else {\n                                                                        return [...prev, farm.id];\n                                                                    }\n                                                                });\n                                                            }}\n                                                        >\n                                                            <Form.Check\n                                                                type=\"checkbox\"\n                                                                label={farm.name || farm.hauptbetriebsnummer}\n                                                                checked={quickSelectedFarms.includes(farm.id)}\n                                                                onChange={() => {}}\n                                                                onClick={(e) => e.stopPropagation()}\n                                                            />\n                                                        </Dropdown.Item>\n                                                    ))}\n                                                </Dropdown.Menu>\n                                            </Dropdown>\n                                        )}\n                                        \n                                        {/* Filter Chips */}\n                                        {activeFilters.textSearch && (\n                                            <Badge bg=\"info\" className=\"d-flex align-items-center gap-1\">\n                                                Text: {activeFilters.textSearch}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('textSearch')}></i>\n                                            </Badge>\n                                        )}\n                                        {activeFilters.selectedFarms.map(item => (\n                                            <Badge key={`farm-${item.id}`} bg=\"primary\" className=\"d-flex align-items-center gap-1\">\n                                                {item.label}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('selectedFarms', item)}></i>\n                                            </Badge>\n                                        ))}\n                                        {activeFilters.selectedYears.map(item => (\n                                            <Badge key={`year-${item.id}`} bg=\"secondary\" className=\"d-flex align-items-center gap-1\">\n                                                Jahr: {item.label}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('selectedYears', item)}></i>\n                                            </Badge>\n                                        ))}\n                                        {activeFilters.selectedFeldstuecke.map(item => (\n                                            <Badge key={`fs-${item.id}`} bg=\"success\" className=\"d-flex align-items-center gap-1\">\n                                                FS: {item.label}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('selectedFeldstuecke', item)}></i>\n                                            </Badge>\n                                        ))}\n                                        {activeFilters.selectedSchlaege.map(item => (\n                                            <Badge key={`schlag-${item.id}`} bg=\"warning\" text=\"dark\" className=\"d-flex align-items-center gap-1\">\n                                                {item.label}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('selectedSchlaege', item)}></i>\n                                            </Badge>\n                                        ))}\n                                        {activeFilters.selectedOperationTypes.map(item => (\n                                            <Badge key={`op-${item.id}`} bg=\"dark\" className=\"d-flex align-items-center gap-1\">\n                                                {item.label}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('selectedOperationTypes', item)}></i>\n                                            </Badge>\n                                        ))}\n                                        {activeFilters.selectedCrops.map(item => (\n                                            <Badge key={`crop-${item.id}`} bg=\"success\" className=\"d-flex align-items-center gap-1\">\n                                                <i className=\"bi bi-flower2 me-1\"></i>\n                                                {item.label}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('selectedCrops', item)}></i>\n                                            </Badge>\n                                        ))}\n                                        {activeFilters.selectedDataSources.map(item => (\n                                            <Badge key={`datasource-${item.id}`} bg=\"info\" className=\"d-flex align-items-center gap-1\">\n                                                <i className=\"bi bi-database me-1\"></i>\n                                                {item.label}\n                                                <i className=\"bi bi-x\" style={{cursor: 'pointer'}} onClick={() => removeFilter('selectedDataSources', item)}></i>\n                                            </Badge>\n                                        ))}\n                                        {getActiveFiltersCount() > 0 && (\n                                            <Button \n                                                variant=\"link\" \n                                                size=\"sm\" \n                                                className=\"p-0 text-decoration-none text-muted\"\n                                                onClick={() => setActiveFilters({\n                                                    textSearch: '',\n                                                    selectedFarms: [],\n                                                    selectedYears: [],\n                                                    selectedFeldstuecke: [],\n                                                    selectedSchlaege: [],\n                                                    selectedOperationTypes: [],\n                                                    selectedCrops: [],\n                                                    selectedDataSources: []\n                                                })}\n                                            >\n                                                Alle löschen\n                                            </Button>\n                                        )}\n                                    </div>\n\n                                    <div className=\"d-flex justify-content-between align-items-center flex-wrap gap-2\">\n                                        {viewMode === 'list' && (\n                                            <div className=\"d-flex gap-2\">\n                                                {/* Farm Year Level - Dropdown Menu */}\n                                                <Dropdown>\n                                                    <Dropdown.Toggle \n                                                        variant={visibleLevels.farm_year ? 'primary' : 'outline-secondary'} \n                                                        size=\"sm\"\n                                                        id=\"farm-year-dropdown\"\n                                                        className=\"dropdown-toggle-no-caret\"\n                                                    >\n                                                        <i className=\"bi bi-calendar3\"></i>\n                                                    </Dropdown.Toggle>\n                                                    <Dropdown.Menu>\n                                                        <Dropdown.Item\n                                                            onClick={() => {\n                                                                const newValue = !visibleLevels.farm_year;\n                                                                setVisibleLevels(prev => ({ ...prev, farm_year: newValue }));\n                                                                if (newValue) {\n                                                                    setExpandLevels({ farm: true, farm_year: true });\n                                                                    setLevelExpandState(prev => ({ ...prev, farm_year: true }));\n                                                                }\n                                                            }}\n                                                        >\n                                                            <i className={`bi bi-${visibleLevels.farm_year ? 'eye-slash' : 'eye'} me-2`}></i>\n                                                            {visibleLevels.farm_year ? 'Ausblenden' : 'Anzeigen'}\n                                                        </Dropdown.Item>\n                                                        <Dropdown.Divider />\n                                                        <Dropdown.Item\n                                                            onClick={() => {\n                                                                const newState = !levelExpandState.farm_year;\n                                                                setLevelExpandState(prev => ({ ...prev, farm_year: newState }));\n                                                                setToggleAllLevel({ level: 'farm_year', expand: newState });\n                                                            }}\n                                                        >\n                                                            <i className={`bi bi-arrows-${levelExpandState.farm_year ? 'collapse' : 'expand'} me-2`}></i>\n                                                            {levelExpandState.farm_year ? 'Alle einklappen' : 'Alle ausklappen'}\n                                                        </Dropdown.Item>\n                                                    </Dropdown.Menu>\n                                                </Dropdown>\n\n                                                {/* Feldstueck Level - Dropdown Menu */}\n                                                <Dropdown>\n                                                    <Dropdown.Toggle \n                                                        variant={visibleLevels.feldstueck ? 'primary' : 'outline-secondary'} \n                                                        size=\"sm\"\n                                                        id=\"feldstueck-dropdown\"\n                                                        className=\"dropdown-toggle-no-caret\"\n                                                    >\n                                                        <i className=\"bi bi-pin-map\"></i>\n                                                    </Dropdown.Toggle>\n                                                    <Dropdown.Menu>\n                                                        <Dropdown.Item\n                                                            onClick={() => {\n                                                                const newValue = !visibleLevels.feldstueck;\n                                                                setVisibleLevels(prev => ({ ...prev, feldstueck: newValue }));\n                                                                if (newValue) {\n                                                                    setExpandLevels({ farm: true, farm_year: true, feldstueck: true });\n                                                                    setLevelExpandState(prev => ({ ...prev, feldstueck: true }));\n                                                                }\n                                                            }}\n                                                        >\n                                                            <i className={`bi bi-${visibleLevels.feldstueck ? 'eye-slash' : 'eye'} me-2`}></i>\n                                                            {visibleLevels.feldstueck ? 'Ausblenden' : 'Anzeigen'}\n                                                        </Dropdown.Item>\n                                                        <Dropdown.Divider />\n                                                        <Dropdown.Item\n                                                            onClick={() => {\n                                                                const newState = !levelExpandState.feldstueck;\n                                                                setLevelExpandState(prev => ({ ...prev, feldstueck: newState }));\n                                                                setToggleAllLevel({ level: 'feldstueck', expand: newState });\n                                                            }}\n                                                        >\n                                                            <i className={`bi bi-arrows-${levelExpandState.feldstueck ? 'collapse' : 'expand'} me-2`}></i>\n                                                            {levelExpandState.feldstueck ? 'Alle einklappen' : 'Alle ausklappen'}\n                                                        </Dropdown.Item>\n                                                    </Dropdown.Menu>\n                                                </Dropdown>\n\n                                                {/* Schlag Level - Dropdown Menu */}\n                                                <Dropdown>\n                                                    <Dropdown.Toggle \n                                                        variant={visibleLevels.schlag ? 'primary' : 'outline-secondary'} \n                                                        size=\"sm\"\n                                                        id=\"schlag-dropdown\"\n                                                        className=\"dropdown-toggle-no-caret\"\n                                                    >\n                                                        <i className=\"bi bi-grid-3x3\"></i>\n                                                    </Dropdown.Toggle>\n                                                    <Dropdown.Menu>\n                                                        <Dropdown.Item\n                                                            onClick={() => {\n                                                                const newValue = !visibleLevels.schlag;\n                                                                setVisibleLevels(prev => ({ ...prev, schlag: newValue }));\n                                                                if (newValue) {\n                                                                    setExpandLevels({ farm: true, farm_year: true, feldstueck: true, schlag: true });\n                                                                    setLevelExpandState(prev => ({ ...prev, schlag: true }));\n                                                                }\n                                                            }}\n                                                        >\n                                                            <i className={`bi bi-${visibleLevels.schlag ? 'eye-slash' : 'eye'} me-2`}></i>\n                                                            {visibleLevels.schlag ? 'Ausblenden' : 'Anzeigen'}\n                                                        </Dropdown.Item>\n                                                        <Dropdown.Divider />\n                                                        <Dropdown.Item\n                                                            onClick={() => {\n                                                                const newState = !levelExpandState.schlag;\n                                                                setLevelExpandState(prev => ({ ...prev, schlag: newState }));\n                                                                setToggleAllLevel({ level: 'schlag', expand: newState });\n                                                            }}\n                                                        >\n                                                            <i className={`bi bi-arrows-${levelExpandState.schlag ? 'collapse' : 'expand'} me-2`}></i>\n                                                            {levelExpandState.schlag ? 'Alle einklappen' : 'Alle ausklappen'}\n                                                        </Dropdown.Item>\n                                                    </Dropdown.Menu>\n                                                </Dropdown>\n\n                                                {/* Operation Level - Dropdown Menu (only show/hide, no expand/collapse) */}\n                                                <Dropdown>\n                                                    <Dropdown.Toggle \n                                                        variant={visibleLevels.operation ? 'primary' : 'outline-secondary'} \n                                                        size=\"sm\"\n                                                        id=\"operation-dropdown\"\n                                                        className=\"dropdown-toggle-no-caret\"\n                                                    >\n                                                        <i className=\"bi bi-lightning\"></i>\n                                                    </Dropdown.Toggle>\n                                                    <Dropdown.Menu>\n                                                        <Dropdown.Item\n                                                            onClick={() => {\n                                                                const newValue = !visibleLevels.operation;\n                                                                setVisibleLevels(prev => ({ ...prev, operation: newValue }));\n                                                                if (newValue) {\n                                                                    setExpandLevels({ farm: true, farm_year: true, feldstueck: true, schlag: true });\n                                                                }\n                                                            }}\n                                                        >\n                                                            <i className={`bi bi-${visibleLevels.operation ? 'eye-slash' : 'eye'} me-2`}></i>\n                                                            {visibleLevels.operation ? 'Ausblenden' : 'Anzeigen'}\n                                                        </Dropdown.Item>\n                                                    </Dropdown.Menu>\n                                                </Dropdown>\n                                            </div>\n                                        )}\n                                        {hasGeometricData && (\n                                            <ButtonGroup size=\"sm\">\n                                                <Button\n                                                    variant={viewMode === 'list' ? 'primary' : 'outline-primary'}\n                                                    onClick={() => setViewMode('list')}\n                                                    title=\"Listenansicht\"\n                                                >\n                                                    <i className=\"bi bi-list-ul\"></i>\n                                                </Button>\n                                                <Button\n                                                    variant={viewMode === 'map' ? 'primary' : 'outline-primary'}\n                                                    onClick={() => setViewMode('map')}\n                                                    title=\"Kartenansicht\"\n                                                >\n                                                    <i className=\"bi bi-map\"></i>\n                                                </Button>\n                                            </ButtonGroup>\n                                        )}\n                                    </div>\n                                </div>\n                            </Card.Header>\n                            <Card.Body>\n                                {viewMode === 'list' ? (\n                                    <>\n                                        <FarmsList \n                                            farms={currentFarms}\n                                            onFarmDelete={handleFarmDelete}\n                                            onFarmUpdate={handleFarmUpdate}\n                                            onFarmEdit={handleFarmEdit}\n                                            onAddYear={handleAddYear}\n                                            collapseAll={collapseAll}\n                                            onCollapseAllComplete={() => setCollapseAll(null)}\n                                            toggleAllLevel={toggleAllLevel}\n                                            onToggleAllLevelComplete={() => setToggleAllLevel(null)}\n                                            onLevelExpandStateChange={handleLevelExpandStateChange}\n                                            expandedIds={expandedIds}\n                                            visibleIds={visibleIds}\n                                            searchTerm={activeFilters.textSearch}\n                                            visibleLevels={visibleLevels}\n                                            expandLevels={expandLevels}\n                                            onExpandLevelsComplete={() => setExpandLevels(null)}\n                                        />\n                                        \n                                        {/* Pagination Controls */}\n                                        {totalPages > 1 && (\n                                            <div className=\"d-flex justify-content-between align-items-center mt-3\">\n                                                <div className=\"text-muted small\">\n                                                    Zeige {indexOfFirstFarm + 1}-{Math.min(indexOfLastFarm, filteredFarms.length)} von {filteredFarms.length} Betrieben\n                                                </div>\n                                                <Pagination size=\"sm\" className=\"mb-0\">\n                                                    <Pagination.First \n                                                        onClick={() => handlePageChange(1)}\n                                                        disabled={currentPage === 1}\n                                                    />\n                                                    <Pagination.Prev \n                                                        onClick={() => handlePageChange(currentPage - 1)}\n                                                        disabled={currentPage === 1}\n                                                    />\n                                                    \n                                                    {[...Array(totalPages)].map((_, index) => {\n                                                        const pageNumber = index + 1;\n                                                        // Show first page, last page, current page, and pages around current\n                                                        if (\n                                                            pageNumber === 1 ||\n                                                            pageNumber === totalPages ||\n                                                            (pageNumber >= currentPage - 1 && pageNumber <= currentPage + 1)\n                                                        ) {\n                                                            return (\n                                                                <Pagination.Item\n                                                                    key={pageNumber}\n                                                                    active={pageNumber === currentPage}\n                                                                    onClick={() => handlePageChange(pageNumber)}\n                                                                >\n                                                                    {pageNumber}\n                                                                </Pagination.Item>\n                                                            );\n                                                        } else if (\n                                                            pageNumber === currentPage - 2 ||\n                                                            pageNumber === currentPage + 2\n                                                        ) {\n                                                            return <Pagination.Ellipsis key={pageNumber} disabled />;\n                                                        }\n                                                        return null;\n                                                    })}\n                                                    \n                                                    <Pagination.Next \n                                                        onClick={() => handlePageChange(currentPage + 1)}\n                                                        disabled={currentPage === totalPages}\n                                                    />\n                                                    <Pagination.Last \n                                                        onClick={() => handlePageChange(totalPages)}\n                                                        disabled={currentPage === totalPages}\n                                                    />\n                                                </Pagination>\n                                            </div>\n                                        )}\n                                    </>\n                                ) : (\n                                    <UnifiedMapView \n                                        farms={filteredFarms}\n                                        isFiltered={getActiveFiltersCount() > 0}\n                                    />\n                                )}\n                            </Card.Body>\n                        </Card>\n                    </Col>\n                ) : (\n                    <Col className=\"d-flex justify-content-center\">\n                        <Card style={{ maxWidth: '600px', width: '100%' }}>\n                            <Card.Body className=\"text-center py-5\">\n                                <img \n                                    src={FarmIcon} \n                                    alt=\"Betrieb\"\n                                    className=\"me-2\"\n                                    style={{ \n                                    width: '4rem', \n                                    height: '4rem',\n                                    }} \n                                />\n                                <h5 className=\"mt-3\">Keine Betriebe gefunden</h5>\n                                <p className=\"text-muted\">\n                                    Erstellen Sie einen neuen Betrieb manuell oder importieren Sie XML-Daten.\n                                </p>\n                                <div className=\"d-flex gap-3 justify-content-center\">\n                                    <Button \n                                        variant=\"success\" \n                                        onClick={() => setShowManualFarmModal(true)}\n                                    >\n                                        <i className=\"bi bi-plus-square me-2\"></i>\n                                        Betrieb erstellen\n                                    </Button>\n                                    <Button \n                                        variant=\"primary\" \n                                        onClick={() => setShowImportModal(true)}\n                                    >\n                                        <i className=\"bi bi-upload me-2\"></i>\n                                        XML-Import\n                                    </Button>\n                                </div>\n                            </Card.Body>\n                        </Card>\n                    </Col>\n                )}\n            </Row>\n\n            <FilterDrawer \n                show={showFilterDrawer}\n                onHide={() => setShowFilterDrawer(false)}\n                farms={farms}\n                onFilterApply={setActiveFilters}\n                onFilterClear={() => setActiveFilters({\n                    textSearch: '',\n                    selectedFarms: [],\n                    selectedYears: [],\n                    selectedFeldstuecke: [],\n                    selectedSchlaege: [],\n                    selectedOperationTypes: [],\n                    selectedCrops: [],\n                    selectedDataSources: []\n                })}\n                currentFilters={activeFilters}\n            />\n\n            <XMLImportModal \n                show={showImportModal}\n                onHide={() => setShowImportModal(false)}\n                onSuccess={() => {\n                    setShowImportModal(false);\n                    dispatch(fetchFarms());\n                }}\n            />\n\n            <AgrarCommanderImportModal\n                show={showAgrarCommanderImportModal}\n                onHide={() => setShowAgrarCommanderImportModal(false)}\n                onSuccess={() => {\n                    dispatch(fetchFarms());\n                }}\n            />\n\n            <DeleteConfirmModal\n                show={showDeleteAllModal}\n                onHide={() => setShowDeleteAllModal(false)}\n                onConfirm={confirmDeleteAll}\n                title=\"Alle Daten löschen\"\n                message={`Sind Sie sicher, dass Sie alle ${farms.length} Betriebe und alle zugehörigen Daten löschen möchten?`}\n                confirmText=\"Alle löschen\"\n                isLoading={loading}\n                details={[\n                    'Alle Betriebsdaten und Jahrgänge',\n                    'Alle Feldstücke und Schläge',\n                    'Alle Geometriedaten',\n                    'Alle Import-Logs'\n                ]}\n            />\n\n            <DeleteConfirmModal\n                show={showDeleteFarmModal}\n                onHide={() => setShowDeleteFarmModal(false)}\n                onConfirm={confirmDeleteFarm}\n                title=\"Betrieb löschen\"\n                message={farmToDelete ? `Sind Sie sicher, dass Sie den Betrieb \"${farmToDelete.name || farmToDelete.hauptbetriebsnummer}\" und alle zugehörigen Daten löschen möchten?` : ''}\n                confirmText=\"Betrieb löschen\"\n                isLoading={loading}\n                details={[\n                    'Alle Jahrgänge dieses Betriebs',\n                    'Alle Feldstücke und Schläge',\n                    'Alle Maßnahmen und Bewirtschaftungsdaten',\n                    'Alle Geometriedaten'\n                ]}\n            />\n\n            <ManualFarmModal \n                show={showManualFarmModal}\n                onHide={() => {\n                    setShowManualFarmModal(false);\n                    setEditingFarm(null);\n                }}\n                editFarm={editingFarm}\n                onSuccess={(response) => {\n                    setShowManualFarmModal(false);\n                    setEditingFarm(null);\n                    // Refresh farms to show the updated/created farm\n                    dispatch(fetchFarms());\n                    // Show success message\n                    const action = editingFarm ? 'aktualisiert' : 'erstellt';\n                    dispatch({ \n                        type: 'farms/setImportSuccess', \n                        payload: `Betrieb \"${response.farm.name || response.farm.hauptbetriebsnummer}\" erfolgreich ${action}!` \n                    });\n                }}\n            />\n\n            <QuickOperationModal\n                show={showQuickOperationModal}\n                onHide={() => {\n                    setShowQuickOperationModal(false);\n                    setPreselectedSchlagData(null);\n                }}\n                farms={preselectedSchlagData ? [preselectedSchlagData.farm] : farms}\n                preselectedData={preselectedSchlagData}\n                onSuccess={async (createdOperations) => {\n                    setShowQuickOperationModal(false);\n                    setPreselectedSchlagData(null);\n                    // Show success message\n                    dispatch(setImportSuccess(`${createdOperations.length} Maßnahme${createdOperations.length !== 1 ? 'n' : ''} erfolgreich erstellt!`));\n\n                    // Refresh farm data to update the collapsible icons\n                    await dispatch(fetchFarms()).unwrap();\n                }}\n            />\n\n            <CrudModal\n                show={showCrudModal}\n                onHide={() => {\n                    setShowCrudModal(false);\n                    setCrudOperation(null);\n                    setCrudTarget(null);\n                    setCrudError(null);\n                }}\n                operation={crudOperation}\n                target={crudTarget}\n                onSave={handleCrudSave}\n                loading={crudLoading}\n                error={crudError}\n            />\n\n            {importSuccess && (\n                <Alert variant=\"success\" className=\"position-fixed\" style={{ top: '20px', right: '20px', zIndex: 1050 }}>\n                    {importSuccess}\n                </Alert>\n            )}\n        </Container>\n    );\n};\n\nexport default FarmManagement;\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Container, Row, Col, Card, Alert, Spinner, Button, Table, Form, InputGroup, ButtonGroup, Badge } from 'react-bootstrap';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport FarmingInfoModal from '../components/farms/FarmingInfoModal';\nimport QuickOperationModal from '../components/farms/QuickOperationModal';\nimport DeleteConfirmModal from '../components/farms/DeleteConfirmModal';\nimport { fetchFarms, clearImportSuccess } from '../slices/farmSlice';\nimport api from '../utils/api';\nimport { getOperationIcon } from '../utils/operationIcons';\nimport FarmIcon from '../../icons/landwirtschaft.svg';\n\nconst FarmOperations = () => {\n    const dispatch = useDispatch();\n    const navigate = useNavigate();\n    const { \n        farms, \n        loading, \n        error,\n        importSuccess\n    } = useSelector(state => state.farms);\n\n    const [operations, setOperations] = useState([]);\n    const [loadingOperations, setLoadingOperations] = useState(false);\n    const [farmsInitialized, setFarmsInitialized] = useState(false);\n    const [operationFilters, setOperationFilters] = useState({\n        dateFrom: '',\n        dateTo: '',\n        searchText: ''\n    });\n    const [showQuickOperationModal, setShowQuickOperationModal] = useState(false);\n    const [showFarmingInfoModal, setShowFarmingInfoModal] = useState(false);\n    const [selectedArea, setSelectedArea] = useState(null);\n    const [showDeleteOperationModal, setShowDeleteOperationModal] = useState(false);\n    const [operationToDelete, setOperationToDelete] = useState(null);\n\n    useEffect(() => {\n        // Only fetch farms if not already loaded to avoid duplicate calls\n        if (farms.length === 0 && !farmsInitialized) {\n            dispatch(fetchFarms()).finally(() => {\n                setFarmsInitialized(true);\n            });\n        } else if (farms.length > 0) {\n            setFarmsInitialized(true);\n        }\n    }, [dispatch, farms.length, farmsInitialized]);\n\n    // Get all farm years\n    const allFarmYears = useMemo(() => {\n        const farmYears = [];\n\n        farms.forEach(farm => {\n            if (farm.years) {\n                farm.years.forEach(year => {\n                    farmYears.push({\n                        ...year,\n                        farm: farm,\n                        farmId: farm.id,\n                        farmName: farm.name || `Betrieb ${farm.hauptbetriebsnummer}`\n                    });\n                });\n            }\n        });\n\n        return farmYears;\n    }, [farms]);\n\n    // Load operations - optimized single request for all operations\n    useEffect(() => {\n        const loadOperations = async () => {\n            if (farms.length === 0) {\n                setOperations([]);\n                return;\n            }\n\n            setLoadingOperations(true);\n            try {\n                // Fetch ALL operations for the user in a single optimized request\n                const response = await api.get(`/operations/all_for_user/`);\n                const ops = response.data || [];\n                \n                // Enrich operations with farm and year information\n                ops.forEach(op => {\n                    op.farming_info_details = op.farming_info;\n                    \n                    // Extract farm and year from farming_info\n                    if (op.farming_info?.feldstueck?.farm_year) {\n                        const farmYear = op.farming_info.feldstueck.farm_year;\n                        op.year = farmYear.year;\n                        op.farmName = farmYear.farm?.name || `Betrieb ${farmYear.farm?.hauptbetriebsnummer || ''}`;\n                    } else if (op.farming_info?.schlag?.feldstueck?.farm_year) {\n                        const farmYear = op.farming_info.schlag.feldstueck.farm_year;\n                        op.year = farmYear.year;\n                        op.farmName = farmYear.farm?.name || `Betrieb ${farmYear.farm?.hauptbetriebsnummer || ''}`;\n                    }\n                });\n                \n                setOperations(ops);\n            } catch (err) {\n                console.error('Error loading operations:', err);\n            } finally {\n                setLoadingOperations(false);\n            }\n        };\n\n        loadOperations();\n    }, [farms]);\n\n    const filteredOperations = useMemo(() => {\n        let filtered = [...operations];\n\n        // Apply local filters\n        // Date filter\n        if (operationFilters.dateFrom && filtered.length > 0) {\n            filtered = filtered.filter(op => op.date >= operationFilters.dateFrom);\n        }\n        if (operationFilters.dateTo && filtered.length > 0) {\n            filtered = filtered.filter(op => op.date <= operationFilters.dateTo);\n        }\n\n        // Text search\n        if (operationFilters.searchText) {\n            const searchLower = operationFilters.searchText.toLowerCase();\n            filtered = filtered.filter(operation => {\n                const matchesOperationType = operation.operation_type?.name?.toLowerCase().includes(searchLower);\n                const matchesNotes = operation.notes?.toLowerCase().includes(searchLower);\n                const matchesFuelType = operation.fuel_type?.name?.toLowerCase().includes(searchLower);\n                const matchesArea = operation.farming_info_details?.feldstueck?.bezeichnung?.toLowerCase().includes(searchLower) ||\n                                 operation.farming_info_details?.schlag?.nummer?.toString().includes(searchLower);\n                const matchesFarm = operation.farmName?.toLowerCase().includes(searchLower);\n\n                return matchesOperationType || matchesNotes || matchesFuelType || matchesArea || matchesFarm;\n            });\n        }\n\n        return filtered.sort((a, b) => new Date(b.date) - new Date(a.date));\n    }, [operations, operationFilters]);\n\n    const getOperationDetails = (operation) => {\n        const details = [];\n\n        if (operation.seeding_data?.seed_amount) {\n            details.push(`Saatgut: ${operation.seeding_data.seed_amount} ${operation.seeding_data.seed_unit?.code || ''}`);\n        }\n\n        if (operation.fertilizing_data?.amount) {\n            details.push(`Dünger: ${operation.fertilizing_data.amount} ${operation.fertilizing_data.unit?.code || ''}`);\n        }\n\n        if (operation.pest_control_data?.amount) {\n            details.push(`PSM: ${operation.pest_control_data.amount} ${operation.pest_control_data.unit?.code || ''}`);\n        }\n\n        if (operation.harvest_data?.harvest_amount) {\n            details.push(`Ernte: ${operation.harvest_data.harvest_amount} ${operation.harvest_data.harvest_unit?.code || ''}`);\n        }\n\n        if (operation.soil_work_data?.soil_work_type?.name) {\n            details.push(`Bodenarbeit: ${operation.soil_work_data.soil_work_type.name}`);\n        }\n\n        return details.join(' | ');\n    };\n\n    const getTotalValue = (operation) => {\n        if (operation.seeding_data?.total_value !== null && operation.seeding_data?.total_value !== undefined) {\n            return {\n                value: operation.seeding_data.total_value,\n                unit: operation.seeding_data.total_value_unit || ''\n            };\n        }\n\n        if (operation.fertilizing_data?.total_value !== null && operation.fertilizing_data?.total_value !== undefined) {\n            return {\n                value: operation.fertilizing_data.total_value,\n                unit: operation.fertilizing_data.total_value_unit || ''\n            };\n        }\n\n        if (operation.pest_control_data?.total_value !== null && operation.pest_control_data?.total_value !== undefined) {\n            return {\n                value: operation.pest_control_data.total_value,\n                unit: operation.pest_control_data.total_value_unit || ''\n            };\n        }\n\n        if (operation.harvest_data?.total_value !== null && operation.harvest_data?.total_value !== undefined) {\n            return {\n                value: operation.harvest_data.total_value,\n                unit: operation.harvest_data.total_value_unit || ''\n            };\n        }\n\n        return null;\n    };\n\n    const getAreaName = (operation) => {\n        const fs = operation.farming_info_details?.feldstueck;\n        const schlag = operation.farming_info_details?.schlag;\n\n        let feldstueckInfo = fs;\n        if (!feldstueckInfo && schlag?.feldstueck) {\n            feldstueckInfo = schlag.feldstueck;\n        }\n\n        if (schlag && feldstueckInfo) {\n            const feldstueckPart = `${feldstueckInfo.bezeichnung || 'Feldstück'} (${feldstueckInfo.nummer})`;\n            const schlagName = schlag.bezeichnung || schlag.name;\n            const schlagPart = schlagName ? `${schlagName} (${schlag.nummer})` : `Schlag (${schlag.nummer})`;\n            return `${feldstueckPart} / ${schlagPart}`;\n        } else if (feldstueckInfo && !schlag) {\n            return `${feldstueckInfo.bezeichnung || 'Feldstück'} (${feldstueckInfo.nummer})`;\n        } else if (schlag && !feldstueckInfo) {\n            const schlagName = schlag.bezeichnung || schlag.name;\n            return schlagName ? `${schlagName} (${schlag.nummer})` : `Schlag (${schlag.nummer})`;\n        }\n        return 'Unbekannt';\n    };\n\n    const handleDeleteOperation = (operation) => {\n        setOperationToDelete(operation);\n        setShowDeleteOperationModal(true);\n    };\n\n    const confirmDeleteOperation = async () => {\n        if (!operationToDelete) return;\n\n        try {\n            await api.delete(`/operations/${operationToDelete.id}/`);\n\n            dispatch({ \n                type: 'farms/setImportSuccess', \n                payload: 'Maßnahme erfolgreich gelöscht!' \n            });\n\n            // Reload all operations with a single request\n            const response = await api.get(`/operations/all_for_user/`);\n            const ops = response.data || [];\n            \n            // Enrich operations with farm and year information\n            ops.forEach(op => {\n                op.farming_info_details = op.farming_info;\n                \n                // Extract farm and year from farming_info\n                if (op.farming_info?.feldstueck?.farm_year) {\n                    const farmYear = op.farming_info.feldstueck.farm_year;\n                    op.year = farmYear.year;\n                    op.farmName = farmYear.farm?.name || `Betrieb ${farmYear.farm?.hauptbetriebsnummer || ''}`;\n                } else if (op.farming_info?.schlag?.feldstueck?.farm_year) {\n                    const farmYear = op.farming_info.schlag.feldstueck.farm_year;\n                    op.year = farmYear.year;\n                    op.farmName = farmYear.farm?.name || `Betrieb ${farmYear.farm?.hauptbetriebsnummer || ''}`;\n                }\n            });\n            \n            setOperations(ops);\n            await dispatch(fetchFarms()).unwrap();\n\n            setShowDeleteOperationModal(false);\n            setOperationToDelete(null);\n        } catch (error) {\n            console.error('Error deleting operation:', error);\n            dispatch({ \n                type: 'farms/setError', \n                payload: 'Fehler beim Löschen der Maßnahme: ' + (error.response?.data?.error || error.message)\n            });\n        }\n    };\n\n    useEffect(() => {\n        if (importSuccess) {\n            setTimeout(() => {\n                dispatch(clearImportSuccess());\n            }, 3000);\n        }\n    }, [importSuccess, dispatch]);\n\n    // Show single unified loading state\n    const isInitialLoading = !farmsInitialized || loading || (farms.length > 0 && loadingOperations && operations.length === 0);\n\n    if (isInitialLoading) {\n        return null;\n    }\n\n    if (farms.length === 0) {\n        return (\n            <Container fluid className=\"py-4\">\n                <Row>\n                    <Col>\n                        <Card>\n                            <Card.Body className=\"text-center py-5\">\n                                <img \n                                    src={FarmIcon} \n                                    alt=\"Hofbedarf\"\n                                    className=\"me-2\"\n                                    style={{ \n                                    width: '1.25rem', \n                                    height: '1.25rem',\n                                    filter: 'brightness(0)',\n                                    }} \n                                />\n                                <h5 className=\"mt-3\">Keine Betriebe vorhanden</h5>\n                                <p className=\"text-muted\">\n                                    Bitte importieren Sie zuerst Betriebsdaten.\n                                </p>\n                                <Button \n                                    variant=\"primary\" \n                                    onClick={() => navigate('/farms')}\n                                >\n                                    <i className=\"bi bi-arrow-left me-2\"></i>\n                                    Zur Betriebsverwaltung\n                                </Button>\n                            </Card.Body>\n                        </Card>\n                    </Col>\n                </Row>\n            </Container>\n        );\n    }\n\n    return (\n        <Container fluid className=\"py-4\">\n            <Row className=\"mb-4\">\n                <Col>\n                    <div className=\"d-flex justify-content-between align-items-center\">\n                        <div>\n                            <h1 className=\"h3 mb-0\">Maßnahmen</h1>\n                        </div>\n                        <Button \n                            variant=\"warning\" \n                            size=\"sm\"\n                            onClick={() => setShowQuickOperationModal(true)}\n                        >\n                            <i className=\"bi bi-lightning me-2\"></i>\n                            Maßnahme erfassen\n                        </Button>\n                    </div>\n                </Col>\n            </Row>\n\n            {error && (\n                <Row className=\"mb-4\">\n                    <Col>\n                        <Alert variant=\"danger\">{error}</Alert>\n                    </Col>\n                </Row>\n            )}\n\n            <Card className=\"mb-4\">\n                <Card.Header>\n                    <Card.Title className=\"h6 mb-0\">\n                        <i className=\"bi bi-funnel me-2\"></i>\n                        Filter\n                    </Card.Title>\n                </Card.Header>\n                <Card.Body>\n                    {/* Local Filters */}\n                    <Row className=\"mb-3\">\n                        <Col md={4}>\n                            <Form.Group>\n                                <Form.Label className=\"small\">Von Datum</Form.Label>\n                                <Form.Control\n                                    type=\"date\"\n                                    size=\"sm\"\n                                    value={operationFilters.dateFrom}\n                                    onChange={(e) => setOperationFilters(prev => ({\n                                        ...prev,\n                                        dateFrom: e.target.value\n                                    }))}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group>\n                                <Form.Label className=\"small\">Bis Datum</Form.Label>\n                                <Form.Control\n                                    type=\"date\"\n                                    size=\"sm\"\n                                    value={operationFilters.dateTo}\n                                    onChange={(e) => setOperationFilters(prev => ({\n                                        ...prev,\n                                        dateTo: e.target.value\n                                    }))}\n                                />\n                            </Form.Group>\n                        </Col>\n                        <Col md={4}>\n                            <Form.Group>\n                                <Form.Label className=\"small\">Suche</Form.Label>\n                                <InputGroup size=\"sm\">\n                                    <Form.Control\n                                        type=\"text\"\n                                        placeholder=\"Suche in Maßnahmen...\"\n                                        value={operationFilters.searchText}\n                                        onChange={(e) => setOperationFilters(prev => ({\n                                            ...prev,\n                                            searchText: e.target.value\n                                        }))}\n                                    />\n                                    {operationFilters.searchText && (\n                                        <Button\n                                            variant=\"outline-secondary\"\n                                            size=\"sm\"\n                                            onClick={() => setOperationFilters(prev => ({\n                                                ...prev,\n                                                searchText: ''\n                                            }))}\n                                        >\n                                            <i className=\"bi bi-x\"></i>\n                                        </Button>\n                                    )}\n                                </InputGroup>\n                            </Form.Group>\n                        </Col>\n                    </Row>\n\n                    {/* Clear local filters */}\n                    {(operationFilters.dateFrom || operationFilters.dateTo || operationFilters.searchText) && (\n                        <div className=\"mb-0\">\n                            <Button\n                                variant=\"outline-secondary\"\n                                size=\"sm\"\n                                onClick={() => setOperationFilters({\n                                    dateFrom: '',\n                                    dateTo: '',\n                                    searchText: ''\n                                })}\n                            >\n                                <i className=\"bi bi-x-circle me-1\"></i>\n                                Filter zurücksetzen\n                            </Button>\n                        </div>\n                    )}\n                </Card.Body>\n            </Card>\n\n            <Card>\n                <Card.Header>\n                    <Card.Title className=\"h6 mb-0\">\n                        Maßnahmen Übersicht\n                        <small className=\"text-muted ms-2\">\n                            ({filteredOperations.length} von {operations.length})\n                        </small>\n                    </Card.Title>\n                </Card.Header>\n                <Card.Body className=\"p-0\">\n                    {filteredOperations.length === 0 ? (\n                        <div className=\"text-center py-5\">\n                            <i className=\"bi bi-list-task display-1 text-muted\"></i>\n                            <h5 className=\"mt-3\">Keine Maßnahmen gefunden</h5>\n                            <p className=\"text-muted\">\n                                {operations.length === 0 \n                                    ? 'Keine Maßnahmen erfasst.'\n                                    : 'Keine Maßnahmen entsprechen den aktuellen Filterkriterien.'\n                                }\n                            </p>\n                            <Button \n                                variant=\"warning\" \n                                onClick={() => setShowQuickOperationModal(true)}\n                            >\n                                <i className=\"bi bi-lightning me-2\"></i>\n                                Maßnahme erfassen\n                            </Button>\n                        </div>\n                    ) : (\n                        <Table responsive striped hover>\n                            <thead className=\"table-dark\">\n                                <tr>\n                                    <th>Datum</th>\n                                    <th>Betrieb</th>\n                                    <th>Jahr</th>\n                                    <th>Bereich</th>\n                                    <th>Maßnahme</th>\n                                    <th>Fläche</th>\n                                    <th>Kraftstoff</th>\n                                    <th>Details</th>\n                                    <th>Gesamtwert</th>\n                                    <th>Aktionen</th>\n                                </tr>\n                            </thead>\n                            <tbody>\n                                {filteredOperations.map(operation => {\n                                    const totalValue = getTotalValue(operation);\n                                    return (\n                                    <tr key={operation.id}>\n                                        <td className=\"small\">\n                                            {new Date(operation.date).toLocaleDateString('de-DE')}\n                                        </td>\n                                        <td className=\"small\">\n                                            {operation.farmName}\n                                        </td>\n                                        <td className=\"small\">\n                                            {operation.year}\n                                        </td>\n                                        <td className=\"small\">\n                                            {getAreaName(operation)}\n                                        </td>\n                                        <td>\n                                            <div className=\"d-flex align-items-center gap-2\">\n                                                {(() => {\n                                                    const iconUrl = getOperationIcon(operation.operation_type?.name);\n                                                    if (iconUrl) {\n                                                        return (\n                                                            <img \n                                                                src={iconUrl} \n                                                                alt={operation.operation_type?.name}\n                                                                style={{ width: '35px', height: '35px' }}\n                                                                title={operation.operation_type?.name}\n                                                            />\n                                                        );\n                                                    }\n                                                    return null;\n                                                })()}\n                                                <strong>{operation.operation_type?.name}</strong>\n                                            </div>\n                                        </td>\n                                        <td className=\"small\">\n                                            {operation.area_ha} ha\n                                        </td>\n                                        <td className=\"small\">\n                                            {operation.fuel_type?.name || '-'}\n                                        </td>\n                                        <td className=\"small\">\n                                            {getOperationDetails(operation) || '-'}\n                                            {operation.notes && (\n                                                <div className=\"text-muted\">\n                                                    <i className=\"bi bi-chat-text me-1\"></i>\n                                                    {operation.notes.length > 50 \n                                                        ? operation.notes.substring(0, 50) + '...' \n                                                        : operation.notes\n                                                    }\n                                                </div>\n                                            )}\n                                        </td>\n                                        <td className=\"small\">\n                                            {totalValue ? (\n                                                <strong>\n                                                    {totalValue.value.toFixed(2)} {totalValue.unit}\n                                                </strong>\n                                            ) : '-'}\n                                        </td>\n                                        <td>\n                                            <ButtonGroup size=\"sm\">\n                                                <Button\n                                                    variant=\"outline-danger\"\n                                                    title=\"Löschen\"\n                                                    onClick={() => handleDeleteOperation(operation)}\n                                                >\n                                                    <i className=\"bi bi-trash\"></i>\n                                                </Button>\n                                            </ButtonGroup>\n                                        </td>\n                                    </tr>\n                                    );\n                                })}\n                            </tbody>\n                        </Table>\n                    )}\n                </Card.Body>\n            </Card>\n\n            <QuickOperationModal\n                show={showQuickOperationModal}\n                onHide={() => setShowQuickOperationModal(false)}\n                farms={farms}\n                onSuccess={async (createdOperations) => {\n                    setShowQuickOperationModal(false);\n                    dispatch({ \n                        type: 'farms/setImportSuccess', \n                        payload: `${createdOperations.length} Maßnahme${createdOperations.length !== 1 ? 'n' : ''} erfolgreich erstellt!` \n                    });\n\n                    // Reload all operations with a single request\n                    try {\n                        const response = await api.get(`/operations/all_for_user/`);\n                        const ops = response.data || [];\n                        \n                        // Enrich operations with farm and year information\n                        ops.forEach(op => {\n                            op.farming_info_details = op.farming_info;\n                            \n                            // Extract farm and year from farming_info\n                            if (op.farming_info?.feldstueck?.farm_year) {\n                                const farmYear = op.farming_info.feldstueck.farm_year;\n                                op.year = farmYear.year;\n                                op.farmName = farmYear.farm?.name || `Betrieb ${farmYear.farm?.hauptbetriebsnummer || ''}`;\n                            } else if (op.farming_info?.schlag?.feldstueck?.farm_year) {\n                                const farmYear = op.farming_info.schlag.feldstueck.farm_year;\n                                op.year = farmYear.year;\n                                op.farmName = farmYear.farm?.name || `Betrieb ${farmYear.farm?.hauptbetriebsnummer || ''}`;\n                            }\n                        });\n                        \n                        setOperations(ops);\n                    } catch (err) {\n                        console.error('Error reloading operations:', err);\n                    }\n\n                    await dispatch(fetchFarms()).unwrap();\n                }}\n            />\n\n            <DeleteConfirmModal\n                show={showDeleteOperationModal}\n                onHide={() => {\n                    setShowDeleteOperationModal(false);\n                    setOperationToDelete(null);\n                }}\n                onConfirm={confirmDeleteOperation}\n                title=\"Maßnahme löschen\"\n                message={operationToDelete ? `Sind Sie sicher, dass Sie die Maßnahme \"${operationToDelete.operation_type?.name}\" vom ${new Date(operationToDelete.date).toLocaleDateString('de-DE')} löschen möchten?` : ''}\n                confirmText=\"Maßnahme löschen\"\n                isLoading={false}\n            />\n\n            {importSuccess && (\n                <Alert variant=\"success\">\n                    {importSuccess}\n                </Alert>\n            )}\n        </Container>\n    );\n};\n\nexport default FarmOperations;\n","import React, { useEffect, useState, useMemo } from 'react';\nimport { Container, Row, Col, Card, Spinner, Alert, Button } from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { selectUser, selectAuthLoading } from '../auth/authSlice';\nimport FilterDrawer from '../components/farms/FilterDrawer';\nimport api from '../utils/api';\nimport * as echarts from 'echarts';\n\nconst AdminDashboard = () => {\n    const user = useSelector(selectUser);\n    const authLoading = useSelector(selectAuthLoading);\n    const [loading, setLoading] = useState(true);\n    const [error, setError] = useState(null);\n    const [farms, setFarms] = useState([]);\n    const [showFilterDrawer, setShowFilterDrawer] = useState(false);\n    const [activeFilters, setActiveFilters] = useState({\n        textSearch: '',\n        selectedFarms: [],\n        selectedYears: [],\n        selectedFeldstuecke: [],\n        selectedSchlaege: [],\n        selectedOperationTypes: [],\n        selectedCrops: []\n    });\n\n    // Fetch ALL farms for superusers (not just logged-in user's farms)\n    useEffect(() => {\n        const fetchFarms = async () => {\n            try {\n                // For superusers, we need to fetch all farms from all users\n                // We'll use the dashboard endpoint to get this data\n                const response = await api.get('dashboard/all_farms/');\n                setFarms(response.data);\n            } catch (err) {\n                console.error('Error fetching farms:', err);\n                // Fallback to regular farms endpoint if all_farms doesn't exist yet\n                try {\n                    const fallbackResponse = await api.get('/farms/');\n                    setFarms(fallbackResponse.data);\n                } catch (fallbackErr) {\n                    console.error('Error fetching farms (fallback):', fallbackErr);\n                }\n            }\n        };\n\n        if (user?.is_superuser) {\n            fetchFarms();\n        }\n    }, [user]);\n\n    // Calculate filtered data based on active filters\n    const { filteredFarms, uniqueBetriebe, totalArea } = useMemo(() => {\n        const { selectedFarms, selectedYears, selectedFeldstuecke, selectedSchlaege, selectedOperationTypes, selectedCrops } = activeFilters;\n        \n        const hasFilters = selectedFarms.length > 0 || selectedYears.length > 0 || \n                          selectedFeldstuecke.length > 0 || selectedSchlaege.length > 0 || \n                          selectedOperationTypes.length > 0 || selectedCrops.length > 0;\n\n        if (!hasFilters) {\n            // No filters - calculate totals from all farms\n            const betriebe = new Set();\n            let area = 0;\n\n            farms.forEach(farm => {\n                let farmHasHarvest = false;\n                farm.years?.forEach(year => {\n                    year.feldstuecke?.forEach(fs => {\n                        fs.schlaege?.forEach(schlag => {\n                            const hasHarvestOp = schlag.operations?.some(op => \n                                op.operation_type?.name === 'Ernte' || op.harvest_data\n                            );\n                            if (hasHarvestOp) {\n                                farmHasHarvest = true;\n                                area += parseFloat(schlag.flaeche_netto || 0);\n                            }\n                        });\n                    });\n                });\n                if (farmHasHarvest) {\n                    betriebe.add(farm.id);\n                }\n            });\n\n            return {\n                filteredFarms: farms,\n                uniqueBetriebe: betriebe.size,\n                totalArea: area\n            };\n        }\n\n        // Apply filters\n        const betriebe = new Set();\n        let area = 0;\n\n        const filtered = farms.reduce((acc, farm) => {\n            // Farm Level Filter\n            if (selectedFarms.length > 0 && !selectedFarms.some(f => f.id === farm.id)) {\n                return acc;\n            }\n\n            let yearsToKeep = [];\n            if (farm.years) {\n                yearsToKeep = farm.years.reduce((yAcc, year) => {\n                    // Year Level Filter\n                    if (selectedYears.length > 0 && !selectedYears.some(y => y.id === year.year)) {\n                        return yAcc;\n                    }\n\n                    let feldstueckeToKeep = [];\n                    if (year.feldstuecke) {\n                        feldstueckeToKeep = year.feldstuecke.reduce((fsAcc, fs) => {\n                            // Feldstueck Level Filter\n                            if (selectedFeldstuecke.length > 0 && !selectedFeldstuecke.some(f => f.id === fs.id)) {\n                                return fsAcc;\n                            }\n\n                            let schlaegeToKeep = [];\n                            if (fs.schlaege) {\n                                schlaegeToKeep = fs.schlaege.reduce((schlagAcc, schlag) => {\n                                    if (selectedSchlaege.length > 0 && !selectedSchlaege.some(s => s.id === schlag.id)) {\n                                        return schlagAcc;\n                                    }\n                                    \n                                    const ops = schlag.operations || [];\n                                    const hasOperationTypeFilter = selectedOperationTypes.length > 0;\n                                    const hasCropFilter = selectedCrops.length > 0;\n                                    \n                                    let filteredOperations = ops;\n                                    let keepSchlag = false;\n                                    \n                                    if (hasOperationTypeFilter || hasCropFilter) {\n                                        const schlagCropMatch = hasCropFilter && selectedCrops.some(crop => \n                                            schlag.crop?.name === crop.label\n                                        );\n                                        \n                                        if (hasCropFilter && !hasOperationTypeFilter) {\n                                            if (schlagCropMatch) {\n                                                keepSchlag = true;\n                                                filteredOperations = ops;\n                                            } else {\n                                                filteredOperations = ops.filter(op => {\n                                                    return selectedCrops.some(crop => {\n                                                        if (op.seeding_data?.crop?.name === crop.label) return true;\n                                                        if (op.harvest_data?.crop?.name === crop.label) return true;\n                                                        return false;\n                                                    });\n                                                });\n                                                keepSchlag = filteredOperations.length > 0;\n                                            }\n                                        } else if (hasCropFilter && hasOperationTypeFilter) {\n                                            if (schlagCropMatch) {\n                                                filteredOperations = ops.filter(op => {\n                                                    return selectedOperationTypes.some(opType => \n                                                        op.operation_type?.name === opType.label\n                                                    );\n                                                });\n                                                keepSchlag = filteredOperations.length > 0;\n                                            } else {\n                                                filteredOperations = ops.filter(op => {\n                                                    const opTypeMatches = selectedOperationTypes.some(opType => \n                                                        op.operation_type?.name === opType.label\n                                                    );\n                                                    const opCropMatches = selectedCrops.some(crop => {\n                                                        if (op.seeding_data?.crop?.name === crop.label) return true;\n                                                        if (op.harvest_data?.crop?.name === crop.label) return true;\n                                                        return false;\n                                                    });\n                                                    return opTypeMatches && opCropMatches;\n                                                });\n                                                keepSchlag = filteredOperations.length > 0;\n                                            }\n                                        } else if (hasOperationTypeFilter && !hasCropFilter) {\n                                            filteredOperations = ops.filter(op => {\n                                                return selectedOperationTypes.some(opType => \n                                                    op.operation_type?.name === opType.label\n                                                );\n                                            });\n                                            keepSchlag = filteredOperations.length > 0;\n                                        }\n                                    } else {\n                                        keepSchlag = true;\n                                    }\n\n                                    if (keepSchlag) {\n                                        // Check if this schlag has harvesting operations\n                                        const hasHarvestOp = filteredOperations.some(op => \n                                            op.operation_type?.name === 'Ernte' || op.harvest_data\n                                        );\n                                        \n                                        if (hasHarvestOp) {\n                                            betriebe.add(farm.id);\n                                            area += parseFloat(schlag.flaeche_netto || 0);\n                                        }\n                                        \n                                        schlagAcc.push({\n                                            ...schlag,\n                                            operations: filteredOperations\n                                        });\n                                    }\n                                    \n                                    return schlagAcc;\n                                }, []);\n                            }\n\n                            if (schlaegeToKeep.length > 0) {\n                                fsAcc.push({\n                                    ...fs,\n                                    schlaege: schlaegeToKeep\n                                });\n                            }\n                            \n                            return fsAcc;\n                        }, []);\n                    }\n\n                    if (feldstueckeToKeep.length > 0) {\n                        yAcc.push({\n                            ...year,\n                            feldstuecke: feldstueckeToKeep\n                        });\n                    }\n                    \n                    return yAcc;\n                }, []);\n            }\n\n            if (yearsToKeep.length > 0) {\n                acc.push({\n                    ...farm,\n                    years: yearsToKeep\n                });\n            }\n\n            return acc;\n        }, []);\n\n        return {\n            filteredFarms: filtered,\n            uniqueBetriebe: betriebe.size,\n            totalArea: area\n        };\n    }, [farms, activeFilters]);\n\n    // Fetch operations data for charts\n    const [operationsData, setOperationsData] = useState(null);\n\n    useEffect(() => {\n        const fetchOperationsData = async () => {\n            try {\n                setLoading(true);\n                \n                // Build filter params based on active filters\n                const params = {};\n                \n                // We'll fetch all data and filter client-side for now\n                // since the backend doesn't support the same filter structure\n                const response = await api.get('dashboard/');\n                setOperationsData(response.data);\n                setError(null);\n            } catch (err) {\n                console.error('Error fetching dashboard data:', err);\n                setError(err.response?.data?.detail || 'Fehler beim Laden der Dashboard-Daten');\n            } finally {\n                setLoading(false);\n            }\n        };\n\n        if (user?.is_superuser) {\n            fetchOperationsData();\n        }\n    }, [user]);\n\n    // Filter operations data based on active filters\n    const filteredOperationsData = useMemo(() => {\n        if (!operationsData) return null;\n\n        const hasFilters = activeFilters.selectedFarms.length > 0 || \n                          activeFilters.selectedYears.length > 0 || \n                          activeFilters.selectedFeldstuecke.length > 0 || \n                          activeFilters.selectedSchlaege.length > 0 || \n                          activeFilters.selectedOperationTypes.length > 0 || \n                          activeFilters.selectedCrops.length > 0;\n\n        if (!hasFilters) return operationsData;\n\n        // Get all operations and crops from filtered farms (which are already filtered)\n        const operationsByType = {};\n        const operationsByMonthAndType = {};\n        const cropSchlaegeCounts = {};\n        const cropFlaecheSum = {};\n        \n        filteredFarms.forEach(farm => {\n            farm.years?.forEach(year => {\n                year.feldstuecke?.forEach(fs => {\n                    fs.schlaege?.forEach(schlag => {\n                        // Count crops (only for schläge with operations after filtering)\n                        if (schlag.crop?.name && schlag.operations?.length > 0) {\n                            const cropName = schlag.crop.name;\n                            if (!cropSchlaegeCounts[cropName]) {\n                                cropSchlaegeCounts[cropName] = {\n                                    count: 0,\n                                    xml_count: 0,\n                                    ac_count: 0,\n                                    oedue_count: 0,\n                                    farmdok_count: 0,\n                                    manual_count: 0\n                                };\n                                cropFlaecheSum[cropName] = {\n                                    flaeche_netto_sum: 0,\n                                    xml_sum: 0,\n                                    ac_sum: 0,\n                                    oedue_sum: 0,\n                                    farmdok_sum: 0,\n                                    manual_sum: 0\n                                };\n                            }\n                            \n                            cropSchlaegeCounts[cropName].count += 1;\n                            const dataSource = schlag.data_source || 'MANUAL';\n                            const sourceKey = `${dataSource.toLowerCase()}_count`;\n                            if (cropSchlaegeCounts[cropName][sourceKey] !== undefined) {\n                                cropSchlaegeCounts[cropName][sourceKey] += 1;\n                            }\n                            \n                            const flaeche = parseFloat(schlag.flaeche_netto || 0);\n                            cropFlaecheSum[cropName].flaeche_netto_sum += flaeche;\n                            const sourceSumKey = `${dataSource.toLowerCase()}_sum`;\n                            if (cropFlaecheSum[cropName][sourceSumKey] !== undefined) {\n                                cropFlaecheSum[cropName][sourceSumKey] += flaeche;\n                            }\n                        }\n                        \n                        schlag.operations?.forEach(op => {\n                            // Count by type\n                            const typeName = op.operation_type?.name;\n                            if (typeName) {\n                                operationsByType[typeName] = (operationsByType[typeName] || 0) + 1;\n                                \n                                // Count by month and type\n                                if (op.date) {\n                                    const date = new Date(op.date);\n                                    const monthKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-01`;\n                                    \n                                    if (!operationsByMonthAndType[monthKey]) {\n                                        operationsByMonthAndType[monthKey] = {};\n                                    }\n                                    operationsByMonthAndType[monthKey][typeName] = (operationsByMonthAndType[monthKey][typeName] || 0) + 1;\n                                }\n                            }\n                        });\n                    });\n                });\n            });\n        });\n\n        // Convert to array format for by_type\n        const filteredByType = Object.entries(operationsByType).map(([name, count]) => ({\n            operation_type__name: name,\n            count: count\n        })).sort((a, b) => b.count - a.count);\n\n        // Convert to series format for by_month_and_type\n        const months = Object.keys(operationsByMonthAndType).sort();\n        const allTypes = new Set();\n        Object.values(operationsByMonthAndType).forEach(monthData => {\n            Object.keys(monthData).forEach(type => allTypes.add(type));\n        });\n\n        const series = {};\n        allTypes.forEach(typeName => {\n            series[typeName] = months.map(month => \n                operationsByMonthAndType[month]?.[typeName] || 0\n            );\n        });\n\n        const filteredByMonthAndType = {\n            months: months,\n            series: series\n        };\n\n        // Convert crops data to array format and sort by count/area\n        const filteredSchlaegeCrops = Object.entries(cropSchlaegeCounts)\n            .map(([cropName, data]) => ({\n                crop__name: cropName,\n                ...data\n            }))\n            .sort((a, b) => b.count - a.count)\n            .slice(0, 20); // Top 20\n            \n        const filteredFlaecheCrops = Object.entries(cropFlaecheSum)\n            .map(([cropName, data]) => ({\n                crop__name: cropName,\n                ...data\n            }))\n            .sort((a, b) => b.flaeche_netto_sum - a.flaeche_netto_sum)\n            .slice(0, 20); // Top 20\n\n        return {\n            ...operationsData,\n            operations: {\n                ...operationsData.operations,\n                by_type: filteredByType,\n                by_month_and_type: filteredByMonthAndType\n            },\n            crops: {\n                schlaege_per_crop: filteredSchlaegeCrops,\n                flaeche_netto_per_crop: filteredFlaecheCrops\n            }\n        };\n    }, [operationsData, activeFilters, filteredFarms]);\n\n    // Render charts\n    useEffect(() => {\n        if (!filteredOperationsData) return;\n\n        // Operations by Type Chart\n        const operationsTypeChart = echarts.init(document.getElementById('operationsTypeChart'));\n        operationsTypeChart.setOption({\n            title: {\n                text: 'Maßnahmen nach Typ',\n                left: 'center'\n            },\n            tooltip: {\n                trigger: 'axis',\n                axisPointer: {\n                    type: 'shadow'\n                }\n            },\n            xAxis: {\n                type: 'category',\n                data: filteredOperationsData.operations.by_type.map(item => item.operation_type__name),\n                axisLabel: {\n                    rotate: 45,\n                    interval: 0\n                }\n            },\n            yAxis: {\n                type: 'value'\n            },\n            series: [\n                {\n                    name: 'Anzahl',\n                    type: 'bar',\n                    data: filteredOperationsData.operations.by_type.map(item => item.count),\n                    itemStyle: {\n                        color: '#5470c6'\n                    }\n                }\n            ],\n            grid: {\n                bottom: 100\n            }\n        });\n\n        // Operations by Month Chart\n        const operationsMonthChart = echarts.init(document.getElementById('operationsMonthChart'));\n        \n        const monthLabels = filteredOperationsData.operations.by_month_and_type.months.map(month => {\n            if (!month) return '';\n            const date = new Date(month);\n            return `${date.getMonth() + 1}/${date.getFullYear()}`;\n        });\n        \n        const seriesData = Object.entries(filteredOperationsData.operations.by_month_and_type.series).map(([typeName, data]) => ({\n            name: typeName,\n            type: 'line',\n            stack: 'total',\n            smooth: true,\n            areaStyle: {},\n            emphasis: {\n                focus: 'series'\n            },\n            data: data\n        }));\n        \n        operationsMonthChart.setOption({\n            title: {\n                text: 'Maßnahmen nach Monat',\n                left: 'center'\n            },\n            tooltip: {\n                trigger: 'axis',\n                axisPointer: {\n                    type: 'cross'\n                }\n            },\n            legend: {\n                type: 'scroll',\n                orient: 'horizontal',\n                bottom: 0,\n                left: 'center'\n            },\n            grid: {\n                left: '3%',\n                right: '4%',\n                bottom: '15%',\n                top: '15%',\n                containLabel: true\n            },\n            xAxis: {\n                type: 'category',\n                boundaryGap: false,\n                data: monthLabels,\n                axisLabel: {\n                    rotate: 45,\n                    interval: 0\n                }\n            },\n            yAxis: {\n                type: 'value'\n            },\n            series: seriesData\n        });\n\n        // Crops Chart\n        const cropsChart = echarts.init(document.getElementById('cropsChart'));\n        const totalSchlaege = filteredOperationsData.crops.schlaege_per_crop.reduce((sum, item) => sum + item.count, 0);\n        cropsChart.setOption({\n            title: {\n                text: `Top 20 Kulturen (Schläge)\\nGesamt: ${totalSchlaege}`,\n                left: 'center'\n            },\n            tooltip: {\n                trigger: 'item',\n                formatter: (params) => {\n                    const item = filteredOperationsData.crops.schlaege_per_crop[params.dataIndex];\n                    return `${params.name}: ${params.value} (${params.percent}%)<br/>` +\n                           `XML: ${item.xml_count || 0}<br/>` +\n                           `AC: ${item.ac_count || 0}<br/>` +\n                           `ÖDÜ: ${item.oedue_count || 0}<br/>` +\n                           `Manuell: ${item.manual_count || 0}`;\n                }\n            },\n            legend: {\n                orient: 'vertical',\n                left: 'left',\n                type: 'scroll',\n                top: 50\n            },\n            series: [\n                {\n                    name: 'Anzahl Schläge',\n                    type: 'pie',\n                    radius: ['40%', '70%'],\n                    avoidLabelOverlap: false,\n                    itemStyle: {\n                        borderRadius: 10,\n                        borderColor: '#fff',\n                        borderWidth: 2\n                    },\n                    label: {\n                        show: true,\n                        formatter: '{b}\\n{c} ({d}%)',\n                        fontSize: 11\n                    },\n                    emphasis: {\n                        label: {\n                            show: true,\n                            fontSize: 14,\n                            fontWeight: 'bold'\n                        }\n                    },\n                    labelLine: {\n                        show: true\n                    },\n                    data: filteredOperationsData.crops.schlaege_per_crop.map(item => ({\n                        value: item.count,\n                        name: item.crop__name\n                    }))\n                }\n            ]\n        });\n\n        // Crop Area Chart\n        const cropAreaChart = echarts.init(document.getElementById('cropAreaChart'));\n        const totalFlaeche = filteredOperationsData.crops.flaeche_netto_per_crop.reduce((sum, item) => sum + Number(item.flaeche_netto_sum), 0);\n        cropAreaChart.setOption({\n            title: {\n                text: `Top 20 Kulturen (Nettofläche in ha)\\nGesamt: ${totalFlaeche.toFixed(2)} ha`,\n                left: 'center'\n            },\n            tooltip: {\n                trigger: 'item',\n                formatter: (params) => {\n                    const item = filteredOperationsData.crops.flaeche_netto_per_crop[params.dataIndex];\n                    const value = typeof params.value === 'number' ? params.value : Number(params.value);\n                    const xmlSum = Number(item.xml_sum || 0);\n                    const acSum = Number(item.ac_sum || 0);\n                    const oedueSum = Number(item.oedue_sum || 0);\n                    const manualSum = Number(item.manual_sum || 0);\n                    return `${params.name}: ${value.toFixed(2)} ha (${params.percent}%)<br/>` +\n                           `XML: ${xmlSum.toFixed(2)} ha<br/>` +\n                           `AC: ${acSum.toFixed(2)} ha<br/>` +\n                           `ÖDÜ: ${oedueSum.toFixed(2)} ha<br/>` +\n                           `Manuell: ${manualSum.toFixed(2)} ha`;\n                }\n            },\n            legend: {\n                orient: 'vertical',\n                left: 'left',\n                type: 'scroll',\n                top: 50\n            },\n            series: [\n                {\n                    name: 'Nettofläche (ha)',\n                    type: 'pie',\n                    radius: ['40%', '70%'],\n                    avoidLabelOverlap: false,\n                    itemStyle: {\n                        borderRadius: 10,\n                        borderColor: '#fff',\n                        borderWidth: 2\n                    },\n                    label: {\n                        show: true,\n                        formatter: (params) => {\n                            const value = typeof params.value === 'number' ? params.value : Number(params.value);\n                            return `${params.name}\\n${value.toFixed(2)} ha (${params.percent}%)`;\n                        },\n                        fontSize: 11\n                    },\n                    emphasis: {\n                        label: {\n                            show: true,\n                            fontSize: 14,\n                            fontWeight: 'bold'\n                        }\n                    },\n                    labelLine: {\n                        show: true\n                    },\n                    data: filteredOperationsData.crops.flaeche_netto_per_crop.map(item => ({\n                        value: Number(item.flaeche_netto_sum),\n                        name: item.crop__name\n                    }))\n                }\n            ]\n        });\n\n        return () => {\n            operationsTypeChart.dispose();\n            operationsMonthChart.dispose();\n            cropsChart.dispose();\n            cropAreaChart.dispose();\n        };\n    }, [filteredOperationsData]);\n\n    // Excel export function\n    const handleExportToExcel = async () => {\n        try {\n            const farmIds = filteredFarms.map(f => f.id);\n            const params = new URLSearchParams();\n            if (farmIds.length > 0) {\n                params.append('farm_ids', farmIds.join(','));\n            }\n\n            const response = await api.get('/farm-kpis/export_excel/', {\n                params: params,\n                responseType: 'blob'\n            });\n\n            const url = window.URL.createObjectURL(new Blob([response.data]));\n            const link = document.createElement('a');\n            link.href = url;\n            \n            const contentDisposition = response.headers['content-disposition'];\n            let filename = 'Dashboard_Export.xlsx';\n            if (contentDisposition) {\n                const filenameMatch = contentDisposition.match(/filename=\"?(.+)\"?/);\n                if (filenameMatch) {\n                    filename = filenameMatch[1];\n                }\n            }\n            \n            link.setAttribute('download', filename);\n            document.body.appendChild(link);\n            link.click();\n            link.remove();\n            window.URL.revokeObjectURL(url);\n        } catch (err) {\n            console.error('Error exporting to Excel:', err);\n            alert('Fehler beim Exportieren der Daten');\n        }\n    };\n\n    const getActiveFiltersCount = () => {\n        let count = 0;\n        count += activeFilters.selectedFarms.length;\n        count += activeFilters.selectedYears.length;\n        count += activeFilters.selectedFeldstuecke.length;\n        count += activeFilters.selectedSchlaege.length;\n        count += activeFilters.selectedOperationTypes.length;\n        count += activeFilters.selectedCrops.length;\n        return count;\n    };\n\n    if (authLoading || (loading && !operationsData)) {\n        return (\n            <Container className=\"mt-5 text-center\">\n                <Spinner animation=\"border\" role=\"status\">\n                    <span className=\"visually-hidden\">Laden...</span>\n                </Spinner>\n            </Container>\n        );\n    }\n\n    if (!authLoading && !user?.is_superuser) {\n        return (\n            <Container className=\"mt-5\">\n                <Alert variant=\"danger\">\n                    <Alert.Heading>Zugriff verweigert</Alert.Heading>\n                    <p>Sie haben keine Berechtigung, auf dieses Dashboard zuzugreifen.</p>\n                </Alert>\n            </Container>\n        );\n    }\n\n    if (error) {\n        return (\n            <Container className=\"mt-5\">\n                <Alert variant=\"danger\">\n                    <Alert.Heading>Fehler</Alert.Heading>\n                    <p>{error}</p>\n                </Alert>\n            </Container>\n        );\n    }\n\n    if (!filteredOperationsData) {\n        return null;\n    }\n\n    return (\n        <Container fluid className=\"mt-4\">\n            <Row className=\"mb-4\">\n                <Col>\n                    <div className=\"d-flex justify-content-between align-items-center\">\n                        <h1 className=\"mb-0\">Dashboard</h1>\n                        <div className=\"d-flex gap-2\">\n                            <Button\n                                variant=\"outline-primary\"\n                                size=\"sm\"\n                                onClick={() => setShowFilterDrawer(true)}\n                                title=\"Filter\"\n                            >\n                                <i className=\"bi bi-funnel me-1\"></i>\n                                Filter\n                                {getActiveFiltersCount() > 0 && (\n                                    <span className=\"badge bg-secondary ms-1\">\n                                        {getActiveFiltersCount()}\n                                    </span>\n                                )}\n                            </Button>\n                            <Button\n                                variant=\"outline-success\"\n                                size=\"sm\"\n                                onClick={handleExportToExcel}\n                                title=\"Als Excel exportieren\"\n                            >\n                                <i className=\"bi bi-file-earmark-excel me-1\"></i>\n                                Excel Export\n                            </Button>\n                        </div>\n                    </div>\n                </Col>\n            </Row>\n\n            {/* Summary Cards - Only 2 KPIs */}\n            <Row className=\"mb-4\">\n                <Col md={6}>\n                    <Card className=\"text-center\">\n                        <Card.Body>\n                            <Card.Title>Unique Betriebe (mit Ernte)</Card.Title>\n                            <h2>{uniqueBetriebe}</h2>\n                            <small className=\"text-muted\">Betriebe mit mindestens einer Ernte-Maßnahme</small>\n                        </Card.Body>\n                    </Card>\n                </Col>\n                <Col md={6}>\n                    <Card className=\"text-center\">\n                        <Card.Body>\n                            <Card.Title>Fläche (ha)</Card.Title>\n                            <h2>{totalArea.toFixed(2)}</h2>\n                            <small className=\"text-muted\">Nur Schläge mit Ernte-Maßnahmen</small>\n                        </Card.Body>\n                    </Card>\n                </Col>\n            </Row>\n\n            {/* Charts */}\n            <Row className=\"mb-4\">\n                <Col md={6}>\n                    <Card>\n                        <Card.Body>\n                            <div id=\"operationsMonthChart\" style={{ width: '100%', height: '400px' }}></div>\n                        </Card.Body>\n                    </Card>\n                </Col>\n                <Col md={6}>\n                    <Card>\n                        <Card.Body>\n                            <div id=\"operationsTypeChart\" style={{ width: '100%', height: '400px' }}></div>\n                        </Card.Body>\n                    </Card>\n                </Col>\n            </Row>\n\n            <Row className=\"mb-4\">\n                <Col md={6}>\n                    <Card>\n                        <Card.Body>\n                            <div id=\"cropsChart\" style={{ width: '100%', height: '500px' }}></div>\n                        </Card.Body>\n                    </Card>\n                </Col>\n                <Col md={6}>\n                    <Card>\n                        <Card.Body>\n                            <div id=\"cropAreaChart\" style={{ width: '100%', height: '500px' }}></div>\n                        </Card.Body>\n                    </Card>\n                </Col>\n            </Row>\n\n            <FilterDrawer \n                show={showFilterDrawer}\n                onHide={() => setShowFilterDrawer(false)}\n                farms={farms}\n                onFilterApply={setActiveFilters}\n                onFilterClear={() => setActiveFilters({\n                    textSearch: '',\n                    selectedFarms: [],\n                    selectedYears: [],\n                    selectedFeldstuecke: [],\n                    selectedSchlaege: [],\n                    selectedOperationTypes: [],\n                    selectedCrops: []\n                })}\n                currentFilters={activeFilters}\n            />\n        </Container>\n    );\n};\n\nexport default AdminDashboard;\n","import React, { useEffect, useState, useMemo, useCallback } from 'react';\nimport {\n    Container, Row, Col, Card, Spinner, Alert, Button,\n    Table, Badge, Tabs, Tab, Form, InputGroup, Collapse,\n    Modal, ListGroup,\n} from 'react-bootstrap';\nimport { useSelector } from 'react-redux';\nimport { selectUser, selectAuthLoading } from '../auth/authSlice';\nimport api from '../utils/api';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst MATCH_LABELS = {\n    exact_betriebsnummer: { label: 'Exakt (Nr.)', variant: 'success' },\n    manual_match: { label: 'Manuell', variant: 'info' },\n    no_match: { label: 'Kein Match', variant: 'danger' },\n};\n\nconst STATUS_LABELS = {\n    SUCCESS: { label: 'Erfolgreich', variant: 'success' },\n    FAILED: { label: 'Fehlgeschlagen', variant: 'danger' },\n    PENDING: { label: 'Ausstehend', variant: 'secondary' },\n    PROCESSING: { label: 'Verarbeitung', variant: 'info' },\n    NO_PDF: { label: 'Kein PDF', variant: 'warning' },\n    SKIPPED: { label: 'Übersprungen', variant: 'secondary' },\n};\n\nconst fmtDate = (iso) => {\n    if (!iso) return '–';\n    try {\n        return new Date(iso).toLocaleString('de-AT', {\n            day: '2-digit', month: '2-digit', year: 'numeric',\n            hour: '2-digit', minute: '2-digit',\n        });\n    } catch {\n        return iso;\n    }\n};\n\nconst fmtArea = (ha) =>\n    ha != null ? Number(ha).toLocaleString('de-AT', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' ha' : '–';\n\n// Unique key for a participant row (Excel side)\nconst participantKey = (r) =>\n    `${r.participant_betriebsnummer || ''}__${r.participant_name || ''}`;\n\n// Unique key for a DB farm row\nconst dbFarmKey = (r) => r.db_hauptbetriebsnummer || r.db_farm_name || '';\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\nconst SummaryCards = ({ summary, overrideCounts }) => {\n    if (!summary) return null;\n    const cards = [\n        { title: 'Teilnehmer gesamt (Excel)', value: summary.total_participants, variant: 'primary', icon: 'bi-people-fill' },\n        { title: 'Gemeldet & Daten vorhanden', value: overrideCounts.declared_and_found, variant: 'success', icon: 'bi-check-circle-fill' },\n        { title: 'Gemeldet – keine Daten', value: overrideCounts.declared_not_found, variant: 'danger', icon: 'bi-x-circle-fill' },\n        { title: 'Daten vorhanden – nicht gemeldet', value: overrideCounts.found_not_declared, variant: 'warning', icon: 'bi-exclamation-triangle-fill' },\n        { title: 'Betriebe in DB gesamt', value: summary.total_db_farms, variant: 'secondary', icon: 'bi-database-fill' },\n    ];\n    return (\n        <Row className=\"mb-4 g-3\">\n            {cards.map((c) => (\n                <Col key={c.title} xs={12} sm={6} md={4} lg={2} xl={2}>\n                    <Card className={`text-center border-${c.variant} h-100`}>\n                        <Card.Body className=\"py-3\">\n                            <i className={`bi ${c.icon} text-${c.variant} fs-3 mb-2 d-block`}></i>\n                            <h3 className={`text-${c.variant} mb-1`}>{c.value}</h3>\n                            <small className=\"text-muted\">{c.title}</small>\n                        </Card.Body>\n                    </Card>\n                </Col>\n            ))}\n        </Row>\n    );\n};\n\nconst EmailLogsBadge = ({ logs }) => {\n    const [open, setOpen] = useState(false);\n    if (!logs || logs.length === 0) return <span className=\"text-muted\">–</span>;\n    const hasFailure = logs.some((l) => l.import_status === 'FAILED');\n    const variant = hasFailure ? 'danger' : 'success';\n    return (\n        <div>\n            <Button variant={`outline-${variant}`} size=\"sm\" onClick={() => setOpen(!open)} aria-expanded={open}>\n                <i className=\"bi bi-envelope me-1\"></i>{logs.length} Log{logs.length !== 1 ? 's' : ''}\n            </Button>\n            <Collapse in={open}>\n                <div className=\"mt-2\">\n                    {logs.map((log, i) => {\n                        const st = STATUS_LABELS[log.import_status] || { label: log.import_status, variant: 'secondary' };\n                        return (\n                            <div key={i} className=\"border rounded p-2 mb-1 bg-light\" style={{ fontSize: '0.78rem' }}>\n                                <div className=\"d-flex justify-content-between align-items-start flex-wrap gap-1\">\n                                    <span>\n                                        <Badge bg={st.variant} className=\"me-1\">{st.label}</Badge>\n                                        <strong>{log.sender_name || log.sender_email || '–'}</strong>\n                                    </span>\n                                    <span className=\"text-muted\">{fmtDate(log.received_datetime)}</span>\n                                </div>\n                                {log.attachment_filename && <div className=\"text-muted mt-1\"><i className=\"bi bi-paperclip me-1\"></i>{log.attachment_filename}</div>}\n                                {log.error_message && <div className=\"text-danger mt-1\"><i className=\"bi bi-exclamation-circle me-1\"></i>{log.error_message}</div>}\n                            </div>\n                        );\n                    })}\n                </div>\n            </Collapse>\n        </div>\n    );\n};\n\nconst DataBadges = ({ record }) => (\n    <div className=\"d-flex flex-wrap gap-1\">\n        {record.db_schlaege_count > 0\n            ? <Badge bg=\"success\"><i className=\"bi bi-grid me-1\"></i>{record.db_schlaege_count} Schläge</Badge>\n            : <Badge bg=\"secondary\">0 Schläge</Badge>}\n        {record.db_operations_count > 0\n            ? <Badge bg=\"success\"><i className=\"bi bi-tools me-1\"></i>{record.db_operations_count} Maßn.</Badge>\n            : <Badge bg=\"secondary\">0 Maßn.</Badge>}\n        {record.db_has_harvest\n            ? <Badge bg=\"success\"><i className=\"bi bi-check-circle me-1\"></i>Ernte ✓</Badge>\n            : <Badge bg=\"danger\"><i className=\"bi bi-x-circle me-1\"></i>Keine Ernte</Badge>}\n    </div>\n);\n\n// ---------------------------------------------------------------------------\n// Manual Mapping Modal – participant → DB farm\n// ---------------------------------------------------------------------------\nconst ManualMappingModal = ({ show, onHide, participant, allDbFarms, onMap }) => {\n    const [search, setSearch] = useState('');\n    const filtered = useMemo(() => {\n        if (!allDbFarms) return [];\n        if (!search) return allDbFarms.slice(0, 50);\n        const q = search.toLowerCase();\n        return allDbFarms.filter(\n            (f) => (f.farm_name || '').toLowerCase().includes(q) ||\n                (f.hauptbetriebsnummer || '').toLowerCase().includes(q) ||\n                (f.user_email || '').toLowerCase().includes(q)\n        ).slice(0, 50);\n    }, [allDbFarms, search]);\n\n    if (!participant) return null;\n    return (\n        <Modal show={show} onHide={onHide} size=\"lg\" centered>\n            <Modal.Header closeButton>\n                <Modal.Title>\n                    <i className=\"bi bi-link-45deg me-2\"></i>\n                    Manuell zuordnen: <strong>{participant.participant_name}</strong>\n                    <small className=\"text-muted ms-2\">({participant.participant_betriebsnummer})</small>\n                </Modal.Title>\n            </Modal.Header>\n            <Modal.Body>\n                <p className=\"text-muted small mb-3\">Wählen Sie den passenden Betrieb aus der Datenbank aus:</p>\n                <InputGroup className=\"mb-3\" size=\"sm\">\n                    <InputGroup.Text><i className=\"bi bi-search\"></i></InputGroup.Text>\n                    <Form.Control placeholder=\"Suche nach Name, Betriebsnummer, E-Mail…\" value={search} onChange={(e) => setSearch(e.target.value)} autoFocus />\n                    {search && <Button variant=\"outline-secondary\" onClick={() => setSearch('')}><i className=\"bi bi-x\"></i></Button>}\n                </InputGroup>\n                <ListGroup style={{ maxHeight: '400px', overflowY: 'auto' }}>\n                    {filtered.length === 0 && <ListGroup.Item className=\"text-muted text-center\">Keine Betriebe gefunden</ListGroup.Item>}\n                    {filtered.map((farm, i) => (\n                        <ListGroup.Item key={i} action onClick={() => { onMap(participant, farm); onHide(); }} className=\"d-flex justify-content-between align-items-start\">\n                            <div>\n                                <strong>{farm.farm_name || '–'}</strong>\n                                <small className=\"text-muted ms-2\">{farm.user_email}</small>\n                                <div className=\"mt-1\"><DataBadges record={farm} /></div>\n                            </div>\n                            <code className=\"text-nowrap ms-3\">{farm.hauptbetriebsnummer}</code>\n                        </ListGroup.Item>\n                    ))}\n                </ListGroup>\n            </Modal.Body>\n            <Modal.Footer>\n                <Button variant=\"secondary\" size=\"sm\" onClick={onHide}>Abbrechen</Button>\n            </Modal.Footer>\n        </Modal>\n    );\n};\n\n// ---------------------------------------------------------------------------\n// Manual Mapping Modal – DB farm → participant (for \"found not declared\" tab)\n// ---------------------------------------------------------------------------\nconst DbFarmMappingModal = ({ show, onHide, dbFarm, allParticipants, onMap }) => {\n    const [search, setSearch] = useState('');\n    const filtered = useMemo(() => {\n        if (!allParticipants) return [];\n        if (!search) return allParticipants.slice(0, 50);\n        const q = search.toLowerCase();\n        return allParticipants.filter(\n            (p) => (p.participant_name || '').toLowerCase().includes(q) ||\n                (p.participant_betriebsnummer || '').toLowerCase().includes(q)\n        ).slice(0, 50);\n    }, [allParticipants, search]);\n\n    if (!dbFarm) return null;\n    return (\n        <Modal show={show} onHide={onHide} size=\"lg\" centered>\n            <Modal.Header closeButton>\n                <Modal.Title>\n                    <i className=\"bi bi-link-45deg me-2\"></i>\n                    Betrieb zuordnen: <strong>{dbFarm.db_farm_name}</strong>\n                    <small className=\"text-muted ms-2\">({dbFarm.db_hauptbetriebsnummer})</small>\n                </Modal.Title>\n            </Modal.Header>\n            <Modal.Body>\n                <p className=\"text-muted small mb-3\">Wählen Sie den passenden Teilnehmer aus der Excel-Liste aus:</p>\n                <InputGroup className=\"mb-3\" size=\"sm\">\n                    <InputGroup.Text><i className=\"bi bi-search\"></i></InputGroup.Text>\n                    <Form.Control placeholder=\"Suche nach Name oder Betriebsnummer…\" value={search} onChange={(e) => setSearch(e.target.value)} autoFocus />\n                    {search && <Button variant=\"outline-secondary\" onClick={() => setSearch('')}><i className=\"bi bi-x\"></i></Button>}\n                </InputGroup>\n                <ListGroup style={{ maxHeight: '400px', overflowY: 'auto' }}>\n                    {filtered.length === 0 && <ListGroup.Item className=\"text-muted text-center\">Keine Teilnehmer gefunden</ListGroup.Item>}\n                    {filtered.map((p, i) => (\n                        <ListGroup.Item key={i} action onClick={() => { onMap(dbFarm, p); onHide(); }} className=\"d-flex justify-content-between align-items-start\">\n                            <div>\n                                <strong>{p.participant_name || '–'}</strong>\n                                {p.participant_kulturen && <small className=\"text-muted ms-2\">{p.participant_kulturen}</small>}\n                            </div>\n                            <code className=\"text-nowrap ms-3\">{p.participant_betriebsnummer}</code>\n                        </ListGroup.Item>\n                    ))}\n                </ListGroup>\n            </Modal.Body>\n            <Modal.Footer>\n                <Button variant=\"secondary\" size=\"sm\" onClick={onHide}>Abbrechen</Button>\n            </Modal.Footer>\n        </Modal>\n    );\n};\n\n// ---------------------------------------------------------------------------\n// Table: Declared (found + not-found share columns)\n// ---------------------------------------------------------------------------\nconst DeclaredTable = ({ records, searchText, onManualMap }) => {\n    const filtered = useMemo(() => {\n        if (!searchText) return records;\n        const q = searchText.toLowerCase();\n        return records.filter((r) =>\n            (r.participant_name || '').toLowerCase().includes(q) ||\n            (r.participant_betriebsnummer || '').toLowerCase().includes(q) ||\n            (r.db_farm_name || '').toLowerCase().includes(q) ||\n            (r.db_hauptbetriebsnummer || '').toLowerCase().includes(q) ||\n            (r.db_user_email || '').toLowerCase().includes(q) ||\n            (r.participant_kulturen || '').toLowerCase().includes(q)\n        );\n    }, [records, searchText]);\n\n    if (filtered.length === 0) return <Alert variant=\"info\">Keine Einträge gefunden.</Alert>;\n\n    return (\n        <div className=\"table-responsive\">\n            <Table hover size=\"sm\" className=\"align-middle\">\n                <thead className=\"table-dark\">\n                    <tr>\n                        <th>Teilnehmer Name</th>\n                        <th>Betriebsnr. (Excel)</th>\n                        <th>Kulturen</th>\n                        <th>Datenerfassung</th>\n                        <th>Match</th>\n                        <th>DB Betrieb</th>\n                        <th>DB Betriebsnr.</th>\n                        <th>DB E-Mail</th>\n                        <th>Jahre</th>\n                        <th>Fläche</th>\n                        <th>Daten</th>\n                        <th>E-Mail Logs</th>\n                        <th>Aktionen</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {filtered.map((r, i) => {\n                        const mq = MATCH_LABELS[r.match_quality] || { label: r.match_quality, variant: 'secondary' };\n                        return (\n                            <tr key={i} className={r.change_note ? 'table-info' : ''}>\n                                <td><strong>{r.participant_name || '–'}</strong></td>\n                                <td><code>{r.participant_betriebsnummer || '–'}</code></td>\n                                <td>\n                                    {r.participant_kulturen\n                                        ? r.participant_kulturen.split(',').map((k, ki) => (\n                                            <Badge key={ki} bg=\"info\" className=\"me-1 mb-1\" style={{ fontSize: '0.7rem' }}>{k.trim()}</Badge>\n                                        )) : '–'}\n                                </td>\n                                <td><Badge bg=\"secondary\" style={{ fontSize: '0.7rem' }}>{r.participant_datenerfassung || '–'}</Badge></td>\n                                <td><Badge bg={mq.variant}>{mq.label}</Badge></td>\n                                <td>{r.db_farm_name || <span className=\"text-muted\">–</span>}</td>\n                                <td>{r.db_hauptbetriebsnummer ? <code>{r.db_hauptbetriebsnummer}</code> : <span className=\"text-muted\">–</span>}</td>\n                                <td><small>{r.db_user_email || <span className=\"text-muted\">–</span>}</small></td>\n                                <td><small>{r.db_years?.length > 0 ? r.db_years.join(', ') : '–'}</small></td>\n                                <td><small>{r.db_total_area_ha > 0 ? fmtArea(r.db_total_area_ha) : '–'}</small></td>\n                                <td><DataBadges record={r} /></td>\n                                <td><EmailLogsBadge logs={r.email_import_logs} /></td>\n                                <td>\n                                    <div className=\"d-flex flex-column gap-1\">\n                                        <Button variant=\"outline-primary\" size=\"sm\" title=\"Manuell einem anderen Betrieb zuordnen\" onClick={() => onManualMap(r)}>\n                                            <i className=\"bi bi-link-45deg me-1\"></i>Neu zuordnen\n                                        </Button>\n                                        {r.change_note && (\n                                            <small className=\"text-info\" title={r.change_note}>\n                                                <i className=\"bi bi-pencil-fill me-1\"></i>{r.change_note}\n                                            </small>\n                                        )}\n                                    </div>\n                                </td>\n                            </tr>\n                        );\n                    })}\n                </tbody>\n            </Table>\n        </div>\n    );\n};\n\n// ---------------------------------------------------------------------------\n// Table: Found but not declared – with \"Neu zuordnen\" button\n// ---------------------------------------------------------------------------\nconst FoundNotDeclaredTable = ({ records, searchText, onManualMap }) => {\n    const filtered = useMemo(() => {\n        if (!searchText) return records;\n        const q = searchText.toLowerCase();\n        return records.filter((r) =>\n            (r.db_farm_name || '').toLowerCase().includes(q) ||\n            (r.db_hauptbetriebsnummer || '').toLowerCase().includes(q) ||\n            (r.db_user_email || '').toLowerCase().includes(q)\n        );\n    }, [records, searchText]);\n\n    if (filtered.length === 0) return <Alert variant=\"info\">Keine Einträge gefunden.</Alert>;\n\n    return (\n        <div className=\"table-responsive\">\n            <Table hover size=\"sm\" className=\"align-middle\">\n                <thead className=\"table-dark\">\n                    <tr>\n                        <th>DB Betrieb</th>\n                        <th>DB Betriebsnr.</th>\n                        <th>DB E-Mail</th>\n                        <th>Jahre</th>\n                        <th>Fläche</th>\n                        <th>Daten</th>\n                        <th>E-Mail Logs</th>\n                        <th>Aktionen</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {filtered.map((r, i) => (\n                        <tr key={i} className={r.change_note ? 'table-info' : ''}>\n                            <td><strong>{r.db_farm_name || '–'}</strong></td>\n                            <td><code>{r.db_hauptbetriebsnummer || '–'}</code></td>\n                            <td><small>{r.db_user_email || '–'}</small></td>\n                            <td><small>{r.db_years?.length > 0 ? r.db_years.join(', ') : '–'}</small></td>\n                            <td><small>{r.db_total_area_ha > 0 ? fmtArea(r.db_total_area_ha) : '–'}</small></td>\n                            <td><DataBadges record={r} /></td>\n                            <td><EmailLogsBadge logs={r.email_import_logs} /></td>\n                            <td>\n                                <div className=\"d-flex flex-column gap-1\">\n                                    <Button variant=\"outline-primary\" size=\"sm\" title=\"Einem Teilnehmer zuordnen\" onClick={() => onManualMap(r)}>\n                                        <i className=\"bi bi-link-45deg me-1\"></i>Neu zuordnen\n                                    </Button>\n                                    {r.change_note && (\n                                        <small className=\"text-info\" title={r.change_note}>\n                                            <i className=\"bi bi-pencil-fill me-1\"></i>{r.change_note}\n                                        </small>\n                                    )}\n                                </div>\n                            </td>\n                        </tr>\n                    ))}\n                </tbody>\n            </Table>\n        </div>\n    );\n};\n\n// ---------------------------------------------------------------------------\n// Table: Declared but NOT found – with manual mapping button\n// ---------------------------------------------------------------------------\nconst NotFoundTable = ({ records, searchText, onManualMap }) => {\n    const filtered = useMemo(() => {\n        if (!searchText) return records;\n        const q = searchText.toLowerCase();\n        return records.filter((r) =>\n            (r.participant_name || '').toLowerCase().includes(q) ||\n            (r.participant_betriebsnummer || '').toLowerCase().includes(q) ||\n            (r.participant_kulturen || '').toLowerCase().includes(q)\n        );\n    }, [records, searchText]);\n\n    if (filtered.length === 0) return <Alert variant=\"info\">Keine Einträge gefunden.</Alert>;\n\n    return (\n        <div className=\"table-responsive\">\n            <Table hover size=\"sm\" className=\"align-middle\">\n                <thead className=\"table-dark\">\n                    <tr>\n                        <th>Teilnehmer Name</th>\n                        <th>Betriebsnr. (Excel)</th>\n                        <th>Kulturen</th>\n                        <th>Datenerfassung</th>\n                        <th>E-Mail Logs</th>\n                        <th>Aktionen</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    {filtered.map((r, i) => (\n                        <tr key={i}>\n                            <td><strong>{r.participant_name || '–'}</strong></td>\n                            <td><code>{r.participant_betriebsnummer || '–'}</code></td>\n                            <td>\n                                {r.participant_kulturen\n                                    ? r.participant_kulturen.split(',').map((k, ki) => (\n                                        <Badge key={ki} bg=\"info\" className=\"me-1 mb-1\" style={{ fontSize: '0.7rem' }}>{k.trim()}</Badge>\n                                    )) : '–'}\n                            </td>\n                            <td><Badge bg=\"secondary\" style={{ fontSize: '0.7rem' }}>{r.participant_datenerfassung || '–'}</Badge></td>\n                            <td><EmailLogsBadge logs={r.email_import_logs} /></td>\n                            <td>\n                                <Button variant=\"outline-primary\" size=\"sm\" title=\"Manuell einem Betrieb zuordnen\" onClick={() => onManualMap(r)}>\n                                    <i className=\"bi bi-link-45deg me-1\"></i>Manuell zuordnen\n                                </Button>\n                            </td>\n                        </tr>\n                    ))}\n                </tbody>\n            </Table>\n        </div>\n    );\n};\n\n// ---------------------------------------------------------------------------\n// Main Page\n// ---------------------------------------------------------------------------\nconst ParticipationVerification = () => {\n    const user = useSelector(selectUser);\n    const authLoading = useSelector(selectAuthLoading);\n\n    const [loading, setLoading] = useState(false);\n    const [error, setError] = useState(null);\n    const [report, setReport] = useState(null);\n    const [searchText, setSearchText] = useState('');\n    const [exporting, setExporting] = useState(false);\n\n    // Overrides: participant-side (Excel → DB farm)\n    const [participantOverrides, setParticipantOverrides] = useState({});\n    // Overrides: DB-farm-side (DB farm → participant)\n    const [dbFarmOverrides, setDbFarmOverrides] = useState({});\n\n    // Modal state\n    const [mappingModal, setMappingModal] = useState({ show: false, participant: null });\n    const [dbMappingModal, setDbMappingModal] = useState({ show: false, dbFarm: null });\n\n    // All DB farms for the participant→farm picker\n    const allDbFarms = useMemo(() => {\n        if (!report) return [];\n        const seen = new Set();\n        const farms = [];\n        const addFarm = (r) => {\n            if (!r.db_hauptbetriebsnummer) return;\n            if (seen.has(r.db_hauptbetriebsnummer)) return;\n            seen.add(r.db_hauptbetriebsnummer);\n            farms.push({\n                farm_name: r.db_farm_name,\n                hauptbetriebsnummer: r.db_hauptbetriebsnummer,\n                user_email: r.db_user_email,\n                db_years: r.db_years,\n                db_schlaege_count: r.db_schlaege_count,\n                db_total_area_ha: r.db_total_area_ha,\n                db_operations_count: r.db_operations_count,\n                db_harvest_count: r.db_harvest_count,\n                db_has_harvest: r.db_has_harvest,\n                email_import_logs: r.email_import_logs,\n            });\n        };\n        report.declared_and_found.forEach(addFarm);\n        report.found_not_declared.forEach((r) => {\n            if (seen.has(r.db_hauptbetriebsnummer)) return;\n            seen.add(r.db_hauptbetriebsnummer);\n            farms.push({ farm_name: r.db_farm_name, hauptbetriebsnummer: r.db_hauptbetriebsnummer, user_email: r.db_user_email, db_years: r.db_years, db_schlaege_count: r.db_schlaege_count, db_total_area_ha: r.db_total_area_ha, db_operations_count: r.db_operations_count, db_harvest_count: r.db_harvest_count, db_has_harvest: r.db_has_harvest, email_import_logs: r.email_import_logs });\n        });\n        return farms.sort((a, b) => (a.farm_name || '').localeCompare(b.farm_name || ''));\n    }, [report]);\n\n    // All participants for the farm→participant picker\n    const allParticipants = useMemo(() => {\n        if (!report) return [];\n        return [\n            ...report.declared_and_found,\n            ...report.declared_not_found,\n        ].sort((a, b) => (a.participant_name || '').localeCompare(b.participant_name || ''));\n    }, [report]);\n\n    // Apply overrides to produce the three final lists\n    const { declaredAndFound, declaredNotFound, foundNotDeclared } = useMemo(() => {\n        if (!report) return { declaredAndFound: [], declaredNotFound: [], foundNotDeclared: [] };\n\n        const found = [];\n        const notFound = [];\n\n        // Participant-side overrides\n        report.declared_and_found.forEach((r) => {\n            const key = participantKey(r);\n            const override = participantOverrides[key];\n            if (override) {\n                const note = `Manuell geändert zu Betriebsnummer ${override.db_hauptbetriebsnummer} (${override.db_farm_name})`;\n                found.push({ ...r, ...override, match_quality: 'manual_match', change_note: note });\n            } else {\n                found.push(r);\n            }\n        });\n\n        report.declared_not_found.forEach((r) => {\n            const key = participantKey(r);\n            const override = participantOverrides[key];\n            if (override) {\n                const note = `Manuell zugeordnet zu Betriebsnummer ${override.db_hauptbetriebsnummer} (${override.db_farm_name})`;\n                found.push({ ...r, ...override, match_quality: 'manual_match', change_note: note });\n            } else {\n                notFound.push(r);\n            }\n        });\n\n        // DB-farm-side overrides: annotate farms that were mapped to a participant\n        const fnd = report.found_not_declared.map((r) => {\n            const key = dbFarmKey(r);\n            const override = dbFarmOverrides[key];\n            if (override) {\n                const note = `Manuell zugeordnet zu Teilnehmer ${override.participant_name} (${override.participant_betriebsnummer})`;\n                return { ...r, change_note: note, _mapped_participant: override };\n            }\n            return r;\n        });\n\n        return { declaredAndFound: found, declaredNotFound: notFound, foundNotDeclared: fnd };\n    }, [report, participantOverrides, dbFarmOverrides]);\n\n    const overrideCounts = useMemo(() => ({\n        declared_and_found: declaredAndFound.length,\n        declared_not_found: declaredNotFound.length,\n        found_not_declared: foundNotDeclared.length,\n    }), [declaredAndFound, declaredNotFound, foundNotDeclared]);\n\n    const totalOverrides = Object.keys(participantOverrides).length + Object.keys(dbFarmOverrides).length;\n\n    const fetchReport = async () => {\n        setLoading(true);\n        setError(null);\n        setParticipantOverrides({});\n        setDbFarmOverrides({});\n        try {\n            const res = await api.get('participation-verification/');\n            setReport(res.data);\n        } catch (err) {\n            console.error('Error fetching participation report:', err);\n            setError(err.response?.data?.detail || 'Fehler beim Laden des Berichts.');\n        } finally {\n            setLoading(false);\n        }\n    };\n\n    useEffect(() => {\n        if (user?.is_superuser) fetchReport();\n    }, [user]);\n\n    // Participant → DB farm mapping\n    const handleOpenManualMap = useCallback((record) => {\n        setMappingModal({ show: true, participant: record });\n    }, []);\n\n    const handleManualMap = useCallback((participant, farmData) => {\n        const key = participantKey(participant);\n        setParticipantOverrides((prev) => ({\n            ...prev,\n            [key]: {\n                db_farm_name: farmData.farm_name,\n                db_hauptbetriebsnummer: farmData.hauptbetriebsnummer,\n                db_user_email: farmData.user_email,\n                db_years: farmData.db_years || [],\n                db_schlaege_count: farmData.db_schlaege_count || 0,\n                db_total_area_ha: farmData.db_total_area_ha || 0,\n                db_operations_count: farmData.db_operations_count || 0,\n                db_harvest_count: farmData.db_harvest_count || 0,\n                db_has_harvest: farmData.db_has_harvest || false,\n                email_import_logs: farmData.email_import_logs || [],\n            },\n        }));\n    }, []);\n\n    // DB farm → participant mapping\n    const handleOpenDbMapping = useCallback((record) => {\n        setDbMappingModal({ show: true, dbFarm: record });\n    }, []);\n\n    const handleDbFarmMap = useCallback((dbFarm, participant) => {\n        const key = dbFarmKey(dbFarm);\n        setDbFarmOverrides((prev) => ({\n            ...prev,\n            [key]: {\n                participant_name: participant.participant_name,\n                participant_betriebsnummer: participant.participant_betriebsnummer,\n            },\n        }));\n    }, []);\n\n    // Export: POST the override-applied report to the backend\n    const handleExport = async () => {\n        setExporting(true);\n        try {\n            const exportReport = {\n                summary: {\n                    ...report.summary,\n                    declared_and_found: declaredAndFound.length,\n                    declared_not_found: declaredNotFound.length,\n                    found_not_declared: foundNotDeclared.length,\n                },\n                declared_and_found: declaredAndFound,\n                declared_not_found: declaredNotFound,\n                found_not_declared: foundNotDeclared,\n            };\n\n            const res = await api.post('participation-verification/export_excel/', exportReport, {\n                responseType: 'blob',\n            });\n            const url = window.URL.createObjectURL(new Blob([res.data]));\n            const link = document.createElement('a');\n            link.href = url;\n            const cd = res.headers['content-disposition'];\n            let filename = 'Teilnahme_Verifikation.xlsx';\n            if (cd) {\n                const m = cd.match(/filename=\"?(.+)\"?/);\n                if (m) filename = m[1];\n            }\n            link.setAttribute('download', filename);\n            document.body.appendChild(link);\n            link.click();\n            link.remove();\n            window.URL.revokeObjectURL(url);\n        } catch (err) {\n            console.error('Export error:', err);\n            alert('Fehler beim Exportieren.');\n        } finally {\n            setExporting(false);\n        }\n    };\n\n    // -----------------------------------------------------------------------\n    // Guards\n    // -----------------------------------------------------------------------\n    if (authLoading) return <Container className=\"mt-5 text-center\"><Spinner animation=\"border\" /></Container>;\n\n    if (!user?.is_superuser) {\n        return (\n            <Container className=\"mt-5\">\n                <Alert variant=\"danger\">\n                    <Alert.Heading>Zugriff verweigert</Alert.Heading>\n                    <p>Sie haben keine Berechtigung, auf diese Seite zuzugreifen.</p>\n                </Alert>\n            </Container>\n        );\n    }\n\n    // -----------------------------------------------------------------------\n    // Render\n    // -----------------------------------------------------------------------\n    return (\n        <Container fluid className=\"mt-4\">\n            {/* Header */}\n            <Row className=\"mb-3\">\n                <Col>\n                    <div className=\"d-flex justify-content-between align-items-center flex-wrap gap-2\">\n                        <div>\n                            <h1 className=\"mb-0\">\n                                <i className=\"bi bi-clipboard2-check me-2\"></i>Teilnahme-Verifikation\n                            </h1>\n                            <small className=\"text-muted\">Abgleich der gemeldeten Teilnehmer mit den vorhandenen Daten in der Datenbank</small>\n                        </div>\n                        <div className=\"d-flex gap-2 flex-wrap align-items-center\">\n                            {totalOverrides > 0 && (\n                                <Badge bg=\"info\" className=\"fs-6\">{totalOverrides} manuelle Korrekturen</Badge>\n                            )}\n                            <Button variant=\"outline-secondary\" size=\"sm\" onClick={fetchReport} disabled={loading}>\n                                <i className=\"bi bi-arrow-clockwise me-1\"></i>Aktualisieren\n                            </Button>\n                            <Button variant=\"outline-success\" size=\"sm\" onClick={handleExport} disabled={exporting || loading || !report}>\n                                {exporting\n                                    ? <><Spinner size=\"sm\" className=\"me-1\" />Exportiere…</>\n                                    : <><i className=\"bi bi-file-earmark-excel me-1\"></i>Excel Export</>}\n                            </Button>\n                        </div>\n                    </div>\n                </Col>\n            </Row>\n\n            {error && <Alert variant=\"danger\" dismissible onClose={() => setError(null)}>{error}</Alert>}\n\n            {loading && (\n                <div className=\"text-center py-5\">\n                    <Spinner animation=\"border\" />\n                    <p className=\"mt-2 text-muted\">Lade Bericht… (kann einige Sekunden dauern)</p>\n                </div>\n            )}\n\n            {!loading && report && (\n                <>\n                    <SummaryCards summary={report.summary} overrideCounts={overrideCounts} />\n\n                    <Row className=\"mb-3\">\n                        <Col md={5}>\n                            <InputGroup size=\"sm\">\n                                <InputGroup.Text><i className=\"bi bi-search\"></i></InputGroup.Text>\n                                <Form.Control\n                                    placeholder=\"Suche nach Name, Betriebsnummer, E-Mail…\"\n                                    value={searchText}\n                                    onChange={(e) => setSearchText(e.target.value)}\n                                />\n                                {searchText && <Button variant=\"outline-secondary\" onClick={() => setSearchText('')}><i className=\"bi bi-x\"></i></Button>}\n                            </InputGroup>\n                        </Col>\n                    </Row>\n\n                    <Tabs defaultActiveKey=\"found\" className=\"mb-3\" fill>\n                        {/* Tab 1: Declared AND found */}\n                        <Tab eventKey=\"found\" title={\n                            <span>\n                                <i className=\"bi bi-check-circle-fill text-success me-1\"></i>\n                                Gemeldet &amp; Daten vorhanden\n                                <Badge bg=\"success\" className=\"ms-2\">{overrideCounts.declared_and_found}</Badge>\n                            </span>\n                        }>\n                            <Card><Card.Body>\n                                <p className=\"text-muted small mb-3\">\n                                    Diese Betriebe haben sich als Teilnehmer gemeldet <strong>und</strong> es sind Daten in der Datenbank vorhanden.\n                                    Mit <strong>Neu zuordnen</strong> können Sie einen Eintrag einem anderen Betrieb zuordnen.\n                                    Manuell geänderte Zeilen sind <span className=\"badge bg-info\">blau</span> markiert.\n                                </p>\n                                <DeclaredTable records={declaredAndFound} searchText={searchText} onManualMap={handleOpenManualMap} />\n                            </Card.Body></Card>\n                        </Tab>\n\n                        {/* Tab 2: Declared but NOT found */}\n                        <Tab eventKey=\"missing\" title={\n                            <span>\n                                <i className=\"bi bi-x-circle-fill text-danger me-1\"></i>\n                                Gemeldet – keine Daten\n                                <Badge bg=\"danger\" className=\"ms-2\">{overrideCounts.declared_not_found}</Badge>\n                            </span>\n                        }>\n                            <Card><Card.Body>\n                                <p className=\"text-muted small mb-3\">\n                                    Diese Betriebe haben sich als Teilnehmer gemeldet, es sind jedoch <strong>keine Daten</strong> in der Datenbank vorhanden.\n                                    Mögliche Ursachen: falsche Betriebsnummer, Import fehlgeschlagen.\n                                    Sie können Einträge manuell einem Betrieb zuordnen.\n                                </p>\n                                <NotFoundTable records={declaredNotFound} searchText={searchText} onManualMap={handleOpenManualMap} />\n                            </Card.Body></Card>\n                        </Tab>\n\n                        {/* Tab 3: Found but NOT declared */}\n                        <Tab eventKey=\"extra\" title={\n                            <span>\n                                <i className=\"bi bi-exclamation-triangle-fill text-warning me-1\"></i>\n                                Daten vorhanden – nicht gemeldet\n                                <Badge bg=\"warning\" text=\"dark\" className=\"ms-2\">{overrideCounts.found_not_declared}</Badge>\n                            </span>\n                        }>\n                            <Card><Card.Body>\n                                <p className=\"text-muted small mb-3\">\n                                    Diese Betriebe haben Daten in der Datenbank, sind aber <strong>nicht in der Teilnehmerliste</strong> (Excel) vorhanden.\n                                    Mit <strong>Neu zuordnen</strong> können Sie einen Betrieb einem Teilnehmer zuordnen – die Änderung wird im Excel-Export vermerkt.\n                                </p>\n                                <FoundNotDeclaredTable records={foundNotDeclared} searchText={searchText} onManualMap={handleOpenDbMapping} />\n                            </Card.Body></Card>\n                        </Tab>\n                    </Tabs>\n                </>\n            )}\n\n            {/* Participant → DB farm modal */}\n            <ManualMappingModal\n                show={mappingModal.show}\n                onHide={() => setMappingModal({ show: false, participant: null })}\n                participant={mappingModal.participant}\n                allDbFarms={allDbFarms}\n                onMap={handleManualMap}\n            />\n\n            {/* DB farm → participant modal */}\n            <DbFarmMappingModal\n                show={dbMappingModal.show}\n                onHide={() => setDbMappingModal({ show: false, dbFarm: null })}\n                dbFarm={dbMappingModal.dbFarm}\n                allParticipants={allParticipants}\n                onMap={handleDbFarmMap}\n            />\n        </Container>\n    );\n};\n\nexport default ParticipationVerification;\n","import React, { useState } from 'react';\nimport api from '../utils/api';\n\nconst OeduePdfImport = () => {\n  const [files, setFiles] = useState([]);\n  const [busy, setBusy] = useState(false);\n  const [result, setResult] = useState(null);\n  const [error, setError] = useState(null);\n\n  const onSubmit = async (e) => {\n    e.preventDefault();\n    setError(null);\n    setResult(null);\n\n    if (!files || files.length === 0) {\n      setError({ message: 'Bitte mindestens eine PDF auswählen.' });\n      return;\n    }\n\n    try {\n      setBusy(true);\n      const formData = new FormData();\n      // Send as a multi-file list; backend also accepts pdf_file for backwards compatibility.\n      files.forEach((f) => formData.append('pdf_files', f));\n\n      // IMPORTANT: use raw axios to send multipart\n      const res = await api.post('/oedue-pdf-import/upload/', formData, {\n        headers: {\n          'Content-Type': 'multipart/form-data',\n        },\n        // The PDF parsing + bulk upsert can take a while for many files.\n        timeout: 5 * 60 * 1000, // 5 minutes\n      });\n      setResult(res.data);\n    } catch (err) {\n      setError(err?.response?.data || { message: err?.message || 'Upload fehlgeschlagen' });\n    } finally {\n      setBusy(false);\n    }\n  };\n\n  return (\n    <div className=\"container py-4\">\n      <div className=\"row justify-content-center\">\n        <div className=\"col-12 col-lg-8\">\n          <h1 className=\"h3 mb-3\">ÖDÜ PDF Import</h1>\n          <p className=\"text-muted\">\n            Lade ein oder mehrere <strong>Schlagblatt</strong>-PDFs hoch. Der Import erstellt Betrieb / Feldstücke /\n            Schläge und erzeugt Maßnahmen best-effort.\n          </p>\n\n          <form onSubmit={onSubmit} className=\"card\">\n            <div className=\"card-body\">\n              <div className=\"mb-3\">\n                <label htmlFor=\"pdf\" className=\"form-label\">PDF Datei</label>\n                <input\n                  id=\"pdf\"\n                  type=\"file\"\n                  accept=\"application/pdf\"\n                  className=\"form-control\"\n                  multiple\n                  onChange={(e) => setFiles(Array.from(e.target.files || []))}\n                  disabled={busy}\n                />\n                <div className=\"form-text\">\n                  {files.length > 0 ? `${files.length} Datei(en) ausgewählt.` : 'Keine Datei ausgewählt.'}\n                </div>\n              </div>\n\n              <button className=\"btn btn-primary\" type=\"submit\" disabled={busy || files.length === 0}>\n                {busy ? 'Upload läuft…' : 'Upload & Import starten'}\n              </button>\n            </div>\n          </form>\n\n          {result && (\n            <div className=\"alert alert-success mt-3\" role=\"alert\">\n              <div className=\"fw-bold mb-2\">Import erfolgreich</div>\n              <pre className=\"mb-0\" style={{ whiteSpace: 'pre-wrap' }}>{JSON.stringify(result, null, 2)}</pre>\n            </div>\n          )}\n\n          {error && (\n            <div className=\"alert alert-danger mt-3\" role=\"alert\">\n              <div className=\"fw-bold mb-2\">Import fehlgeschlagen</div>\n              <pre className=\"mb-0\" style={{ whiteSpace: 'pre-wrap' }}>{JSON.stringify(error, null, 2)}</pre>\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default OeduePdfImport;\n","import React, { useState } from 'react';\nimport api from '../utils/api';\n\nconst FarmdokPdfImport = () => {\n  const [files, setFiles] = useState([]);\n  const [busy, setBusy] = useState(false);\n  const [result, setResult] = useState(null);\n  const [error, setError] = useState(null);\n\n  const onSubmit = async (e) => {\n    e.preventDefault();\n    setError(null);\n    setResult(null);\n\n    if (!files || files.length === 0) {\n      setError({ message: 'Bitte mindestens eine PDF auswählen.' });\n      return;\n    }\n\n    try {\n      setBusy(true);\n      const formData = new FormData();\n      // Send as a multi-file list; backend also accepts pdf_file for backwards compatibility.\n      files.forEach((f) => formData.append('pdf_files', f));\n\n      // IMPORTANT: use raw axios to send multipart\n      const res = await api.post('/farmdok-pdf-import/upload/', formData, {\n        headers: {\n          'Content-Type': 'multipart/form-data',\n        },\n        // The PDF parsing + bulk upsert can take a while for many files.\n        timeout: 5 * 60 * 1000, // 5 minutes\n      });\n      setResult(res.data);\n    } catch (err) {\n      setError(err?.response?.data || { message: err?.message || 'Upload fehlgeschlagen' });\n    } finally {\n      setBusy(false);\n    }\n  };\n\n  return (\n    <div className=\"container py-4\">\n      <div className=\"row justify-content-center\">\n        <div className=\"col-12 col-lg-8\">\n          <h1 className=\"h3 mb-3\">Farmdok PDF Import</h1>\n          <p className=\"text-muted\">\n            Lade ein oder mehrere <strong>Farmdok Schlagblatt</strong> oder <strong>Produktionsprotokoll</strong>-PDFs hoch. \n            Der Import erstellt Betrieb / Feldstücke / Schläge und erzeugt Maßnahmen best-effort.\n          </p>\n\n          <div className=\"alert alert-info mb-3\">\n            <h6 className=\"alert-heading\">Unterstützte PDF-Typen:</h6>\n            <ul className=\"mb-0\">\n              <li><strong>Schlagblatt:</strong> Enthält detaillierte Informationen zu einem Schlag</li>\n              <li><strong>Produktionsprotokoll:</strong> Enthält Produktionsdaten und Maßnahmen</li>\n            </ul>\n          </div>\n\n          <form onSubmit={onSubmit} className=\"card\">\n            <div className=\"card-body\">\n              <div className=\"mb-3\">\n                <label htmlFor=\"pdf\" className=\"form-label\">PDF Datei(en)</label>\n                <input\n                  id=\"pdf\"\n                  type=\"file\"\n                  accept=\"application/pdf\"\n                  className=\"form-control\"\n                  multiple\n                  onChange={(e) => setFiles(Array.from(e.target.files || []))}\n                  disabled={busy}\n                />\n                <div className=\"form-text\">\n                  {files.length > 0 ? `${files.length} Datei(en) ausgewählt.` : 'Keine Datei ausgewählt.'}\n                </div>\n              </div>\n\n              <button className=\"btn btn-primary\" type=\"submit\" disabled={busy || files.length === 0}>\n                {busy ? 'Upload läuft…' : 'Upload & Import starten'}\n              </button>\n            </div>\n          </form>\n\n          {result && (\n            <div className=\"alert alert-success mt-3\" role=\"alert\">\n              <div className=\"fw-bold mb-2\">Import erfolgreich</div>\n              <div className=\"mb-2\">\n                <strong>Zusammenfassung:</strong>\n                <ul>\n                  <li>Gruppen gesamt: {result.summary?.groups_total || 0}</li>\n                  <li>Erfolgreich importiert: {result.summary?.groups_imported || 0}</li>\n                  <li>Fehlgeschlagen: {result.summary?.groups_failed || 0}</li>\n                </ul>\n              </div>\n              <details>\n                <summary className=\"cursor-pointer\">Details anzeigen</summary>\n                <pre className=\"mb-0 mt-2\" style={{ whiteSpace: 'pre-wrap', fontSize: '0.85rem' }}>\n                  {JSON.stringify(result, null, 2)}\n                </pre>\n              </details>\n            </div>\n          )}\n\n          {error && (\n            <div className=\"alert alert-danger mt-3\" role=\"alert\">\n              <div className=\"fw-bold mb-2\">Import fehlgeschlagen</div>\n              <pre className=\"mb-0\" style={{ whiteSpace: 'pre-wrap' }}>{JSON.stringify(error, null, 2)}</pre>\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default FarmdokPdfImport;\n","export default \"__VITE_ASSET__BzKZOj2___\"","export default \"__VITE_ASSET__BWnH7VK9__\"","export default \"__VITE_ASSET__CI8JClIE__\"","export default \"__VITE_ASSET__BEEGL8vl__\"","export default \"__VITE_ASSET__CP9MNpij__\"","export default \"__VITE_ASSET__qcEn0PQf__\"","export default \"__VITE_ASSET__DkjBCcCA__\"","export default \"__VITE_ASSET__BkQrvMGD__\"","export default \"__VITE_ASSET__CqELE8Wt__\"","export default \"__VITE_ASSET__D$XhKDZb__\"","export default \"__VITE_ASSET__COAkJ8Ka__\"","export default \"__VITE_ASSET__CeubHzYB__\"","export default \"__VITE_ASSET__C1j2CfS___\"","export default \"__VITE_ASSET__28ki2r7P__\"","export default \"__VITE_ASSET__Dga5CqSK__\"","export default \"__VITE_ASSET__D89YwJ1H__\"","export default \"__VITE_ASSET__CVaWCjmC__\"","export default \"__VITE_ASSET__BVwOkPBW__\"","export default \"__VITE_ASSET__D$KoyUd6__\"","import React, { useState, useEffect } from 'react';\nimport { Modal, Button, Spinner, Nav, Container } from 'react-bootstrap';\nimport { getOperationIcon } from '../utils/operationIcons';\nimport FarmIcon from '../../icons/landwirtschaft.svg';\nimport MainOverviewScreenshot from '../../docs/screenshots/main-overview.png';\nimport CreateFarmScreenshot from '../../docs/screenshots/betrieb-erstellen.png';\nimport EditFarmScreenshot from '../../docs/screenshots/betrieb-bearbeiten.png';\nimport AddFarmYearScreenshot from '../../docs/screenshots/erntejahr-hinzufuegen.png';\nimport AddFeldstueckScreenshot from '../../docs/screenshots/feldstueck-hinzufuegen.png';\nimport AddFeldstueckScreenshot2 from '../../docs/screenshots/feldstueck-hinzufuegen-2.png';\nimport AddSchlagScreenshot from '../../docs/screenshots/schlag-hinzufuegen.png';\nimport AddSchlagScreenshot2 from '../../docs/screenshots/schlag-hinzufuegen-2.png';\nimport EditSchlagScreenshotKarte from '../../docs/screenshots/schlag-bearbeiten-karte.png';\nimport EditSchlagScreenshotLUC from '../../docs/screenshots/schlag-bearbeiten-luc.png';\nimport AddMassnahmeScreenshotMassnahmentyp from '../../docs/screenshots/massnahme-erfassen-massnahmentyp.png';\nimport AddMassnahmeScreenshotDatumKraftstoff from '../../docs/screenshots/massnahme-erfassen-datum-kraftstoff.png';\nimport AddMassnahmeScreenshotAussaat from '../../docs/screenshots/massnahme-erfassen-aussaat.png';\nimport AddMassnahmeScreenshotBeregnung from '../../docs/screenshots/massnahme-erfassen-beregnung.png';\nimport AddMassnahmeScreenshotBodenbearbeitung from '../../docs/screenshots/massnahme-erfassen-bodenbearbeitung.png';\nimport AddMassnahmeScreenshotDuengung from '../../docs/screenshots/massnahme-erfassen-duengung.png';\nimport AddMassnahmeScreenshotPflanzenschutz from '../../docs/screenshots/massnahme-erfassen-pflanzenschutz.png';\nimport AddMassnahmeScreenshotErnte from '../../docs/screenshots/massnahme-erfassen-ernte.png';\nimport AddMassnahmeScreenshotZusammenfassung from '../../docs/screenshots/massnahme-erfassen-zusammenfassung.png';\nimport AddMassnahmeScreenshotSchlag from '../../docs/screenshots/massnahme-erfassen-schlag.png';\n\n/**\n * UserManual Component\n * \n * Displays the user manual markdown file in a modal or as a standalone page.\n * \n * SETUP INSTRUCTIONS:\n * 1. Install react-markdown: npm install react-markdown remark-gfm\n * 2. Import and use this component in your app\n * \n * For now, this component renders the manual content directly.\n * Once react-markdown is installed, uncomment the markdown rendering code.\n */\n\n// Manual content sections for navigation\nconst SECTIONS = [\n  // { id: 'einfuehrung', title: 'Einführung' },\n  // { id: 'erste-schritte', title: 'Erste Schritte' },\n  { id: 'betriebsverwaltung', title: 'Betriebsverwaltung' },\n  { id: 'feldstuecke-schlaege', title: 'Feldstücke & Schläge' },\n  { id: 'bewirtschaftung', title: 'Bewirtschaftung' },\n  { id: 'kartenansicht', title: 'Kartenansicht' },\n  // { id: 'import-export', title: 'Import & Export' },\n  // { id: 'einstellungen', title: 'Einstellungen' },\n  // { id: 'faq', title: 'FAQ' },\n  { id: 'polygon-editor', title: 'Polygone bearbeiten'},\n  { id: 'support', title: 'Support' },\n];\n\n/**\n * UserManualModal - Displays the user manual in a modal dialog\n */\nexport const UserManualModal = ({ show, onHide }) => {\n  const [activeSection, setActiveSection] = useState('einfuehrung');\n  const [loading, setLoading] = useState(false);\n\n  return (\n    <Modal show={show} onHide={onHide} size=\"xl\" scrollable>\n      <Modal.Header closeButton>\n        <Modal.Title>\n          <i className=\"bi bi-book me-2\"></i>\n          Benutzerhandbuch\n        </Modal.Title>\n      </Modal.Header>\n      <Modal.Body className=\"p-0\" style={{ height: '70vh' }}>\n        <div className=\"d-flex h-100\">\n          {/* Sidebar Navigation */}\n          <div className=\"border-end bg-light\" style={{ width: '250px', overflowY: 'auto' }}>\n            <Nav className=\"flex-column p-3\">\n              {SECTIONS.map((section) => (\n                <Nav.Link\n                  key={section.id}\n                  href={`#${section.id}`}\n                  active={activeSection === section.id}\n                  onClick={(e) => {\n                    e.preventDefault();\n                    setActiveSection(section.id);\n                    document.getElementById(section.id)?.scrollIntoView({ behavior: 'smooth' });\n                  }}\n                  className=\"text-dark\"\n                >\n                  {section.title}\n                </Nav.Link>\n              ))}\n            </Nav>\n          </div>\n          \n          {/* Content Area */}\n          <div className=\"flex-grow-1 p-4\" style={{ overflowY: 'auto' }}>\n            {loading ? (\n              <div className=\"text-center py-5\">\n                <Spinner animation=\"border\" role=\"status\">\n                  <span className=\"visually-hidden\">Laden...</span>\n                </Spinner>\n              </div>\n            ) : (\n              <UserManualContent />\n            )}\n          </div>\n        </div>\n      </Modal.Body>\n      <Modal.Footer>\n        <Button variant=\"secondary\" onClick={onHide}>\n          Schließen\n        </Button>\n      </Modal.Footer>\n    </Modal>\n  );\n};\n\n/**\n * UserManualContent - The actual content of the user manual\n * This can be replaced with markdown rendering once react-markdown is installed\n */\nconst UserManualContent = () => {\n  return (\n    <div className=\"user-manual-content\">\n      {/* Einführung */}\n      <section id=\"einfuehrung\">\n        <h1>Cultivate - Benutzerhandbuch</h1>\n        <p className=\"lead\">Landwirtschaftliche Betriebsverwaltung leicht gemacht</p>\n        <hr />\n        \n        <p>\n          Willkommen bei <strong>Cultivate</strong> – Ihrer umfassenden Lösung für die digitale \n          Verwaltung landwirtschaftlicher Betriebe. Diese Anwendung unterstützt Sie bei:\n        </p>\n        <ul>\n          <li>Verwaltung von:</li>\n            <ul style={{ listStyle: 'none' }}>\n              <li>\n                <img\n                  src={FarmIcon}\n                  alt=\"Betrieb\"\n                  className=\"me-2\"\n                  style={{\n                    width: '20px',\n                    height: '20px',\n                  }}\n                />\n                Betrieben\n              </li>\n              <li>\n                <i className=\"bi bi-calendar3 me-2\" style={{ color: '#009e3c' }}></i>\n                Erntejahren\n              </li>\n              <li>\n                <i className=\"bi bi-pin-map me-2\" style={{ color: '#009e3c' }}></i>\n                Feldstücken\n              </li>\n              <li>\n                <i className=\"bi bi-grid-3x3 me-2\" style={{ color: '#009e3c' }}></i>\n                Schlägen <i className=\"bi bi-arrow-right\" stlye={{ color: '#009e3c' }}></i> Dokumentation von Bewirtschaftungsmaßnahmen:\n              </li>\n                <ul style={{ listStyle: 'none' }}>\n                  <li>\n                    <img \n                      src={getOperationIcon(\"Bodenbearbeitung\")}\n                      alt=\"Bodenbearbeitung\"\n                      className=\"me-2\"\n                      style={{ width: '20px', height: '20px' }}\n                    >\n                    </img>\n                    Bodenbearbeitung\n                  </li>\n                  <li>\n                    <img \n                      src={getOperationIcon(\"Aussaat\")}\n                      style={{ marginRight: '5px', width: '20px', height: '20px' }}\n                    >\n                    </img>\n                    Aussaat (Zwischen- und Hauptfrucht)\n                  </li>\n                  <li>\n                    <img \n                      src={getOperationIcon(\"Düngung\")}\n                      style={{ marginRight: '5px', width: '20px', height: '20px' }}\n                    >\n                    </img>\n                    Düngung\n                  </li>\n                  <li>\n                    <img \n                      src={getOperationIcon(\"Pflanzenschutz\")}\n                      style={{ marginRight: '5px', width: '20px', height: '20px' }}\n                    >\n                    </img>\n                    Pflanzenschutz\n                  </li>\n                  <li>\n                    <img \n                      src={getOperationIcon(\"Beregnung\")}\n                      style={{ marginRight: '5px', width: '20px', height: '20px' }}\n                    >\n                    </img>\n                    Beregnung\n                  </li>\n                  <li>\n                    <img \n                      src={getOperationIcon(\"Ernte\")}\n                      style={{ marginRight: '5px', width: '20px', height: '20px' }}\n                    >\n                    </img>\n                    Ernte\n                  </li>\n                </ul>\n            </ul>\n          <li><i className=\"bi bi-map me-2\" style={{ color: '#009e3c' }}></i>Visualisierung Ihrer Flächen auf interaktiven Karten</li>\n          <li><i className=\"bi bi-upload me-2\" style={{ color: '#009e3c' }}></i>Import von eAMA XML Datensätzen</li>\n        </ul>\n        \n        {/* Main Overview Screenshot */}\n        <div className=\"my-4\">\n          <figure className=\"figure\">\n            <img \n              src={MainOverviewScreenshot} \n              alt=\"Hauptansicht der Anwendung\" \n              className=\"figure-img img-fluid rounded border shadow-sm\"\n              style={{ maxWidth: '100%' }}\n            />\n            <figcaption className=\"figure-caption text-center mt-2\">\n              <strong>Abbildung 1:</strong> Hauptansicht der Cultivate Anwendung mit Betriebsübersicht\n            </figcaption>\n          </figure>\n        </div>\n      </section>\n\n      {/* Erste Schritte */}\n      {/* <section id=\"erste-schritte\" className=\"mt-5\">\n        <h2>Erste Schritte</h2>\n        <hr />\n        \n        <h3>Anmeldung</h3>\n        <ol>\n          <li>Öffnen Sie die Anwendung in Ihrem Browser</li>\n          <li>Geben Sie Ihre Zugangsdaten ein:\n            <ul>\n              <li><strong>E-Mail-Adresse</strong></li>\n              <li><strong>Passwort</strong></li>\n            </ul>\n          </li>\n          <li>Klicken Sie auf <strong>\"Anmelden\"</strong></li>\n        </ol>\n        \n        <div className=\"alert alert-info\">\n          <i className=\"bi bi-lightbulb me-2\"></i>\n          <strong>Tipp:</strong> Falls Sie Ihr Passwort vergessen haben, klicken Sie auf \n          \"Passwort vergessen\" und folgen Sie den Anweisungen.\n        </div>\n\n        <div className=\"screenshot-placeholder bg-light border rounded p-4 text-center my-3\">\n          <i className=\"bi bi-image text-muted\" style={{ fontSize: '3rem' }}></i>\n          <p className=\"text-muted mb-0\">Screenshot: Anmeldeseite</p>\n          <small className=\"text-muted\">Bild: login.png</small>\n        </div>\n\n\n      </section> */}\n      <section id=\"legende\" className=\"mt-5\">\n        <h2>Zeichenerklärung</h2>\n        <ul style={{listStyle: 'none', color: 'black'}}>\n          <li><i className=\"bi bi-arrows-collapse me-3\"></i>Einklappen</li>\n          <li><i className=\"bi bi-arrows-expand me-3\"></i>Ausklappen</li>\n          <li><i className=\"bi bi-three-dots-vertical me-3\"></i>Untermenü öffnen</li>\n          <li>\n            <img\n              src={FarmIcon}\n              alt=\"Betrieb\"\n              className=\"me-3\"\n              style={{\n                width: '20px',\n                height: '20px',\n                filter: 'brightness(0)'\n              }}\n            />\n            Betrieb\n          </li>\n          <li><i className=\"bi bi-calendar3 me-3\"></i>Erntejahr</li>\n          <li><i className=\"bi bi-pin-map me-3\"></i>Feldstück</li>\n          <li><i className=\"bi bi-grid-3x3 me-3\"></i>Schlag</li>\n          <li><i className=\"bi bi-lightning me-3\"></i>Maßnahme</li>\n          <li><i className=\"bi bi-list-ul me-3\"></i>Listenansicht</li>\n          <li><i className=\"bi bi-map me-3\"></i>Kartenansicht</li>\n          <li><i className=\"bi bi-upload me-3\"></i>XML Upload</li>\n          <li><i className=\"bi bi-plus-square me-3\"></i>hinzufügen</li>\n          <li><i className=\"bi bi-pencil-square me-3\"></i>bearbeiten</li>\n          <li><i className=\"bi bi-x-square me-3\"></i>löschen</li>\n          <li><i className=\"bi bi-funnel me-3\"></i>Filter</li>\n          <li><i className=\"bi bi-file-earmark-text me-3\"></i>Datenblatt</li>\n          <li><i className=\"bi bi-flower2 me-3\"></i>Nutzungsart / Kultur</li>\n          <li>\n            <img \n              src={getOperationIcon(\"Bodenbearbeitung\")}\n              alt=\"Bodenbearbeitung\"\n              className=\"me-2\"\n              style={{ width: '20px', height: '20px', filter: 'brightness(0)' }}\n            >\n            </img>\n            Bodenbearbeitung\n          </li>\n          <li>\n            <img \n              src={getOperationIcon(\"Aussaat\")}\n              className=\"me-2\"\n              style={{ marginRight: '5px', width: '20px', height: '20px', filter: 'brightness(0)' }}\n            >\n            </img>\n            Aussaat (Zwischen- und Hauptfrucht)\n          </li>\n          <li>\n            <img \n              src={getOperationIcon(\"Düngung\")}\n              className=\"me-2\"\n              style={{ marginRight: '5px', width: '20px', height: '20px', filter: 'brightness(0)' }}\n            >\n            </img>\n            Düngung\n          </li>\n          <li>\n            <img \n              src={getOperationIcon(\"Pflanzenschutz\")}\n              className=\"me-2\"\n              style={{ marginRight: '5px', width: '20px', height: '20px', filter: 'brightness(0)' }}\n            >\n            </img>\n            Pflanzenschutz\n          </li>\n          <li>\n            <img \n              src={getOperationIcon(\"Beregnung\")}\n              className=\"me-2\"\n              style={{ marginRight: '5px', width: '20px', height: '20px', filter: 'brightness(0)' }}\n            >\n            </img>\n            Beregnung\n          </li>\n          <li>\n            <img \n              src={getOperationIcon(\"Ernte\")}\n              className=\"me-2\"\n              style={{ marginRight: '5px', width: '20px', height: '20px', filter: 'brightness(0)' }}\n            >\n            </img>\n            Ernte\n          </li>\n        </ul>\n      </section>\n      {/* Betriebsverwaltung */}\n      <section id=\"betriebsverwaltung\" className=\"mt-5\">\n        <h2>Betriebsverwaltung</h2>\n        <hr />\n        <h3>XML Import (eAMA XML)</h3>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-upload\"></i></strong> Symbol oder <strong>XML-Import</strong></li>\n          <li>Wählen Sie den Tab <strong>Einzelne Datei</strong> oder <strong>Mehrere Dateien</strong></li>\n          <li>Ziehen Sie eine gültige eAMA XML Datei in den Upload Bereich oder wählen Sie durch Klick auf <strong>Datei auswählen</strong> eine Datei aus</li>\n          <li>Klicken Sie auf <strong>Import starten</strong></li>\n        </ol>\n        \n        <h3>Betrieb manuell erstellen</h3>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-plus-square\"></i></strong> Symbol oder <strong>Betrieb erstellen</strong></li>\n          <li>Füllen Sie die erforderlichen Felder aus:\n            <ul>\n              <li>Hauptbetriebsnummer</li>\n              <li>BBK-Nummer (optional)</li>\n              <li>Betriebsname (optional)</li>\n              <li>Bewirtschaftungsart (optional)\n                <ul>\n                  <li>Bio</li>\n                  <li>Konventionell</li>\n                </ul>\n              </li>\n              <li>Bevorzugter Kraftstoff (optional)\n                <ul>\n                  <li>Diesel</li>\n                  <li>BIO Diesel</li>\n                  <li>HVO Diesel</li>\n                </ul>\n              </li>\n              <li>Adresse (optional)</li>\n              <li>Produzentennummern je Kultur (optional)</li>\n            </ul>\n          </li>\n          <li>Klicken Sie auf <strong>\"Speichern\"</strong></li>\n        </ol>\n        <figure className=\"figure\">\n          <img \n            src={CreateFarmScreenshot} \n            alt=\"Berieb erstellen\" \n            className=\"figure-img img-fluid rounded border shadow-sm\"\n            style={{ maxWidth: '100%' }}\n          />\n          <figcaption className=\"figure-caption text-center mt-2\">\n            <strong>Abbildung 2:</strong> Betrieb erstellen\n          </figcaption>\n        </figure>\n\n\n        <h3>Betrieb bearbeiten</h3>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-three-dots-vertical\"></i></strong> Symbol neben dem Betrieb in der Liste</li>\n          <li>Wählen Sie <strong><i className=\"bi bi-pencil-square\"></i> Bearbeiten</strong></li>\n          <li>nehmen Sie die gewünschten Änderungen vor und bestätigen Sie mit Klick auf <strong>Speichern</strong></li>\n        </ol>\n        <figure className=\"figure\">\n          <img \n            src={EditFarmScreenshot} \n            alt=\"Berieb bearbeiten\" \n            className=\"figure-img img-fluid rounded border shadow-sm\"\n            style={{ maxWidth: '100%' }}\n          />\n          <figcaption className=\"figure-caption text-center mt-2\">\n            <strong>Abbildung 3:</strong> Betrieb bearbeiten\n          </figcaption>\n        </figure>\n\n        <h3>Betrieb löschen</h3>\n        <div className=\"alert alert-warning\">\n          <i className=\"bi bi-exclamation-triangle me-2\"></i>\n          <strong>Achtung:</strong> Das Löschen eines Betriebs entfernt auch alle zugehörigen \n          Feldstücke, Schläge und Maßnahmen!\n        </div>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-x-square\"></i></strong> Symbol neben dem Betrieb in der Liste</li>\n          <li>Bestätigen Sie die Sicherheitsabfrage</li>\n        </ol>\n      </section>\n\n      <section id=\"erntejahr\" className=\"mt-5\">\n        <h2>Erntejahre</h2>\n        <hr />\n        <h3>Erntejahr anlegen</h3>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-three-dots-vertical\"></i></strong> Symbol neben dem gewünschten Betrieb in der Liste</li>\n          <li>Wählen Sie <strong><i className=\"bi bi-plus-square\"></i> Erntejahr hinzufügen</strong></li>\n          <li>Definieren Sie ein gültiges Erntejahr</li>\n          <li>Wählen Sie eine Bewirtschaftungsart (optional)</li>\n          <li>Bestätigen Sie mit Klick auf <strong>Hinzufügen</strong></li>\n          <figure className=\"figure\">\n            <img \n              src={AddFarmYearScreenshot} \n              alt=\"Erntejahr hinzufügen\" \n              className=\"figure-img img-fluid rounded border shadow-sm\"\n              style={{ maxWidth: '100%' }}\n            />\n            <figcaption className=\"figure-caption text-center mt-2\">\n              <strong>Abbildung 4:</strong> Erntejahr hinzufügen\n            </figcaption>\n          </figure>          \n        </ol>\n        <h3>Erntejahr bearbeiten</h3>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-three-dots-vertical\"></i></strong> Symbol neben dem Erntejahr in der Liste</li>\n          <li>Wählen Sie <strong><i className=\"bi bi-pencil-square\"></i> Bearbeiten</strong></li>\n          <li>nehmen Sie die gewünschten Änderungen vor und bestätigen Sie mit Klick auf <strong>Speichern</strong></li>\n        </ol>\n        <h3>Erntejahr löschen</h3>\n        <div className=\"alert alert-warning\">\n          <i className=\"bi bi-exclamation-triangle me-2\"></i>\n          <strong>Achtung:</strong> Das Löschen eines Erntejahres entfernt auch alle zugehörigen \n          Feldstücke, Schläge und Maßnahmen!\n        </div>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-x-square\"></i></strong> Symbol neben dem Erntejahr in der Liste</li>\n          <li>Bestätigen Sie die Sicherheitsabfrage</li>\n        </ol>\n      </section>\n\n      {/* Feldstücke & Schläge */}\n      <section id=\"feldstuecke-schlaege\" className=\"mt-5\">\n        <h2>Feldstücke & Schläge</h2>\n        <hr />\n\n        <h3>Feldstück anlegen</h3>\n          <ol>\n            <li>Klicken Sie auf das <strong><i className=\"bi bi-three-dots-vertical\"></i></strong> Symbol neben dem gewünschten Betriebsjahr in der Liste</li>\n            <li>Wählen Sie <strong><i className=\"bi bi-plus-square\"></i> Feldstück hinzufügen</strong></li>\n            <li>Definieren Sie\n              <ul>\n                <li>Feldstück-Nummer</li>\n                <li>Bezeichnung (optional)</li>\n                <li>Fläche (ha)</li>\n                <li>Nutzungsart</li>\n              </ul>\n            </li>\n            <li>Bestätigen Sie mit Klick auf <strong>Speichern</strong></li>\n            <figure className=\"figure\">\n              <img \n                src={AddFeldstueckScreenshot} \n                alt=\"Feldstück hinzufügen wählen\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 5:</strong> Feldstück hinzufügen wählen\n              </figcaption>\n            </figure>          \n            <figure className=\"figure\">\n              <img \n                src={AddFeldstueckScreenshot2} \n                alt=\"Feldstück hinzufügen\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 6:</strong> Feldstück hinzufügen\n              </figcaption>\n            </figure>          \n          </ol>      \n\n        <h3>Feldstück bearbeiten / löschen</h3>\n        <div className=\"alert alert-warning\">\n          <i className=\"bi bi-exclamation-triangle me-2\"></i>\n          <strong>Achtung:</strong> Das Löschen eines Feldstückes entfernt auch alle zugehörigen \n          Schläge und Maßnahmen!\n        </div>\n        <p>Das Löschen von Feldstücken funktioniert gleich wie das Löschen von Betrieben / Erntejahren</p>\n\n        <h3>Schlag anlegen</h3>\n          <ol>\n            <li>Klicken Sie auf das <strong><i className=\"bi bi-three-dots-vertical\"></i></strong> Symbol neben dem gewünschten Feldstück in der Liste</li>\n            <li>Wählen Sie <strong><i className=\"bi bi-plus-square\"></i> Schlag hinzufügen</strong></li>\n            <figure className=\"figure\">\n              <img \n                src={AddSchlagScreenshot} \n                alt=\"Schlag hinzufügen wählen\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 6:</strong> Schlag hinzufügen wählen\n              </figcaption>\n            </figure>          \n            <li>Definieren Sie\n              <ul>\n                <li>Schlag-Nummer</li>\n                <li>Bewirtschafungsart (optional)</li>\n                <li>Brutto Fläche (ha)</li>\n                <li>Netto Fläche (ha)</li>\n                <li>Kultur</li>\n                <figure className=\"figure\">\n                  <img \n                    src={AddSchlagScreenshot2} \n                    alt=\"Schlag hinzufügen\" \n                    className=\"figure-img img-fluid rounded border shadow-sm\"\n                    style={{ maxWidth: '100%' }}\n                  />\n                  <figcaption className=\"figure-caption text-center mt-2\">\n                    <strong>Abbildung 7:</strong> Schlag hinzufügen\n                  </figcaption>\n                </figure>          \n              </ul>\n            </li>\n            <li>Bestätigen Sie mit Klick auf <strong>Speichern</strong></li>\n          </ol>      \n\n        <h3>Schlag bearbeiten</h3>\n        <h4>Das bearbeiten einesSchlages bietet neben den Optionen, die beim Erstellen zur Verfügung stehen außerdem:</h4>\n        <ul>\n          <li>Tab: Karte</li>\n            <figure className=\"figure\">\n              <img \n                src={EditSchlagScreenshotKarte} \n                alt=\"Schlag Kartenansicht\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 8:</strong> Schlag Karte\n              </figcaption>\n            </figure>    \n          <li>Tab: Landnutzungsänderung</li>\n            <figure className=\"figure\">\n              <img \n                src={EditSchlagScreenshotLUC} \n                alt=\"Schlag Landnutzungsänderung\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 9:</strong> Schlag Landnutzungsänderung\n              </figcaption>\n            </figure>    \n        </ul>\n\n        <h3>Schag löschen</h3>\n        <div className=\"alert alert-warning\">\n          <i className=\"bi bi-exclamation-triangle me-2\"></i>\n          <strong>Achtung:</strong> Das Löschen eines Schlages entfernt auch alle zugehörigen \n          Maßnahmen!\n        </div>\n        <p>Das Löschen von Schlägen funktioniert gleich wie das Löschen von Betrieben / Erntejahren / Feldstücken</p>\n      </section>\n\n\n      {/* Bewirtschaftung */}\n      <section id=\"bewirtschaftung\" className=\"mt-5\">\n        <h2>Bewirtschaftung / Maßnahmen</h2>\n        <hr />\n        \n        <h3>Maßnahmen erfassen</h3>\n        <p>Dokumentieren Sie alle Bewirtschaftungsmaßnahmen:</p>\n        <ol>\n          <li>Klicken Sie auf das <strong><i className=\"bi bi-three-dots-vertical\"></i></strong> Symbol neben dem gewünschten Schlag in der Liste </li>\n          <li>Klicken Sie auf <strong><i className=\"bi bi-plus-square\"></i> Maßnahme hinzufügen</strong></li>\n          <li>Wählen Sie den Maßnahmentyp:</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotMassnahmentyp} \n                alt=\"Maßnahmentyp auswählen\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 10:</strong> Maßnahmentyp auswählen\n              </figcaption>\n            </figure> \n          <li>Geben Sie Datum, Kraftstoff und angewandte Fläche an</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotDatumKraftstoff} \n                alt=\"Datum, Kraftstoff, angewandte Fläche\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 11:</strong> Datum, Kraftstoff, angewandte Fläche\n              </figcaption>\n            </figure>\n          <li>Geben Sie die entsprechenden Details je nach gewähltem Maßnahmentyp an</li>\n          <ul>\n            <li>Bodenbearbeitung</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotBodenbearbeitung} \n                alt=\"Details Bodenbearbeitung\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 12:</strong> Details Bodenbearbeitung\n              </figcaption>\n            </figure> \n            <li>Aussaat Zwischen- / Hauptfrucht</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotAussaat} \n                alt=\"Details Aussaat\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 13:</strong> Details Aussaat\n              </figcaption>\n            </figure> \n            <li>Düngung</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotDuengung} \n                alt=\"Details Duengung\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 14:</strong> Details Duengung\n              </figcaption>\n            </figure> \n            <li>Pflanzenschutz</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotPflanzenschutz} \n                alt=\"Details Pflanzenschutz\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 12:</strong> Details Pflanzenschutz\n              </figcaption>\n            </figure> \n            <li>Beregnung</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotBeregnung} \n                alt=\"Details Beregnung\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 15:</strong> Details Beregnung\n              </figcaption>\n            </figure> \n            <li>Ernte</li>\n            <figure className=\"figure\">\n              <img \n                src={AddMassnahmeScreenshotErnte} \n                alt=\"Details Ernte\" \n                className=\"figure-img img-fluid rounded border shadow-sm\"\n                style={{ maxWidth: '100%' }}\n              />\n              <figcaption className=\"figure-caption text-center mt-2\">\n                <strong>Abbildung 16:</strong> Details Ernte\n              </figcaption>\n            </figure> \n          </ul>\n          <li>Prüfen Sie die Angaben in der Zusammenfassung</li>\n          <figure className=\"figure\">\n            <img \n              src={AddMassnahmeScreenshotZusammenfassung} \n              alt=\"Details Zusammenfassung\" \n              className=\"figure-img img-fluid rounded border shadow-sm\"\n              style={{ maxWidth: '100%' }}\n            />\n            <figcaption className=\"figure-caption text-center mt-2\">\n              <strong>Abbildung 17:</strong> Details Zusammenfassung\n            </figcaption>\n          </figure> \n          <li>Bestätigen Sie mit Klick auf <strong>Speichern</strong></li>\n        </ol>\n      </section>\n      <section id=\"polygon-editor\" className=\"mt-5\">\n        <h3>Polygon-Editor</h3>\n        <p>Mit dem Polygon-Editor können Sie die genauen Grenzen Ihrer Flächen einzeichnen.</p>\n        \n        <h4>Polygon zeichnen</h4>\n        <ol>\n          <li>Öffnen Sie den Schlag zur Bearbeitung</li>\n          <li>Klicken Sie auf <strong>\"Polygon bearbeiten\"</strong></li>\n          <li>Nutzen Sie die Werkzeuge:\n            <ul>\n              <li><strong>Zeichnen</strong> (🖊️): Neues Polygon erstellen</li>\n              <li><strong>Bearbeiten</strong> (✏️): Bestehendes Polygon anpassen</li>\n              <li><strong>Löschen</strong> (🗑️): Polygon entfernen</li>\n            </ul>\n          </li>\n        </ol>\n\n        <div className=\"alert alert-info\">\n          <i className=\"bi bi-lightbulb me-2\"></i>\n          <strong>Tipps für das Zeichnen:</strong>\n          <ul className=\"mb-0 mt-2\">\n            <li>Klicken Sie auf die Karte, um Punkte zu setzen</li>\n            <li>Schließen Sie das Polygon durch Klick auf den Startpunkt</li>\n            <li>Nutzen Sie die Satellitenansicht für bessere Orientierung</li>\n            <li>Zoomen Sie für präzisere Zeichnungen näher heran</li>\n          </ul>\n        </div>\n      </section>\n      {/* Einstellungen */}\n      {/* <section id=\"einstellungen\" className=\"mt-5\">\n        <h2>Einstellungen</h2>\n        <hr />\n        \n        <p>Passen Sie die Anwendung an Ihre Bedürfnisse an:</p>\n        \n        <h3>Benutzereinstellungen</h3>\n        <ul>\n          <li><strong>Profil</strong>: Name, E-Mail, Passwort ändern</li>\n          <li><strong>Benachrichtigungen</strong>: E-Mail-Benachrichtigungen konfigurieren</li>\n          <li><strong>Sprache</strong>: Anzeigesprache wählen</li>\n        </ul>\n\n        <h3>Betriebseinstellungen</h3>\n        <ul>\n          <li><strong>Standardwerte</strong>: Vorbelegungen für neue Einträge</li>\n          <li><strong>Nutzungsarten</strong>: Eigene Nutzungsarten verwalten</li>\n        </ul>\n      </section> */}\n\n      {/* FAQ */}\n      {/* <section id=\"faq\" className=\"mt-5\">\n        <h2>Häufige Fragen (FAQ)</h2>\n        <hr />\n        \n        <div className=\"accordion\" id=\"faqAccordion\">\n          <div className=\"card mb-2\">\n            <div className=\"card-header\">\n              <strong>Wie kann ich meine Daten sichern?</strong>\n            </div>\n            <div className=\"card-body\">\n              Ihre Daten werden automatisch in der Cloud gespeichert. Für lokale Backups \n              nutzen Sie die Export-Funktion.\n            </div>\n          </div>\n          \n          <div className=\"card mb-2\">\n            <div className=\"card-header\">\n              <strong>Kann ich die Anwendung offline nutzen?</strong>\n            </div>\n            <div className=\"card-body\">\n              Aktuell ist eine Internetverbindung erforderlich. Eine Offline-Funktion ist in Planung.\n            </div>\n          </div>\n          \n          <div className=\"card mb-2\">\n            <div className=\"card-header\">\n              <strong>Wie teile ich Daten mit meinem Berater?</strong>\n            </div>\n            <div className=\"card-body\">\n              Nutzen Sie die Export-Funktion oder laden Sie Ihren Berater als Benutzer ein.\n            </div>\n          </div>\n          \n          <div className=\"card mb-2\">\n            <div className=\"card-header\">\n              <strong>Was bedeuten die verschiedenen Farben auf der Karte?</strong>\n            </div>\n            <div className=\"card-body\">\n              Die Farben zeigen verschiedene Nutzungsarten:\n              <ul className=\"mb-0 mt-2\">\n                <li>🟢 <strong>Grün</strong>: Grünland</li>\n                <li>🟡 <strong>Gelb</strong>: Getreide</li>\n                <li>🟤 <strong>Braun</strong>: Hackfrüchte</li>\n                <li>🔵 <strong>Blau</strong>: Sonderkulturen</li>\n              </ul>\n            </div>\n          </div>\n        </div>\n      </section> */}\n\n      {/* Support */}\n      <section id=\"support\" className=\"mt-5\">\n        <h2>Support</h2>\n        <hr />\n        \n        <p>Bei Fragen oder Problemen stehen wir Ihnen gerne zur Verfügung:</p>\n        \n        <div className=\"row\">\n          <div className=\"col-md-4\">\n            <div className=\"card text-center p-3\">\n              <i className=\"bi bi-envelope\" style={{ fontSize: '2rem' }}></i>\n              <h5 className=\"mt-2\">E-Mail</h5>\n              <p className=\"mb-0\">support@digitalbusinessunit.at</p>\n            </div>\n          </div>\n          {/* <div className=\"col-md-4\">\n            <div className=\"card text-center p-3\">\n              <i className=\"bi bi-telephone\" style={{ fontSize: '2rem' }}></i>\n              <h5 className=\"mt-2\">Telefon</h5>\n              <p className=\"mb-0\">+43 (0) 123 456 789</p>\n            </div>\n          </div>\n          <div className=\"col-md-4\">\n            <div className=\"card text-center p-3\">\n              <i className=\"bi bi-clock\" style={{ fontSize: '2rem' }}></i>\n              <h5 className=\"mt-2\">Erreichbarkeit</h5>\n              <p className=\"mb-0\">Mo-Fr, 8:00 - 17:00 Uhr</p>\n            </div>\n          </div> */}\n        </div>\n\n        <h3 className=\"mt-4\">Fehler melden</h3>\n        <p>Wenn Sie einen Fehler gefunden haben:</p>\n        <ol>\n          <li>Beschreiben Sie das Problem möglichst genau</li>\n          <li>Fügen Sie Screenshots bei (falls möglich)</li>\n          <li>Nennen Sie die Schritte zur Reproduktion</li>\n          <li>Senden Sie die Informationen an unseren Support</li>\n        </ol>\n      </section>\n\n      {/* Footer */}\n      <footer className=\"mt-5 pt-4 border-top text-muted text-center\">\n        <p>Letzte Aktualisierung: November 2025</p>\n        <p>Version: 1.0</p>\n      </footer>\n    </div>\n  );\n};\n\n/**\n * UserManualPage - Standalone page component for the user manual\n */\nexport const UserManualPage = () => {\n  return (\n    <Container className=\"py-4\">\n      <UserManualContent />\n    </Container>\n  );\n};\n\n/**\n * UserManualButton - A button that opens the user manual modal\n */\nexport const UserManualButton = ({ variant = 'outline-secondary', size, className }) => {\n  const [showManual, setShowManual] = useState(false);\n\n  return (\n    <>\n      <Button\n        variant={variant}\n        size={size}\n        className={className}\n        onClick={() => setShowManual(true)}\n        title=\"Benutzerhandbuch öffnen\"\n      >\n        <i className=\"bi bi-question-circle me-1\"></i>\n        Hilfe\n      </Button>\n      <UserManualModal show={showManual} onHide={() => setShowManual(false)} />\n    </>\n  );\n};\n\nexport default UserManualModal;\n","import React from 'react';\nimport { Container, Row, Col, Button, Card } from 'react-bootstrap';\nimport { useNavigate } from 'react-router-dom';\n\nconst ErrorPage = ({ \n    errorCode = '404', \n    title = 'Seite nicht gefunden', \n    message = 'Die angeforderte Seite existiert nicht.',\n    showLoginButton = false \n}) => {\n    const navigate = useNavigate();\n\n    const getErrorIcon = () => {\n        switch (errorCode) {\n            case '401':\n                return 'bi-shield-lock';\n            case '403':\n                return 'bi-shield-exclamation';\n            case '404':\n                return 'bi-search';\n            case '500':\n                return 'bi-exclamation-triangle';\n            default:\n                return 'bi-exclamation-circle';\n        }\n    };\n\n    const getErrorColor = () => {\n        switch (errorCode) {\n            case '401':\n            case '403':\n                return 'warning';\n            case '404':\n                return 'info';\n            case '500':\n                return 'danger';\n            default:\n                return 'secondary';\n        }\n    };\n\n    return (\n        <Container className=\"mt-5\">\n            <Row className=\"justify-content-center\">\n                <Col md={8} lg={6}>\n                    <Card className=\"shadow-sm\">\n                        <Card.Body className=\"text-center py-5\">\n                            <div className={`text-${getErrorColor()} mb-4`}>\n                                <i className={`bi ${getErrorIcon()}`} style={{ fontSize: '5rem' }}></i>\n                            </div>\n                            \n                            <h1 className=\"display-1 fw-bold text-muted mb-3\">{errorCode}</h1>\n                            <h2 className=\"h3 mb-3\">{title}</h2>\n                            <p className=\"lead text-muted mb-4\">{message}</p>\n\n                            <div className=\"d-flex gap-3 justify-content-center flex-wrap\">\n                                <Button \n                                    variant=\"primary\" \n                                    size=\"lg\"\n                                    onClick={() => navigate('/farms')}\n                                >\n                                    <i className=\"bi bi-house-door me-2\"></i>\n                                    Zur Startseite\n                                </Button>\n                                \n                                {showLoginButton && (\n                                    <Button \n                                        variant=\"outline-primary\" \n                                        size=\"lg\"\n                                        onClick={() => navigate('/login')}\n                                    >\n                                        <i className=\"bi bi-box-arrow-in-right me-2\"></i>\n                                        Anmelden\n                                    </Button>\n                                )}\n                                \n                                <Button \n                                    variant=\"outline-secondary\" \n                                    size=\"lg\"\n                                    onClick={() => navigate(-1)}\n                                >\n                                    <i className=\"bi bi-arrow-left me-2\"></i>\n                                    Zurück\n                                </Button>\n                            </div>\n\n                            <div className=\"mt-4 pt-4 border-top\">\n                                <p className=\"text-muted small mb-0\">\n                                    Wenn Sie glauben, dass dies ein Fehler ist, wenden Sie sich bitte an den Support.\n                                </p>\n                            </div>\n                        </Card.Body>\n                    </Card>\n                </Col>\n            </Row>\n        </Container>\n    );\n};\n\n// Specific error page components\nexport const NotFoundPage = () => (\n    <ErrorPage \n        errorCode=\"404\"\n        title=\"Seite nicht gefunden\"\n        message=\"Die angeforderte Seite existiert nicht oder wurde verschoben.\"\n    />\n);\n\nexport const UnauthorizedPage = () => (\n    <ErrorPage \n        errorCode=\"401\"\n        title=\"Nicht autorisiert\"\n        message=\"Sie müssen sich anmelden, um auf diese Seite zuzugreifen.\"\n        showLoginButton={true}\n    />\n);\n\nexport const ForbiddenPage = () => (\n    <ErrorPage \n        errorCode=\"403\"\n        title=\"Zugriff verweigert\"\n        message=\"Sie haben keine Berechtigung, auf diese Seite zuzugreifen.\"\n    />\n);\n\nexport const ServerErrorPage = () => (\n    <ErrorPage \n        errorCode=\"500\"\n        title=\"Serverfehler\"\n        message=\"Ein interner Serverfehler ist aufgetreten. Bitte versuchen Sie es später erneut.\"\n    />\n);\n\nexport const ServiceUnavailablePage = () => (\n    <ErrorPage \n        errorCode=\"503\"\n        title=\"Dienst nicht verfügbar\"\n        message=\"Der Dienst ist vorübergehend nicht verfügbar. Bitte versuchen Sie es später erneut.\"\n    />\n);\n\nexport default ErrorPage;\n","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nconst Impressum = () => {\n  return (\n    <Container className=\"py-5\">\n      <h1 className=\"mb-4\">Impressum</h1>\n      \n      <div className=\"mb-4\">\n        <h3>AgrarCommander GesmbH</h3>\n        <p className=\"mb-1\">Raiffeisenstraße 1</p>\n        <p className=\"mb-1\">2100 Korneuburg</p>\n        <p className=\"mb-3\">ÖSTERREICH</p>\n        \n        <p className=\"mb-1\">\n          <strong>Website:</strong> <a href=\"https://www.agrarcommander.at\" target=\"_blank\" rel=\"noopener noreferrer\">www.agrarcommander.at</a>\n        </p>\n        <p className=\"mb-1\">\n          <strong>Mail:</strong> <a href=\"mailto:info@agrarcommander.at\">info@agrarcommander.at</a>\n        </p>\n        <p className=\"mb-3\">\n          <strong>T:</strong> <a href=\"tel:+436648892809\">0043 664 88 92 80 94</a>\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Unternehmensangaben</h4>\n        <p className=\"mb-1\"><strong>UID-Nummer:</strong> ATU69281868</p>\n        <p className=\"mb-1\"><strong>Firmenbuchnummer:</strong> FN 428310v</p>\n        <p className=\"mb-1\"><strong>Firmenbuchgericht:</strong> Landesgericht Korneuburg</p>\n        <p className=\"mb-1\"><strong>GLN:</strong> 9110021480895</p>\n        <p className=\"mb-1\"><strong>Firmensitz:</strong> Korneuburg</p>\n        <p className=\"mb-1\"><strong>Gewerbe:</strong> Handelsgewerbe mit Ausnahme der reglementierten Handelsgewerbe</p>\n        <p className=\"mb-3\"><strong>Gegenstand des Unternehmens:</strong> Softwareentwicklung</p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Geschäftsführer</h4>\n        <p className=\"mb-1\">Johannes Steiner, BA</p>\n        <p className=\"mb-3\">Mag. Markus Konrad</p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Haftung</h4>\n        <p>\n          Sämtliche Inhalte wurden sorgfältig geprüft. Dessen ungeachtet kann keine Haftung für Richtigkeit, \n          Vollständigkeit und Aktualität der Angaben übernommen werden.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Copyright</h4>\n        <p>\n          Sämtliche Texte, Grafiken und Bilder sind urheberrechtlich geschützt; eine Verwendung ist nur mit \n          ausdrücklicher Genehmigung von AgrarCommander GesmbH bzw. der RWA Raiffeisen Ware Austria Aktiengesellschaft \n          und deren Beteiligungen und Tochterunternehmen sowie der Raiffeisen Lagerhäuser zulässig. Die Verwendung \n          von Bildern ist nur für persönliche Zwecke im privaten Bereich erlaubt.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Links</h4>\n        <p>\n          Links auf diese Website sind erwünscht, soweit sie als externe Links geführt werden und jeweils ganze \n          Seiten (inkl. Navigationsframe) wiedergegeben werden. Eine Übernahme des Hauptfensters in einen Frame \n          des Linksetzers ist unzulässig. Eigene Links auf fremde Seiten stellen nur Wegweiser zu diesen Seiten dar; \n          sie werden deshalb regelmäßig mittels externem Link in einem eigenen Browserfenster dargestellt. Der \n          Herausgeber identifiziert sich nicht mit dem Inhalt der Seiten, auf die verwiesen wird und übernimmt \n          dafür keine Haftung. Sollte eine der Seiten, auf die verwiesen wird, bedenkliche Inhalte aufweisen, \n          wird um Mitteilung ersucht; in so einem Falle wird der Link sofort gelöscht.\n        </p>\n      </div>\n    </Container>\n  );\n};\n\nexport default Impressum;\n","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nconst Datenschutz = () => {\n  return (\n    <Container className=\"py-5\">\n      <h1 className=\"mb-4\">Datenschutzerklärung</h1>\n      \n      <div className=\"mb-4\">\n        <h3>Datenschutz</h3>\n        <p>\n          Der Schutz Ihrer persönlichen Daten ist uns ein besonderes Anliegen. Wir verarbeiten Ihre Daten daher \n          ausschließlich auf Grundlage der gesetzlichen Bestimmungen (DSGVO, TKG 2003). In diesen \n          Datenschutzinformationen informieren wir Sie über die wichtigsten Aspekte der Datenverarbeitung im \n          Rahmen unserer Website.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Verantwortlicher</h4>\n        <p className=\"mb-1\"><strong>AgrarCommander GesmbH</strong></p>\n        <p className=\"mb-1\">Raiffeisenstraße 1</p>\n        <p className=\"mb-1\">2100 Korneuburg</p>\n        <p className=\"mb-1\">ÖSTERREICH</p>\n        <p className=\"mb-1\">\n          <strong>E-Mail:</strong> <a href=\"mailto:info@agrarcommander.at\">info@agrarcommander.at</a>\n        </p>\n        <p className=\"mb-3\">\n          <strong>Telefon:</strong> <a href=\"tel:+436648892809\">0043 664 88 92 80 94</a>\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Kontakt mit uns</h4>\n        <p>\n          Wenn Sie per E-Mail Kontakt mit uns aufnehmen, werden Ihre angegebenen Daten zwecks Bearbeitung der \n          Anfrage und für den Fall von Anschlussfragen sechs Monate bei uns gespeichert. Diese Daten geben wir \n          nicht ohne Ihre Einwilligung weiter.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Cookies</h4>\n        <p>\n          Unsere Website verwendet Cookies. Dabei handelt es sich um kleine Textdateien, die mit Hilfe des \n          Browsers auf Ihrem Endgerät abgelegt werden. Sie richten keinen Schaden an. Wir nutzen Cookies dazu, \n          unser Angebot nutzerfreundlich zu gestalten. Einige Cookies bleiben auf Ihrem Endgerät gespeichert, \n          bis Sie diese löschen. Sie ermöglichen es uns, Ihren Browser beim nächsten Besuch wiederzuerkennen.\n        </p>\n        <p>\n          Wenn Sie dies nicht wünschen, so können Sie Ihren Browser so einrichten, dass er Sie über das Setzen \n          von Cookies informiert und Sie dies nur im Einzelfall erlauben. Bei der Deaktivierung von Cookies kann \n          die Funktionalität unserer Website eingeschränkt sein.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Web-Analyse</h4>\n        <p>\n          Unsere Website verwendet Funktionen des Webanalysedienstes. Die durch den Cookie erzeugten Informationen \n          über Ihre Benutzung dieser Website werden in der Regel an einen Server übertragen und dort gespeichert. \n          Durch die Aktivierung der IP-Anonymisierung auf dieser Website wird Ihre IP-Adresse zuvor gekürzt. \n          Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server übertragen und dort gekürzt.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Weitergabe von Daten an Dritte</h4>\n        <p>\n          <strong>Personenbezogene Daten:</strong> Ihre personenbezogenen Daten (wie Name, E-Mail-Adresse, \n          Kontaktdaten) werden von uns vertraulich behandelt und nicht an Dritte weitergegeben.\n        </p>\n        <p>\n          <strong>Betriebsdaten:</strong> Ihre landwirtschaftlichen Betriebsdaten (wie Maßnahmen, verwendete \n          Produkte, CO₂-Äquivalente und andere Bewirtschaftungsinformationen) werden ausschließlich in \n          aggregierter Form an Dritte weitergegeben. Dies bedeutet, dass die Daten zusammengefasst und \n          anonymisiert werden, sodass keine Rückschlüsse auf einzelne Betriebe oder Personen möglich sind. \n          Die Weitergabe erfolgt zu statistischen und wissenschaftlichen Zwecken sowie zur Verbesserung \n          landwirtschaftlicher Praktiken.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Ihre Rechte</h4>\n        <p>\n          Ihnen stehen grundsätzlich die Rechte auf Auskunft, Berichtigung, Löschung, Einschränkung, \n          Datenübertragbarkeit, Widerruf und Widerspruch zu. Wenn Sie glauben, dass die Verarbeitung Ihrer Daten \n          gegen das Datenschutzrecht verstößt oder Ihre datenschutzrechtlichen Ansprüche sonst in einer Weise \n          verletzt worden sind, können Sie sich bei der Aufsichtsbehörde beschweren. In Österreich ist dies die \n          Datenschutzbehörde.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Kontaktdaten der Datenschutzbehörde</h4>\n        <p className=\"mb-1\"><strong>Österreichische Datenschutzbehörde</strong></p>\n        <p className=\"mb-1\">Barichgasse 40-42</p>\n        <p className=\"mb-1\">1030 Wien</p>\n        <p className=\"mb-1\">\n          <strong>Telefon:</strong> +43 1 52 152-0\n        </p>\n        <p className=\"mb-3\">\n          <strong>E-Mail:</strong> <a href=\"mailto:dsb@dsb.gv.at\">dsb@dsb.gv.at</a>\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h4>Speicherdauer</h4>\n        <p>\n          Wir speichern personenbezogene Daten nur so lange, wie dies zur Erfüllung der verfolgten Zwecke \n          notwendig ist oder Sie uns Ihre Einwilligung zur weiteren Speicherung erteilt haben.\n        </p>\n      </div>\n    </Container>\n  );\n};\n\nexport default Datenschutz;\n","import React from 'react';\nimport { Container } from 'react-bootstrap';\n\nconst AGB = () => {\n  return (\n    <Container className=\"py-5\">\n      <h1 className=\"mb-4\">Allgemeine Geschäftsbedingungen (AGB)</h1>\n      \n      <div className=\"mb-4\">\n        <h3>1. Geltungsbereich</h3>\n        <p>\n          Diese Allgemeinen Geschäftsbedingungen (AGB) gelten ausschließlich für die Nutzung dieser Software \n          (Cultivate) durch die Kunden der AgrarCommander GesmbH (nachfolgend \"Anbieter\" genannt). Diese AGB \n          gelten nicht für andere Verträge oder Dienstleistungen der AgrarCommander GesmbH.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>2. Vertragsgegenstand</h3>\n        <p>\n          Der Anbieter stellt dem Kunden eine webbasierte Softwarelösung zur Verfügung, die der Verwaltung und \n          Dokumentation landwirtschaftlicher Betriebe dient. Der genaue Leistungsumfang ergibt sich aus der \n          jeweiligen Leistungsbeschreibung und dem abgeschlossenen Vertrag.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>3. Vertragsschluss</h3>\n        <p>\n          Der Vertrag kommt durch die Registrierung des Kunden und die Bestätigung durch den Anbieter zustande. \n          Mit der Registrierung erklärt der Kunde sein Einverständnis mit diesen AGB.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>4. Nutzungsrechte</h3>\n        <p>\n          Der Kunde erhält ein nicht ausschließliches, nicht übertragbares Recht zur Nutzung der Software für \n          die Dauer des Vertragsverhältnisses. Die Software darf nur für eigene geschäftliche Zwecke genutzt werden.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>5. Pflichten des Kunden</h3>\n        <p>\n          Der Kunde verpflichtet sich, die Software nur im Rahmen der gesetzlichen Bestimmungen zu nutzen. \n          Insbesondere ist es untersagt:\n        </p>\n        <ul>\n          <li>Die Software zu dekompilieren, zu disassemblieren oder zurückzuentwickeln</li>\n          <li>Zugangsdaten an Dritte weiterzugeben</li>\n          <li>Die Software für rechtswidrige Zwecke zu verwenden</li>\n          <li>Die Funktionsfähigkeit der Software zu beeinträchtigen</li>\n        </ul>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>6. Verantwortung für Dateneingabe und -richtigkeit</h3>\n        <p>\n          Der Kunde ist allein verantwortlich für die Richtigkeit, Vollständigkeit und Aktualität der von ihm \n          in die Software eingegebenen Daten. Dies umfasst insbesondere:\n        </p>\n        <ul>\n          <li>Alle Angaben zu landwirtschaftlichen Maßnahmen und Betriebsdaten</li>\n          <li>Mengenangaben zu verwendeten Produkten (Düngemittel, Pflanzenschutzmittel, etc.)</li>\n          <li>Flächenangaben und geografische Daten</li>\n          <li>Zeitangaben und Dokumentationen</li>\n        </ul>\n        <p>\n          <strong>Wichtiger Hinweis:</strong> Die Software führt keine automatische Validierung oder Plausibilitätsprüfung \n          der eingegebenen Mengen und Daten durch. Der Kunde ist verpflichtet, die Eingaben selbst auf ihre \n          Richtigkeit zu überprüfen. Der Anbieter übernimmt keine Haftung für fehlerhafte Eingaben oder daraus \n          resultierende Folgen. Die Software wird \"wie besehen\" (as-is) zur Verfügung gestellt.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>7. Verfügbarkeit</h3>\n        <p>\n          Der Anbieter bemüht sich um eine möglichst hohe Verfügbarkeit der Software. Eine Verfügbarkeit von \n          100% kann jedoch nicht garantiert werden. Wartungsarbeiten werden nach Möglichkeit außerhalb der \n          üblichen Geschäftszeiten durchgeführt.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>7. Datenschutz und Datensicherheit</h3>\n        <p>\n          Der Anbieter verpflichtet sich, alle datenschutzrechtlichen Bestimmungen einzuhalten. Nähere \n          Informationen finden Sie in unserer Datenschutzerklärung. Der Anbieter führt regelmäßige \n          Datensicherungen durch.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>8. Vergütung</h3>\n        <p>\n          Die Nutzung der Software in ihrer aktuellen Form ist für den Kunden kostenlos. Der Anbieter behält \n          sich vor, für zukünftige Erweiterungen oder zusätzliche Funktionen Gebühren zu erheben. Über \n          eventuelle Änderungen wird der Kunde rechtzeitig informiert.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>9. Vertragslaufzeit und Kündigung</h3>\n        <p>\n          Der Vertrag wird auf unbestimmte Zeit geschlossen, sofern nicht anders vereinbart. Beide Parteien \n          können den Vertrag mit einer Frist von einem Monat zum Monatsende kündigen. Das Recht zur \n          außerordentlichen Kündigung aus wichtigem Grund bleibt unberührt.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>10. Haftung</h3>\n        <p>\n          Unsere Haftung ist auf grob fahrlässig oder vorsätzlich verursachte Schäden beschränkt, \n          die nachweislich von uns verschuldet wurden und am Gegenstand der Lieferung bzw. Leistung selbst entstehen. \n          Bei Schäden aus Verletzungen des Lebens, des Körpers, der Gesundheit, oder des Produkthaftungsgesetzes haften wir darüber hinaus \n          bereits für jede Fahrlässigkeit. Eine darüberhinausgehende Haftung besteht nicht. Insbesondere haften wir nicht, \n          wenn der Kunde unter Verletzung seiner Mitwirkungspflichten die Datensicherung unterlässt. Bei Verlust von\n          Daten haften wir nur für denjenigen Aufwand, der bei ordnungsgemäßer Datensicherung durch den Kunden für die Wiederherstellung der Daten erforderlich gewesen wäre.\n\n          Die Haftung für mittelbare Schäden – wie beispielsweise entgangenen Gewinn, Kosten die mit einer Betriebsunterbrechung verbunden sind, Datenverluste oder Ansprüche Dritter – wird ausdrücklich ausgeschlossen.\n\n          Schadenersatzansprüche verjähren spätestens nach Ablauf eines Jahres ab Kenntnis von Schaden und Schädiger.\n\n          Der Kunde hat uns unverzüglich von jeder ihm bekannt gewordenen Schädigung durch eine von uns gelieferte Sache bzw. von uns erbrachte Leistung zu informieren, insbesondere, wenn er von Dritten aus dem Titel der Produkthaftung zum Ersatz eines Schadens oder zur Bekanntgabe seiner Lieferanten aufgefordert wird, sonst von einem Produktfehler unserer Waren Kenntnis erhält oder selbst geschädigt wird.\n\n          Die Geltendmachung von Haftungs-, Auskunfts- oder Regressbegehren sind unter genauer Angabe des Schadens, des haftungsbegründenden Sachverhaltes einschließlich des Nachweises, dass die Lieferungen und Leistungen von uns stammen, schriftlich an die Geschäftsleitung zu richten.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>11. Änderungen der AGB</h3>\n        <p>\n          Der Anbieter behält sich vor, diese AGB zu ändern. Änderungen werden dem Kunden mindestens \n          vier Wochen vor ihrem Inkrafttreten in Textform mitgeteilt. Widerspricht der Kunde nicht innerhalb \n          von vier Wochen nach Zugang der Mitteilung, gelten die geänderten AGB als angenommen.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <h3>12. Schlussbestimmungen</h3>\n        <p>\n          Es gilt österreichisches Recht unter Ausschluss des UN-Kaufrechts. Gerichtsstand ist, soweit \n          gesetzlich zulässig, der Sitz des Anbieters. Sollten einzelne Bestimmungen dieser AGB unwirksam \n          sein oder werden, bleibt die Wirksamkeit der übrigen Bestimmungen hiervon unberührt.\n        </p>\n      </div>\n\n      <div className=\"mb-4\">\n        <p className=\"text-muted\">\n          <small>Stand: Dezember 2025</small>\n        </p>\n      </div>\n    </Container>\n  );\n};\n\nexport default AGB;\n","import React, { useEffect, useRef } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { selectIsAuthenticated, logoutUser, fetchUser } from './auth/authSlice';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport '../scss/index.scss';\n\n// Safe localStorage access with fallback\nconst getStorageItem = (key) => {\n    try {\n        return localStorage.getItem(key);\n    } catch (error) {\n        console.warn('localStorage access denied:', error);\n        return null;\n    }\n};\n\n// Components\nimport Header from './common/components/Header.jsx';\nimport Footer from './common/components/Footer.jsx';\nimport Login from './auth/Login.jsx';\nimport Register from './auth/Register.jsx';\nimport PasswordReset from './auth/PasswordReset.jsx';\nimport PasswordResetConfirm from './auth/PasswordResetConfirm.jsx';\nimport FarmManagement from './pages/FarmManagement.jsx';\nimport FarmDashboard from './pages/FarmDashboard.jsx';\nimport FarmOperations from './pages/FarmOperations.jsx';\nimport AdminDashboard from './pages/AdminDashboard.jsx';\nimport ParticipationVerification from './pages/ParticipationVerification.jsx';\nimport OeduePdfImport from './pages/OeduePdfImport.jsx';\nimport FarmdokPdfImport from './pages/FarmdokPdfImport.jsx';\nimport { UserManualPage } from './components/UserManual.jsx';\nimport { NotFoundPage, UnauthorizedPage, ForbiddenPage, ServerErrorPage } from './pages/ErrorPage.jsx';\nimport Impressum from './pages/Impressum.jsx';\nimport Datenschutz from './pages/Datenschutz.jsx';\nimport AGB from './pages/AGB.jsx';\n\nconst ProtectedRoute = ({ children }) => {\n    const isAuthenticated = useSelector(selectIsAuthenticated);\n    return isAuthenticated ? children : <Navigate to=\"/login\" replace />;\n};\n\nconst App = () => {\n    const dispatch = useDispatch();\n    const isAuthenticated = useSelector(selectIsAuthenticated);\n    const authChecked = useRef(false);\n\n    useEffect(() => {\n        // Verify authentication on app load\n        const verifyAuth = async () => {\n            if (authChecked.current) return;\n            authChecked.current = true;\n\n            const token = getStorageItem('token');\n            if (token && isAuthenticated) {\n                // Fetch user data to verify token is still valid and populate user state\n                dispatch(fetchUser());\n            } else if (!token && isAuthenticated) {\n                // No token but app thinks we're authenticated, clear state\n                dispatch(logoutUser());\n            }\n        };\n\n        verifyAuth();\n    }, [dispatch, isAuthenticated]);\n\n    return (\n        <div className=\"d-flex flex-column min-vh-100\">\n            <Header />\n\n            <main className=\"flex-grow-1\">\n                <Routes>\n                        {/* Public Routes */}\n                        <Route path=\"/login\" element={<Login />} />\n                        <Route path=\"/register\" element={<Register />} />\n                        <Route path=\"/password-reset\" element={<PasswordReset />} />\n                        <Route path=\"/reset-password/:uid/:token\" element={<PasswordResetConfirm />} />\n\n                        {/* Protected Routes */}\n                        <Route \n                            path=\"/dashboard\" \n                            element={\n                                <ProtectedRoute>\n                                    <AdminDashboard />\n                                </ProtectedRoute>\n                            } \n                        />\n\n                        <Route \n                            path=\"/farms\" \n                            element={\n                                <ProtectedRoute>\n                                    <FarmManagement />\n                                </ProtectedRoute>\n                            } \n                        />\n\n                        <Route \n                            path=\"/operations\" \n                            element={\n                                <ProtectedRoute>\n                                    <FarmOperations />\n                                </ProtectedRoute>\n                            } \n                        />\n\n                        <Route\n                            path=\"/oedue-pdf-import\"\n                            element={\n                                <ProtectedRoute>\n                                    <OeduePdfImport />\n                                </ProtectedRoute>\n                            }\n                        />\n\n                        <Route\n                            path=\"/farmdok-pdf-import\"\n                            element={\n                                <ProtectedRoute>\n                                    <FarmdokPdfImport />\n                                </ProtectedRoute>\n                            }\n                        />\n\n                        <Route\n                            path=\"/teilnahme-verifikation\"\n                            element={\n                                <ProtectedRoute>\n                                    <ParticipationVerification />\n                                </ProtectedRoute>\n                            }\n                        />\n\n                        {/* Help/Manual Route - accessible to all authenticated users */}\n                        <Route \n                            path=\"/hilfe\" \n                            element={\n                                <ProtectedRoute>\n                                    <UserManualPage />\n                                </ProtectedRoute>\n                            } \n                        />\n\n                        {/* Default Route */}\n                        <Route \n                            path=\"/\" \n                            element={\n                                <ProtectedRoute>\n                                    <Navigate to=\"/farms\" replace />\n                                </ProtectedRoute>\n                            } \n                        />\n\n                        {/* Legal Pages - Public Routes */}\n                        <Route path=\"/impressum\" element={<Impressum />} />\n                        <Route path=\"/datenschutz\" element={<Datenschutz />} />\n                        <Route path=\"/agb\" element={<AGB />} />\n\n                        {/* Error Routes */}\n                        <Route path=\"/400\" element={<NotFoundPage />} />\n                        <Route path=\"/401\" element={<UnauthorizedPage />} />\n                        <Route path=\"/403\" element={<ForbiddenPage />} />\n                        <Route path=\"/404\" element={<NotFoundPage />} />\n                        <Route path=\"/500\" element={<ServerErrorPage />} />\n                        \n                        {/* 404 Catch-all Route */}\n                        <Route path=\"*\" element={<NotFoundPage />} />\n                </Routes>\n            </main>\n\n            <Footer />\n        </div>\n    );\n};\n\nexport default App;\n","import { configureStore } from '@reduxjs/toolkit';\nimport authSlice from '../auth/authSlice';\nimport farmSlice from '../slices/farmSlice';\n\nexport const store = configureStore({\n    reducer: {\n        auth: authSlice,\n        farms: farmSlice,\n    },\n    middleware: (getDefaultMiddleware) =>\n        getDefaultMiddleware({\n            serializableCheck: {\n                ignoredActions: [\n                    'farms/fetchFarmMapData/fulfilled',\n                    'farms/fetchFarmStatistics/fulfilled',\n                ],\n                ignoredPaths: ['farms.mapData', 'farms.statistics'],\n            },\n        }),\n});\n\nexport default store;\n","import React from 'react';\nimport { Container, Row, Col, Button, Card, Alert } from 'react-bootstrap';\n\nclass ErrorBoundary extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = { \n            hasError: false, \n            error: null, \n            errorInfo: null \n        };\n    }\n\n    static getDerivedStateFromError(error) {\n        // Update state so the next render will show the fallback UI\n        return { hasError: true };\n    }\n\n    componentDidCatch(error, errorInfo) {\n        // Log the error to console or error reporting service\n        console.error('Error caught by ErrorBoundary:', error, errorInfo);\n        this.setState({\n            error,\n            errorInfo\n        });\n    }\n\n    handleReload = () => {\n        window.location.href = '/farms';\n    };\n\n    handleGoBack = () => {\n        window.history.back();\n    };\n\n    render() {\n        if (this.state.hasError) {\n            return (\n                <Container className=\"mt-5\">\n                    <Row className=\"justify-content-center\">\n                        <Col md={8} lg={6}>\n                            <Card className=\"shadow-sm\">\n                                <Card.Body className=\"text-center py-5\">\n                                    <div className=\"text-danger mb-4\">\n                                        <i className=\"bi bi-exclamation-triangle\" style={{ fontSize: '5rem' }}></i>\n                                    </div>\n                                    \n                                    <h1 className=\"display-4 fw-bold text-muted mb-3\">Oops!</h1>\n                                    <h2 className=\"h3 mb-3\">Ein Fehler ist aufgetreten</h2>\n                                    <p className=\"lead text-muted mb-4\">\n                                        Die Anwendung ist auf einen unerwarteten Fehler gestoßen.\n                                    </p>\n\n                                    {process.env.NODE_ENV === 'development' && this.state.error && (\n                                        <Alert variant=\"danger\" className=\"text-start mb-4\">\n                                            <Alert.Heading className=\"h6\">Fehlerdetails (nur in Entwicklung sichtbar):</Alert.Heading>\n                                            <pre className=\"small mb-0\" style={{ whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n                                                {this.state.error.toString()}\n                                                {this.state.errorInfo && this.state.errorInfo.componentStack}\n                                            </pre>\n                                        </Alert>\n                                    )}\n\n                                    <div className=\"d-flex gap-3 justify-content-center flex-wrap\">\n                                        <Button \n                                            variant=\"primary\" \n                                            size=\"lg\"\n                                            onClick={this.handleReload}\n                                        >\n                                            <i className=\"bi bi-house-door me-2\"></i>\n                                            Zur Startseite\n                                        </Button>\n                                        \n                                        <Button \n                                            variant=\"outline-secondary\" \n                                            size=\"lg\"\n                                            onClick={this.handleGoBack}\n                                        >\n                                            <i className=\"bi bi-arrow-left me-2\"></i>\n                                            Zurück\n                                        </Button>\n\n                                        <Button \n                                            variant=\"outline-primary\" \n                                            size=\"lg\"\n                                            onClick={() => window.location.reload()}\n                                        >\n                                            <i className=\"bi bi-arrow-clockwise me-2\"></i>\n                                            Neu laden\n                                        </Button>\n                                    </div>\n\n                                    <div className=\"mt-4 pt-4 border-top\">\n                                        <p className=\"text-muted small mb-0\">\n                                            Wenn das Problem weiterhin besteht, wenden Sie sich bitte an den Support.\n                                        </p>\n                                    </div>\n                                </Card.Body>\n                            </Card>\n                        </Col>\n                    </Row>\n                </Container>\n            );\n        }\n\n        return this.props.children;\n    }\n}\n\nexport default ErrorBoundary;\n","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { Provider } from 'react-redux'\nimport { BrowserRouter } from 'react-router-dom'\nimport App from './js/App.jsx'\nimport store from './js/config/store.js'\nimport ErrorBoundary from './js/components/ErrorBoundary.jsx'\nimport './scss/index.scss'\nimport 'bootstrap-icons/font/bootstrap-icons.css'\n\n// Create root element\nconst container = document.getElementById('app')\nconst root = createRoot(container)\n\n// Render the application\nroot.render(\n  <ErrorBoundary>\n    <Provider store={store}>\n      <BrowserRouter\n        future={{\n          v7_startTransition: true,\n          v7_relativeSplatPath: true\n        }}\n      >\n        <App />\n      </BrowserRouter>\n    </Provider>\n  </ErrorBoundary>\n)\n"],"names":["getStorageItem","key","error","removeStorageItem","getCSRFToken","meta","api","axios","config","token","csrfToken","response","setStorageItem","value","initialState","loginUser","createAsyncThunk","email","password","rejectWithValue","user","data","message","fieldErrors","registerUser","firstName","lastName","contractingAuthority","fetchUser","_","logoutUser","authSlice","createSlice","state","action","builder","clearError","resetRegistration","selectIsAuthenticated","selectUser","selectAuthLoading","selectAuthError","selectRegistrationSuccess","selectRegistrationMessage","authSlice$1","FaviconIcon","FarmIcon","TractorIcon","LogoutIcon","HelpIcon","Header","dispatch","useDispatch","isAuthenticated","useSelector","handleLogout","jsx","Navbar","jsxs","Nav","Fragment","Button","Footer","Container","Link","Login","loading","searchParams","useSearchParams","formData","setFormData","useState","resetSuccess","verifiedSuccess","verifiedError","useEffect","Navigate","handleChange","e","handleSubmit","err","Row","Col","Card","Alert","Form","Register","registrationSuccess","registrationMessage","contractingAuthorities","setContractingAuthorities","formErrors","setFormErrors","agranaAuthority","auth","prev","validateForm","errors","selectedAuthority","authority","PasswordReset","setEmail","setLoading","success","setSuccess","setError","PasswordResetConfirm","uid","useParams","navigate","useNavigate","setPassword","passwordConfirm","setPasswordConfirm","fetchFarms","includeGeometry","includeOperations","params","fetchFarmYear","farmYearId","fetchFarmMapData","fetchFarmStatistics","getState","importXMLFile","batchImportXMLFiles","deleteAllFarms","deleteFarm","farmId","farmSlice","updatedFarm","index","farm","existingFarmIndex","existingFarm","clearImportError","setImportSuccess","clearImportSuccess","farmSlice$1","selectImportLoading","selectImportError","selectImportSuccess","useFarmData","expanded","farmDetails","setFarmDetails","loadingRef","useRef","schlagOperations","setSchlagOperations","schlagOperationsDetails","setSchlagOperationsDetails","operationsLoading","setOperationsLoading","loadedYearIdsRef","mergeOperationsIntoYears","years","operations","opBySchlagId","op","sid","y","fs","s","loadOperationsForFarmYear","ops","updatedYears","next","typeName","loadSchlagOperations","operationsMap","operationsDetailsMap","year","feldstueck","schlag","schlagId","loadFarmDetails","forceReload","farmData","useFarmHandlers","onFarmUpdate","showEditModal","setShowEditModal","editTarget","setEditTarget","showFarmingInfoModal","setShowFarmingInfoModal","selectedAreaForEdit","setSelectedAreaForEdit","showCrudModal","setShowCrudModal","crudOperation","setCrudOperation","crudTarget","setCrudTarget","crudLoading","setCrudLoading","crudError","setCrudError","showDeleteModal","setShowDeleteModal","deleteTarget","setDeleteTarget","deleteLoading","setDeleteLoading","showDataSheetModal","setShowDataSheetModal","dataSheetOperations","setDataSheetOperations","dataSheetContext","setDataSheetContext","dataSheetTitle","setDataSheetTitle","type","item","additionalData","areaData","newValue","endpoint","operation","parentData","openAccordionItems","setOpenAccordionItems","method","createdItemId","parentId","actionText","itemText","newOpenItems","errorMessage","errorData","field","messages","groupOperationsByRide","rideMap","rideId","a","b","dateA","getRideSummary","ride","operationTypes","rideArea","area","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","__vite_glob_0_7","__vite_glob_0_8","__vite_glob_0_9","__vite_glob_0_10","__vite_glob_0_11","__vite_glob_0_12","__vite_glob_0_13","__vite_glob_0_14","__vite_glob_0_15","__vite_glob_0_16","__vite_glob_0_17","__vite_glob_0_18","__vite_glob_0_19","__vite_glob_0_20","__vite_glob_0_21","__vite_glob_0_22","__vite_glob_0_23","__vite_glob_0_24","__vite_glob_0_25","__vite_glob_0_26","__vite_glob_0_27","__vite_glob_0_28","__vite_glob_0_29","__vite_glob_0_30","__vite_glob_0_31","__vite_glob_0_32","__vite_glob_0_33","__vite_glob_0_34","__vite_glob_0_35","__vite_glob_0_36","__vite_glob_0_37","__vite_glob_0_38","__vite_glob_0_39","__vite_glob_0_40","__vite_glob_0_41","__vite_glob_0_42","__vite_glob_0_43","__vite_glob_0_44","__vite_glob_0_45","__vite_glob_0_46","__vite_glob_0_47","__vite_glob_0_48","__vite_glob_0_49","__vite_glob_0_50","__vite_glob_0_51","__vite_glob_0_52","__vite_glob_0_53","__vite_glob_0_54","__vite_glob_0_55","__vite_glob_0_56","__vite_glob_0_57","__vite_glob_0_58","__vite_glob_0_59","__vite_glob_0_60","__vite_glob_0_61","__vite_glob_0_62","__vite_glob_0_63","__vite_glob_0_64","__vite_glob_0_65","__vite_glob_0_66","__vite_glob_0_67","__vite_glob_0_68","__vite_glob_0_69","__vite_glob_0_70","__vite_glob_0_71","__vite_glob_0_72","__vite_glob_0_73","__vite_glob_0_74","__vite_glob_0_75","__vite_glob_0_76","__vite_glob_0_77","__vite_glob_0_78","__vite_glob_0_79","__vite_glob_0_80","__vite_glob_0_81","__vite_glob_0_82","__vite_glob_0_83","__vite_glob_0_84","__vite_glob_0_85","__vite_glob_0_86","__vite_glob_0_87","__vite_glob_0_88","__vite_glob_0_89","__vite_glob_0_90","__vite_glob_0_91","__vite_glob_0_92","__vite_glob_0_93","__vite_glob_0_94","__vite_glob_0_95","__vite_glob_0_96","__vite_glob_0_97","__vite_glob_0_98","__vite_glob_0_99","__vite_glob_0_100","__vite_glob_0_101","__vite_glob_0_102","__vite_glob_0_103","__vite_glob_0_104","__vite_glob_0_105","__vite_glob_0_106","__vite_glob_0_107","__vite_glob_0_108","__vite_glob_0_109","__vite_glob_0_110","__vite_glob_0_111","iconModules","iconUrls","path","filename","OPERATION_ICONS","getOperationIcon","operationTypeName","iconFile","lowerName","calendar_svg","formatGermanDecimal","num","RideGroupedOperations","isSuperuser","effectiveOpenDropdownId","effectiveSetOpenDropdownId","setEditOperationData","setShowQuickOperationModal","handleDelete","rideIdx","rideSummary","OperationItem","Accordion","Badge","idx","Dropdown","isOpen","SchlagAccordionItem","visibleLevels","unifiedSearchTerm","operationSearch","handleCrudOperation","setPreselectedSchlagData","yearMatches","feldstueckMatchesSearch","operationsCount","schlagMatchesSearch","searchLower","DropdownDivider","schlagOps","displayName","displayOperations","localSearch","FeldstueckAccordionItem","activeAccordionKey","visibleIds","schlagSearch","setUnifiedFeldstueckYear","setEditingFeldstueck","setShowUnifiedFeldstueckModal","schlaege","matchesSchlag","hasMatchingOperation","feldstueckOperations","totalOps","eventKeys","YearAccordionItem","feldstueckSearch","yearOperations","feldstuecke","matchesFeldstueck","hasMatchingSchlag","LandUseChangeManager","schlagFlaecheBrutto","onUpdate","saving","setSaving","landUseChanges","setLandUseChanges","showAddForm","setShowAddForm","editingEntry","setEditingEntry","landUseChoices","soilWorkChoices","carbonInputChoices","loadLandUseChanges","handleFormChange","resetForm","handleAdd","handleEdit","entry","handleSave","errorList","id","currentYear","yearOptions","i","Spinner","Table","choice","FarmingInfoModal","show","onHide","selectedArea","farmYear","editMode","activeTab","setActiveTab","farmingInfo","setFarmingInfo","areaName","setAreaName","editingAreaName","setEditingAreaName","selectedAreaForOperation","setSelectedAreaForOperation","showAreaSelection","setShowAreaSelection","editingOperation","setEditingOperation","isEditingMode","setIsEditingMode","newOperation","setNewOperation","options","setOptions","existingFarmingInfo","setExistingFarmingInfo","existingOperations","setExistingOperations","farmDefaultTypeOfFarming","setFarmDefaultTypeOfFarming","showToast","toastContainer","createToastContainer","toast","toastContent","icon","messageSpan","closeButton","container","style","loadData","optionsResponse","loadExistingFarmingInfo","queryParams","existing","typeOfFarming","operationToEdit","loadOperationForEditing","loadFarmDefault","farmDefault","feldstueckResponse","handleAreaSelection","handleFarmingInfoChange","handleOperationChange","handleConditionalDataChange","operationType","getOperationTypeCode","ot","saveFarmingInfo","farmingInfoResponse","saveAreaName","saveOperation","operationData","opTypeCode","resetOperationForm","cancelEdit","getHeaderDisplayName","feldstueckInfo","feldstueckName","schlagName","renderConditionalFields","u","unit","c","crop","hasSpecificProduct","hasOrganicFertilizer","hasManualValues","product","InputGroup","hasSpecificPesticideProduct","hasManualPesticideValues","Modal","fuel","Tab","UnifiedFeldstueckModal","selectedFarmYear","editFeldstueck","feldstueckData","setFeldstueckData","feldstueckNutzungsartenRes","feldstueckNutzungsartenData","handleFeldstueckChange","saveFeldstueck","dataToSend","handleClose","na","generateUUID","r","roundTo4","v","n","selectStyles","base","mobileSelectProps","QuickOperationModal","farms","onSuccess","preselectedData","editOperation","currentStep","setCurrentStep","isEditMode","selectedFarm","setSelectedFarm","selectedYear","setSelectedYear","availableYears","setAvailableYears","selectedOperationTypes","setSelectedOperationTypes","setOperationTypes","selectedSchlaege","setSelectedSchlaege","availableSchlaege","setAvailableSchlaege","schlagSearchTerm","setSchlagSearchTerm","operationDate","setOperationDate","selectedFuelType","setSelectedFuelType","fuelTypes","setFuelTypes","schlagAreas","setSchlagAreas","currentDetailStep","setCurrentDetailStep","operationTypeDetails","setOperationTypeDetails","sharedNotes","setSharedNotes","resetModal","loadInitialData","initializeEditMode","opTypeId","opType","t","details","getDetailsFromOperation","code","getDefaultDetailsForType","opTypesRes","fuelTypesRes","optionsRes","handleFarmSelect","yearMatch","handleYearSelect","getCommonCropFromSchlaege","firstCrop","handleOperationTypeToggle","newDetails","commonCropId","seed_unit_id","loadSchlaege","fullFarmYear","allSchlaege","handleSchlagToggle","isSelected","newSelection","newAreas","prevAreas","updateCropForOperations","updated","hasChanges","handleAreaChange","filteredSchlaege","useMemo","matchesBasicSearch","matchesCrop","handleDetailChange","dataType","opDetails","handleDetailBlur","canProceedToNextStep","currentOpType","items","handleNext","handleBack","roundedDetails","updatedOp","rideUuid","createdOperations","farmingInfoRes","createdOp","renderStepContent","renderEditForm","renderStep1","renderStep2","renderStep3","renderStep4","renderStep5","renderStep6","isIrrigationOperation","filteredFuelTypes","Select","f","option","getDisplayStepInfo","ListGroup","iconUrl","hasIrrigationOperation","needsDepth","soilWorkTypeOptions","o","val","seedingUnitCategory","seedingUnitOptions","seedingCropOptions","unitId","fertItems","updateFertItem","addFertItem","removeFertItem","selectedProduct","p","selectedOrganicType","defaultUnitCategory","filteredUnits","selectedOption","psmItems","updatePsmItem","addPsmItem","removePsmItem","pesticideDefaultUnitCategory","filteredPesticideUnits","irrigationDefaultUnitCategory","filteredIrrigationUnits","irrigationTypeOptions","irrigationUnitOptions","harvestUnitOptions","harvestCropOptions","getUnitName","renderOperationTypeDetailsSummary","soilWorkType","depth","depthLabel","amount","unitName","organicType","nitrogen","phosphorus","potassium","herbicide","fungicide","insecticide","irrigationType","moisture","quality","totalOperations","getStepTitle","EditModal","title","onSave","placeholder","editValue","setEditValue","YearForm","onInputChange","FeldstueckForm","nutzungsarten","SchlagForm","crops","begruenungsvarianten","cropOptions","selectedCropOption","filterOption","inputValue","formatOptionLabel","handleCropChange","proj4","L","convertToMGI","coordinates","ring","coord","lng","lat","x","convertToWGS84","calculateAreaHectares","layer","latlngs","toRad","deg","total","j","lat1","lat2","lng1","lng2","MapResizer","isVisible","featureGroupRef","map","useMap","timers","bounds","DrawControl","existingGeometry","onGeometryChange","onAreaChange","drawControlRef","initializedRef","drawnItems","wgs84Coords","geoJsonFeature","l","drawControl","handleCreated","ll","mgiCoords","handleEdited","handleDeleted","SchlagPolygonEditor","feldstueckGeometry","geoJsonData","setGeoJsonData","defaultCenter","defaultZoom","feldstueckStyle","MapContainer","TileLayer","GeoJSON","CrudModal","target","setNutzungsarten","setBegruenungsvarianten","loadingOptions","setLoadingOptions","setExistingGeometry","setFeldstueckGeometry","hasGeometry","setHasGeometry","loadingGeometry","setLoadingGeometry","pendingGeometry","setPendingGeometry","calculatedArea","setCalculatedArea","geometryChanged","setGeometryChanged","loadOptions","initializeFormData","loadSchlagGeometry","handleGeometryChange","useCallback","newGeometry","areaInHectares","handleApplyAreaToForm","maxArea","areaToApply","roundedArea","optionsEndpoint","begruenungsvariantenRes","cropId","schlagTypeOfFarming","handleInputChange","schlag_nutzungsart","geoError","getModalTitle","renderFormFields","showTabs","k","DeleteConfirmModal","onConfirm","confirmText","confirmVariant","isLoading","detail","formatDate","dateString","OperationDataSheetModal","context","printRef","getPrintStyles","handlePrint","printContent","printFrame","frameDoc","hasPrinted","triggerPrint","renderOperationDetails","sw","sd","fd","pc","ir","hd","getOperationsSummary","summary","getGroupedOperations","grouped","feldstueckId","schlagNummer","totalArea","sum","groupedOperations","schlagData","FarmDetailsCollapsible","collapseAll","toggleAllLevel","onLevelExpandStateChange","expandedIds","expandLevels","openDropdownId","setOpenDropdownId","handlers","showQuickOperationModal","preselectedSchlagData","editOperationData","showUnifiedFeldstueckModal","unifiedFeldstueckYear","editingFeldstueck","yearSearch","setYearSearch","setFeldstueckSearch","setSchlagSearch","setOperationSearch","localOpenDropdownId","setLocalOpenDropdownId","initial","lastExpandLevels","lastToggleAllLevel","level","expand","lastSearchTerm","itemsToOpen","yearHasMatch","feldstueckMatches","feldstueckHasMatchingSchlag","schlagMatches","isEdit","schlagIds","FarmsList","onFarmDelete","onFarmEdit","onAddYear","onCollapseAllComplete","onToggleAllLevelComplete","searchTerm","onExpandLevelsComplete","showDetails","setShowDetails","isAnyModalOpenRef","checkForModals","modalBackdrop","modalOpen","observer","toggleDetails","newShowDetails","lastCollapseAll","allExpanded","getContainerClasses","classes","hasYears","Collapse","MultiYearMapView","yearIds","height","interactive","fetchMapData","promises","yearId","responses","allFeatures","features","feature","transformedCoordinates","convertCoordinates","converted","getFeatureStyle","feldstueckCategory","color","onEachFeature","props","tooltipContent","popupContent","MapController","UnifiedMapView","isFiltered","selectedFarmIds","setSelectedFarmIds","setSearchTerm","showDropdown","setShowDropdown","dropdownRef","farmYearOptions","validKeys","opt","filteredPrev","filteredOptions","handleClickOutside","event","selectedYearIds","handleFarmYearToggle","handleSelectAll","handleDeselectAll","removeSelection","XMLImportModal","importLoading","importError","importSuccess","selectedFiles","setSelectedFiles","importMode","setImportMode","importResults","setImportResults","onDropSingle","acceptedFiles","file","getRootPropsSingle","getInputPropsSingle","isDragActiveSingle","useDropzone","onDropMultiple","getRootPropsMultiple","getInputPropsMultiple","isDragActiveMultiple","handleFileSelect","files","handleRemoveFile","handleImport","result","handleModeChange","mode","formatFileSize","bytes","sizes","renderImportResults","isDragActive","getRootProps","getInputProps","ProgressBar","Tabs","AgrarCommanderImportModal","betriebId","setBetriebId","setYear","mfanr","setMfanr","payload","SearchableSelect","onChange","displayKey","valueKey","disabled","onSearchChange","setIsOpen","displayValue","setDisplayValue","handleSelect","handleSearchChange","term","handleInputFocus","handleInputBlur","ManualFarmModal","editFarm","setIsEditMode","successMessage","setSuccessMessage","countries","setCountries","states","setStates","setCrops","streetSuggestions","setStreetSuggestions","showStreetSuggestions","setShowStreetSuggestions","streetSearchQuery","setStreetSearchQuery","parsedProductionNumbers","parts","countriesData","cropsResponse","fuelTypesResponse","austria","loadStatesForCountry","countryId","url","searchCityByZipCode","zipCode","communities","community","searchStreetNames","query","handleStreetSearch","selectStreetSuggestion","suggestion","addProductionNumber","removeProductionNumber","handleProductionNumberChange","newProductionNumbers","errorMessages","handleCreateAnother","MultiselectAutocomplete","selected","labelKey","wrapperRef","newSelected","removeOption","optionToRemove","FilterDrawer","onFilterApply","onFilterClear","currentFilters","filters","setFilters","loadingOps","setLoadingOps","loadingCrops","setLoadingCrops","dataSourceOptions","farmOptions","feldstueckOptions","schlagOptions","sortedYearOptions","cropsData","handleFilterChange","getActiveFiltersCount","count","applyFilters","clearAllFilters","Offcanvas","FarmKPIDisplay","filteredFarms","quickSelectedFarms","kpiData","setKpiData","isExpanded","setIsExpanded","farmIdsToFetch","cropTotals","fy","topCrops","handleExportToExcel","link","contentDisposition","filenameMatch","cropIdx","harvestInfo","FarmManagement","showImportModal","setShowImportModal","showAgrarCommanderImportModal","setShowAgrarCommanderImportModal","showDeleteAllModal","setShowDeleteAllModal","showDeleteFarmModal","setShowDeleteFarmModal","farmToDelete","setFarmToDelete","showManualFarmModal","setShowManualFarmModal","editingFarm","setEditingFarm","setCollapseAll","setToggleAllLevel","viewMode","setViewMode","handleLevelExpandStateChange","setLevelExpandState","setVisibleLevels","setExpandLevels","levelExpandState","showFilterDrawer","setShowFilterDrawer","activeFilters","setActiveFilters","currentPage","setCurrentPage","farmsPerPage","setQuickSelectedFarms","foundSchlag","foundFeldstueck","foundYear","foundFarm","handleFarmUpdate","handleFarmEdit","handleAddYear","handleFarmDelete","handleDeleteAllData","confirmDeleteFarm","confirmDeleteAll","handleCrudSave","hasGeometricData","farmsAfterQuickSelect","textSearch","selectedFarms","selectedYears","selectedFeldstuecke","selectedCrops","selectedDataSources","visible","acc","farmMatchesText","yearsToKeep","yAcc","feldstueckeToKeep","fsAcc","fsMatchesText","schlaegeToKeep","schlagAcc","ds","schlagMatchesText","hasOperationTypeFilter","hasCropFilter","filteredOperations","keepSchlag","schlagCropMatch","opTypeMatches","opCropMatches","hasMatchingSchlaege","keepFs","hasMatchingFeldstuecke","keepYear","hasMatchingYears","keepFarm","totalPages","indexOfLastFarm","indexOfFirstFarm","currentFarms","handlePageChange","pageNumber","removeFilter","newFilters","newState","ButtonGroup","Pagination","FarmOperations","setOperations","loadingOperations","setLoadingOperations","farmsInitialized","setFarmsInitialized","operationFilters","setOperationFilters","setSelectedArea","showDeleteOperationModal","setShowDeleteOperationModal","operationToDelete","setOperationToDelete","farmYears","filtered","matchesOperationType","matchesNotes","matchesFuelType","matchesArea","matchesFarm","getOperationDetails","getTotalValue","getAreaName","feldstueckPart","schlagPart","handleDeleteOperation","confirmDeleteOperation","totalValue","AdminDashboard","authLoading","setFarms","fallbackResponse","fallbackErr","uniqueBetriebe","betriebe","farmHasHarvest","operationsData","setOperationsData","fetchOperationsData","filteredOperationsData","operationsByType","operationsByMonthAndType","cropSchlaegeCounts","cropFlaecheSum","cropName","dataSource","sourceKey","flaeche","sourceSumKey","date","monthKey","filteredByType","name","months","allTypes","monthData","series","month","filteredByMonthAndType","filteredSchlaegeCrops","filteredFlaecheCrops","operationsTypeChart","echarts.init","operationsMonthChart","monthLabels","seriesData","cropsChart","totalSchlaege","cropAreaChart","totalFlaeche","xmlSum","acSum","oedueSum","manualSum","farmIds","MATCH_LABELS","STATUS_LABELS","fmtDate","iso","fmtArea","ha","participantKey","dbFarmKey","SummaryCards","overrideCounts","cards","EmailLogsBadge","logs","open","setOpen","variant","log","st","DataBadges","record","ManualMappingModal","participant","allDbFarms","onMap","search","setSearch","q","DbFarmMappingModal","dbFarm","allParticipants","DeclaredTable","records","searchText","onManualMap","mq","ki","FoundNotDeclaredTable","NotFoundTable","ParticipationVerification","report","setReport","setSearchText","exporting","setExporting","participantOverrides","setParticipantOverrides","dbFarmOverrides","setDbFarmOverrides","mappingModal","setMappingModal","dbMappingModal","setDbMappingModal","seen","addFarm","declaredAndFound","declaredNotFound","foundNotDeclared","found","notFound","override","note","fnd","totalOverrides","fetchReport","res","handleOpenManualMap","handleManualMap","handleOpenDbMapping","handleDbFarmMap","handleExport","exportReport","cd","m","OeduePdfImport","setFiles","busy","setBusy","setResult","onSubmit","FarmdokPdfImport","MainOverviewScreenshot","CreateFarmScreenshot","EditFarmScreenshot","AddFarmYearScreenshot","AddFeldstueckScreenshot","AddFeldstueckScreenshot2","AddSchlagScreenshot","AddSchlagScreenshot2","EditSchlagScreenshotKarte","EditSchlagScreenshotLUC","AddMassnahmeScreenshotMassnahmentyp","AddMassnahmeScreenshotDatumKraftstoff","AddMassnahmeScreenshotAussaat","AddMassnahmeScreenshotBeregnung","AddMassnahmeScreenshotBodenbearbeitung","AddMassnahmeScreenshotDuengung","AddMassnahmeScreenshotPflanzenschutz","AddMassnahmeScreenshotErnte","AddMassnahmeScreenshotZusammenfassung","UserManualContent","UserManualPage","ErrorPage","errorCode","showLoginButton","getErrorIcon","getErrorColor","NotFoundPage","UnauthorizedPage","ForbiddenPage","ServerErrorPage","Impressum","Datenschutz","AGB","ProtectedRoute","children","App","authChecked","Routes","Route","store","configureStore","getDefaultMiddleware","ErrorBoundary","React","errorInfo","root","createRoot","Provider","BrowserRouter"],"mappings":"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fC,GAAe,+6BCAfC,GAAe,szCCAfC,GAAe,mjDCAfC,GAAe,gmBCAfC,GAAe,ssCCAfC,GAAe,60BCAfC,GAAe,6/CCAfC,GAAe,ynCCAfC,GAAe,ysCCAfC,GAAe,g/DCAfC,GAAe,q5FCAfC,GAAe,wxBCAfC,GAAe,kxBCAfC,GAAe,iiCCAfC,GAAe,iiDCAfC,GAAe,+3CCAfC,GAAe,g9BCAfC,GAAe,iyBCAfC,GAAe,2oCCAfC,GAAe,glCCAfC,GAAe,myBCAfC,GAAe,gxBCAfC,GAAe,g3BCAfC,GAAe,+xBCAfC,GAAe,8nCCAfC,GAAe,wzCCAfC,GAAe,4sCCAfC,GAAe,iDCAfC,GAAe,+mCCAfC,GAAe,wyECAfC,GAAe,0oCCAfC,GAAe,osCCAfC,GAAe,+xFCAfC,GAAe,mUCAfC,GAAe,i2BCAfC,GAAe,mvDCAfC,GAAe,4mBCAfC,GAAe,ypDCAfC,GAAe,8kCCAfC,GAAe,4+BCAfC,GAAe,g6BCAfC,GAAe,+zBCAfC,GAAe,qlECAfC,GAAe,ykECAfC,GAAe,u5BCAfC,GAAe,olCCAfC,GAAe,+nCCAfC,GAAe,ihBCAfC,GAAe,6eCAfC,GAAe,4CCAfC,GAAe,m5BCAfC,GAAe,6uBCAfC,GAAe,41BCAfC,GAAe,65BCAfC,GAAe,wfCAfC,GAAe,uqDCAfC,GAAe,wwBCAfC,GAAe,wdCAfC,GAAe,8sBCAfC,GAAe,usBCAfC,GAAe,4jCCAfC,GAAe,y0DCAfC,GAAe,o0BCAfC,GAAe,gtHCAfC,GAAe,ikCCAfC,GAAe,igICAfC,GAAe,wpCCAfC,GAAe,qxCCAfC,GAAe,suBCAfC,GAAe,wwCCAfC,GAAe,kwCCAfC,GAAe,4/BCAfC,GAAe,ymCCAfC,GAAe,i1BCAfC,GAAe,8vBCAfC,GAAe,k1BCAfC,GAAe,0oDCAfC,GAAe,mDCAfC,GAAe,+iCCAfC,GAAe,+CCAfC,GAAe,unECAfC,GAAe,o2BCAfC,GAAe,s7BCAfC,GAAe,6oCCAfC,GAAe,gpCCAfC,GAAe,24BCAfC,GAAe,ggCCAfC,GAAe,6jCCAfC,GAAe,wyBCAfC,GAAe,4jCCAfC,GAAe,89CCAfC,GAAe,kqCCAfC,GAAe,ojDC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"}