{
  "version": 1,
  "notes": "Compact-label registry for check_android_strings.py and the PWA i18n compact test (docs/local/PLAN_UI_STRING_FIT.md). Keys here render in fixed-width UI (chips, tabs, status lines, buttons, meal slots, bottom-nav labels, widget cards) where long translations truncate or overflow. Rules: value length <= budgetChars (12 Latin chars; CJK glyphs are narrow and count at 0.5) and <= budgetCjkChars (8 CJK chars). perKeyOverrides widen the budget for elements with more room (status lines include the value; bottom-nav labels fit 13-14 chars; full-width sheet rows fit more) and mark valueFirst keys whose first placeholder must precede the first word (EN '10,7g over' -> DE '10,7g drüber', NOT 'drüber 10,7g'). Prose keys are simply not listed here. pwaKeyMap maps Android keys to the PWA catalog keys that are actually rendered in PWA UI (nav, action.log, progress ranges); meal.* and action.retry are defined in PWA catalogs but not rendered, so they are not gated there. See docs/LOCALIZATION.md 'Compact labels'.",
  "budgetChars": 12,
  "budgetCjkChars": 8,
  "keys": [
    "macro_status_over",
    "macro_status_left",
    "macro_status_goal_reached",
    "macro_status_no_goal",
    "saved_meals_tab_recents",
    "saved_meals_tab_frequent",
    "saved_meals_tab_favorites",
    "saved_meals_tab_recipes",
    "water_custom_short",
    "progress_range_week",
    "progress_range_month",
    "progress_range_3m",
    "progress_range_6m",
    "progress_range_year",
    "progress_range_all",
    "nav_home",
    "nav_progress",
    "nav_coach",
    "nav_settings",
    "meal_breakfast",
    "meal_lunch",
    "meal_dinner",
    "meal_snack",
    "meal_other",
    "action_log",
    "action_logging",
    "action_save",
    "action_undo",
    "action_retry",
    "action_reset",
    "action_close",
    "action_hide",
    "action_what_if",
    "widget_today",
    "widget_protein",
    "widget_calories",
    "widget_carbs",
    "widget_fat"
  ],
  "perKeyOverrides": {
    "macro_status_over": { "maxChars": 20, "valueFirst": true },
    "macro_status_left": { "maxChars": 20, "valueFirst": true },
    "macro_status_goal_reached": { "maxChars": 20 },
    "macro_status_no_goal": { "maxChars": 20 },
    "nav_settings": { "maxChars": 14 },
    "action_what_if": { "maxChars": 16 },
    "action_log": { "maxChars": 14 },
    "action_reset": { "maxChars": 14 },
    "meal_breakfast": { "maxChars": 14 },
    "meal_lunch": { "maxChars": 14 },
    "widget_carbs": { "maxChars": 14 },
    "widget_calories": { "maxChars": 16 }
  },
  "pwaKeyMap": {
    "nav_home": "nav.home",
    "nav_progress": "nav.progress",
    "nav_coach": "nav.coach",
    "nav_settings": "nav.settings",
    "action_log": "action.log",
    "progress_range_week": "progress.range_1w",
    "progress_range_month": "progress.range_1m",
    "progress_range_3m": "progress.range_3m",
    "progress_range_6m": "progress.range_6m",
    "progress_range_year": "progress.range_1y",
    "progress_range_all": "progress.range_all"
  }
}