Blob Tree Template -

function selectBlob(blobId) const blob = blobData.find(b => b.id === blobId); if (!blob) return; currentSelectedId = blobId;

footer font-size: 0.7rem; text-align: center; margin-top: 28px; opacity: 0.7;

.selection-display font-size: 1.3rem; font-weight: 600; color: #2c1a0c; display: flex; align-items: baseline; flex-wrap: wrap; gap: 12px; justify-content: space-between; blob tree template

// branch display mapping (order + titles) const branchConfig = [ key: "canopy", label: "🌿 CANOPY · high energy & visibility" , key: "middle-left", label: "🌘 LEFT MID · inner tension & quietness" , key: "middle-right", label: "☀️ RIGHT MID · expressive & reactive" , key: "lower-ground", label: "🍂 LOWER · withdrawn, grounded or tired" , key: "top-solo", label: "✨ TOP · spotlight / leadership" ];

h1 font-size: 2.3rem; font-weight: 700; margin: 0 0 0.25rem 0; color: #4b2e1a; letter-spacing: -0.5px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; justify-content: space-between; function selectBlob(blobId) const blob = blobData

branchBlobs.forEach(blob => const itemDiv = document.createElement("div"); itemDiv.className = "blob-item"; if (currentSelectedId === blob.id) itemDiv.classList.add("selected"); itemDiv.dataset.id = blob.id;

.emotion-note margin-top: 16px; color: #6a3e1a; font-style: italic; border-left: 3px solid #ffb358; padding-left: 20px; b.id === blobId)

function init() loadPersistedNotes(); buildTreeUI(); // after building, trigger selection to display current selected or default if (currentSelectedId) selectBlob(currentSelectedId); else // if nothing selected, default to blob 1 selectBlob(1); document.getElementById("saveReflectionBtn").addEventListener("click", () => saveCurrentReflection(); persistData(); ); // optional: auto-save on textarea blur document.getElementById("reflectionInput").addEventListener("blur", () => if (currentSelectedId) savedNotes[currentSelectedId] = document.getElementById("reflectionInput").value; persistData(); );