From a8951935e6f356b1ab01bb745a32d1a242704783 Mon Sep 17 00:00:00 2001
From: "gpt-engineer-app[bot]"
<159125892+gpt-engineer-app[bot]@users.noreply.github.com>
Date: Thu, 14 May 2026 17:58:59 +0000
Subject: [PATCH] Changes
Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
---
.lovable/plan.md | 151 ++++++++++++++++++++++++++++++++---------------
1 file changed, 102 insertions(+), 49 deletions(-)
diff --git a/.lovable/plan.md b/.lovable/plan.md
index 649cb92..a5ca2e4 100644
--- a/.lovable/plan.md
+++ b/.lovable/plan.md
@@ -1,62 +1,115 @@
-## Resposta curta
+# Menus dentro do passthrough + Compartilhamento que funciona em AR
-Sim, é totalmente possível — hoje o app só carrega 1 modelo por vez (`model: ModelInfo | null` no store), mas a arquitetura (Three.js + R3F) suporta naturalmente múltiplas peças em uma mesma cena. Precisa migrar de "modelo único" para "lista de modelos", cada um com seu próprio transform (posição/rotação/escala) e seleção ativa.
+Dois problemas distintos, duas soluções:
-## O que muda
+---
-### 1. Store (`useModelStore.ts`)
-- Substituir `model: ModelInfo | null` por `models: SceneModel[]` (até 5 simultâneos para manter 72 FPS no Quest 3).
-- Cada `SceneModel` tem: `id`, `fileName`, `url`, `fineTuning` próprio, `visible`, `color` (cor de identificação), `locked`.
-- Adicionar `activeModelId: string | null` — o "modelo selecionado" recebe os controles de fine-tuning, escala e medição.
-- Ações: `addModel`, `removeModel`, `duplicateModel`, `setActiveModel`, `updateModelTransform`, `toggleVisibility`.
-- Compatibilidade: `model` (singular) continua exposto como getter derivado do `activeModelId` para não quebrar telas legadas.
+## Problema 1 — Menus DOM somem no passthrough
-### 2. Cena 3D (`ModelViewer.tsx`)
-- Renderizar `models.map(m => )`.
-- Cada `` aplica seu próprio transform (já existe a lógica, só vira por-instância).
-- Outline/halo sutil no modelo ativo para feedback visual.
-- Click em um modelo → torna-o ativo (raycaster identifica qual instância foi clicada).
+**Causa:** `XRHud` é HTML/CSS sobreposto ao `