- replace old PopupMenu (flat preset list) with PopupPanel-based menu
- add 3-icon toolbar: ⚙ Settings, ℹ Info, ✕ Remove (+) + Add
- red ✕ on tiles removes the tile; green + on empty space opens add-tile submenu
- 'Themes ▸' button opens a submenu with all ShaderPresets
- add-tile submenu populates from PluginManager.get_all_tile_defs()
- all toolbar buttons are 48×48 flat buttons with 24px font for touch
- orphan PopupPanel children cleaned up during grid rebuild
_end_drag now calculates the target grid cell from the module's visual
top-left position (mouse_pos - grab_offset) instead of the raw mouse
position. This prevents multi-cell tiles from jumping an extra cell when
grabbed near an edge.
- replace instant drag-on-press with 500ms long-press timer
- cancel long-press on early release or movement past 10px threshold
- preserve double-click for mouse users (backward compatible)
- resize edge detection still instant (no long-press)
- cancel long-press on mouse_exit and grid rebuild
- fix: ConfigFile reserved word 'default' removed from config
- plugin_manager: scans res://plugins/*/plugin.cfg, loads tile definitions
- plugin_tile: new base class for plugin tiles, extends ModuleBase
- layout_manager: save/restore tile grid positions per named layout
- migrate existing cpu/memory/testing tiles into system_monitor plugin
- add module_resized signal to DashboardGrid for auto-save
- dashboard reads from PluginManager + LayoutManager instead of hardcoded paths
- project.godot registers PluginManager and LayoutManager autoloads
- AGENTS.md updated with new structure and conventions