{# Workspace shell composition — heading, context selector, edit chrome, card grid, add-card, and detail drawer singleton. Contract: ~/.claude/skills/ux-architect/components/workspace-shell.md v0.62 CSS refactor: Tailwind utility soup → semantic .dz-workspace-* / .dz-card-* / .dz-drawer-* classes (components/dashboard.css). Alpine state grammar (saveState, isDragging, isResizing, showPicker) preserved verbatim — :class bindings now toggle .is-dragging / .is-resizing / data-dz-save-state and CSS resolves the visual delta. #} {# #948: cards are server-rendered HTML (no JSON island, no x-for). Alpine state contracts to ephemeral fields only (drag/resize/save/picker); the DOM is the source of truth for layout. The workspace name and the catalog flow through `data-*` attributes that JS reads on demand rather than capturing reactively at init time. #}