- Loop countdown reset button — countdown clocks whose name or content contains "loop" now show a reset (↩) button. Tapping it resets the clock to 0. For dice-based loop clocks, it also restores the roll button so you can re-roll the max.
- Mobile: dice roller and battle calculator close (×) button now registers on first tap. Previously
makeDraggablewas swallowing the touch event because Obsidian's close button is adiv, not abutton. - Mobile: battle calculator "Adjust" and "Spend" button grids now stack to a single column — no more horizontal scroll.
- Mobile: inline dice buttons no longer spawn inside countdown badges or the roll button.
- Inline dice buttons no longer appear inside
.df-env-countdown-badgeor.df-env-countdown-dice-rollelements. - Card insertion (browser + creator) now works on first tap after plugin load. Previously mobile required one failed attempt to seed the target leaf.
- Card insertion now accepts Live Preview mode (getMode = "live") as a valid edit target, not just Source mode.
- Submit button in creator/editor modals is now always blue, flashes white on press.
- HP and Stress tick marks now persist across reading/edit mode switches and across Obsidian restarts. Previously they reset whenever you switched modes or reopened Obsidian.
- Mobile: creator and editor forms now lay out correctly on small screens. Fields stack to a single column, inputs are tap-friendly, and the submit button spans full width.
- Mobile: select dropdowns and text inputs in the adversary and environment forms no longer had a dark background override that broke the desktop light theme.
- Mobile: environment textarea fields were capped at 400px wide on desktop. They now expand to fill the available width.
- HP and Stress collapse animation now uses the CSS grid row trick instead of
max-height, giving a smooth fade-in at natural height without an arbitrary magic number.
- Unified Content Browser single tabbed side panel (Adversaries / Environments) replaces two separate panels. One ribbon button, instant tab switching, no re-fetch.
- Content Creator chooser one entry point opens a picker for Adversary or Environment creator.
- React integration browser panel is now powered by React (hooks, state, effects). Foundation for future interactive UI.
- Horde adversary field "Members per HP" input appears when Type = Horde; saves as
Horde (5/HP)format automatically. - Adversary HP/Stress collapse small toggle button on each card hides/shows the tick section. Collapsed by default. State persists across edit/view mode switches.
- HP & Stress tick sync checkbox states survive mode switches via
sessionStorage. - Settings page keyword highlight toggle and dice result duration slider under Obsidian Settings → DaggerForge.
- Keyword highlighting
hope,fear,hp,stressauto-colored in rendered cards (toggleable). - Dice improvements subtraction support (
1d10-2), colored modifiers (green/red), configurable tooltip duration. - Rich text feature editor description fields replaced with a Tiptap rich text editor (bold, italic, headings, lists).
- Dice & Battle Calculator now proper Obsidian modals (work on mobile), draggable, fully restyled with Lucide icons.
- Browser filters unified filter bar with pill buttons, counter controls, clear button.
- Faceted filter counts each filter option shows how many cards match. Counts are cross-filtered: selecting a type updates the source counts to reflect only matching cards, and vice versa. Counts update when cards are created, edited, or deleted.
- Always-visible filter options all tiers, sources, and types are always listed even when no cards match. Zero-count options are dimmed rather than hidden.
- Wide card toggle each rendered card has a toggle button (edit mode only) to switch between compact and full-width layout. State persists across reading and edit mode switches.
- Sticky submit button the Insert/Update button in the creator and editor stays fixed at the bottom of the form while scrolling.
- Environment/adversary browser cards from JSON showed
undefineddescriptions normalized at load time. - Horde type lost
(X/HP)on edit/re-save. - Bullet points double-rendering in read mode replaced native
ul/liwith customdf-ul/df-lidivs. - Dice expressions with
-(e.g.1d10-2) now subtract correctly. Owl WitchandXero, Castle Killerwere merged into one entry split into separate cards (VA013/VA014).- Keyword colors consistent between edit and read mode.
- Modal drag now works across the entire modal surface, not just the title bar.
- Browser panel no longer requires reopening after creating or editing a card. Filter state and search text are preserved on refresh.
- Edit button on cards is now hidden in reading view where it has no effect.
- Obsidian native "Edit this block" button no longer overlaps card controls.
- Wide card option removed from the creator and filter bar (toggle is on the card itself now).
- Clicking the delete button on a browser card no longer also triggered card insertion.
- Docker-based build (works on any machine via
make build). - WSL2 deploy support (
make deployviadeploy.sh). sessionStoragefor card state persistence;toCustomHtml/toStandardHtmlfor consistent list rendering.- Jest config updated to handle
.tsxfiles so all test suites run correctly. - Browser refresh test suite added (6 cases) covering the unified view type and regression guards.