{# Settings drawer — five tabs: Imports / Profile / Density / ETF pairs / About. Each tab is a separate template included below; switching is purely client-side via Alpine. Cross-tab interactions (e.g. profile changes that recompute pages) post to /preferences and rely on HX-Refresh. Open events come from outside this scope via: window.dispatchEvent(new CustomEvent('open-settings-drawer', { detail: { tab: 'density' } })) `tab` is optional; defaults to 'imports' if not set or unknown. #}
{# Backdrop — fades in/out independent of the panel slide so the dim feels like ambient context, not part of the panel's geometry. Uses bg-overlay-strong + a heavier blur so any underlying content (e.g. the carryforward fragment rendered by settings_entry.html) reads as background ambience, not as a competing UI layer. #} {# Drawer panel — slides from the right edge. Durations bind to --duration-med (240ms) / --duration-fast (160ms) via arbitrary-value utilities so timing stays in lockstep with the rest of the motion system. Width is resizable via the left-edge drag handle. The icon that opens this drawer is hidden on mobile, so width binds unconditionally. #}