{"nodes": [{"id": "plan_fase_5", "label": "Fase 5 \u2014 Redise\u00f1o UX Mobile (Monolith Editorial)", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "concept_mobile_shell", "label": "Mobile shell (DesktopSidebar hidden, MobileTopBar + BottomTabBar + MobileDrawer)", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.1", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "concept_masthead_editorial", "label": "Editorial masthead component (uppercase label + big title)", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.2", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "concept_undo_queue_toast", "label": "UndoQueue + UndoToast (4s TTL, optimistic delete with undo)", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.5", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "concept_swipe_toggle_gestures", "label": "Swipe-right check / swipe-left uncheck symmetric gestures on items", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.10.b", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "concept_selection_mode_bulk", "label": "Selection mode + bulk actions (long-press entry, delete/move/mark-checked)", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.11", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "concept_generate_id_helper", "label": "generateId() helper (crypto.randomUUID fallback for insecure contexts)", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.13", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "rationale_drop_unit_column", "label": "Why drop shopping_items.unit: double-tap overlay only edits name; leaving unit unreachable would strand data. Users encode units in the name.", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.10.0", "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "rationale_inline_add_form", "label": "Why inline add-form at end of list: avoids competing with bottom tab bar; consistent with /notes pattern", "file_type": "document", "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.14", "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "plan_fase_5", "target": "plan_fase_4", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75 (211 tests previos deben seguir verdes)", "weight": 1.0}, {"source": "plan_fase_5", "target": "design_monolith_editorial_direction", "relation": "cites", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": null, "weight": 1.0}, {"source": "plan_fase_5", "target": "design_lists_mobile_html", "relation": "cites", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a70 (las mockups mobile)", "weight": 1.0}, {"source": "plan_fase_5", "target": "design_notes_mobile_html", "relation": "cites", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": null, "weight": 1.0}, {"source": "plan_fase_5", "target": "design_search_page_html", "relation": "cites", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "plan/fase-5-mobile-ux.md", "source_location": null, "weight": 1.0}, {"source": "plan_fase_5", "target": "concept_mobile_shell", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.1", "weight": 1.0}, {"source": "plan_fase_5", "target": "concept_masthead_editorial", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.2", "weight": 1.0}, {"source": "plan_fase_5", "target": "concept_undo_queue_toast", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.5", "weight": 1.0}, {"source": "plan_fase_5", "target": "concept_swipe_toggle_gestures", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.10.b", "weight": 1.0}, {"source": "plan_fase_5", "target": "concept_selection_mode_bulk", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.11", "weight": 1.0}, {"source": "plan_fase_5", "target": "concept_generate_id_helper", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.13", "weight": 1.0}, {"source": "rationale_drop_unit_column", "target": "concept_swipe_toggle_gestures", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.10.0", "weight": 1.0}, {"source": "rationale_inline_add_form", "target": "plan_fase_5", "relation": "rationale_for", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "plan/fase-5-mobile-ux.md", "source_location": "\u00a75.14", "weight": 1.0}, {"source": "concept_undo_queue_toast", "target": "concept_offline_queue_idb", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.65, "source_file": "plan/fase-5-mobile-ux.md", "source_location": null, "weight": 1.0}, {"source": "concept_selection_mode_bulk", "target": "concept_swipe_toggle_gestures", "relation": "semantically_similar_to", "confidence": "INFERRED", "confidence_score": 0.7, "source_file": "plan/fase-5-mobile-ux.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "mobile_ux_monolith_cluster", "label": "Monolith Editorial mobile UX cluster (shell + masthead + gestures + undo + selection)", "nodes": ["concept_mobile_shell", "concept_masthead_editorial", "concept_undo_queue_toast", "concept_swipe_toggle_gestures", "concept_selection_mode_bulk", "design_monolith_editorial_direction"], "relation": "form", "confidence": "EXTRACTED", "confidence_score": 0.9, "source_file": "plan/fase-5-mobile-ux.md"}]}