{
  "version": 3,
  "sources": ["../server.ts", "../src/questions.ts"],
  "sourcesContent": ["import express from 'express';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport { createServer as createViteServer } from 'vite';\nimport { GoogleGenAI, Type } from '@google/genai';\nimport { quizQuestions } from './src/questions.js';\nimport { FullAnalysisResult, EmailMailboxState } from './src/types.js';\n\nimport 'dotenv/config';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst app = express();\nconst PORT = 3000;\n\napp.use(express.json());\n\n// In-Memory Database for demonstration and sandbox interactivity\n// Simulates persistent backend storage for GDPR-compliant analysis & email automation\nconst userReports = new Map<string, {\n  calculatedScores: any;\n  geminiAnalysis?: any;\n  timestamp: string;\n  userStats: any;\n  responses: any[];\n  optInConfirmed: boolean;\n}>();\n\nconst virtualMailboxes = new Map<string, EmailMailboxState[]>();\n\n// Helper to push a virtual email\nfunction sendVirtualEmail(email: string, subject: string, bodyHtml: string) {\n  const normEmail = email.trim().toLowerCase();\n  if (!virtualMailboxes.has(normEmail)) {\n    virtualMailboxes.set(normEmail, []);\n  }\n  \n  const emails = virtualMailboxes.get(normEmail)!;\n  const newEmail: EmailMailboxState = {\n    id: 'msg_' + Math.random().toString(36).substring(2, 9),\n    subject,\n    sender: 'Sicherheit & Analyse <system@mein-koerpertest.sbs>',\n    timestamp: new Date().toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }),\n    bodyHtml,\n    isRead: false,\n    optInConfirmed: false\n  };\n  \n  emails.unshift(newEmail);\n}\n\n// Instantiate Gemini client\nconst apiKey = process.env.GEMINI_API_KEY;\nlet aiClient: GoogleGenAI | null = null;\n\nfunction getGeminiClient(): GoogleGenAI {\n  if (!aiClient) {\n    if (!apiKey) {\n      console.warn(\"WARN: GEMINI_API_KEY is not defined. Falling back to rule-based analysis.\");\n    }\n    aiClient = new GoogleGenAI({\n      apiKey: apiKey || 'MOCK_KEY',\n      httpOptions: {\n        headers: {\n          'User-Agent': 'aistudio-build',\n        }\n      }\n    });\n  }\n  return aiClient;\n}\n\n// 1. POST: Analyze Body & Submit Quiz\napp.post('/api/analyze', async (req, res) => {\n  try {\n    const { userStats, responses, email, consentDsgvo, marketingConsent } = req.body;\n\n    if (!consentDsgvo) {\n      return res.status(400).json({ error: 'Sie m\u00FCssen den DSGVO-Bestimmungen zustimmen, um fortzufahren.' });\n    }\n\n    if (!email || !email.includes('@')) {\n      return res.status(400).json({ error: 'Bitte geben Sie eine g\u00FCltige E-Mail-Adresse ein.' });\n    }\n\n    // A. Perform local mathematical calculation of categories (Fallback & Base numbers)\n    let hydrationPoints = 50;\n    let metabolismPoints = 50;\n    let fitnessPoints = 50;\n    let stressPoints = 50;\n\n    let hydrationCount = 1;\n    let metabolismCount = 1;\n    let fitnessCount = 1;\n    let stressCount = 1;\n\n    // Go through client responses and calculate score averages\n    responses.forEach((resp: any) => {\n      const question = quizQuestions.find(q => q.id === resp.questionId);\n      if (question && question.options) {\n        resp.selectedAnswers.forEach((ansVal: string) => {\n          const matchedOpt = question.options?.find(o => o.value === ansVal);\n          if (matchedOpt && matchedOpt.scoreEffect) {\n            const effect = matchedOpt.scoreEffect as any;\n            if (typeof effect.hydration === 'number') {\n              hydrationPoints += effect.hydration;\n              hydrationCount++;\n            }\n            if (typeof effect.metabolism === 'number') {\n              metabolismPoints += effect.metabolism;\n              metabolismCount++;\n            }\n            if (typeof effect.fitness === 'number') {\n              fitnessPoints += effect.fitness;\n              fitnessCount++;\n            }\n            if (typeof effect.stress === 'number') {\n              stressPoints += effect.stress;\n              stressCount++;\n            }\n          }\n        });\n      }\n    });\n\n    const calculatedScores = {\n      hydration: Math.min(100, Math.round(hydrationPoints / hydrationCount)),\n      metabolism: Math.min(100, Math.round(metabolismPoints / metabolismCount)),\n      fitness: Math.min(100, Math.round(fitnessPoints / fitnessCount)),\n      stress: Math.min(100, Math.round(stressPoints / stressCount)),\n    };\n\n    // Calculate overall score\n    const overallScore = Math.round(\n      (calculatedScores.hydration + calculatedScores.metabolism + calculatedScores.fitness + calculatedScores.stress) / 4\n    );\n\n    // B. Estimate Caloric requirement & Basal Metabolic Rate using Mifflin-St. Jeor if height/weight are provided\n    let bmi = undefined;\n    let dailyCaloricNeed = undefined;\n    let dailyWaterNeedLiters = 2.0;\n\n    const baseCalWater = userStats.gender === 'female' ? 1.8 : 2.2;\n    const actMultiplier = userStats.activityLevel === 'sedentary' ? 1.2 :\n                          userStats.activityLevel === 'light' ? 1.375 :\n                          userStats.activityLevel === 'active' ? 1.55 : 1.725;\n    \n    dailyWaterNeedLiters = parseFloat((baseCalWater * actMultiplier).toFixed(1));\n\n    if (userStats.weightKg && userStats.heightCm) {\n      const hM = userStats.heightCm / 100;\n      bmi = parseFloat((userStats.weightKg / (hM * hM)).toFixed(1));\n\n      // BMR estimation\n      let bmr = 10 * userStats.weightKg + 6.25 * userStats.heightCm - 5 * (userStats.ageGroup === '18-29' ? 24 : userStats.ageGroup === '30-49' ? 40 : userStats.ageGroup === '50-65' ? 57 : 72);\n      if (userStats.gender === 'male') bmr += 5;\n      else bmr -= 161;\n\n      dailyCaloricNeed = Math.round(bmr * actMultiplier);\n    }\n\n    const normEmail = email.trim().toLowerCase();\n\n    // Store in our mock report map\n    userReports.set(normEmail, {\n      calculatedScores,\n      timestamp: new Date().toISOString(),\n      userStats,\n      responses,\n      optInConfirmed: false\n    });\n\n    // C. Fire background Gemini Request with strict JSON schema to generate custom wellness coaching response\n    let aiResponse = null;\n    if (apiKey) {\n      try {\n        const client = getGeminiClient();\n        const genderText = userStats.gender === 'male' ? 'm\u00E4nnlich' : 'weiblich';\n        const prompt = `Erstelle eine pr\u00E4zise, professionelle K\u00F6rper- und Ern\u00E4hrungsanalyse auf Deutsch f\u00FCr eine ${genderText} Person in der Altersgruppe ${userStats.ageGroup} mit dem Aktivit\u00E4tslevel \"${userStats.activityLevel}\".\n        Die errechneten Indexe (auf einer Skala von 0 bis 100) sind:\n        - Hydrationsindex: ${calculatedScores.hydration}\n        - Stoffwechselindex: ${calculatedScores.metabolism}\n        - Fitness-Score: ${calculatedScores.fitness}\n        - Stress-Resistenz: ${calculatedScores.stress}\n        ${bmi ? `- Gesamt-BMI: ${bmi}` : ''}\n        ${dailyCaloricNeed ? `- Berechneter Kalorienbedarf: ${dailyCaloricNeed} kcal/Tag` : ''}\n        \n        Bitte gib spezifische, motivierende Einsch\u00E4tzungen und genaue Handlungsempfehlungen f\u00FCr jede der vier Kategorien an.`;\n\n        const geminiRes = await client.models.generateContent({\n          model: 'gemini-3.5-flash',\n          contents: prompt,\n          config: {\n            systemInstruction: 'Du bist ein zertifizierter deutscher Sportwissenschaftler, Ern\u00E4hrungsberater und DSGVO-Auditor f\u00FCr Gesundheitsdaten. Formuliere absolut h\u00F6flich, fundiert, verst\u00E4ndlich und professionell im \"Sie\"-Stil.',\n            responseMimeType: 'application/json',\n            responseSchema: {\n              type: Type.OBJECT,\n              properties: {\n                overallRecommendation: { type: Type.STRING, description: \"Zusammenfassung des gesundheitlichen Zustands (3-4 S\u00E4tze).\" },\n                hydrationAssessment: { type: Type.STRING },\n                hydrationTips: { type: Type.ARRAY, items: { type: Type.STRING } },\n                nutritionAssessment: { type: Type.STRING },\n                nutritionTips: { type: Type.ARRAY, items: { type: Type.STRING } },\n                fitnessAssessment: { type: Type.STRING },\n                fitnessTips: { type: Type.ARRAY, items: { type: Type.STRING } },\n                stressAssessment: { type: Type.STRING },\n                stressTips: { type: Type.ARRAY, items: { type: Type.STRING } },\n                detailedReportMarkdown: { type: Type.STRING, description: \"Ein langer, ausf\u00FChrlicher und wissenschaftlich begr\u00FCndeter Flie\u00DFtext (min. 400 W\u00F6rter) auf Deutsch mit Formatierungen wie fett gedruckten Kerndetails \u00FCber Risikofaktoren und Potenziale.\" }\n              },\n              required: [\n                \"overallRecommendation\", \"hydrationAssessment\", \"hydrationTips\",\n                \"nutritionAssessment\", \"nutritionTips\", \"fitnessAssessment\", \"fitnessTips\",\n                \"stressAssessment\", \"stressTips\", \"detailedReportMarkdown\"\n              ]\n            }\n          }\n        });\n\n        if (geminiRes.text) {\n          aiResponse = JSON.parse(geminiRes.text);\n          // Save back into report map\n          const report = userReports.get(normEmail);\n          if (report) {\n            report.geminiAnalysis = aiResponse;\n            userReports.set(normEmail, report);\n          }\n        }\n      } catch (err) {\n        console.error(\"Gemini Generation Error:\", err);\n      }\n    }\n\n    // D. Trigger double opt-in email in virtual mailbox\n    const doubleOptInLink = `/confirm-optin?email=${encodeURIComponent(normEmail)}`;\n    const optInEmailBody = `\n      <div style=\"font-family: sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #e1e8ed; border-radius: 8px;\">\n        <h2 style=\"color: #2c3e50; border-bottom: 2px solid #5d5dff; padding-bottom: 8px;\">Willkommen bei Mein K\u00F6rpertest</h2>\n        <p>Guten Tag,</p>\n        <p>Vielen Dank f\u00FCr Ihre Teilnahme an unserem wissenschaftlich fundierten K\u00F6rper- und Fitnesstest.</p>\n        <p>Um Ihre <strong>vollst\u00E4ndige E-Mail-Auswertung</strong> zu aktivieren und Ihr pers\u00F6nliches K\u00F6rperprofil freizuschalten, ist gem\u00E4\u00DF der europ\u00E4ischen <strong>DSGVO</strong> eine Verifizierung Ihrer E-Mail-Adresse erforderlich (Double Opt-In).</p>\n        <div style=\"text-align: center; margin: 30px 0;\">\n          <a href=\"${doubleOptInLink}\" style=\"background-color: #5d5dff; color: white; padding: 12px 25px; text-decoration: none; border-radius: 6px; font-weight: bold; display: inline-block;\">Jetzt E-Mail-Auswertung best\u00E4tigen</a>\n        </div>\n        <p style=\"font-size: 12px; color: #7f8c8d; line-height: 1.4;\">\n          Sollten Sie diesen Test nicht selbst durchgef\u00FChrt haben, k\u00F6nnen Sie diese E-Mail ignorieren. Ihre Daten werden nach 24 Stunden automatisch gel\u00F6scht. Sie haben jederzeit das Recht, Auskunft \u00FCber Ihre gespeicherten Daten zu verlangen oder deren sofortige L\u00F6schung anzufordern.\n        </p>\n        <hr style=\"border: none; border-top: 1px solid #ecf0f1; margin: 20px 0;\" />\n        <p style=\"font-size: 11px; color: #bdc3c7;\">\n          Mein-Koerpertest.sbs | DSGVO-Konformit\u00E4t & Gesundheitsschutz | Deutschland\n        </p>\n      </div>\n    `;\n\n    // Deliver the first virtual DOI email\n    sendVirtualEmail(normEmail, `\u26A0\uFE0F Aktion erforderlich: Best\u00E4tigen Sie Ihre K\u00F6rperanalyse-Auswertung`, optInEmailBody);\n\n    return res.json({\n      success: true,\n      email,\n      calculatedScores,\n      overallScore,\n      bmi,\n      dailyCaloricNeed,\n      dailyWaterNeedLiters\n    });\n\n  } catch (error: any) {\n    console.error(\"Analysis Exception:\", error);\n    return res.status(500).json({ error: error.message || 'Ein interner Fehler ist aufgetreten.' });\n  }\n});\n\n// 2. GET: Virtual Mailbox for a user\napp.get('/api/mailbox', (req, res) => {\n  const email = req.query.email as string;\n  if (!email || !email.includes('@')) {\n    return res.json({ messages: [] });\n  }\n  const normEmail = email.trim().toLowerCase();\n  const messages = virtualMailboxes.get(normEmail) || [];\n  return res.json({ messages });\n});\n\n// 3. POST: Confirm Double Opt-In and send the actual Report Email\napp.post('/api/mailbox/confirm-optin', (req, res) => {\n  const { email } = req.body;\n  if (!email) {\n    return res.status(400).json({ error: 'E-Mail fehlt.' });\n  }\n\n  const normEmail = email.trim().toLowerCase();\n  const report = userReports.get(normEmail);\n\n  if (!report) {\n    return res.status(404).json({ error: 'Kein Report-Eintrag f\u00FCr diese E-Mail gefunden.' });\n  }\n\n  report.optInConfirmed = true;\n  userReports.set(normEmail, report);\n\n  // Generate customized second email showing the completed analysis report\n  const scores = report.calculatedScores;\n  const analysis = report.geminiAnalysis;\n\n  const summaryText = analysis ? analysis.overallRecommendation : 'Ihre K\u00F6rperwerte deuten auf eine solide Grundlage hin. Es gibt jedoch Optimierungsbedarf in der Fl\u00FCssigkeitszufuhr und dem Belastungsmanagement.';\n  const detailedText = analysis ? analysis.detailedReportMarkdown : 'Bitte nutzen Sie das integrierte Web-Dashboard f\u00FCr die vollumf\u00E4ngliche, interaktive Auswertung.';\n\n  const reportEmailBody = `\n    <div style=\"font-family: sans-serif; max-width: 650px; margin: 0 auto; padding: 25px; border: 1px solid #e1e8ed; border-radius: 8px;\">\n      <div style=\"background-color: #5d5dff; color: white; padding: 15px 20px; border-radius: 6px 6px 0 0; text-align: center;\">\n        <h1 style=\"margin: 0; font-size: 24px;\">Ihre pers\u00F6nliche K\u00F6rperauswertung</h1>\n        <p style=\"margin: 5px 0 0 0; font-size: 14px;\">Analysebericht von Mein-Koerpertest.sbs</p>\n      </div>\n\n      <div style=\"padding: 20px 0;\">\n        <p>Guten Tag,</p>\n        <p>vielen Dank f\u00FCr Ihre Mail-Best\u00E4tigung. Ihre medizinisch-pr\u00E4ventive Analyse wurde erfolgreich generiert.</p>\n        <div style=\"background-color: #f8f9fa; border-left: 4px solid #5d5dff; padding: 15px; margin: 15px 0;\">\n          <h4 style=\"margin: 0 0 8px 0; color: #2c3e50;\">Zusammenfassung des Befundes:</h4>\n          <p style=\"margin: 0; line-height: 1.5; color: #555;\">${summaryText}</p>\n        </div>\n\n        <h3 style=\"color: #2c3e50; border-bottom: 1px solid #eee; padding-bottom: 5px; margin-top: 25px;\">Ihre Kernkennzahlen im \u00DCberblick</h3>\n        <table style=\"width: 100%; border-collapse: collapse; margin-top: 10px;\">\n          <tr style=\"background-color: #fbfbfb;\">\n            <td style=\"padding: 10px; border: 1px solid #eee; font-weight: bold;\">Vital-Kategorie</td>\n            <td style=\"padding: 10px; border: 1px solid #eee; font-weight: bold; text-align: right;\">Score (0-100)</td>\n          </tr>\n          <tr>\n            <td style=\"padding: 10px; border: 1px solid #eee;\">\uD83D\uDC33 Hydration & Zellwasser</td>\n            <td style=\"padding: 10px; border: 1px solid #eee; text-align: right; font-weight: bold; color: ${scores.hydration > 70 ? '#2ecc71' : scores.hydration > 45 ? '#f39c12' : '#e74c3c'}\">${scores.hydration} / 100</td>\n          </tr>\n          <tr>\n            <td style=\"padding: 10px; border: 1px solid #eee;\">\uD83D\uDD25 Stoffwechsel-Index</td>\n            <td style=\"padding: 10px; border: 1px solid #eee; text-align: right; font-weight: bold; color: ${scores.metabolism > 70 ? '#2ecc71' : scores.metabolism > 45 ? '#f39c12' : '#e74c3c'}\">${scores.metabolism} / 100</td>\n          </tr>\n          <tr>\n            <td style=\"padding: 10px; border: 1px solid #eee;\">\u26A1 Fitness & Muskelschutz</td>\n            <td style=\"padding: 10px; border: 1px solid #eee; text-align: right; font-weight: bold; color: ${scores.fitness > 70 ? '#2ecc71' : scores.fitness > 45 ? '#f39c12' : '#e74c3c'}\">${scores.fitness} / 100</td>\n          </tr>\n          <tr>\n            <td style=\"padding: 10px; border: 1px solid #eee;\">\uD83E\uDDE0 Stress-Resistenz & Schlaf</td>\n            <td style=\"padding: 10px; border: 1px solid #eee; text-align: right; font-weight: bold; color: ${scores.stress > 70 ? '#2ecc71' : scores.stress > 45 ? '#f39c12' : '#e74c3c'}\">${scores.stress} / 100</td>\n          </tr>\n        </table>\n\n        <h3 style=\"color: #2c3e50; border-bottom: 1px solid #eee; padding-bottom: 5px; margin-top: 30px;\">Hintergrundanalyse & Gesundheitsprognose</h3>\n        <p style=\"white-space: pre-line; line-height: 1.6; color: #444;\">${detailedText}</p>\n\n        <div style=\"background-color: #edf2f7; border-radius: 6px; padding: 15px; margin-top: 30px; font-size: 13px;\">\n          <h4 style=\"margin: 0 0 5px 0; color: #4a5568;\">DSGVO-Sicherheitshinweis:</h4>\n          <p style=\"margin: 0; color: #4a5568; line-height: 1.5;\">\n            Diese Auswertung wurde verschl\u00FCsselt verarbeitet. Sie k\u00F6nnen Ihre bei uns hinterlegten Werte im interaktiven DSGVO-Dashboard unter mein-koerpertest.sbs jederzeit einsehen, als JSON exportieren oder mit sofortiger Wirkung unwiderruflich l\u00F6schen. Wir verkaufen oder teilen Ihre Gesundheitsdaten niemals.\n          </p>\n        </div>\n      </div>\n\n      <hr style=\"border: none; border-top: 1px solid #eee; margin: 25px 0;\" />\n      <div style=\"text-align: center; color: #95a5a6; font-size: 11px;\">\n        <p>\u00A9 2026 Mein-Koerpertest.sbs. Alle Rechte vorbehalten.</p>\n        <p>Deutschland | Datenschutzkonform gem\u00E4\u00DF Art. 6 Abs. 1 lit. a und Art. 9 Abs. 2 lit. a DSGVO</p>\n      </div>\n    </div>\n  `;\n\n  // Deliver the analysis report email\n  sendVirtualEmail(normEmail, `\uD83D\uDCCB Ihre fertige automatische K\u00F6rperauswertung (Befund von Mein-K\u00F6rpertest)`, reportEmailBody);\n  \n  // Set DOI confirmation state in the emails list\n  const mailboxes = virtualMailboxes.get(normEmail) || [];\n  mailboxes.forEach(m => {\n    if (m.subject.includes('Aktion erforderlich')) {\n      m.optInConfirmed = true;\n    }\n  });\n\n  return res.json({ success: true });\n});\n\n// 4. GET: Query completed full analysis (Both scores and AI interpretation)\napp.get('/api/analysis', (req, res) => {\n  const email = req.query.email as string;\n  if (!email) {\n    return res.status(400).json({ error: 'E-Mail-Adresse erforderlich.' });\n  }\n\n  const normEmail = email.trim().toLowerCase();\n  const report = userReports.get(normEmail);\n\n  if (!report) {\n    return res.status(444).json({ error: 'Kein Report vorhanden.' }); // unique code\n  }\n\n  return res.json({\n    userStats: report.userStats,\n    calculatedScores: report.calculatedScores,\n    geminiAnalysis: report.geminiAnalysis,\n    optInConfirmed: report.optInConfirmed,\n    timestamp: report.timestamp\n  });\n});\n\n// 5. POST: GDPR-Compliant Immediate Data Deletion (Art. 17 DSGVO)\napp.post('/api/delete-data', (req, res) => {\n  const { email } = req.body;\n  if (!email) {\n    return res.status(400).json({ error: 'E-Mail-Adresse fehlt.' });\n  }\n\n  const normEmail = email.trim().toLowerCase();\n  const reportExists = userReports.has(normEmail);\n  const mailboxExists = virtualMailboxes.has(normEmail);\n\n  if (reportExists) {\n    userReports.delete(normEmail);\n  }\n  if (mailboxExists) {\n    virtualMailboxes.delete(normEmail);\n  }\n\n  return res.json({\n    success: true,\n    message: 'Ihre personenbezogenen Daten wurden gem\u00E4\u00DF Art. 17 DSGVO (Recht auf Vergessenwerden) dauerhaft und unwiderruflich aus allen fl\u00FCchtigen Zwischenspeichern gel\u00F6scht.'\n  });\n});\n\n// Vite server integration in development mode\nlet viteServer: any;\nasync function startServer() {\n  if (process.env.NODE_ENV !== 'production') {\n    viteServer = await createViteServer({\n      server: { middlewareMode: true },\n      appType: 'spa',\n    });\n    app.use(viteServer.middlewares);\n  } else {\n    const distPath = path.join(process.cwd(), 'dist');\n    app.use(express.static(distPath));\n    app.get('*', (req, res) => {\n      res.sendFile(path.join(distPath, 'index.html'));\n    });\n  }\n\n  app.listen(PORT, '0.0.0.0', () => {\n    console.log(`Server is running at http://localhost:${PORT}`);\n  });\n}\n\nstartServer();\n", "import { QuizQuestion } from './types.js';\n\nexport const quizQuestions: QuizQuestion[] = [\n  {\n    id: 'q_age',\n    category: 'general',\n    questionText: 'In welcher Altersgruppe befinden Sie sich?',\n    description: 'Das Alter beeinflusst den Grundumsatz des Stoffwechsels und die Geweberegeneration.',\n    type: 'select',\n    options: [\n      { value: '18-29', label: '18 - 29 Jahre', scoreEffect: { metabolism: 90, fitness: 90 } },\n      { value: '30-49', label: '30 - 49 Jahre', scoreEffect: { metabolism: 75, fitness: 80 } },\n      { value: '50-65', label: '50 - 65 Jahre', scoreEffect: { metabolism: 60, fitness: 70 } },\n      { value: '65+', label: '\u00DCber 65 Jahre', scoreEffect: { metabolism: 45, fitness: 55 } }\n    ]\n  },\n  {\n    id: 'q_activity',\n    category: 'fitness',\n    questionText: 'Wie aktiv gestaltet sich Ihr Alltag (Beruf & Freizeit)?',\n    description: 'Ihre t\u00E4gliche Grundbewegung bestimmt den Energieverbrauch ma\u00DFgeblich.',\n    type: 'select',\n    options: [\n      { value: 'sedentary', label: 'Vorwiegend sitzend (z.B. B\u00FCroarbeit, wenig Alltagsbewegung)', scoreEffect: { metabolism: 40, fitness: 40, stress: 50 } },\n      { value: 'light', label: 'Teils stehend/gehend oder moderate Alltagsaktivit\u00E4t', scoreEffect: { metabolism: 65, fitness: 60, stress: 65 } },\n      { value: 'active', label: 'Aktiv (Beruf mit Bewegung, regelm\u00E4\u00DFiges Gehen)', scoreEffect: { metabolism: 80, fitness: 75, stress: 75 } },\n      { value: 'athletic', label: 'Sehr aktiv / k\u00F6rperlich fordernd (Handwerk, Leistungssport)', scoreEffect: { metabolism: 95, fitness: 95, stress: 85 } }\n    ]\n  },\n  {\n    id: 'q_hydration',\n    category: 'nutrition',\n    questionText: 'Wie viel reines Wasser oder unges\u00FC\u00DFten Tee trinken Sie durchschnittlich pro Tag?',\n    description: 'Eine ausreichende Hydration ist essentiell f\u00FCr die Nierenfunktion und den Zellstoffwechsel.',\n    type: 'select',\n    options: [\n      { value: 'low', label: 'Weniger als 1 Liter', scoreEffect: { hydration: 30, metabolism: 50 } },\n      { value: 'medium', label: '1 bis 1,8 Liter', scoreEffect: { hydration: 65, metabolism: 75 } },\n      { value: 'ideal', label: '1,8 bis 2,5 Liter', scoreEffect: { hydration: 95, metabolism: 90 } },\n      { value: 'high', label: '\u00DCber 2,5 Liter', scoreEffect: { hydration: 100, metabolism: 85 } }\n    ]\n  },\n  {\n    id: 'q_diet',\n    category: 'nutrition',\n    questionText: 'Wie hoch ist der Anteil an frischem Gem\u00FCse, Obst und ballaststoffreichen Lebensmitteln in Ihrer Ern\u00E4hrung?',\n    description: 'Vitamine, Mineralien und Ballaststoffe st\u00FCtzen das Mikrobiom und d\u00E4mmen Entz\u00FCndungen ein.',\n    type: 'select',\n    options: [\n      { value: 'rare', label: 'Sehr gering (selten Gem\u00FCse/Obst, viel Fast-Food oder Wei\u00DFbrot)', scoreEffect: { metabolism: 30, nutrition: 30, stress: 40 } as any },\n      { value: 'moderate', label: 'M\u00E4\u00DFig (Gelegentlich frische Kost, oft Mischkost)', scoreEffect: { metabolism: 60, nutrition: 65, stress: 65 } as any },\n      { value: 'good', label: 'Gut (T\u00E4glich mindestens 2-3 Portionen Gem\u00FCse/Obst)', scoreEffect: { metabolism: 85, nutrition: 85, stress: 80 } as any },\n      { value: 'excellent', label: 'Hervorragend (Frisch zubereitete, pflanzenbetonte Vollwertkost)', scoreEffect: { metabolism: 95, nutrition: 95, stress: 90 } as any }\n    ]\n  },\n  {\n    id: 'q_salt_sugar',\n    category: 'nutrition',\n    questionText: 'Wie oft konsumieren Sie stark verarbeitete Lebensmittel, zuckerhaltige Snacks oder Softdrinks?',\n    description: 'Einfache Zucker und Transfetts\u00E4uren k\u00F6nnen den Insulinspiegel destabilisieren.',\n    type: 'select',\n    options: [\n      { value: 'frequent', label: 'T\u00E4glich', scoreEffect: { metabolism: 40, hydration: 60 } },\n      { value: 'moderate', label: 'Mehrmals pro Woche', scoreEffect: { metabolism: 65, hydration: 75 } },\n      { value: 'rare', label: 'Selten (Nur wenige Male im Monat)', scoreEffect: { metabolism: 85, hydration: 90 } },\n      { value: 'never', label: 'Sogut wie nie / Gar nicht', scoreEffect: { metabolism: 95, hydration: 95 } }\n    ]\n  },\n  {\n    id: 'q_cardio',\n    category: 'fitness',\n    questionText: 'Wie oft treiben Sie Ausdauersport (Laufen, Radfahren, Schwimmen, z\u00FCgiges Wandern)?',\n    description: 'Kardiovaskul\u00E4res Training st\u00E4rkt das Herz-Kreislauf-System und beugt Gef\u00E4\u00DFverkalkung vor.',\n    type: 'select',\n    options: [\n      { value: 'none', label: 'Gar nicht / Selten', scoreEffect: { fitness: 30, stress: 45 } },\n      { value: 'occasional', label: '1 - 2 Mal im Monat', scoreEffect: { fitness: 50, stress: 60 } },\n      { value: 'regular', label: '1 - 2 Mal pro Woche', scoreEffect: { fitness: 80, stress: 80 } },\n      { value: 'intense', label: '3 Mal oder h\u00E4ufiger pro Woche', scoreEffect: { fitness: 98, stress: 95 } }\n    ]\n  },\n  {\n    id: 'q_muscles',\n    category: 'fitness',\n    questionText: 'F\u00FChren Sie regelm\u00E4\u00DFig Krafttraining, Dehn\u00FCbungen oder r\u00FCckenst\u00E4rkende Gymnastik durch?',\n    description: 'Muskelmasse und Flexibilit\u00E4t st\u00FCtzen das Skelett, entlasten Gelenke und steigern den Grundumsatz.',\n    type: 'select',\n    options: [\n      { value: 'none', label: 'Nein, vernachl\u00E4ssige ich komplett', scoreEffect: { fitness: 35, metabolism: 45 } },\n      { value: 'stretching', label: 'Nur gelegentliches Dehnen oder Yoga', scoreEffect: { fitness: 55, metabolism: 60 } },\n      { value: 'regular', label: 'Gezieltes Training 1-2 Mal pro Woche', scoreEffect: { fitness: 85, metabolism: 85 } },\n      { value: 'dedicated', label: 'Intensives Training mindestens 3 Mal pro Woche', scoreEffect: { fitness: 95, metabolism: 95 } }\n    ]\n  },\n  {\n    id: 'q_sleep_duration',\n    category: 'stress',\n    questionText: 'Wie viele Stunden schlafen Sie durchschnittlich pro Nacht?',\n    description: 'Die Schlafdauer moduliert die Aussch\u00FCttung von Leptin und Ghrelin (Stoffwechselhormone) sowie Cortisol.',\n    type: 'select',\n    options: [\n      { value: 'poor_low', label: 'Weniger als 6 Stunden', scoreEffect: { stress: 40, metabolism: 50 } },\n      { value: 'suboptimal_low', label: '6 bis 7 Stunden', scoreEffect: { stress: 70, metabolism: 75 } },\n      { value: 'ideal', label: '7 bis 8,5 Stunden', scoreEffect: { stress: 95, metabolism: 95 } },\n      { value: 'excessive', label: 'Mehr als 9 Stunden', scoreEffect: { stress: 80, metabolism: 80 } }\n    ]\n  },\n  {\n    id: 'q_sleep_quality',\n    category: 'stress',\n    questionText: 'Wie stufen Sie Ihre allgemeine Schlafqualit\u00E4t ein (Durchschlafen, Erholung)?',\n    description: 'H\u00E4ufiges Erwachen st\u00F6rt die Tiefschlaf- und REM-Phasen, was die kognitive Regeneration behindert.',\n    type: 'select',\n    options: [\n      { value: 'restless', label: 'Sehr unruhig, wache oft auf, f\u00FChle mich morgens m\u00FCde', scoreEffect: { stress: 30, metabolism: 55 } },\n      { value: 'moderate', label: 'Mittelm\u00E4\u00DFig, brauche l\u00E4nger zum Einschlafen', scoreEffect: { stress: 60, metabolism: 75 } },\n      { value: 'restful', label: 'Gut, schlafe meist durch und f\u00FChle mich erholt', scoreEffect: { stress: 90, metabolism: 90 } }\n    ]\n  },\n  {\n    id: 'q_stress_level',\n    category: 'stress',\n    questionText: 'Wie hoch empfinden Sie Ihre allt\u00E4gliche mentale oder psychische Belastung (Stress)?',\n    description: 'Chronischer Stress f\u00FChrt zu dauerhaft hohem Blutdruck und hemmt die Verdauung.',\n    type: 'select',\n    options: [\n      { value: 'severe', label: 'Sehr hoch (Dauerstress, kaum Entlastungsmomente)', scoreEffect: { stress: 25, metabolism: 50 } },\n      { value: 'moderate', label: 'Mittelm\u00E4\u00DFig (Phasenweise Stress, aber steuerbar)', scoreEffect: { stress: 65, metabolism: 75 } },\n      { value: 'low', label: 'Gering (Ausgeglichener Alltag, ausreichend Erholung)', scoreEffect: { stress: 90, metabolism: 90 } }\n    ]\n  },\n  {\n    id: 'q_energy',\n    category: 'complaints',\n    questionText: 'Leiden Sie tags\u00FCber unter pl\u00F6tzlichen Leistungstiefs, M\u00FCdigkeitsattacken oder Hei\u00DFhunger?',\n    description: 'Dies deutet h\u00E4ufig auf Blutzuckerschwankungen oder suboptimale N\u00E4hrstoffversorgung hin.',\n    type: 'select',\n    options: [\n      { value: 'frequent', label: 'Ja, fast t\u00E4glich, besonders nach Mahlzeiten', scoreEffect: { metabolism: 40, hydration: 60 } },\n      { value: 'sometimes', label: 'Gelegentlich, je nach Stresslevel', scoreEffect: { metabolism: 70, hydration: 80 } },\n      { value: 'rarely', label: 'Sehr selten / Nur bei akutem Schlafmangel', scoreEffect: { metabolism: 90, hydration: 95 } }\n    ]\n  },\n  {\n    id: 'q_joints',\n    category: 'complaints',\n    questionText: 'Beobachten Sie an sich Gelenkbeschwerden, Muskelverspannungen oder Bewegungssteifigkeit?',\n    description: 'Mangelnde Muskulatur, unzureichende Dehnung oder Fehlhaltungen k\u00F6nnen zu myofaszialem Schmerz f\u00FChren.',\n    type: 'select',\n    options: [\n      { value: 'constant', label: 'Ja, ich sp\u00FCre regelm\u00E4\u00DFig Steifigkeit oder Schmerzen im R\u00FCcken/Nacken/Gelenk', scoreEffect: { fitness: 40, stress: 55 } },\n      { value: 'occasional', label: 'Nur gelegentlich nach starker Beanspruchung oder K\u00E4lte', scoreEffect: { fitness: 70, stress: 75 } },\n      { value: 'none', label: 'Nein, ich f\u00FChle mich beweglich und schmerzfrei', scoreEffect: { fitness: 95, stress: 95 } }\n    ]\n  }\n];\n"],
  "mappings": "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",
  "names": ["import_path", "express", "createViteServer", "path"]
}
