Overview
dsh-plugin-background-image
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
This plugin works by **overriding DSH theme tokens** and **injecting CSS**, which changes the global interface appearance. Keep the following in mind: 1. **Immersive fullscreen paints one fixed image layer**: the plugin sets `--dsw-alias-bg-base` and `--dsw-specific-sidebar-fill` to `transparent` and draws the image once in `body::before` (`position: fixed`). This is what makes the same image appear continuously behind the sidebar, center column, detail column, and bottom row on both the Web UI and the Desktop window — including macOS Desktop, where the window itself is transparent and uses native vibrancy. Elements that paint `--dsw-alias-bg-base` directly (for example some tool panel surfaces) become see-through to the image; elements that use `--dsw-alias-bg-layer-*` / `--dsw-alias-bg-overlay` (menus, the Settings panel, floating dialogs) stay opaque. 2. **Conversation area only** paints the image on the center column and keeps the native background elsewhere. 3. **Internal structure selectors use semantic suffixes and stable data attributes**: the plugin targets `[class*="_sidebarCol"]`, `[class*="_centerCol"]`, `[class*="_frame"]`, `[data-rightbar-col]`, `[data-shell-bottom]`, `[data-phase][class*="_root"]`, `[data-composer-seat]`, `[class*="_viewArea"]`, `[class*="_composerStack"]`, and `[class*="_composerHero"]` rather than a version's CSS-Module hash. A future DSH renaming of these semantic suffixes or attributes can still break the corresponding effect; the token-based image itself keeps working. 4. **Sidebar frosted glass relies on a pseudo-element approach**: the glass is not applied to the sidebar ancestor itself but to `<sidebar column>::before` (an absolutely positioned overlay carrying the translucent fill and `backdrop-filter`), and the sidebar's content root is made `position: relative` so it paints above the glass. This keeps the sidebar from becoming the containing block for `position: fixed` popovers. 5. **Local image route**: local images depend on the host-side read-only route (loopback only, reference-as-authorization). If the image file is moved or deleted, the background stops working until the path is set again. The plugin probes silently with HEAD requests on page load and whenever the settings page opens (no file content is transferred), and shows a hint at the top of the settings page and in the status line when invalid. 6. **Clean disable**: the token overrides and internal-class styles above exist on the page only while the plugin is enabled (sidebar rules additionally require immersive fullscreen mode). Turning the plugin off removes the corresponding stylesheets entirely, fully restoring native DSH styles without leftover `!important` overrides.
