


# Zenith Filer - Version History (Archive: v0.1.0 - v0.30.0)

## [0.30.0] - 2026-03-09 : Added Frequent Folders, Recently Opened Files, and Properties Views

### Added
- **Frequent folders view**: Added a "Frequent Folders" view to the nav pane. Displays folders in order of access count from browsing history; double-click to navigate. Right-click for A/B pane selection, drag & drop to pane
- **Recently opened files view**: Added a "Recently Opened Files" view to the nav pane. Records files opened via ShellExecute and displays them in most recently opened order. Features: reopen, show parent folder in pane, clear
- **Properties view**: Added a "Properties" view to the nav pane. Displays basic information (name, path, size, type, modified/created date, attributes) linked to file list selection. Shows file/folder count and total size for multiple selections

### Fixed
- **Fixed new views not appearing in existing user's nav pane**: Added migration process to automatically append new 3 views (Frequent Folders, Recently Opened Files, Properties) to the end of the left sidebar when not included in saved layout. Does not duplicate-add views already moved to the right sidebar
- **Fixed active item background highlight not appearing in nav pane lower zone**: Changed lower icon bar buttons to RadioButton + IconRadioButton style so the same SelectionBrush background applies as the upper section
- **Fixed nav pane lower item click resetting splitter position to center**: Now reads and saves the split ratio from the actual heights of current RowDefinitions before RebuildLayout

## [0.29.17] - 2026-03-09 : Improved Visibility of History Pane Date Group Headers

### Changed
- **Improved visibility of history pane date group headers**: Added a light band background (TextBrush 6%) and accent-colored bottom border (AccentBrush 30%) to date headers, clarifying group separations. Added vertical centering and padding to item row icons and text, improving information scannability

## [0.29.16] - 2026-03-09 : Custom Title Bar Caption Buttons

### Changed
- **Replaced title bar caption buttons with custom buttons**: Hidden OS standard minimize, maximize, and close buttons, replaced with custom buttons styled consistently with settings, manual, and history icons. Close button has red hover, maximize/restore auto-switches icons

## [0.29.15] - 2026-03-09 : Moved Settings, Manual, and Changelog Icons to Title Bar

### Changed
- **Moved settings, manual, and changelog icons to title bar**: Moved the three icons (Settings, Manual, Changelog) from the right end of the left nav pane upper section to the window top-right (left of minimize/maximize/close buttons). Icons no longer obstruct when adding nav pane items

## [0.29.14] - 2026-03-08 : Fix for Opposite Pane Blank on Icon Click

### Fixed
- **Fixed opposite pane becoming blank on icon click**: Fixed an issue where `DetachChildViews()` was detaching all views from the shared ViewRegistry, causing one NavPaneControl's `RebuildLayout()` to remove views from the opposite side. Changed to target only views under own ContentArea using `IsDescendantOf()`

## [0.29.13] - 2026-03-08 : Fix for Lower Zone View Uninitialized and Live Sync

### Fixed
- **Fixed left-lower/right-lower zone view uninitialized issue**: Fixed an issue where placing a tree or history in BottomActive resulted in blank display due to missing initialization. Extended PropertyChanged handler and initial load processing to BottomActive
- **Fixed live sync not reflecting in lower zone**: Replaced conditions that targeted only TopActive for tree path following and history real-time updates with `IsViewActiveAnywhere()` covering all zones (left/right x upper/lower)

## [0.29.12] - 2026-03-08 : Fix for Logical Child Duplicate Error on Cross-Zone Drop

### Fixed
- **Fixed logical child duplicate error on cross-zone drop**: Fixed an `InvalidOperationException` caused by `DetachChildViews()` only detaching views under its own `ContentArea`, failing when trying to add views attached to the other NavPaneControl. Removed parent affiliation check, unconditionally detaching all views in ViewRegistry

## [0.29.11] - 2026-03-08 : Fix for Right Nav Pane Width Reset and View Not Updating

### Fixed
- **Fixed right nav pane width reset issue**: Fixed an issue where user-resized width via GridSplitter was reset to default (220px) when `RebuildNavLayout()` was called. Now writes back current column width to ViewModel before rebuild
- **Fixed right nav pane view not updating issue**: Fixed an issue where initialization/sync logic did not fire when placing tree or history in right nav. Subscribed to `RightSide.PropertyChanged` for view initialization execution and extended tree sync conditions to right side

## [0.29.10] - 2026-03-08 : Fix for Intermittent Zone Drop Failure (Part 2)

### Fixed
- **Fixed intermittent zone drop failure (Part 2)**: Addressed issues where ActiveZone reverted to None on DragLeave timing and adorner was destroyed when DragEnded fired first. Added fallback to directly recalculate zone from drop position, and introduced backup capture when CurrentDragItem has already been cleared

## [0.29.9] - 2026-03-08 : Fix for Right-to-Left Zone Drop Item Move Failure

### Fixed
- **Fixed item unable to move on right-to-left zone drop in some cases**: Delegated zone drop processing from NavPaneControl to MainWindow, protecting with both left and right `SuppressRebuild` + `_suppressNavRebuild`. Resolved visual tree instability when the right side lost its last item and `RebuildLayout` / `RebuildNavLayout` fired synchronously

## [0.29.8] - 2026-03-08 : Fix for Edge and Zone Adorner Duplicate Display

### Fixed
- **Fixed edge adorner and zone adorner displaying simultaneously when right nav pane is visible**: When the right nav pane is visible (Items >= 1), skip right-edge adorner display/highlight/drop processing, allowing only zone adorners to function. Edge adorner remains available for new sidebar creation when right nav is hidden

## [0.29.7] - 2026-03-08 : Fix for Right Edge Drop Unable to Add Items

### Fixed
- **Fixed unable to add items to nav pane via right edge drop**: `RootContent_PreviewDragOver` was not setting `e.Effects` and `e.Handled` during edge zone detection, causing child element `ListView_DragOver` to overwrite with `Effects = None`, preventing `PreviewDrop` event from firing. Now sets `e.Effects = DragDropEffects.Move` + `e.Handled = true` within edge zone to prevent propagation to child elements

## [0.29.6] - 2026-03-08 : Fix for Edge Adorner Disappearing During Drag

### Fixed
- **Fixed edge adorner disappearing during drag**: `RootContent_PreviewDragLeave` was firing on every descendant element departure as a tunneling event, immediately destroying the edge adorner. Now maintains adorner in dim display during drag, destroying only on drop/cancel
- **Fixed unnecessary adorner object creation for Collapsed right nav pane**: Now skips adorner creation when `AdornerLayer.GetAdornerLayer()` returns null (Collapsed pane)

## [0.29.5] - 2026-03-08 : Fix for Zone Border Disappearing on Drop Zone Re-entry

### Fixed
- **Fixed zone border disappearing on drop zone re-entry**: Fixed an issue where the adorner was regenerated when hovering back over ContentArea after leaving during drag, causing unstable rendering. Now switches to dim display via `SetActiveZone(None)` without destroying the adorner during drag, ensuring stable zone border display on re-entry

## [0.29.4] - 2026-03-08 : Batch Preview of All Drop Zones on Drag Start

### Changed
- **Batch preview display of all drop zones on drag start**: At the moment a nav pane icon drag starts, all zones within ContentArea (Top/Bottom/Center) and window edge are displayed faintly. Only the zone under the cursor highlights strongly, making droppable locations visible in advance

## [0.29.3] - 2026-03-08 : Fix for D&D Zone Drop Lower-to-Upper Movement

### Fixed
- **Fixed D&D zone drop lower-to-upper movement not working**: After NavPaneControl refactoring, `Side_PropertyChanged` was firing `RebuildLayout()` on every intermediate state change of `TopActive`/`BottomActive`, interrupting D&D operations. Suppressed automatic rebuild during D&D operations with `SuppressRebuild` flag, rebuilding only once after operation completion

## [0.29.2] - 2026-03-08 : Refactored Nav Pane into NavPaneControl

### Changed
- **Refactored nav pane into reusable NavPaneControl UserControl**: Extracted ~450 lines of NavPane facade code from MainWindow.xaml.cs and ~150 lines from MainViewModel.cs into `NavPaneControl`. Removed MainViewModel dependency from NavPaneDropHandler/NavPaneDragSource, changing to callback-based design. Achieved instantiable component structure ready for future sub-NavPane additions

## [0.29.1] - 2026-03-08 : Fix for Lower Icon Bar Click and Drag Malfunction

### Fixed
- **Fixed lower icon bar click moving items to upper section**: Increased lower bar drag threshold from 4px to 8px to prevent false drags from micro-jitter on click. Fixed drop handler to maintain lower zone membership during same-side reordering
- **Fixed drop zone adorner always displaying during drag on lower icon bar**: Since `IsMouseOver` is not updated during D&D, changed to coordinate-based boundary detection using `DragEventArgs.GetPosition()` to correctly suppress drop zone adorner display on the lower icon bar

## [0.28.9] - 2026-03-08 : Nav Pane Left/Right Symmetric Code Refactoring

### Changed
- **Nav pane Left/Right symmetric code refactoring**: Introduced `NavPaneSideState` class to consolidate ~350 lines (VM) + 187 lines (code-behind) + 120 lines (DropHandler) of duplicate left/right sidebar code. All existing XAML bindings and settings file compatibility maintained

### Fixed
- **Fixed semi-transparent adorner remaining after drop failure**: Fixed to ensure all adorners are cleaned up via `DragEnded` event when drag operation is cancelled or dropped outside a zone

## [0.28.8] - 2026-03-08 : Fix for D&D Reordering on Icon Bar

### Fixed
- **Fixed D&D on icon bar to work as reordering**: Excluded upper and lower icon bar areas from drop zones so that dragging on icon bars is handled as GongSolutions reorder D&D. Unified the lower icon bar to ItemsControl + GongSolutions D&D, enabling reordering

## [0.28.7] - 2026-03-08 : Fix for Split Mode Unsplit Omission

### Fixed
- **Split mode unsplit omission**: Fixed an issue where dropping the sole remaining item in the upper zone to the lower zone caused the operation to revert. Now transitions to single-pane layout by unsplitting when there is no replacement in the upper zone (both left and right)

## [0.28.6] - 2026-03-08 : Drop Zone 2-Zone Conversion + Splitter Full Lower Section Control

### Changed
- **Drop zone 2-zone conversion**: Changed non-split drop zones from 3 zones (Top/Center/Bottom) to 2 zones (Top/Bottom). Split mode retains the 3-zone layout (Top/Center(unsplit)/Bottom) as before
- **Full lower section height control with splitter**: Changed split mode layout from 4-row to 3-row structure, nesting the lower icon bar and view in a DockPanel. Splitter now controls the entire lower section (icon bar + view) height as one unit

### Fixed
- **Extended Top drop zone to include icon bar area**: Extended adorner Top zone drawing upward to include the icon bar (32px), so dragging over the icon bar also shows the Top zone highlight
- **Improved hover response range for lower drop zone**: Fixed an issue where `PreviewDragLeave` incorrectly deleted the adorner on transitions to child elements (now only deletes when mouse exits NavContentArea). Set transparent background on lower DockPanel to resolve hit-test-unreachable area

## [0.28.5] - 2026-03-08 : Empty Zone Auto-Collapse + Left Edge Drop Restoration

### Added
- **Nav pane empty zone auto-collapse**: When D&D causes a zone to become empty (0 items), that sidebar is automatically hidden
- **Left edge drop sidebar restoration**: Added ability to restore hidden left sidebar by dropping items within 60px of the window left edge
- **Split mode auto-unsplit**: Automatic unsplit when TopActive == BottomActive during split

### Changed
- **Multiple item placement in lower zone**: Changed behavior when dropping items into the lower zone drop zone from replacing existing items to adding. Multiple items line up in the lower icon bar, switchable by click

### Fixed
- **Left sidebar empty state unhandled**: Fixed `EnsureActiveConsistency()` not handling `LeftItems.Count == 0`, causing the left sidebar to remain visible even when empty
- **Source-side consistency on cross-bar move**: Delegated source-side sidebar empty check and consistency processing to `EnsureActiveConsistency()` in cross-bar moves within `Drop()`, eliminating omissions

## [0.28.4] - 2026-03-08 : Fix for Icon Bar Exclusive Control ContentPresenter

### Fixed
- **Nav pane icon bar exclusive control ContentPresenter-level fix**: Fixed an issue where `Visibility` binding on `RadioButton` (content) left the `ContentPresenter` (container) in the layout. Bound `Visibility` at container level via `ItemContainerStyle` for proper exclusive hiding in split mode
- **Icon bar exclusive control binding path fix**: Fixed `{Binding IsExcludedFromTopBar}` not resolving because DataContext on `ContentPresenter` in `ItemContainerStyle` is `MainViewModel`. Changed to `{Binding Content.IsExcludedFromTopBar, RelativeSource={RelativeSource Self}}`
- **Icon bar full exclusive control**: Fixed duplicate icon display in upper and lower bars because the lower bar was showing "all items except upper active". Each icon is now displayed in only one location across all drop zones; the lower bar shows only items belonging to the lower zone

## [0.28.3] - 2026-03-08 : Data-Driven Root Fix for Icon Bar Exclusive Control

### Fixed
- **Nav pane icon bar exclusive control data-driven root fix**: Eliminated post-hoc Visibility manipulation via `ContainerFromIndex` + `Dispatcher.BeginInvoke` and switched to data-driven approach using `NavViewItem.IsExcludedFromTopBar` property + XAML binding. Achieved stable exclusive control independent of container generation timing
- **Right sidebar lower icon bar in split mode**: Lower icon bar now displays for right sidebar in split mode, enabling lower view switching
- **Right sidebar upper icon click swap**: Added swap behavior when clicking an item in the upper section that is active in the lower section for the right sidebar (matching left sidebar operability)

## [0.28.2] - 2026-03-08 : Lower Icon Bar in Split Mode + Drop Zone Adaptation

### Added
- **Left nav pane lower icon bar in split mode**: Displays a compact icon bar (28px) directly below the GridSplitter in split mode, enabling lower view switching

### Changed
- **Drop zone adaptation in split mode**: Changed to zone display based on actual pixel boundaries of upper/lower sections in split mode — upper drop replaces upper, lower drop replaces lower, center (near GridSplitter) drop unsplits

### Fixed
- **Icon bar exclusive display**: Upper icon bar hides items active in the lower section, lower icon bar excludes items active in the upper section, preventing duplicate display of the same view
- **Same-view duplication in split mode (Visual duplication crash)**: Fixed `ArgumentException: already a child of another Visual` when drop operation set the same view in both upper and lower — controlled `ActivateBottom/TopView` call order to guarantee consistent state at rebuild time. Added defensive duplicate ID addition skip in `RebuildNavLayout`
- **Exclusive display timing issue**: Fixed `Dispatcher.BeginInvoke(Loaded)` deferred execution for cases where containers were not yet generated immediately after `RebuildNavLayout()`
- **Upper icon bar always highlighted**: Fixed IsActive flag not properly resetting, causing all icons to appear selected
- **Lower-to-upper item movement**: Added drag operation from lower icon bar, enabling items to be moved to drop zones
- **Lower drop zone icon bar inclusion**: Fixed lower icon bar being included in center zone instead of lower zone
- **Lower icon bar one-click switching**: Changed to ClickMode.Press for immediate response

## [0.28.1] - 2026-03-08 : Fix for Nav Pane D&D Drop Zone Not Displaying

### Fixed
- Fixed nav pane D&D drop zone not displaying — resolved issue where WPF event bubbling was consumed by child elements by switching to Preview (tunneling) events

## [0.28.0] - 2026-03-08 : Nav Pane D&D Drop Zone (VS Code Style Dynamic Placement)

### Added
- **Nav pane D&D drop zone (VS Code style dynamic placement)**: Drag icon to content area -> semi-transparent drop zone display -> drop for dynamic splitting
  - Left and right sidebars each independently support upper/lower 2-pane split (up to 4 views simultaneously)
  - Top/Center/Bottom 3-zone drop indicator
  - Drag to 60px area at window right edge to create new right sidebar
  - Minimum 1 item constraint (last item cannot be dragged)
  - Auto-migration from old format (Slot1/Slot2 + NavPaneOrientation)

### Changed
- **Nav pane data model overhaul**: Deprecated Slot1/Slot2 + NavPaneOrientation 4-mode system, changed to independent left/right sidebar model (LeftViews/RightViews)
- **Right-click layout menu deprecated**: Replaced by D&D drop zones

## [0.27.0] - 2026-03-08 : Nav Pane Modular Layout + View Separation

### Added
- **Nav pane modular layout**: Nav pane views can now be rearranged and split via D&D
  - 4 layout patterns: single (traditional), top/bottom split, left/right split, left edge + right edge
  - GongSolutions.WPF.DragDrop for icon bar D&D reordering and slot-to-slot movement
  - Layout switching via right-click menu
  - Auto-persistence and restoration of layout settings

### Changed
- **Nav pane view separation**: Separated 5 nav pane views (Favorites, Tree, History, Index Search, Working Set) into independent UserControls, lightening MainWindow.xaml
- **Sidebar width control simplification**: Eliminated per-view fixed width (220px/340px) auto-switching, unified to free user resizing

## [0.26.5] - 2026-03-08 : Fix for 20px Row Height + About Page Polish

### Fixed
- **Fixed 20px row height not applying**: Changed ListViewItem `MinHeight` to `Height`; at ultra-compact (20px), font size (10.5pt) and icon size (13px) auto-shrink. 24px and above maintains standard font size (14pt)

### Changed
- **About page layout polish**: Enlarged header icon/logo and clarified information hierarchy; applied accent border to .NET 8/WPF badge. Changed 2-column to left-wider (3:2) and added [Changed] accent tags to What's New. Moved footer Copyright to right-aligned

## [0.26.3] - 2026-03-07 : Ultra-Compact Row Height (20px) Added

### Added
- **Ultra-compact row height**: Added "Ultra-Compact (20px)" to file list row height options. Enables displaying more files at once

## [0.26.2] - 2026-03-07 : Version Info Display Fix + Update Content Display Added

### Fixed
- **Version info display fix**: Fixed version number not displaying on the About page (binding path error)

### Added
- **Update content display**: Added a section to the About page showing CHANGELOG entries for the current version

## [0.26.0] - 2026-03-07 : Differential Update Support + DLL Separation Build Migration

### Changed
- **Differential update support**: Auto-update now preferentially downloads patch ZIP (app-specific files only, ~1-3MB). Falls back to full ZIP if patch ZIP is unavailable
- **Distribution format change**: Disabled PublishSingleFile, migrated to DLL separation build. SelfContained (portable) maintained. Full ZIP ~100MB, patch ZIP ~1-3MB
- Removed the individual EULA dialog displayed on second and subsequent startups (already integrated into the first-launch Welcome window)

## [0.25.2] - 2026-03-07 : Auto-Update Encoding Error Fix

### Fixed
- Fixed `NotSupportedException` occurring during auto-update application due to unregistered Encoding 932 (Shift_JIS) (changed to UTF-8 BOM + `chcp 65001`)

## [0.25.1] - 2026-03-07 : Effects ON/OFF Refactoring

### Changed
- **Effects ON/OFF refactoring**: Consolidated duplicate code for effect category settings
  - WindowSettings: Consolidated 9 individual `SetShowXxxRuntime` into `SetEffectCategoryRuntime`, consolidated `SaveShowScanBarOnly` into `SaveEffectCategoryOnly`
  - AppSettingsViewModel: Simplified 8 OnChanged handlers to expression bodies with `ApplyEffectCategory` helper, consolidated 9 field assignments in Load method with tuple deconstruction
  - TabContentControl: Consolidated 4 Popup animations into `AnimatePopupOpen` helper, changed `ShowDragAdorner` to early return
  - MainWindow: Unified branch direction of Preview 3 methods to `if (!enabled)`

## [0.25.0] - 2026-03-07 : Effect Categories 9-Section Organization

### Added
- **Effect categories 9-section organization**: Classified visual effects into 9 categories, each controllable with ON/OFF toggles
  - A. Startup/Overall (ShowStartupEffects): Welcome animation, loading overlay
  - B. GlowBar (ShowGlowBar): Overall progress bar fade, interpolation, glow
  - C. Scan Bar (ShowScanBar): Scan bar during folder loading (existing)
  - D. Tab Operations (ShowTabEffects): Tab indicator slide, content fade, D&D marker
  - E. Pane Transitions (ShowPaneTransitions): Pane fade, Control Deck expand/close, sidebar width animation
  - F. Theme (ShowThemeEffects): Theme switch overlay, theme toast notification
  - H. Quick Preview (ShowPreviewEffects): Preview open/close animation
  - I. File List (ShowListEffects): Hover effects, context menu animation
  - L. Drag & Drop (ShowDragEffects): Drag adorner display

### Changed
- **Legacy settings migration**: Auto-converted EnableMicroAnimations->D/E/H, EnableListAnimations->I, ShowWelcomeAnimation->A
- **Legacy settings deprecated**: Removed static flags, runtime setters, and SaveOnly for EnableMicroAnimations, EnableListAnimations, ShowWelcomeAnimation (instance properties retained for JSON compatibility)

## [0.24.6] - 2026-03-07 : New Effects Category + Scan Bar Setting

### Added
- **New effects category**: Added an "Effects" category to Control Deck, consolidating animation and visual effect settings. Placed 4 items: Welcome Animation (moved from General), Micro Animations and List Animations (moved from Display), and new Scan Bar setting
- **Scan bar setting**: The scan bar (flowing progress bar) displayed during folder loading and search can now be toggled on/off (Effects category)

## [0.24.5] - 2026-03-07 : Welcome Animation Setting Added

### Added
- **Welcome animation setting**: The startup status bar welcome animation can now be toggled on/off (General category -> Display section). When off, the status bar appears immediately

## [0.24.4] - 2026-03-07 : Startup Sequence Acceleration + EULA Integration

### Changed
- **Startup sequence acceleration**: Removed splash screen, changed service initialization (TrayIcon / CpuIdle / Update) to deferred execution after rendering completion. Reduced white screen gap on startup
- **Welcome animation shortened**: Shortened normal startup status bar welcome animation from ~10 seconds to ~3.5 seconds (first launch unchanged)
- **White screen elimination**: Delayed window display until ContentRendered completion, showing window only after content is fully drawn. Eliminated white screen flash on startup
- **EULA integration**: Integrated first-launch EULA consent as a page within the Welcome window. Deprecated separate dialog display (existing users who haven't consented continue using the legacy dialog)

## [0.24.3] - 2026-03-07 : Downloads Folder Auto-Sort + Manual Update

### Added
- **Downloads folder auto-sort**: Added a setting (General category) to automatically sort by most recent modified date when navigating to the Downloads folder. Reverts to default sort when navigating to other folders

### Changed
- **Manual update**: Refreshed Section 8 "Installation and Build Configuration". Added descriptions for themes/, scripts/ folders, ZenithDocViewer.exe, auto-update, and EULA. Added resident mode, hidden files, extension display, downloads auto-sort, shortcut keys, usage statistics, and version info category descriptions to basic settings
- **Manual technical details**: Significantly expanded Section 4-8 "Technical Details" to 10 subsections. Detailed library list, Lucene field definitions, Japanese tokenization, query construction pipeline (with examples), indexing pipeline, concurrent execution control, SQLite schema, and FileSystemWatcher integration

### Fixed
- **Auto-update**: Fixed an issue where download did not start after update detection and the "Restart and Apply" button was not displayed. Changed to start automatic download simultaneously with detection
- **Auto-update**: Added automatic application of downloaded updates on app exit. Updates possible via both button press for immediate application and automatic application on next exit
- **Stability improvement**: Fixed SemaphoreSlim release leak in IndexService, changed synchronous Dispatcher.Invoke to async in TreeViewDragDropBehavior for deadlock prevention, added try-catch to async void event handlers (9 locations)

## [0.24.2] - 2026-03-07 : Control Deck Navigation Cleanup + EULA Consent State Fix
- **Effects category 9-section layout**: Classified visual effects into 9 categories, each controllable via individual ON/OFF toggles
  - A. Startup/Global (ShowStartupEffects): Welcome animation, loading overlay
  - B. GlowBar (ShowGlowBar): Overall progress bar fade, interpolation, glow
  - C. Scan Bar (ShowScanBar): Scan bar during folder loading (existing)
  - D. Tab Operations (ShowTabEffects): Tab indicator slide, content fade, D&D markers
  - E. Pane Transitions (ShowPaneTransitions): Pane fade, Control Deck expand/collapse, sidebar width animation
  - F. Theme (ShowThemeEffects): Theme switch overlay, theme toast notification
  - H. Quick Preview (ShowPreviewEffects): Preview open/close animation
  - I. File List (ShowListEffects): Hover effects, context menu animation
  - L. Drag & Drop (ShowDragEffects): Drag adorner display

### Changed
- **Legacy settings migration**: Auto-convert EnableMicroAnimations to D/E/H, EnableListAnimations to I, ShowWelcomeAnimation to A
- **Legacy settings deprecated**: Removed static flags, runtime setters, and SaveOnly for EnableMicroAnimations, EnableListAnimations, and ShowWelcomeAnimation (instance properties retained for JSON compatibility)

## [0.24.1] - 2026-03-07 : EULA first-time only display + Folder TOP50 statistics

### Changed
- **EULA**: Changed license agreement dialog from showing on every version update to showing only on first launch

### Added
- **Folder TOP50**: Added "Most Viewed Folders" table to the statistics page. Displays top 50 folders sorted by access count in descending order, with star icon to add to favorites
- **Folder TOP50 click**: Clicking a folder name or path opens the folder in Explorer (underline shown on hover)

## [0.24.0] - 2026-03-07 : Usage statistics page

### Added
- **Usage statistics**: Added "Statistics" category to the Control Deck, displaying usage counts for each feature (search, rename, copy, delete, tab operations, theme changes, and 21 total actions)
- **Statistics reset**: Added reset button on statistics page to initialize all counts
- **Persistence**: Records are stored in the SQLite `ActionStats` table, preserving counts across app restarts

### Fixed
- **Statistics page**: Fixed to always display all 21 actions including unused ones (Count=0)
- **Statistics page UI**: Unified to index page-style Grid table design (Border container, header row, separators)
- **Statistics counting**: Fixed issue where `File.Move` was not recorded. Improved so that move operations during D&D/paste are correctly recorded as `File.Move` and copy operations as `File.Copy`. `DragDrop.Drop` is now separated as a record of the D&D operation itself
- **Statistics real-time update**: Improved so usage counts on the statistics page update immediately when operations are performed (no restart required)

### Changed
- **Statistics table**: Expanded to full display width and added "Count Trigger" column (3-column layout: Feature, Count Trigger, Usage Count)

## [0.23.0] - 2026-03-07 : GitHub API-based auto-update feature

### Added
- **Auto-update**: Added `UpdateService` that automatically detects new versions from the GitHub Releases API, downloads ZIP, overwrites via batch script, and restarts fully automatically
- **Auto-update settings**: Added "Enable auto-update" checkbox and "Check for updates" button to the About page
- **Update apply UI**: Displays "Restart to apply" button after download completes for one-click update application
- **Periodic check**: Initial check 30 seconds after startup, then background checks every 4 hours
- **GlowBar progress**: Real-time progress display via GlowBar during download
- **`--updated` argument**: Displays update completion via toast notification when restarting after update application
- **Settings persistence**: Saves `AutoUpdate` / `LastUpdateCheck` / `SkippedVersion` to settings.json
- **Release script**: `scripts/pack.ps1` for automatic release ZIP creation

## [0.22.1] - 2026-03-07 : EULA consent screen, code signing foundation, About version dynamic display

### Added
- **EULA**: Added Japanese End User License Agreement (`EULA.md`)
- **EULA dialog**: Displays EULA consent screen on first launch (and version updates). App exits if user does not agree
- **Code signing**: Added PowerShell script (`scripts/sign.ps1`) for creating self-signed certificates, signing EXE, and verification
- **csproj**: Added EULA.md distribution settings and commented signing target template

### Changed
- **About page**: Changed version display from hardcoded to binding to `MainViewModel.AppVersion`

### Fixed
- **About page**: Fixed issue where version number remained at `0.17.0` without being updated

## [0.22.0] - 2026-03-06 : Theme color specification refinement - Converting hardcoded colors to DynamicResource

### Added
- **Theme system**: Added 12 new theme color keys (PopupBackground/Text/Hover, FilterActiveIndicator, FilterChipBackground/Border, FilterToggleCheckedBackground, Success, PreviewPanelBorder, PreviewPdfBackground, IndexStatusNormal/Warm)
- **All 20 theme JSONs**: Added values optimized per theme for the 12 new keys

### Changed
- **TabContentControl.xaml**: Replaced approximately 40 hardcoded colors in filter popup, scope, size, and date panels with DynamicResource
- **MainWindow.xaml**: Converted approximately 25 locations in Quick Preview, status bar, telemetry, and index rows to DynamicResource
- **FilePaneControl.xaml**: Converted 8 locations in tab list popup and close button to DynamicResource
- **RenameDialog**: Converted approximately 12 locations across the entire dialog (XAML + code-behind) to DynamicResource
- **ZenithDialog**: Changed static frozen brushes to dynamic resource references (theme-linked icon colors)
- **ControlDeckView.xaml**: Converted 4 locations including glow DropShadowEffect, error display, and success icon to DynamicResource
- **ProjectSetsView.xaml**: Converted 5 locations including footer button text and hover background to DynamicResource
- **MainWindow.xaml.cs**: Changed 2 locations (drop highlight, PDF page count text) to resource references
- **DragAdorner.cs**: Changed border color to BorderBrush resource reference

### Fixed
- **Visibility**: Fixed issue where filter popup black text blended into background on dark themes and was unreadable
- **Visibility**: Fixed issue where Quick Preview panel filename and supplementary text were invisible on non-light themes
- **Visibility**: Fixed issue where rename dialog and ZenithDialog text colors did not update on theme switch

## [0.21.4] - 2026-03-06 : Startup stability and UI responsiveness improvements

### Changed
- **Startup**: Made `OnStartup` async, eliminating UI thread blocking from `GetAwaiter().GetResult()`. Changed theme settings extraction to complete in-memory (removed sync File I/O from `ReadThemeSettingsFromSettings`)
- **Search results**: Added `SilentObservableCollection.AddRange`, significantly reducing CollectionChanged events for batch addition of search results (500 items: 500 events to 10)
- **Search results**: Cached `FilteredSearchResultCount`, eliminating O(n) traversal from `Cast<object>().Count()` on every call
- **Tab switching**: Consolidated `FilePaneViewModel.NotifyAllPropertiesChanged` to a single `OnPropertyChanged(string.Empty)` call (8 to 1)
- **Layout**: Removed constant `LayoutUpdated` subscription, replaced with `DataContextChanged` (eliminated unnecessary continuous `UpdateColumnWidths` firing)
- **Key bindings**: Replaced `Dispatcher.Invoke` (blocking) with `Dispatcher.InvokeAsync` (non-blocking) in MainWindow and TabContentControl
- **Icon loading**: Changed `DispatcherPriority.Normal` to `Background` to prioritize input operations. Removed unnecessary `Task.Delay(30)`
- **Breadcrumbs**: Made `Typeface` instance a static cache, eliminating re-creation for each width estimation

### Fixed
- **File deletion**: Pre-acquired HWND on UI thread in `DeleteItems`, eliminating `Dispatcher.Invoke` blocking inside `Task.Run`
- **Index**: Fixed bug where `ConfigureIndexUpdate(null, ...)` 2 seconds after startup would overwrite correct settings and corrupt the index (removed duplicate call)

## [0.21.3] - 2026-03-06 : Resource leak fixes and shutdown task management improvements

### Fixed
- **Stability**: Implemented IDisposable on ShellThumbnailService to ensure STA thread and BlockingCollection are properly released at app exit
- **Stability**: Organized App_Exit shutdown order and added ShellThumbnailService Dispose (ensuring COM resource cleanup)
- **Stability**: Fixed issue where `_globalIndexingCts` was not being Cancel/Disposed in IndexService Dispose

## [0.21.2] - 2026-03-06 : 7-zip context menu fix and internal refactoring

### Fixed
- **Context menu**: Fixed issue where clicking 7-zip and other shell extension menu items did not execute (Vanara's `CMINVOKECOMMANDINFOEX.lpVerbW` is String type, so `SafeResourceId` was being marshalled as an invalid pointer instead of MAKEINTRESOURCE. Removed `CMIC_MASK_UNICODE` and changed to use only `lpVerb` (ResourceId type))
- **Context menu**: Fixed bug where `GetMenuItemText`'s `MIIM_STRING` constant was `0x80` (MIIM_BITMAP). This caused garbled menu item text and prevented the delete detection fallback from working

### Fixed
- **Search bar**: Fixed issue where filter buttons compressed the search keyword input area when pane width is narrow (set `MinWidth` on text input column, prioritizing keyword display)
- **Search history**: Fixed issue where search conditions (preset, size, date) compressed keyword display when popup width is narrow (set `MinWidth` on keyword column and `MaxWidth` on condition column. Changed condition display from StackPanel to TextBlock+Run, enabling `TextTrimming`)

### Changed
- **ShellContextMenu refactoring**: Consolidated duplicate GetCommandString patterns into `TryGetCommandVerb`/`GetCommandStringCore`, centralized delete detection into `IsDeleteCommand`, made `GetMenuItemText` recursive (hardcoded 3 levels to depth-limited recursion), consolidated MIIM constants into `NativeMethods` shared with `CloudShellMenuService`, removed dead code

## [0.21.1] - 2026-03-06 : Global hotkey customization support

### Changed
- **Shortcuts**: Improved so that changes to the "Focus active pane" shortcut are also reflected in the global hotkey (tray restore)

### Fixed
- **Tray restore**: Fixed issue where window was not re-displayed from tray via global hotkey (`Show()` was not being called after `Hide()`)

## [0.21.0] - 2026-03-06 : Fundamental fix for duplicate search notifications

### Fixed
- **Notifications**: Changed NotificationService to immediate overwrite mode, fundamentally fixing duplicate notification display (removed pending mode, added same-message suppression + timer reset for immediate replacement)
- **Search notifications**: Fixed issue where GlowBar status text and notification messages were displayed simultaneously during search (removed GlowBar text display, unified to progress bar only, made notification area independent from GlowBar state, added timer reset for same-message notifications, fixed HideStatusAfterDelayAsync race condition)

## [0.20.9] - 2026-03-05 : Suppressed duplicate status bar notifications

### Fixed
- **Notifications**: Fixed issue where identical messages were displayed consecutively in the status bar (suppressed same message for both currently displayed and pending notifications)

## [0.20.8] - 2026-03-05 : Settings card name clarification

### Changed
- **Settings screen**: Changed "Display" card name in basic settings page to "File Display" to clearly distinguish from the Display page

## [0.20.7] - 2026-03-05 : Notification settings integrated into Display page

### Changed
- **Settings screen**: Moved "Notification display duration" from basic settings page to the Display page, consolidated into a "Notifications" card with "Startup notifications"

## [0.20.6] - 2026-03-05 : Ctrl+Exit bypasses resident mode

### Added
- **Resident mode instant exit**: Holding Ctrl while pressing Alt+F4 or the close button now immediately exits the app even when resident mode is enabled, instead of hiding to the tray

## [0.20.5] - 2026-03-05 : Index schedule execution bug fix

### Fixed
- **Index schedule**: Fixed bug where per-item schedule settings (day of week, time) were actually ignored (`itemSettings` was not being passed to `ConfigureIndexUpdate`)

## [0.20.4] - 2026-03-05 : Breadcrumb display bug fix

### Fixed
- **Breadcrumbs**: Fixed bug where folder names were not displayed (XAML binding was referencing a non-existent property)

## [0.20.3] - 2026-03-05 : Index per-item settings summary table

### Added
- **Index per-item settings summary table**: Added a settings overview table at the bottom of the Control Deck > Index settings page for registered items. Provides an overview of folder name, lock status, schedule, and update method
- Double-click a row or click the gear button to directly open the existing detailed settings popup, with immediate reflection on OK

## [0.20.2] - 2026-03-05 : Index per-item detailed settings popup

### Added
- **Index per-item detailed settings popup**: Displays a dedicated dialog from right-click "Detailed Settings...". Manage schedule (day of week, time), lock (archive), and update method (global/incremental/full rebuild) in one place
- **Per-item update mode (IndexItemUpdateMode)**: Select incremental update or full rebuild per item. When unset, follows global settings
- **IndexScheduleDto to IndexItemSettingsDto migration**: Automatic conversion from legacy schedule settings to new detailed settings

### Changed
- **Context menu simplification**: Removed schedule settings submenu (multi-level menu with days and times) and consolidated into a single "Detailed Settings..." item. Improved usability
- **IndexService**: Checks Per-Item UpdateMode during periodic updates, routing FullRebuild-specified items to delete+re-scan and Incremental items to differential updates

## [0.20.1] - 2026-03-05 : Index per-item schedule settings UI added

### Added
- **Index per-item schedule settings UI**: Added "Schedule Settings" submenu to the right-click menu for index target folders. Day of week checks (Mon-Sun), time selection (8 steps at 3-hour intervals), and reset can be operated from the GUI
- **Schedule settings indicator**: Displays calendar icon on items with custom schedules. Schedule details can be confirmed via ToolTip

## [0.20.0] - 2026-03-05 : Settings options expansion (4 basic settings + 2 index settings)

### Added
- **Title bar path display toggle**: Choose whether to display folder path in the title bar under Basic Settings > Display (default: ON)
- **File extension display toggle**: Toggle file name extension visibility under Basic Settings > Display (default: ON). Full name displayed in ToolTip
- **Hidden files display toggle**: Toggle visibility of Windows hidden attribute files and folders under Basic Settings > Display (default: OFF)
- **Resident mode (system tray)**: Added resident mode under Basic Settings > Operations where the close button minimizes to tray (default: OFF). Double-click tray icon to restore, right-click "Exit" for full exit
- **Index per-item schedule**: Individually set update days and times for each index target folder. Folders without settings follow the global update interval
- **CPU idle-only index updates**: Added option under Index Settings > Performance and Load to only update indexes when CPU usage is below threshold (threshold: selectable from 10%/20%/30%)

## [0.19.6] - 2026-03-05 : Title bar text color theme integration

### Changed
- **Title bar text and button colors now follow theme**: Added `TitleBarTextColor`, enabling automatic switching of title bar text and window control button (minimize, maximize, close) colors per theme. Set individually optimized colors for all 20 themes

### Fixed
- **Fixed title bar text color not updating on theme switch**: `TitleBarTextColor` property was not defined in `ThemeBaseColors`, causing the value to be ignored during JSON deserialization

## [0.19.5] - 2026-03-05 : Internal refactoring and performance improvements

### Changed
- **ShellThumbnailService**: Changed LRU cache from `List<string>` to `LinkedList` + `Dictionary`, improving cache operations from O(n) to O(1). Extracted validation and cache reference duplicate code into `TryGetCachedOrValidate`
- **ThemeService**: Cached `MergeCategory()` reflection results in `ConcurrentDictionary`, eliminating duplicate reflection during theme switching
- **DirectoryTreeViewModel**: Changed `LoadDrivesAsync()` blocking `isReadyTask.Wait(500)` to `Task.WhenAny` + `Task.Delay` pattern, checking all drives in parallel
- **DatabaseService**: Inlined `CleanupSearchHistoryAsync` / `CleanupRenameHistoryAsync` 3-stage allocation `.ConvertAll().Cast<object>().ToArray()` to `.Select(r => (object)r.Key).ToArray()`
- **Fire-and-forget**: Introduced `TaskHelper.FireAndForget` extension method, replacing `_ = SomeAsync()` patterns (AppSettingsViewModel 3 locations, MainViewModel 4 locations) with exception-logged versions
- **TabItemViewModel**: Modernized 2 `ContinueWith(OnlyOnFaulted)` patterns to async/await + `FireAndForget`

## [0.19.4] - 2026-03-05 : Backup list pagination

### Added
- **Backup list pagination**: When backup count exceeds 20, displays in pages of 20. Page number bar in `< 1, 2, ..., 46, 47 >` format allows jumping to any page. Left/right buttons for previous/next page navigation. Bar hidden when 20 or fewer items

### Fixed
- **Reduced UI freeze at startup**: Optimized theme scanning and theme JSON loading to run in parallel on background threads, concurrent with resource dictionary XAML parsing. Also made backup list loading async

## [0.19.3] - 2026-03-05 : Backup list inline display and description editing

### Added
- **Inline backup list in Settings > Recovery**: Removed BackupListDialog, completing backup list display, restore, and lock toggle within the settings screen. Each row displays date/time, lock status, change description, and edit/restore buttons
- **Change description editing**: Backup change descriptions can now be edited inline. Click pencil button, enter text, Enter to confirm, Escape to cancel. Editing disabled when locked

### Changed
- **Removed BackupListDialog**: Removed separate window backup list display, integrated inline within the settings screen Backup category

## [0.19.2] - 2026-03-05 : Shortcut key descriptions added

### Added
- **Added overview descriptions to shortcut key settings screen**: Displays feature description and recommended key settings below each action. Added Description property to KeyBindingDefinition with Japanese descriptions for all 25 actions

## [0.19.1] - 2026-03-05 : Shortcut key screen fixes

### Fixed
- **Fixed app crash when opening shortcut key settings screen**: `NonEmptyStringToVisibilityConverter` was defined only in `MainWindow.xaml` local resources and was outside the reference scope from `ControlDeckView.xaml`, causing `StaticResource` resolution failure. Added converter to `ControlDeckView.xaml`'s `UserControl.Resources`
- **Fixed individual key binding reset button not working**: UI reload (`LoadKeyBindings`) was not called after `ResetKeyBinding` command execution, so the display was not updated

## [0.19.0] - 2026-03-05 : Shortcut key customization

### Added
- **Settings > Shortcut Keys (new category)**: Added keyboard shortcut customization feature. All 25 actions (global/sidebar/window/file list) key bindings can be changed by click then key input
- **HotkeyRecorderControl**: Custom control that enters recording mode on click and captures arbitrary key + modifiers
- **KeyBindingService**: Central registry for key bindings. Provides default value management, conflict detection, and custom binding persistence
- **Dynamic tooltips**: Sidebar toggle buttons and toolbar button shortcut displays dynamically update in sync with key binding settings

### Changed
- **Dynamic InputBindings construction**: Migrated MainWindow InputBindings from XAML hardcoded to code-behind dynamic construction, enabling immediate reflection of key binding changes
- **Unified key detection**: Unified hardcoded key detection in TabContentControl / MainWindow PreviewKeyDown to `App.KeyBindings.Matches()`
- **Removed shortcut notation from tooltips**: Removed hardcoded shortcut notation from FilePaneControl (tab add/close) and ControlDeckView (close) tooltips
- **Removed shortcut display from WelcomeWindow**: Removed 6 shortcut TextBlocks from the first-time tutorial (since shortcuts are now customizable)
- **MANUAL.md**: Added "Standard key assignments" annotation to shortcut list

## [0.18.0] - 2026-03-05 : Internal infrastructure improvements

### Added
- **Internal infrastructure improvements**: Organized internal app management features
- **Settings page update**: Added new information display section to settings screen
- **Working set tooltip**: Hovering over saved sets shows a popup with full paths of all A/B pane tabs
- **Theme tile selection glow extension**: Changed to show the same selection glow (AccentBrush border) on the applied theme tile in random mode and random draw as in preset mode

## [0.17.1] - 2026-03-05 : Deferred access support for cloud drive favorites

### Fixed
- **Fixed issue where BOX Drive / OneDrive cloud drive favorites showed "Path not found" on first click**: Added support for on-demand hydration delay of cloud paths (Box / SPO), triggering by accessing parent directory then retrying up to 2 times

## [0.17.0] - 2026-03-05 : Settings page expansion (new Display category, General/Search settings added)

### Added
- **Settings > Display > List animation**: Added ON/OFF for file list hover effects (icon view overlay fade, favorites button circle background, search icon scale)
- **Settings > Display > Startup notification**: Moved startup theme toast ON/OFF setting from theme page to Display page, added detailed description
- **Settings > New category added**: Added new category page to settings navigation
- **Settings > About (new category)**: Added page displaying app overview, version, and author information
- **Settings > Display (new category)**: Added option to select file list row height from Compact (24px) / Standard (32px) / Relaxed (40px). Settings take effect immediately and persist across restarts
- **Settings > Display > Micro animations**: Added direct toggle for hover fade, tab switch transition, etc. from the settings page
- **Settings > Basic Settings > Operations**: Added toggles for single-click folder opening mode, file deletion confirmation dialog, and startup tab restoration
- **Settings > Basic Settings > Notification display duration**: Added option to select toast notification display duration from Short (1.5s) / Standard (3s) / Long (5s)
- **Settings > Display > New tab default display**: Added settings for default folder-first display, sort property, and sort direction when creating new tabs

### Changed
- **Settings > Display > New tab default display**: Moved from Search page to Display page, added description "Applied to new tabs opened via Ctrl+T or by specifying a path"
- **Settings > Basic Settings > Notification display duration**: Added description text "Sets how long operation results such as file copy, move, delete completion, and theme changes are displayed in the status bar"
- **Settings > Basic Settings > Operations**: Added supplementary descriptions below each checkbox (single-click, delete confirmation, tab restoration)
- **Settings > Display > File list row height**: Added description text "Adjusts the height of each row in the file list. Compact shows more files at once, while Relaxed makes clicking easier"
- **Theme page header simplified**: Removed "Show notifications" checkbox from theme section header, moved to Settings > Display as a dedicated card
- **Settings navigation order changed**: Reorganized to Basic Settings, Display, Theme, Search, Index, Recovery, About with separators added
- `WindowSettings.cs`: Added `ListRowHeight`, `SingleClickOpenFolder`, `ConfirmDelete`, `RestoreTabsOnStartup`, `NotificationDurationMs`, `DefaultGroupFoldersFirst`, `DefaultSortProperty`, `DefaultSortDirection` fields. Set up static accessors, runtime setters, and debounced save helpers for each
- `NotificationService.cs`: Changed `Notify` default display duration from fixed 3000ms to `WindowSettings.NotificationDurationMsValue`
- `TabItemViewModel.cs`: Changed `_isGroupFoldersFirst` / `_sortProperty` / `_sortDirection` field initial values to be retrieved from global settings. Immediately reflected in new tab defaults
- `MainViewModel.cs`: Changed `InitializeAsync` to start with home folder only when `RestoreTabsOnStartup = false`
- `TabContentControl.xaml.cs`: In single-click mode, navigate folders on single click and prevent duplicate execution on double-click

### Fixed
- **Fixed "New tab default display" sort direction setting not being applied**: `ConverterParameter` was passing strings "Ascending"/"Descending", causing conversion to `ListSortDirection` enum to fail. Fixed to pass enum values directly using `{x:Static}`
- **Fixed panes being empty after startup with tab restoration OFF**: `PaneSettings` `TabPaths` was an empty list when `RestoreTabsOnStartup = false`, causing `RestoreTabsAsync` to early return. Fixed by applying `EnsureTabPaths` to reliably set home folder (desktop/downloads when unset)
- **Fixed tab indicator slide not stopping when micro animations OFF**: `TabIndicatorSlideBehavior` was not referencing `MicroAnimationsEnabled`, causing the indicator to animate regardless of settings
- **Fixed D&D insertion marker fade not stopping when micro animations OFF**: `TabControlDragDropBehavior.FadeIn()` was not referencing `MicroAnimationsEnabled`, causing fade-in regardless of settings
- **Removed settings page category switch animation**: Removed `AnimateCategorySwitch()` (fade-out 80ms + fade-in 120ms) from `ControlDeckView.xaml.cs`, changed to instant switching
- **Fixed file list row height setting not being applied**: Inline `ItemContainerStyle` in `FileListView` was overriding the implicit style from `AppResources.xaml`, preventing `MinHeight` from being applied. Added `<Setter Property="MinHeight" Value="{DynamicResource ListRowHeight}"/>` to the inline style
- **Fixed v0.17.0 added settings being reset on app exit**: The exit-time save object in `MainWindow_Closing` did not include `EnableMicroAnimations` / `ListRowHeight` / `SingleClickOpenFolder` / `ConfirmDelete` / `RestoreTabsOnStartup` / `NotificationDurationMs` / `DefaultGroupFoldersFirst` / `DefaultSortProperty` / `DefaultSortDirection`, causing them to be overwritten with default values on every exit

## [0.16.9] - 2026-03-04 : Fixed UI theme non-tracking due to undefined WPF-UI implicit styles

### Added
- **Theme switch transition animation**: Theme changes now smoothly transition with a background color dissolve overlay (fade-in 130ms, fade-out 250ms)

### Fixed
- **Fixed history view row backgrounds not following theme, appearing gray**: `AppResources.xaml` imports `<ui:ControlsDictionary />` but the `Expander` implicit style was undefined, so WPF-UI's gray card background was being applied. Added custom `Expander` implicit style, overwriting the content area with a transparent template
- **Fixed "Backup Now" and "Restore..." buttons in App Settings > Recovery having different design from other buttons**: `Button` implicit style was undefined, so WPF-UI's Fluent accent style was being applied. Added named style `x:Key="TextButton"` to `AppResources.xaml` and applied to recovery buttons in `ControlDeckView.xaml`
- **Fixed A/B pane home path TextBox background color and border not following theme**: `TextBox` implicit style was undefined, so WPF-UI's TextBox style (ReadOnly state gray override, etc.) was being applied. Added custom `TextBox` implicit style to `AppResources.xaml` with a template referencing all colors via `DynamicResource`
  - `MainWindow.xaml`: Added `ThemeTransitionOverlay` (ZIndex=850)
  - `MainWindow.xaml.cs`: Implemented `AnimateThemeTransitionBeginAsync` / `AnimateThemeTransitionEnd`, wired as delegates to ViewModel
  - `AppSettingsViewModel.cs`: Added `ApplyThemeAnimatedAsync` helper. Changed `OnSelectedThemeNameChanged` and `DrawRandomThemeAsync` to use animated application. Continuous clicks apply immediately without animation

## [0.16.8] - 2026-03-04 : Post-startup freeze improvement (async breadcrumbs)

### Fixed
- **Improved brief freeze after startup**: During tab restoration (`RestoreTabsAsync`), `UpdatePathSegments()` was executing ShellItem COM calls synchronously on the UI thread within the constructor, causing blocking proportional to tab count x path depth (e.g., 4 tabs x depth 4 = 16 COM calls)
  - `TabItemViewModel.cs`: Split `UpdatePathSegments()` into 3 methods
    - `UpdatePathSegmentsAsync()` - Orchestrator that calls core via `Task.Run` and reflects on UI thread
    - `ComputePathSegmentsCore(string path)` - Pure computation including ShellItem COM calls (background, thread-safe)
    - `ComputePathSegmentsFallback(string path)` - Simple string split fallback on exception
  - Changed constructor and post-navigation calls to `_ = UpdatePathSegmentsAsync()`
  - Breadcrumb display updates after `await` completes, but no visual delay since background processing is fast
  - Discards results if another navigation occurs during path change (`CurrentPath != pathAtStart` check)

## [0.16.7] - 2026-03-04 : UI freeze improvement after file operations

### Fixed
- **Improved brief UI freeze after file operations and auto-refresh**: `MergeItems` and `ApplySort` were executing consecutively within the Dispatcher block of `LoadDirectoryAsync`, causing 30-200ms UI thread blocking for folders with 500-2000 items
  - `TabItemViewModel.cs`: Split `MergeItems` (list update) and `ApplySort` (sorting) into separate `Dispatcher.InvokeAsync(Background)` calls, ensuring a gap between them for processing keyboard and mouse input
  - `AppSettingsViewModel.cs`: Changed `DrawRandomTheme()` to use cached `AvailableThemes` instead of calling `ScanThemes()` (disk I/O) every time

## [0.16.6] - 2026-03-04 : Fixed invisible text and icons in home settings card

### Fixed
- **Fixed text and icons being invisible in A pane and B pane home settings cards**: On dark themes (blueprint, etc.), when `InputBackgroundBrush` matching the card background was used as TextBox background, text became invisible due to unspecified Foreground
  - `ControlDeckView.xaml`: Added `Foreground="{DynamicResource TextBrush}"` to A pane and B pane home path TextBoxes
  - `AppResources.xaml`: Added `Foreground="{DynamicResource TextBrush}"` to `IconButton` style (unified with `IconToggleButton`). Resolved icons being invisible on dark cards

## [0.16.5] - 2026-03-04 : All shortcuts disabled bug fix

### Fixed
- **Fixed all shortcut keys becoming disabled when closing ControlDeck**: When the ControlDeck (settings panel) was closed via Esc key, etc., focus held by elements within ControlDeckView (RadioButton, etc.) was lost when the overlay became `Collapsed`, leaving `Keyboard.FocusedElement` as `null`. In this state, WPF key event routing did not function and all shortcuts were disabled
  - Fixed by explicitly restoring focus to the active pane's file list after `CloseControlDeckAsync()` completes
  - Added `MainWindow.Activated` handler as a safety net to auto-restore focus to the pane when the window is activated and no focus exists within the pane

## [0.16.4] - 2026-03-04 : Context menu white background fundamental fix

### Fixed
- **Fundamentally fixed context menu white background issue**: `Style TargetType="ContextMenu"` defined in `App.xaml` was using hardcoded colors (`#FEFEFE` / `#F5F5F0`), so theme changes were not reflected and the background was always white
  - Changed all colors in the `App.xaml` `ContextMenu` style template to `{DynamicResource}` references (`ContextMenuBorderBrush` / `ContextMenuOuterBackgroundBrush` / `ContextMenuBackgroundBrush`)
  - Deleted the same-named style in `AppResources.xaml` (dead code hidden by `App.xaml`)

## [0.16.3] - 2026-03-04 : Context menu and manual page theme compatibility fixes

### Fixed
- **Fixed manual window not supporting themes**: Unified hardcoded colors to theme-compatible DynamicResource
  - `ManualWindow.xaml`: Changed `Background="#F5F1E3"` to `{DynamicResource BackgroundBrush}`, also changed header and tab segment backgrounds to theme brushes
  - `DocViewerControl.xaml`: Changed all `CardBackgroundBrush` / `CardHoverBrush` / `AcrylicSidebarBrush` / `AcrylicBackgroundBrush` to `{DynamicResource}` (instant update on theme change)
  - `MarkdownStyles.xaml`: Unified hardcoded colors for table headers, cell borders, blockquotes, code spans, and heading 2 backgrounds to `{DynamicResource}`. Replaced gradient brushes with theme's `SelectionBrush` / `ListHoverBrush` / `BorderBrush` / `InputBackgroundBrush`
- **Fixed manual window not supporting themes**: Unified hardcoded colors to theme-compatible DynamicResource
  - `ManualWindow.xaml`: Changed `Background="#F5F1E3"` to `{DynamicResource BackgroundBrush}`, also changed header and tab segment backgrounds to theme brushes
  - `DocViewerControl.xaml`: Changed all `CardBackgroundBrush` / `CardHoverBrush` / `AcrylicSidebarBrush` / `AcrylicBackgroundBrush` to `{DynamicResource}` (instant update on theme change)
  - `MarkdownStyles.xaml`: Unified hardcoded colors for table headers, cell borders, blockquotes, code spans, and heading 2 backgrounds to `{DynamicResource}`. Replaced gradient brushes with theme's `SelectionBrush` / `ListHoverBrush` / `BorderBrush` / `InputBackgroundBrush`

### Changed
- **blueprint theme**: Changed theme Author from `KAKASAKA` to `K.AKASAKA`

## [0.16.2] - 2026-03-04 : Changed startup toast position to corner notification style

### Removed
- **Removed Control Deck per-pane theme "future implementation" placeholder**: Removed legacy preview label since per-pane theme assignment was implemented in v0.16.0

### Changed
- **Changed startup theme toast to bottom-right corner notification**: Moved from screen center to bottom-right, improving placement to not obstruct operations
  - Added slide-in animation (bottom to top 14px, `QuadraticEase`, 0.3s)
  - Shortened fade-out from 0.75s to 0.5s
  - Made size compact (`MaxWidth 640 to 300`, padding `22,14 to 16,12`, font size 14 to 13)
  - Changed from `Grid.RowSpan="3"` center placement to `Grid.Row="1"` bottom-right `Margin="0,0,20,16"`
  - Changed text from `TextWrapping="Wrap"` to `NoWrap` (single line is natural for corner notifications)

## [0.16.1] - 2026-03-04 : Startup toast notification improvements and ON/OFF setting added

### Added
- **"Show notifications" toggle**: Added small checkbox at the right end of the Control Deck theme section header. Instantly toggles and saves visibility of startup theme toast
  - Added `ShowStartupToast` field to `settings.json` (default `true`)
  - Added `WindowSettings.SaveShowStartupToastOnly` debounced save method

### Changed
- **Per-pane application mode startup toast**: Changed to format listing all pane themes
  - Example: `Applied Themes` / `Navi: Standard  |  A: Midnight  |  B: Crimson`
  - Personalize and auto-select modes continue to show `Applied Theme` / `[theme name]`
  - Added `label` argument to `NotificationService.ShowThemeToast` for dynamic header text switching
- **Toast Border width limit**: Set `MaxWidth="640"` and `Margin="20,0"` to prevent overflow with long pane name text
- **Toast label binding**: Changed `Text="Applied Theme"` to `{Binding Notification.ThemeToastLabel}`

## [0.16.0] - 2026-03-04 : Per-pane theme application

### Added
- **Per-pane theme application**: In the Control Deck "Per-pane application" mode, different themes can now be independently set for the nav pane, A pane, and B pane
  - Theme colors are written to each pane's `ResourceDictionary`, automatically prioritizing pane-specific themes via WPF's DynamicResource resolution mechanism
  - Selected themes are saved in `settings.json` as `NavPaneThemeName` / `APaneThemeName` / `BPaneThemeName` and restored after restart
  - Switching to "Personalize" or "Auto-select mode" resets all panes and unifies to the global theme
- **`WindowSettings` pane theme fields added**: Added 3 fields `NavPaneThemeName`, `APaneThemeName`, `BPaneThemeName` and `SavePaneThemeNames` debounced save method
- **`AppSettingsViewModel` pane ResourceDictionary management**: Added `RegisterPaneResources`, `LoadPaneThemeNames`, `ClearPaneResources` methods
- **`App.StartupPaneThemes`**: Added pane theme name reading to startup fast parser, exposed as `StartupPaneThemes` property

## [0.15.2] - 2026-03-03 : Instant random draw button added and auto-select mode card UI polish

### Added
- **"Draw Now" button**: Added instant random draw button inside the Control Deck "Auto-select mode" card. Randomly selects and live-applies a theme according to current draw settings (all themes / category-specified) without waiting for startup
  - Implemented as `DrawRandomThemeCommand` (CanExecute: `IsRandomModeActive`)
  - AccentBrush border style with hover/press visual feedback
  - `Visibility="Visible"` only when auto-select mode is active, `Visibility="Collapsed"` when inactive
  - AccentBrush filled background + white text, icon, scale animation

### Changed
- **Changed "Draw Now" button to AccentBrush filled action style**: Differentiated role from settings RadioButton
  - AccentBrush background + white text/icon to stand out as an "execution switch"
  - Hover: Scale 1.0 to 1.04 animation (QuadraticEase) + white glow overlay (Opacity 0.15)
  - Press: Scale 0.96 push-in feel, returns to 1.04 on release for bounce feel
- **Unified ThemeRandomizeDeck RadioButton with per-pane application completely**: Removed Opacity trigger, changed to `IsEnabled="{Binding AppSettings.IsRandomModeActive}"`. Both `OptionRadioButton` style and control method are identical to the per-pane application section
- **Fixed "Draw Now" button hover detection for full area**: Replaced `EventTrigger RoutedEvent="MouseEnter/Leave"` with `Trigger Property="IsMouseOver"` + `EnterActions/ExitActions`. Accurately detects hover across the entire Button area even when child elements capture events
- **Fixed hover overlay to cover full area including Padding region**: Changed ControlTemplate root from `Border (Padding="0,10")` to `Grid`. Placed both AccentBrush Border and HoverGlow Border directly under Grid, fundamentally resolving "border" artifacts from Padding. ContentPresenter Padding equivalently reproduced with `Margin="{TemplateBinding Padding}"`
- **Changed press effect to animation-conflict-free approach**: Replaced `EventTrigger PreviewMouseLeftButtonDown/Up` with `Trigger Property="IsPressed"` Setter (`Opacity=0.68`) for simple push-in feel. Eliminated conflicts with IsMouseOver animations
- **Increased top Margin from 15px to 22px**: Adjusted for more spacious layout
- **Moved "Draw Now" button Margin to button itself**: Set `Margin="0,22,0,0"` on the button itself. Improved structure so no margin remains when `Visibility="Collapsed"`

## [0.15.1] - 2026-03-03 : Toast UI position fix and top whitespace elimination

### Fixed
- **Fixed toast entering Grid Row 0 (TitleBar) causing top whitespace**: Added `Grid.RowSpan="3"` for overlay positioning. Does not affect layout
- **Changed toast display position to center**: Changed to `HorizontalAlignment="Center" VerticalAlignment="Center"`. Also enlarged icon and font size for center layout

## [0.15.0] - 2026-03-03 : Theme persistence, random selection engine, startup toast notification

### Added
- **Theme mode persistence**: Added 4 fields to `settings.json`: `CurrentThemeMode`, `AutoSelectSubMode`, `SelectedCategory`, `SavedThemeName`. "Auto-select mode", "category selection", and "preset selected theme" are fully restored after restart
  - Included 4 fields in `MainWindow_Closing` full save to prevent overwrite with default values
  - Retrieved and cached `App.StartupSavedThemeName` from `ReadThemeSettingsFromSettings`, initialized `_savedThemeNameCache` in `LoadThemeSettings`
  - Migration compatibility: Falls back to `ThemeName` when `SavedThemeName` is not recorded in legacy settings.json
- **Random selection engine**: When `CurrentThemeMode == "Auto"` at startup, randomly selects from pool excluding previously applied theme via `PickRandomTheme`. When `AutoSelectSubMode == "Category"`, narrows selection to specified category
- **Startup theme toast notification**: Displays "Applied Theme: [theme name]" toast at bottom-right corner 900ms after window render completes. Fades in over 0.35s, fades out over 0.75s after 2.5s

### Changed
- **Category description MaxWidth adjustment**: Changed `ThemeCategoryDesc` TextBlock MaxWidth from 250 to 280, expanded right Margin to 12 for stable line wrapping

## [0.14.14] - 2026-03-03 : Category random mode and category selection guidance indicator added
### Added
- **Category selection guidance anchor indicator**: In "Random from current category" mode when no category is selected, displays a "Click to select" badge (Hand icon + text) with pulse animation on each category group header. Hidden once any category is selected
  - **`IsAwaitingCategorySelection` property**: Computed from `IsRandomCategoryModeActive && string.IsNullOrEmpty(SelectedRandomCategory)`. Automatically updated when `ThemeRandomizeMode`, `ActiveThemeMode`, or `SelectedRandomCategory` changes
  - **XAML anchor Badge**: Opacity pulse animation (0.4 to 1.0, 0.85s, AutoReverse infinite loop) using `DataTrigger.EnterActions/ExitActions` + `BeginStoryboard/StopStoryboard`. Uses `Visibility="Collapsed"` when hidden to avoid occupying layout space

## [0.14.13] - 2026-03-03 : Fix for auto-selection mode RadioButton direct selection bug

### Fixed
- **"Random from current category" direct selection bug**: Fixed an issue where clicking the "Random from current category" RadioButton while in another mode always switched to "Random from all themes" instead
  - **Root cause**: The RadioButton StackPanel's `IsEnabled="{Binding AppSettings.IsRandomModeActive}"` disabled RadioButtons when in other modes. Disabled controls don't process mouse events, so clicks passed through to the parent Border's `MouseBinding`, firing `SetThemeModeCommand(Random)`. Inside `OnActiveThemeModeChanged`, `ThemeRandomizeMode==Disabled` was forcibly overwritten to `AllThemes`
  - **XAML fix**: Removed the `IsEnabled` attribute and replaced it with a `<Style>` + `DataTrigger` that switches to `Opacity="0.45"` for dimmed display. RadioButtons remain always clickable while appearing visually subdued when inactive
  - **ViewModel fix**: Added logic to `OnThemeRandomizeModeChanged` that automatically sets `ActiveThemeMode = Random` when `ThemeRandomizeMode` changes to a non-Disabled value while `ActiveThemeMode != Random`. This ensures mode switching completes with a single RadioButton click

## [0.14.12] - 2026-03-03 : Fundamental fix for active theme tile highlighting

### Fixed
- **Fundamental fix for active theme tile highlighting**: Removed the `MultiDataTrigger` that relied on `ListBoxItem.IsSelected`. Replaced with a `DataTrigger(MultiBinding)` using `IsCurrentPresetThemeConverter` (new `IMultiValueConverter`) for direct string comparison between `ThemeInfo.Name` and `AppSettings.SelectedThemeName` to determine the currently applied theme. AccentBrush thick border (2.5px) + SelectionBrush background is displayed immediately after settings panel launch (after `LoadTheme()` initialization)

### Added
- **`IsCurrentPresetThemeConverter`**: Added to `Converters.cs`. Receives `values[0]=ThemeInfo.Name`, `values[1]=SelectedThemeName`, `values[2]=IsAssignmentModeActive` and returns `true` only when in preset mode and the theme name matches. Returns `false` automatically during pane/random mode since `IsAssignmentModeActive=true`

## [0.14.11] - 2026-03-03 : Category selection UI enhancement, mode card border emphasis, signature improvement

### Changed
- **Enhanced category hover effect**: Added `DropShadowEffect` (BlurRadius=10, Opacity=0.28, SoftBlue) to hover in "Random from category" mode. Changed `BorderThickness` from 1.5 to 2 to visually clarify the clickable area
- **Enhanced selected category glow**: Set `DropShadowEffect` with BlurRadius=18, Opacity=0.52 for selected category. Stronger glow than hover to convey a "selected" feeling. DropShadowEffect is set directly from ControlTemplate trigger via WPF `Setter.Value`
- **Mode card selection border thickness enhancement**: Expanded the active `BorderThickness` of the Preset / Random / Pane cards from `"2"` to `"2.5"` for more reliable visual identification of the current active mode
- **Stricter active tile highlight conditions**: Changed the `ListBoxItem` selection state MultiDataTrigger condition from `IsRandomCategoryModeActive=False` to `IsAssignmentModeActive=False`. AccentBrush thick border (2.5px) + SelectionBrush background is shown only in preset mode, hidden during pane/random mode (since category border or pane selection is the primary focus)
- **Improved creator signature visibility**: Enlarged `Design by KAKASAKA` `FontSize` from `9` to `11`, increased `Opacity` from `0.45` to `0.55`, adjusted `Margin` from `0,3,0,0` to `0,4,0,0`

## [0.14.10] - 2026-03-03 : Category column structure stabilization and selection UI cleanup

### Changed
- **GroupItem Border made permanent**: Applied `Padding="16,12,16,16"` and `Margin="0,0,0,12"` to the category group border (CategoryGroupBorder) unconditionally without mode conditions. Set `BorderBrush="Transparent"` as default so the border remains invisible while maintaining consistent padding structure at all times
- **Simplified category border triggers**: Removed Padding, Margin, BorderThickness, and BorderBrush conditional changes from the IsRandomCategoryModeActive DataTrigger. Narrowed down to cursor change (`Cursor="Hand"`) only, keeping padding and borders stable at default values
- **Clarified selected category border**: Unified IsCategorySelected DataTrigger BorderThickness to 2 (from 2.5). Triggers only AccentBrush thick border + SelectionBrush background, eliminating double Margin changes
- **Removed HeaderTemplate outer margin**: Changed HeaderTemplate outer StackPanel `Margin="0,16,0,14"` to `Margin="0,0,0,0"`. Since the Border's permanent Padding handles outer spacing, this eliminates excessive vertical spacing from double addition
- **Set description TextBlock MaxWidth**: Explicitly set `MaxWidth="300"` to reliably fix wrap width within the permanently padded Border

## [0.14.9] - 2026-03-03 : Fundamental fix for category description text wrapping

### Fixed
- **Fundamental fix for category description TextWrapping**: Added `MaxWidth="460"` to the description TextBlock itself. Previously, only the parent StackPanel's `MaxWidth="620"` was set, but Japanese text (FontSize=11, approximately 11px/character) at maximum 55 characters fits within approximately 605px, so wrapping never occurred within 620px. By setting 460px on the TextBlock itself, the width is reliably clamped during both Measure and Arrange phases, ensuring all category descriptions (48-55 characters) always wrap to 2 lines

## [0.14.8] - 2026-03-03 : Category UI fixes and random mode tile behavior improvements

### Changed
- **Category header width limit**: Added `MaxWidth="620"` to the `GroupStyle.HeaderTemplate` outer `StackPanel`. Resolves the issue of description text expanding and pushing the layout wider
- **Category description margin adjustment**: Changed description TextBlock Margin from `0,5,0,0` to `0,6,0,8` to ensure spacing between the header row and tile groups
- **Suppressed tile selection state in category random mode**: Changed `ListBox.ItemContainerStyle` `IsSelected` trigger to `MultiDataTrigger` (IsSelected=True AND IsRandomCategoryModeActive=False). During "Random from current category" mode, clicking a tile no longer shows the individual blue border; only the category group border is emphasized
- **Creator signature style**: Added `FontWeight="Light"` for a thinner font. Fine-tuned `Opacity` from `0.5` to `0.45`
- **Updated Author in all theme JSONs**: Changed `"K.AKASAKA"` to `"KAKASAKA"` (20 themes)

## [0.14.7] - 2026-03-03 : Theme gallery category UI, description text, and credit display overhaul

### Added
- **Category container full-area click detection**: In category random mode, the entire category area including card gaps and padding is now clickable. Registered `SelectRandomCategoryCommand` via `Border.InputBindings` in the `GroupStyle.ContainerStyle` `ControlTemplate`
- **Category container hover effect**: `MultiDataTrigger` (IsRandomCategoryModeActive + IsMouseOver) changes to `ListHoverBrush` background + `AccentBrush` border on hover. Selected state (later-order DataTrigger) always takes priority

### Changed
- **Expanded category group border padding**: Increased mode-active Padding from `8,0` to `16`, providing more room between the border and theme cards. Changed CornerRadius from `6` to `8`. Increased Margin from `0,0,0,8` to `0,0,0,12`
- **Category random mode cursor**: Moved `Cursor="Hand"` into the mode DataTrigger, maintaining normal cursor outside the mode
- **`StackPanel Background="Transparent"`**: Added `Background="Transparent"` to the StackPanel inside the category container to reliably capture mouse events on padding areas
- **Deeper category descriptions**: Overhauled all category descriptions in `ThemeCategoryDescriptionConverter`. Changed to Japanese text that specifically and literarily expresses each category's world view, purpose, and atmosphere
- **Creator signature design overhaul**: Changed theme card author display to `{Binding Author, StringFormat='Design by {0}'}` format. Reduced font size from `10` to `9`, achieving a minimal and high-quality signature style with `Opacity="0.5"` + `Margin="0,3,0,0"`
- **Updated Author field in all theme JSONs**: Changed old author name to `"K.AKASAKA"` (20 themes)

## [0.14.6] - 2026-03-03 : Theme apply mode mutual exclusion and category selection UI

### Added
- **`ThemeApplyMode` enum**: Three values: `Preset / Random / Pane`. Used for mutual exclusion control of the 3 cards
- **`ActiveThemeMode` property**: Holds the theme apply mode. Automatically resets other mode internal states when switching
- **`IsRandomModeActive` / `IsRandomCategoryModeActive` properties**: Logical properties for auto-selection mode state. Used for XAML `IsEnabled` binding
- **`SelectedRandomCategory` property**: Holds the selected category name in category random mode
- **`SetThemeModeCommand`**: Command to switch `ActiveThemeMode` on card click (`RelayCommand<ThemeApplyMode>`)
- **`SelectRandomCategoryCommand`**: Command to set the target category on category header/theme tile click (`RelayCommand<string?>`)
- **`IsCategorySelectedConverter`**: `IMultiValueConverter` that receives category name, selected category, and mode active flag. Used in GroupItem DataTrigger
- **GroupStyle.ContainerStyle (category group border)**: Displays thin borders on all categories in category random mode. Selected category is highlighted with accent color thick border + SelectionBrush background
- **Category header click selection**: Added `MouseBinding` to GroupStyle.HeaderTemplate. Clicking a header sets that category as `SelectedRandomCategory`

### Changed
- **"Theme Apply Mode" 3-card mutual exclusion**: Made each card click-selectable via `MouseBinding`, displaying accent color emphasis border on the active card via `Style.Triggers`. All 3 cards are fully mutually exclusive
- **Simplified Personalize/Preset card**: Removed the 20-slot `ListBox` and organized the feature as "a standard mode for freely clicking and applying your favorite themes"
- **Auto-selection mode card**: Removed the "Disabled" RadioButton and "Future implementation" badge. RadioButtons are grayed out via `IsEnabled=false` when the card is not selected. "Random from all themes" is set as default when selected
- **Pane individual apply card**: Pane RadioButtons are grayed out via `IsEnabled` binding when the card is not selected
- **Hint bar dismiss button**: Changed from `ClearAssignmentModeCommand` to `SetThemeModeCommand(Preset)`
- **`GalleryModeHint` expression**: Overhauled to a switch expression based on `ActiveThemeMode`. Returns text appropriate to each mode/sub-mode
- **`IsAssignmentModeActive`**: Simplified to a single expression: `ActiveThemeMode != Preset`
- **`OnSelectedThemeInfoChanged`**: Added routing to select the category instead of applying the theme during category random mode

### Removed
- **`PresetSlotViewModel` class**: Removed with the deprecation of slot functionality
- **`PresetSlots` property**: Same as above
- **`ActivePresetSlot` property**: Same as above
- **`ClearAssignmentModeCommand`**: Integrated into `SetThemeModeCommand`
- **`OnActivePresetSlotChanged` / `OnSelectedPaneTargetChanged` handlers**: Integrated into `OnActiveThemeModeChanged`

## [0.14.5] - 2026-03-03 : Theme apply mode interactivity

### Added
- **"Theme Apply Mode" section renamed**: Renamed "Advanced Theme Control" to "Theme Apply Mode" to clarify the feature's purpose
- **Preset slot interactivity**: Overhauled the hardcoded 20-slot display to a `ListBox` bound to `PresetSlotViewModel`. Select a slot by clicking, then click a theme gallery tile to register it to that slot (selected slot is highlighted with accent color, registered slots display theme name)
- **Pane individual apply card enabled**: Replaced the disabled ComboBox grid with a `RadioButton` selector. After selecting Nav / A Pane / B Pane, clicking a theme tile stores the theme name for that pane (foundation for future actual apply implementation)
- **Gallery assignment mode hint bar**: When either a slot or pane is selected, displays an accent-colored banner above the theme gallery with guidance such as "Slot N selected - click a theme to register". A "Dismiss" button allows instant mode exit
- **Theme tile pane badges**: Implemented a system to display [Nav][A][B] badges in the top-right of each theme card. `ThemePaneBadgeVisibilityConverter` (IMultiValueConverter) shows badges only for pane-assigned themes
- **`PaneTarget` enum**: Added with 4 values: `None / Nav / APane / BPane`
- **`PresetSlotViewModel` class**: Observable slot VM holding slot number, theme name, and display text
- **`IsAssignmentModeActive` / `GalleryModeHint` properties**: Provide assignment mode state and hint string to the UI
- **`ClearAssignmentModeCommand`**: Command to clear both slot selection and pane target selection at once
- **Slot / pane selection mutual exclusion**: Implemented bidirectional mutual exclusion in `OnActivePresetSlotChanged` / `OnSelectedPaneTargetChanged`

## [0.14.4] - 2026-03-03 : Major layout overhaul of theme settings view

### Changed
- **Moved "Advanced Theme Control" to page top**: Achieved a logical operation order of mode selection then theme selection. Placed the "Advanced Theme Control" section above the theme gallery with 24px margin between them
- **Reordered advanced theme control cards**: Rearranged to Preset (enabled) then Auto-selection (future) then Pane individual (future)
- **Emphasized "Personalize Preset" as an active feature**: Differentiated from other cards with accent color border (1.5px) and accent icon. Removed the "Future implementation" badge and visualized the UI vision with a 1-20 slot grid (52x28px x 20 tiles)
- **Completely removed Theme Tools (export) section**: Removed the debug-purpose card and export button to clean up the settings screen

## [0.14.3] - 2026-03-03 : Theme gallery UI enhancement and advanced theme control framework

### Added
- **Standard theme pinned to top**: Implemented `StandardFirstSortKey` property and additional sorting so the "standard" theme always appears first within the Standard category
- **Theme Tools card**: Promoted the "Export theme" button to a white card with description text. Placed with a unified design matching other settings cards
- **Advanced theme control section**: Added 3 cards below the theme gallery
  - **Auto-selection mode (Randomize)**: RadioButton UI for configuring startup theme selection as "Disabled / Random from all themes / Random from current category"
  - **Personalize Preset**: Placeholder card showing the future 20-slot definition
  - **Pane individual apply**: Theme individual assignment UI for Nav, A Pane, and B Pane (ComboBox layout with future implementation placeholder)
- **`ThemeRandomizeMode` enum**: Added 3 modes `Disabled` / `AllThemes` / `CurrentCategory` to `AppSettingsViewModel`

### Fixed
- **Extended category header bottom margin**: Expanded StackPanel bottom margin from 8 to 14px and added 5px top margin to description text to resolve overlap with cards after adding descriptions

## [0.14.2] - 2026-03-03 : Theme gallery description text and hover effects

### Added
- **Category overview text**: Added short descriptive text below each category header in the theme gallery explaining the group's concept (Standard, Warm & Cozy, Professional, Premium, Retro & Tech)
- **Description text displayed on theme cards**: Displays the JSON `Description` field between theme name and color chips. Wraps up to 2 lines with ellipsis for overflow. Full text available via tooltip on hover
- **Theme card hover lift effect**: Added TranslateTransform animation (120ms) that lifts the card 2px upward on mouse hover
- **ThemeCategoryDescriptionConverter**: New converter that returns group overview text from the category display name

## [0.14.1] - 2026-03-03 : Theme category classification

### Added
- **Theme category classification**: Grouped the Control Deck theme gallery into 5 categories (Standard, Warm & Cozy, Professional, Premium, Retro & Tech). Category headers display icon, name, and count, with cards arranged in horizontal WrapPanel within each group
- **Added Category field to theme JSON**: Outputs `"Category"` as metadata during theme export. Categories are correctly restored on reload
- **ThemeCategoryIconConverter**: Converter that resolves PackIconLucide icon from category display name

### Changed
- **Changed theme sort order to category then name**: Sorted alphabetically within each category

## [0.14.0] - 2026-03-03 : Control Deck (dashboard-style settings view)

### Added
- **Control Deck (dashboard-style settings view)**: Replaced the sidebar settings ScrollViewer with a full-window 2-column overlay "Control Deck". Left nav switches between 5 categories (General, Search, Index, Recovery, Theme), with settings displayed as cards in the right content area
- **Color chip display on theme cards**: Visual preview with 4 Ellipses showing background, accent, text, and sidebar colors when selecting themes
- **Control Deck open/close animation**: Scales background panes to Scale(0.95) + darkens while fading in/out the overlay. Category switching uses content area Opacity fade for smooth transitions

### Changed
- **Connected settings button (Ctrl+Shift+O) to Control Deck**: Gear button and keybinding now open the new Control Deck
- **"Open index settings" navigates directly to Control Deck index category**: Settings link from the index search view now directly displays the Control Deck's index category

## [0.13.9] - 2026-03-03 : Startup acceleration via multi-core JIT profiling + Debug TieredCompilation

### Changed
- **Added multi-core JIT profiling**: Calls `ProfileOptimization.SetProfileRoot` / `StartProfile` at the beginning of `Main()` to record startup JIT patterns in a profile. On subsequent launches, background threads perform ahead-of-time JIT compilation, reducing cold startup by 20-40%
- **Enabled TieredCompilation for Debug builds**: Added `TieredCompilation` + `TieredCompilationQuickJit` to Debug configuration to reduce JIT latency during development
- **Added `*.jitprofile` to `.gitignore`**: Excluded JIT profile files from version control

## [0.13.8] - 2026-03-03 : Startup speed improvement (parallel settings loading + async favorites icons)

### Changed
- **Startup acceleration via custom Main()**: Changed App.xaml BuildAction to Page to suppress auto-generated Main. Custom `Main()` starts splash display and parallel settings loading before WPF framework initialization, running in parallel with `Application` constructor + `InitializeComponent`
- **Background startup diagnostic logging**: Changed `FileLogger.LogStartupDiagnostics()` to background execution via `Task.Run`, eliminating UI thread I/O
- **Async batch loading of favorite icons**: Removed synchronous icon fetching from `FromDto()`, and after `LoadFromSettings()` completes, bulk-fetches all icons in background via `LoadIconsAsync()`. Eliminates UI blocking proportional to item count
- **Welcome window final page layout improvement**: Moved the "Launch App" button to the footer bottom-right (same position as "Next") for operational consistency. Center area displays a welcome message

## [0.13.7] - 2026-03-03 : Working set switching robustness + synchronized swap animation

### Changed
- **Overhauled working set switching to code-behind `BeginAnimation` + `TaskCompletionSource` approach**: Completely replaced XAML DataTrigger/Storyboard approach. Directly controls Opacity via `PaneContentArea.BeginAnimation` from `MainWindow.xaml.cs`. Waits for confirmed rendering at Opacity=0 via `DoubleAnimation.Completed` + `Dispatcher.InvokeAsync(Render)`, enabling `await` on the ViewModel side to **structurally guarantee** the sequence: fade-out render complete -> swap -> fade-in
- **`Func<Task>` delegate approach for View-ViewModel animation coordination**: Sets `MainViewModel.AnimatePaneFadeOut` / `AnimatePaneFadeIn` delegates in the `MainWindow` constructor. `ProjectSetsViewModel` awaits `_main.AnimatePaneFadeOut()` for fade-out completion before starting swap, then awaits `_main.AnimatePaneFadeIn()` for fade-in after swap completion
- **Removed fade-less rollback during preview-to-preview switching**: Fixed the root cause where `CancelPreviewInternalAsync(animate: false)` intermediate rollback was replacing A/B panes while fully visible. During preview-to-preview switching, now retains the original rollback point, fades out the current display as-is, and directly swaps to the new set
- **Removed `IsWorkingSetSwitching` property**: Removed from `MainViewModel` as DataTrigger is no longer needed. `Func<Task>` delegates serve as replacement
- **Added double-fire guard for working set switching**: `_isSwitching` flag prevents duplicate execution from rapid double-clicks
- **Pre-validation of all tab paths during working set switching**: `ValidateAndResolvePathsAsync` verifies existence of all tab paths, automatically replacing inaccessible network paths with Desktop/Downloads. Toast notification shows details when replacements occur
- **Automatic rollback on working set switching failure**: On exception, immediately releases fade and attempts to restore original state. If restoration also fails, performs state reset only and reports error via toast notification
- **Applied same crossfade animation to cancel (undo) operations**: Added `animate` parameter to `CancelPreviewInternalAsync`; standalone cancel uses fade, while chained cancel from StartPreview skips fade for efficiency
- **Removed unnecessary property `WorkingSetSwitchMessage`**: Removed from `MainViewModel` with overlay deprecation

### Fixed
- **Fixed non-first tabs not being path-validated during tab restoration**: Removed `isFirstTab` guard from `ResolvePathForTabRestoreAsync` to perform `DirectoryExistsSafeAsync` existence check on all tabs. PC / UNC roots are skipped as virtual paths

## [0.13.6] - 2026-03-03 : Fix for 7-zip shell context menu compress/extract execution

### Fixed
- **Fixed 7-zip and other shell extensions generating dialogs off-screen making them inoperable**: The STA thread's hidden window (0x0 size, position (0,0)) was inappropriate as a dialog parent for shell extensions. Changed to create `HwndSource` as a 1x1 `WS_POPUP` window at the right-click position with the main window as owner, so dialogs correctly appear near the main window
- **Added `CMIC_MASK_PTINVOKE` / `CMIC_MASK_NOASYNC` flags to `CMINVOKECOMMANDINFOEX`**: Made the `ptInvoke` field usable by shell extensions and requested synchronous execution to prevent early STA thread termination
- **Raised message pump initial idle threshold from 300ms to 2 seconds**: 300ms was too short when 7-zip generates dialogs asynchronously after `InvokeCommand`, causing premature message pump termination
- **Fixed empty folder size column showing blank**: `GetFolderSizesFromIndexAsync` did not include folders with 0 files in the result dictionary, leaving `FolderIndexedSize` as `null`. Set `result[folderPath] = 0` for TotalHits=0 cases and removed the `totalSize > 0` guard. Changed `DisplaySize` condition to `HasValue` to display "0.0 B"

## [0.13.5] - 2026-03-02 : Active/inactive selection highlight switching and focus border unification

### Fixed
- **Fixed critical bug where hover animation destroyed the shared SelectionBrush**: The hover exit `ColorAnimation` targeting `(Border.Background).(SolidColorBrush.Color)` was overwriting the current Background brush Color to Transparent. During selection, Background is replaced with the shared resource `SelectionBrush` (non-Frozen), so the shared resource Color was destroyed, causing selection highlights to disappear across the entire application. Fixed by assigning `x:Name` to an inline SolidColorBrush and targeting the animation to only affect the named inline brush
- **Distinguished inactive pane selection color**: Changed ListView (details view) and ListBox (icon view) selection highlights to blue (#D0E6F8) for active pane and gray (#E5E5E5) for inactive pane. Property triggers (`IsSelected`) are kept as fallback, with gray override only via MultiDataTrigger when inactive
- **Unified ListView FocusVisualStyle**: Fixed the system default dotted rectangle appearing in details view. Created a new `DetailsFocusVisualStyle` without rounded corners, unified with the icon view's `SubtleFocusVisualStyle`
- **Prevented rendering glitches during virtualized scrolling**: Added `VirtualizingPanel.ScrollUnit="Pixel"` to ListView to prevent selection highlight misalignment during scrolling through large file lists

## [0.13.4] - 2026-03-02 : Shell context menu "New" and "Compress/Extract" fixes

### Fixed
- **Fixed shell context menu "New" not working**: `CMINVOKECOMMANDINFOEX` had `lpDirectory`/`lpDirectoryW` (working directory) unset, so shell extension NewMenu handler could not identify the creation target directory. Fixed to set the folder path for background menus and parent directory for file selections
- **Fixed shell context menu "Compress"/"Extract" progress dialog not appearing**: The STA thread was terminating immediately after `InvokeCommand`, preventing compress/extract progress dialogs from functioning. Added a message pump via `DispatcherFrame` + `DispatcherTimer` to keep the STA thread alive until shell extension dialog windows close
- **Improved shell dialog z-order**: Changed the `hwnd` passed to `GetViewObject`/`GetChildrenUIObjects` owner window from the STA dummy window to the main window handle
- **Auto-refresh folder after shell context menu operations**: Calls `LoadDirectoryAsync` after background menu operations (New, etc.) and long-running verbs (compress/extract) to automatically reload folder contents
- **Fixed file list not updating immediately after shell context menu operations**: During shell menu display on the STA thread, the app entered `Deactivated` state, causing FileSystemWatcher change notifications to be deferred as "update later when inactive". When `IsExpectingShellChange` is `true`, bypasses `IsActive` / `isVisibleTab` checks for immediate refresh
- **Improved shell New response speed**: Changed message pump to a 2-stage approach (dialog-less operations exit early at 300ms, dialog operations wait the traditional 1.5 seconds). Reduced FSW throttle to 50ms when `IsExpectingShellChange` (normally 500ms)
- **Auto-focus on shell New items**: Extended to focus on all newly created items, not just new folders (e.g., new text files). Folders still launch auto-rename mode as before
- **Fixed forceRefresh flag read order bug**: `IsExpectingShellChange` was reset to `false` in the Created handler before `forceRefresh` was read, so it was always `false` and immediate refresh was not functioning. Moved flag retrieval before reset
- **Resolved MVVMTK0034 warning**: Changed 3 direct references to `SearchFilterViewModel._dateFilter` backing field to generated property `DateFilter`. Suppressed recursion and intermediate notifications with `_isLoading` guard
- **Fixed third-party shell extensions like 7-zip context menu not executing (3 issues)**:
  - `GetCommandString` (Unicode version) had no `catch`, causing `COMException` to be thrown for shell extensions that return `E_NOTIMPL`, never reaching `InvokeCommand`. Fixed to catch the exception and continue with empty verb
  - Changed `hwnd` passed to `GetViewObject`/`GetChildrenUIObjects`/`InvokeCommand` from UI thread's `mainHwnd` to STA thread's `hwnd`. Shell extensions like 7-zip generate modal dialogs on the `InvokeCommand` calling thread, so cross-thread `hwnd` caused dialog creation to fail
  - Made `GetMenuItemText` support submenu recursive search. Shell extensions like 7-zip place items in submenus, so root-menu-only search could not retrieve `menuText`. Changed to always run the message pump when verb is empty, treating it as a shell extension

## [0.13.3] - 2026-03-02 : Index scan acceleration

### Changed
- **Changed index scan to stack-based manual recursion**: Switched from bulk enumeration with `RecurseSubdirectories = true` to stack-based manual recursive scanning. Child files of excluded folders (`node_modules`, `.git`, `bin`, `obj`, etc.) are no longer scanned at all, significantly reducing I/O load
- **Expanded exclusion folder list**: Added intermediate/cache folders to exclusion targets: `node_modules`, `.git`, `.vs`, `obj`, `bin`, `.svn`, `.hg`, `__pycache__`, `bower_components`, `.gradle`, `.next`, `.nuxt`, `venv`, `.venv`, `.nuget`, `INetCache`, etc. Changed to O(1) lookup via HashSet
- **Changed progress reporting to time-based (100ms intervals)**: Switched from count-based (every 100 items) to 100ms interval timer approach, reducing UI thread rendering load while normalizing counter update frequency
- **Increased local drive Commit batch size**: Expanded Lucene Commit interval for local drives from 100 to 500 items, reducing Commit overhead (Box/network remains unchanged)
- **Set thread priority to BelowNormal**: Lowered index scan thread priority to `BelowNormal` to prioritize UI operation responsiveness for file operations
- **Changed exclusion arrays to static readonly**: Moved `IsExcludedPath`, `IsExcludedFileName`, `IsExcludedFolderName` judgment arrays from method-local to static readonly fields, eliminating per-call heap allocations

## [0.13.2] - 2026-03-02 : Welcome guide window

### Added
- **Welcome guide window**: Displays a welcome window on first launch (when `settings.json` is not created). Provides the app's basic concept, cloud integration explanation, and manual links, with an experience to choose from 6 recommended themes to start with

### Changed
- **Expanded welcome window to wizard format**: Overhauled the single-page welcome window to a full 9-page wizard. Navigates through Welcome (BOX Drive/OneDrive integration announcement) -> 6 nav pane view introduction pages (Favorites, Tree, History, Index Search, Working Sets, Settings) -> Theme selection -> Ready to go, with "Next/Back" navigation and "Launch App" on the final page
- **Expanded theme selection to all themes**: Extended the wizard's theme selection page from 6 recommended choices to all themes (20). Displayed in a scrollable card layout
- **Added screenshot image frames to Wizard Pages 1-6**: Inserted rounded Border + Image on each nav pane view introduction page (Favorites, Tree, History, Index Search, Working Sets, Settings). Placing PNGs in `assets/welcome/` displays actual screen images on each page. Shows blank without build errors when images are not placed. Expanded window height from 560 to 680

### Fixed
- **Fixed crash on favorites right-click**: MenuItem submenu Popup template referenced `StaticResource ShadowColor`, but Popup has an independent visual tree so StaticResource resolution failed. Changed to hardcoded values matching the App.xaml ContextMenu template

## [0.13.1] - 2026-03-01 : Theme metadata display

### Added
- **Theme metadata display**: Overhauled theme selection UI to 3-line display. Bold theme name, gray description, and author on separate lines for at-a-glance understanding. Text exceeding nav pane width is truncated with `...`. Author line is hidden when no author is set
- **ThemeInfo DTO**: New `ThemeInfo` class holding theme name, description, and author information. `DisplaySubText` combines description and author for display
- **Theme JSON metadata**: Added `Description` / `Author` fields to theme JSON. Also auto-output during export. Old themes without metadata show "No description available" as fallback
- **Theme selection card-style UI**: Each theme displayed as a card (rounded corners, border, hover, accent border on selection). Description text supports word wrap in a full-expansion layout without scrolling
- **Added theme section to MANUAL.md**: Documented theme selection, export, customization procedures, and a full list of 20 initial themes

## [0.13.0] - 2026-03-01 : Live Theme Engine

### Added
- **Live theme switching**: On theme selection, sets new `SolidColorBrush` instances to top-level resources, and `DynamicResource` references auto-resolve to immediately reflect the color scheme across the entire UI without restart. Synchronously updates all 49 Color keys + corresponding 47 Brushes from main screen to dialogs
- **Theme auto-detection**: Scans all `.json` files in the `themes/` folder and automatically displays them in the settings list. Adding a theme is as simple as placing a file
- **Theme selection UI**: Placed theme selection list in Settings (Ctrl+Shift+O) -> "5. Theme". Switching colors instantly by simply selecting up/down provides a "try-on" experience
- **Theme name persistence**: Saves the selected theme name to `ThemeName` in `settings.json` for automatic loading on next launch
- **Fast theme loading on startup**: Lightweight-parses only `ThemeName` from `settings.json` via `JsonDocument`, applying the theme before waiting for full settings Load

### Changed
- **Complete ThemeService overhaul**: Added theme Discovery / Live Hot-Swap / Color->Brush mapping. Added theme name parameter to `LoadAndApply` for multi-theme support
- **Expanded settings screen theme section**: Changed from a single export button to a theme selection list + export button layout

### Fixed
- **Fixed theme switching not being reflected**: Migrated Brush references across all 19 XAML files (466 locations) from `StaticResource` to `DynamicResource`. `StaticResource` resolves only once at load time, so runtime resource changes were not reflected in the UI. By changing to `DynamicResource`, the entire UI auto-updates when `ThemeService` sets new `SolidColorBrush` instances to top-level resources

## [0.12.43] - 2026-03-01 : Theme system (external JSON management)

### Added
- **Theme system**: Introduced a mechanism to externally manage color scheme information in `themes/standard.json`. Reads JSON on startup and overwrites Color resources. Falls back to default color scheme when the file doesn't exist or is invalid
- **Theme export feature**: Export the current color scheme to `themes/standard.json` from Settings (Ctrl+Shift+O) -> "5. Theme". Freely customize with a text editor and auto-apply on next launch
- **ThemeModel / ThemeService**: New DTO and service classes managing all 49 Color keys by category (Base/List/Search/Accent/ContextMenu/Misc)
- **Commented JSONC output**: Exported theme files include `//` comments describing each color key's purpose. Comments are auto-skipped during loading via `JsonCommentHandling.Skip`

## [0.12.42] - 2026-03-01 : Theme color resource centralization

### Changed
- **Converted 28 hardcoded colors to resources**: Defined new Color + SolidColorBrush in AppResources.xaml and replaced all inline color values across XAML files with `StaticResource` references. Established the foundation for theme switching implementation
- **New resource keys added**: Hover/selection colors (ListHover, Selection, ButtonHover, InactiveSelection, OptionSelected), error/destructive action colors (ErrorText, DestructiveIcon, DestructiveHoverBackground), 8 context menu colors, 4 telemetry panel colors, GlowBar/loading colors, and checkbox derived colors defined in bulk
- **Dialog background/text color resource conversion**: Unified `Background="#F5F1E3"` / `Foreground="#1A1A1A"` across all dialogs (RenameDialog, ZenithDialog, InputBox, etc. - 8 files) to BackgroundBrush / TextBrush references
- **ContextMenuItemStyle color resource conversion**: Migrated all highlight colors, disabled colors, and shortcut colors in the AppResources.xaml menu template to StaticResource references
- **Documented App.xaml Popup constraints**: Added comments specifying corresponding resource key names for hardcoded colors within the ContextMenu template

## [0.12.41] - 2026-03-01 : Search history dropdown professional-grade upgrade

### Added
- **Dynamic preset matching**: During search execution, automatically compares current filter conditions (size/date) with saved preset definitions at byte/date level, recording the matching preset name in history. Manually set conditions that match a preset's values also display the name
- **Condition columns in search history**: Search history dropdown displays "Preset: [name]", "Size: [abbreviation]", "Date: [abbreviation]" with explicit label+value columns. SharedSizeGroup vertical alignment enables rapid scanning of past conditions
- **Full filter restoration from search history**: Selecting a history item automatically restores size and date filters to their state at search time, in addition to keyword and search mode. Icon underlines synchronize to the correct state accordingly

### Changed
- **Replaced star icon with label format**: Removed the left "star" indicator and displays "Preset: [name]" as explicit text in the right column. Label (#AAAAAA) and value (#888888) contrast establishes the quality of an instrument tool
- **Search history DB schema V2 migration**: Added PresetName, MinSizeText, MaxSizeText, StartDateText, EndDateText columns to SearchHistoryRecord table. Existing data operates normally with default empty strings

## [0.12.39] - 2026-03-01 : Multi-layered search condition reset functionality

### Added
- **Right-click reset for preset/size/date icons**: Right-click the star (preset) to clear all keywords, size, date, and scope at once. Right-click the scale (size) or calendar (date) icons to instantly clear only the respective filter. Underlines are cleared in sync
- **Esc key multi-stage reset**: In the search text box, first Esc press clears text only; second press (when text is already empty) clears size, date, and scope filters as well and dismisses the search
- **Status bar notifications and logging for filter operations**: Added status bar notification and FileLogger recording for all operations: size chip apply, date preset apply, filter clear, preset save/apply/delete/full reset
- **Added right-click operation instructions to tooltips**: Added right-click clear operation description on the second line of size, date, and preset icon tooltips

### Changed
- **Unified ResetAllFilters notifications**: Suppressed intermediate notifications with `_isLoading` flag and batch-notified all property changes via `NotifyAllFilterProperties`. Eliminated underline residue from Storyboard animations

## [0.12.37] - 2026-03-01 : Settings save debounce and atomic swap approach overhaul

### Changed
- **Debounced saving**: Instead of immediate file I/O on each settings change, waits 800ms debounce then bulk-writes on a background thread. Significantly reduces disk I/O and UI blocking during continuous operations
- **Atomic swap writing**: Changed to write to `.tmp` then atomically replace via `File.Replace`. Prevents `settings.json` corruption from crashes during writes
- **Auto backup (.bak)**: `File.Replace` automatically retains the old `settings.json` as `.bak`. On startup, if the main file is corrupted (0 bytes, etc.), auto-recovers from `.bak`
- **Background I/O**: All file I/O for partial saves (favorites, filters, presets, etc.) runs via `Task.Run`, never blocking the UI thread
- **Shutdown flush**: On window close, immediately flushes pending debounced unsaved changes before final settings save

## [0.12.36] - 2026-03-01 : Quick Preview navigation (Left/Right arrow keys)

### Added
- **Quick Preview navigation**: Navigate to previous/next file with Left/Right arrow keys during preview. Consolidates the close-reselect-open workflow into a single key. Directories are auto-skipped; stops at list boundaries
- **Position counter**: Displays file position in preview header (e.g., 3 / 15)
- **Slide + fade animation**: Content slides in from movement direction during navigation (linked to micro-animation setting)
- **Preview close button**: Added X button to header top-right. Allows closing preview with mouse

### Changed
- **ShowQuickPreview refactoring**: Separated content update logic into UpdateQuickPreviewContent, shared between initial display and navigation

## [0.12.35] - 2026-03-01 : Quick Preview - Image/Excel/CSV/HTML/PDF support

### Added
- **Quick Preview image display support**: Decodes and displays .jpg/.png/.bmp/.gif/.tif/.ico/.webp files via WPF BitmapImage. DecodePixelWidth=1920 limits memory usage, background loading prevents UI blocking
- **Quick Preview spreadsheet display support**: Natively displays Excel (.xlsx/.xls/.xlsm) and CSV/TSV files in DataGrid. Lightweight reading via ExcelDataReader (first 500 rows / 50 columns), sheet name/row count/sheet count shown in footer
- **Quick Preview HTML rendering support**: Renders HTML (.html/.htm) files in WebView2 (changed from previous text display)

### Changed
- **Changed PDF preview to PDFtoImage image rendering approach**: Eliminated WebView2 dependency, rendering pages as 144 DPI images via PDFtoImage (PDFium). Displays up to 20 pages in vertical scroll within ScrollViewer. Achieves clean display without toolbar
- **Changed Office preview to PDFtoImage as well**: Unified post Office-to-PDF conversion display from WebView2 to image rendering. WebView2 is now HTML preview exclusive
- **Changed Excel preview to DataGrid approach**: Switched Excel file preview from COM-based PDF conversion to native DataGrid display via ExcelDataReader. Enables preview even without Office installation

## [0.12.34] - 2026-03-01 : Quick Preview - PDF / Office support

### Added
- **Quick Preview PDF display support**: Display PDF files with WebView2 native viewer via Space key
- **Quick Preview Office document support**: Convert Word (.docx/.doc), Excel (.xlsx/.xls), PowerPoint (.pptx/.ppt) to temporary PDF for display (requires Microsoft Office)

## [0.12.33] - 2026-03-01 : Quick Preview (Peek) feature

### Added
- **Quick Preview**: Press Space on file list to display file contents as overlay. Shows first 100KB of text-based files (.txt, .cs, .json, .md, .xml, etc. - 40+ types) in monospace font. Press Space or Esc again to close

## [0.12.32] - 2026-03-01 : Detailed manual documentation for search filter features

### Added
- **Manual additions**: Added detailed sections for size filter (3-3-3), date filter (3-3-4), and search presets (3-3-5) to MANUAL.md. Comprehensively covers input formats, quick chips, calendar integration, and preset save/apply/preview/delete/reset operation procedures

## [0.12.31] - 2026-03-01 : Status bar notification color unification and duplicate display fix

### Fixed
- **Notification message color unification**: Changed file operation status text color from `#4FC3F7` (cyan) to `#90A4AE` (gray) to unify the color tone of the status bar center area
- **Duplicate notification prevention**: When a new notification arrives while one is being displayed, changed to a queue-of-one approach that waits for the existing message fade-out to complete before displaying the latest message

## [0.12.30] - 2026-03-01 : Added full settings reset button to preset popup

### Added
- **Search condition reset button**: Added a reset button at the bottom of the preset popup. Allows resetting keywords, size, date, sort, and file type filters all at once to default state. Search mode and scope are preserved

## [0.12.29] - 2026-03-01 : Popup external click pass-through prevention

### Fixed
- **Popup external click pass-through prevention**: When closing preset, size, date, and scope filter popups via external click, set `e.Handled = true` to block event propagation. Fixes the issue where accidentally clicking outside the popup would trigger the file list

## [0.12.28] - 2026-03-01 : Preset save confirmation dialog

### Changed
- **Confirmation popup for preset save**: Added a confirmation dialog when saving a new search preset, displaying the settings summary (mode, keyword, size, date, extension, scope, sort). Prevents unintended saves
- **Added custom content area to ZenithDialog**: Added an optional FrameworkElement parameter to ZenithDialog.Show, allowing arbitrary UI elements to be displayed between the message and buttons

## [0.12.27] - 2026-03-01 : Search preset persistence fix

### Fixed
- **Preset disappearance bug fix**: Fixed a critical bug where SearchPresets was overwritten with a new empty list during app shutdown settings save, causing presets to disappear after restart. Fixed by explicitly including SearchPresets in WindowSettings construction in MainWindow_Closing
- **Diagnostic logging added**: Outputs logs during preset save/load to enable verification of persistence reliability

## [0.12.26] - 2026-02-28 : Search preset preview + icon synchronization

### Added
- **Preset content preview**: Hovering over each item in the preset list shows a sub-popup previewing keyword, size, date, filter, scope, and sort settings. High-density Zenith-style layout with automatic hiding of empty value rows
- **Auto-converted size display**: Automatically converts size specifications within presets (e.g., `1g`) to human-readable format (e.g., `1 GB`) in the preview
- **Auto-converted date display**: Automatically converts date specifications within presets (e.g., `20260228`) to `yyyy/MM/dd` format in the preview

### Changed
- **Immediate icon state synchronization**: After applying a preset, batch-fires size/date filter change notifications so the search bar icon underlines (scale/calendar) immediately reflect the correct state
- **Delete button UI improvement**: Maintains the hover-only display approach for the X button while adding a clear 18x18 hit area and hover background (semi-transparent white). Resolves interference with preview operations

## [0.12.25] - 2026-02-28 : Search preset feature

### Added
- **Search preset save/restore**: Save search conditions (keyword, size, date, extension filter, sort, scope) as named presets and restore/re-search with one click. Managed via popup from the star icon in the search bar
- **Mode-based filtering**: Auto-classifies presets for normal search and index search, displaying only presets matching the current mode
- **Preset persistence**: Saved to settings.json and restorable after app restart
- **Popup UI**: Adopts the same design pattern as size/date filters (slide-in animation, stealth scrollbar, hover highlight, mutual exclusion)

## [0.12.24] - 2026-02-28 : Date specification popup business-oriented preset expansion + bidirectional sync

### Changed
- **9 business-oriented presets**: Replaced the previous 3 chips with short-term (Today / Yesterday / Last 3 days), mid-term (Last 7 days / Last 14 days / Last 30 days), and period (This month / Last month / This year) in 3-row layout. One click instantly applies to start/end fields
- **Text to calendar bidirectional sync**: Parses TextBox input in real-time and auto-updates Calendar SelectedDates and DisplayDate when a valid date is entered. Combined with calendar-to-text sync for complete bidirectional integration
- **Calendar Zenith Style**: Changed selection color from default blue to jet black (#1A1A1A) + white text. Today cell in light color (#E8E6E0), non-current-month days at Opacity=0.3 black. All text unified to #000000
- **Recursion guard**: Prevents Calendar <-> TextBox sync loops with `_isSyncingCalendar` flag, eliminating operation lag

## [0.12.23] - 2026-02-28 : Date specification popup overhaul

### Changed
- **Date filter text input approach**: Replaced DatePicker + RadioButton presets with the same TextBox + real-time preview approach as the size filter. Smart date parser (yyyyMMdd / MMdd / yyyy/M/d, etc.) accepts flexible input with real-time conversion display
- **Calendar always visible**: WPF Calendar (SingleRange) permanently displayed at popup bottom. TextBox and calendar are bidirectionally linked - calendar click sets yyyyMMdd in TextBox, range drag sets both start and end simultaneously
- **Quick chips**: Changed RadioButton presets to clickable chips (Today / Last 7 days / Last 30 days). Click auto-fills start/end TextBoxes
- **Consistency check**: Displays red text warning and disables filter when start date exceeds end date
- **Auto-focus + keyboard operation**: Auto-focuses start TextBox on Popup open, Tab moves to end, Enter/Escape closes and returns to search bar
- **Freeze fix**: Changed `Dispatcher.Invoke` to `Dispatcher.InvokeAsync` to eliminate UI freeze during filter changes

### Fixed
- Fixed issue where `Dispatcher.Invoke` synchronous call during date filter change could block the UI thread

## [0.12.22] - 2026-02-28 : All popup design unification

### Changed
- **Scope Popup #000000 conversion**: Unified header "Search Scope", "Select All / Deselect All" buttons, separator "|" text to #000000. Buttons use 2-stage feedback: Opacity 0.55 -> hover 1 + underline. Changed folder names to #000000
- **Date button underline conversion**: Replaced blue dot (Ellipse) with 1px charcoal gray (#333333) underline + #1A1A1A icon color + 0.1s fade, matching the size button style
- **Date Popup chip conversion**: Replaced RadioButton list with chip-style RadioButtons (white background + black border 1px + CornerRadius=2). Selected state uses jet black (#1A1A1A) inversion to indicate current preset. Hover uses same inversion. "Not specified" integrated into header reset button
- **Date Popup #000000 conversion**: Unified header "Date Specification", reset button, and custom input labels (Start/End) to #000000

## [0.12.21] - 2026-02-28 : Size specification popup visibility final brush-up

### Changed
- **All text unified to #000000**: Set Foreground to pure black (#000000) for header, reset button, guide text, Min/Max labels, TextBox input text, and preview. Ensures maximum contrast against light background
- **Chip button redesign**: Changed to white (#FFFFFF) background, black (#000000) border (1px), CornerRadius=2 for precise button shape. Hover inverts to jet black (#1A1A1A) background + white text, intuitively recognizable as a clickable tool
- **Separator fine-tuning**: Changed separator to #000000 Opacity=0.1 to unify with the black-based color palette
- **Reset button refinement**: 2-stage feedback with Opacity=0.55 normal, hover Opacity=1 + underline

## [0.12.20] - 2026-02-28 : Size filter smart input redesign

### Changed
- **Size filter manual-first approach**: Replaced radio button/preset approach with Min/Max text input + suffix parser (k=KB, m=MB, g=GB, defaults to MB). Enables keyboard-driven fast operation like "500k[Tab]2g[Enter]"
- **Real-time preview**: Displays conversion result like "-> 2.5 GB" during input. Invalid input shows red border for visual feedback
- **Quick chips**: Placed clickable chips (< 100 KB / 100 KB ~ 10 MB / 10 MB ~ 1 GB / > 1 GB) instead of preset selection. Click auto-fills Min/Max
- **Active indicator improvement**: Replaced blue dot (Ellipse) with 1px charcoal gray (#333333) underline. Unified active icon color to #1A1A1A with 0.1s fade animation
- **Popup auto-focus**: Auto-focuses Min textbox + selects all on size Popup open. Enter/Escape keys for instant close
- **Min/Max consistency check**: Displays red text warning and disables filter when Min exceeds Max (prevents 0 results)

## [0.12.19] - 2026-02-28 : Search bar size and date filters

### Added
- **Size filter**: Added size filter button to search bar. Filter by file size using presets (Small/Medium/Large/Huge) and custom ranges (MB units). Visual feedback with accent color + dot indicator when filter is active
- **Date filter**: Added date filter button to search bar. Filter by last modified date using quick selections (Today/Last 7 days/Last 30 days) and custom date range (DatePicker)
- **Lucene query-level filtering**: In index search mode, applies size (NumericRangeQuery) and date (TermRangeQuery) at query level for both precision and speed
- **ICollectionView filter**: Consistently operates as post-search filter in normal search mode as well
- **Filter persistence**: Size and date filter states saved to settings.json. Restored after app restart
- **Popup UI**: Follows the same Zenith Modern Style as the scope selector (CornerRadius=8, DropShadow, slide-in animation, smart close). Opens/closes in mutual exclusion

## [0.12.18] - 2026-02-28 : Scope selector - visibility optimization + smart close

### Changed
- **Scope Popup text high contrast**: Changed folder name to TextBrush (#1A1A1A), path to #666666, count to #555555. Clear readability against beige background. Hover inverts to white tones (#FFFFFF / #C0BBAC / #CCCCCC)
- **Smart close**: Auto-closes on window Deactivated (focus moved to another app) in addition to outside click. Event subscription cleanup consolidated in CloseScopePopup()

## [0.12.17] - 2026-02-28 : Index search scope selector

### Added
- **Search scope selector**: Added scope button to the index search mode search bar. Implemented a Popup selector to filter search targets from registered folders. Badge (e.g., 3/10) provides instant selection status overview, with amber highlight during active filtering. High-contrast font colors ensure readability during extended work sessions, with white inversion on hover
- **Smart close**: Scope selector Popup auto-closes on window deactivation (switching to another app) in addition to outside click
- **Real-time re-search**: Changing scope selection automatically refreshes the displayed search results
- **Multi-path search**: Added Search overload to IndexService targeting multiple root paths. Combines multiple PrefixQuery(SHOULD) via BooleanQuery for efficient filtering
- **Scope persistence**: Selection state saved to IndexSearchScopePaths in settings.json. Restored after app restart
- **Backup support**: Added scope information to SettingsBackupService backup diff display

## [0.12.16] - 2026-02-28 : Index lock (archive) feature metadata loss fix

### Fixed
- **Locked item metadata loss fix**: Fixed an issue where document count and last update timestamp of locked (archived) index items reverted to "Not created". Now snapshots document count at lock time and persists to `indexed_roots.json`
- **ValidateIndexedRoots locked data protection**: Added protection to prevent `_indexedRoots` / `_indexedTimestamps` of locked items from being cleared during integrity checks when Lucene index files are absent
- **UnmarkAsIndexed locked guard**: Prevents indirect deletion of `_indexedRoots` entries for locked items
- **Status display correction**: Fixed locked items displaying as "Not created" to show correct count and timestamp. Added `Locked` state to `StatusKind`, with XAML triggers showing timestamp and count columns

## [0.12.15] - 2026-02-28 : Comprehensive refactoring (maintainability, stability, and performance improvements)

### Fixed
- **Memory leak fix (UI layer)**: Fixed event unsubscribe leaks for FilePaneControl TabListPopup.Opened, TabContentControl LayoutUpdated/IsVisibleChanged, and MainWindow telemetryPopupTimer/itemTelemetryPopupTimer not being stopped on Closing
- **Animation clock release**: Releases clocks via BeginAnimation(null) during Welcome animation exit and after ContentRendered fade-in completion, preventing memory leaks
- **CancellationTokenSource Cancel leak**: Added Cancel() before Dispose() for _loadCts / _iconLoadCts in TabItemViewModel.Dispose
- **DB initialization faulted reset**: Resets _initTask in DatabaseService when faulted to enable retry
- **DB Upsert TOCTOU race elimination**: Made SELECT+INSERT/UPDATE in SaveHistoryAsync / SaveSearchHistoryCoreAsync / SaveRenameHistoryAsync atomic via RunInTransactionAsync
- **Search history save catch scope narrowing**: Narrowed catch in SaveSearchHistoryCoreAsync to schema mismatch only (no such column/table), preventing false migration on UNIQUE violations
- **IndexService CTS race fix**: Protected _globalIndexingCts.Token reads with lock(_lockObj) to resolve race condition with CancelIndexing
- **ScanSubtree continues on individual file exceptions**: Moved try-catch inside the loop so individual file exceptions (access denied, etc.) don't abort the entire scan
- **Individual IOException catch for CSV/Excel output**: Notify with a Japanese message when the file is in use

### Changed
- **Throttled logging for IndexService per-item catch**: Log the first 5 exceptions during folder/file index creation and log total skip count upon completion
- **Consolidate PathHelper Box detection**: Unified inline IndexOf in DetermineSourceType to IsInsideBoxDrive() call
- **Remove dead code TryMigrateAndSave()**: Removed unnecessary branch from WindowSettings.Load()
- **Replace unnecessary .ToList() with .ToArray()**: Improved memory efficiency in thumbnail batch processing for IndexService / IndexSearchSettingsViewModel / TabItemViewModel

## [0.12.14] - 2026-02-28 : Ultra-fast micro-animation unification

### Changed
- **Changed file list row hover to ColorAnimation**: Changed hover background color for both Details/Icon views from immediate Setter approach to ColorAnimation (60ms in / 80ms out) for smooth fade-in and fade-out
- **Sped up tab switch fade-in**: Shortened folder switch fade-in from 0→1 / 400ms to 0.8→1.0 / 100ms, eliminating the "pop" feel while maintaining instantaneous visual completion
- **Shortened TabListPopup hover exit**: Reduced hover exit fade-out from 120ms → 80ms for sharper responsiveness
- **Changed telemetry Popup appearance to 100ms fade-in**: Removed WPF built-in `PopupAnimation="Fade"` and unified to code-behind controlled 100ms DoubleAnimation fade-in

### Added
- **`EnableMicroAnimations` setting flag**: Setting `"EnableMicroAnimations": false` in settings.json allows skipping tab switch fade-in and telemetry popup fade to immediate display

## [0.12.13] - 2026-02-28 : Quiet status bar + telemetry popup

### Changed
- **Stabilized index progress display on status bar**: Removed folder name and changed to number-only display "Indexing: 12,345 items". Eliminated jittering caused by frequent text width changes
- **Added telemetry popup**: Hovering over the spinner icon on the status bar shows a terminal-style popup with detailed information (Scan / Speed / DB / Thread / Time). Same popup added to each folder's spinner in the index panel. Telemetry is calculated at 1-second intervals only while the popup is displayed, keeping background load at zero during normal operation

## [0.12.12] - 2026-02-28 : Display scan folder during index update

### Changed
- **Display scan folder name during index update**: During index update of large folders, the status bar shows the currently scanning subfolder name in "Indexing: SubFolder (X items done)" format. Gray subfolder name also displayed next to "Creating..." in the index management panel to visually communicate that processing is in progress. Folder name updates are throttled to once per second to eliminate CPU/UI load

## [0.12.11] - 2026-02-28 : Auto-sort for index management panel

### Added
- **Auto-sort for index management panel items**: Folder list automatically sorted into 3 groups: "Creating/Waiting → Unlocked (oldest first) → Locked (oldest first)" to improve management efficiency. Automatically rearranged upon index completion or lock toggle

## [0.12.10] - 2026-02-28 : File list row height compression

### Changed
- **Compressed file list row spacing to improve display density**: Reduced top/bottom cell padding from 4px→2px across all 5 columns (Name, Location, Date, Type, Size), allowing 2-3 more rows per screen. Added VerticalAlignment="Center" to icons to maintain vertical balance within rows

## [0.12.9] - 2026-02-27 : Fixes for index individual lock (archive) feature

### Fixed
- **Fixed locked folders being re-scanned on startup**: In the startup auto-update in `MainWindow.xaml.cs`, all paths from `GetPathsForSave()` were passed to `TriggerUpdateNow` without lock checking. Added `IsRootLocked` filtering
- **Added service-layer lock guard to `TriggerUpdateNow`**: Added defensive check so the service itself skips locked paths regardless of caller. Manual `RebuildRoot` / `UpdateDirectoryDiffAsync` are unaffected as they use separate paths
- **Prevented `UnmarkAsIndexed` for locked paths during `RequestFullRebuild`**: Fixed issue where indexed state of locked folders was cleared during full rebuild
- **Fixed waiting/creating display remaining after lock toggle**: Changed `ToggleLock` to immediately clear `IsWaiting`/`IsInProgress` when locking
- **Suppressed waiting/creating for locked items in `RefreshItemsStatus`**: Evaluates `IsLocked` first and always sets `IsInProgress`/`IsWaiting` to `false` for locked items
- **Fixed PropertyChanged not firing for `StatusKind`/`StatusText` on `IsLocked` change**: Added `StatusKind` and `StatusText` to `NotifyPropertyChangedFor`

## [0.12.8] - 2026-02-27 : TabListPopup high-density black hover redesign

### Changed
- **Redesigned tab list to "high-density, modern, black" style**: Compacted with MinHeight=32px + Padding top/bottom 2px, achieving density comparable to the main file list
- **Black hover effect**: On mouse over, background instantly switches (60ms) to the shared charcoal black (#545B64 = OnePointDarkColor), with text and icons inverted to white. Same color as title bar, favorites first level, and active tab for overall harmony. Fades out in 120ms on mouse leave
- **Thinned selection left accent bar to 2px**: Adjusted to AccentBrush 2px + CornerRadius 1 to shine sharply even on dark backgrounds
- **Changed close button to dark theme compatible**: White icon on row hover, dark red background (#3D0000) + red icon (#FF6B6B) on button hover. Compacted to 18px size
- **Shortened slide-in animation**: Snappy motion with 5px movement / 120ms fade / 140ms slide
- **Tightened popup exterior**: Reduced CornerRadius 8→6, Padding 4,4. Drop shadow maintains context menu unified specification

### Fixed
- **Fixed selected tab (1st item) not getting black background on hover**: Separated selection background (`SelectedBg`) and hover background (`HoverBg`) into separate Borders, fundamentally eliminating ColorAnimation conflicts. Hover Border overlays selection color completely from the front
- **Fixed text white inversion not working on selected row during hover**: Reorganized DataTemplate.Triggers definition order, placing hover triggers after selection triggers to guarantee priority
- **Avoided Frozen TranslateTransform exception**: Assigns new TranslateTransform(0, -5) on each Opened event
- **Avoided Frozen SolidColorBrush**: Uses explicit SolidColorBrush element for HoverBg, selection background controlled by Setter only

## [0.12.5] - 2026-02-27 : File list export fix

### Fixed
- **Fixed export to target files only**: Changed to exclude folder rows from output and generate file-only lists
- **Fixed relative path for files directly under current folder becoming absolute path**: Fixed to correctly output `.\` as relative path for files directly under the current folder

## [0.12.4] - 2026-02-27 : File list export polished to delivery document grade

### Changed
- **Redesigned file list export (Excel/CSV) to delivery document grade with 7 columns**: Unified column structure to "Name, Size, Type, Modified Date, Relative Folder Path, Folder Path (Shared), Open Folder"
- **Added shared path column (Column F)**: Auto-converts Box (`C:\Users\...\Box\Proj` → `Box\Proj`) and OneDrive (`C:\Users\...\OneDrive - Company\...` → `OneDrive - Company\...`) paths to environment-independent root name base. New `PathHelper.GetShareablePath` method
- **Changed Excel hyperlinks to absolute paths (file:/// URI)**: Clicking G column link opens the folder directly in Explorer. URI escaping supports spaces and Japanese characters
- **Unified Excel styling to report quality**: Header row with light gray background + bold + frozen panes, grid borders (Thin) on all cells, Medium outer border, AutoFit column widths with min/max guarantees, auto-filter applied
- **CSV output fully matches Excel version**: Unified 7-column header names, order, and path generation logic. UTF-8 (with BOM) to prevent character corruption. G column is full folder path (text)
- **Unified recursive scan to EnumerateFiles**: Skips inaccessible folders with IgnoreInaccessible

## [0.12.3] - 2026-02-27 : Fix for index lock state persistence

### Fixed
- **Fixed index lock state not saving to settings.json**: Changed to persist lock state in `IndexSearchLockedPaths` in `settings.json`. Restores locked paths from `settings.json` on app restart and applies to `IndexService`. Existing `|locked` suffix saving in `indexed_roots.json` maintained as supplementary
- **Fixed `UnmarkAsIndexed` clearing lock state**: During manual rebuild or interval rebuild, `UnmarkAsIndexed` was also removing paths from `_lockedRoots`, causing lock state to be lost. Since locking is a user setting independent of index state, removed `_lockedRoots` removal

## [0.12.2] - 2026-02-27 : Rename dialog polish

### Added
- **Custom preset button feature**: Added "+" button to rename dialog. Saves current input content as a custom button in SQLite, callable with one click from next time. Individual deletion via right-click "Delete this button". New `CustomRenameButtons` persistence table

### Changed
- **Popupified history display**: Placed a subtle history icon at the right end of the input field. History list hidden by default, shown on icon click or Down key. Selecting an item applies immediately and closes. Supports Enter/Up key keyboard operation
- **Improved minutes log generation logic**: When parent folder name starts with "8-digit number_" (e.g., `20260227_ProjectName`), automatically removes the date portion to generate `TodaysDate_MinutesLog_ProjectName`
- **Redesigned button groups**: Date, context, and custom buttons displayed in a single WrapPanel with wrapping. Unified to common template to suppress window bloat. MaxWidth restriction ensures width stability

## [0.12.1] - 2026-02-27 : Folder size display (utilizing index DB)

### Added
- **Folder size display feature**: When opening an indexed folder, the size column for each subfolder shows the total size aggregated from the index DB. No recursive filesystem access is performed; uses Lucene.NET PrefixQuery for fast aggregation of file sizes under each folder. Folder sizes displayed in italic, light color to visually distinguish from regular files. In icon view, displayed as "Folder - 1.2 GB" format. Folders not registered in the index show blank as before. CancellationToken immediately cancels previous aggregation when quickly navigating between folders, preventing UI freeze and result contamination

## [0.12.0] - 2026-02-27 : Index individual lock (archive) feature

### Added
- **Index individual lock (archive) feature**: Added lock feature to exclude folders that don't need updating from bulk and scheduled updates. Toggle lock/unlock per folder via right-click menu "Lock index update". Locked folders display a padlock icon (gray) in the list and are automatically excluded from "Update all", "Full rebuild", "Resume", and "Scheduled update" bulk operations. Manual individual operations (right-click → differential update/rebuild) are allowed even while locked. 24-hour freshness alert (amber display) is also suppressed for locked folders. Lock state persists in `indexed_roots.json` and is maintained after app restart

## [0.11.5] - 2026-02-27 : Root cause fix for GlowBar / DragAdorner misfiring on context menu open/close

### Fixed
- **Root cause fix for GlowBar cancel animation and DragAdorner misfiring on context menu open/close**: Root causes were three: (1) Passive Box monitoring on Shift+right-click was unnecessarily starting GlowBar, (2) Win32 `TrackPopupMenuEx` off-menu clicks were being forwarded to WPF and contaminating drag state, (3) `CancelMonitoringSilently` was unconditionally setting `IsFileOperationActive = false`, destroying the GlowBar of in-progress file operations. Multi-layered defense implemented:
  - **GlowBar removal**: Completely removed `StartGlowBar` from `StartSharedLinkClipboardMonitor` (passive monitoring). Toast notification + green flash on URL detection maintained
  - **GlowBar guard**: Added null checks for `_progressTimer / _glowStopwatch / _busyToken` to `StopMonitoring` / `CancelMonitoringSilently`. When BoxDriveService has not started GlowBar, UI properties like `IsFileOperationActive` are not touched at all
  - **Unified context menu flag**: Replaced `_explorerMenuActive` (Explorer-specific) with `_isContextMenuActive` (Zenith/Explorer unified). ON at beginning of `ShowContextMenuForItems`, OFF at all menu close paths
  - **Cooldown period**: Records timestamp (`_contextMenuClosedTick`) on menu close, suppresses mouse events within 150ms after close via `IsContextMenuCooldown()`. Prevents Win32 off-menu click WPF forwarding timing conflicts
  - **Mouse event guards**: Installed cooldown guards at 3 points: `PreviewMouseLeftButtonDown` / `PreviewMouseRightButtonDown` / `ListView_MouseMove`. Completely blocks drag state contamination (`_mouseDownItem` / `_dragStartPoint` setting) immediately after menu close
  - **Reliable drag state reset**: Explicitly resets `_mouseDownItem` / `_isRightDragPossible` / `_rightMouseDownItem` at menu start and all close paths (Zenith `Closed` / Explorer `onMenuClosed`)
  - **IO path protection**: No changes to `MainViewModel.CancelFileOperation` / `BeginFileOperation` / `EndFileOperation` / `FileOperationToken` and `DropFilesInternal` / `TurboCopyFileAsync`

## [0.11.3] - 2026-02-27 : Silenced GlowBar notification on context menu close

### Fixed
- **Fixed GlowBar unnaturally fading out on context menu close**: When displaying Explorer context menu via Shift+right-click on Box Drive items, `BoxDriveService.StartSharedLinkClipboardMonitor` immediately started GlowBar, and GlowBar kept running until timeout even when closing menu without selecting anything. Changed to immediately reset GlowBar via `CancelMonitoringSilently()` on menu close (without animation or notification). For Zenith menu, also cancels `CancellationTokenSource` on `Closed` event, silently interrupting `CloudShellMenuService.ExtractCloudMenuItemsAsync` async task. No changes to file copy/move/delete IO processing paths (`MainViewModel.FileOperationToken` / `CancelFileOperation`)

## [0.11.2] - 2026-02-27 : Context menu layout reorder to match Explorer

### Changed
- **Reorganized context menu item layout to match Explorer**: Reordered all 4 branches (background, single folder, single file, multi-selection) to follow Windows Explorer's standard "Open → Clipboard → Edit → New → Properties" flow. For background right-click, moved "Paste" to top and grouped "New" items together. For item selection, placed "Delete/Rename/Create shortcut" immediately after "Copy/Cut/Paste", followed by path copy and app-specific features, ending with "Properties → Link copy → Cloud menu → Explorer context menu" order

## [0.11.1] - 2026-02-27 : Context menu structure cleanup and GlowBar progress fix

### Changed
- **Context menu structure cleanup + "Link Copy" independence**: Separated cloud shell extension menu items from flat layout into two-tier structure: "Link Copy" (independent item) + "Cloud Menu >" (submenu). "Link Copy" executes rich HTML copy (`StartRichShareLinkMonitor`) in Box areas and standard Copy link in OneDrive areas, disabled for local folders. "Cloud Menu >" is a fixed submenu containing all shell extension items with standard behavior (`InvokeCloudMenuCommand`), preventing root menu reflow (jumping) as placeholder and item additions/removals are contained within the submenu. Added `CloudShellMenuService.FindCopyLinkItem` for unified detection via recursive search of Box "Copy link" / OneDrive "Copy link" / English "Copy link"

### Fixed
- **Fixed Box shared link copy GlowBar progress not reaching 100%**: `StopGlowBar()` was stopping the timer immediately, causing the display to freeze at the progress value during damping animation (e.g., 70%), then fading out via `EndFileOperation()` appearing as "cancelled". After fix, raises progress target to 100%, gives the timer 350ms of follow-up time, waits combined with minimum display time (800ms), then explicitly sets `FileOperationProgress = 100` before executing fade-out

## [0.11.0] - 2026-02-27 : RenameDialog, Box shared link HTML copy, GlowBar progress display

### Changed
- **Reliable cloud menu display**: Improved cloud shell extension menus to reliably appear from the first right-click on Box / SharePoint folders. `ConcurrentDictionary` cache (TTL 60s, max 20 entries) enables synchronous instant display from the second time. First time async-ifies the menu with a short 300ms await for COM completion; shows "Loading..." placeholder and replaces later if not ready in time. Background prefetch on folder navigation improves cache hit rate on right-click. Increased default timeout from 2000ms → 3000ms

### Added
- **Box shared link individual URL retrieval + HTML format copy + GlowBar progress display**: "Share > Copy link" sequentially retrieves individual Box shared URLs for each selected item, setting both HTML (CF_HTML) and plain text format to clipboard. In rich editors like Teams / Outlook / Slack, item names are pasted as clickable hyperlinks; in plain editors like Notepad, falls back to "ItemName ( URL )" format. Three-layer structure: parent folder Box relative path + parent folder URL + linked name for each item. Each item's URL reconstructs IContextMenu via `CloudShellMenuService.ExtractCloudMenuItemsAsync` on STA thread, auto-detecting and executing "Copy link" command. On URL retrieval failure, outputs name only (without link) gracefully. Introduced DispatcherTimer follow-up GlowBar progress display, smoothly visualizing all phases: folder URL retrieval (2→9%) → each item URL retrieval (10→90%, N/Total display) → clipboard write (95%) → auto fade-out. GlowBar also displayed for single URL retrieval on Shift+right-click. Minimum display time of 800ms guaranteed by Stopwatch
- **RenameDialog (dedicated rename dialog)**: New dedicated dialog `RenameDialog` for file/folder renaming. Same pattern as InputBox (singleton + DispatcherFrame modal) with `WindowStyle="None"` + `AllowsTransparency="True"` + rounded corners + DropShadow premium design. 3 preset input buttons (`YYYYMMDD` / `YYYYMMDD_` / `_YYYYMMDD`) for instant today's date insertion. 2 context candidate buttons (parent folder name / `YYYYMMDD_MinutesLog_ParentFolderName`) displayed (auto-hidden at drive root). SQLite-linked input history popup (max 100 entries, LastUsed DESC) auto-displayed on TextBox focus with instant application on history selection. Extension separation display inherits same logic as InputBox. Used for F2 / right-click "Rename" / navigation pane folder rename. Generic input for favorites etc. continues to use existing InputBox

## [0.10.1] - 2026-02-27 : Stability improvement pack (ZenithDialog, RestartManager, FSW backoff, memory leak fix, logging enhancement)

### Added
- **ZenithDialog (custom MessageBox)**: Implemented custom modal dialog (`ZenithDialog`). Same pattern as InputBox (singleton + DispatcherFrame modal) with `WindowStyle="None"` + `AllowsTransparency="True"` + rounded corners + DropShadow premium design. Supports 4 icon types (PackIconLucide): Info / Warning / Error / Question. 3 button configurations: OK / OKCancel / YesNo. Replaced all MessageBox.Show (approximately 40 locations) with ZenithDialog except for 2 crash handlers in App.xaml.cs
- **RestartManager process detection**: On IOException during file operations (rename, delete, copy, move, D&D), uses Windows Restart Manager API (`RmStartSession` / `RmRegisterResources` / `RmGetList`) to identify the process locking the file, displaying user-friendly error messages like "Cannot operate because Excel is using the file". Also handles UnauthorizedAccessException / disk space shortage
- **Startup diagnostic logging**: Logs version, OS, .NET runtime, and PID diagnostic information on app startup (`LogStartupDiagnostics`)
- **Index view double-click to confirm registered content**: Double-clicking an item in the index search target folder list performs the same action as the right-click menu "Confirm index registration" (opens a search result tab in A pane to list index registered content)
- **Index view 4-column single-row layout**: Redesigned folder list to [location icon | folder name | completion date | count/status] 4-column structure. Separated Col 2 (date) and Col 3 (count/status) into `SharedSizeGroup` aligned independent columns. On completion, Col 2 shows date (`yyyy/MM/dd HH:mm`), Col 3 shows count (`(12,345)` format); amber freshness alert (#C68958) if over 24 hours, gray (#888888) otherwise. During creation, hides date and shows spinner + status; waiting shows italic light color; uncreated shows amber. Unified Col 2/Col 3 font size to 12pt matching folder name. Added `CompactDateText`, `CountBadgeText`, `IsStale` properties to `IndexSearchTargetItemViewModel`. Location icon syncs with navigation pane's 4 types (`PathHelper.DetermineSourceType`). `LastIndexedDateTime` persisted as Dictionary format (path → ISO 8601 date) in `indexed_roots.json` (backward compatible with legacy List format)

### Changed
- **Removed version string from manual window title**: Removed `(v0.x.x)` notation from standalone window title, eliminating need for updates on each version bump
- **Unified FileSystemWatcher buffer size**: Removed cloud sync folder detection branching (65536 / 8192) and unified to 64KB for all environments
- **FileSystemWatcher exponential backoff reconnection**: Changed from immediate reconnection on error to exponential backoff of 1s→2s→4s→...→max 30s (fast calculation via integer bit shift). After max 10 retries, shows "Folder monitoring has stopped" notification and waits for manual F5. Shows "Folder monitoring resumed" notification on successful reconnection. Logs HResult and attempt count. Eliminates thread race conditions with atomic CTS swap (`Interlocked.Exchange`), resolves thread pool blocking with `BeginInvoke`
- **HResult recording in exception logs**: Added `HResult=0x{HResult:X8}` to the first line and InnerException line of `FormatException`, facilitating Windows error code identification
- **ZenithDialog brush caching**: Pre-generates `SolidColorBrush` with `static readonly` + `Freeze()`, eliminating GC pressure from recreating brush objects on each display. Changed icon mapping to array index O(1) lookup. Skips reconstruction when button layout is same as previous
- **RestartManager robustness improvement**: Added null/empty path guard clauses, P/Invoke failure logging, `HashSet` deduplication, null-safety for `GetFriendlyErrorMessage`. Fixed issue of passing `string.Join` concatenated paths in RM query on delete error, changed to pass only the first file path

### Fixed
- **Fixed FileTypeFilterItem PropertyChanged leak**: Changed `PropertyChanged` handler subscribed via anonymous lambda to named method (`OnFileTypeFilterItemPropertyChanged`), unsubscribing in `Dispose()`. Eliminated memory leak from repeated tab open/close
- **Prevented ZenithDialog double invocation**: Clears `_frame` first in `CloseWithResult` to prevent re-entry. Protected `DragMove()` with `IsVisible` guard, eliminating `InvalidOperationException` during window hide transition

## [0.10.0] - 2026-02-27 : PC view, New file menu, cloud integration, Excel/CSV export enhancement, favorites backup

### Added
- **Virtual "PC" root navigation**: "Up" button from drive root (C:\ etc.) navigates to a virtual "PC (My Computer)" view listing all drives. PC view displays drive name, capacity, type, and icon; double-click navigates to drive root. Added "PC" segment at the beginning of breadcrumb list, clickable to navigate to PC view. PC dropdown in breadcrumb allows drive selection. Typing "PC" in address bar and pressing Enter navigates to PC view
- **"New" submenu**: Added "New >" submenu to background right-click menu. Scans Windows registry (HKCR ShellNew entries) and lists installed application templates (Word / Excel / PowerPoint etc.) with icons. Selection creates template copy or empty file and automatically shows rename dialog. Registry scan performed in background on startup and cached
- **Cloud shell extension menu integration**: On right-click in Box / SharePoint / OneDrive folders, filter-extracts cloud service-specific shell extension menu items ("Share on Box" etc.) and integrates into custom context menu. Builds IContextMenu on STA thread and displays only relevant items via keyword filter. Async retrieval with 1.5-second timeout
- **Favorites Excel backup**: Added FileSpreadsheet icon at bottom of favorites view. Enables backup saving of favorites data (No, Group, Display Name, Full Path, Type, Open Link) in Excel format. Expands group hierarchy in "Parent > Child" format, outputting all items including organizing folders. Column F uses HYPERLINK function referencing Column D full path. Grid borders, header freeze, auto-filter, AutoFit included. Smooth progress display via GlowBar
- **Box shared link rich clipboard copy**: When executing "Share > Copy shared link" within Box folders, stores Box path + shared URL + target file name list in 3-layer rich format to clipboard. Background right-click includes all item names in folder; item selection includes selected file names. Detects Box shell extension URL write via WM_CLIPBOARDUPDATE monitoring and formats immediately

### Fixed
- **ShellNew registry scan for "New" submenu**: Office and other apps register templates in nested `.\ext\{ProgID}\ShellNew` structure (e.g., `.docx\Word.Document.12\ShellNew`), but only `.ext\ShellNew` directly under was being searched, causing items not to be detected. Changed to also search under ProgID subkeys
- **Cloud menu submenu not expanding**: Fixed issue where items with submenus on the shell extension side (e.g., Box "Share") were displayed as flat single items. When items with submenus are detected, collects all child items and builds as nested WPF MenuItem
- **Context menu screen overflow**: Fixed issue where items at the bottom of screen became unselectable when many menu items exist. Added ScrollViewer to ContextMenu template with dynamic MaxHeight based on screen height for scrollability. Improved to accurate position correction considering shadow margin (28px) and multi-monitor work area retrieval (WindowHelper.GetWorkArea). Added ScrollViewer to submenu Popup for overflow protection

### Changed
- **Enhanced sharing and visibility of Excel/CSV output**: Unified column structure for both Excel and CSV. Changed path column from absolute path to relative path from current folder (`.\Sub\` format), enabling shared filter usage even in environments where usernames differ on Box etc. Unified size column to human-readable format (`1.5 MB` etc.). Changed CSV headers to "No, File Name, Relative Folder Path, Modified Date, Size". Rewrote Excel G column hyperlinks to `=HYPERLINK(".\relative path\","Open")` function format so links work from any PC when sharing with folder structure. Applied grid borders to entire data range (including header) in Excel with Medium outer border for report-style appearance. Changed header background color to theme-matched sepia (#E6E1D3). Changed column widths to AutoFit with minimum width guarantee
- **Premium plate design overhaul of custom context menu**: Dual border structure (outer #B0B0B0 + 1px #FEFEFE light rim) expressing "precision-machined edges". DropShadow (Blur=24, Depth=6, Opacity=0.22, Dir=315) flowing to lower-right with Margin="0,0,28,28" to reserve drawing area for lower-right only and clip upper-left shadow. Text color raised to deep charcoal (#222222), icons to dark tone (#444444) for font weight assurance. On hover, background inverts to charcoal black (#545B64 = OnePointDark) matching main body, switching text, icons, arrows, and shortcuts to white for high-contrast dark style with sharp selection feel. Resolved issue where global TextBlock style Foreground took priority over inheritance by replacing Header's ContentPresenter with explicit TextBlock (Foreground=TemplateBinding). Changed destructive action hover color to #FF6B6B (dark background compatible). Adjusted separator to #D5D5D0. Right-drag custom menu clips upper-left shadow with ClipToBounds wrapper, same structure applied to submenu Popup
- **Expanded keywords and search for cloud shell extension menu**: Added OneDrive/SharePoint-specific keywords ("Copy link", "Manage access permissions", "View online", "Version history" etc.) to filter with partial matching support for both Japanese and English. Accurate submenu detection using `MIIM_SUBMENU` flag and recursive scan up to depth 3 for flat expansion of nested items
- **Improved display density of custom context menu**: Changed to compact row spacing comparable to Explorer. Reduced MenuItem MinHeight from 34→22px, icon column width from 44→30px, significantly reduced top/bottom padding. Compressed separator margins from `40,8,16,8` → `32,2,12,2`. Incorporated submenu arrow (Chevron) into ControlTemplate with auto-display via Role=SubmenuHeader trigger. Reduced ContextMenu outer Padding from `6,8` → `4,4`. Explicitly applied ItemContainerStyle in code-behind BuildZenithContextMenu, propagating unified style to "New" submenu and cloud menu submenus

## [0.9.7] - 2026-02-26 : Favorites tree relationship lines, layout optimization, full continuity

### Added
- **Favorites tree relationship lines (Tree Lines)**: Added vertical line + horizontal connector guide lines to child items in favorites view. Last child shows L-shaped (vertical line stops at center), non-last children show full-height vertical line. No lines displayed for Level 0 category headers. Drawn in warm gray (#C4BFB0) that blends with sepia background

### Changed
- **Removed left-side margin of favorites items**: Eliminated environment icon column and switched to direct icon placement, reduced FullRowBackground left margin (2→0px), Padding (3→1px), icon Grid left margin (2→0px) for total 6px compression. Extended horizontal connector Width=8→27 with `Panel.ZIndex="1"` to draw over Border so relationship lines closely connect to icon left edge. Invalid paths show TriangleAlert icon (#C4A03C) to the right of the name; Collapsed when path is valid to not occupy width
- **Full continuity and improved drawing precision of relationship lines**: Shifted vertical line axis 3px right (Margin `-10`→`-7`) for better integration with icons. Removed `Grid.RowSpan="2"` from `TreeLineVertFull` to isolate to Row 0 only, new `TreeLineContinuation` (Row 1) explicitly draws continuation vertical line for child element area, ensuring lines never break even at 2nd/3rd hierarchy levels and beyond. Added `SnapsToDevicePixels="True"` to all Rectangles to prevent 1px line blur/disappearance on high DPI
- **Unified relationship line style to app-wide TreeView**: Applied same ControlTemplate (vertical line, horizontal connector, continuation line, ChevronRight/Down expander, CornerRadius 3 background) to folder tree (DirectoryTree) and folder selection dialog (SelectFolderDialog). Compressed Padding `4,2`→`1,1`, icon margin `6`→`4px` for unified high-density display

## [0.9.6] - 2026-02-26 : Startup behavior improvement (position pre-determination + fade & slide effects)

### Added
- **Drag & drop registration to index view**: Register search target folders simply by dragging a folder from A/B pane and dropping it onto the sidebar index view area. Highlight display feedback when mouse enters drop zone. Accepts folders only (files ignored), deduplication check, path existence verification performed asynchronously to prevent freezing. Placeholder with icon and guidance displayed in empty state
- Added Excel (.xlsx) output feature using ClosedXML (context menu "Export folder contents to Excel")

### Changed
- **Improved startup behavior**: Synchronously reads settings.json before MainWindow creation and immediately applies window position, eliminating the two-stage display of "appears at center first → jumps to saved position". Added 400ms fade & slide animation (Opacity 0→1, Y 20→0) to content Grid for smooth startup effect
- **Prioritized welcome message display**: During startup welcome animation, suppresses notification message status bar display via `NotificationService.IsWelcomeActive` flag (logs only). Center notification group (including GlowBar status text) also set to `Collapsed`, guaranteeing only the welcome message is displayed even if CSV/Excel output messages interrupt
- **Improved favorites view display density**: Compressed TreeViewItem Padding `4,2` → `3,1`, row spacing margin `2,1,10,1` → `2,0,10,0`, Level 0 category MinHeight `28` → `24`, margin `2,3,10,3` → `2,2,10,2`, icon left/right margin `4,0,6,0` → `2,0,4,0`, increasing items visible without scrolling by approximately 1.3x
- Switched search processing (index search / local search) progress display from `IsLoading` overlay to GlowBar (DispatcherTimer follow-up method), showing real-time progress based on search phase. Fast path (immediate results) goes 2→50→95%; progressive re-search path (during index creation) advances +5% per re-search loop. On cancel, directly resets properties to avoid competing with EndFileOperation fade
- Changed CSV output save destination to automatically determined current folder (removed SaveFileDialog). Switched progress display from `IsLoading` overlay to GlowBar (DispatcherTimer follow-up method), showing real-time count-based progress: scan 2→9%, writing 10→90%, save 95%
- Switched Excel output progress display from `IsLoading` overlay to GlowBar (cyan progress bar), showing real-time count-based progress rate
- Changed GlowBar animation duration to adaptive type that stretches from 150-800ms based on jump width, achieving smooth stretching effect even for large progress changes
- Changed Excel output scan phase to sequential enumeration reporting 2%→8% virtual progress, subdivided writing phase reporting interval to 1% of total count
- Changed Excel output save destination to automatically determined current folder (removed SaveFileDialog)
- Removed popup dialog on Excel output completion (simplified to toast notification only)
- Changed default pane count on first launch (no settings.json) from 2 → 1 (single pane mode)

### Fixed
- **Fixed breadcrumb list and tab header display truncation/disappearance**: Forced `ScrollViewer.InvalidateMeasure/InvalidateArrange` on pane width change to strengthen rendering tracking. Manually notified `OnPropertyChanged(PathSegments)` at Render priority after path change to reliably trigger View re-rendering. Added `TextTrimming="CharacterEllipsis"` + `MaxWidth="260"` to breadcrumb segments for elegant truncation of long folder names. Changed tab headers from fixed `Width="150"` to `MinWidth="60"` / `MaxWidth="150"` to follow pane width. Dynamically tracked slide indicator width to tab's `ActualWidth`
- **Fixed index view folder name display**: Changed `GridView` `Width="Auto"` to dynamically follow sidebar width via `SizeChanged` event, fixing `TextTrimming="CharacterEllipsis"` to work correctly. Changed to `DockPanel` inside cell template to guarantee finite width for folder name `TextBlock`
- **Fixed search bar history dropdown briefly appearing on index view folder click**: Eliminated with 3-tier defense — (1) Removed `FocusSearchBox()` (focus transfer to pane search bar) from index view branch in `Sidebar_PreviewMouseLeftButtonDown`, changed to `IndexSearchTargetList.Focus()`, (2) Controlled `SearchTextBox_GotFocus` with `_userInitiatedSearchFocus` flag to not open history on programmatic focus, (3) Verified `SearchTextBox.IsKeyboardFocusWithin` after `await` in `OpenSearchHistory()` to suppress popup if focus left during async wait
- **Root fix for input sub-windows appearing completely black**: Hardcoded `Background` / `Foreground` from `StaticResource` to direct color codes (`#F5F1E3` / `#1A1A1A`) across all 9 dialogs (InputBox / AddFolderDialog / AddToFavoritesDialog / DescriptionEditDialog / SelectFolderDialog / SelectExplorerWindowsDialog / BackupListDialog / ChangelogWindow / ManualWindow), guaranteeing immediate rendering independent of resource dictionary load timing. Added `FocusManager.FocusedElement` to all input dialogs for guaranteed immediate caret blinking. Removed InputBox `Opacity=0→1` hack (cause of black frames on some GPUs). Created `BaseDialogStyle` in `AppResources.xaml` for centralized common property management

## [0.9.5] - 2026-02-25 : Full async path validation on startup

### Fixed
- **Full async path validation on startup**: Fixed issue where `DriveInfo.IsReady` and `Directory.Exists` caused OS-level timeout (tens of seconds) when settings.json contained network paths (UNC or mapped drives), freezing startup. Removed `DriveInfo` call from `PathHelper.IsNetworkPath` to judge by UNC prefix only, changed `DirectoryExistsSafeAsync` to timeout-based async for all paths, created `DirectoryTreeViewModel.LoadDrivesAsync` to check each drive's `IsReady` with 500ms timeout, replaced all call sites in `MainViewModel.InitializeAsync`, sidebar mode switch, and tree refresh with async versions
- **Completely eliminated white flash and staged display on startup**: Hardcoded `Visibility="Hidden"` + `Background="#F5F1E3"` on Window, removed `mainWindow.Show()`. Uses `Dispatcher.BeginInvoke(DispatcherPriority.Render)` to execute `Visibility.Visible` + `Activate()` in one shot after rendering preparation completes, showing only the finished screen
- **Fundamental reconstruction of startup process (freeze elimination, 1-2 second startup guarantee)**: Completely eliminated UI thread I/O (`EnsureAppFolders` moved to background). Removed DB wait (`await StartupInitTask`) from `InitializeAsync`; DB defers wait to history display time. Removed `DirectoryExistsSafeAsync` existence check for settings paths, changed to string resolution only (invalid paths handled by `NavigateAsync`). Fire-and-forget tree loading. Added 1-second timeout for settings file loading and 2-second watchdog for `InitializeAsync`; on timeout, force continues with default settings / partial initialization

## [0.9.4] - 2026-02-25 : Commercial-grade stability and reliability refactoring

### Changed
- **Rewrote MANUAL.md for readability and scannability**: Added app icon emojis to all headings, placed summary quotes at the beginning of major sections, converted app setting options, navigation operations, tab operations, tree view operations, folder structure, file structure etc. to table format, split long paragraphs into sub-headings + bullet points, simplified verbose endings to strengthen overall visual hierarchy
- Centralized error handling: Created SafeExecuteHelper, unified Debug.WriteLine → App.FileLogger
- Added .ConfigureAwait(false) to service layer (deadlock prevention)
- Rewrote NotificationService ContinueWith to async/await
- Changed FavoritesViewModel.TriggerLockWarning to async Task
- Integrated IsDescendantOf into VisualTreeExtensions (eliminated 3-file duplication)

### Fixed
- **Eliminated column jitter when file list scrollbar appears**: Set `ScrollViewer.VerticalScrollBarVisibility="Visible"` on `FileListView` to always reserve vertical scrollbar display area. Fluent Design scrollbar (12px, transparent background) hides thumb when scrolling is unnecessary while maintaining space, completely preventing column width/position changes due to file count fluctuations
- Fixed unprotected exception in DatabaseService table initialization
- Prevented crash on index corruption in IndexService.InitializeWriter
- Prevented crash on file lock in SettingsBackupService.Restore/SetLock
- Fixed _incrementalSearchTimer stop leak in TabContentControl
- Fixed _driveRefreshDebounceTimer stop leak in MainWindow
- Fixed exception swallowing in TabItemViewModel UpdateDirectoryDiffAsync
- Added log recording to empty catch blocks in DatabaseService

## [0.9.3] - 2026-02-25 : Optimized initial startup default settings

### Fixed
- **Fixed focus loss when confirming without changing name after new creation**: When OK was pressed in InputBox in `RenameItem` but name was unchanged (`newName == item.Name`), it immediately returned, causing focus loss. Changed to execute `RequestFocusAfterRefresh` + `PastedFileNamesToSelect` and `LoadDirectoryAsync()` even when name is unchanged on OK confirmation, guaranteeing selection, scroll, and focus of created item
- **Robustified new creation for cloud sync folders like OneDrive**: For new folder/file creation on desktop or My Documents (OneDrive sync folders), introduced exponential backoff retry for temporary `IOException` (file lock) by sync software. Enhanced retry with max 5 attempts (500ms base) for cloud sync paths + post-creation existence verification loop to prevent inconsistency before sync completion. On failure, logs detailed info including HResult/InnerException to `App.FileLogger` and displays specific error message "Sync software may be locking the file". Added `Error` event handler to `FileSystemWatcher` for auto re-setup on monitoring disconnection. Expanded `InternalBufferSize` to 64KB for cloud sync paths to prevent event loss, expanded throttling delay to 1000ms to absorb "create→delete→recreate" sync cycles. Added `[DEBUG]` logs to all steps from new creation start to UI reflection for tracking on recurrence
- **Improved index search accuracy (100% partial match hits)**: Redesigned to always execute hybrid search of `name` (JapaneseAnalyzer) and `name_raw` (wildcard `*keyword*`), ensuring no misses in partial matching of Japanese file names. Auto-fallback to OR search when multi-word AND search returns 0 results, always presenting candidates
- **Fixed first search miss bug and progressive search**: When searching an unindexed folder, starts index creation asynchronously while polling re-search every 2 seconds to progressively display results. Visualizes "Creating index" with scan bar (IsLoading), achieving a dynamic experience where results "gradually increase"
- **Immediate search execution on search mode switch**: When clicking the icon at the left of the search bar (magnifying glass ⇔ lightning bolt) to toggle between normal/index search, immediately re-executes search if text exists in search box. Eliminates need to re-type or re-press Enter after mode switch
- **Dynamic update of count display after filter application**: Changed the "XX items" display at the right of the search bar to update in sync with filter bar (Folder, Excel, Word etc.) ON/OFF. Even with 100 total hits, if only Excel filter is ON, shows "10 items" matching the count visible to the user
- **100% guaranteed InputBox (rename dialog) focus**: Eliminated with two-pronged approach. (1) InputBox side: Multi-stage focus via 3 events (`Loaded`, `IsVisibleChanged`, `ContentRendered`) × 4 priorities (`Loaded`/`Input`/`ContextIdle`/`ApplicationIdle`). `Topmost=true` trick immediately after `ShowAsModal()` for OS-level front-most then immediately restored. (2) Caller side: Added `InputBox.IsOpen` guard at the beginning of `ApplyFocusAfterRefresh` to physically block focus theft by 2nd+ Refresh from FileSystemWatcher etc. When rename is scheduled, does not execute `list.Focus()`, delays `RenameItemCommand` execution to `DispatcherPriority.Input` by 1 frame to show dialog after UI noise settles. Applied `InputBox.IsOpen` guard to all locations: `ApplySelectionRestore`, `FocusFirstSelectedItem`, Back navigation restore, `OnRefreshCompleted` restore
- **Guaranteed auto-selection and scroll for newly created items**: Changed fire-and-forget `Refresh()` in `CreateNewFolder`/`CreateNewTextFile` to `await LoadDirectoryAsync()`, ensuring items reliably exist in the list after MergeItems completion when `ApplyFocusAfterRefresh` executes. Forced `UpdateLayout()` before `ScrollIntoView` to scroll after layout finalization. For rename path, re-executes `ScrollIntoView` + InputBox display after 1-frame delay for "screen smoothly scrolls and new item highlights → immediately keyboard input ready" experience. Auto-retry when item not found
- **Item tracking and focus restoration after rename**: Made `RenameItem` `async Task`, sets `RequestFocusAfterRefresh` + `PastedFileNamesToSelect` with new name after rename confirmation and waits for completion with `await LoadDirectoryAsync()`. Even when sort order changes, the renamed item is reliably selected, scrolled, and focused, enabling immediate keyboard continuation (Enter to enter folder / Ctrl+C to copy). Also restores focus to original item on cancel
- **Eliminated focus loss after deletion**: Saves minimum index of selected items before deletion in `DeleteItems`, sets `SelectionIndexToRestore` after deletion completion and reliably waits for list update with `await LoadDirectoryAsync()`. Added `SelectionIndexToRestore` check to `OnRefreshCompleted`, executing `ApplySelectionRestore` at ContextIdle priority after refresh completion. Clamps index with `Math.Min` on last item deletion to focus previous item. Retries at Input priority for ScrollIntoView + Focus when ItemContainer is not generated due to virtualization
- **Unified favorites registration duplicate check and feedback**: Consolidated duplicate check and feedback (MessageBox + status bar notification + 1 log entry) into `FavoritesViewModel.NotifyDuplicate`. All registration paths (star button, D&D, context menu) fire same 3-tier feedback, eliminating double log output. Star button-specific errors for empty/non-existent paths also notified with red shake animation
- **Ultra-fast startup: eliminated startup freeze in corporate network environments**: Changed `App.OnStartup` to immediately display MainWindow without waiting for DB/IndexService initialization completion. Heavy initialization runs as background fire-and-forget, with `Window_Loaded` side awaiting as needed. Window appears and is operable within 1 second in any environment
- **Timeout-based existence check for network paths**: Created `PathHelper.DirectoryExistsSafeAsync` to abort `Directory.Exists` for network paths (UNC/mapped drives) with 300ms timeout. Used at 4 locations: `MainViewModel.InitializeAsync`, `FilePaneViewModel.ResolvePathForTabRestoreAsync`, `TabItemViewModel.NavigateAsync`, `TabItemViewModel.LoadDirectoryAsync`, eliminating freeze on network non-response
- **Delayed IndexService startup execution**: Changed `IndexService.ConfigureIndexUpdate` to execute with 2-second delay after startup, improving UI responsiveness immediately after startup

### Added
- **Single Instance prevention**: Detects duplicate launch with `Mutex` at the beginning of `OnStartup`. If an instance is already running, retrieves existing process `MainWindowHandle` via `Process.GetProcessesByName`, restores with `ShowWindow(SW_RESTORE)` if minimized, brings to front with `SetForegroundWindow`, then immediately `Shutdown()` the new process. Mutex check executes before settings file/DB loading, completely avoiding file conflicts. Safely releases Mutex in `App_Exit`
- **Cloud sync path detection (`PathHelper.IsCloudSyncedPath`)**: New method to detect paths under OneDrive Personal / Business, SharePoint, Box Drive via environment variables and keyword-based detection. Used for retry intensity and monitoring delay branching
- **File creation retry helper (`FileIoRetryHelper.CreateDirectoryWithRetryAsync` / `CreateFileWithRetryAsync`)**: New async methods combining Polly-based exponential backoff retry + post-creation existence verification. Two-tier configuration: 3 attempts/200ms for normal paths, 5 attempts/500ms for cloud sync paths
- **Automatic tree view update on drive connect/disconnect detection**: Hooks WM_DEVICECHANGE (DBT_DEVICEARRIVAL / DBT_DEVICEREMOVECOMPLETE) to automatically update navigation pane tree view on USB drive or SD card insertion/removal. 600ms debounce aggregates consecutive notifications, background drive info retrieval + differential update (Add/Remove only) for ultra-low load operation
- **Fundamentally improved tab D&D to modern browser style**: Fully revamped `TabControlDragDropBehavior`. Fixed bug where DockPanel's `TabHeader_DragOver`/`TabHeader_Drop` was hijacking tab D&D events, unifying all events to TabControl Behavior. Implemented precise insertion index calculation (`CalcInsertionInfo`) that scans TabItem boundaries in TabPanel and compares mouse X coordinate with center points. Within same pane, reliably updates collection with `ObservableCollection.Move`; for cross-pane moves, inserts at specified position with `Insert(targetIndex)`. Expanded drag threshold to 10px to prevent accidental operations. All collection operations via Dispatcher. Header area (36px) determination cancels same-pane D&D in content area, cross-pane appends to end
- **Tab D&D ghost image + semi-transparency**: Displays `DragAdorner` with tab name following cursor during drag. Simultaneously reduces drag source tab to Opacity 0.4 for Chrome-style visual feedback. Position updated via `GiveFeedback` event, reliably restored in `finally` block
- **TabPanel level insertion indicator**: Replaced per-TabItem adorner with `TabPanelInsertionAdorner` drawing blue vertical line + dot at X coordinate on TabPanel. 120ms CubicEase fade-in animation. Immediately redraws via `InvalidateVisual` on position update, preventing DragLeave flicker on child element transitions with bounds checking
- **Tab move audit logging**: Records in FileLogger as `[Tab] Moved:` / `[Tab] Reordered:` format

### Changed
- **Unified loading display to app standard indicator**: Removed per-pane custom loading overlay (`IsTabLoading` + rotation animation) and full-screen loading overlay (`LoadingOverlay` control: semi-transparent background + operation blocking). Changed to use scan bar at status bar top (`IsLoading` linked, horizontal scanning line) for folder loading/search, and spinner (`BeginBusy`) for drive auto-update. Eliminated screen flash and improved display consistency
- **Consolidated `PathHelper.IsNetworkPath`**: Moved and integrated `IndexService`'s private `IsNetworkPath` to `PathHelper.IsNetworkPath`, eliminating code duplication
- **Optimized initial startup default settings**: Improved first-launch experience when `settings.json` doesn't exist. Reduced window size to 1400x850 centered on screen (replaced hardcoded coordinates with auto-centering on primary screen via `NormalizeWindowPlacement` NaN detection). Unified file list sort default to name ascending (`PaneSettings.SortProperty` changed from `LastModified` → `Name`, `SortDirection` from `Descending` → `Ascending`, resolving discrepancy with `TabItemViewModel` actual defaults). Reduced sidebar width from 330px → 260px to secure file list working area in smaller window

## [0.9.2] - 2026-02-23 : Status bar display precision improvement and startup effect refinement

### Fixed
- **Status bar display precision improvement (eliminated jitter during startup effects)**: Fixed content area height to 28px and replaced internal `StackPanel` with `Grid`. Completely eliminated "frame vertical movement" from layout recalculation during display switching
- **Fixed startup animation initial position offset**: Forced `UpdateLayout()` execution immediately before animation start and adjusted initial offset, resolving issue where text appeared one row lower at the start of the effect
- **Physically eliminated status bar display overlap bug**: Fixed issue where normal status information (item count and notification messages) overlapped during startup welcome animation. Physically bypasses `NotificationService.Notify` writes (completely returns) for 30 seconds from startup, prohibiting all writes. Also physically eliminates normal TextBlock by setting `Visibility` to `Collapsed` while welcome panel is displayed

### Changed
- **Extended startup effect display duration and cross-fade return**: Extended startup "Ready...Complete" message display to 5 seconds, followed by slow 1-second cross-fade to normal status display. Unified message color to normal status color (#90A4AE) for seamless transition
- **Refined status bar color palette (away from fluorescent colors)**: Replaced previous fluorescent colors (Cyan etc.) with professional blue that blends with dark theme. Adjusted to startup message (#4FC3F7 Light Sky Blue) and normal status text (#90A4AE Blue Grey). Refined to elegant saturation that doesn't interfere with GlowBar glow
- **Polished startup welcome effect**: Changed exit effect to Opacity 100%→0%, TranslateY 0→-10 (upward slide) with 0.5s duration. After exit completion, restores normal TextBlock to `Visibility="Visible"` for a more refined user experience
- **Startup welcome animation (Fade-In & Slide-Up, code-behind centralized control)**: Placed dedicated `WelcomePanel` (StackPanel + TranslateTransform) at status bar center. Animation managed by `StartWelcomeAnimation()` method, no XAML `EventTrigger`. `_welcomeStarted` flag prevents double firing. Starts animation after `Window_Loaded` completion (`InitializeAsync` completion + focus setting): (1) Entrance 0.6s (Opacity 0→1, TranslateY 10→0, PowerEase(2) EaseOut), (2) Hold 2.4s, (3) Exit 0.5s (Opacity 1→0, TranslateY 0→-10, PowerEase(2) EaseIn), 3 phases executed with `Storyboard.Begin(this, isControllable:true)`. Left item count area wrapped with `x:Name="StatusInfoGroup"` set to initial `Opacity="0"`. Deleted legacy `App.Notification.Notify("Welcome to Zenith Filer...")` call to eliminate double display. Hidden effect: added DropShadowEffect shimmer glow (0.8-1.6s) to "Turbo Engine Ready"
- **Startup message priority display (30-second notification block) and status bar blue unified design**: Sets `_startupPhaseEnd = DateTime.UtcNow.AddSeconds(30)` in constructor, keeping item count area (`StatusInfoGroup`) hidden for 30 seconds after startup. After welcome animation completion (approximately 3.5s), calculates remaining time with `DispatcherTimer` and after 30 seconds, displays `StatusInfoGroup` with `FadeInStatusInfoGroup()` (0.6s PowerEase fade-in). Added TranslateY 0→-10 upward slide to exit animation for rich exit effect where panel rises upward while fading out. Unified color palette to blue: `WelcomePanel` "Welcome to Zenith Filer" = `#4FC3F7` (LightSkyBlue), normal status text (`StatusInfoGroup`) = `#90A4AE` (BlueGrey)

## [0.9.1] - 2026-02-23 : Settings persistence fix and PDF target refinement

### Added
- **PDF conversion feature expansion (changed save destination to same folder, removed unnecessary UI)**: Changed PDF conversion save destination from "current folder of opposite pane" to "operating current folder (same folder)". Fixed unnecessary full-screen loading overlay (`IsLoading` / scan bar) displaying during PDF conversion, cleaned up to GlowBar + spinner only. Unified right-click menu wording to "Save to same folder"
- **PDF conversion feature (image/Office documents → PDF, save to opposite pane, multiple files combined into Combined_datetime.pdf)**: Added feature to convert selected images (`.jpg`, `.jpeg`, `.png`, `.bmp`, `.gif`) or Office documents (`.docx`, `.xlsx`, `.pptx` etc.) to PDF from the file list right-click menu and save to the opposite pane's current folder. Single files saved as "original filename.pdf". Multiple files individually converted to PDF then page-merged with PDFsharp into "Combined_yyyyMMddHHmmss.pdf". Image conversion uses PDFsharp 6.x, Office conversion uses dynamic COM (Word.Application / Excel.Application / PowerPoint.Application). Notifies via dialog if Office is not installed. Shows progress with GlowBar, scan bar, and spinner during conversion
- **Changed CSV output default save destination to target folder itself for convenience**: Added `InitialDirectory = folderPath` to `SaveFileDialog` in `ExportSubtreeToCsvAsync`. Target folder is initially displayed when dialog opens, so CSV can be generated in same location by just pressing "Save"
- **Implemented same-folder copy and auto-rename on collision (Explorer compatible)**: Added `GetUniquePath()` helper that, when a file/folder with the same name exists at copy/move destination, renames to "filename - Copy.ext" → "filename - Copy (2).ext" with sequential numbering without errors. Same-folder copy (Ctrl+C → Ctrl+V) also absorbed by same logic, creating duplicates without error dialogs. Move also renames on collision using same format. Improved post-paste focus selection to use actual file names after auto-rename (`actualDestNames`). Folders use "FolderName - Copy" format without extension
- **Introduced Windows natural order sort and human sort logic prioritizing base files**: Created `FileItemComparer` (`IComparer`) class applied to `ListCollectionView.CustomSort`. Natural order sort via `StrCmpLogicalW` (shlwapi.dll) so "file2 appears before file10". Added "base file priority" determination for name sort, where base file with same base name (excluding extension) + separator (`_` `-` ` ` `.`) + suffix variants appears directly above. Base priority is sort direction independent (ascending/descending), so base remains directly above variants after direction switch. Folder-first grouping (IsGroupFoldersFirst) incorporated within comparer
- **Established naming convention for progress display indicators (spinner/scan bar/glow bar)**: Classified and named 3 types of in-progress indicators in the app. (1) **Spinner** = rotation animation displayed on status bar right side while `IsGeneralBusy` is true. Used for general async processing with indeterminate duration such as CSV export scan and search. (2) **Scan bar** = horizontal stretching line displayed at status bar top while `IsLoading` is true. Accompanies message via `LoadingMessage`, used for large-scale scan processing with unpredictable completion time. May be displayed simultaneously with spinner. (3) **Glow bar** = byte-based glowing progress bar (`AccentBrush` + Cyan glow) displayed at status bar top while `IsFileOperationActive` is true. On cancel, 0.3s reverse animation (`CubicEase.EaseIn`) "sucking in" effect to 0% followed by fade-out

### Fixed
- **App state persistence: fixed startup tab restore bug**: Integrated settings loading into `Window_Loaded` to always call `InitializeAsync` with actual settings. Previously `MainWindow_Loaded` (code-registered) executed after `Window_Loaded` (XAML-registered), causing tabs to initialize with default settings
- **App state persistence: fixed working set loss on exit bug**: Added `WorkingSets = vm?.ProjectSets.Items.ToList()` to `MainWindow_Closing`. Previously `WorkingSets` was being overwritten with empty array on exit
- **Output detailed errors to `App.FileLogger` on settings save/load failure**: Added log output to `WindowSettings.Save()` catch block, settings load failure in `Window_Loaded`, and save failure in `MainWindow_Closing`
- **PDF conversion: improved GlowBar display timing**: Inserted `Dispatcher.InvokeAsync(DispatcherPriority.Background)` immediately after `BeginFileOperation` call, ensuring WPF data binding (priority 8) and rendering (priority 7) cycles complete before transitioning to `Task.Run`. GlowBar is reliably rendered before heavy processing starts

### Changed
- **PDF conversion: excluded text-type files from targets**: Removed PDFsharp text→PDF conversion feature (`.txt`, `.log`, `.md`, `.csv`, `.json` etc.). Narrowed PDF conversion targets to **images** (`.jpg`, `.png` etc.) and **Office documents** (`.docx`, `.xlsx`, `.pptx` etc.) only, deleting related code (`TextFileExts`, `IsTextFile`, `CreatePdfFromTextFile`, `WindowsJapaneseFontResolver`, `Initialize` etc.) to keep code simple

### Changed
- **Changed CSV output to forced physical scan method (independent of Lucene index)**: Changed `ExportSubtreeToCsvAsync` from index-based retrieval to direct filesystem scan via `DirectoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)`. Completely removed `App.IndexService.IsPathIndexed` / `AddDirectoryToIndexAsync` / `Search` calls. During scan, simultaneously displays **scan bar** (`IsLoading=true`, `LoadingMessage="[CSV Export Preparing] Physically scanning folder for latest information..."`) and **spinner** (`BeginBusy()`), reflecting the always-current filesystem state to CSV independent of index presence/freshness. Timestamps retrieved directly from `FileInfo.LastWriteTime`

## [0.9.0] - 2026-02-22 : Zenith Turbo Engine, spatial awareness bar, high-speed transfer UX overhaul

### Added
- **Spatial awareness progress bar**: Bar follows the physical direction of file transfer. Left→right transfer (A pane to B pane) uses `LeftToRight`, right→left transfer (B pane to A pane) uses `RightToLeft` for `GlowProgressBar.FlowDirection`, aligning visual and operational direction. External drops and other direction-unknown operations fallback to `LeftToRight`. Added `MainViewModel.ProgressFlowDirection` property, set at operation start via `BeginFileOperation(flowDirection:)`
- **Cancel retraction animation**: On cancel button press, glow bar accelerates back from current position to 0% in 0.3s with a "sucked in" effect. `CancelRetractionRequested` event triggers code-behind `Vm_CancelRetractionRequested` to launch `CubicEase.EaseIn` `DoubleAnimation`, bar fades out after animation completion (350ms). Completely branch-managed separately from normal completion (100% → fade-out) to prevent effect conflicts
- **Zenith Turbo Engine**: Overhauled file copy engine to ultra-fast implementation (32 MB buffer `FileStream` + `FileOptions.Asynchronous | SequentialScan` for fully async I/O, `Parallel.ForEachAsync` for max 3 parallel copies, reliably restores creation date, modification date, and attributes from source file after copy completion)
- **Modern Glow Bar**: Added 2px ultra-thin progress bar at status bar top (`AccentBrush` + Cyan `DropShadowEffect` (BlurRadius=8) with gentle glow, `DoubleAnimation` (0.2s `CubicEase`) for smooth interpolation, fade-in during operation, fade-out on completion)
- **Cancel button**: Displays "x" button at status bar right end only during file operations. Immediately stops physical writes via `CancellationToken` and auto-deletes incomplete intermediate files
- **Operation status display**: During copy/move, displays "[Copying] XX% [filename]" at status bar center, updated at 200ms throttle. Returns to normal notification message display after completion

### Changed
- **Changed FileSystemWatcher from debounce (800ms) to throttle (500ms)**: Changed refresh control of `OnFileSystemChanged` from "reset timer on every event (debounce)" to "schedule Refresh 500ms after first event, ignore subsequent events within window (throttle)". Copy destination list updates progressively approximately every 500ms even during large file copy. Cancel coordination on Dispose maintained

### Fixed
- **Introduced low-load, high-efficiency progress management system for large-scale transfers**: Switched copy chunks from 32MB fixed buffer to `ArrayPool<byte>.Shared` (4MB, reusable), reducing GC pressure to near zero (buffer usage with 3 parallel: 192MB → 24MB). Added `onBytesWritten` byte-level callback to `TurboCopyFileAsync` so progress bar updates every 4MB write even for single files over 10GB. Pre-calculates total bytes asynchronously via `Task.Run` before copy in `DropFilesInternal`, displaying "[Preparing] N/M items scanned" every 10 items to maintain "something is happening" feel until transfer starts. Tightened throttling threshold to "200ms AND 1% change" to further suppress rendering CPU consumption. Changed `MaxDegreeOfParallelism` to `Math.Clamp(ProcessorCount / 2, 1, 3)` to track core count, preventing disk seek overload on both HDD and SSD
- **Stabilized UI updates and introduced throttling for large-scale file transfers**: Improved `ReportFileOperationProgress` throttle condition to composite of "100ms elapsed since last report" OR "0.5% or more progress change". Atomically manages `_lastProgressReportTick` / `_lastReportedProgressBits` with `Interlocked` + CAS, ensuring thread pool doesn't overwhelm UI thread even for 800+ files / 17GB+ bulk transfers. Set `InvokeAsync` to `DispatcherPriority.Background` to prioritize file transfer speed, sneaking UI updates into idle time. `EndFileOperation` also protected with `DispatcherPriority.Normal` + `try-catch/finally`. Immediately displays "[Preparing] N files..." message simultaneously with GlowBar right after copy start (restructured to call `BeginFileOperation` after `physicalFiles` count is determined). Wrapped progress reporting call in `try-catch` to prevent report failure from interrupting copy processing
- **Fixed thread access violation and stabilized file transfer feature**: Fixed issue of calling `MainVM` properties (including `MainWindow.DataContext` access) from thread pool threads inside `Parallel.ForEachAsync`. Changed to capture reference to `mainVmRef` on UI thread before passing to lambda. Added `Dispatcher.CheckAccess()` guard to `Vm_PropertyChanged_GlowBar` for safe marshaling when `PropertyChanged` fires from non-UI thread. This restored both GlowBar display at copy start and processing completion
- **Resolved spinner inconsistency**: Introduced `IsGeneralBusy = IsBusy && !IsFileOperationActive` to hide spinner during file operations and unify to GlowBar. Reliably calls `EndFileOperation` in `finally` block, guaranteeing both spinner and progress bar disappear after operation completion
- Bulk-deleted unstable custom copy engine and related UI, resetting features (deleted experimentally introduced `ShellFileOperations` silent copy engine, `CancellationToken`/`cancelReg`/`_activeShellOp` complex async control, `MainViewModel` file transfer state machine, status bar progress StackPanel. Replaced `DropFilesInternal` with simple BCL implementation using only `File.Copy` / `File.Move` / `Directory.Move` + recursive helper `CopyDirectoryRecursive`, maintaining Undo registration, exception dialogs, and Refresh)
- Added preventive measure for COMException (0x80070490) when dragging and dropping to invalid areas (background, window edge, etc.) (`Directory.Exists` pre-check at the beginning of `DropFilesInternal` for silent skip)

## [0.8.0] - 2026-02-22 : Search UX enhancement, sort separation, folder CSV output

### Added
- Enhanced user notification when search results are 0 items (displays "No matching items found" watermark centered in file list. Count text highlights in amber + warning icon when 0 items)
- Separated default sort for normal folder display to name ascending, search results to modified date descending. Column header arrows correctly sync on view switch (`ActiveSortProperty` / `ActiveSortDirection` introduced)
- Added "Export folder contents to CSV" feature to custom context menu (index-linked). Supports both background right-click (current folder) and single folder right-click. Retrieves all files from Lucene index; performs temporary scan if unregistered. Output columns: No, File Name, Full Path, Timestamp, Size (bytes), UTF-8 with BOM, max 100,000 items

### Changed
- Enhanced working sets section in `MANUAL.md` (detailed preview/rollback specifications, guide text, management operations)
- Overhauled loading animation to modern horizontal stretching line (replaced circular spinner with charcoal black semi-transparent background + horizontal progress line. Skips visual display for processing under 300ms to prevent flicker)

### Fixed
- Completely removed search effect animation, unified search clear button behavior to normal display restoration (deleted `IsSearchSucceeded`/`IsSearchResultEmpty` properties, effect Storyboard/GlowBorder elements, `TriggerSearch*Async` methods. Unified `ClearSearch` to common flow of `IsSearchResultTab=false` → `SearchText=""` → `IsSearching=false` → `NavigateAsync(CurrentPath)`, removing `CloseTabCommand` call)
- Unified search bar "x" button behavior to "clear search and return to normal display" instead of tab deletion (common execution of `SearchText` clear → `IsSearchResultTab=false` → folder reload regardless of tab count/search behavior settings. Removed `CloseTabCommand` call)
- Fixed XAML parse error where `PackIconLucide Kind="AlertCircle"` in search count StackPanel was an invalid value (changed to correct Lucide icon name `CircleAlert`)
- Fixed Success Sweep effect not firing when generating new search tab (delayed `IsSearchSucceeded = true` until after Loaded event completion via `Dispatcher.InvokeAsync(DispatcherPriority.Background)`. Added fallback to `TabContentControl.Loaded` handler)
- Overhauled search effects to modern glow effect on pane perimeter, ensuring operation on new tab generation (replaced horizontal line with Success Glow where pane border glows white sharply and amber Empty Glow with 2 blinks. `HasFreshSearchSuccess` / `HasFreshSearchEmpty` 2-second timestamps ensure effects fire for all patterns including same-pane new tab and opposite-pane new tab)
- Deleted unstable search effect animations (GlowBorder, Storyboard, effect flags) and retained only practical 0-item message display (`ShowEmptySearchResult` binding, Watermark, count amber highlighting preserved)
- Fixed Watermark and amber highlighting briefly flashing at zero-count moment immediately after `SearchResults.Clear()` during same-tab search (introduced `IsSearchRunning` flag to force `ShowEmptySearchResult` to false during search execution including debounce. Also prevents flag reset from cancelled old searches)

## [0.7.4] - 2026-02-21 : Async processing and IsLoading quality audit fixes

### Added
- **Working Sets (Ctrl+Shift+5)**: Added new view to navigation pane for saving/restoring all tab state (path, lock, display mode, sort) of A/B panes with names. On load, immediately enters preview state; "Apply" to confirm, "Undo" or switching to another view for auto-rollback. Data persisted in settings.json

### Changed
- **Working Sets view UI improvements**: Added feature description text at top of view. Refreshed preview footer background color to charcoal black (#545B64), applied border at top edge and dark tone (#4A5059) on button hover for improved visibility and operation feel

### Fixed
- Fixed issue where `BeginBusy` was not called during `CreateNewFolder` / `CreateNewTextFile` execution, preventing loading overlay from appearing (added `MainVM?.BeginBusy()` at beginning of `try` block)
- Fixed issue where `NavigateAsync` call in `RestoreTabsAsync` was fire-and-forget, swallowing exceptions (changed to `await`, made method `async Task`)
- Fixed issue where `BoxDriveService.StartSharedLinkClipboardMonitor` was using `Dispatcher.Invoke` (synchronous), blocking calling thread (changed to `InvokeAsync`)
- Fixed issue where `SettingsBackupService` I/O could block UI thread (added async wrappers `CreateBackupAsync` / `CleanupOldBackupsAsync`)
- Changed `AppSettingsViewModel.BackupNow` to `AsyncRelayCommand` to eliminate UI blocking during manual backup

## [0.7.3] - 2026-02-21 : "Rename" dialog speedup

### Fixed
- **Fixed "Rename" dialog startup delay and white flash**: Resolved caching bug where `ShowDialog()` was destroying the window each time. Switched to custom modal loop via `DispatcherFrame`, only using `Hide()` after completion to reuse the window. Pre-generates HWND with `EnsureHandle()` + `UpdateLayout()` in constructor; first display uses `Opacity=0 → ContentRendered → Opacity=1` to prevent white flash. Focus reliably set from `IsVisibleChanged` at `DispatcherPriority.Input` (after rendering completion)

## [0.7.2] - 2026-02-21 : Favorites D&D snapshot and rollback

### Fixed
- **Data loss prevention during favorites organization (introduced transaction processing)**: Changed to take snapshot at the beginning of D&D move and confirm only after verifying settings file save success/failure. Automatically rolls back list on exception or save failure, guaranteeing zero loss. Audit log records Move Started / Move Completed / ERROR

## [0.7.1] - 2026-02-21 : Overhaul to audit logging

### Changed
- **Overhaul to audit logging**: Removed approximately 15 internal trace lines (`[Refresh]` prefix) from `LoadDirectoryAsync`. Implemented audit logging where "when, which pane, what was done" is visible at a glance. Log outputs for folder navigation (`[A] Open:`), search (`[A] Search:`), copy/move (`[A] Copy/Move (n):`), delete (`[A] Delete (n):`), rename (`[A] Rename:`), new folder/file creation (`NewFolder:`/`NewFile:`), favorites operations (`[Favorites] Add/Remove:`), settings save (`[Settings] Saved`), settings recovery (`[Settings] Recovery:`). Errors unified with `[ERR]` prefix

## [0.7.0] - 2026-02-21 : Settings backup, recovery, new file creation

### Added
- **Create new text file from context menu**: Added "New text file" to file pane background right-click menu. Automatically shows rename dialog immediately after creation; if cancelled, auto-deletes created file and restores original state (also supports Ctrl+Z undo)
- **Settings backup and recovery system**: Added "4. Settings File Recovery" section to app settings screen. Creates automatic backup (`backups/settings_yyyyMMdd_HHmmss.json`) on app exit, saving dictionary-based diff summary (e.g., "Updated A pane home, search behavior") to `.desc` file. Manual backup also available via "Backup Now" button. "Restore..." button opens backup list dialog; double-click to restore settings from selected point in time (restart suggested). Right-click enables lock setting; locked backups are excluded from 30-day retention policy auto-deletion

### Changed
- **Improved new folder creation UX (Windows Explorer compatible)**: When creating folder via context menu or Ctrl+Shift+N, changed from asking name in dialog beforehand to immediately creating as "New folder" and automatically showing rename dialog. If cancelled, auto-deletes created folder and restores original state
- **Optimized settings backup timing**: Previously generated backup on every `Save()` (favorites update, filter change, etc.), changed to only on app exit and manual button press. Suppresses unnecessary backup accumulation

### Fixed
- **Fixed created item remaining after cancelling rename on new creation**: Changed to reliably identify new creation flow with `_isRenameForNewItem` flag, resolving cases where path string case-insensitive comparison failed. Rollback target on cancel supports both folders and files

## [0.6.3] - 2026-02-20 : Incremental search and favorites search fix

### Added
- **File pane incremental search**: Pressing alphabet/number keys in the details view file list immediately moves selection to the file/folder starting with that character. Repeated same key cycles through same-letter candidates; pressing different character within 500ms performs prefix search jump

### Fixed
- **Favorites view: fixed selection disappearing after clearing search**: After selecting an item in search results and clearing, selection now restores and scrolls to that item in tree view. For items inside nested folders, automatically expands ancestor nodes for visibility

## [0.6.2] - 2026-02-20 : Manual specification sync

### Changed
- **MANUAL.md specification sync (consistency check with entire source code)**: Corrected and added the following descriptions to match current implementation
  - **Splash screen (1-0)**: Corrected that splash is displayed "only on first launch" not "on app startup". Documented behavior of skipping on 2nd+ launch via `settings.json` existence check for blazing fast startup
  - **Tab right-click menu (2-2)**: Added description of "Move to opposite pane" menu item displayed on tab right-click
  - **App settings / Search UI (1-3 / 3-3-1-1)**: Added description of "Automatically switch to single pane mode on search" option (`AutoSwitchToSinglePaneOnSearch`). Also documented automatic restoration to original pane count when all search result tabs are closed
  - **Navigation pane width auto-expansion (1-3)**: Added documentation that navigation pane also expands with animation when switching to index search settings and app settings (same behavior as tree and browse history)

## [0.6.1] - 2026-02-20 : ZenithDocViewer publish error fix

### Fixed
- **Resolved ZenithDocViewer Release publish error**: Added `RuntimeIdentifiers` to resolve NETSDK1047 and disabled `PublishReadyToRun` to avoid NETSDK1094. Ensured ZenithDocViewer is correctly bundled as single EXE during Release publish

## [0.6.0] - 2026-02-20 : Manual as separate app and SuccessHighlight

### Added
- **Manual display as separate app (ZenithDocViewer)**: Created independent document viewer app `ZenithDocViewer.exe`. Auto-bundled during main app build with `ZenithFiler.exe` and `ZenithDocViewer.exe` side by side in same folder. Blazing fast startup as it doesn't load DB or index, allowing quick checking of manual and changelog before app launch. Shared project (ZenithFiler.Shared.Docs) shares UI and logic, auto-reflecting in both in-app help and separate app with loosely coupled structure
- **Auto-transition and SuccessHighlight effect after registration**: On "Add to favorites" (toolbar star button / context menu), auto-switches to favorites view, selects and scrolls to display the added item. Simultaneously fires one-shot SuccessHighlight animation with charcoal black (#545B64) background flash and pulse effect for temporary highlighting
- **Auto-transition and SuccessHighlight effect on index search registration**: On context menu "Search this folder with index search", if unregistered, registers with IndexService then auto-switches to index search settings view, selects and scrolls to the folder and highlights with SuccessHighlight

### Changed

### Removed

### Fixed

## [0.5.19] - 2026-02-20 : Scrollbar misfire fix and index/startup improvements

### Added
- **Index registration confirmation feature**: Added "Confirm index registration" item to the right-click menu for registered folders in the index search settings view. When selected, opens a search result tab named "Confirmation: (folder name)" in A pane, automatically searching and listing the folder's index registered content (files and folders). Confirms data registered in the index only, without performing actual filesystem scan for immediate results. Reuses search result view (SearchGridView) structure, displaying name, location icon, path, modified date, and size. Status bar notifies "(folder name) index content displayed" upon load completion.

### Changed
- **Auto-execution and UI improvement of index registration confirmation**: Changed to auto-execute search immediately after tab creation (resolving bug where tab remained empty). Unified tab title to "Confirmation: (folder name)" and added status bar notification "(folder name) index content displayed" on search result load completion
- **Box integration menu cleanup**: Removed "Copy BOX path + real address" item from custom menu. Real address (URL) retrieval consolidated to automatic formatting via clipboard monitoring (AddClipboardFormatListener) when executing Explorer's "Share" → "Copy shared link", maintaining stable operation
- Expanded tab width from 120px to 150px for improved visibility of long file names and more generous operation space around the close button
- **Splash screen limited to first launch only**: Determines first launch by presence of `settings.json`, showing splash screen (`splash.png`) only on first launch. On 2nd+ launch, completely skips splash and immediately displays main window for "blazing fast startup". On first launch, the "jet black card" splash is displayed, fading out over 0.5 seconds to transition to main screen. Detection uses `settings.json` existence check within `AppDomain.CurrentDomain.BaseDirectory`, maintaining portability
- **Startup sequence optimization**: During native splash display, runs `DatabaseService.InitializeAsync()`, `IndexService` configuration, and `PathHelper.EnsureSpecialFoldersCached()` in parallel in background, then fades out splash while displaying `MainWindow` to eliminate startup freeze

### Removed
- **Complete removal of SplashWindow**: Deleted dynamic splash window for first launch (`SplashWindow.xaml` / `SplashWindow.xaml.cs`). Unified to native splash, simplifying startup sequence and keeping codebase clean
- **Complete removal of legacy migration logic**: Deleted migration processing for old versions (SettingsVersion < 1) from `WindowSettings.TryMigrateAndSave()`. Now supports only SettingsVersion = 1, completely eliminating AppData and favorites.json dependencies for portability-focused structure

### Fixed
- **Fixed index registration confirmation not showing results**: Fixed bug where empty query search wasn't executed when selecting "Index registration confirmation", showing no list in A pane. Adjusted early return condition in `ExecuteSearch` for empty keyword with index search mode and path specification to execute full search
- Fixed issue where the close button (x) circular highlight on tabs was clipped on the right side hitting the tab's right border, by adjusting tab body padding and inner grid MinHeight while unifying close button and hover circle size to 14px centered, maintaining slim band design while displaying the full icon cleanly
- **Fixed Box drive folders showing as white generic icons**: Fixed navigation pane (tree view) to display Box drive folders with normal folder icons instead of white paper-like generic icons. Added `WarmUpBoxPath` method to `PathHelper` to consolidate warm-up logic for Box area directory attribute confirmation. In `ShellIconHelper.GetInfo`, forced `SHGFI_USEFILEATTRIBUTES` for both folders and files in Box area to reliably obtain standard folder icons even in stub-ungenerated state. Improved `DirectoryItemViewModel.InitializeAsync` to use `GetFolderIcon` after warm-up for Box area. Also changed `IndexService.WarmUpBoxDirectoryAsync` to use shared `PathHelper.WarmUpBoxPath`, eliminating code duplication
- **Fixed drag & drop misfiring during scrollbar operation**: Fixed issue where dragging on file list scrollbar (Thumb or RepeatButton) would trigger drag of underlying file items. Added hit testing via `FindAncestor<ScrollBar>` and `FindAncestor<GridViewColumnHeader>` from `e.OriginalSource` at the beginning of `PreviewMouseLeftButtonDown`/`PreviewMouseRightButtonDown`/`MouseMove`, delegating to WPF standard scroll/resize for operations on scrollbar/column header instead of executing drag start logic

## [0.5.18] - 2026-02-19 : UI band unification and enumeration optimization

### Added

### Changed

- Applied the slim charcoal black band design adopted for first-level items in the favorites view to active file tabs and address bar rows, with inactive tabs showing subtle border lines and slight hover color to indicate click area, while only the focused tab stands out as a black band independent of surrounding divider lines, unifying the "black accent" usage throughout the app
- Matched main window title bar background to the same charcoal black (#545B64) as the accent dark band, creating visual consistency as a continuous "black header line" with address bar band, favorites first level, and active tab, while unifying text, icons, and path input text color to white on the address bar for crisp path readability against dark background
- Introduced Polly-based retry policy for file operations such as renaming, moving, settings backup, enabling automatic retry up to several attempts on temporary lock or sharing violation failures, increasing resilience against temporary I/O errors on network drives and backup processing
- Overhauled local directory enumeration for file list to .NET 8 `FileSystemEnumerable<T>` base, combining attribute skip and inaccessible folder ignore via `EnumerationOptions` for improved memory efficiency and scan stability in folders with many files
- Unified subfolder retrieval for breadcrumb dropdown and navigation pane tree to enumeration using `EnumerationOptions`, internally skipping system attribute folders and folders without access permissions to maintain UI responsiveness

### Fixed

- Fixed issue where the close button (x) bottom edge was slightly clipped by the black band or tab border on both active and inactive file tabs, by adjusting tab body padding and inner grid MinHeight while unifying close button and hover circle size to 14px centered, maintaining slim band design while displaying the full icon cleanly
- Fixed issue where starting a drag from one item while multiple items are selected in the file list would narrow selection to single item at mouse-down moment, limiting drag target to 1 item. Changed to maintain multi-selection when starting drag from an already-selected item, passing all selected full paths as drag data in `DataFormats.FileDrop` format to external apps
- Changed drag guide message from "Drop at copy/move destination" to "Drop n items at copy/move destination" format (e.g., "Drop 5 items at copy/move destination") so the number of items being dragged is visible at a glance
- Fixed issue where double-clicking any item while multiple items are selected in the file list would not fire OpenItem processing because drag-suppression PreviewMouseLeftButtonDown would claim `Handled` first. Changed to evaluate `e.ClickCount == 2` at the beginning of mouse down and immediately execute ViewModel's `OpenItemCommand`, achieving coexistence of standard behavior (folders and folder shortcuts (.lnk) navigate inside, files open with default app) and multi-selection drag maintenance

## [0.5.17] - 2026-02-19 : Favorites UI and logging infrastructure enhancement

### Added
- **Documented planned future libraries**: Created `.cursor/rules/future-libraries.mdc`. Recorded adoption plans for Serilog, Polly, FileSystemEnumerableOptions, Microsoft.Data.Sqlite, Lucene.Net, integrating into development flow for reference and proposals when modifying relevant features. Items are checked off when adoption is complete.

### Changed
- **Highlighted first-level virtual folders in favorites view as "slim full-width bands"**: Based on `FavoriteItem` hierarchy level information, changed to draw "first level and virtual folder" rows in the navigation pane favorites tree as slim full-width bands spanning from navigation pane left edge to just before right edge (excluding scrollbar area). Secured right margin to avoid scrollbar interference while elegantly highlighting category separators with Windows 11-style rounded corners.
- **Visibility optimization**: Changed category header background to calm slate gray (#545B64), automatically adjusting text (folder name) above to white semi-bold and summary description to bright gray, ensuring high contrast and readability even with slim bands.
- **Accent line and spacing adjustments**: Added slim accent color vertical line at the left edge of first-level categories, keeping the band's top/bottom margin and height (MinHeight) slightly taller than normal rows to maintain information density while intuitively conveying the category's presence as a parent.
- **Serilog-based logging infrastructure**: Restructured `FileLoggerService` to Serilog base with daily rotation file output and debug output delegated to the library. For fatal exception handlers, maintains synchronous write (`LogSync`) as before to reliably capture logs up to the moment before crash, while routing normal operation logs through Serilog's async file sink for efficient recording.

### Fixed
- **Eliminated mouse cursor blinking on Shift key press**: Revised keyboard operation mode determination in `MainWindow`, changed to not hide cursor for modifier key presses alone (Shift/Ctrl/Alt etc.). When opening Explorer-compatible menu with Shift+right-click, also clears keyboard operation mode before menu display so cursor remains visible and menu appears smoothly.

## [0.5.16] - 2026-02-19 : Box integration and context menu stabilization

### Fixed
- **Fixed Explorer context menu becoming non-functional after Box link retrieval**: Strictly released COM objects such as IContextMenu with `Marshal.FinalReleaseComObject`, resolving shell extension resource leak. Ensures menu works correctly on 2nd+ Shift+right-click after Box Drive integration.

### Changed
- **ShellContextMenu COM release**: Fully releases COM with `Marshal.FinalReleaseComObject` after menu display ends. Ensures hMenu destruction and hook removal in `finally`. Added explicit Dispose for ShellItem.- **Changed BoxDriveService clipboard monitoring to event-driven**: Migrated from polling to `AddClipboardFormatListener`/`RemoveClipboardFormatListener` approach. Ensures the listener is reliably removed after URL detection and after 20-second timeout, preventing the second and subsequent Shift+right-click from interfering with the previous session.

## [0.5.15] - 2026-02-19 : Box Index Warm-up

### Added
- **Box folder directory warming (warm-up)**: Added a process that recursively traverses the structure of paths within the Box area using `Directory.EnumerateDirectories` just before starting index creation (full rebuild, unindexed, or differential update), prompting Box Drive to generate stubs. This allows index completion via "Create Unindexed" without having to manually open folders.

### Changed
- **Box-specific throttling**: During scanning of Box areas, waits 200ms every 50 items. When the network-light setting is on, the wait is further increased to prevent timeouts.
- **Progress display during warm-up**: Displays "Preparing Box folders (warming up)..." in the status bar to let the user know the app has not frozen.

## [0.5.14] - 2026-02-19 : Faster First Launch

### Removed
- **Complete removal of legacy migration logic**: Removed the automatic data migration (zenith.db, Lucene index) from `%AppData%\ZenithFiler` that was introduced in v0.4.2. Since the `index` and `settings.json` in the execution folder are now authoritative, the process to check old paths is no longer needed.
- **Removed old-format favorites.json migration**: Removed the conversion process that integrated `%AppData%\ZenithFiler\favorites.json` (pre-v0.3.54) into `settings.json`. Now only `settings.json` is referenced.

### Changed
- **Faster first launch**: Moved generation of `index` / `backups` / `logs` folders to background execution via `Task.Run` to avoid blocking the UI thread.
- **Lazy initialization of DatabaseService**: DB initialization now runs only when the history view (Ctrl+Shift+3) is displayed or when history is saved for the first time, reducing I/O load at startup.
- **Lazy loading of splash tips**: Changed the feature introduction text to `Lazy<string[]>`, deferring loading until the Loaded event (when the timer starts).

### Fixed
- **File size displayed as "0.0 B" in index search results**: Modified to save the `size` field during index creation and parse it as `long` type when retrieving search results, assigning it to `FileItem.Size`.
- **All files displayed with generic text icon in index search results**: Added caching per extension using `ShellIconHelper.GetGenericInfo`, so appropriate icons are now displayed for file types such as PDF, Excel, images, etc.

### Changed
- **Exclude files without extensions from search results**: In both regular and index searches, files where `Path.HasExtension` returns false (temporary files, caches, hash-named files in PreviewCache, etc.) are now excluded from search targets. Filtering is applied both during index registration and search result generation, reducing noise and improving search result quality.
- **Save index search modification dates in Lucene DateTools format**: Changed the `modified` field to be saved in DateTools standard format (`DateResolution.SECOND`). Maintains read compatibility with the old Int64 Ticks format.

## [0.5.13] - 2026-02-19 : Box Integration Cleanup

### Removed
- **Removed non-functional experimental code from Box integration**: Removed from `BoxDriveService`: UI Automation (`TryGetBoxSharedLinkByUIAutomation`, forced menu clicking), direct Verb execution (`ForceKickBoxVerb`), debug window scanning (`DebugScanBoxWindows`), and `SendCommandToWindow`. Removed from `ShellContextMenu`: `IObjectWithSite`/`IServiceProvider`/`ExplorerImpersonationSite` impersonation implementation, full menu item dumps (`DumpRawMenuItems`, `DumpContextMenuItems`), and excessive `[ShellDebug]` logs.

### Changed
- **Box integration now focused on "20-second sniper monitoring" and "modern loading display"**: `BoxDriveService` was streamlined to handle only clipboard monitoring triggered by Shift+right-click (box.com detection followed by 2-line formatting). `ShellContextMenu` was reorganized as a simple wrapper for OS standard context menu display. `BoxAddressService` was changed to return only Box paths without retrieving URLs (actual addresses are obtained via Shift+right-click then "Copy shared link" monitoring). "Copy BOX path + actual address" from the menu now copies only the Box path, with notifications displaying "Copied BOX path" or "Copied BOX path + actual address" as appropriate.

## [0.5.12] - 2026-02-19 : Enhanced Box Shared Link Sniper Monitoring

### Added
- **Auto-formatting of shared links via Shift+right-click in Box folders**: When **Shift+right-clicking** an item in a Box Drive area (path containing `\Box\`), the clipboard is monitored for up to 20 seconds while the Explorer menu is displayed. When the user selects "Share" > "Copy shared link" from the menu and a URL containing `box.com` is written to the clipboard, the clipboard is overwritten with a 2-line format: line 1 is the Box relative path, line 2 is the URL. On successful formatting, "Combined Box path and URL" is displayed in the status bar with a green flash on the pane. Monitoring ends silently after 20 seconds. Added `IsInsideBoxDrive` to `PathHelper`.

## [0.5.11] - 2026-02-19 : Box Shared Link Retrieval and UI Adjustments

### Changed
- **Introduction of standard loading overlay**: Created `BaseViewModel` with shared `IsLoading` and `LoadingMessage` properties. A modern full-screen loading overlay is now displayed during time-consuming processes such as search execution or Box integration address retrieval. The design adopts the same "glowing pulse ring" and rotating arc as the startup splash, unifying the app's brand image. During search processing, messages are dynamically displayed based on the operation, such as "Searching from index..." or "Checking for latest state...".
- **Improved resource reference safety**: Changed important resource references in `MainWindow.xaml` (`BackgroundBrush`, `TextBrush`, `TitleBarBrush`) from `StaticResource` to `DynamicResource`, ensuring resources are reliably resolved even during lazy loading of `AppResources.xaml`.
- **Hardened Box Drive shared link retrieval logic**: Improved submenu exploration with retry logic (up to 3 attempts, 50ms interval) for dynamically generated menu items. Added "Box" to keyword search for reliable identification of the "Share" submenu in multilingual environments. Optimized clipboard waiting with a 3-second timeout and 100ms polling interval. Detects changes by comparing with original clipboard content, ensuring reliable waiting until the Box app updates the clipboard.

### Fixed
- **XAML parse error at startup (`TypeConverterMarkupExtension` exception)**: Fixed by changing `Kind="Loader2"` to `Kind="Loader"` in `LoadingOverlay.xaml`, as `Loader2` does not exist in the Lucide icon library. This resolved the type conversion error that occurred when parsing `LoadingOverlay` during `MainWindow` initialization.
- **"Copy BOX path + actual address" in Box Drive fails to reliably retrieve URL**: The clipboard write wait time was insufficient, and processing completed before the Box app could fetch the URL from the cloud and write it to the clipboard. Added clipboard content change detection logic that monitors every 100ms for up to 3 seconds until a URL-format string appears. Also strengthened error handling for multiple selections so that Box paths are reliably copied even if URL retrieval fails for some items, with failure notifications.
- **Unified text color to black-based for nav pane and document table of contents**: Organized main text as black (`TextBrush`) and supplementary text as medium gray (`SubTextBrush`) across favorites, tree view, browsing history, index, app settings nav panes, and document viewer table of contents lists. Maintains contrast during selection and hover while making information priority immediately apparent.
- **Improved contrast of toolbar separators in A pane / B pane**: The vertical line separators in the toolbar had become difficult to see after changing the background and text colors to black-based for the active pane. Changed to a dedicated brush (medium-dark gray) with slightly thicker rendering so that functional group separations are clearly distinguishable in any pane.
- **Zero-latency rename window (InputBox)**: Changed InputBox to a cached shared instance across the app, minimized constructor processing, and used `DispatcherPriority.Send` for modal display after layout finalization with dual focus acquisition via `FocusManager.FocusedElement` and `ContentRendered`, enabling near-instant input after pressing Ctrl+Shift+N / F2. `Directory.CreateDirectory` for new folder creation now runs on a background thread, preventing InputBox display/close from being blocked by file system waits on network drives.
- **Expanding folder shortcuts (.lnk) in internal tabs**: When double-clicking/pressing Enter on a shortcut (`.lnk`) pointing to a folder in the file list or favorites, the link target is now resolved using Vanara.Windows.Shell, and instead of launching an external Explorer, a new tab is created in the current active pane to open the folder, enabling seamless navigation while maintaining work context.
- **Resolved null reference warning in rename window (InputBox)**: `InputBox.ShowDialog` was directly referencing `Application.Current.MainWindow`, causing a null reference warning when the application context was not yet initialized. Changed to `Application.Current?.MainWindow` for safe operation even when the application is uninitialized.
- **Right-drag "Create shortcut here" fails for folder targets**: ShortcutHelper was using `new ShellLink(path)` constructor which reads existing .lnk files, causing failure when targeting folders or files. Changed to create new shortcuts using `ShellLink.Create`, correctly handling folders, drive roots, UNC paths, etc. Also improved to display error details in a dialog on creation failure.
- **Window remains off-screen after multi-display environment change**: On startup, the saved window position and size are now compared against the display areas of currently connected displays. If the window doesn't intersect with any display, the coordinates are considered invalid and the window is rescued to the center of the main display. Additionally, if the saved window size is extremely larger than the screen, it is automatically shrunk to approximately 80% of the screen, ensuring the window always appears within a visible screen.
- **Unnatural tall/narrow size when dragging window from maximized state**: When detaching from maximized state by dragging the title bar, the window now auto-resizes to either the previous normal size or approximately 75% width of the current display work area with a roughly 16:10 aspect ratio. The position is adjusted so the mouse cursor is near the center of the title bar, enabling natural dragging immediately after detachment.


## [0.5.10] - 2026-02-18 : Rename and Tab List Responsiveness and InputBox Fixes

### Changed
- **Show rename window first for new folder creation (Ctrl+Shift+N)**: Instead of waiting for Refresh after folder creation before opening rename, the rename window is now displayed first, and the folder is created upon OK. Input is immediately available without waiting for Refresh.
- **Faster rename window (InputBox) display**: Moved focus and Owner settings to Loaded/ContentRendered to ensure focus after rendering is complete. Reduced Dispatcher stages when opening rename after paste, shortening delay until the dialog opens.
- **Cursor position after pressing "Today's date" in rename window**: After pressing the today's date button, the entire date string was selected, causing subsequent input to overwrite. Changed to place the cursor at the end of the date and clear the selection, allowing immediate additional input after pressing.
- **Changed tab list popup to instant display**: Removed the fade animation when pressing the tab list button, so the list appears simultaneously with the click.

### Fixed
- **"Copy BOX path + actual address" in Box fails to retrieve URL**: The "Copy shared link" option was inside the "Share" submenu in Box Drive's context menu, and only the top level was being searched. Modified to explore the parent "Share" submenu and InvokeCommand using the wID of "Copy shared link" within it, enabling URL retrieval equivalent to Explorer's "Share > Copy shared link".
- **Rename window appears blank and takes time before input is possible**: Changed new folder creation to display name input first, set InputBox to focus on ContentRendered and set Owner on Loaded, and reduced Dispatcher stages when displaying rename.
- **Crash with "Cannot set Owner property after Dialog is shown"**: Fixed by setting Owner and Topmost in the constructor instead of in Loaded (conforming to WPF's constraint that Owner cannot be set after display).

## [0.5.9] - 2026-02-18 : Improved Tab List Display Position

### Added
- **Tab list display feature**: Added a tab list display button (List icon) to the right end of the tab row (right of the + button). Clicking it shows a dropdown menu where you can select or delete tabs from the full tab list. The currently selected tab is highlighted, and locked tabs have the delete button hidden.
- **Auto-switch to single-pane mode during search option**: Added an option in app settings to "Automatically switch to single-pane mode during search". When enabled, the app automatically switches to single-pane mode during search execution, allowing wider display of search results. When searching in the B pane, the search tab is displayed in the A pane.

### Changed
- **Changed tab list display position so close buttons align below list button**: Positioned the tab list popup right-aligned via CustomPopupPlacementCallback so that the close button column in the list appears directly below the list display button (List icon).
- **Unified search bar close button behavior by search mode**: Clarified the behavior of the X button on the right end of the search bar according to the "Search behavior" app setting. For "Same pane, new tab" and "Opposite pane, new tab", pressing X on a search result tab closes that tab and returns to the original tab. For "Same pane, instant search in current tab", pressing X cancels the search result view and automatically reloads the current folder list, immediately returning to normal view without a blank screen.
- **Auto-restore pane count when clearing search results view**: When the "Automatically switch to single-pane mode during search" option is enabled, after switching to single-pane mode during search execution, closing the search result tab or pressing the X button on the search bar automatically restores the original pane count (e.g., dual-pane mode).
- **App settings view margin adjustment**: Unified the top margin of the "Search display settings" section with other subsections, and added appropriate spacing between the "3. Index" section for clear visual separation between sections.

### Fixed
- **Visibility degradation when hovering checkboxes in app settings view**: Fixed an issue where WPF UI's default style had insufficient contrast against the sepia background, making checkboxes appear to disappear. Added a custom style that emphasizes the border with `TextBrush` (dark color) on hover and slightly darkens the background for improved visibility.
- **Check mark disappears when hovering a checked checkbox**: Fixed an issue where hovering a checked checkbox changed the background color and reduced `Opacity`, making the white check mark invisible. Changed to maintain the background as `AccentBrush` when checked and hovering, applying hover effects only when unchecked.
- **Insufficient visual feedback when hovering a checked checkbox**: Fixed an issue where hovering a checked checkbox showed no visible change, making it unclear whether hovering was occurring. Changed the background color on hover from `AccentBrush` (`#268BD2`) to a darker shade (`#1E7AB8`) with a light shadow, making the hover state clearly apparent.
- **Tab list disappears instantly when pressing the tab list button**: Fixed an issue where the toggle ran twice due to double execution from Command and Click, causing the list to close immediately when pressing the tab list button at the right end of the tab row. Removed Command binding and switched to Click handler only. Also changed the button detection in ParentWindow_PreviewMouseDown to use FindName within ControlTemplate and IsDescendantOf, ensuring reliable closing when clicking outside the list.

## [0.5.8] - 2026-02-18 : Unified Text Color for Focused Pane

### Changed
- **Unified text and icon color to black for focused pane**: For the focused A/B pane, toolbar icons in the action row, list headers, list text, and file names in icon view are now displayed in `FocusedPaneTextBrush` (black), improving visibility to make the "active pane" immediately identifiable.
- **View mode and column settings toggle icons also unified to black**: The six toggles on the right side of the action row (list view / small, medium, large icons / auto-adjust columns / folders first) are also displayed in `FocusedPaneTextBrush` (black) in the focused pane, maintaining consistent icon colors within the pane.
- **List headers, search headers, and breadcrumbs also unified to black**: Headers in detail list and search result list (Name / Date Modified / Type / Size, etc.) and folder names in breadcrumbs are also displayed in `FocusedPaneTextBrush` (black) in the focused pane, making it instantly identifiable from headers and address bar which pane is being operated on.
- **List cell text (Name / Date Modified / Type / Size) also unified to black**: Applied active pane-linked style to TextBlocks in each column cell (Name / Date Modified / Type / Size) of the detail list, so row data as well as headers are displayed in black in the focused pane, further enhancing active pane visibility.
- **Search result view "Name" column text color also unified to black in focused pane**: Applied `ActivePaneCellTextStyle` to TextBlocks in the "Name" column cells of the search result tab's GridView (SearchGridView), so they are displayed in black in the focused pane, consistent with the regular detail list.

### Fixed
- **Only "Name" column does not turn black in focused pane in detail list**: Fixed a bug where the "Name" column cell TextBlock was missing `ActivePaneCellTextStyle`, causing the text color to remain gray even in the focused pane.

## [0.5.7] - 2026-02-17 : Toolbar Icon and Hover Visibility Improvements

### Changed
- **Unified toolbar icon colors**: Fixed an issue where the right 6 icons (list view, small/medium/large icons, auto-adjust columns, folders first) appeared lighter than the left icons. Changed IconToggleButton's Foreground from SubTextBrush to TextBrush to display in the same dark gray as left-side icons.
- **Improved hover visibility in focused pane**: In the focused pane, the header background (#DFDAC8) and icon/button hover background were identical, making hover states indistinguishable. Changed hover background for IconButton / IconToggleButton to #C9C4B3 for a darker display on hover.

### Fixed
- **Virtual folder double-click expansion alternating between enabled/disabled by hierarchy level in favorites**: The per-TreeViewItem handler caused bubbling to trigger the parent's handler, toggling open/close on odd-level parents. Changed to place a single handler on TreeView and obtain TreeViewItem from e.OriginalSource. Removed the GetParent<ToggleButton> check that was always evaluating true due to template structure, preventing expansion on all folders. Fixed to expand the double-clicked virtual folder at all hierarchy levels.
- **Double-click expansion of virtual folders in favorites requiring 3-4 clicks**: In WPF's TreeView, MouseDoubleClick was firing multiple times for a single double-click, causing the toggle to execute twice and revert. Changed to detect e.ClickCount==2 in PreviewMouseLeftButtonDown, ensuring reliable expansion with a single double-click (2 clicks).

## [0.5.6] - 2026-02-17 : Box Area Actual Address Copy and UI Improvements

### Added
- **Added "Copy BOX path + actual address" for Box area**: When the current folder is within Box Drive, "Copy BOX path + actual address" is displayed below "Copy collaboration BOX path". Calls Box Drive's Shell extension (Copy shared link) and copies the collaboration path (`Box\~`) and actual address (`https://app.box.com/~`) in 2-line format to the clipboard. A loading overlay ("Retrieving actual address...") is displayed during retrieval. Supports both background and item selection. Multiple selections are separated by `---`.
- **Added "Copy folder contents list" to context menu**: When right-clicking the background (empty space) of the file list, "Copy folder contents list (names)" and "Copy folder contents list (full paths)" are shown in the "Name & Path Copy" group. Copies the items in the displayed folder (following current display, filter, and sort) as names only or full paths separated by newlines to the clipboard. When on a search result tab, copies the search result list. When there are 0 items, displays "The list contained 0 items" in the status bar.

### Changed
- **Double-click to expand organizing folders (virtual folders) in favorites view**: In the favorites tree, double-clicking an organizing virtual folder (a folder that groups children) now expands/collapses it. Double-clicking physical folders and files (display in pane / open with app) works as before.
- **Visual emphasis on focused pane**: The focused pane (A/B panes only, nav pane excluded) now has a slightly darker background than standard and black text for list and toolbar, making it easier to distinguish. The upper menu (tab headers, action row, address bar) is displayed in a slightly darker color than the list area, visually distinguishing the operation area.

## [0.5.5] - 2026-02-17 : Same-location Drop Error Resolution and Menu Improvements

### Added
- **Added "Copy collaboration BOX path" for Box area**: When the current folder is within Box Drive (e.g., `C:\Users\(username)\Box\~`), "Copy collaboration BOX path" is shown in the name & path copy group. Copies the `Box\~` format path used for sharing with other users to the clipboard. Supports both background and item selection. Multiple selections are separated by newlines.
- **Added "Copy file name" and "Copy full path" to context menu**: When right-clicking selected files/folders, menu items to copy the names or full paths of selected items to the clipboard are displayed. Multiple selections are separated by newlines. Right-clicking the background (empty space) copies the full path of the current folder via "Copy full path".

### Changed
- **Context menu grouping**: Organized app-specific menu items into 6 groups separated by dividers: "Open & Display", "Clipboard", "Name & Path Copy", "Edit & Modify", "App-specific", and "Other & System". "Copy file name" and "Copy full path" are displayed as a separate "Name & Path Copy" group independent from clipboard. Existing ContextMenuSeparatorStyle is applied to separators.
- **Removed OneDrive conversion logic from PathHelper.GetPhysicalPath**: Removed the process that converted special folders like Desktop/Documents to OneDrive physical paths, leaving only path normalization (full path resolution, trailing slash cleanup). The conversion results varied by environment (personal/business OneDrive, folder structure) and lacked generality, so the policy was unified to normalize and use the input path as-is. Resolves issues such as new folder creation failure in OneDrive areas.

### Fixed
- **UI freezes when getting subfolders from breadcrumb dropdown**: `Directory.GetDirectories` was executing on the UI thread on network drives, etc. Changed to `GetSubfoldersAsync` with asynchronous retrieval via `Task.Run`.
- **UI freezes during drag & drop file move from tree/list**: `ShellFileOperations.PerformOperations` was executing synchronously on the UI thread. Changed to execute within `Task.Run` and notify via Dispatcher only on completion.
- **UI blocked by settings file loading at startup**: Constructor was calling `WindowSettings.Load()` and `FavoritesViewModel`'s `LoadFavorites()`. Changed to display with `CreateDefault()` at startup and asynchronously execute `WindowSettings.Load()` and favorites `LoadFromSettings` in `Loaded`.
- **Thread violation error in FileSystemWatcher event handler**: The `OnFileSystemChanged` method was accessing the `MainVM` property (owned by UI thread), causing "The calling thread cannot access this object because a different thread owns it" error when called from a background thread. Fixed by dispatching the entire processing to the UI thread via `Dispatcher.BeginInvoke`.
- **Error (0x80270000, file too large) when dropping to the same location via drag & drop**: When dropping onto the same folder in the list, or dropping from the list to the tree onto the currently displayed folder, the move to the same folder is now skipped. Since the Shell move operation is not called, the error no longer occurs.

## [0.5.4] - 2026-02-16 : Focus Restoration After Back Navigation

### Added
(None)

### Changed
(None)

### Fixed
- **Focus lost after back navigation, keyboard up/down starts from the beginning**: When entering a folder and going back, focus is now restored to the "entered folder" in the destination list. Keyboard up/down keys continue operation from that position.
- **Focus not restored when going back with BackSpace (Up)**: `PathToFocusAfterNavigation` is now set in the Up command as well, so when going back to the parent folder with BackSpace, focus is set to the "entered folder".

## [0.5.3] - 2026-02-15 : Icon View Improvements and Vertical Scrollbar Position Unification

### Added
(None)

### Changed
- **Visual refinement and rounded corner display fix for icon view**: Unified thumbnail card corner radius to 4, card Margin to 3. Changed file name label background to frosted glass effect (#A0000000). Set CardBorder's ClipToBounds to False and added RectangleGeometry (RadiusX/Y=4) Clip to inner Grid for correct corner radius and shadow display. Set explicit Width/Height on CardGrid with DataTrigger for same size in medium and small icon modes. Added HorizontalAlignment="Left" and VerticalAlignment="Top" to CardBorder to prevent cards from stretching to parent size. Used SizeToRoundedRectGeometryConverter to bind Grid.Clip to ActualWidth/ActualHeight for corner radius linked to render size. Adjusted column width calculation to match Margin=3 (160/116/80 + 6) to prevent top-right and bottom-right corners from being clipped.
- **Icon view borders harmonized with design**: Changed focus border to SubtleFocusVisualStyle (BorderBrush #D3D0C3), hover border from AccentBrush to BorderBrush to match the white/gray-based UI.
- **Icon view image thumbnail tooltip**: Changed full filename tooltip from triggering on entire thumbnail hover to triggering only on lower glassmorphism overlay (InfoOverlay) hover with approximately 2-second delay, preserving the browsing experience.
- **Icon view hover behavior**: Removed hover ScaleTransform (1.03x) to eliminate font blurring. Border emphasis, micro-shadow, and lower overlay fade-in are maintained.
- **Unified icon view vertical scrollbar position with list view**: Set icon view Border's right Padding to 0 (Padding="12,10,0,10") so the vertical scrollbar appears at the right edge of the pane, aligned with the list view position.

### Fixed
(None)

## [0.5.2] - 2026-02-15 : Changed Icon Mode Selection to Toolbar Icon Group

### Added
- **Tab movement between A pane and B pane**: Dragging a tab and dropping it onto the opposite pane's tab header or tab area moves that tab to the opposite pane. Reordering within the same pane works as before. If the source has only one tab remaining, an empty tab is automatically added. In single-pane display, "Move to opposite pane" switches to dual-pane first. Added "Move to opposite pane" to the tab right-click menu.

### Changed
- **Unified selection highlight and click area to card portion in icon view**: In large, medium, and small icon display, the selection highlight and click-to-select area are now limited to the thumbnail + file name card portion only. Clicking the margin outside the card does not select, and highlights are only shown on the card portion.
- **Narrower spacing between items in medium and large icon modes**: Changed item margins from large icon 4 to 2, medium icon 3 to 2, allowing more items to be displayed in the list.
- **Improved icon view display area**: Enlarged medium and large icon sizes (small 80, medium 116, large 160) to clearly differentiate the 3 tiers. Added padding from pane edges (Padding 12,10) for a more modern and spacious display.
- **Changed icon view layout to right-edge adjustment method**: Set item Margin to 0 and consolidated whitespace to the right edge. Wrapped with Border to reliably reflect pane edge padding (workaround for ListBox Padding not taking effect). Set UniformGrid to fixed width + left-aligned, placing surplus space at the right edge.
- **Adjusted icon view item spacing to 2px**: While maintaining the right-edge adjustment method, set item Margin to 2 for adequate visibility.
- **Changed icon mode selection from popup to toolbar icon group**: Replaced the popup menu selection for large/medium/small with 3 ToggleButtons in the toolbar for small, medium, and large. The selected mode is immediately identifiable and switchable with 1 click. Icons are small=LayoutList, medium=LayoutGrid, large=PanelTop, arranged left to right in order of increasing thumbnail size.

### Fixed
- **App fails to start after adding "Move to opposite pane" to tab menu**: `PanelLeftRight` specified as the tab context menu icon does not exist in MahApps.Metro.IconPacks.Lucide, causing a XAML parse exception. Changed to `PanelRight` which has existing usage.
- **Adorner such as "Drop on A pane or B pane" remains visible during drag**: When removing the adorner, AdornerLayer was re-obtained from AdornedElement, but when the element was removed from the visual tree (e.g., by switching the nav pane during drag), GetAdornerLayer returned null and Remove was not called. Changed to retain the AdornerLayer reference from Add time and use that reference for Remove. Also added try/finally to ensure Remove is executed even in case of exceptions before/after DoDragDrop (TreeViewDragDropBehavior, MainWindow history drag, TabContentControl right-drag).
- **Thumbnails not displayed in icon view, showing "ZenithFiler.FileItem" instead**: When a custom ControlTemplate was specified for ListBoxItem, the ItemTemplateSelector result was not passed to ContentPresenter. Changed ContentPresenter to bind ContentTemplateSelector to the parent ListBox's ItemTemplateSelector instead of ContentTemplate, restoring thumbnail and card display.

## [0.5.1] - 2026-02-14 : Fixed Index Count Display When Search Target Is 0

### Added
(None)

### Changed
(None)

### Fixed
- **Previous index count displayed even when search target folders are 0**: When there are no registered folders, the persistent index is no longer referenced and the index count is displayed as 0 (returns after assigning 0 in RefreshIndexedDocumentCount when Items.Count == 0).
- **Rename not starting after new folder creation**: CollectionChanged fires during refresh (IsRefreshInProgress == true), so ApplyFocusAfterRefresh was not scheduled in OnItemsViewCollectionChanged, and the rename process was not reached. Changed to schedule ApplyFocusAfterRefresh in Loaded within the OnRefreshCompleted callback when RequestFocusAfterRefresh is true, so selection and rename are executed after refresh completion.
- **"Cannot set Owner" error when renaming favorites, editing descriptions, adding index folders, etc.**: After closing the splash on first launch, Application.Current.MainWindow was still the SplashWindow, causing an exception when setting Owner to the undisplayed window in InputBox/SelectFolderDialog/DescriptionEditDialog, etc. Fixed by setting Application.Current.MainWindow = mainWindow before closing the splash in SplashWindow's InitializationComplete. Also changed each dialog (InputBox, SelectFolderDialog, DescriptionEditDialog, AddFolderDialog, AddToFavoritesDialog, SelectExplorerWindowsDialog) to set Owner only when main != null && main.IsLoaded, preventing crashes even if MainWindow remains undisplayed.

## [0.5.0] - 2026-02-14 : Icon View Stabilization and Code Cleanup

### Added
(None)

### Changed
- **Code cleanup for icon view stabilization (TabContentControl)**: Removed redundant FileListBox guards from ListView_KeyDown, added top comment clarifying "unmodified keys disabled, refresh button enabled, Ctrl+C/V/X allowed". Removed trial-and-error [Refresh]/[F5] debug logs from OnRefreshStarting/OnRefreshCompleted/OnItemsViewCollectionChanged/ApplySelectionRestore/ApplyFocusAfterRefresh/ListView_KeyDown. Organized column count-related comments for _isUpdatingIconColumns/ApplyIconColumnCountFromPending to "Re-entry prevention: prevents infinite loop of column count change -> layout -> SizeChanged".
- **Refactoring (reliability, performance, type safety)**: Added path-not-set guard at the beginning of LoadDirectoryAsync in TabItemViewModel. Changed exception swallowing to log recording in LoadItemsFromLocal/LoadItemsFromUnc. Made path null/empty guard explicit in ShellThumbnailService.GetThumbnailAsync. Applied null conditional operator to Dispatcher in BreadcrumbOverflowBehavior. Changed Cast to OfType in UpdateSelectionInfo and organized null/empty guards. Added Dispose of existing instance before creating new _loadCts/_iconLoadCts. Consolidated item width to GetItemWidthForMode in TabContentControl, suppressed InvokeAsync duplication in UpdateColumnWidths with _updateColumnWidthsPending. Shared cloud/offline detection in LoadIconsAsync to ShouldSkipThumbnail.
- **Icon view restrictions lifted**: F5 refresh, arrow keys, Enter, and other keyboard operations are now available in icon view. Column count calculation applies 30ms debounce + ApplicationIdle to prevent layout chain, and focus restoration executes at ContextIdle after column count update.
- **Icon view stability prioritized (reverted)**: To eradicate StackOverflow in PresentationCore, keyboard operations (arrows, Enter, F5, etc.) and toolbar refresh button are disabled in icon view. Removed complex code for focus evacuation, ScrollIntoView delay, 100ms suspend, etc. for verification, reverting to a simple and safe implementation.

### Fixed
- **Stability measures to limit keyboard operations to mouse in icon view to prevent StackOverflow from WPF layout conflicts**: Unmodified keys (F5, arrows, Delete, etc.) are disabled, while toolbar "Refresh" button and modifier key operations such as Ctrl+C/Ctrl+V/Ctrl+X remain available.

## [0.4.28] - 2026-02-14 : Favorites Quick Access Import

### Added
- Added a Quick Access import button to the favorites view. Pressing it imports items from Explorer's Quick Access (pinned items, etc.) into favorites.

### Changed
- Unified the Quick Access import button icon color to SubTextBrush, same as other icons.
- Changed the Quick Access import destination to within a folder named "Import" with description "Imported from Explorer's Quick Access". If a folder with the same name already exists, items are appended to it.

### Fixed
- **Item spacing becomes very wide intermittently in icon mode**: Fixed an issue where SizeChanged fired with a small width first, causing column count 1 to be confirmed by the delayed callback, and subsequent recalculation with the correct width was ignored by re-entry prevention. Changed the delayed callback to re-acquire `FileListBox.ActualWidth` and recalculate column count, preventing the race condition where column count 1 was confirmed with a small width.

## [0.4.27] - 2026-02-14 : View Format UI Improvements (Per-pane Placement, Menu Close, Selection Highlight Unification)

### Added
(None)

### Changed
- **Icon mode selection menu improvements**: The popup now closes when selecting large, medium, or small icons. Also unified the selected state display for list view/icon view toggle buttons to the same light blue background (#D0E6F8) + accent color icon as "Auto-adjust columns" etc. (changed to ToggleButton + IconToggleButton).
- **Moved list view / icon view toggle to each pane's icon group**: Previously a shared button at the right end of the status bar toggled the focused pane, but now list view/icon view toggle buttons are placed in each pane's toolbar (right of "Import to folder", left of "Auto-adjust columns") for per-pane switching. MANUAL.md descriptions updated accordingly.
- **Changed view format button tooltips**: Changed the list view button (Rows3 icon) tooltip at the right end of the status bar to "Switch to list view", and the icon view button (LayoutGrid icon) tooltip to "Switch to icon view". MANUAL.md descriptions also updated.
- **Tree view double-click supports both expansion and pane display**: When double-clicking on the expand arrow (triangles), only tree open/close is performed without displaying in the pane. Only when double-clicking the row body (icon, folder name) is the item displayed in the pane. This allows intentional "expand only" or "display in pane only" operations even for items with child folders.
- **Added Shift+click / Shift+Ctrl+click for icon view display in tree view**: Shift+clicking a folder displays it in large icon view in the focused pane, Shift+Ctrl+clicking displays it in large icon view in the opposite pane (auto-switches to dual-pane in single-pane mode). Specifications added to tooltips and MANUAL.md.
- **Changed tree view click behavior**: Single click now only selects. Double-click or Enter displays the folder in the focused pane. Ctrl+double-click displays in the opposite pane (auto-switches to dual-pane in single-pane mode). "Display in A pane" and "Display in B pane" in the right-click menu specify the display target. Added tooltips to each folder (double-click to display in pane, Ctrl+double-click to display in opposite pane).
- **Display file names up to 4 lines in icon view (non-image)**: Changed non-image items (folders, documents, etc.) file name display from 2 lines to up to 4 lines. Names exceeding 4 lines are truncated with "...".
- **Fixed card height and icon/title position in icon view (non-image)**: For non-image items (folders, documents, etc.), fixed card height and aligned icon area and title start position. Results in a harmonious display similar to Explorer.

### Fixed
- **Tree double-click displays parent folder's path**: Because TreeViewItem's MouseDoubleClick bubbles up to the parent, sender was the root-side item, and the parent's path was displayed in the pane instead of the clicked folder. Fixed by obtaining the actually clicked TreeViewItem using GetParent from e.OriginalSource.
- **Background tab appears blank and requires manual refresh**: Tab restoration only loaded the selected tab, and background tabs did not have LoadDirectoryAsync called on first display. Changed RefreshIfNeededOnTabFocus to also execute LoadDirectoryAsync for "unloaded background tabs" (those with a path but empty Items) when focused, ensuring the list is correctly displayed when showing background tabs.

## [0.4.26] - 2026-02-14 : Icon View Improvements (Instant Thumbnail Display, Freeze Resolution)

### Added
(None)

### Changed
- **Unified icon view to Explorer-style specifications**: Narrowed spacing between files and unified font size to 12pt. Non-image items have fixed rows separating icon and text areas, aligning title start position. Long file names are truncated with "..." (displayed up to 2 lines, truncated beyond). Card size and margins are tightened for both image and non-image items to improve list density.
- **Improved icon view appearance and effects**: Redesigned as a gallery-grid style with images as the focal point. Thumbnails fill the entire card (UniformToFill), BitmapScalingMode changed to HighQuality for improved visibility. Removed hover blur (DropShadowEffect) and card enlargement, replaced with smooth image-only zoom (1.08x) and accent border emphasis, with file name and details fading in on a lower overlay. File names are hidden normally and displayed on a semi-transparent black overlay on hover. Small icons omit the overlay and show names via tooltip.
- **Improved identification of non-image files in icon view**: Non-image files (folders, documents, etc.) have their square frame (white background) and border removed for transparency. Icons are centered at appropriate size with file names always displayed below the icon. Images retain thumbnail tiles with name display on hover, while non-images have a clean appearance close to OS standard for instant identification.
- **Instant thumbnail display in icon view**: Resolved the issue where thumbnails appeared 5-10 seconds late when opening an image folder. Added non-blocking GetThumbnailAsync to ShellThumbnailService and changed LoadIconsAsync to a two-pass approach: "first pass reflects only icons and TypeName to UI" and "second pass asynchronously retrieves thumbnails for images only, reflecting to UI in batches of 10 as completed". The list shows icons immediately upon opening, with thumbnails appearing progressively in a few hundred ms to 1 second.

### Fixed
- **Layout becomes sparse when file count is low in icon mode**: Added `VerticalAlignment="Top"` to UniformGrid so items are top-aligned even when few, displaying at the same density as when there are many files.
- **Freeze and abnormal termination (StackOverflowException) when navigating paths in icon mode**: Identified as caused by synchronous re-entry loop from breadcrumb `SizeChanged` -> `UpdateVisibleSegments` -> layout update, and SetValue during layout from icon column count change. Fix: (1) Deferred `UpdateVisibleSegments` execution in `BreadcrumbOverflowBehavior` via `Dispatcher.BeginInvoke(Loaded)` to prevent re-entry during layout, (2) Async `IconColumnCount` setting in `UpdateIconColumnCount` via `BeginInvoke(Loaded)`, (3) Deferred `UpdateVisibleSegments` call at end of `UpdatePathSegments` via Loaded to prevent chain immediately after path change.
- **Dropping folders from favorites/other pane to create new tab in icon view causes pane freeze and lock to icon view**: Synchronous tab addition and selection change within the drop event caused drag & drop and UI update conflicts. Changed tab addition to deferred execution via `Dispatcher.BeginInvoke(Loaded)`. Also changed `SyncListItemsSources` to always sync the ItemsSource of the list to the current tab's View according to display mode, ensuring correct display during tab switch and DataContext change.

## [0.4.25] - 2026-02-14 : Refactoring (Processing Efficiency and Reliability)

### Added
(None)

### Changed
- **Icon view state persistence**: The display mode (detail / large, medium, small icons) for each A pane and B pane is now saved to settings.json and restored on next startup. When opening a new tab, the pane's display mode is automatically applied.
- **Refactoring (processing efficiency and reliability)**: Optimized LoadIconsAsync in TabItemViewModel, eliminating repeated list snapshot creation (ToList) and dictionary creation, reducing computational complexity from O(N^2) to O(N). Made DeleteItems asynchronous to eliminate UI freeze during file deletion, and ensured COM object release in CreateShortcut to prevent resource leaks.

### Fixed
(None)

## [0.4.24] - 2026-02-14 : Icon View Stabilization (Refresh and Key Disabling)

### Added
- **Image file thumbnail display**: When displaying image files (jpg, png, gif, bmp, webp, etc.) in icon view (large, medium, small), actual image thumbnails are now shown similar to Explorer. Stable thumbnail retrieval is achieved using the WindowsAPICodePack-Shell library. Detail view continues to show icons as before. Thumbnail retrieval is skipped for Box and offline files to reduce load.
- **File list view mode switching**: Clicking the grid icon at the right end of the status bar displays a popup menu where you can select "Detail", "Large Icons", "Medium Icons", or "Small Icons". The selected mode switches the focused pane's display mode. Icon view features a modern card layout with hover animations and rounded corner design.
- **Batch-add pane tabs to favorites**: Right-clicking a tab and selecting "Add all tabs of this pane to favorites" registers all tab paths of that pane as a new virtual folder in favorites. The folder name is entered via a dialog before saving.
- **Open new tab with wheel click on favorites**: Wheel-clicking (middle-clicking) an item in favorites (tree or search results) now opens that folder (or the parent folder for files) in a new tab in the active pane.
- **Open new tab by dropping folder from file list to tab header**: Dragging a folder from the file list and dropping it onto the tab display area (on a tab item or empty space) now opens that folder in a new tab.
- **Diagnostic logs during F5 refresh**: Added logs with `[Refresh]` prefix at each stage of Refresh processing for abnormal termination investigation. Logs are recorded in date-specific files in the `logs` folder, allowing identification of the location of abnormal termination from the last output log. Added thread info, IsTerminating, and other context to DispatcherUnhandledException and UnhandledException.

### Changed
- **Migrated thumbnail retrieval to WindowsAPICodePack-Shell**: Replaced in-house BitmapImage thumbnail generation with the proven WindowsAPICodePack-Shell library for thumbnail retrieval. Improved stability and memory usage with dedicated STA thread, LRU cache (300 item limit), and 200 items per folder limit.
- **Reintroduced VirtualizingWrapPanel for icon view (Strategy F)**: Systematic diagnosis from Strategy A through E revealed that non-virtualized WrapPanel causes stack overflow from layout recursion with large numbers of items. Reintroduced VirtualizingWrapPanel with template structure improvements (removed ContentControl, MultiBinding) and CollectionChanged optimization (SilentObservableCollection, DeferRefresh, IsRefreshInProgress guard) already applied. Set `VirtualizingPanel.IsVirtualizing="True"`, `VirtualizationMode="Recycling"`, `CacheLengthUnit="Page"`, `CacheLength="1,1"` to suppress container generation for off-screen items, fundamentally resolving the StackOverflowException.
- **Reverted view mode switching layout**: Placed "Detail" as an individual button (Rows3 icon) on the left side, with the "Switch view mode" button (LayoutGrid icon) to its right. Changed the popup menu to display only 3 options: "Large Icons", "Medium Icons", and "Small Icons".
- **Disabled refresh and keyboard operations in icon view**: During icon view (large, medium, small icons), F5 and keyboard operations on the list (arrows, Enter, Back, Delete, F2, etc.) are disabled. The refresh button is grayed out, and list operations are mouse-only. Switching to detail view restores full functionality. This avoids operations that could trigger StackOverflowException in icon view while maintaining thumbnail display and folder navigation.
- **Persisted search result filter bar settings**: The selection state of file type filters (folders, Excel, Word, etc.) is now saved to settings.json and automatically restored for the next search and after app restart. This saves the effort of reconfiguring filters each time for users who tend to search with the same criteria.

### Fixed
- **Style exception in view mode popup**: A `ContextMenuItemStyle` (TargetType=MenuItem) was being applied to Buttons in the view mode switching popup, causing a type mismatch exception. Removed the style and changed to inline Background/Foreground with ControlTemplate for display.
- **Folder drop from file list to tab header not working**: `TabControlDragDropBehavior` was processing `DragOver` / `Drop` and setting `e.Handled = true` for data formats other than tab reordering (`DataFormats.FileDrop`, etc.), preventing `DockPanel`'s `TabHeader_Drop` from being called. Fixed to set `e.Handled = false` for non-`"ZenithFilerTabItem"` cases to propagate the event.
- **Cannot drop folders to tab header with left-click drag**: Left-click drag was not allowing `DragDropEffects.Link`, so drops to the tab header (which requires `Link`) were being rejected. Fixed to allow `Link` as with right-click drag.
- **Context menu error on tab right-click**: Adding a `Separator` to the tab context menu caused "A style intended for type 'MenuItem' cannot be applied to type 'Separator'" error as the `ItemContainerStyle` (for MenuItem) was applied to Separator. Resolved by removing the Separator.
- **Cannot select choices in index settings ComboBox**: Fundamentally fixed the issue where clicking choices in the "Update at regular intervals" and "Full re-index minimum interval" dropdowns was not reflected, remaining at defaults. Replaced ComboBox with RadioButton-style selection UI. Choices are visible at a glance and selection is reliably reflected.
- **Keyboard shortcuts stop working**: `MainWindow_PreviewKeyDown` was setting `e.Handled = true` when no modifier keys (Ctrl/Alt/Shift) were pressed, preventing shortcut keys defined in `InputBindings` (Ctrl+T, Ctrl+W, Ctrl+Shift+E, etc.) from being processed. Changed to not set `e.Handled` when modifier keys are pressed, restoring normal `InputBindings` operation.
- **F2, Delete, Enter sometimes don't work**: When focus was not on the list within the pane, `PreviewKeyDown` was unconditionally setting `e.Handled = true`, preventing `KeyDown` from firing and blocking F2 (rename), Delete, Enter, etc. processed in `ListView_KeyDown`. Added a `KeyDown` event handler and changed to only set `e.Handled` when the forwarding target processed the event, ensuring reliable operation at all times.
- **Thumbnails not displayed after folder navigation in icon view**: Thumbnails appeared after mode switch but not at all after folder navigation. Fixed by executing supplementary loading after LoadIconsAsync completion and ensuring UI updates are reflected via DispatcherPriority.Normal.
- **Abnormal termination during refresh**: Fixed abnormal termination when refreshing (F5) in a state where thumbnails are not displayed after folder navigation. Implemented serialization (semaphore) for LoadDirectoryAsync, double-execution prevention for Refresh, exception log output, and defensive coding in OnRefreshCompleted (snapshot via ToList, try-catch), along with enhanced exception logging in ShellThumbnailService.
- **Abnormal termination during F5 refresh (additional measures)**: Added defensive coding at multiple points to prevent InvalidOperationException from enumeration during collection changes: OnRefreshStarting (try-catch for SelectedItems), ApplyFocusAfterRefresh (ToList snapshot of list.Items), LoadThumbnailsForCurrentItemsAsync (ToList snapshot of Items), LoadIconsAsync (ToList snapshot of Items), and UpdateSelectionInfo (try-catch and snapshot for selectedItems).
- **Abnormal termination during F5 refresh (root cause fix)**: Identified as native crash in WPF rendering thread. Changed to copy pixel data to WriteableBitmap and Freeze to completely sever dependency on WindowsAPICodePack COM objects during thumbnail retrieval. Added BitmapSource validity verification (PixelWidth/PixelHeight > 0) at thumbnail retrieval, icon retrieval, and ThumbnailOrIconConverter points. Added ImageFailed event handler to Image elements in icon view to clear Source to null on rendering failure, preventing WPF rendering thread crashes.
- **Crash during F5 refresh in icon view (virtualization fix)**: Virtualization was disabled (`VirtualizingStackPanel.IsVirtualizing="False"`) in the icon view ListBox, causing all file Image elements in the folder to be generated and rendered simultaneously, crashing the WPF rendering thread from massive simultaneous thumbnail/icon rendering. Introduced `VirtualizingWrapPanel` NuGet package (v2.3.2) with virtualization enabled (`VirtualizingPanel.IsVirtualizing="True"` + `VirtualizingPanel.VirtualizationMode="Recycling"`). Off-screen element generation is suppressed, significantly reducing memory usage and rendering load. Changed BitmapScalingMode from HighQuality to LowQuality to further reduce rendering thread load.
- **Abnormal termination during F5 refresh (enhanced diagnostics + safety)**: Resolved the issue where logs were asynchronous (via Channel) and not written to file before crash, making root cause identification difficult. Changed all logs in F5 key handler, Refresh(), LoadDirectoryAsync(), and App_DispatcherUnhandledException to `LogSync` (synchronous write) to ensure logs persist right up until crash. Changed `WriteableBitmap` construction for thumbnail retrieval from `new WriteableBitmap(bmp)` constructor to `CopyPixels` + `WritePixels` method, eliminating implicit access to COM object native buffers. Added try-catch to ThumbnailOrIconConverter with guard to exclude non-Frozen BitmapSource. Prevents converter exceptions from propagating to the WPF rendering pipeline and causing native crashes.
- **Abnormal termination during F5 refresh (root cause resolution: StackOverflowException)**: Windows Event Viewer identified the crash as `System.StackOverflowException` (infinite recursion in PresentationFramework). MergeItems was individually Adding/Removing Items, causing continuous CollectionChanged firing, which recursively called WPF layout recalculation (MeasureOverride/ArrangeOverride), overflowing the stack. (1) Created `SilentObservableCollection` and used `ReplaceAll` in MergeItems to suppress CollectionChanged to a single Reset. (2) Wrapped ApplySort in `ICollectionView.DeferRefresh()` to consolidate SortDescriptions Clear+Add into a single Refresh. (3) Added refresh-in-progress guard (`IsRefreshInProgress`) to OnItemsViewCollectionChanged to suppress focus restoration scheduling during MergeItems+ApplySort execution. This eradicates cascading CollectionChanged firing and resolves the StackOverflowException.
- **StackOverflowException in icon view (Strategy H-2: UniformGrid + re-entry prevention)**: F5 crash reproduced even with 4 files, confirming infinite recursion unrelated to item count. Replaced ItemsPanel with `UniformGrid` (fixed column count, width-independent layout). Column count is dynamically calculated from `availableWidth / itemWidth` in `FileListBox.SizeChanged`. Since the crash module shifted from PresentationCore to ZenithFiler itself (P4=ZenithFiler, P7=660), identified the cause as re-entry loop of `SizeChanged -> UpdateIconColumnCount -> IconColumnCount change -> layout -> SizeChanged`. Fix: (1) `_isUpdatingIconColumns` re-entry prevention flag blocks recursive calls between `FileListBox_SizeChanged` and `UpdateIconColumnCount`, (2) Does not update `IconColumnCount` when calculated column count equals current value (prevents unnecessary layout invalidation).

## [0.4.23] - 2026-02-13 : Favorites Environment Icons and Dual-pane Tab Freshness

### Changed
- **Dual-pane tab freshness**: In dual-pane display, both A pane and B pane display tabs are now targets for immediate file change freshness updates. Previously only the active pane's tab was targeted.
- **Added environment icons to favorites file display**: Added environment (location) icons (Local / Network / Box / SPO) to the left of files in favorites tree and search results. Makes it immediately identifiable which storage a file is on.

### Fixed
- **Favorites file environment icon vertically misaligned**: Aligned vertical centering of environment icons and file icons.

## [0.4.22] - 2026-02-13 : Tab Auto-freshness and Load Reduction

### Changed
- **Optimized tab folder monitoring and freshness**: Only the displayed tab receives immediate updates from FileSystemWatcher change detection. Background tabs are refreshed when they receive focus (tab switch or pane switch). Reduces system load when using multiple tabs while maintaining usability.

## [0.4.21] - 2026-02-13 : Instant Search Result Display and UI Improvements

### Added
- **Search result file type filter**: When a search is executed, the address bar is replaced with a filter bar where you can filter by folder, Excel, Word, PPT, PDF, TXT, EXE, BAT, JSON, images, and others using checkboxes. "Select All" and "Clear All" buttons allow efficient filter switching.

### Changed
- **Instant search result display**: During index search, eliminated sequential access to file system and shell APIs, instead generating FileItem directly from index path, name, modified, and is_dir. Generic icons are retrieved only twice in advance, greatly reducing wait time from search completion to result display. Sort is applied in bulk after all items are added, reducing re-sort overhead per addition.
- **Modern redesign of search filter bar**: Changed filter toggle buttons to pill shape (CornerRadius 10). ON state uses light blue background + blue border/text for improved visibility. OFF state uses white background + gray border + dark gray text for clear button recognition. 3px margin between buttons, Padding 8,3 for comfortable spacing.
- **System file exclusion in index search**: Automatically excludes system-related files and folders not normally used by users during index creation. Exclusion targets: system folders such as `$Recycle.Bin`, `System Volume Information`, `$WINDOWS.~BT`; system files such as `desktop.ini`, `Thumbs.db`, `NTUSER.DAT`; Office temporary files starting with `~$`; temporary files with extensions `.tmp`, `.temp`, `.bak`, `.swp`.

### Fixed
- **Border line becomes hard to see when hovering selected item in option settings view**: Added `OptionRadioButton` style to maintain selection-indicating borders when hovering a selected RadioButton. Applied to context menu, search behavior, search result path click, and index update timing RadioButtons.
- **Non-selected items hard to distinguish in option settings view**: Added thin border (BorderBrush) to non-selected RadioButtons, making it visually clear that "this is a selectable area".

## [0.4.20] - 2026-02-13 : Improved Responsiveness on Focus Return

### Added
- **Register files to favorites**: Files, in addition to folders, can now be registered in the favorites view. Right-click a file in the file list and select "Add to favorites", or drag and drop a file to the favorites view in the nav pane. Double-clicking a file in favorites opens it with the associated app, while "Open in A pane" and "Open in B pane" display the parent folder.

### Changed
- **Extended favorites registration targets**: Registration targets, previously folders only, now also support files. AddPath, AddPathWithDialog, and drag & drop all support files.
- **Improved responsiveness on focus return**: Multiple improvements to prevent freezing and blank screens when returning focus to the app from background. Extended GC execution timing from 5 seconds to 60 seconds, and cancel pending GC on active return. Changed GC mode from Forced to Optimized, with LOH compaction only when inactive for more than 5 minutes. FileSystemWatcher refresh prioritizes the active tab for immediate execution, with other tabs executed sequentially at 500ms intervals.
- **Reduced UI thread blocking**: Replaced Dispatcher.Invoke with InvokeAsync (FavoritesViewModel, IndexSearchSettingsViewModel, TabItemViewModel, TreeViewDragDropBehavior, ShellContextMenu). Essential blocking points like OwnerWindow setting remain as Invoke.
- **Strengthened resource management**: Implemented DispatcherTimer stop and event subscription unsubscription on TabContentControl's Unloaded. Added IndexService Dispose call on app exit. Added Items/SearchResults clear and _watcherCts Cancel to TabItemViewModel's Dispose.

### Fixed
- **Freeze and blank screen on focus return**: Reduced instances of temporary unresponsiveness or blank screens when returning focus to the app. Improved reliability for always being available when needed through GC optimization, staged refresh execution, and UI thread block reduction.

## [0.4.19] - 2026-02-12 : First Launch Splash and IME State Preservation

### Added
- **First launch splash screen**: A splash window is now displayed only on first launch, communicating that preparation is underway and that subsequent launches will be faster. Displays a glowing pulse ring loading animation, version information, and random feature tips.

### Changed
- **Reverted splash screen to first launch only**: Changed the splash that was displayed on every launch to display only on first launch (when settings.json does not exist). From the second launch onward, MainWindow is displayed directly.
- **Instant launch with dynamic splash**: Separated heavy resources like WPF-UI themes into AppResources.xaml, loading only lightweight App.xaml at startup for immediate dynamic splash display. MainWindow resources are lazy-loaded during splash display, so launch completion time is unchanged regardless of splash presence. Static splash approach (hybrid) was discontinued.

### Fixed
- **IME state changes at startup**: Set InputMethod.IsInputMethodSuspended during splash display and suppressed focus transition with ShowActivated=false during MainWindow display, preserving the IME state from before launch.
- **Two loading animations displayed during index creation**: When search and index creation run simultaneously, both the IsBusy loader and IsIndexing loader were displayed. Introduced BusyNotIndexingConverter to hide the IsBusy indicator during IsIndexing, showing only the dedicated indicator during index creation.

## [0.4.18] - 2026-02-12 : Custom Context Menu Details in Manual

### Added
- **Custom context menu**: When right-clicking the file list, you can now choose between the app's lightweight custom menu or an Explorer-compatible menu. In app settings (General), select "App custom menu (recommended)" or "Explorer-compatible menu". The custom menu instantly shows basic operations like open, copy, delete, rename, favorites, and index search. Shift+right-click or "Show Explorer context menu" within the menu transitions to the Explorer-compatible menu. Default is custom menu.
- **Open with text editor / Open with painter**: Added "Open with text editor" (for text-type files) and "Open with painter" (for image-type files) to the custom context menu. Opens with the app set as default in the OS (edit association). For multiple selections, each menu appears when all items are text-type or all are image-type.

### Changed
- **Context menu on right-click**: Changed to display the app custom menu by default. Prioritizing perceived responsiveness, the Explorer-compatible menu is available via Shift+right-click when shell extensions like 7-Zip are needed.
- **Open with text editor**: Previously opened with the default app per file extension, but now always opens with the default app for `.txt` (e.g., Notepad set in OS "Default apps"). HTML and other text-type files also consistently launch the .txt default app when opened as a text editor.
- **Custom context menu details in manual**: Added section "2-4. Custom Context Menu" to MANUAL.md. Details menu types and switching, full item list for app custom menu, display position and style, and Explorer-compatible menu. Section 2-3 right-click descriptions were simplified with reference to 2-4. Drag & drop was moved to 2-5.

### Fixed
- **Open with text editor does not open with .txt default app**: In environments where the .txt default is changed (e.g., EmEditor), `GetDefaultTextEditorPath()` was referencing `txtfile` fixedly, returning null, and the fallback launched the per-extension default app (e.g., Edge for .html). Fixed to dynamically obtain the ProgId from HKCR\.txt and retrieve the executable from that ProgId's `shell\open\command`.

## [0.4.17] - 2026-02-12 : Manual / Changelog View Stabilization and Refactoring

### Added
- **Refactoring proposal document**: Added `docs/REFACTORING_PROPOSAL.md`. Organizes proposals prioritized by impact for improving performance and reliability without functional regression.

### Changed
- **Manual and changelog window layout**: Expanded window default size (1100x800 to 1400x900). Widened left pane (table of contents) width (280 to 340px) so long headings are less likely to be truncated. Adjusted left pane scrollbar to align to the right edge.
- **Refactoring (performance, reliability, maintainability)**: Implemented based on the proposal document. Markdown pipeline caching, FindVisualChild consolidation (VisualTreeHelperExtensions), DocViewer ScrollChanged duplicate registration prevention, exception handling log output, search logic separation into DocumentSearchHelper, PostProcessDocument ToList removal, MainViewModel TreeFolderOperationHandler delegation, ManualTocItem IconKind mapping cleanup, TabItemViewModel region splitting, and ContinueWith exception logging for fire-and-forget tasks in ManualViewModel.

### Fixed
- **Changelog page not displayed**: Fixed an issue where the page was blank when opening ManualWindow on the "Changelog" tab, or the manual content continued to display when switching from manual to changelog. Changed to synchronously load initial display to secure content before window display, added Environment.ProcessPath (EXE location) as priority for path search, and ensured UI reflection with DispatcherPriority.ApplicationIdle.
- **InvalidOperationException in PostProcessDocument**: Fixed an issue where EnhanceCategoryHeading's Inlines.Clear() modified the collection during enumeration during document processing. Changed to take a snapshot of doc.Blocks with ToList() before enumeration.

## [0.4.16] - 2026-02-11 : Index Updates and Manual Expansion

### Added
- **Detailed index search manual**: Added section "4. How Index Search Works and Tuning" to MANUAL.md. Explains index search concepts, lifecycle, index search settings view and app settings details, search execution behavior, freshness warning bar, troubleshooting, and technical details (Lucene.NET, threading, exceptions, performance, search accuracy).
- **Index control options**: Added options to control index search behavior. Added "Index update timing and load" and "Search result freshness" to the options settings view. Added "Create unindexed", "Pause", "Resume", "Run full rebuild...", and "Open index settings" to the index view.
- **Per-folder index operations**: Added right-click operations on the folder list in index search settings: "Recreate index" deletes and recreates the index for that folder (reflecting deleted files), and "Differential update" reflects only new and updated items without deletion.
- **Full re-index minimum interval**: Added an option in the app settings view under "Index update timing and load" to select the minimum interval for full rebuild (6 hours / 12 hours / 24 hours).
- **settings.json auto-completion**: Implemented migration to automatically supplement missing index-related items when inheriting a `settings.json` from before specification changes.
- **Index settings best practice auto-configuration**: When `settings.json` does not exist, automatically configures low-load defaults (2-hour interval, power-saving mode, parallel 2, network low priority).

### Changed
- **Index update timing implementation**: The "Update timing" in app settings now functions. "Auto-incorporate changes" uses FileSystemWatcher for immediate differential updates. "Update at regular intervals" rescans all registered folders at specified intervals. "Update only when needed" updates only on "Create unindexed" or "Full rebuild..." operations. Changes take effect immediately. Updated MANUAL's 3-mode descriptions to match implementation. Ensured IndexService Dispose reliably stops the Interval task.
- **Performance and load implementation**: "Update index in power-saving mode" and "Process network drives lightly" now function. Power-saving mode extends wait time per 100 items to reduce CPU/disk load. Network drives (UNC, mapped drives) process even more slowly based on load settings. Changes take effect immediately.
- **Terminology unification**: Unified the Japanese term for "index" to the standard form. Consistent spelling across UI, manual, CHANGELOG, and in-code comments/notification messages.
- **Search result freshness implementation**: The "Search result freshness" in app settings now functions. When "Keep as current as possible (freshness priority)" is enabled, differential updates and unindexed creation for all target folders are started in the background during index search, updating the index in parallel with search results. When "Show message when index may be stale" is enabled, a warning message is displayed on the search result view when there are unindexed or in-progress folders.
- **Options settings view structure**: Integrated home and search result display destination. Added index-related sections. Uses simple grouping without tabs.
- **Options settings view category headings**: Divided into 3 categories: "1. General Settings (Home & General)", "2. Search (Search UI)", "3. Index (Indexing & Freshness)" with manual-heading-style design (left blue bar, light background) for clear hierarchy. Widened spacing between categories for easier visual distinction.
- **Options settings view margin adjustment (Plan B)**: Unified to 40px between categories, 20px between sections, 12px between radio/checkbox items. Expanded inner padding to 10px and widened line spacing between descriptions and controls for a modern, readable layout.
- **Index view**: In addition to target folder registration and deletion, added index status display, "Create unindexed", pause, resume buttons, and menu (full rebuild, open settings).
- **Clarified index view manual update behavior**: Clarified the specification so that the "Create unindexed" button targets only folders that have never been indexed and creates the index immediately. When there are no target folders, displays a notification "There are no unindexed folders".

### Fixed
- **Improved freshness-related errors and excessive warnings**: Limited freshness warnings to "only when there are unindexed folders", not displaying for temporary in-progress-only states. Also properly handled exceptions in background differential updates run in freshness priority mode, preventing UnobservedTaskException and other unhandled exceptions.
- **XamlParseException in freshness warning bar**: An invalid `AlertTriangle` was specified for PackIconLucide Kind, causing "AlertTriangle is not a valid value for PackIconLucideKind" when displaying the search result tab. Fixed to the correct Lucide icon name `TriangleAlert`.
- **Added close button to freshness warning bar**: Added an X button so users can manually dismiss the warning message.
- **Scrollbar in app settings view**: Fixed an issue where app settings view content was not visible at the bottom of the screen. Added a ScrollViewer so content can be verified by vertical scrolling when it doesn't fit.
- **Text truncation fix**: Added TextWrapping to prevent long text from being truncated in app settings checkboxes (power-saving mode, network drives, search result freshness).
- **Index creation timing issues**: Fixed an issue where scanning returned early under certain conditions when adding folders, leaving the UI stuck at "Unindexed/Creating". When covered as a child of a parent root, UI is synced with MarkAsIndexed. RefreshItemsStatus is called on folder addition, "Create unindexed" press, and IsIndexing change to synchronize IndexService state and display. Added debug logging for early return reasons.
- **"Open index settings" in index view not responding**: Clicking "Open index settings" in the menu (...) did not switch to the app settings view. Changed Menu to ContextMenu and bound Command via PlacementTarget, enabling menu opening via left click.
- **Scroll position when "Open index settings"**: Improved to scroll to the "3. Index" heading at the top of the nav pane using ScrollToVerticalOffset when switching to the app settings view.

## [0.4.15] - 2026-02-11 : Search Defaults and App Settings Manual

### Added
- **Search behavior (3 patterns)**: Select search execution display target in the app settings view. "Same pane, new tab" (Enter opens new tab), "Same pane, instant search in current tab" (instant search on input, no Enter needed), "Opposite pane, new tab" (Enter displays in opposite pane, auto-switches to dual-pane in single-pane mode).
- **Search result path click behavior (3 patterns)**: Select display target when clicking the path column in search result list in the app settings view. "Display in same tab" (switches from search result view to normal list), "Same pane, new tab" (as before), "Opposite pane, new tab" (auto-switches to dual-pane in single-pane mode).
- **Search bar clear on opposite pane new tab**: When displaying search results in the opposite pane, the search bar on the searching pane is automatically cleared.
- **Detailed explanations in app settings manual**: Added descriptions of each option's behavior and suitable use cases for "Search behavior" and "Search result path click behavior" to the manual.

### Changed
- **Search behavior and path click behavior defaults**: Explicitly set both defaults to "Same pane, new tab".
- **Focus on "Opposite pane, new tab" for search result paths**: When opening a new tab in the opposite pane by clicking the path column in search results, focus now moves to the new tab's file list.
- **Sequential index creation**: When multiple folders are registered, scanning was previously done in parallel, causing status bar messages to switch rapidly and increasing server load. Changed to sequential execution, processing one folder at a time.
- **Fixed width for app settings view**: When displaying the app settings view, the nav pane now expands to a fixed width (340px), similar to index search settings, browsing history, and tree view.
- **App settings view input field layout**: Changed the A/B pane home address input fields to stretch the full width of the view by changing StackPanel to Grid and allocating remaining width to the input fields.
- **App settings shortcut**: Since `Ctrl+Shift+0` is reserved for Windows input language switching, unified the app settings view shortcut to `Ctrl+Shift+O` (the letter O) only.

## [0.4.14] - 2026-02-11 : App Settings View and Home Button

### Added
- **Folder selection from tree for index search settings folder addition**: When pressing the "Add folder" button, a folder tree dialog opens instead of a path input dialog, allowing direct folder selection and registration from the tree.
- **App settings view**: Added an app settings button to the icon group on the right side of the nav pane (left of manual). Toggleable with `Ctrl+Shift+O`. Allows setting home addresses for A pane and B pane respectively.
- **Home button**: Added a home button to the "Location" group in the A pane and B pane toolbars. Navigate to the configured home address with one click. When not configured, A pane defaults to Desktop and B pane defaults to Downloads.

## [0.4.13] - 2026-02-11 : Japanese Search Accuracy Improvement with name_raw
### Changed
- **Improved Japanese search accuracy**: Improved search accuracy for Japanese keywords (e.g., compound words) in both regular and index search. Changed the default operator from OR to AND, eliminating excess partial matches (files containing only individual tokens). Changed the parse error fallback from wildcards (which don't hit without tokenization) to PhraseQuery construction using analyzer tokenization.
- **Enhanced search with name_raw field**: Added a non-tokenized `name_raw` field to the index for wildcard search in parse error fallback. This makes partial matching of Japanese file names more reliable. To take advantage with existing indexes, remove and re-add the relevant folder in index search settings, or clear and recreate the index.
- **Include folders in search results**: Both index search and regular search results now display folders in addition to files. To include folders in already-indexed folders, remove and re-add the relevant folder in index search settings.
- **Search result sort order**: Search results are now displayed in descending order of modification date (newest first).

## [0.4.12] - 2026-02-11 : Error Log Output
### Added
- **Error log output**: When unexpected errors (DispatcherUnhandledException), fatal errors (UnhandledException), or background task unhandled exceptions (UnobservedTaskException) occur, the exception type, message, stack trace, and inner exception are now written to log files.

## [0.4.11] - 2026-02-11 : Extended Permitted Operations When Favorites Are Locked
### Changed
- **Extended permitted operations when favorites are locked**: Even while the favorites view is locked, favorites registration (star button / drop), rename, and description editing are now allowed. Virtual folder addition, deletion, and reordering remain restricted by the lock as before.
- **Address bar button placement**: Moved the favorites registration button (star) to the right side of the address bar, left of the copy button. Moved the edit path button (pencil) to the left end of the address bar.
- **Progress display when resuming index creation**: When resuming after interruption, the count display now continues from the number previously indexed. This makes it clear that creation resumed from a midpoint.
- **Immediate reflection of index creation**: When multiple folders are registered, the nav pane's "Index Search Settings" list is now immediately updated as each folder's index creation completes. As before, it also updates when all targets have completed.

### Fixed
- **Text truncation in count display in index search settings view**: Fixed an issue where the completed index count (e.g., "5,050 items") in the nav pane's "Index Search Settings" list was truncated when the nav width was narrow. Changed layout to place the status column on the left with fixed width (75px) and set the folder name column to Auto, ensuring the count is always fully displayed.
- **XAML type conversion error at app startup**: An invalid `Width="*"` was specified on GridViewColumn in the index search settings view, causing a `TypeConverterMarkupExtension` exception at startup. Since GridViewColumn only supports `Auto` and numeric values, fixed in conjunction with the above layout change.

## [0.4.10] - 2026-02-11 : Enhanced Index Management and Search Result Tab Instant Search Restoration
### Added
- **Index creation interruption and resumption**: Clicking the index creation in-progress icon (spinner) on the right side of the status bar displays a confirmation dialog. Selecting cancel interrupts index creation. Indexed roots are persisted, and unfinished portions are automatically resumed after app restart.
- **Index creation result notification**: When a folder's index creation completes, the status bar now displays "Added XX items to the index" with the count.
- **Total index count display**: The nav pane's "Index Search Settings" view now displays the total number of files registered in the index. Automatically updated on creation completion and when the view is displayed.
- **Progress display during index creation**: During index creation, the status bar displays "Creating index: XX items (folder name)" with progress. Updated every 100 items.
- **Per-folder status and count display**: In the nav pane's "Index Search Settings" list, each folder now shows its status as "Creating", "Complete", or "Unindexed", with the count displayed when indexed.

### Changed
- **Internal refactoring (stability and performance)**: Replaced Dispatcher.Invoke with InvokeAsync to eliminate UI thread blocking. Batched search result UI updates (every 50 items) to reduce rendering load for large result sets. Changed browsing history retrieval and search history cleanup to non-blocking and bulk deletion. Reduced Levenshtein distance calculation memory usage from O(n*m) to O(m). Fixed CancellationTokenSource release and AppActivationService event subscription leak on tab disposal.
- **Search during index creation**: By executing Commit every 100 items during index creation, already-indexed items can now partially appear in search results during creation.
- **Instant search in search result tab**: While list tabs maintain the existing behavior of showing search results in a new tab on Enter press, **search result tabs** now restore instant search execution on input.

### Fixed
- **Index not recreated bug**: The "indexed root persistence" (`indexed_roots.json`) introduced with the interruption feature and the actual Lucene index files were not cross-checked for consistency, causing the index to be considered complete and skipping recreation even when index files did not exist. Fixed to verify Lucene index existence at startup and clear the cache for re-indexing on inconsistency. Also ensured indexed information is cleared when deleting index search target folders, and added exception handling for cases where a cancelled token causes immediate exception in `Task.Run`.
- **Release build NuGet restore error**: `Microsoft.NETCore.App.Runtime.win-x64` version 8.0.24 did not exist on NuGet, causing restore failure. Resolved by fixing `RuntimeFrameworkVersion` to 8.0.23.
- **Index creation spinner icon not displayed**: Because index creation processing runs on a background thread, `App.Notification.IsIndexing` updates were made outside the UI thread, and WPF bindings were not reflected. Added `UpdateIsIndexingOnUiThread` helper to update the property on the UI thread via `Dispatcher.BeginInvoke`.

## [0.4.9] - 2026-02-11 : Path Copy Feature, Search UI Improvements, Shortcut Key Fixes
### Added
- **Address bar path copy feature**: Added a "Copy path" button to the right end of the address bar. The full path of the current folder can now be copied to the clipboard with one click.

### Changed
- **Release build output folder**: When running `dotnet publish -c Release`, the output destination is now a versioned folder name (e.g., `ZenithFiler_v0.4.9`).
- **Search execution timing**: Stopped the behavior of immediately opening a new tab and starting search on text input in the search bar. **Search now executes only when the Enter key is pressed**. This resolves the issue where search keywords could not be partially entered.
- **Search box placeholder display**: When the search bar is empty and unfocused, guidance text corresponding to the current search mode (e.g., "Search within folder...") is displayed. Automatically hidden when focused or when text is entered.
- **Build configuration adjustment**: Development `dotnet run` now uses framework-dependent execution, with self-contained/single-file publishing only for Release builds (avoiding runtime pack retrieval errors).
- **Improved active tab visibility**: When hovering over the active tab, the background color change made it difficult to tell if the tab was active. Changed to always maintain a black background when active.
- **Toolbar layout improvement**: Reorganized the button group above the file pane into 5 functional groups (Navigation, Location, Create, Manage, View) with separators to prevent misoperation.
- **CHANGELOG recording rules**: Codified "rules for appending per category" in versioning rules, and merged duplicate `### Changed` sections within `[Unreleased]` to organize by category.

### Fixed
- **Shortcut keys becoming disabled**: Fixed an issue where shortcut keys (Ctrl+C, Ctrl+V, F2, etc.) stopped functioning correctly when focus was outside the file list, such as after toolbar button operations.
- **Pane switching and focus management improvement**: Improved to more reliably move focus to the file list on tab switching or clicking pane/tab content areas, maintaining shortcut keys in an always-functional state.

## [0.4.8] - 2026-02-10 : Auto-detection and removal of missing favorite paths
### Added
- **Save shortcuts from browser**: Added the ability to drag and drop URLs from a browser to save them as `.url` files (internet shortcuts). Supports dropping onto both the file list and the breadcrumb list.

### Changed
- **Handling missing favorite paths**: When opening a favorite, or when dragging and dropping a favorite to move it or add a tab, if the target path is not found, a message now asks the user whether to remove it from favorites. If removal is selected, the item is deleted regardless of the favorites lock state.

### Fixed
- **Improved dot handling during rename**: Fixed an issue where, when renaming a file, characters after a "." (dot) in the name were incorrectly recognized as a file extension and removed.
- **Focus handling for new folder creation via shell**: When creating a "New folder" from the Explorer context menu, the folder is now automatically selected, focused, and rename (name editing) is initiated.
- **Multiple item drag and drop support**: Fixed an issue so that when multiple items are selected and dragged in the file list, all selected files and folders are included as copy/move targets (`SelectionMode` set to `Extended`).
- **Error display fix for URL shortcut creation**: Fixed an error (exception) that occurred when dropping a URL from a browser to create a shortcut, caused by calling UI notifications from a background thread. Also adjusted notification order so that the creation completion message is not overwritten by the list update message.
- **Improved title retrieval on URL drop**: Improved URL drop from browsers to use the page title as the file name whenever possible. Also enhanced drop data parsing to reliably extract URLs even from specific browsers and data formats.
- **Shortcut creation logic overhaul**: Replaced the use of Windows standard `WScript.Shell` (COM) for creating shortcuts (.lnk) with the `Vanara.Windows.Shell` library, achieving more stable creation and resource management.
- **Browser shortcut saving bug fix**: Fixed issues where URLs were not correctly extracted on URL drop from browsers (text priority and encoding issues), and resolved the problem where the list was not automatically refreshed after saving.

## [0.4.6] - 2026-02-09 : Nav pane display fix and split screen shortcut addition
### Added
- **Split screen shortcut keys**: Added shortcut keys to toggle between single-pane mode (`Ctrl + Shift + Q`) and dual-pane mode (`Ctrl + Shift + W`). Layout can be quickly changed just like using the status bar buttons.

### Changed
- **Changed navigation behavior from search results**: When opening a folder from search results (double-click) or clicking a file's path, the folder now opens in a **new tab** instead of the current tab. This allows you to check multiple folders while keeping the search results.

### Added
- **Search results in separate tab**: When entering text in the search bar, a new tab is automatically opened to display search results without overwriting the current tab.
- **Search tab title display**: The tab title now shows the search keyword when displaying search results (e.g., "Search: keyword").

### Fixed
- **Fixed nav pane display overlap**: Fixed an issue in the favorites, tree, and browse history views where the bottom action icon group (search mode toggle, lock, delete buttons, etc.) overlapped with the list content. Added a row to the grid layout to secure a dedicated area for icons, preventing content from being hidden.

## [0.4.5] - 2026-02-09 : Search result usability improvements and minor interaction adjustments
### Added
- **Search result list sorting**: Clicking headers in the search results now allows sorting by name, location, path, modified date, and size. Sort icons are displayed just like in the regular file list.
- **Indexing in-progress indicator**: While folder indexing is running in the background, a rotating animation icon is now displayed to the left of the log icon in the status bar. This provides a visual indication that a full-text search index is currently being built.

### Changed
- **Search result list column layout and priority**: Changed the column order of the search result list to "Name, Location, Path, Modified Date, Size." Revised the hide priority when window width becomes narrow so that columns hide in the order: Size -> Modified Date -> Location -> Name, with the Path column remaining visible last. The Name column width is fixed (240px), and remaining space is allocated to the Path column.
- **File list context menu change**: Changed right-clicking on a file or folder to directly display the Windows standard context menu instead of going through the app's custom menu (Delete, Show Explorer Menu). This enables one-action access to properties and other shell extensions.
- **Search result list column width adjustment**: Column widths in the search result list can now be freely adjusted by mouse dragging. Double-clicking a column border also enables auto-fit. When manually adjusted, the automatic window-width-based adjustment mode is disabled.

### Fixed
- **Search result list column width auto-adjustment**: Fixed an issue where the column width adjustment logic for the regular file list was incorrectly applied to the search result view, causing the Name column to unintentionally stretch. The search result mode is now correctly detected, ensuring the fixed-name-column and variable-path-column behavior is reliably applied.
- **Adaptive column auto-alignment fix**: Fixed an issue where column widths were automatically adjusted on window width changes even when the "Auto-adjust columns" button was OFF. When the button is OFF, the auto-adjustment logic is now completely skipped, preserving manually set widths.
- **File list right-click fix**: Fixed an issue where right-clicking on a file or folder displayed the folder background menu (Properties, etc.) instead of the selected item's context menu. Event propagation (bubbling) is now properly controlled so that the item menu appears on items and the background menu appears on empty space.
- **Toggle button malfunction**: Fixed an issue where toggle buttons like "Auto-adjust columns" were not responding correctly on the first click due to focus being stolen, requiring two presses to toggle. Improved the focus transfer logic during pane activation to avoid interfering with button operations.
- **Search result list sort display**: Fixed an issue where sort icons were not displayed when clicking search result list headers, making it appear non-functional.
- **Search result list column width auto-adjustment (non-functional)**: Fixed an issue where the "Auto-adjust columns" button did not work in the search result view, leaving column widths fixed. During search result display, lower-priority columns (Size, Modified Date, Location) now automatically hide based on window width, and the Path column is adjusted for readability.

## [0.4.4] - 2026-02-09 : Standard search speedup and indexing efficiency improvements
### Fixed
- Fixed an issue where clicking the search bar with the mouse caused the history to briefly appear and then lose focus.

### Changed
- **Standard search performance improvement**: Overhauled the index update flow during search execution.
  - **Existing index priority**: Enabled "ultra-fast display" that immediately shows search results using existing index data without waiting for updates to complete.
  - **Differential update and re-search**: Index updates are now performed in the background only when needed, and after completion, a re-search is executed to automatically update results if there are differences.
  - **Update cache**: Folders scanned once within a session skip re-scanning unless files have changed, significantly reducing I/O load during repeated searches.
- **Improved Japanese text analysis accuracy for search engine**: Switched the Lucene.NET Japanese analyzer from `CJKAnalyzer` to `JapaneseAnalyzer` (Kuromoji). This enables correct recognition of Japanese word boundaries, improving accuracy for multi-word searches like "index filter."

### Fixed
- **Index search settings delete function fix**: Fixed an issue where registered folders could not be deleted from the right-click menu. Improved binding settings and ViewModel execution conditions to enable deletion from the context menu even when no item is selected.
- **Changelog/manual table of contents navigation fix**: Fixed an issue where selecting an item in the left-pane table of contents did not jump to the corresponding section in the right pane. Improved the inconsistency in ID generation logic (presence/absence of date removal processing) and decoration-ignoring during heading text retrieval.
- **Changelog summary display bug fix**: Fixed an issue where the summary was also deleted when removing the date from `CHANGELOG.md`. Also optimized the order of table of contents generation processing to prevent information loss.

### Added
- **Load reduction during index creation**: Introduced throttling (brief pauses at regular intervals) to reduce the load on the target when creating indexes for large folders or network drives.
- **Index creation cancellation support**: When navigating to a different location or canceling a search during folder search, the in-progress index creation process is now immediately interrupted to prevent unnecessary I/O load.
- **Auto-skip of excluded folders for indexing**: Large project folders and intermediate folders such as `.git`, `node_modules`, `.vs`, `obj`, `bin` are now automatically excluded from indexing targets, reducing creation time and load.
- **AI settings optimization**: Created `.cursorignore` to exclude build artifacts, dependency libraries, binary files, logs, caches, etc. from AI reading targets. This improves the efficiency and accuracy of AI-powered search and analysis.

## [0.4.3] - 2026-02-08 : Changelog summary display support
### Added
- **Changelog summary display**: A summary of each version's changes is now displayed to the right of each version in the changelog. This allows you to grasp an overview of updates from the table of contents pane (left side) alone. Displayed by writing in the format `## [0.4.3] - 2026-02-08 : Summary` in `CHANGELOG.md` headings.

### Fixed
- **Manual/changelog UI improvement**: Fixed an issue where icons became the same color as the background when selecting items in the table of contents pane, making them invisible. Icons now switch to white when selected.
- **Changelog filtering bug fix**: Improved the regular expression so that not only the `[Unreleased]` section title but also its content (Changed/Added, etc.) is correctly hidden.

### Changed
- **Build output folder name change**: Changed the output folder name when running `dotnet publish` from the default `publish` to `ZenithFiler`. This eliminates the need to rename the folder during distribution and packaging.

## [0.4.2] - 2026-02-08 : Index storage location change and display filtering improvement
### Added
- **Consolidation of index-related files**: Changed the storage location of search indexes (Lucene) and history database (SQLite) from `%AppData%` to the `index` folder within the app's execution folder. This means that copying the entire app folder now migrates all settings, search indexes, and history (data from the old location is automatically migrated on first launch).
- **Changelog display filtering**: Changed the in-app changelog screen to not display the `[Unreleased]` section.

### Documentation
- **Build configuration explanation added**: Added explanations to the manual about the folder structure after building (backups, logs, etc.) and the roles of key files (exe, dll, json).
- **Search functionality details**: Clarified the difference in purpose between standard search (within folder) and index search (cross-folder search of registered folders), and added technical details about index storage location and structure to the manual.

## [0.4.1] - 2026-02-08 : Lucene integration for standard search with real-time updates
### Changed
- **Lucene.Net integration for standard search**: Completely switched the search processing in the file pane from conventional recursive exploration to Lucene.Net index search. Indexes are automatically generated and updated for the current folder and subfolders when a search is executed, enabling high-speed searching.
- **Real-time index updates**: Implemented logic to partially update indexes in the background by receiving file system change notifications (creation, deletion, rename).

## [0.4.0] - 2026-02-08 : Lucene.Net integration + Index search settings view
### Added
- **Standard search speedup (Lucene.Net integration)**: Replaced the file pane's standard search with Lucene.Net-based index search. Indexes are automatically built and updated as needed for the current folder and subfolders, enabling instant search results even for large folders.
- **Real-time index synchronization**: File creation, deletion, rename, and changes are now detected in real time and the search index is automatically updated. This enables searching from the latest state without explicit re-searching.
- **High-speed full-text search engine foundation**: Introduced the Lucene.Net library (v4.8.0-beta) and implemented the service foundation (IndexService) for index creation and searching. Adopted CJKAnalyzer for Japanese file name support.
- **Index search settings view in nav pane**: Added a 4th view "Index Search Settings" (Ctrl+Shift+4). Folders to be indexed can be registered and removed, and the list is saved in settings and restored on next launch. Registration is available via "Add folder" (path input) and "Add current folder."

### Fixed
- **Shell context menu "Delete" bug**: Fixed an issue where selecting "Delete" from the OS standard right-click menu (shell menu) did not invoke the app's delete processing. Now also determines the action from menu text ("Delete") when the verb cannot be obtained, ensuring the app-side control (moving to recycle bin, etc.) is reliably executed.

## [0.3.96] - 2026-02-08 : Search history lightning icon design unification
### Changed
- **Search history lightning icon**: Aligned the lightning icon indicating index search in the history list with the same design as the search bar (IndexSearchIconBrush + glow effect).

## [0.3.95] - 2026-02-08 : Search history save fallback fix
### Fixed
- **Search history not being registered (save fallback)**: When saving fails, migration is now re-executed and saving is retried once. Even if migration at startup failed for some reason, the table is migrated on the first search execution, and new history entries are registered thereafter.

## [0.3.94] - 2026-02-08 : Search history table migration fix
### Fixed
- **Search history not being registered**: The migration to the new schema (Key/IsIndexSearch) used "SELECT Key" for detection, but in some environments no exception was thrown and migration did not run, causing new-schema INSERT attempts against the old-schema table to fail with exceptions, preventing new history from being saved. Changed the detection to "try INSERT with new schema on a temporary record," ensuring migration runs reliably only when the old schema is present.

## [0.3.93] - 2026-02-08 : Search history standard/index identification + auto mode switching
### Added
- **Search history standard/index identification**: Search history now displays a magnifying glass icon for standard searches and a lightning icon for index searches. The same keyword is saved as separate history entries for standard and index searches.
- **Auto mode switching on history selection**: When selecting an item from history (click or Enter), the search mode (standard/index) is now automatically switched to match the mode in which the history was recorded.

### Changed
- **Search history table schema**: Existing databases are automatically migrated at startup, and all existing history is treated as "standard search."

## [0.3.92] - 2026-02-08 : Search history selection behavior fix
### Fixed
- **Search history selection behavior fix**: Fixed an issue where pressing the down key to focus the list immediately executed a search and closed the popup. Changed so that up/down key movement only selects items, and search is executed on Enter key or click.

## [0.3.91] - 2026-02-08 : Search history up/down key specification clarification
### Changed
- **Search history up/down key specification clarification**: Down key focuses/selects items from top to bottom in the list, doing nothing when at the bottom. Up key focuses/selects upward, doing nothing when at the top. Unified so that pressing down key from the search box always selects the first item.

## [0.3.90] - 2026-02-08 : Search history up/down key operation improvement
### Changed
- **Search history up/down key (Plan B)**: While history is displayed, only the down key focuses the history list (selects the first item). The up key is ignored while in the search box. Within the list, the down key moves downward from top (does nothing at the bottom), the up key moves upward (does nothing at the top, no wrapping).

## [0.3.89] - 2026-02-08 : Search history and up/down key integration
### Changed
- **Search history and up/down keys**: When pressing up/down keys while the history is displayed in the search window, focus moves to the search history list. The down key selects the first item and the up key selects the last (most recent) item. Continue pressing up/down to navigate items, and press Enter to confirm.

## [0.3.88] - 2026-02-07 : Amber color emphasis for index search focus state
### Changed
- **Index search + focus state emphasis**: Only when the search bar has focus and is in index search mode, the border turns amber with a faint amber (#FFF9C4) outer glow to create a "warning color = special mode" effect.

## [0.3.87] - 2026-02-07 : Enhanced lightning icon for index search
### Changed
- **Index search lightning icon**: Added gold color and glow effects, with a hover-to-enlarge animation that gives the impression of lightning bursting forth.

## [0.3.86] - 2026-02-07 : Index search mode UI addition
### Added
- **Index search mode (UI)**: Added index search mode to the A/B pane search bars. Pressing Ctrl+Shift+F or clicking the magnifying glass icon in the search bar enters index search mode, changing the magnifying glass to a lightning icon and the search bar background to a yellow tone. Clicking the lightning icon or pressing Ctrl+F returns to standard mode.

## [0.3.85] - 2026-02-07 : Ctrl+F pane-linked focus
### Changed
- **Ctrl+F behavior**: Changed to focus on the search bar of the active pane. When focus is on the nav pane (favorites/history), focus goes to that view's search bar. When focus is on the A pane/B pane, focus goes to the respective pane's search bar. For tree view (no search bar), focus goes to the active file pane's search bar.

## [0.3.84] - 2026-02-07 : Log folder name change
### Changed
- **Log folder name**: Changed the log output folder name from `Logs` to `logs`.

## [0.3.83] - 2026-02-07 : Document distribution folder change
### Changed
- **Document placement**: Changed to store `CHANGELOG.md` and `MANUAL.md` in the `apps` folder during distribution. Documentation files such as `.xml` that do not need to be in the same directory as the EXE during publish are also consolidated into `apps`.

## [0.3.82] - 2026-02-07 : Manual/changelog scroll position sharing fix
### Fixed
- **Manual/changelog scroll position sharing**: Fixed a bug where scroll positions were shared between the manual page and changelog page, causing one to scroll when the other was scrolled. Each page's vertical scroll position is now saved and restored individually, allowing you to continue reading from where you left off after switching tabs.

## [0.3.81] - 2026-02-07 : Nav pane width fix when returning to favorites view
### Fixed
- **Nav pane width when returning to favorites view**: Fixed a bug where the nav pane did not smoothly return to the user-configured width when switching from tree/browse history back to favorites. During animation, `_sidebarWidthFavoritesTree` was being overwritten with intermediate values every frame, so an `IsSidebarWidthAnimating` flag was introduced to prevent updating this value during animation, ensuring a smooth return to the original width.

## [0.3.80] - 2026-02-07 : Nav pane view switching width animation improvement
### Changed
- **Nav pane width animation on view switching**: Improved to smoothly interpolate from the current display width (ActualWidth) to the target width when switching between favorites and tree/browse history. Uses QuarticEase EaseOut (fast start, gentle settling) unified to a modern 0.4-second animation. BitmapCache reduces layout load during animation, and the implementation is robust against mode re-switching and window resizing during animation.

## [0.3.79] - 2026-02-07 : Keyboard operation improvement when pane lacks focus
### Fixed
- **Keyboard operation when pane has focus but list does not**: When pressing a key while focus is on an A pane/B pane tab, toolbar, etc. (with focus in the pane but not on the file list) right after launch, focus now moves to the list and the pressed key (Enter, arrow keys, Delete, F2, etc.) takes effect immediately. When focus is on the path input or search box, input behavior remains unchanged.

## [0.3.78] - 2026-02-07 : Hover focus removed, click-only unification
### Changed
- **Pane/nav focus unified to click-only**: Removed automatic focus movement on mouse hover, reverting to the previous behavior. Nav pane (favorites, tree, browse history) and A pane/B pane activation now only occurs on **left mouse click** or keyboard (Tab/Left/Right) switching. This prevents unintended focus stealing and ensures reliable selection of the operation target. Removed "hover pane/nav switching" from MANUAL.md and documented click-based focus operation as the standard.

## [0.3.77] - 2026-02-07 : Nav pane context menu display position fix
### Fixed
- **Nav pane context menu appearing at top-left of screen**: Fixed an issue where the context menu always appeared at the mouse position when right-clicking in the tree view (and favorites tree). Changed `Placement` to `Relative` and explicitly specified mouse position offset relative to the target item, avoiding the system's coordinate calculation fallback to (0,0). Right-clicking on empty space in the tree is similarly handled for stress-free operation.

## [0.3.76] - 2026-02-07 : Breadcrumb drop + tree view lock + context menu overhaul
### Added
- **Drop onto breadcrumb list**: Selected items from the file list can now be dragged and dropped onto a specific breadcrumb segment to copy or move them to that level's folder. Left-drag with Ctrl key copies, without Ctrl moves. Right-drag drop shows a menu with "Copy," "Move," and "Cancel" options.
- **Tree view lock**: When tree view (Ctrl+Shift+2) is displayed, a padlock icon (tree view lock) is added at the bottom-right of the sidebar. When locked, drag and drop folder movement, rename (F2, right-click "Rename"), and delete (Delete, right-click "Delete") within the tree view are prohibited. Attempting these operations displays "Cannot modify because tree view is locked" and blinks near the padlock for emphasis. Independent of favorites lock, the state is saved in settings and restored on next launch.

### Changed
- **Drag and drop routing from list to nav pane**: Organized the behavior when dragging and dropping from the file list to the nav pane. Dropping onto **favorites view (Ctrl+Shift+1)** registers as a favorite (folders only), while dropping onto **tree view (Ctrl+Shift+2)** now **moves** files and folders to the drop target folder. Files are moved directly under the drop target folder without changing the folder structure. When tree view lock is ON, **all drop operations are disabled** including drops from the list to the tree, displaying "Operation not available due to lock" in the status bar with a lock-release animation near the padlock.
- **Action-oriented tooltips**: Unified all UI tooltips to short expressions that convey "what happens on the next action." Buttons that change state (lock, pin, display toggle) now dynamically switch tooltips based on current state (e.g., Lock tree view / Unlock tree lock, Pin nav width / Unpin nav width). Revised wording so that "disable" or "release" alone is not ambiguous, ensuring **what is affected and how** is clear (e.g., Disable delete confirmation). Added shortcut key notation to tooltips for operations with shortcuts, with rules added to `.cursor/rules/tooltip-rules.mdc`.
- **Favorites lock scope limited**: Favorites lock now only restricts adding, deleting, and reordering **within favorites view (Ctrl+Shift+1)**. Fixed an issue where favorites lock warnings appeared when dragging folders in tree view, allowing folder organization in tree view while favorites are locked.
- **Nav pane lock specification unified**: Fully unified the lock specifications for favorites view and tree view as **nav pane lock specification**. Using favorites view as the reference, both views now display "Cannot [action] due to lock" in the **status bar** (not popup) when a prohibited operation is attempted during lock, with an arrow + blink unlock-prompt animation near the padlock (approximately 3 seconds). Favorites-side registration, move, delete, rename, and description editing blocks are similarly changed to status bar notifications. Added nav pane lock specification documentation to MANUAL.md.
- **Status bar message notation unified**: Introduced a rule not to end status bar messages with a period, and unified all existing "Cannot due to lock" messages to be without trailing periods. Added rules to `.cursor/rules/status-bar-message-rules.mdc`.
- **Context menu separator lines**: Fixed separator lines in right-click menus that appeared left-aligned. Added left/right margins (left 32px, right 12px) aligned with the text start position for a modern appearance.
- **Context menu modernization**: Fixed the issue of horizontal separator lines displaying too short by specifying a ControlTemplate (Border that stretches to full width) for Separator. Additionally added a dedicated style (ContextMenuItemStyle) to MenuItem for a modern menu display unified with icon and text columns. Later removed vertical lines from each item, expanded the icon column to 44px, and adjusted icons to be centered with equal left/right margins.
- **Context menu Windows 11-style redesign**: Improved the overall right-click menu to a modern design close to Windows 11 system menus. Applied rounded corners (8px), thin borders, and drop shadows, with an off-white background for transparency. Expanded item height (34px) and margins, icons in understated gray, hover state with accent-color translucent background. Adjusted separator lines to be thin and subtle, and destructive actions like "Delete" display text in faintly red only on hover. Shortcut keys (InputGestureText) are displayed in light gray on the right side when available.

### Fixed
- **StaticResource exception on context menu display**: Since ContextMenu is displayed within a Popup, `StaticResource` references (TextBrush, SubTextBrush) in MenuItem templates could not be resolved, causing frequent "unexpected errors." Changed color references in ContextMenuItemStyle to direct values (#586E75, #93A1A1) to resolve the issue where resources could not be resolved within Popups.
- **Error when right-clicking in tree**: Fixed an exception caused by referencing `StaticResource BorderBrush` in the context menu separator style, which could not be resolved within the Popup, causing `Background` to become UnsetValue. Changed the separator color to a direct value (#D3D0C3).
- **Folder copy in tree view not reflecting immediately**: When copying a folder from the list or tree, `FileOperationService`'s `FolderCreated` is now fired similarly to moves, so the copied folder immediately appears in the tree if the parent node of the copy destination is expanded.
- **Tree view auto-expansion not working**:
  - Fixed the cause of the tree not expanding to match the file pane path (e.g., C:\Users\sulky\Downloads).
  - Cause 1: Setting `IsExpanded = true` first triggered OnIsExpandedChanged which fire-and-forgot `EnsureChildrenLoadedAsync()`, and the subsequent `await EnsureChildrenLoadedAsync()` returned immediately due to `_isLoading` without waiting for completion. **Changed the order to load children first, then set IsExpanded to true.**
  - Cause 2: Collection references and IsExpanded settings during expansion processing were not performed on the UI thread, causing WPF display to not follow. **Changed node search, IsExpanded setting, and Children retrieval to execute on the UI thread via Dispatcher.**
- **Special folder recognition and tab restoration stability**:
  - Added `PathHelper.EnsureSpecialFoldersCached()` to obtain and cache physical paths of Desktop, Downloads, and Documents at startup, ensuring reliable reference during tab restoration and tree expansion.
  - During tab restoration, when saved paths are empty, invalid, or drive root only, they are resolved to special folders (A pane first = Desktop, B pane first = Downloads), **preventing Desktop from turning into C drive.**
  - During programmatic tree expansion, tree-selection-triggered navigation is suppressed, resolving the conflict where the first tree node (C:\) was selected at startup and the tab was rewritten to C:\.
- **Deduplication logic review**:
  - Changed to use `PathHelper.NormalizePathForComparison()` (`Path.GetFullPath`-based normalization) for duplicate checking, reliably preventing duplicate registration within the same parent node in the tree and in the drive list.
- **Tree view auto-expansion reliability**:
  - Enhanced `ExpandToPathAsync` to expand the tree to match the file pane path. When drives are not loaded, `LoadDrives()` is executed first, and normalized paths are used for comparison at each level to expand and select without omissions.
  - Maintained the flow of expanding parents sequentially before selecting the target node for lazy-loaded levels.
- **Startup process order control**:
  - Organized the initialization order to: special folder cache -> tab restoration path determination -> tab restoration -> drive loading and expansion after Loaded when tree is displayed, suppressing unstable behavior in the first few seconds after startup.
- **Message display when dragging during tree view lock**: Fixed an issue where dragging a folder within the tree view while locked was disabled but showed no message. Now displays "Operation not available due to lock" in the status bar during drag-over, with unlock-prompt animation near the padlock.
- **Current folder sometimes not expanded in tree**: The tree view auto-expands parent folders along the path, but the current folder (displayed folder) node itself sometimes remained collapsed. Fixed `ExpandToPathAsync` to also load children and set `IsExpanded = true` for the node corresponding to the current folder, ensuring it is always displayed in an expanded state.
- **Tree view not reflecting folder move/copy/rename from list**: When folders were moved/copied via drag and drop or renamed with F2 in the A/B pane list, the tree view was not updated and showed stale content. Fixed by reloading the child list of the relevant parent node when move/copy completes and when folder rename completes, so the tree and list stay synchronized.
- **Tree displays incorrectly after moving a folder from list**: Clearing all children and reloading the source parent node caused the destination node (sibling of the source) to disappear from the tree, resulting in only the source being updated or duplicates appearing. Changed to only remove the moved folder's node from the source parent and reload only the destination parent's child list, maintaining correct tree structure.
- **Fundamental improvement of file list and tree view synchronization logic**: Created `FileOperationService` to immediately reflect folder creation, rename, move, and delete from the list to the tree via event-driven updates. Instead of reloading the entire tree, differential updates (add, remove, rename) are applied to the relevant parent node, keeping the hierarchy intact and consistent with the file system. Unloaded parents reflect the latest state on next expansion, and double-updates with `FileSystemWatcher` are also prevented.
- **"Rename" and "Delete" always disabled in tree view context menu**: Changed `CanModifyTreeView` to a parameterized method for RelayCommand's CanExecute, enabling the menu when tree view lock is released. Also implemented execution processing for rename (InputBox -> Directory.Move, Undo registration, FileOperationService notification) and delete (move to recycle bin via ShellFileOperations, FileOperationService notification), enabling folder rename and delete from the tree.
- **Mouse cursor hidden and buttons unclickable in rename dialog**: When opening a rename dialog with F2 during keyboard operation mode (cursor hidden via arrow keys, etc.), the cursor remained hidden within the dialog. Fixed by releasing keyboard operation mode when MainWindow is deactivated and explicitly restoring the cursor when InputBox is displayed.
- **Folder drag and drop not working in tree view when lock is OFF**: Even when tree view lock was released, drop permission (Effects) and actual folder move processing were not implemented, preventing drag and drop moves. Fixed so that when lock is OFF, dropping a folder above or before/after another folder in the tree performs actual folder move via ShellFileOperations, reflected in tree and list via Undo and FileOperationService.

## [0.3.75] - 2026-02-07 : Tree view duplicate display resolution
### Fixed
- **Tree view (Ctrl+Shift+2) duplicate display resolution**:
  - Added full-path-based duplicate checking to prevent the same folder/path from being registered twice in the tree (`DirectoryItemViewModel`: strict full-path matching check within the same parent before adding children, `DirectoryTreeViewModel.LoadDrives`: duplicate elimination with HashSet at root registration).
  - Introduced a "loading" flag (`_isLoading`) per node to prevent race conditions where rapid expansion clicks or double-firing bindings would add the same children multiple times.
  - Once loading completes for a node, a "loaded" flag (`_isLoaded`) is set, preventing reloading unless explicitly requested.
  - Applied `Distinct` by full path to `GetDirectories` results before display, ensuring all paths are uniquely shown.

## [0.3.74] - 2026-02-07 : File list loading parallelization and speedup
### Changed
- **File list loading parallelization and speedup**:
  - Refactored the folder loading process (`LoadDirectoryAsync`) to perform directory and file retrieval in parallel (Parallel.Invoke). This improves display speed especially for folders with many items.
  - Optimized the list update process (`MergeItems`) to reduce UI thread load (Dictionary creation performed in background, differential detection logic optimized).
  - Organized code structure by separating local/network path processing for improved maintainability.

## [0.3.73] - 2026-02-07 : Document viewer search hit count display and sequential jump
### Added
- **Document viewer (manual/changelog) search functionality enhancement**:
  - **Hit count display**: Real-time display of current hit position and total count in the format "1 / 12 items" within the search box.
  - **Sequential jump**: Up (previous) and Down (next) buttons next to the search box enable smooth cycling through search hits (loops from last to first item).
  - **Highlight enhancement**:
    - All hit locations are highlighted in yellow, allowing at-a-glance confirmation of distribution throughout the document.
    - The currently focused hit location is emphasized with **accent color (orange/blue)**, clearly indicating the current position.
  - **Table of contents synchronization**: When jumping via search, the left-side table of contents (ToC) selection state automatically synchronizes to the corresponding section.

## [0.3.72] - 2026-02-07 : Undo functionality
### Added
- **Undo functionality**: The `Ctrl + Z` shortcut can now undo the most recent file operation.
  - Supported operations: rename, new folder creation, file move, copy, shortcut creation.
  - For undoing delete operations (move to recycle bin), please use Windows standard recycle bin functionality.
### Fixed
- Resolved Nullable-related build warnings in the Undo registration process for file copy/move completion.

## [0.3.71] - 2026-02-07 : Loading icon crash fix
### Fixed
- **Loading icon crash fix**: Fixed an issue where the icon used for the status bar loading indicator (Loader2) could not be loaded in certain environments or library versions, causing the app to crash with a `TypeConverterMarkupExtension` exception at startup or display time (changed to Loader icon).

## [0.3.70] - 2026-02-07 : Status bar loading indicator addition
### Added
- **Status bar loading indicator**: During time-consuming tasks (file operations, folder search, document loading, etc.), a subtle rotating animation is now displayed on the right side of the status bar. It visually communicates that processing is in progress in the background without blocking user operations.
### Changed
- **Loading overlay removed**: Removed the full-screen loading overlay and integrated it into the non-intrusive status bar display.

## [0.3.69] - 2026-02-07 : Auto-delete on new folder creation cancel
### Fixed
- **New folder creation cancel behavior fix**:
  - When pressing "Cancel" in the name input window displayed after creating a new folder, the created "New folder" is now automatically deleted, reverting to the pre-creation state.
  - Similarly, when creating a virtual folder in favorites (nav pane), the item is deleted on cancel.

## [0.3.68] - 2026-02-07 : Drag and drop operation stabilization (slip prevention)
### Fixed
- **Drag and drop operation stabilization (slip prevention)**:
  - Strengthened the logic so that the item under the mouse at the moment the button is pressed is reliably used as the operation target when dragging files. Even if the mouse slightly moves to an adjacent file after clicking, selection of the originally grabbed file is forcefully maintained.
  - Completely prevented accidental inclusion of unintended files (focus slipping) when the item under the cursor changes before drag initiation (10px movement threshold).
  - Suppressed hover effects (row highlighting) during drag, so only the grabbed file (blue selection) is clearly visible, improving visual feedback.

## [0.3.67] - 2026-02-07 : Memory cleanup on app deactivation + async logging
### Added
- Introduced `AppActivationService` to manage app active/inactive state.
- Added background memory (GC) cleanup logic on deactivation to reduce freezing after prolonged idle periods.

### Fixed
- Fixed an issue where scroll position jumped to the top of the folder list after paste completion, pushing pasted files off-screen. `ScrollIntoView` is now reliably executed in the paste target pane, and scroll restoration during reload is skipped only during paste (works symmetrically for both A/B panes).
- Resolved hang-ups (several to tens of seconds of unresponsiveness) on reactivation.
- Overhauled the logging system to a non-blocking queue (Channel) approach, preventing UI thread blocking from file I/O.
- Changed Thread.Sleep in the notification service to async await (Task.Delay), preventing thread pool exhaustion.

### Changed
- Optimized folder monitoring (FileSystemWatcher). Updates are now held during app inactive state and applied in batch on active recovery.
- Batched file list and tree view loading with adjusted priority (DispatcherPriority). Improved operability in environments with large numbers of files.
- Made tree view subfolder expansion asynchronous, improving response wait times for network drives, etc.

## [0.3.66] - 2026-02-06 : Integrated document viewer (manual + changelog) consolidation
### Added
- **Manual window table of contents navigation enhancement**:
  - Fully implemented smooth jump-to-section on table of contents click.
  - Added bidirectional synchronization where scrolling the body automatically highlights the current section in the table of contents.
  - Expanded table of contents pane width (260px -> 320px), adjusting layout for better visibility of long item names and hierarchical structures.
- **Integrated document viewer (manual + changelog) consolidation**:
  - Consolidated the previously separate "Manual" and "Changelog" windows into a single "Integrated Document Viewer."
  - Segment buttons (Manual/Changelog) at the top of the window switch the left and right pane content for browsing.
  - The left pane uses a shared table of contents engine, displaying section headings in manual mode and version numbers (v0.3.66, v0.3.65...) in changelog mode. In both modes, clicking an item smoothly jumps to the corresponding location in the right pane.
### Changed
- **Manual window UI completion**:
  - **Header alignment**: Aligned the manual icon, title, and search icon on the same horizontal center line with golden-ratio-based margins (10px) for visual balance.
  - **Accent color expansion to right pane**: Strategically applied the same blue as the left pane's selection color to the right pane.
    - Applied accent color to list bullet points and number portions (body text remains black).
    - Added a 2px accent line above tables.
    - Changed quote/note box left border to accent color with a very faint blue gradient background.
  - Used accent color for hyperlinks to clarify link nature. Maintained long-text readability through subtractive design.
- **Manual window scroll and color adjustment**:
  - **Increased scroll amount**: Set mouse wheel scroll amount to approximately 80px for comfortable long document reading.
  - **Right pane accent color unification**: Changed inline code (`settings.json`, etc.) background from gray (#F2F2F2) to the same accent-color-family light blue (#EBF2FA) as the left pane. Also unified table borders to blue (#D0E0F0) for overall cohesion.

### Fixed
- **Document viewer changelog display bug fix**:
  - Fixed an issue where selecting the Changelog tab continued to display Manual (MANUAL.md) content.
  - Fixed a crash caused by collection operation error (InvalidOperationException) in `PostProcessDocument`, changing to a safe implementation that converts to list before enumeration.
  - Improved to display a user-friendly message instead of detailed error information when the changelog file is not found.

## [0.3.65] - 2026-02-06 : Favorites search mode toggle + hover focus + Japanese settings save
### Added
- **Favorites search mode toggle**: Added a search mode toggle button to the left of the nav width lock button at the bottom-right of the nav pane.
  - **Name/description mode** (default): Matches when the keyword is contained in the folder name or description. Icon displayed as "Type."
  - **Full path/description mode**: Matches when the keyword is contained in the full path or description. Icon displayed as "Route."
  - Toggle-switchable, and the selected mode is restored on next launch. Notifies via status bar when switched.
### Fixed
- **Breadcrumb display improvement**: Fixed an issue where special folders like OneDrive were displayed with long symbols (GUID format), ensuring folder names are displayed correctly.
- **Favorites search functionality improvement**:
  - Changed to exclude organization folders (virtual folders) from search results, so only actually navigable folders are matched.
  - Fixed display issues (transparency/compression) in the search result list, ensuring text and icons are rendered correctly.
### Changed
- **Japanese saving in settings.json**: Changed to save Japanese characters in favorite names, paths, descriptions, etc. as UTF-8 characters directly instead of Unicode escapes (\uXXXX). The format is now readable as-is in text editors.
- **Initial display change**: Unified the initial state when settings are not saved (e.g., first launch) to dual-pane, left pane = Desktop, right pane = Downloads, nav = favorites view.
- **Log recording icon position**: Changed the pencil icon from appearing in the center with the notification message to displaying to the left of the log folder button (log icon) on the right side of the status bar.
- **Favorites search mode toggle description improvement**: Revised the search mode toggle button tooltip to a dynamic description that conveys "what changes on the next click" based on the current search target.
- **Mouse interference elimination during keyboard operation**: While operating the file list with arrow keys or Enter, the mouse cursor is automatically hidden to prevent hover-triggered selection changes and focus movement. The cursor is re-displayed only when the mouse moves more than 3 pixels from its previous position, seamlessly resuming mouse operation.
- **Hover focus movement**: During mouse operation, simply hovering the mouse cursor over the nav pane moves keyboard focus to the nav pane, and hovering over the A pane/B pane automatically selects it as the active pane and moves focus to the file list (during keyboard operation mode, hover does not move focus as before).

## [0.3.64] - 2026-02-06 : Favorites search functionality fix
### Fixed
- **Favorites view search functionality fix**: Fixed an issue where registered folders and organization folders (virtual folders) sometimes did not appear in search results when searching in the favorites view.
  - Revised the search logic to reliably target folder name (Name), description (Description), and path (Path).
  - In particular, organization folders (virtual folders) without paths are now correctly included in search results.

## [0.3.63] - 2026-02-06 : Favorites search form + description functionality
### Added
- **Favorites view search form**: Added a search box at the top of the favorites list (UI and behavior unified with the history view).
  - **Incremental search**: Instantly filters favorites based on keyword input (during search, tree hierarchy is removed and displayed in a flat list format).
  - **Search targets**: Targets folder name (Name), description (Description), and path (Path) with case-insensitive partial matching and fuzzy search.
  - **UI**: Composed of a magnifying glass icon, text input field, and clear button (x), displaying the placeholder "Search favorites..." Pressing Esc or the x button clears the search.
  - **Display format**: During search, switches to a dedicated list view with item names and descriptions displayed clearly. Items show type-appropriate icons (folder, file, storage type) on the left side, and right-click menu options like "Open in A pane/B pane" are available.
- **Favorites folder description functionality**: Optional descriptions can now be added to and displayed for each favorite folder.
  - **Data model**: Added `Description` property to `FavoriteItem`, persisted in `settings.json`. Existing favorites are safely handled as null/empty `Description`.
  - **UI display**: Displayed next to the folder name as `(description content)` in a subtle design (font size 11, Opacity 0.7, SubTextBrush). Truncated with `TextTrimming="CharacterEllipsis"` when width is narrow.
  - **ToolTip**: Hovering over a favorite item displays the full path and complete description.
  - **Add favorite dialog**: When adding a folder to favorites via the star button, a dialog is displayed for entering the name and "Description (optional)."
  - **Context menu**: Right-clicking a favorite item and selecting "Edit description" opens a dedicated description editing dialog (message: "Enter a description:", no today's date button).
- **Dedicated dialog for description editing**: "Edit description" now uses a dedicated DescriptionEditDialog instead of the InputBox used for rename. Unified the message to "Enter a description:" to prevent confusion with name editing.
- **Name and description input for new folder creation**: When creating a "New folder," an AddFolderDialog is now displayed for entering both name and description (optional) simultaneously. Description can be left empty.

## [0.3.62] - 2026-02-06 : Operation log recording system + status bar notification for all operations
### Added
- **Operation log recording system**: Implemented a log recording feature linked with status bar notifications.
  - **Log output**: Operation logs are automatically saved daily in `yyyy-MM-dd.log` format in the `Logs` folder.
  - **Visual feedback**: A pencil icon blinks in the status bar during log recording (notification display), providing visual feedback that recording is taking place.
  - **Quick access**: Added a button on the right side of the status bar to open the log folder with one click.
  - **Auto maintenance**: Old log files older than 30 days are automatically deleted at startup.

### Changed
- **Status bar notification and log separation**: UI notifications are kept concise like "Copy of N items completed," while file logs record detailed information including file paths.
- **Log timestamps**: Changed to record with second precision (HH:mm:ss).
- **Detailed error logs**: Error details are now recorded in logs when operations fail.
- **All operations now covered by notifications and logs**: Favorites (open, add, delete, rename, lock, delete confirmation), pane display switching, history, display from tree, tab add/close/switch, folder display/back/forward/sort/search/settings toggles (always-on-top, nav display, nav width lock, folders first, adaptive columns), window arrangement, opening manual/changelog/log folder, and all other operations the app can perform are now briefly displayed in the status bar and detailed in logs. Notifications during settings restoration at startup are suppressed via an initialization-complete flag.

## [0.3.61] - 2026-02-06 : Drag guide message + status bar center notification
### Added
- **Guide message display during drag operations**: When dragging an item from the file list, a guide message that follows the mouse cursor is now displayed.
  - Similar to dragging from favorites view or browse history, a message "Drop to copy/move destination" is displayed.
  - Design and behavior are unified with existing drag messages, making it intuitive for users to understand what to do next.
- **Status bar center notification message display**: Added the ability to subtly display feedback such as operation completion in the center of the status bar.
  - Implemented fade-in/fade-out animation that gently appears and naturally disappears after 3 seconds.
  - When multiple notifications occur in rapid succession, the display time is extended with the latest message.
  - Adopted a modern design that blends into the UI (accent color, slightly smaller font than main text).

## [0.3.60] - 2026-02-06 : Title bar path display + right-click drag shortcut creation
### Added
- **Current folder path display in title bar**: The title bar of the main window now displays the full path of the focused pane's folder (e.g., `Zenith Filer v0.3.60 - C:\Users\...\Desktop`). When the path is empty or right after startup, only "Zenith Filer v0.3.60" is displayed. The display updates when switching between left and right panes.
- **Right-click drag and drop to create shortcuts**: Right-click dragging a file and dropping it displays a custom context menu at that location.
  - Menu items: "Copy here," "Move here," "Create shortcut here," "Cancel"
  - Selecting "Create shortcut here" generates a .lnk shortcut (e.g., `Original name - Shortcut.lnk`) referencing the original file at the drop location.
  - Available for both same-pane and cross-pane (left-right or top-bottom) operations. Left-click drag and drop (move/copy) behavior remains unchanged.
### Changed
- **Removed star favorite button from toolbar icons**: Removed the star icon button for favorite registration from the first row action bar (back, forward, refresh, etc.). Favorite registration continues to be available from the star button on the left side of the address bar (second row).

## [0.3.59] - 2026-02-05 : Search history popup fix + favorites drop navigation fix
### Fixed
- **Favorites drop not navigating correctly during search result display**: When the file list is displaying search results (or history), dropping a favorite from the navigation pane now correctly clears the search state, returns to normal mode, and navigates to the dropped favorite's folder. Drops from favorites, browse history, and folder tree are identified as navigation drops, processed in the order: search clear -> header restore -> navigate.
- **Search history dismissed with single click**: Clicking a history item or "No history" now closes the popup with a single click.
- **Search history popup not closing on focus change**: Added a LostKeyboardFocus handler to close the popup when focus moves away from the search form and history.
- **Search history popup black border**: Enabled AllowsTransparency on the popup and disabled FocusVisualStyle on ListBox/ListBoxItem to prevent black borders from appearing.
- **Search history popup display**: The history popup is now displayed only when the search box receives focus (down key not required).
- **Search history not being registered**:
  - History is now also registered when a search is executed by entering a keyword (not just Enter key).
- **Performance optimization**:
  - Disabled transparency processing (AllowsTransparency) and shadow effects on the dropdown, maximizing rendering speed. This further improved click responsiveness.

## [0.3.59] - 2026-02-05 : Search history dropdown display reliability
### Fixed
- **Search history dropdown display reliability**:
  - Fixed to wait for history data to load before displaying the dropdown when clicking the search bar, resolving the issue of it sometimes not appearing due to timing.
  - Even when there are 0 history entries, "No history" is now displayed, providing clear click action feedback.
  - Added `PreviewMouseDown` event handling to ensure reliable response even when clicking while focus is already present.
- **Performance optimization**:
  - Disabled transparency processing (AllowsTransparency) and shadow effects on the dropdown, maximizing rendering speed. This further improved click responsiveness.

## [0.3.58] - 2026-02-05 : Search history dropdown feature
### Added
- **Search history dropdown feature**: Added a dropdown that instantly displays past search keywords (up to 100 entries) when clicking the search bar.
  - **Ultra-fast response**: Eliminated animations to display history instantly without delay when focused.
  - **History persistence**: Keywords are saved during search execution (Enter key or history selection) and available on next launch.
  - **Auto cleanup**: Keeps the most recent 100 entries and automatically deletes older history.
### Fixed
- **Search history not displaying fix**: Fixed issues where the history dropdown would not appear or save when clicking the search bar (strengthened Popup display position settings, ensured Enter key save logic reliability).

## [0.3.57] - 2026-02-05 : Real-time search result count display
### Added
- **Real-time search result count display**: Added a feature to display the number of hits (e.g., `12 items`) in real time at the right edge (inside) of the search bar.
  - Count updates instantly with each keystroke.
  - Hidden when the search box is empty (not searching).

## [0.3.56] - 2026-02-05 : Search result view location icon column + adaptive layout
### Added
- **Location icon column in search result view**: Added a column to the search result list that displays icons indicating file storage location (Local, Server, Box, SPO). Placed between the Name and Path columns, making it easier to visually identify where files are located.
### Changed
- **Search result view adaptive layout enhancement**: Implemented the ability to dynamically hide columns starting from the lowest priority based on pane width.
  - **Display priority**: Name > Location > Path > Modified Date > Size are displayed until last in this order.
  - **Dynamic control**: As width narrows, Size and Modified Date are hidden first, then the Path column reduces width, ultimately displaying only the location icon and name - a tenacious layout specialized for business use.
  - Space from hidden columns is automatically allocated to the Path and Name columns for effective use.

## [0.3.55] - 2026-02-05 : Automatic settings.json backup feature
### Added
- **Automatic settings.json backup feature**: Each time settings are saved, the existing `settings.json` is now automatically copied to the `backups` folder. File names use the format `settings_yyyyMMdd_HHmmss.json` (e.g., `settings_20260205_092500.json`), allowing manual restoration of past states at any time. Backups are created at all save timings including favorites migration and window close.

## [0.3.54] - 2026-02-05 : Unified favorites storage to settings.json
### Changed
- **Unified favorites storage to settings.json**:
  - Changed to save favorite information in `settings.json` in the app's execution folder. This means backing up just `settings.json` is sufficient to carry over user settings including favorites during version upgrades.
  - `settings.json` is immediately updated whenever additions, deletions, or reordering occur.
  - On first launch, if the old format `%AppData%\ZenithFiler\favorites.json` exists, it is automatically migrated to `settings.json`.
  - Separated favorites and history data management (favorites: settings.json, history: continues to be saved in SQLite).

## [0.3.53] - 2026-02-05 : Search result view path column display improvement
### Changed
- **Search result view path column display improvement**:
  - Changed to dynamically switch display content based on Path column width. When sufficient width is available, the full path is displayed; when narrow, only the parent folder name is shown, making important information accessible even in limited space.
  - Changed Path column text alignment to left-aligned, improving visibility of long paths.
  - Tooltip always displays the full path for verification even when abbreviated.

## [0.3.52] - 2026-02-05 : Dramatic startup performance improvement (lazy initialization, async loading)
### Changed
- **Dramatic startup performance improvement (blazing fast startup)**:
  - **Thorough lazy initialization**: Deferred initialization of database connections, search services, and sidebar content (history, tree) until the moment they are actually needed, minimizing memory usage and CPU load immediately after startup.
  - **Async loading optimization**: Changed the previous tab restoration process at startup to load folder contents (file list) in the background. This allows the window frame to appear immediately after startup, significantly reducing Time to Interactive.
  - **Build configuration enhancement**: In addition to ReadyToRun (R2R), optimized `TieredCompilation` to reduce JIT compilation overhead.
- Improved Box Drive access performance (avoided actual access, improved responsiveness)
- Overhauled file list loading to display progressively (improved perceived speed during folder navigation)

### Fixed
- Fixed an issue where files within Box Drive were displayed with white icons

## [0.3.50] - 2026-02-05 : Search result view column layout optimization
### Changed
- **Optimized file list display during search execution**:
  - Changed to switch column layout to "Name," "Path," "Modified Date," "Size" (4 columns) when searching (IsSearching).
  - **Path display optimization**: The "Path" column in search results uses maximum available space, with right-aligned display to prevent the end (filename side) of long paths from being hidden.
  - When the search keyword is cleared and normal mode is restored, the standard 5-column layout (Name, Location, Modified Date, Type, Size) is immediately restored.

## [0.3.49] - 2026-02-05 : In-folder Fuzzy Search + pane header redesign
### Added
- **In-folder search functionality**: Added a search bar to the pane header and implemented **Fuzzy Search** targeting the current folder and its subfolders. Recursively searches for files and folders containing the entered keyword, displaying results incrementally. During search, the display switches to a search results list and returns to the original display when cleared.
- **Pane header redesign**: Reorganized the first row layout by grouping operation icons on the left (navigation, operations, display) and placing the search bar in the available space on the right. Added separators for improved visibility.

## [0.3.48] - 2026-02-05 : Context menu unified to OS standard style
### Changed
- **Context menu unified to OS standard (Windows) style**: Changed right-click menu display to behavior closer to the native Windows Explorer.
  - **Animation removal**: Disabled slide/fade visual effects on display, making the menu appear instantly with zero wait time on right-click (`PopupAnimation.None` applied app-wide).
  - **Display position precision**: Implemented logic to display the menu starting from the mouse cursor position (right-click coordinates), with overflow prevention that expands to the left/top when the menu would extend beyond the screen right/bottom edges (WPF context menus use offset correction on Opened, shell menus use `TrackPopupMenuEx` with TPM_RIGHTALIGN/TPM_BOTTOMALIGN).
  - **Strict positioning**: The menu is displayed starting from the mouse cursor position (right-click coordinates), with overflow prevention logic that expands to the left or upward when the menu would extend beyond the right or bottom edge of the screen (WPF context menus use offset correction on Opened, shell menus use `TrackPopupMenuEx` with TPM_RIGHTALIGN/TPM_BOTTOMALIGN).

## [0.3.47] - 2026-02-05 : Pane header two-row layout
### Changed
- **Changed pane header to two-row layout**: Consolidated back/forward/up, refresh, new folder, add to favorites (star), path edit toggle, and various tool icons on the right end into the first row (action row), with only the address bar placed full-width on the second row. The left edges of the icon row and address bar are aligned to minimize eye movement.
- **Removed address bar hover expand/collapse**: Removed the animation and layout adjustment logic that expanded/collapsed the address bar on mouse hover or dropdown display, changing to a stable UI that always displays at a fixed width. This ensures elements within the header don't "bounce around" during operation, keeping the address bar and tool icon positions fixed.

## [0.3.46] - 2026-02-04 : Lock release button fix + folder creation flow improvement
### Fixed
- **Fixed issue where lock release button was unclickable during animation**: When attempting to register while the favorites view is locked, a blinking animation appears prompting lock release, but the padlock button click is now always accepted even during animation. The logic was changed so that clicking immediately releases the lock and stops the animation (immediate warning flag off, delay cancellation, UI block removal).
### Changed
- **Improved folder creation flow in favorites view**: When executing "New Folder" in the favorites view, a rename dialog is now immediately displayed with "New Folder" or "New Folder (n)" pre-filled (fully selected) for editing. The virtual folder is only created upon OK/Enter confirmation, and canceling prevents an empty folder from being created, so unintended dummy items no longer remain.
- **Optimized new folder insertion position in favorites view**: When right-clicking a specific item in the favorites view and executing "New Folder", the virtual folder is now inserted at the **same level directly below** (`index + 1` position) rather than inside that item. The newly created folder is automatically selected and scrolled into view within the tree view, and the rename dialog opens immediately, allowing intuitive renaming without the folder being hidden off-screen.

## [0.3.45] - 2026-02-04 : Back/forward history stack corruption fix
### Fixed
- **Fixed issue where history could only go back one step**: When pressing the toolbar "Back" button (Alt+Left) or mouse back button (XButton1), `saveToHistory` was always called with `true`, corrupting the history stack and preventing navigation through more than 10 folders consecutively. Fixed to use `saveToHistory: false` for back/forward transitions, correctly maintaining and navigating at least 10+ history entries.

## [0.3.44] - 2026-02-04 : Today's date button for new folder creation
### Added
- **"Today's Date" button for new folder creation**: Added a **"Today's Date" button** to the rename dialog displayed after creating a new folder. Clicking it auto-fills the current date in `YYYYMMDD` format (e.g., `20260204`), enabling quick creation of date-based folders (also available during regular renaming). The button is placed in the button row below the text box, and the text area displays at full window width.
### Fixed
- **Adjusted rename dialog height**: Fixed an issue where the window height was insufficient, causing the "Today's Date" button to not be displayed. Height was increased to ensure the button and OK/Cancel are always visible.
### Changed
- **Improved rename dialog button layout**: Aligned the three buttons "Today's Date", "OK", and "Cancel" horizontally in the bottom-right below the text box, unifying margins, button sizes, heights, and padding for a more modern, readable layout where Japanese text is not truncated.

## [0.3.43] - 2026-02-04 : Tab context menu position fix + folder row D&D fix
### Fixed
- **Fixed tab context menu display position**: Fixed the context menu to appear immediately at the mouse cursor position when right-clicking a tab, instead of sliding in from above (explicitly specified `Placement="MousePoint"` and `PopupAnimation="None"`).
- **Fixed files not being moved/copied when drag-and-dropping onto folder rows**: When dragging and dropping files onto a folder row within the same pane, the operation was being performed against the current folder instead of the drop target folder, so files were not moved/copied to the subfolder as expected. Fixed to correctly detect the folder row at the drop position and perform the shell operation using that folder as the destination.

## [0.3.42] - 2026-02-04 : Startup error fix + global exception handler added
### Fixed
- **Startup error fixes**:
  - Fixed "resource not found" error that occurred after moving `MainWindow.xaml` (updated `StartupUri`).
  - Moved database service initialization (directory creation) from static constructor to `InitializeAsync` to prevent crashes from file I/O errors at startup.
- **Enhanced exception handling**: Implemented global exception handlers (`DispatcherUnhandledException`, `TaskScheduler.UnobservedTaskException`) to display error messages instead of silently terminating on unexpected errors.

## [0.3.41] - 2026-02-04 : Tab lock feature
### Added
- **Tab lock feature**: Tabs can now be locked by right-clicking and selecting "Lock", preventing them from being closed. Locked tabs display a padlock icon, and the lock state is restored on next launch.

## [0.3.40] - 2026-02-04 : Project structure folder reorganization
### Changed
- **Project structure overhaul**: Organized root directory files into responsibility-based folders (ViewModels, Views, Models, Services, Helpers, Converters, Behaviors) to improve maintainability.
- **Refactoring**: Separated window control logic from `MainViewModel` into `WindowHelper`, and string processing into `StringHelper`.

## [0.3.39] - 2026-02-04 : Startup speed improvement (background DB initialization)
### Changed
- **Startup speed improvement**:
  - Changed database initialization to run in the background, eliminating startup blocking.
  - Removed duplicate settings file loading to optimize I/O.
- Removed the startup splash screen (app icon display).

## [0.3.38] - 2026-02-04 : Window placement button expansion + context menu improvement
### Added
- **Snap window to bottom-left/bottom-right (quarter screen)**: Added "Snap to Bottom-Left" and "Snap to Bottom-Right" to the window placement buttons in the status bar. Click to snap the window to the bottom-left or bottom-right quarter of the screen. Uses CornerDownLeft/CornerDownRight icons (corner-indicating icons).
- **Snap window to bottom half**: Added "Snap to Bottom Half" to the window placement buttons in the status bar. Placed to the right of the maximize button; click to snap the window to the bottom half of the screen. Uses PanelBottom icon.
### Fixed
- **Context menu (right-click) behavior improvements**:
  - Moved menu display to a background thread, eliminating UI freeze before display.
  - Fixed "Rename" not functioning (changed to invoke the app's rename feature).
  - Fixed "Properties" not appearing or disappearing (changed to display the properties window on the main thread).
### Changed
- **View mode switching**: Disabled the "Large Icons" button on the toolbar right end, making it unclickable (currently only detail view is supported).

## [0.3.37] - 2026-02-04 : History fuzzy search + Ctrl+Shift+N + nav pane width lock
### Added
- **"Advanced search" for the browsing history pane**: Added a search box at the top of the history list.
  - **Fuzzy Search**: When entering keywords, filters the history with fuzzy search (Levenshtein distance) that tolerates minor typos.
  - **Highlighting**: Highlights portions matching the search keyword in accent color.
  - **Shortcut**: `Ctrl + F` switches to the history pane and immediately focuses the search box.
- **Ctrl+Shift+N (New Folder)**: Creates a "New Folder" in the current folder, focuses the created folder and starts renaming (equivalent to F2).
- **Nav pane width lock**: Added a width-lock toggle (panel icon) at the bottom-right of the sidebar, only visible in favorites view. When locked, arbitrary width changes via the splitter are disabled; automatic expansion when switching to tree view or history view remains active as before. Lock state is saved to settings and restored on next launch.
### Changed
- **Display day of week in history view date groups**: Changed the date group display to include the day of week, e.g., "2026/02/04(Wed)" (Japanese locale).
- **Improved browsing history pane search behavior**:
  - When typing in the search box, **date-based grouping is removed and items are shown as a flat list** (sorted by reference date, descending). This makes it easier to quickly find target folders across all past history.
  - Clearing the search text automatically returns to the normal date-grouped display.
- **Rename**: When renaming files, the dialog text box displays **only the name portion**, with the extension shown as a label outside the text box. The extension cannot be selected or edited, and the original extension is appended upon confirmation. Folder renaming remains fully selectable/editable as before.
- **Nav width lock icon**: Changed the left-end toggle from a padlock to a panel (PanelLeftOpen/PanelLeftClose). Shows an open panel when width is changeable and a closed panel when fixed, avoiding overlap with the favorites lock (padlock) on the right end and the always-on-top pin at the bottom-right.
- **History view trash (history delete)**: Moved the button to clear browsing history to the **bottom-right** of the history view.

## [0.3.36] - 2026-02-03 : Nav pane horizontal scroll fix + favorites lock warning restoration + address bar expand/collapse improvement
### Fixed
- Fixed horizontal scrollbar appearing and enabling horizontal scrolling in the nav pane tree view (favorites and folder tree). Disabled horizontal scrolling and long folder names are now displayed with ellipsis (...).
- Fixed the issue where pressing the star (add to favorites button) while the favorites view was locked did not display an error message or the "prompt to unlock" animation near the lock icon (feature restoration). When locked, the star turns red, a "Cannot register" dialog is displayed, and an arrow + blinking animation appears near the nav pane lock icon.
- Fixed Markdown syntax (`**` bold, `` ` `` code) being displayed as-is in the manual window, making it hard to read. Removed syntax markers during display and show as plain text.
- Fixed issue where switching to "Edit Path" mode in the address bar caused the mode toggle icon (pencil) to wrap below the address field, making it difficult to switch. Placed the mode toggle icon to the right of the "Up" button (fixed on the left), ensuring it can always be accessed from the same position.
### Added
- **Favorites add button (star) improvements**:
  - Moved the button to the **left end** of the address bar.
  - **Failure animation**: When locked, the star turns red, displays "Cannot register while locked" message and dialog, and prompts unlock with an arrow + blinking animation near the lock icon.
  - **Success action**: On registration, the star animates larger and "Saved!" is displayed. The icon color automatically reverts after 3 seconds.
### Fixed
- Fixed issue where the breadcrumb dropdown menu did not close when the mouse moved outside the menu (to the file list, etc.). Added a timer-based mouse position monitor on the main window that closes the menu when the mouse leaves the menu and dropdown button area.
### Changed
- **Complete integration of address bar and menu behavior/visuals**:
  - **Expansion conditions**: Address bar expands rightward to maximum when any of the following occur: "mouse hover", "focus (path editing)", or "dropdown menu open" (left end is fixed to prevent text position jumping).
  - **Menu closure**: Menu closes when the mouse leaves the menu area or **Esc key** is pressed. If the mouse remains on the address bar after menu closure, the expanded state is maintained; it smoothly returns to original size only when completely moved away.
  - **Animation**: 300ms expand/collapse using cubic-bezier(0.25, 0.8, 0.25, 1). When expanded, overlays tool icons via z-index with a subtle shadow for floating effect.
- **Address bar (breadcrumb list) behavior improvements**:
  - Improved so that the address bar **stays expanded** while the folder navigation menu (dropdown) is displayed, even when the mouse moves away.
  - Resolved the issue of layout shifting during menu operation, enabling smooth folder selection.
- **Favorites button (star) hover and layout improvements**:
  - The star button responds with **icon only** (minimal circular background) on hover, compactly placed with reduced left/right margins (MinWidth/Height 20).
  - Hover shows a **minimal circular highlight following the icon** + icon color change instead of a rectangular background. Applied 0.2s smooth transition.
  - Icon unified at 12x12, hit area maintained.

## [0.3.35] - 2026-02-03 : Address bar hover expansion + Explorer import feature
### Added
- **Address bar occupies all remaining space to the right of all icons**: The toolbar row is ordered as [All icons (navigation + others)] [Address bar *], with the address bar occupying all space to the right of the icons. Hovering over the address bar animates the icon column to 0, expanding the address bar to the left.
- Added **Import folders from Explorer** feature. An import button is placed in the icon group to the left of the address bar (right of "Open in Explorer").
  - When only 1 Explorer window is open: Displays that folder in a **new tab** and closes the target Explorer.
  - When 2 or more are open: Displays a dialog to select which Explorer windows to import. Displays selected folders in **new tabs** respectively, and closes the target Explorers after import.
  - Uses Shell.Application COM (proven method) to enumerate Explorer windows.

## [0.3.34] - 2026-02-03 : Open in Explorer button + breadcrumb dropdown + D&D improvements
### Added
- Added "Open in Explorer" button to the browser bar (path bar) icon group. Opens the currently displayed folder in Windows standard Explorer.
- Added Explorer-style dropdown to the breadcrumb list.
  - Clicking the down arrow (triangle) on the right side of each level displays a popup of subfolders directly under that folder; selecting one navigates to that folder.
### Fixed
- Fixed E_UNEXPECTED error when drag-and-dropping files (move) within the same folder. Same-folder moves are now silently skipped.
- Fixed popups (rename input, manual, changelog, etc.) appearing behind the main window when always-on-top is enabled. Popups opened from the app are now displayed in front of the main window.
- Fixed F2 key rename not working in the file list.
- Fixed Ctrl+X cut not working in the file list.
- Fixed focus being lost after copying in Pane A, switching to Pane B, and pasting, making subsequent keyboard operations impossible. Focus now remains on the list after copy/cut/paste, and after paste completion, focus moves to the first item in the list.
- Improved focus behavior: after copy/cut, focus goes to the operated item (selected); after paste, focus goes to the pasted file.
- Fixed focus disappearing momentarily after copy/paste. Focus is now reapplied after subsequent Refresh by FileSystemWatcher, with delays (100ms/600ms) to prevent focus from being stolen by other processes or panes.
- Fixed screen flickering in the pane where the mouse is after copy/cut. Since the list doesn't change during copy/cut, delayed focus restoration is not performed; only immediate focus is used.
- Reduced screen flickering occurring in both panes. Removed the 100ms/600ms delayed focus restoration timer after paste; focus restoration is now only performed on list update (CollectionChanged). Also prevents re-setting focus when already focused, suppressing unnecessary rendering updates.
- Fixed to display only Pane A in normal mode. Changed default pane count to 1 (Pane A only).
- Fixed title column being displayed twice in the file list. Removed the duplicate header row inside the custom ScrollViewer.
### Changed
- Changed file list vertical scrollbar to overlay display.
  - Improved so that the "Name" column width no longer changes (shrinks) when the scrollbar appears.
  - The scrollbar is now overlaid on top of content in columns like "Size", improving layout stability.
- Fixed column width calculation logic (StarWidthConverter / AdaptiveColumnWidthConverter) to not depend on scrollbar presence.
- Improved drag-and-drop accidental operation prevention.
  - Changed drag start movement threshold from 2px to 10px. Suppresses drag activation from slight mouse wobble.
  - Changed to match Windows standard behavior: **Drop without Ctrl = Move**, **Drop with Ctrl = Copy**.
- Performance optimization refactoring (no functional changes).
  - MainViewModel / FilePaneViewModel: Changed list checks from `Any()` to `Count` pattern, changed `Last()` to index access.
  - PathHelper: Changed special folder detection to HashSet, IsUncRoot to Span, path joining to use cached separator character.
  - TabItemViewModel: Eliminated double sorting during folder loading (unified to ICollectionView ApplySort only).
  - DirectoryTreeViewModel: Changed `Last()` in loops to index comparison.
  - DatabaseService: Changed history cleanup to batch DELETE (avoiding N+1 deletion).
  - DirectoryItemViewModel: Moved subfolder list sorting to background thread.
  - FavoritesViewModel: Consolidated SaveFavorites during initial favorites load to 1 call.
- Startup acceleration.
  - Changed history view data loading to not occur at startup; lazy-loads when switching to "Browsing History" in the nav pane.
  - Changed tree view drive list/expansion to not occur at startup; lazy-loads when switching to "Tree" in the nav pane (if the previous session ended on tree view, tree is built in the background without blocking startup).
  - Changed database old history cleanup (CleanupHistoryAsync) to run in the background instead of awaiting at startup.

## [0.3.33] - 2026-02-03 : Horizontal scrollbar fix + size column padding adjustment
### Fixed
- Fixed unnecessary horizontal scrollbar appearing in Pane A/Pane B.
  - Fixed scrollbar display setting to "Hidden (Disabled)".
  - Improved "Name" column width calculation to accurately account for vertical scrollbar presence (preferring ViewportWidth).
- Adjusted right-side padding for the "Size" column.
  - Optimized padding to match the custom scrollbar width (12px), improving design harmony.
### Changed
- Improved so that column display positions do not shift when the vertical scrollbar appears in the file list.
  - Reserved scrollbar-width padding on the right side of the "Size" column, preventing the scrollbar from overlapping item content.

## [0.3.32] - 2026-02-03 : Focus loss after Delete fix
### Fixed
- Fixed focus being lost after deleting files with keyboard (Delete) in the file list, making subsequent keyboard operations impossible. After deletion, selection and focus now move to the next item.

## [0.3.31] - 2026-02-02 : Tab switch animation + TAB/arrow key pane switch fix
### Added
- Content fade-in animation on tab switch
  - New content now fades in over approximately 0.4 seconds when switching tabs (no animation on initial display)
- Active indicator slide animation below tab headers
  - The indicator (underline) now slides to match the selected tab over approximately 0.25 seconds (no animation on initial display)
### Fixed
- Fixed TAB key and left/right arrow key switching between Pane A and Pane B not working
  - Changed key processing to occur in the main window's PreviewKeyDown, enabling pane switching even when focus is on non-list elements (path field, breadcrumbs, etc.)
- Fixed nav pane not returning to user-set width when switching back to favorites view after switching between favorites, tree, and history views
  - Since "favorites width" was being overwritten every time switching to tree/history, changed to only update favorites width when in favorites view (during splitter operation)
- Fixed blank white icon being displayed in tabs, history, and favorites when accessing BOX (Box folder)
  - Replaced with `Archive` icon (representing storage) because MahApps.Metro.IconPacks.Lucide `Box` icon was not rendering correctly
### Changed
- Shortened tab width to approximately 2/3 (160px to 106px), allowing more tabs to be displayed simultaneously
- Dynamically adjust nav pane width based on view
  - Auto-expands to prevent horizontal scrolling when in browsing history view; returns to original width when switching to favorites or tree view
  - Width set by splitter in favorites/tree view is preserved and saved to settings
- Unified nav pane width for tree view and history view (both 340px)
- Added animation to nav pane width changes
  - Width smoothly expands when displaying browsing history or tree view, and smoothly contracts when switching to favorites (approximately 0.25 second easing)

## [0.3.30] - 2026-02-02 : Mouse wheel tilt horizontal scrolling support
### Fixed
- Fixed mouse right-scroll/left-scroll (wheel tilt) not working
  - Added WM_MOUSEHWHEEL handling in the main window, enabling horizontal scrolling in horizontally scrollable areas (file list, breadcrumb bar, etc.) under the cursor

## [0.3.29] - 2026-02-02 : Title bar white display fix + Fluent Design optimization
### Fixed
- Fixed title bar appearing white (explicitly specified dark background color and white text to restore previous appearance)
- Resolved slight gap appearing when snapping the window to screen edges
  - Implemented accurate position calculation considering DWM (Desktop Window Manager) extended frame information in snap placement commands
  - Applied top offset to eliminate top/bottom gaps
  - Added fallback using system resize frame thickness (ResizeFrame*) to compensate for gaps when DWM retrieval fails
### Changed
- Changed main window title bar height from 48px to 32px (unified to same thickness as system title bars in manual/changelog windows)
- Slimmed down header bar and toolbar for overall harmony
  - Unified nav pane view switch bar and A/B pane toolbar heights from 40px to 32px
  - Reduced path input field height from 28px to 24px, reduced tab padding and icon sizes
  - Reduced toolbar/status bar icons from 14px to 12px, tightened margins for consistent appearance
- Optimized main window design for Windows 11 Fluent Design
  - Achieved modern appearance and usability through migration to `ui:FluentWindow` and title bar integration
  - Support for Mica effect (background transparency) and rounded window corners

## [0.3.28] - 2026-02-02 : Status bar vertical alignment fix
### Fixed
- Fixed vertical alignment of text and icons in the status bar (changed to center alignment, improving design consistency)

## [0.3.27] - 2026-02-02 : Window placement control buttons added
### Added
- Added window placement control buttons at the left end of the status bar
  - Placed three buttons: snap to left half, maximize, and snap to right half
  - Implemented snap functionality considering multi-display environments and taskbar height

## [0.3.26] - 2026-02-02 : Nav pane blank space fix when hidden + UNC path support
### Fixed
- Fixed the nav pane area remaining as blank space when hidden (improved so A/B panes use maximum window width when nav pane is hidden)
- Fixed inability to navigate to network server root (first level, e.g., `\\server`) (relaxed directory existence check during navigation)
- Fixed breadcrumb list (address bar) not displaying UNC paths (network paths) with correct hierarchy

## [0.3.25] - 2026-02-02 : Manual/changelog scrollbar position fix
### Fixed
- Fixed scrollbar in manual and changelog screens overlapping content or appearing to float from the right edge (changed margin settings to padding settings, placing the scrollbar at the window's right edge)

## [0.3.24] - 2026-02-02 : Favorites lock warning message + blinking effect
### Changed
- Added lock release prompt text to the warning message when the favorites view is locked
- Added visual effect where the lock icon blinks and an arrow appears when attempting operations while locked

## [0.3.23] - 2026-02-02 : C drive root navigation redirect fix
### Fixed
- Fixed navigation to C drive root (C:\) being redirected to the current working directory
- Improved handling of drive letter-only input in the address bar (e.g., "C:") to treat it as navigation to the root directory

## [0.3.22] - 2026-02-02 : Favorites lock operation warning display
### Added
- Added feature to display a warning message when attempting to register or move items while the favorites view is locked

## [0.3.21] - 2026-02-02 : Breadcrumb list dynamic truncation display
### Added
- Implemented dynamic truncation display for the breadcrumb list (address bar)
  - Adopted WPF-UI library's BreadcrumbBar; when the path becomes long, leading hierarchy levels are automatically truncated (...) to always display the end (current location)
  - Added ability to navigate by selecting truncated hierarchy levels from a "..." button dropdown menu

## [0.3.20] - 2026-02-02 : Tab D&D reordering
### Added
- Added ability to drag tabs to reorder (rearrange) their positions

## [0.3.19] - 2026-02-02 : Favorites icon auto-switch by storage type + tab bar double-click new tab
### Added
- Added feature to automatically switch favorites list folder icons based on location (Local, Network, Box, SPO)
- Added feature to create a new tab by double-clicking the empty area of the tab bar

## [0.3.18] - 2026-02-02 : Network server root shared folder list fix
### Fixed
- Fixed shared folder list not being displayed when accessing network server root (first level, e.g., `\\server`)

## [0.3.17] - 2026-02-02 : Path edit mode state persistence
### Changed
- Changed path edit mode (toggle style) state to persist across folder navigation and when opening new tabs
- Improved to save path edit mode state on app exit and restore on next launch

## [0.3.16] - 2026-02-02 : Path edit button toggle conversion
### Changed
- Changed path edit button to toggle style (ToggleButton), making it easier to visually identify the current mode (breadcrumb display / path input)
- Improved to automatically focus and select all text in the path input field when the path edit button is turned on

## [0.3.15] - 2026-02-02 : High DPI (PerMonitorV2) support
### Fixed
- Enabled DPI Aware (PerMonitorV2) in the manifest file to resolve font blurriness on high-resolution displays (High DPI)

## [0.3.14] - 2026-02-02 : Title bar signature removal
### Changed
- Removed " -- by xxxx" from the title bar

## [0.3.13] - 2026-02-02 : Changelog/manual Esc close + window width expansion
### Added
- Improved changelog and manual screens to be closable with the Esc key
### Changed
- Expanded changelog and manual screen window widths to improve readability

## [0.3.12] - 2026-02-02 : Favorites empty area right-click menu added
### Added
- Added feature to display a context menu (New Folder) when right-clicking the empty space in the favorites view
- Added icons to the favorites view right-click menu to improve visibility

## [0.3.11] - 2026-02-02 : Fixed tab width (close button position stabilization)
### Changed
- Changed tab width to fixed (160px), preventing the "x" button position from shifting when closing tabs consecutively

## [0.3.10] - 2026-02-02 : Empty file list fix when tab D&D
### Fixed
- Fixed issue where the file list was not automatically displayed (showing blank) when opening a new tab via drag-and-drop from the tab empty area or nav pane

## [0.3.9] - 2026-02-02 : Desktop/Downloads shortcut buttons added
### Added
- Added shortcut buttons for frequently used locations next to the favorites add button on the toolbar
  - Desktop navigation button (monitor icon)
  - Downloads folder navigation button (download icon)

## [0.3.8] - 2026-02-02 : Tab state save/restore feature
### Added
- Added folder path and tab state save/restore feature on app exit
  - Saves all tabs and selection states open in Pane A and Pane B on app exit
  - Changed to automatically restore the previous session's tab configuration on next launch

## [0.3.7] - 2026-02-02 : Add to favorites button added to navigation bar
### Added
- Added a button to add the current folder to favorites on the navigation bar
  - Placed to the right of the "Up (parent folder)" button

## [0.3.6] - 2026-02-02 : Favorites duplicate registration prevention
### Fixed
- Added restriction to prevent registering the same folder as a duplicate in the favorites feature
  - Improved to display a message and skip when attempting to add an already registered folder

## [0.3.5] - 2026-02-02 : Folder drop on tab empty area support
### Added
- Added feature to display folders in a new tab when dropped on the empty area of the tab bar
  - Supports drops from external Explorer, favorites, tree view, and browsing history

## [0.3.4] - 2026-02-02 : ViewModel refactoring (CommunityToolkit.Mvvm utilization)
### Changed
- Performed ViewModel refactoring
  - Leveraged `CommunityToolkit.Mvvm` `[RelayCommand]` attribute to reduce boilerplate code
  - Optimized `TabItemViewModel` command state management (back, forward, up) with `CanExecute` methods
  - Organized property notification logic to improve code readability

## [0.3.3] - 2026-02-02 : Chrome-style tab design improvement
### Changed
- Improved tab "Close" button design to Chrome style
  - Optimized icon to a simple `X` (size `9`)
  - Changed to a modern style with circular background on hover
- Improved active tab visibility
  - Added accent line at the top of the selected tab, emphasizing text and icon
  - Changed selected tab font to semi-bold for easier identification

## [0.3.0] - 2026-02-02 : Multi-tab feature
### Added
- Added multi-tab feature within each pane
  - `Ctrl + T`: Open a new tab at the current path
  - `Ctrl + W`: Close the current tab
  - `Ctrl + Tab`: Switch to the next tab
- Added feature to display folder name and storage type icon in tab headers
### Changed
- Overhauled pane structure, refactoring to ViewModel architecture supporting tab management

## [0.2.13] - 2026-02-02 : Browsing history right-click menu fix
### Fixed
- Fixed right-click menu (Show in Pane A / Show in Pane B) in browsing history not functioning

## [0.2.12] - 2026-02-02 : Tree view right-click event propagation fix
### Fixed
- Fixed parent item capturing events in tree view right-click processing (changed so only the nearest item to the clicked element responds)

## [0.2.11] - 2026-02-02 : Tree view right-click menu binding fix
### Fixed
- Fixed binding for the target folder in the tree view right-click menu to work correctly (changed to route through `PlacementTarget.DataContext`)

## [0.2.10] - 2026-02-02 : Tree view right-click handling improvement
### Fixed
- Improved tree view right-click handling (suppressed auto-selection from focus movement)
- Fixed data context reference in right-click menu to ensure actions execute correctly

## [0.2.9] - 2026-02-02 : Tree view right-click selection behavior change
### Changed
- Changed nav pane tree view to not select items on right-click
- Fixed behavior so items are displayed in the target pane only when a right-click menu item is selected

## [0.2.8] - 2026-02-02 : Tree view D&D + right-click menu added
### Added
- Added feature to display folders via drag-and-drop from tree view to pane
- Added "Show in Pane A" and "Show in Pane B" to tree view right-click menu

## [0.2.7] - 2026-02-02 : Mouse back/forward button support
### Added
- Added navigation support for mouse back (XButton1) and forward (XButton2) buttons
- Added forward button (ArrowRight) to the toolbar
- Added Alt + Right shortcut for "Forward" navigation

## [0.2.6] - 2026-02-02 : Browsing history clear button added
### Added
- Added "Clear History" button at the bottom-right of the browsing history view
- Implemented confirmation message display when clearing all history

## [0.2.5] - 2026-02-02 : Browsing history date-based grouping
### Added
- Added feature to display browsing history grouped by date
- Added collapsible (expander) functionality per group
### Changed
- Changed to automatically collapse browsing history groups other than today on startup

## [0.2.4] - 2026-02-02 : Tooltip for drop target during history drag
### Added
- Added feature to display a tooltip indicating the drop target when dragging history items

## [0.2.3] - 2026-02-02 : Browsing history multi-column display
### Added
- Added "Access Date/Time" and "Count" columns to the browsing history view, enabling detailed information viewing
### Changed
- Redesigned browsing history view to multi-column display (Name, Access Date/Time, Count)

## [0.2.2] - 2026-02-02 : Browsing history view display/update bug fix
### Fixed
- Fixed browsing history view overlapping with favorites view
- Fixed browsing history view not updating in real-time when navigating folders

## [0.2.1] - 2026-02-02 : Browsing history view added
### Added
- Added browsing history view to the nav pane (switchable with Ctrl+Shift+3)
- Feature to display in pane via double-click and drag-and-drop of history items
- History item right-click menu (Show in Pane A / Show in Pane B)
- Display of 4 storage icon types based on storage location (Local, Server, Box, SPO)
### Changed
- Changed app changelog icon from `History` to `ScrollText` to improve visual distinction from browsing history

## [0.1.0] - 2026-02-02 : Folder browsing history save feature (SQLite)
### Added
- Added folder browsing history save feature (using SQLite)
- Records access count (AccessCount) and last access date/time (LastAccessed) per path
- Integrated automatic storage location (Local, Server, Box, SPO) detection logic
- Implemented automatic cleanup of history entries not accessed for over 1 month

## [0.0.9] - 2026-02-01 : In-app changelog display
### Added
- Added "Changelog" display icon to the title bar
- Added feature to view `CHANGELOG.md` contents in a modern layout from within the app

## [0.0.8] - 2026-02-01 : Location column added to file list + formatted JSON saving
### Added
- Added "Location" column to the file list, enabling file storage location (Local, Server, Box, SPO) identification via icons
### Changed
- Changed `settings.json` save format to indented, formatted JSON for easier manual editing

## [0.0.7] - 2026-02-01 : SPO/OneDrive display performance improvement
### Changed
- Improved list display performance for SPO/OneDrive synced folders
- Changed to avoid actual file access during icon retrieval for files with offline attribute, preventing downloads from being triggered
- Changed nav pane display switch shortcuts to `Ctrl+Shift+1` (Favorites) and `Ctrl+Shift+2` (Tree View)

## [0.0.6] - 2026-02-01 : SQLite introduction + single file distribution format
### Added
- Introduced SQLite (`sqlite-net-pcl`) and built the foundation for data persistence
- Added `DatabaseService` for database connection and automatic table generation
- Added `AppSetting` model for application settings storage
### Changed
- Changed publish settings to single file executable format (Single File) to optimize distribution files
### Fixed
- Fixed application icon (`app_icon2_1.ico`) to be correctly set in the project and applied at compile time

## [0.0.5] - 2026-02-01 : SQLite FTS5 preparation + storage-specific icons
### Added
- SQLite FTS5 search engine integration preparation
- Added modern storage-specific icons
### Changed
- Changed title bar text to "Zenith Filer v0.0.5 -- by xxx" (dynamically retrieved from assembly information)
- Added version information to `ZenithFiler.csproj`
