// i18n — DE / ES for CINEV
// Usage: t('key') — returns current language. To change: window.setLang('es') or 'de'.

const I18N = {
  de: {
    // App / canvas
    app_title: 'CINEV · Praxismanagement',
    app_subtitle: 'Neurologie & Kinderpsychologie · 10 Therapeuten · ~200 Patienten · 12-Sitzungen-Zyklen',
    section_overview: 'Zentrale Übersicht · Koordination',
    section_therapist_title: 'Therapeuten-App',
    section_therapist_sub: 'Mobile Web · Tagesplan, Check-in, Folgetermin in 2 Taps',
    section_patient_title: 'Eltern- / Patienten-Portal',
    section_patient_sub: 'Mobile Web · Überblick, Fortschritt, Erinnerungen',
    label_login_therapist: 'Login',
    label_day: 'Tagesplan · Heute',
    label_followup: 'Folgetermin buchen',
    label_login_parent: 'Login · Eltern',
    label_patient_home: 'Laras Therapie · Überblick',

    // Dashboard
    nav_today: 'Heute',
    nav_week: 'Wochenplan',
    nav_patients: 'Patienten',
    nav_therapists: 'Therapeuten',
    nav_reminders: 'Erinnerungen',
    nav_stats: 'Auswertung',
    nav_admindb: 'Datenbank',
    ui_proto_no_live:
      'Live-Daten aus: Diese Seite lädt keine Demo-Termine. Für echte Daten bitte z. B. /sekretaer.html mit laufender API öffnen, oder im Prototyp window.__CINEV_LIVE_API nicht auf false setzen.',
    st_db_pending:
      'Die Auswertung ist noch nicht an die Datenbank angebunden. Kennzahlen und Diagramme folgen mit der Reporting-API; es werden keine Beispielzahlen mehr angezeigt.',
    st_live_only:
      'Alle angezeigten Kennzahlen stammen aus PostgreSQL (GET /reports/dashboard). Es werden keine ergänzenden Demowerte berechnet.',
    st_loading: 'Laden …',
    st_error: 'Auswertung konnte nicht geladen werden.',
    st_from: 'Von',
    st_to: 'Bis',
    st_apply: 'Aktualisieren',
    st_na: '—',
    st_tz: 'Zeitzone',
    st_kpi_active: 'Aktive Patienten',
    st_kpi_appt: 'Termine (Zeitraum)',
    st_kpi_done: 'Erledigt',
    st_kpi_sched: 'Geplant',
    st_kpi_canc: 'Abgesagt',
    st_kpi_ns_count: 'Nicht erschienen (Anzahl)',
    st_week_legend: 'Erledigte Termine (dunkel) im Verhältnis zu allen Terminen der Woche (hell)',
    pd_no_plan_timeline: 'Für diesen Patienten liegt kein aktiver Therapieplan mit Terminen in der Datenbank.',
    rm_placeholder_side:
      'Vorlagen-Konfiguration und Versand-KPIs werden aus der Datenbank geladen, sobald die zugehörigen Endpunkte freigeschaltet sind. Das Log links stammt aus PostgreSQL.',
    ad_title: 'Admin · Datenbank',
    ad_sub: 'Lesend · Schema public · Export CSV',
    ad_token_label: 'Admin-DB-Token',
    ad_token_placeholder: 'Wert wie ADMIN_DB_TOKEN im Backend',
    ad_token_save: 'Token speichern',
    ad_refresh: 'Tabellen neu laden',
    ad_hint_readonly:
      'Nur Lesezugriff auf Tabellen. Änderungen und Excel-Import folgen über gesicherte Aktionen oder DBeaver; kein freies SQL aus dem Browser.',
    ad_tables: 'Tabellen (public)',
    ad_loading: 'Laden …',
    ad_empty_tables: 'Keine Tabellen oder keine Verbindung.',
    ad_pick_table: 'Links eine Tabelle wählen.',
    ad_rows: 'Zeilen',
    ad_export_csv: 'CSV exportieren',
    ad_prev: 'Zurück',
    ad_next: 'Weiter',
    ad_empty_rows: 'Keine Zeilen in diesem Ausschnitt.',
    role_coord: 'Koordination',
    day_date: 'Dienstag · 21. April 2026',
    day_title: 'Heute in der Praxis',
    search_patient: 'Patient suchen',
    new_appt: 'Neuer Termin',
    kpi_today: 'Termine heute',
    kpi_done_sub: 'erledigt',
    kpi_now: 'Jetzt laufend',
    kpi_now_sub: 'in Behandlung',
    kpi_active: 'Aktive Patienten',
    kpi_active_sub: 'von 212 gesamt',
    kpi_reminders: 'Erinnerungen gesendet',
    kpi_reminders_sub: 'in den letzten 24h',
    schedule_title: 'Tagesablauf',
    legend_done: 'abgeschlossen',
    legend_now: 'jetzt',
    legend_planned: 'geplant',
    journeys_title: 'Behandlungsverläufe',
    journeys_sub: 'Patienten mit aktiven Zyklen · 12 Sitzungen',
    th_patient: 'Patient',
    th_age: 'Alter',
    th_therapy: 'Therapie',
    th_progress: 'Verlauf',
    th_next: 'Nächster Termin',
    th_status: 'Status',
    therapists_today: 'Therapeuten heute',
    today_count: 'heute',
    show_all_10: 'Alle 10 anzeigen →',
    reminders_title: 'Erinnerungen',
    reminders_badge: 'AUTO · MAIL',
    continue_series: 'Serie fortsetzen',
    continue_headline: '3 Patienten brauchen Folgetermine',
    continue_body: 'Automatisch 12-Sitzungs-Zyklus vorschlagen und Eltern per Mail zur Bestätigung anfragen.',
    continue_btn: 'Serie planen →',
    therapist_col: 'Therapeut',
    patient_col: 'Patient',
    day_axis_patient: 'Patient',
    day_axis_therapist: 'Therapeut',
    wk_focus_patients: 'Fokus Patienten',
    wk_focus_therapists: 'Fokus Therapeuten',
    rm_tpl_reminder_48h: 'Erinnerung · 48h vor Termin',
    rm_tpl_reminder_day: 'Erinnerung · am Vortag',
    rm_sent_at: 'Gesendet',
    rm_planned_send: 'Noch nicht gesendet',
    rm_today_appts_only: 'Zu heutigen Terminen',
    now_label: 'JETZT',
    col_today: 'heute',

    status_running: 'Läuft',
    status_planned: 'Geplant',
    status_mail: 'Mail offen',
    status_almost: 'Bald fertig',

    jent_next_thu: 'Do, 23.04 · 09:00',
    jent_today: 'heute',
    today_at: 'heute',

    // reminders items
    rem_t1: 'vor 2 min', rem_n1: 'Frau Koch', rem_m1: 'Morgen 10:30 · Erstgespräch',
    rem_t2: 'vor 18 min', rem_n2: 'Herr Jansen', rem_m2: 'Heute 09:00 · Psychomotorik',
    rem_t3: 'vor 1 h', rem_n3: 'Familie Neumann', rem_m3: 'Freitag · 9. Sitzung von 12',
    rem_t4: 'vor 3 h', rem_n4: 'Frau Berger', rem_m4: 'Rückmeldung ausstehend · Termin',

    // Therapist app
    ta_greeting: 'Guten Morgen, Felix',
    ta_date: 'Dienstag · 21.04',
    ta_your_day: 'Ihr Tag',
    ta_remaining: 'Sitzungen verbleiben',
    ta_today_list: 'Termine heute',
    ta_parents: 'Eltern',
    ta_last: 'Letzter Termin',
    ta_last_val: 'Mo, 14.04 · Fortschritt: gut',
    ta_note: 'Notiz',
    ta_note_val: 'Schule meldet sich wegen Konzentration.',
    ta_arrived: '✓ Erschienen',
    ta_followup: '＋ Folgetermin',
    ta_no_show: 'Nicht erschienen markieren',
    ta_years: 'J.',
    nav_calendar: 'Kalender',
    nav_pat_mobile: 'Patienten',
    nav_messages: 'Nachrichten',

    // Follow-up sheet
    fs_for: 'Folgetermin für',
    fs_session_of: 'Sitzung',
    fs_of: 'von',
    fs_date: 'Datum',
    fs_time: 'Uhrzeit',
    fs_room: 'Raum',
    fs_room_val: 'Raum 3 · EG',
    fs_date_val: 'Do, 23. April',
    fs_notify: 'Eltern per Mail erinnern',
    fs_notify_sub: '48h vorher + am Tag',
    fs_book: 'Termin buchen & Mail senden',
    fs_cancel: 'Abbrechen',
    ui_clock_hour: 'Stunde (0–23)',
    ui_clock_quarter: 'Viertelstunde',
    ui_cal_day: 'Tag',

    // Patient portal
    pp_portal: 'CINEV Portal',
    pp_family: 'Familie Schulz',
    pp_child: 'Laras Therapie',
    pp_today_in: 'Heute · in 25 Minuten',
    pp_therapy_sess: 'Verhaltenstherapie · Sitzung 9 von 12',
    pp_room: 'Raum 4 · 1. OG',
    pp_directions: 'Wegbeschreibung',
    pp_cycle: 'Behandlungszyklus',
    pp_cycle_sub: 'Begonnen am 17.02. · voraussichtliches Ende 12.05.',
    pp_history: 'Verlauf',
    pp_today_badge: 'HEUTE',
    pp_reschedule: 'Termin verschieben',
    pp_reschedule_sub: 'Mind. 24h vorher',
    pp_message: 'Nachricht an Praxis',
    pp_reminder_title: 'Erinnerung aktiv.',
    pp_reminder_body: ' Sie bekommen 48 Stunden vor jedem Termin eine Mail an ',

    // Login
    lg_org: 'Centro Integral Neuroeducativo',
    lg_welcome: 'Willkommen zurück',
    lg_sub_t: 'Ihre Termine heute und der nächste Patient — in wenigen Schritten.',
    lg_sub_p: 'Alle Termine Ihres Kindes, Erinnerungen und Fortschritt.',
    lg_role_t: 'Therapeut',
    lg_role_p: 'Eltern',
    lg_email: 'E-Mail',
    lg_pass: 'Passwort',
    lg_keep: 'Auf diesem Gerät angemeldet bleiben',
    lg_forgot: 'Vergessen?',
    lg_signin: 'Anmelden',
    lg_sso: 'Mit Praxis-Ausweis (SSO)',
    lg_foot: 'Verschlüsselte Datenübertragung · DSGVO-konform',

    // Therapies / types
    ty_behavior: 'Verhaltenstherapie',
    ty_speech: 'Sprachtherapie',
    ty_occupational: 'Ergotherapie',
    ty_psychomotor: 'Psychomotorik',
    ty_eeg: 'EEG-Kontrolle',
    ty_first: 'Erstgespräch',
    ty_followgespr: 'Folgegespräch',
    ty_parent_talk: 'Gespräch Eltern',
    ty_closing: 'Abschlussgespräch',

    // Roles
    rl_neuro_f: 'Neurologin',
    rl_neuro_m: 'Neurologe',
    rl_childpsy: 'Kinderpsychologe',
    rl_occ_f: 'Ergotherapeutin',
    rl_logo: 'Logopädin',
    rl_psymot: 'Psychomotorik',
    rl_childpsych_f: 'Kinderpsychiaterin',
    rl_behav: 'Verhaltenstherapeut',

    // session note
    note_good: 'Gute Mitarbeit',
    note_quiet: 'Ruhiger Verlauf',
    note_plan: 'Plan besprochen',
    note_progress: 'Fortschritt gut',

    // Misc
    m_start_feb: '17. Feb',
    m_feb24: '24. Feb',
    m_mar3: '3. März',
    m_mar10: '10. März',
    m_mar17: '17. März',
    m_mar24: '24. März',
    m_mar31: '31. März',
    m_apr7: '7. April',
    m_apr21: '21. April',
    m_apr28: '28. April',
    m_may5: '5. Mai',
    m_may12: '12. Mai',
    m_may19: '19. Mai',

    // Week view
    wk_title: 'Wochenplan',
    wk_range: 'Kalenderwoche',
    wk_mon: 'Mo',
    wk_tue: 'Di',
    wk_wed: 'Mi',
    wk_thu: 'Do',
    wk_fri: 'Fr',
    wk_prev: '‹ Vorherige',
    wk_next: 'Nächste ›',
    day_prev: '‹ Vorheriger',
    day_next: 'Nächster ›',
    wk_today: 'Heute',
    wk_filter_all: 'Alle Therapeuten',
    wk_room: 'Raum',
    wk_slot_free: 'frei',
    wk_utilization: 'Auslastung',
    wk_day_appt_count: 'Termine',
    wk_appt_menu_title: 'Termin',
    wk_appt_hint: 'Rechtsklick: Aktionen',
    wk_appt_open: 'Patient öffnen',
    wk_appt_done: 'Als erledigt markieren',
    wk_appt_no_show: 'Nicht erschienen (No-Show)',
    wk_appt_postpone: 'Einen Tag verschieben',
    wk_appt_cancel: 'Termin stornieren',
    wk_appt_cancel_confirm: 'Termin wirklich stornieren? (Grund: Sonstiges)',
    wk_appt_busy: 'Wird ausgeführt…',

    // Patients view
    pt_title: 'Patienten',
    pt_sub: '212 registriert · 187 aktive Zyklen',
    pt_add: 'Neuer Patient',
    pt_search_label: 'Patientensuche',
    pt_search: 'Name, E-Mail, Telefon, Referenz …',
    pt_filter_active: 'Aktiv',
    pt_filter_all: 'Alle',
    pt_filter_waiting: 'Warteliste',
    pt_filter_closed: 'Abgeschlossen',
    pt_th_name: 'Name',
    pt_th_age: 'Alter',
    pt_th_diag: 'Diagnose / Grund',
    pt_th_patient_id: 'Patient-ID',
    pt_th_patient: 'Patient',
    pt_th_guardian: 'Elternteil',
    pt_th_therapist: 'Haupttherapeut',
    pt_th_phase_cycle: 'Phase / Zyklus',
    pt_th_twelve_sessions: '12 Termine',
    pt_th_cycle: 'Zyklus',
    pt_th_last: 'Letzter Termin',
    pt_th_next: 'Nächster',
    pt_th_parent: 'Kontakt',
    pt_phase_line: 'Phase {p1}/{pc} · {d}/{tgt}',
    pt_phase_none: '—',
    pt_count: '{n} Patienten',
    pt_waiting_count: '8 auf Warteliste',
    pt_status_active: 'Aktiv',
    pt_status_waiting: 'Warteliste',
    pt_status_closed: 'Abgeschlossen',
    pt_loading: 'Patienten werden geladen…',
    pt_api_err: 'API-Fehler',
    pt_minor_badge: 'minderjährig',

    // Therapists view
    tp_title: 'Therapeuten',
    tp_sub: '10 im Team · Auslastung & Spezialisierung',
    tp_add_therapist: 'Therapeut',
    tp_s5_new_title: 'Neuen Therapeuten anlegen',
    tp_s5_create: 'Anlegen',
    tp_s5_new_hint: 'Profildaten speichern – die Kachel erscheint in der Team-Übersicht.',
    tp_err_no_id: 'Server lieferte keine Therapeut-ID',
    tp_active_patients: 'Aktive Patienten',
    tp_week_load: 'Termine diese Woche',
    tp_avg_util: 'Ø Auslastung',
    tp_specialties: 'Fachgebiete',
    tp_availability: 'Verfügbarkeit',
    tp_next_free: 'Nächster freier Slot',
    tp_view_profile: 'Profil öffnen →',
    tp_schedule: 'Plan',
    tp_s5_title: 'Therapeut:in bearbeiten',
    tp_s5_discipline: 'Fachrichtung',
    tp_s5_disciplines: 'Fachrichtungen (Mehrfachauswahl)',
    tp_s5_active: 'In Praxis aktiv',
    tp_s5_save: 'Speichern',
    tp_s5_delete: 'Therapeut löschen',
    tp_s5_delete_confirm: 'Diesen Therapeuten endgültig löschen? Das kann nicht rückgängig gemacht werden.',
    tp_delete_in_use: 'Löschen nicht möglich: Es gibt noch Termine, Behandlungspläne oder eine Haupt-Zuordnung bei Patienten.',

    // Reminders view
    rm_title: 'Erinnerungen',
    rm_sub: 'Automatische E-Mail-Benachrichtigungen · DSGVO-konform',
    rm_new: 'Manuelle Erinnerung',
    rm_settings: 'Einstellungen',
    rm_tpl_48h: '48h vor Termin',
    rm_tpl_day: 'Am Tag des Termins',
    rm_tpl_missed: 'Nach verpasster Sitzung',
    rm_tpl_cycle: 'Nach Zyklusende (neue Serie?)',
    rm_tpl_feedback: 'Elternfragebogen (nach 6. Sitzung)',
    rm_stat_sent: 'Gesendet (7 T)',
    rm_stat_open: 'Öffnungsrate',
    rm_stat_confirm: 'Bestätigt',
    rm_stat_pending: 'Offen',
    rm_log_title: 'Ausgehende Nachrichten',
    rm_log_subject: 'Betreff',
    rm_log_to: 'Empfänger',
    rm_log_when: 'Versand',
    rm_log_status: 'Status',
    rm_log_preview: 'Vorschau',
    rm_status_delivered: 'Zugestellt',
    rm_status_opened: 'Geöffnet',
    rm_status_confirmed: 'Bestätigt',
    rm_status_pending: 'Ausstehend',
    rm_status_bounced: 'Unzustellbar',
    rm_templates_title: 'Vorlagen',
    rm_tpl_active: 'aktiv',
    rm_edit: 'Bearbeiten',

    // Stats view
    st_title: 'Auswertung',
    st_sub: 'Zeitraum frei wählbar · Aggregationen aus Termin- und Patientendaten',
    st_export: 'Export CSV',
    st_period_q: 'Quartal',
    st_period_m: 'Monat',
    st_period_y: 'Jahr',
    st_kpi_sessions: 'Sitzungen gesamt',
    st_kpi_completion: 'Abschlussrate',
    st_kpi_noshow: 'No-Show-Quote',
    st_kpi_avg_cycle: 'Ø Zyklusdauer',
    st_kpi_days: 'Tage',
    st_chart_sessions: 'Sitzungen pro Woche',
    st_chart_mix: 'Therapie-Mix',
    st_chart_util: 'Auslastung pro Therapeut',
    st_chart_outcomes: 'Ergebnisse (Elternbewertung)',
    st_outcome_strong: 'Starker Fortschritt',
    st_outcome_good: 'Guter Fortschritt',
    st_outcome_mod: 'Moderat',
    st_outcome_mixed: 'Gemischt',
    st_vs_last: 'ggü. Vorquartal',

    // NEW: Appointment statuses & types (v2)
    ap_status_scheduled: 'Geplant',
    ap_status_completed: 'Abgeschlossen',
    ap_status_no_show: 'Nicht erschienen',
    ap_status_cancelled: 'Abgesagt',
    ap_status_rescheduled: 'Verschoben',
    ap_status_sick: 'Therapeut krank',
    ap_type_session: 'Sitzung',
    ap_type_makeup: 'Nachholtermin',
    ap_type_special: 'Sondertermin',

    // NEW: Special appointment kinds
    sk_teacher: 'Lehrergespräch',
    sk_parent: 'Elterngespräch',
    sk_doctor: 'Arztkonsultation',
    sk_final: 'Abschlussgespräch',
    sk_diag: 'Diagnostik',
    sk_other: 'Sonstiges',

    // NEW: Makeup / KPI
    kpi_makeup: 'Nachholtermine offen',
    kpi_makeup_sub: 'zu koordinieren',
    legend_special: 'Sondertermin',
    legend_makeup: 'Nachholtermin',

    // NEW: Therapy creation
    new_therapy: 'Neue Therapie',
    nt_title: 'Therapie anlegen',
    nt_patient: 'Patient',
    nt_therapist: 'Therapeut',
    nt_therapy_type: 'Therapieart',
    nt_start: 'Startdatum',
    nt_sessions: 'Anzahl Sitzungen',
    nt_sessions_hint: '1–20 · Standard 12',
    nt_rhythm: 'Rhythmus',
    nt_rhythm_weekly: 'Wöchentlich',
    nt_rhythm_biweekly: '14-tägig',
    nt_create: 'Therapie anlegen',

    // NEW: Special appointment creation
    add_special: '＋ Sondertermin',
    sp_title: 'Sondertermin buchen',
    sp_kind: 'Art',
    sp_duration: 'Dauer',
    sp_duration_hint: 'Minuten · flexibel',
    sp_location: 'Ort',
    sp_location_ph: 'z.B. Grundschule Nord · Klassenraum 2B',
    sp_comment: 'Kommentar',
    sp_comment_ph: 'Interne Notizen …',
    sp_book: 'Sondertermin buchen',
    sp_save_busy: 'Wird gespeichert …',
    sp_phase_label: 'Zugehörige Phase',
    sp_therapist_label: 'Therapeut:in',
    sp_datetime_label: 'Datum und Uhrzeit',
    sp_validation_phase_start: 'Bitte Phase wählen und Datum/Uhrzeit setzen.',
    sp_no_active_plan: 'Nur mit aktivem Behandlungsplan möglich.',
    pd_milestone_parent: 'Eltern-Gespräch',
    pd_milestone_school: 'Schul-Gespräch',
    pd_milestone_closing: 'Phasen-Abschluss',

    // NEW: Check-in options (therapist app)
    ci_arrived: '✓ Erschienen',
    ci_no_show: '✗ Nicht erschienen',
    ci_reschedule: '↻ Verschieben',
    ci_confirm_no_show: 'Als nicht erschienen markieren',
    ci_confirm_no_show_sub: 'Zählt nicht als Sitzung. Nachholtermin wird vorgeschlagen.',
    sick_day_btn: 'Krankmeldung für heute',
    sick_day_title: 'Heute krankgemeldet',
    sick_day_body: 'Rezeption wird informiert. Alle Termine heute werden neu koordiniert (Vertretung oder Verschiebung).',
    sick_day_confirm: 'Krankmeldung senden',

    // NEW: Reschedule dialog
    rs_title: 'Termin verschieben',
    rs_scope: 'Umfang',
    rs_only_this: 'Nur diesen Termin',
    rs_and_following: 'Diesen + alle Folgetermine um',
    rs_days: 'Tage',
    rs_new_date: 'Neuer Termin',
    rs_apply: 'Verschieben',

    // NEW: Patient detail
    pd_tab_therapy: 'Therapie',
    pd_tab_contact: 'Kontakt',
    pd_tab_reminders: 'Erinnerungen',
    pd_reminders_empty: 'Keine Erinnerungen für diesen Patienten.',
    pd_rm_config_btn: 'Erinnerungen konfigurieren',
    pd_rm_config_title: 'Erinnerungseinstellungen (pro Patient)',
    pd_rm_timing_label: 'Zeitpunkt',
    pd_rm_timing_day_before: 'Vortag',
    pd_rm_timing_same_day: 'Gleicher Tag',
    pd_rm_time_label: 'Uhrzeit',
    pd_rm_save: 'Speichern',
    pd_rm_save_ok: 'Einstellungen gespeichert.',
    pd_rm_col_appt: 'Termin',
    pd_rm_col_reminder: 'Erinnerung',
    pd_rm_recipient_label: 'Erinnerung an',
    pd_rm_recipient_patient: 'Patient',
    pd_rm_recipient_guardian: 'Vormund / Vertretung',
    pd_rm_demo_email_hint: 'Demo / kein Versand',
    pd_milestones_empty: 'Keine Meilenstein-Termine in dieser Phase (Standard nach Plan-Aktivierung: Eltern- und Schulgespräch).',
    pd_back: '← Patienten',
    pd_edit_therapy: 'Therapie bearbeiten',
    pd_therapy_progress: 'Therapiefortschritt',
    pd_chronicle: 'Sitzungs-Chronik',
    pd_special_list: 'Sondertermine',
    pd_special_edit_modal_title: 'Sondertermin / Meilenstein',
    pd_special_delete_btn: 'Sondertermin löschen',
    pd_special_delete_confirm:
      'Diesen Sondertermin wirklich entfernen? Die Aktion kann nicht rückgängig gemacht werden.',
    pd_done_note_modal_title: 'Kommentar zur erledigten Sitzung',
    pd_no_specials: 'Keine Sondertermine',
    pd_done: 'Abgeschlossen',
    pd_planned: 'Geplant',
    pd_cancelled: 'Storniert',
    pd_no_show_label: 'Nicht erschienen',
    pd_rescheduled_label: 'Verschoben',
    // Absage-Modal (PhasePlanPanel)
    pd_outcome_modal_title: 'Termin-Ergebnis eintragen',
    pd_outcome_section_time: 'Datum und Uhrzeit',
    pd_slot_apply_time: 'Neue Zeit speichern',
    pd_sess_editor_title: 'Sitzung bearbeiten',
    pd_sess_editor_title_special: 'Sondertermin bearbeiten',
    pd_sess_editor_save: 'Speichern',
    pd_sess_editor_cancel: 'Abbrechen',
    pd_sess_location_placeholder: 'Ort oder Raum',
    pd_sess_therapist_placeholder: 'Zuweisen …',
    pd_sess_modality_label: 'Modalität / Schwerpunkt',
    pd_sess_modality_none: 'Keine Auswahl',
    pd_sess_type_label: 'Sitzungstyp',
    pd_sess_type_treatment: 'Behandlung',
    pd_sess_type_test: 'Test',
    pd_sess_type_assessment: 'Diagnostik',
    pd_bulk_targets_heading: 'Weitere Sitzungen dieser Phase',
    pd_bulk_apply_time: 'Uhrzeit auch auf gewählte Sitzungen übernehmen (Kalendertag jeweils unverändert)',
    pd_bulk_slot_toggle: 'Sitzung einbeziehen',
    pd_outcome_done_btn: 'Abgeschlossen',
    pd_outcome_cancel_section: 'Termin absagen',
    pd_outcome_initiator_label: 'Abgesagt durch',
    pd_outcome_initiator_patient: 'Patient / Familie',
    pd_outcome_initiator_therapist: 'Therapeut:in',
    pd_outcome_initiator_practice: 'Praxis',
    pd_outcome_patient_detail_label: 'Grund',
    pd_outcome_detail_dns: 'Nicht erschienen (kein Grund)',
    pd_outcome_detail_illness: 'Krankheit',
    pd_outcome_detail_other: 'Anderes',
    pd_outcome_timing_label: 'Absage-Zeitpunkt',
    pd_outcome_timing_on_time: 'Rechtzeitig',
    pd_outcome_timing_late: 'Verspätet',
    pd_outcome_note_label: 'Notiz',
    pd_outcome_note_placeholder: 'Kurze Beschreibung …',
    pd_outcome_save_cancel: 'Absage speichern',
    pd_outcome_close: 'Schließen',
    pd_outcome_saving: 'Speichere …',
    pd_outcome_locked_hint: 'Manuell abgesagt — Automatik inaktiv',
    pd_outcome_reset_btn: 'Absage löschen',
    pd_outcome_reset_confirm: 'Absage wirklich löschen und auf „Geplant" zurücksetzen?',
    pd_row_open_outcome: 'Termin-Ergebnis oder Absage bearbeiten — ganze Zeile anklicken',
    pd_slot_edit: 'Zeit',
    pd_slot_edit_title: 'Datum und Uhrzeit ändern',
    pd_slot_edit_hint: 'Startzeit in der Praxis-Zeitzone; die Dauer des Termins bleibt unverändert.',
    pd_slot_edit_start: 'Neuer Beginn',
    pd_date_dmy_ph: 'TT.MM.JJJJ',
    pd_slot_duration_label: 'Dauer',
    pd_slot_duration_min: 'Min.',
    pd_slot_save: 'Speichern',
    pd_slot_err_invalid: 'Ungültige Zeitangabe.',
    // Absage-Pill-Labels (kompakt)
    pd_cancel_by_patient: 'Pat. abgesagt',
    pd_cancel_by_therapist: 'Th. abgesagt',
    pd_cancel_by_practice: 'Praxis abgesagt',
    pd_cancel_dns: 'Nicht erschienen',
    pd_cancel_illness: 'Krankheit',
    pd_contact_label: 'Kontakt',
    pd_session_word: 'Sitzung',
    pd_phases_title: 'Phasenplanung',
    pd_phase_label: 'Phase',
    pd_phase_window_demo: 'Zeitfenster (Beispiel)',
    pd_phase_sessions_target: '12 Soll-Sitzungen',
    pd_sessions_in_phase: 'Sitzungen dieser Phase',
    pd_milestone_therapist_end: 'Phasen-Abschluss mit Therapeut:in',
    pd_milestone_school_end: 'Phasen-Abschluss Schule / Lehrperson',
    pd_milestone_badge: 'Meilenstein',
    pd_plan_wizard: 'Neuen Behandlungsplan anlegen',
    pd_plan_wizard_sub: 'Vorlage, Regeltermin, Vorschau, Konfliktprüfung, Übernahme in den Kalender',
    pd_phase_status_active: 'Aktiv',
    pd_phase_status_planned: 'Geplant',
    pd_phase_status_completed: 'Abgeschlossen',
    pd_expand_sessions: '12 Termine anzeigen',
    pd_collapse_sessions: 'Termine ausblenden',
    pd_expand_milestones: 'Meilensteine anzeigen',
    pd_collapse_milestones: 'Meilensteine ausblenden',
    pd_open_month: 'Monatsansicht',
    pd_add_phase: '+ Phase',
    pd_add_phase_modal_title: 'Neue Phase {n}',
    pd_add_phase_hint:
      'Es werden Regeltermine ohne Therapeut:in und ohne Ort angelegt. Zuweisungen folgen in einem späteren Schritt.',
    pd_add_phase_start: 'Startdatum',
    pd_add_phase_weekday: 'Regel-Wochentag',
    pd_add_phase_time: 'Uhrzeit (volle Stunde)',
    pd_add_phase_duration: 'Dauer (Minuten)',
    pd_add_phase_repeats: 'Wiederholungen',
    pd_add_phase_submit: 'Termine anlegen',
    pd_add_phase_cancel: 'Abbrechen',
    pd_add_phase_busy: 'Wird angelegt…',
    pd_add_phase_err: 'Anlegen fehlgeschlagen.',
    pd_session_unassigned: 'Offen',
    pd_placeholder_dash: '—',
    pd_cal_dow0: 'So',
    pd_cal_dow1: 'Mo',
    pd_cal_dow2: 'Di',
    pd_cal_dow3: 'Mi',
    pd_cal_dow4: 'Do',
    pd_cal_dow5: 'Fr',
    pd_cal_dow6: 'Sa',
    pd_month_title: 'Kalender',
    pd_month_prev: 'Vorheriger Monat',
    pd_month_next: 'Nächster Monat',
    pd_month_close: 'Schließen',
    pd_th_date: 'Datum',
    pd_th_time: 'Uhrzeit',
    pd_th_location: 'Ort',
    pd_th_therapist: 'Therapeut:in',
    pd_th_session_kind: 'Sitzungsart',
    pd_th_status: 'Status',
    pd_month_legend: 'Tage mit Termin oder Meilenstein (Demo).',

    pd_s4_rep_title: 'Vertretung (Ansprache)',
    pd_s4_rep_self: 'Selbstvertretung',
    pd_s4_rep_guardian: 'Vertretung über Bezugsperson / Eltern',
    pd_s4_rep_help:
      'Unabhängig vom Kennzeichen „minderjährig“: Hier legen Sie fest, ob wir uns primär an den Patienten oder an die Bezugsperson wenden.',
    pd_s4_rep_saving: 'Speichern…',
    pd_s4_rep_saved: 'Gespeichert.',
    pd_s4_rep_err: 'Speichern fehlgeschlagen.',
    pd_s4_gua_title: 'Bezugspersonen',
    pd_s4_gua_add: 'Bezugsperson hinzufügen',
    pd_gua_mode_search: 'Suchen & verknüpfen',
    pd_gua_mode_create: 'Neu anlegen',
    pd_gua_search_ph: 'Name, E-Mail oder Telefon …',
    pd_gua_search_empty: 'Keine Treffer — „Neu anlegen“ oder andere Suche.',
    pd_gua_search_loading: 'Suche…',
    pd_gua_pick_hint: 'Ausgewählt — Beziehung wählen und verknüpfen.',
    pd_gua_link_btn: 'Verknüpfen',
    pd_sch_search_label: 'Schule suchen (bestehende Einträge)',
    pd_sch_search_ph: 'Name oder Adresse der Schule …',
    pd_sch_suggestions_empty: 'Noch keine gespeicherten Schulen — frei eintragen.',
    pd_sch_new_btn: 'Neue Schule erfassen',
    pd_sch_pick_hint: 'Aus Liste übernehmen oder unten manuell bearbeiten.',
    pd_tch_filter_label: 'Lehrkraft suchen',
    pd_tch_filter_ph: 'Name filtern …',
    pd_s4_gua_edit: 'Bearbeiten',
    pd_s4_gua_remove: 'Entfernen',
    pd_s4_gua_confirm_remove: 'Diese Bezugsperson wirklich entfernen?',
    pd_s4_gua_primary: 'Primär',
    pd_s4_gua_mail: 'E-Mail-Infos',
    pd_s4_gua_rel_mother: 'Mutter',
    pd_s4_gua_rel_father: 'Vater',
    pd_s4_gua_rel_legal: 'Sorgeberechtigung',
    pd_s4_gua_rel_other: 'Sonstige',
    pd_s4_gua_fn: 'Vorname',
    pd_s4_gua_ln: 'Nachname',
    pd_s4_gua_email: 'E-Mail',
    pd_s4_gua_phone: 'Telefon',
    pd_s4_gua_lang: 'Sprache',
    pd_s4_gua_rel_label: 'Beziehung',
    pd_s4_gua_save: 'Speichern',
    pd_s4_gua_cancel: 'Abbrechen',
    pd_s4_gua_err: 'Eingabe fehlgeschlagen.',
    pd_s4_live_only: 'Nur bei Live-Datenbank verfügbar.',
    pd_s4_loading: 'Patientendaten werden geladen…',

    pd_s5_stam_title: 'Stammdaten (Person)',
    pd_s5_stam_save: 'Stammdaten speichern',
    pd_s5_stam_saved: 'Gespeichert.',
    pd_contact_tile_patient: 'Patient',
    pd_contact_tile_rep: 'Vertretung',
    pd_contact_tile_school: 'Schule',
    pd_contact_save_patient: 'Patient speichern',
    pd_contact_save_school: 'Schule speichern',
    pd_contact_street: 'Straße / Nr.',
    pd_contact_postal: 'PLZ',
    pd_contact_city: 'Ort',
    pd_contact_birth: 'Geburtsdatum',
    pd_school_name: 'Schule (Bezeichnung)',
    pd_school_address: 'Adresse Schule',
    pd_school_teacher: 'Lehrkraft',
    pd_school_teacher_none: 'Keine Zuordnung',
    pd_s5_plans_title: 'Behandlungspläne',
    pd_s5_plan_id: 'Plan',
    pd_s5_plan_st_draft: 'Entwurf',
    pd_s5_plan_st_active: 'Aktiv',
    pd_s5_plan_st_paused: 'Pausiert',
    pd_s5_plan_st_archived: 'Archiviert',
    pd_s5_plan_st_completed: 'Abgeschlossen',
    pd_s5_plan_btn_pause: 'Pausieren',
    pd_s5_plan_btn_resume: 'Fortsetzen',
    pd_s5_plan_btn_archive: 'Archivieren',
    pd_s5_plan_btn_complete: 'Abschließen',
    pd_s5_plan_busy: 'Speichern…',

    // NEW: Parent portal specials
    pp_specials: 'Zusätzliche Termine',
    pp_specials_sub: 'Gespräche und Untersuchungen außerhalb des Therapiezyklus',
    pp_no_shows_hint: 'Nicht-erscheinen zählt nicht als Sitzung — wir planen einen Nachholtermin.',
  },

  es: {
    app_title: 'CINEV · Gestión de la Práctica',
    app_subtitle: 'Neurología & Psicología Infantil · 10 terapeutas · ~200 pacientes · ciclos de 12 sesiones',
    section_overview: 'Vista Central · Coordinación',
    section_therapist_title: 'App del Terapeuta',
    section_therapist_sub: 'Web móvil · agenda diaria, check-in, próxima cita en 2 toques',
    section_patient_title: 'Portal de Padres / Pacientes',
    section_patient_sub: 'Web móvil · resumen, progreso, recordatorios',
    label_login_therapist: 'Acceso',
    label_day: 'Agenda · Hoy',
    label_followup: 'Agendar próxima cita',
    label_login_parent: 'Acceso · Padres',
    label_patient_home: 'Terapia de Lara · Resumen',

    nav_today: 'Hoy',
    nav_week: 'Semana',
    nav_patients: 'Pacientes',
    nav_therapists: 'Terapeutas',
    nav_reminders: 'Recordatorios',
    nav_stats: 'Estadísticas',
    nav_admindb: 'Base de datos',
    ui_proto_no_live:
      'Datos en vivo desactivados: esta vista no muestra citas de demostración. Para datos reales abra p. ej. /sekretaer.html con la API en ejecución, o no fije window.__CINEV_LIVE_API en false en el prototipo.',
    st_db_pending:
      'Las estadísticas aún no están conectadas a la base de datos. Los indicadores y gráficos llegarán con la API de reporting; ya no se muestran cifras de ejemplo.',
    st_live_only:
      'Todos los indicadores provienen de PostgreSQL (GET /reports/dashboard). No se añaden valores de demostración.',
    st_loading: 'Cargando …',
    st_error: 'No se pudo cargar la evaluación.',
    st_from: 'Desde',
    st_to: 'Hasta',
    st_apply: 'Actualizar',
    st_na: '—',
    st_tz: 'Zona horaria',
    st_kpi_active: 'Pacientes activos',
    st_kpi_appt: 'Citas (periodo)',
    st_kpi_done: 'Realizadas',
    st_kpi_sched: 'Programadas',
    st_kpi_canc: 'Canceladas',
    st_kpi_ns_count: 'Inasistencias (n)',
    st_week_legend: 'Citas realizadas (oscuro) frente al total semanal (claro)',
    pd_no_plan_timeline: 'No hay un plan de terapia activo con citas en la base de datos para este paciente.',
    rm_placeholder_side:
      'La configuración de plantillas y los KPI de envío se cargarán desde la base de datos cuando los endpoints estén disponibles. El registro a la izquierda proviene de PostgreSQL.',
    ad_title: 'Admin · Base de datos',
    ad_sub: 'Solo lectura · esquema public · exportar CSV',
    ad_token_label: 'Token admin-DB',
    ad_token_placeholder: 'Mismo valor que ADMIN_DB_TOKEN en el backend',
    ad_token_save: 'Guardar token',
    ad_refresh: 'Recargar tablas',
    ad_hint_readonly:
      'Solo lectura de tablas. Cambios e importación Excel irán por acciones seguras o DBeaver; sin SQL libre desde el navegador.',
    ad_tables: 'Tablas (public)',
    ad_loading: 'Cargando …',
    ad_empty_tables: 'Sin tablas o sin conexión.',
    ad_pick_table: 'Elija una tabla a la izquierda.',
    ad_rows: 'Filas',
    ad_export_csv: 'Exportar CSV',
    ad_prev: 'Anterior',
    ad_next: 'Siguiente',
    ad_empty_rows: 'Sin filas en este fragmento.',
    role_coord: 'Coordinación',
    day_date: 'Martes · 21 de abril de 2026',
    day_title: 'Hoy en la práctica',
    search_patient: 'Buscar paciente',
    new_appt: 'Nueva cita',
    kpi_today: 'Citas hoy',
    kpi_done_sub: 'finalizadas',
    kpi_now: 'En curso',
    kpi_now_sub: 'en atención',
    kpi_active: 'Pacientes activos',
    kpi_active_sub: 'de 212 en total',
    kpi_reminders: 'Recordatorios enviados',
    kpi_reminders_sub: 'en las últimas 24h',
    schedule_title: 'Programa del día',
    legend_done: 'finalizado',
    legend_now: 'ahora',
    legend_planned: 'planificado',
    journeys_title: 'Trayectorias de tratamiento',
    journeys_sub: 'Pacientes con ciclos activos · 12 sesiones',
    th_patient: 'Paciente',
    th_age: 'Edad',
    th_therapy: 'Terapia',
    th_progress: 'Progreso',
    th_next: 'Próxima cita',
    th_status: 'Estado',
    therapists_today: 'Terapeutas hoy',
    today_count: 'hoy',
    show_all_10: 'Ver los 10 →',
    reminders_title: 'Recordatorios',
    reminders_badge: 'AUTO · CORREO',
    continue_series: 'Continuar serie',
    continue_headline: '3 pacientes necesitan próxima cita',
    continue_body: 'Proponer automáticamente un ciclo de 12 sesiones y pedir confirmación por correo a los padres.',
    continue_btn: 'Planificar serie →',
    therapist_col: 'Terapeuta',
    patient_col: 'Paciente',
    day_axis_patient: 'Paciente',
    day_axis_therapist: 'Terapeuta',
    wk_focus_patients: 'Enfoque pacientes',
    wk_focus_therapists: 'Enfoque terapeutas',
    rm_tpl_reminder_48h: 'Recordatorio · 48h antes',
    rm_tpl_reminder_day: 'Recordatorio · día previo',
    rm_sent_at: 'Enviado',
    rm_planned_send: 'Aún no enviado',
    rm_today_appts_only: 'Citas de hoy',
    now_label: 'AHORA',
    col_today: 'hoy',

    status_running: 'En curso',
    status_planned: 'Planificado',
    status_mail: 'Correo pendiente',
    status_almost: 'Casi completo',

    jent_next_thu: 'Jue, 23.04 · 09:00',
    jent_today: 'hoy',
    today_at: 'hoy',

    rem_t1: 'hace 2 min', rem_n1: 'Sra. Koch', rem_m1: 'Mañana 10:30 · Primera consulta',
    rem_t2: 'hace 18 min', rem_n2: 'Sr. Jansen', rem_m2: 'Hoy 09:00 · Psicomotricidad',
    rem_t3: 'hace 1 h', rem_n3: 'Familia Neumann', rem_m3: 'Viernes · sesión 9 de 12',
    rem_t4: 'hace 3 h', rem_n4: 'Sra. Berger', rem_m4: 'Respuesta pendiente · cita',

    ta_greeting: 'Buenos días, Felix',
    ta_date: 'Martes · 21.04',
    ta_your_day: 'Tu día',
    ta_remaining: 'sesiones restantes',
    ta_today_list: 'Citas de hoy',
    ta_parents: 'Padres',
    ta_last: 'Última cita',
    ta_last_val: 'Lun, 14.04 · progreso: bueno',
    ta_note: 'Nota',
    ta_note_val: 'La escuela llamará sobre la concentración.',
    ta_arrived: '✓ Asistió',
    ta_followup: '＋ Próxima cita',
    ta_no_show: 'Marcar como no asistió',
    ta_years: 'años',
    nav_calendar: 'Calendario',
    nav_pat_mobile: 'Pacientes',
    nav_messages: 'Mensajes',

    fs_for: 'Próxima cita para',
    fs_session_of: 'Sesión',
    fs_of: 'de',
    fs_date: 'Fecha',
    fs_time: 'Hora',
    fs_room: 'Sala',
    fs_room_val: 'Sala 3 · planta baja',
    fs_date_val: 'Jue, 23 de abril',
    fs_notify: 'Recordar a los padres por correo',
    fs_notify_sub: '48h antes + el mismo día',
    fs_book: 'Agendar y enviar correo',
    fs_cancel: 'Cancelar',
    ui_clock_hour: 'Hora (0–23)',
    ui_clock_quarter: 'Cuarto de hora',
    ui_cal_day: 'Día',

    pp_portal: 'Portal CINEV',
    pp_family: 'Familia Schulz',
    pp_child: 'Terapia de Lara',
    pp_today_in: 'Hoy · en 25 minutos',
    pp_therapy_sess: 'Terapia conductual · Sesión 9 de 12',
    pp_room: 'Sala 4 · 1ª planta',
    pp_directions: 'Cómo llegar',
    pp_cycle: 'Ciclo de tratamiento',
    pp_cycle_sub: 'Inicio el 17.02 · finalización prevista 12.05',
    pp_history: 'Historial',
    pp_today_badge: 'HOY',
    pp_reschedule: 'Reprogramar cita',
    pp_reschedule_sub: 'Mín. 24h antes',
    pp_message: 'Mensaje a la práctica',
    pp_reminder_title: 'Recordatorio activo.',
    pp_reminder_body: ' Recibirá un correo 48 horas antes de cada cita en ',

    lg_org: 'Centro Integral Neuroeducativo',
    lg_welcome: 'Bienvenido de nuevo',
    lg_sub_t: 'Sus citas de hoy y el próximo paciente — en pocos pasos.',
    lg_sub_p: 'Todas las citas de su hijo, recordatorios y progreso.',
    lg_role_t: 'Terapeuta',
    lg_role_p: 'Padres',
    lg_email: 'Correo',
    lg_pass: 'Contraseña',
    lg_keep: 'Mantener sesión iniciada en este dispositivo',
    lg_forgot: '¿Olvidó?',
    lg_signin: 'Iniciar sesión',
    lg_sso: 'Con carnet de la práctica (SSO)',
    lg_foot: 'Conexión cifrada · conforme al RGPD',

    ty_behavior: 'Terapia conductual',
    ty_speech: 'Terapia del lenguaje',
    ty_occupational: 'Terapia ocupacional',
    ty_psychomotor: 'Psicomotricidad',
    ty_eeg: 'Control EEG',
    ty_first: 'Primera consulta',
    ty_followgespr: 'Consulta de seguimiento',
    ty_parent_talk: 'Entrevista con padres',
    ty_closing: 'Cierre de tratamiento',

    rl_neuro_f: 'Neuróloga',
    rl_neuro_m: 'Neurólogo',
    rl_childpsy: 'Psicólogo infantil',
    rl_occ_f: 'Terapeuta ocupacional',
    rl_logo: 'Logopeda',
    rl_psymot: 'Psicomotricidad',
    rl_childpsych_f: 'Psiquiatra infantil',
    rl_behav: 'Terapeuta conductual',

    note_good: 'Buena colaboración',
    note_quiet: 'Sesión tranquila',
    note_plan: 'Plan acordado',
    note_progress: 'Buen progreso',

    m_start_feb: '17 feb',
    m_feb24: '24 feb',
    m_mar3: '3 mar',
    m_mar10: '10 mar',
    m_mar17: '17 mar',
    m_mar24: '24 mar',
    m_mar31: '31 mar',
    m_apr7: '7 abr',
    m_apr21: '21 abr',
    m_apr28: '28 abr',
    m_may5: '5 may',
    m_may12: '12 may',
    m_may19: '19 may',

    // Week view
    wk_title: 'Semana',
    wk_range: 'Semana calendario',
    wk_mon: 'Lu',
    wk_tue: 'Ma',
    wk_wed: 'Mi',
    wk_thu: 'Ju',
    wk_fri: 'Vi',
    wk_prev: '‹ Anterior',
    wk_next: 'Siguiente ›',
    day_prev: '‹ Día anterior',
    day_next: 'Día siguiente ›',
    wk_today: 'Hoy',
    wk_filter_all: 'Todos los terapeutas',
    wk_room: 'Sala',
    wk_slot_free: 'libre',
    wk_utilization: 'Ocupación',
    wk_day_appt_count: 'Citas',
    wk_appt_menu_title: 'Cita',
    wk_appt_hint: 'Clic derecho: acciones',
    wk_appt_open: 'Abrir paciente',
    wk_appt_done: 'Marcar como realizada',
    wk_appt_no_show: 'No asistió (ausencia)',
    wk_appt_postpone: 'Posponer un día',
    wk_appt_cancel: 'Anular cita',
    wk_appt_cancel_confirm: '¿Anular realmente esta cita? (Motivo: otro)',
    wk_appt_busy: 'Procesando…',

    // Patients
    pt_title: 'Pacientes',
    pt_sub: '212 registrados · 187 ciclos activos',
    pt_add: 'Nuevo paciente',
    pt_search_label: 'Búsqueda de pacientes',
    pt_search: 'Nombre, correo, teléfono, referencia…',
    pt_filter_active: 'Activos',
    pt_filter_all: 'Todos',
    pt_filter_waiting: 'Lista de espera',
    pt_filter_closed: 'Finalizados',
    pt_th_name: 'Nombre',
    pt_th_age: 'Edad',
    pt_th_diag: 'Diagnóstico / motivo',
    pt_th_patient_id: 'ID paciente',
    pt_th_patient: 'Paciente',
    pt_th_guardian: 'Tutor / madre / padre',
    pt_th_therapist: 'Terapeuta principal',
    pt_th_phase_cycle: 'Fase / ciclo',
    pt_th_twelve_sessions: '12 citas',
    pt_th_cycle: 'Ciclo',
    pt_th_last: 'Última cita',
    pt_th_next: 'Próxima',
    pt_th_parent: 'Contacto',
    pt_phase_line: 'Fase {p1}/{pc} · {d}/{tgt}',
    pt_phase_none: '—',
    pt_count: '{n} pacientes',
    pt_waiting_count: '8 en espera',
    pt_status_active: 'Activo',
    pt_status_waiting: 'En espera',
    pt_status_closed: 'Finalizado',
    pt_loading: 'Cargando pacientes…',
    pt_api_err: 'Error de API',
    pt_minor_badge: 'menor de edad',

    // Therapists
    tp_title: 'Terapeutas',
    tp_sub: '10 en el equipo · ocupación y especialidades',
    tp_add_therapist: 'Terapeuta',
    tp_s5_new_title: 'Alta de terapeuta',
    tp_s5_create: 'Crear',
    tp_s5_new_hint: 'Al guardar el perfil, la ficha aparece en el equipo.',
    tp_err_no_id: 'El servidor no devolvió el id del terapeuta',
    tp_active_patients: 'Pacientes activos',
    tp_week_load: 'Citas esta semana',
    tp_avg_util: 'Ocupación media',
    tp_specialties: 'Especialidades',
    tp_availability: 'Disponibilidad',
    tp_next_free: 'Próximo hueco libre',
    tp_view_profile: 'Abrir perfil →',
    tp_schedule: 'Agenda',
    tp_s5_title: 'Editar terapeuta',
    tp_s5_discipline: 'Disciplina',
    tp_s5_disciplines: 'Especialidades (selección múltiple)',
    tp_s5_active: 'Activo en la práctica',
    tp_s5_save: 'Guardar',
    tp_s5_delete: 'Eliminar terapeuta',
    tp_s5_delete_confirm: '¿Eliminar definitivamente a este terapeuta? No se puede deshacer.',
    tp_delete_in_use: 'No se puede eliminar: aún hay citas, planes de tratamiento o pacientes con este terapeuta principal.',

    // Reminders
    rm_title: 'Recordatorios',
    rm_sub: 'Correos automáticos · conforme al RGPD',
    rm_new: 'Recordatorio manual',
    rm_settings: 'Ajustes',
    rm_tpl_48h: '48h antes de la cita',
    rm_tpl_day: 'El día de la cita',
    rm_tpl_missed: 'Tras sesión perdida',
    rm_tpl_cycle: 'Al terminar el ciclo (¿nueva serie?)',
    rm_tpl_feedback: 'Encuesta a padres (tras 6ª sesión)',
    rm_stat_sent: 'Enviados (7 d)',
    rm_stat_open: 'Tasa de apertura',
    rm_stat_confirm: 'Confirmados',
    rm_stat_pending: 'Pendientes',
    rm_log_title: 'Mensajes salientes',
    rm_log_subject: 'Asunto',
    rm_log_to: 'Destinatario',
    rm_log_when: 'Envío',
    rm_log_status: 'Estado',
    rm_log_preview: 'Vista',
    rm_status_delivered: 'Entregado',
    rm_status_opened: 'Abierto',
    rm_status_confirmed: 'Confirmado',
    rm_status_pending: 'Pendiente',
    rm_status_bounced: 'No entregado',
    rm_templates_title: 'Plantillas',
    rm_tpl_active: 'activa',
    rm_edit: 'Editar',

    // Stats
    st_title: 'Estadísticas',
    st_sub: 'Periodo libre · agregados de citas y pacientes',
    st_export: 'Exportar CSV',
    st_period_q: 'Trimestre',
    st_period_m: 'Mes',
    st_period_y: 'Año',
    st_kpi_sessions: 'Sesiones totales',
    st_kpi_completion: 'Tasa de finalización',
    st_kpi_noshow: 'Tasa de no asistencia',
    st_kpi_avg_cycle: 'Duración media del ciclo',
    st_kpi_days: 'días',
    st_chart_sessions: 'Sesiones por semana',
    st_chart_mix: 'Mix de terapias',
    st_chart_util: 'Ocupación por terapeuta',
    st_chart_outcomes: 'Resultados (valoración padres)',
    st_outcome_strong: 'Progreso notable',
    st_outcome_good: 'Buen progreso',
    st_outcome_mod: 'Moderado',
    st_outcome_mixed: 'Mixto',
    st_vs_last: 'vs. trim. anterior',

    // NEW: Appointment statuses & types (v2)
    ap_status_scheduled: 'Programado',
    ap_status_completed: 'Completado',
    ap_status_no_show: 'No presentado',
    ap_status_cancelled: 'Cancelado',
    ap_status_rescheduled: 'Reprogramado',
    ap_status_sick: 'Terapeuta enfermo',
    ap_type_session: 'Sesión',
    ap_type_makeup: 'Recuperación',
    ap_type_special: 'Cita especial',

    sk_teacher: 'Reunión con docente',
    sk_parent: 'Reunión con padres',
    sk_doctor: 'Consulta médica',
    sk_final: 'Consulta final',
    sk_diag: 'Diagnóstico',
    sk_other: 'Otro',

    kpi_makeup: 'Recuperaciones pendientes',
    kpi_makeup_sub: 'por coordinar',
    legend_special: 'Cita especial',
    legend_makeup: 'Recuperación',

    new_therapy: 'Nueva terapia',
    nt_title: 'Crear terapia',
    nt_patient: 'Paciente',
    nt_therapist: 'Terapeuta',
    nt_therapy_type: 'Tipo de terapia',
    nt_start: 'Fecha de inicio',
    nt_sessions: 'Número de sesiones',
    nt_sessions_hint: '1–20 · estándar 12',
    nt_rhythm: 'Frecuencia',
    nt_rhythm_weekly: 'Semanal',
    nt_rhythm_biweekly: 'Quincenal',
    nt_create: 'Crear terapia',

    add_special: '＋ Cita especial',
    sp_title: 'Reservar cita especial',
    sp_kind: 'Tipo',
    sp_duration: 'Duración',
    sp_duration_hint: 'Minutos · flexible',
    sp_location: 'Lugar',
    sp_location_ph: 'Ej. Colegio Norte · aula 2B',
    sp_comment: 'Comentario',
    sp_comment_ph: 'Notas internas…',
    sp_book: 'Reservar cita especial',
    sp_save_busy: 'Guardando …',
    sp_phase_label: 'Fase asociada',
    sp_therapist_label: 'Terapeuta',
    sp_datetime_label: 'Fecha y hora',
    sp_validation_phase_start: 'Elija la fase y la fecha/hora.',
    sp_no_active_plan: 'Solo con un plan de tratamiento activo.',
    pd_milestone_parent: 'Reunión con padres',
    pd_milestone_school: 'Reunión con colegio',
    pd_milestone_closing: 'Cierre de fase',

    ci_arrived: '✓ Asistió',
    ci_no_show: '✗ No se presentó',
    ci_reschedule: '↻ Reprogramar',
    ci_confirm_no_show: 'Marcar como no presentado',
    ci_confirm_no_show_sub: 'No cuenta como sesión. Se propondrá una recuperación.',
    sick_day_btn: 'Notificar baja por hoy',
    sick_day_title: 'Baja por enfermedad · hoy',
    sick_day_body: 'Se avisa a recepción. Todas las citas de hoy serán recoordinadas (sustitución o reprogramación).',
    sick_day_confirm: 'Enviar baja',

    rs_title: 'Reprogramar cita',
    rs_scope: 'Alcance',
    rs_only_this: 'Solo esta cita',
    rs_and_following: 'Esta + todas las siguientes en',
    rs_days: 'días',
    rs_new_date: 'Nueva fecha',
    rs_apply: 'Reprogramar',

    pd_tab_therapy: 'Terapia',
    pd_tab_contact: 'Contacto',
    pd_tab_reminders: 'Recordatorios',
    pd_reminders_empty: 'No hay recordatorios para este paciente.',
    pd_rm_config_btn: 'Configurar recordatorios',
    pd_rm_config_title: 'Configuración de recordatorios (por paciente)',
    pd_rm_timing_label: 'Momento',
    pd_rm_timing_day_before: 'Día anterior',
    pd_rm_timing_same_day: 'Mismo día',
    pd_rm_time_label: 'Hora',
    pd_rm_save: 'Guardar',
    pd_rm_save_ok: 'Configuración guardada.',
    pd_rm_col_appt: 'Cita',
    pd_rm_col_reminder: 'Recordatorio',
    pd_rm_recipient_label: 'Recordatorio a',
    pd_rm_recipient_patient: 'Paciente',
    pd_rm_recipient_guardian: 'Representante',
    pd_rm_demo_email_hint: 'Demo / sin envío',
    pd_milestones_empty: 'Sin citas hito en esta fase (estándar al activar el plan: entrevista con padres y con colegio).',
    pd_back: '← Pacientes',
    pd_edit_therapy: 'Editar terapia',
    pd_therapy_progress: 'Progreso terapéutico',
    pd_chronicle: 'Historial de sesiones',
    pd_special_list: 'Citas especiales',
    pd_special_edit_modal_title: 'Cita especial / hito',
    pd_special_delete_btn: 'Eliminar cita especial',
    pd_special_delete_confirm:
      '¿Eliminar esta cita especial? Esta acción no se puede deshacer.',
    pd_done_note_modal_title: 'Nota de sesión completada',
    pd_no_specials: 'Sin citas especiales',
    pd_done: 'Completada',
    pd_planned: 'Programada',
    pd_cancelled: 'Cancelada',
    pd_no_show_label: 'No presentado',
    pd_rescheduled_label: 'Reprogramada',
    // Absage-Modal (PhasePlanPanel)
    pd_outcome_modal_title: 'Registrar resultado de la cita',
    pd_outcome_section_time: 'Fecha y hora',
    pd_slot_apply_time: 'Guardar nueva hora',
    pd_sess_editor_title: 'Editar sesión',
    pd_sess_editor_title_special: 'Editar cita especial',
    pd_sess_editor_save: 'Guardar',
    pd_sess_editor_cancel: 'Cancelar',
    pd_sess_location_placeholder: 'Lugar o sala',
    pd_sess_therapist_placeholder: 'Asignar…',
    pd_sess_modality_label: 'Modalidad / enfoque',
    pd_sess_modality_none: 'Sin selección',
    pd_sess_type_label: 'Tipo de sesión',
    pd_sess_type_treatment: 'Tratamiento',
    pd_sess_type_test: 'Prueba',
    pd_sess_type_assessment: 'Evaluación',
    pd_bulk_targets_heading: 'Más sesiones de esta fase',
    pd_bulk_apply_time: 'Aplicar también la hora a las sesiones seleccionadas (fecha sin cambios)',
    pd_bulk_slot_toggle: 'Incluir sesión',
    pd_outcome_done_btn: 'Completada',
    pd_outcome_cancel_section: 'Cancelar cita',
    pd_outcome_initiator_label: 'Cancelado por',
    pd_outcome_initiator_patient: 'Paciente / Familia',
    pd_outcome_initiator_therapist: 'Terapeuta',
    pd_outcome_initiator_practice: 'Consulta',
    pd_outcome_patient_detail_label: 'Motivo',
    pd_outcome_detail_dns: 'No se presentó (sin motivo)',
    pd_outcome_detail_illness: 'Enfermedad',
    pd_outcome_detail_other: 'Otro',
    pd_outcome_timing_label: 'Momento de la cancelación',
    pd_outcome_timing_on_time: 'Con antelación',
    pd_outcome_timing_late: 'Con retraso',
    pd_outcome_note_label: 'Nota',
    pd_outcome_note_placeholder: 'Breve descripción …',
    pd_outcome_save_cancel: 'Guardar cancelación',
    pd_outcome_close: 'Cerrar',
    pd_outcome_saving: 'Guardando …',
    pd_outcome_locked_hint: 'Cancelado manualmente — automatismo inactivo',
    pd_outcome_reset_btn: 'Eliminar cancelación',
    pd_outcome_reset_confirm: '¿Eliminar la cancelación y volver a «Programada»?',
    pd_row_open_outcome: 'Editar resultado o cancelación de la cita — clic en la fila',
    pd_slot_edit: 'Hora',
    pd_slot_edit_title: 'Cambiar fecha y hora',
    pd_slot_edit_hint: 'Hora de inicio en la zona horaria de la consulta; la duración de la cita no cambia.',
    pd_slot_edit_start: 'Nuevo inicio',
    pd_date_dmy_ph: 'DD.MM.AAAA',
    pd_slot_duration_label: 'Duración',
    pd_slot_duration_min: 'min',
    pd_slot_save: 'Guardar',
    pd_slot_err_invalid: 'Hora no válida.',
    // Absage-Pill-Labels (kompakt)
    pd_cancel_by_patient: 'Pac. canceló',
    pd_cancel_by_therapist: 'Ter. canceló',
    pd_cancel_by_practice: 'Consulta canceló',
    pd_cancel_dns: 'No se presentó',
    pd_cancel_illness: 'Enfermedad',
    pd_contact_label: 'Contacto',
    pd_session_word: 'Sesión',
    pd_phases_title: 'Planificación por fases',
    pd_phase_label: 'Fase',
    pd_phase_window_demo: 'Ventana temporal (ejemplo)',
    pd_phase_sessions_target: '12 sesiones previstas',
    pd_sessions_in_phase: 'Sesiones de esta fase',
    pd_milestone_therapist_end: 'Cierre de fase con terapeuta',
    pd_milestone_school_end: 'Cierre de fase escuela / docente',
    pd_milestone_badge: 'Hito',
    pd_plan_wizard: 'Nuevo plan de tratamiento',
    pd_plan_wizard_sub: 'Plantilla, día fijo, vista previa, conflictos, confirmación en agenda',
    pd_phase_status_active: 'Activa',
    pd_phase_status_planned: 'Planificada',
    pd_phase_status_completed: 'Finalizada',
    pd_expand_sessions: 'Mostrar 12 citas',
    pd_collapse_sessions: 'Ocultar citas',
    pd_expand_milestones: 'Mostrar hitos',
    pd_collapse_milestones: 'Ocultar hitos',
    pd_open_month: 'Vista mensual',
    pd_add_phase: '+ Fase',
    pd_add_phase_modal_title: 'Nueva fase {n}',
    pd_add_phase_hint:
      'Se crearán citas regulares sin terapeuta ni lugar. Las asignaciones se harán después.',
    pd_add_phase_start: 'Fecha de inicio',
    pd_add_phase_weekday: 'Día fijo semanal',
    pd_add_phase_time: 'Hora (en punto)',
    pd_add_phase_duration: 'Duración (min)',
    pd_add_phase_repeats: 'Repeticiones',
    pd_add_phase_submit: 'Crear citas',
    pd_add_phase_cancel: 'Cancelar',
    pd_add_phase_busy: 'Creando…',
    pd_add_phase_err: 'No se pudo crear.',
    pd_session_unassigned: 'Abierto',
    pd_placeholder_dash: '—',
    pd_cal_dow0: 'dom',
    pd_cal_dow1: 'lun',
    pd_cal_dow2: 'mar',
    pd_cal_dow3: 'mié',
    pd_cal_dow4: 'jue',
    pd_cal_dow5: 'vie',
    pd_cal_dow6: 'sáb',
    pd_month_title: 'Calendario',
    pd_month_prev: 'Mes anterior',
    pd_month_next: 'Mes siguiente',
    pd_month_close: 'Cerrar',
    pd_th_date: 'Fecha',
    pd_th_time: 'Hora',
    pd_th_location: 'Lugar',
    pd_th_therapist: 'Terapeuta',
    pd_th_session_kind: 'Tipo de sesión',
    pd_th_status: 'Estado',
    pd_month_legend: 'Días con cita o hito (demo).',

    pd_s4_rep_title: 'Representación (contacto)',
    pd_s4_rep_self: 'El paciente se representa',
    pd_s4_rep_guardian: 'Representación vía tutor / familiar',
    pd_s4_rep_help:
      'Independiente del indicador «menor de edad»: define si nos dirigimos primero al paciente o a la persona de contacto.',
    pd_s4_rep_saving: 'Guardando…',
    pd_s4_rep_saved: 'Guardado.',
    pd_s4_rep_err: 'No se pudo guardar.',
    pd_s4_gua_title: 'Personas de contacto',
    pd_s4_gua_add: 'Añadir contacto',
    pd_gua_mode_search: 'Buscar y vincular',
    pd_gua_mode_create: 'Crear nuevo',
    pd_gua_search_ph: 'Nombre, correo o teléfono…',
    pd_gua_search_empty: 'Sin resultados — use «Crear nuevo» u otra búsqueda.',
    pd_gua_search_loading: 'Buscando…',
    pd_gua_pick_hint: 'Seleccionado — elija la relación y vincule.',
    pd_gua_link_btn: 'Vincular',
    pd_sch_search_label: 'Buscar colegio (entradas existentes)',
    pd_sch_search_ph: 'Nombre o dirección del colegio…',
    pd_sch_suggestions_empty: 'Aún no hay colegios guardados — escriba libremente.',
    pd_sch_new_btn: 'Nuevo colegio',
    pd_sch_pick_hint: 'Elija de la lista o edite abajo manualmente.',
    pd_tch_filter_label: 'Buscar docente',
    pd_tch_filter_ph: 'Filtrar por nombre…',
    pd_s4_gua_edit: 'Editar',
    pd_s4_gua_remove: 'Quitar',
    pd_s4_gua_confirm_remove: '¿Quitar realmente a esta persona de contacto?',
    pd_s4_gua_primary: 'Principal',
    pd_s4_gua_mail: 'Información por correo',
    pd_s4_gua_rel_mother: 'Madre',
    pd_s4_gua_rel_father: 'Padre',
    pd_s4_gua_rel_legal: 'Tutor legal',
    pd_s4_gua_rel_other: 'Otro',
    pd_s4_gua_fn: 'Nombre',
    pd_s4_gua_ln: 'Apellidos',
    pd_s4_gua_email: 'Correo',
    pd_s4_gua_phone: 'Teléfono',
    pd_s4_gua_lang: 'Idioma',
    pd_s4_gua_rel_label: 'Relación',
    pd_s4_gua_save: 'Guardar',
    pd_s4_gua_cancel: 'Cancelar',
    pd_s4_gua_err: 'Error al guardar.',
    pd_s4_live_only: 'Solo disponible con base de datos en vivo.',
    pd_s4_loading: 'Cargando datos del paciente…',

    pd_s5_stam_title: 'Datos básicos (persona)',
    pd_s5_stam_save: 'Guardar datos básicos',
    pd_s5_stam_saved: 'Guardado.',
    pd_contact_tile_patient: 'Paciente',
    pd_contact_tile_rep: 'Representación',
    pd_contact_tile_school: 'Colegio',
    pd_contact_save_patient: 'Guardar paciente',
    pd_contact_save_school: 'Guardar colegio',
    pd_contact_street: 'Calle / n.º',
    pd_contact_postal: 'Código postal',
    pd_contact_city: 'Ciudad',
    pd_contact_birth: 'Fecha de nacimiento',
    pd_school_name: 'Colegio (nombre)',
    pd_school_address: 'Dirección del colegio',
    pd_school_teacher: 'Docente',
    pd_school_teacher_none: 'Sin asignar',
    pd_s5_plans_title: 'Planes de tratamiento',
    pd_s5_plan_id: 'Plan',
    pd_s5_plan_st_draft: 'Borrador',
    pd_s5_plan_st_active: 'Activo',
    pd_s5_plan_st_paused: 'En pausa',
    pd_s5_plan_st_archived: 'Archivado',
    pd_s5_plan_st_completed: 'Finalizado',
    pd_s5_plan_btn_pause: 'Pausar',
    pd_s5_plan_btn_resume: 'Reanudar',
    pd_s5_plan_btn_archive: 'Archivar',
    pd_s5_plan_btn_complete: 'Dar por finalizado',
    pd_s5_plan_busy: 'Guardando…',

    pp_specials: 'Citas adicionales',
    pp_specials_sub: 'Reuniones y consultas fuera del ciclo terapéutico',
    pp_no_shows_hint: 'Las ausencias no cuentan como sesión — coordinaremos una recuperación.',
  },
};

// Global language state
if (typeof window !== 'undefined' && !window.__cinevLangInit) {
  window.__cinevLangInit = true;
  window.__cinevLang = localStorage.getItem('cinev_lang') || 'de';
  window.__cinevLangSubs = new Set();
  window.setLang = (l) => {
    window.__cinevLang = l;
    localStorage.setItem('cinev_lang', l);
    window.__cinevLangSubs.forEach(fn => fn(l));
  };
}

function t(key) {
  const lang = (typeof window !== 'undefined' && window.__cinevLang) || 'de';
  return (I18N[lang] && I18N[lang][key]) || I18N.de[key] || key;
}

function useLang() {
  const [, force] = React.useReducer(x => x + 1, 0);
  React.useEffect(() => {
    window.__cinevLangSubs.add(force);
    return () => window.__cinevLangSubs.delete(force);
  }, []);
  return window.__cinevLang;
}

Object.assign(window, { I18N, t, useLang });
