{
  "schema_version": "visual-recipe-v0.5",
  "module_id": "landing",
  "name": "Landing / Dashboard",
  "source_nav_id": "inventory",
  "user_facing_name": "Dashboard",
  "purpose": "Home view. Shows draggable panels for the 6 main areas. Default landing when the app opens.",
  "behaviour": {
    "panels": ["cupboard", "whattocook", "quickshop", "discover"],
    "panel_draggable": true,
    "panel_resizable": true,
    "panel_swap_supported": true,
    "panel_swap_history": "layoutSwaps, layoutSwaps_undo (localStorage)",
    "default_panel_order": ["cupboard", "whattocook", "quickshop", "discover"],
    "active_tab_persisted_as": "pantry_activeTab",
    "drag_drop_library": "SortableJS 1.15.0"
  },
  "data": {
    "panel_config": "dashboardPanels (localStorage)",
    "panel_order": "panelOrder (localStorage)",
    "panel_proportions": "panelProportionsById (localStorage)",
    "layout_swap_history": "layoutSwaps, layoutSwaps_undo (localStorage)"
  },
  "ui": {
    "header_height": 60,
    "chip_nav_height": 50,
    "responsive": true,
    "mobile_panel_behavior": "swapped-in panels start collapsed on mobile (<600px)"
  },
  "key_functions": [
    "renderChipNav",
    "navChipClick",
    "showTab",
    "togglePanel",
    "maximizePanel",
    "onChipDragOverPanel",
    "onChipDropOnPanel",
    "saveTabOrder",
    "loadTabOrder"
  ],
  "files": {
    "html": "app/index.html#inventory-tab",
    "css": "app/styles.css (panel + chip-nav + dashboard classes)",
    "js": "app/modules/landing.js"
  },
  "tests": [
    "Renders 4 panels by default",
    "All 4 panels are draggable",
    "Panel order persists to localStorage",
    "Tab swap creates a new panel from the tab content",
    "Mobile viewport (<600px) collapses swapped panels"
  ]
}