diff --git a/assets/js/creations/pattern/pattern_ui.js b/assets/js/creations/pattern/pattern_ui.js
index cc09feda..4ee7f495 100755
--- a/assets/js/creations/pattern/pattern_ui.js
+++ b/assets/js/creations/pattern/pattern_ui.js
@@ -67,6 +67,19 @@ export function renderPatternEditor() {
title.innerHTML = ` ${contextName}`;
navHeader.appendChild(title);
+ // não visualizar tracks nem instrumentos sem pattern selecionada
+ const hasSelection = Number.isInteger(appState.pattern.activePatternIndex);
+ if (!isFocusedMode && !hasSelection) {
+ const msg = document.createElement("div");
+ msg.style.padding = "12px";
+ msg.style.color = "#bbb";
+ msg.textContent = "Selecione uma pattern para visualizar/editar.";
+ trackContainer.appendChild(msg);
+
+ updateGlobalPatternSelector();
+ return;
+ }
+
// Botão Voltar (Aparece apenas se estiver dentro de uma Bassline)
if (isFocusedMode) {
const backBtn = document.createElement("button");
@@ -183,9 +196,31 @@ export function redrawSequencer() {
if (!trackData || !trackData.patterns || trackData.patterns.length === 0) return;
const isFocused = !!appState.pattern.focusedBasslineId;
+ const globalIdx = appState.pattern.activePatternIndex;
+
+ // ✅ Song Editor sem pattern selecionada: não mostra composição
+ if (!isFocused && !Number.isInteger(globalIdx)) {
+ // opcional: desenha uma grade "apagada" pra manter o layout
+ for (let i = 0; i < totalGridSteps; i++) {
+ const stepWrapper = document.createElement("div");
+ stepWrapper.className = "step-wrapper";
+
+ const stepElement = document.createElement("div");
+ stepElement.className = "step"; // sem .active
+ stepElement.style.opacity = "0.25";
+ stepElement.style.pointerEvents = "none";
+
+ stepWrapper.appendChild(stepElement);
+ sequencerContainer.appendChild(stepWrapper);
+ }
+ return;
+ }
+
+ // ✅ em foco: se não tiver globalIdx válido, cai no 0 (porque foco sempre edita algo)
const activePatternIndex = isFocused
- ? (appState.pattern.activePatternIndex || 0)
- : (trackData.activePatternIndex || 0);
+ ? (Number.isInteger(globalIdx) ? globalIdx : 0)
+ : globalIdx;
+
const activePattern = trackData.patterns[activePatternIndex];
if (!activePattern) return;