xref: /plugin/calendar/CHANGELOG.md (revision 96df7d3e9a825dddf459ab1ee6077a9886837f17)
1# Calendar Plugin Changelog
2
3## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX
4
5### Bug Fix: Month Search Not Working
6- **Root cause:** Function name collision - there were two `fuzzyMatch` functions
7  - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null`
8  - Local `fuzzyMatch` (for event search) returns `true`/`false`
9- When filtering events, the wrong function was being called, returning `null` for all events
10- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch`
11- Month search now works correctly on first load and after navigation
12
13### Also in this version
14- Fixed jumpToDate to properly hide search clear button after navigation
15- Removed debug logging from production code
16
17## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES
18
19### Bug Fixes
20
21**All-Dates Search Navigation Fixed**
22- Clicking a search result now properly navigates to that event's month
23- Opens the day popup showing the event details
24- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()`
25- Clears search results and restores normal event list view
26
27**"No Events" Message Fixed**
28- No longer shows "No events match your search" when in all-dates mode
29- All-dates mode has its own results display; the month-mode message was incorrectly appearing
30
31**Add Button Layout Fixed**
32- Search bar no longer pushes the "+ Add" button off the right edge
33- Search container has constrained max-width (160px) and proper flex settings
34- Header has overflow:hidden to prevent layout issues
35
36**Important Event Stars Fixed**
37- Stars now appear on initial page load (PHP rendering added)
38- Stars positioned outside the bar using CSS ::before pseudo-element
39- Added overflow:visible to event-indicators and event-bar containers
40- Bar remains full width; star sits in the left margin area
41
42### Technical
43- Star uses `event-bar-has-star` class for first-day-only display
44- jumpToDate() properly cleans up search state before navigation
45
46## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS
47
48### Bug Fix
49- **AJAX refresh now preserves important namespace highlighting**
50  - Important namespaces list now passed to JavaScript via data attribute
51  - Highlighting persists when navigating between months
52  - Works in both main calendar sidebar and standalone event panels
53
54### New Feature: Calendar Grid Star Icons
55- **Important events now show ⭐ on their color bars** in the calendar grid
56  - Small star appears on the first day of important events
57  - Tooltip prefixed with ⭐ for important events
58  - Visual distinction without cluttering the compact grid view
59
60### Admin Section Update
61- **Improved Important Namespaces description** in Admin → Calendar → Manage Events
62  - Now explains all visual effects:
63    - Calendar Grid: ⭐ star on event bars
64    - Event Sidebar: ⭐ star + highlighted background + accent border
65    - Sidebar Widget: Dedicated "Important Events" section
66    - Day Popup: Events shown with full details
67  - Better example placeholder text
68
69### Technical
70- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences)
71- Important namespaces loaded once and stored in container dataset for JavaScript access
72
73## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING
74
75### Fuzzy Search
76- **Improved search matching:** Search is now more forgiving of punctuation differences
77  - "fathers day" matches "Father's Day"
78  - "new years" matches "New Year's Eve"
79  - Smart quotes, apostrophes, dashes, and common punctuation are ignored
80- **Multi-word search:** All words must be present but in any order
81  - "birthday john" matches "John's Birthday Party"
82- Works in both "this month" and "all dates" search modes
83
84### Important Namespace Highlighting (Calendar Sidebar)
85- Events from important namespaces now highlighted in the main calendar's event list sidebar
86- Same visual treatment as the itinerary sidebar widget:
87  - Subtle theme-colored background tint
88  - Right border accent bar
89  - ⭐ star icon before event title
90- Theme-specific colors:
91  - Matrix: green tint
92  - Purple: purple tint
93  - Pink: pink tint
94  - Professional: blue tint
95  - Wiki: light blue tint
96- Configure important namespaces in Admin → Calendar → Sync Settings
97
98## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE
99
100### New Feature: Search Scope Toggle
101- **Search mode button** (��/��) added next to search input in both calendar views
102- **Default mode** (��): Search only the current month's events (fast, local filtering)
103- **All dates mode** (��): Search across ALL calendar data via AJAX
104  - Click the �� button to toggle to �� (green highlight when active)
105  - Requires at least 2 characters to search
106  - Shows results with date, time, and namespace
107  - Click any result to jump to that date and open the day popup
108  - Limited to 50 results for performance
109- Search placeholder text updates to indicate current mode
110- Compact button design takes minimal space
111
112### UI Details
113- Button sits flush with search input (no gap)
114- Green highlight when "all dates" mode is active
115- Results show full date (e.g., "Mon, Feb 12, 2026")
116- Namespace badge shown for multi-namespace setups
117
118## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING
119
120### Features
121- **Draggable Day Popup:** Calendar day popup window is now draggable by its header
122  - Click and drag the header to move the popup
123  - Header shows move cursor on hover
124  - Clicking the close button (×) still closes normally
125
126- **Important Namespace Highlighting in Sidebar:**
127  - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting
128  - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki)
129  - Right border accent bar for visual distinction
130  - ⭐ star icon appears before event title
131  - Works in Today, Tomorrow, and Important Events sections
132
133### Bug Fix
134- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons
135  - Event title now wraps to multiple lines instead of truncating
136  - Actions buttons always visible
137  - Time, date range, and namespace badges wrap properly
138  - Improved flex layout for better responsiveness
139
140## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY
141
142### UI Improvement
143- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly:
144  - Same dark theme styling (#1e1e1e background, #2c3e50 header)
145  - Same header layout with close button (×) in top-right corner
146  - Same input styling (dark inputs with green accent borders)
147  - Same footer with Cancel/Save buttons layout
148  - Same recurrence options box styling
149  - Consistent spacing, fonts, and colors throughout
150
151## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX
152
153### Bug Fix
154- **Fixed:** Description textarea now extends full width on mobile/phone view
155  - Reduced form padding from 12px to 8px on screens ≤480px
156  - Added explicit `width: 100%` and `box-sizing: border-box` to textarea
157  - Ensured all form inputs/selects use full available width on mobile
158
159## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION
160
161### Admin Panel Updates
162- **Enhanced Recurring Events Table:**
163  - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink)
164  - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026")
165  - Patterns now read from stored metadata when available, with smart fallback to detection
166
167- **Edit Recurring Series Dialog:**
168  - Full recurrence pattern editing (not just simple intervals)
169  - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly
170  - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected
171  - Monthly: Radio choice between "Day of month" or "Weekday pattern"
172  - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown)
173  - Pre-populates all fields from stored recurrence metadata
174  - Properly reschedules future events using new pattern
175
176- **Manage Series Dialog:**
177  - Updated summary to show date range
178  - Extend/trim/change pattern functions work with new patterns
179
180### Technical Updates
181- `findRecurringEvents()` captures all recurrence metadata from events
182- `formatRecurrencePattern()` generates human-readable pattern descriptions
183- `detectRecurrencePattern()` enhanced to detect more interval variations
184- `editRecurringSeries()` PHP handler processes new recurrence parameters
185- `generateRecurrenceDates()` creates dates matching complex patterns
186- Recurrence metadata preserved and updated across all event occurrences
187
188## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS
189
190### New Features
191- **Enhanced Recurring Event Options:**
192  - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months)
193  - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri)
194  - **Monthly options:**
195    - Day of month: Repeat on specific day (e.g., 15th of each month)
196    - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday)
197  - **Examples now possible:**
198    - Every 2 weeks on Monday and Thursday
199    - Every 3 months on the 15th
200    - Every other month on the 2nd Wednesday
201    - Every year on the same date
202    - Last Friday of every month
203
204### UI Changes
205- Redesigned recurring options section with bordered container
206- "Repeat every [N] [period]" input with interval number field
207- Day-of-week checkboxes for weekly recurrence
208- Radio buttons for monthly: "Day of month" vs "Weekday pattern"
209- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last)
210- Day dropdown (Sunday through Saturday)
211- Helper text for end date field
212
213### Technical Details
214- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay
215- Recurrence pattern stored in event data for reference
216- Maximum 365 occurrences (up from 100) to support daily events for a year
217- Smart date iteration for complex patterns
218
219## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING
220
221### New Feature
222- **Added:** Option to set itinerary default state (expanded or collapsed)
223  - New setting in Admin → Calendar → �� Sidebar Widget Settings
224  - "�� Itinerary Section" with two options:
225    - **Expanded** (default) - Show itinerary sections by default
226    - **Collapsed** - Hide itinerary sections by default (click bar to expand)
227  - Setting persists across page loads
228  - Arrow indicator and content state reflect the saved preference on page load
229
230## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY
231
232### New Feature
233- **Added:** Collapsible Itinerary bar in sidebar week view
234  - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar)
235  - Click to collapse/expand the Today, Tomorrow, and Important Events sections
236  - Arrow indicator shows expanded (▼) or collapsed (►) state
237  - Smooth animation when collapsing/expanding
238  - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar
239  - Selected day events remain visible whether itinerary is expanded or collapsed
240  - Shows "No upcoming events" message when there are no itinerary items
241
242### UI Layout (top to bottom)
2431. Header with clock/system stats
2442. +ADD EVENT bar
2453. Week grid (7 days)
2464. Selected day's events (appears when clicking a day)
2475. ITINERARY bar (click to collapse/expand)
2486. Today section (collapsible)
2497. Tomorrow section (collapsible)
2508. Important Events section (collapsible)
251
252## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS
253
254### Bug Fixes
255- **Fixed:** �� Events Manager showing inflated count (1195 instead of ~605)
256  - The `scanDirectoryForStats()` function was counting ALL entries in JSON files
257  - Now properly filters to only count date keys (`YYYY-MM-DD` format)
258  - Now validates events have `id` and `title` before counting
259  - Click "�� Rescan" to update the statistics with correct count
260
261## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS
262
263### Bug Fixes
264- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries
265  - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events
266  - Added date format validation (`YYYY-MM-DD`) to skip non-date keys
267  - Added validation to require `id` and `title` fields for events
268  - Applied fix to all event-reading functions:
269    - `getEventsByNamespace()` - main event listing
270    - `scanNamespaceRecursive()` - namespace scanning
271    - `searchEvents()` - event search
272    - `findEventsByTitle()` - title lookup
273    - `deleteRecurringSeries()` - recurring deletion
274    - `renameRecurringSeries()` - recurring rename
275    - Recurring events scanner
276    - Recurring cleanup function
277
278### Technical Details
279- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/`
280- Events must have non-empty `id` and `title` fields
281- All other entries in JSON files are now skipped
282
283## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG
284
285### Bug Fixes
286- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path
287- **Fixed:** "Could not clear log file" - added better error messages showing exact issue
288- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection
289- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.)
290
291## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING
292
293### Bug Fixes
294- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture
295- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly
296- **Fixed:** Better error messages when sync fails
297
298### Improvements
299- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally
300- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries)
301- **Improved:** Log viewer now shows full path to log file
302- **Improved:** Better pre-flight checks (directory creation, file permissions)
303- **Improved:** PHP binary path is now properly escaped
304
305### Crontab Update Required
306If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries:
307
308**Before (causes duplicates):**
309```
310*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1
311```
312
313**After (correct):**
314```
315*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php
316```
317
318The script automatically logs to `data/meta/calendar/sync.log`.
319
320## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT
321
322### Bug Fixes
323- **Fixed:** Sync log not showing output when running sync from admin panel
324  - Added `--verbose` flag to sync command so output is captured
325  - Sync output is now captured and written to the log file
326  - Log directory is created if it doesn't exist
327  - Better error handling if log directory isn't writable
328  - Command being executed is logged for debugging
329
330### Changes
331- Sync now runs in verbose mode when triggered from admin panel
332- All sync output (stdout/stderr) is written to the log file
333- Pre-flight check ensures log directory exists and is writable
334
335## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION
336
337### Bug Fix
338- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync
339  - The `$pluginDir` variable was missing from `runSync()` function
340  - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command
341  - Sync now properly changes to the plugin directory before executing
342
343## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS
344
345### Bug Fix
346- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given"
347  - Fixed in `scanDirectoryForStats()` (line 5453)
348  - Fixed in namespace delete function (line 4137)
349  - Fixed in export function (line 5516)
350  - Fixed in import function (line 5636)
351  - All locations now check `is_array()` before calling `count()`
352
353## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR
354
355### Bug Fix
356- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given"
357  - Added array type checks when iterating over calendar event data
358  - Protects against corrupted JSON data where event lists may not be arrays
359  - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()`
360
361## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS
362
363### Changed
364- **Improved:** Backup management now uses bulk selection and delete
365  - Added checkboxes next to each backup file
366  - Added "Select All" checkbox in the action bar
367  - Added "��️ Delete Selected" button (appears when backups are selected)
368  - Removed individual delete buttons from each row
369  - Shows count of selected backups
370  - Backups are deleted sequentially with visual feedback
371
372### UI
373- Clean action bar at top of backup table with selection controls
374- Selected count updates in real-time
375- Rows fade out smoothly when deleted
376
377## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION
378
379### Changed
380- **Improved:** Restore function now uses DokuWiki's Extension Manager API
381  - Uses `helper_plugin_extension_extension` for proper installation
382  - Handles permissions correctly through DokuWiki's standard plugin installation process
383  - Falls back to manual instructions if Extension Manager is not available
384
385### How It Works
386When you click "�� Restore" on a backup:
3871. The plugin loads DokuWiki's extension helper
3882. Calls `installFromLocal()` with the backup ZIP file
3893. DokuWiki's Extension Manager handles file extraction and installation
3904. This ensures proper permissions and follows DokuWiki standards
391
392### Fallback
393If the Extension Manager helper is not available, you'll be prompted to:
394- Download the backup ZIP
395- Go to Admin → Extension Manager → Install
396- Upload the ZIP file manually
397
398## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION
399
400### Removed
401- **Removed:** "Restore" button from backup management
402- **Removed:** `restoreBackup()` PHP method
403- **Removed:** `restoreBackup()` JavaScript function
404
405### Added
406- **Added:** Informational note in backup section explaining how to restore:
407  - Download the backup ZIP file
408  - Go to Admin → Extension Manager → Install
409  - Upload the ZIP file there
410  - DokuWiki's extension manager handles installation safely with proper permissions
411
412### Reason
413The restore function required write access to the plugin directory, which web servers typically don't have (and shouldn't have) for security reasons. Using DokuWiki's built-in Extension Manager is the safer and more reliable approach.
414
415## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS
416
417### Bug Fixes
418- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.)
419  - Added missing theme keys to `getWikiTemplateColors()` return array
420
421- **Fixed:** "Permission denied" errors for sync.log and sync_state.json
422  - Moved sync files from plugin directory to `data/meta/calendar/` (writable location)
423  - Updated sync_outlook.php, admin.php to use new paths
424  - sync_config.php remains in plugin directory (must be manually configured)
425
426- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives
427  - This ensures deletion works correctly when stored namespace differs from file location
428
429### Note on lang.php Permission Error
430If you see a permission error for lang/en/lang.php, this occurs when trying to restore/update the plugin via admin panel and the web server doesn't have write access to the plugin directory. This is normal security - update via command line or FTP instead.
431
432## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2)
433
434### Bug Fix
435- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces
436  - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events
437  - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('')
438  - This allows moving events FROM the default namespace TO any other namespace
439  - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace`
440
441## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS
442
443### Bug Fixes
444- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate
445  - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces
446  - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace
447
448- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace
449  - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace
450  - Now retrieves the calendar's original namespace from `container.dataset.namespace`
451  - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency
452
453## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES
454
455### Improved
456- Added `autocomplete="new-password"` to client secret input field
457- Added `autocomplete="email"` to user email input field
458- Added `autocomplete="off"` to client ID input field
459- Follows browser best practices for form inputs
460
461## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION
462
463### Bug Fix
464- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture"
465- Weather widget now uses Sacramento as the default location on page load
466- Geolocation is only requested when user **clicks** on the weather icon
467- Click the weather icon to get your local weather (browser will prompt for permission)
468- Weather icon shows tooltip "Click for local weather" and has pointer cursor
469
470## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR
471
472### Bug Fix
473- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error
474- Root cause: MutationObserver tried to observe `document.body` before DOM was ready
475- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer
476
477## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING
478
479### Bug Fix
480- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors
481- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js`
482- Changed `addAssets()` to load `calendar-main.js` directly
483- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism
484
485## Version 6.6.1 (2026-02-11) - SECURITY FIXES
486
487### Security
488- **Critical:** Removed `eval()` remote code execution vulnerability in config import
489- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint
490- **High:** Added CSRF token verification to all write operations (save, delete, toggle)
491- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions
492- **High:** Added admin privilege verification to AJAX admin routes
493
494### Improved
495- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB)
496- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format
497- **Input Validation:** Recurrence type whitelist, title/description length limits
498- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default)
499- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling
500- **Timezone:** Sync script now uses configured timezone instead of hardcoded value
501
502### Code Quality
503- Documented intentional switch fallthrough in `get_system_stats.php`
504- Standardized error response format
505
506## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS
507
508### Fixed
509- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`)
510- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents
511- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure
512
513### UI Change
514- **Namespace Explorer:** Cleanup status message now appears prominently at top of section
515- Previously status message was at bottom, easy to miss after cleanup operations
516
517## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON
518
519### Bug Fix
520- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action"
521- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method
522- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper
523- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php`
524
525### UI Change
526- Moved "�� Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar
527- Status messages still appear below the namespace explorer
528
529## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS
530
531### Bug Fix
532- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely
533- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string
534- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'`
535- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time
536- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors
537
538## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR
539
540### Bug Fix
541- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation
542- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code
543
544## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES
545
546### New Feature
547- "�� Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section
548- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog
549- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace
550- Removes parent namespace directories if they become empty after calendar folder removal
551- Root calendar directory is never removed
552- AJAX-powered with inline status showing results after cleanup
553- Page auto-reloads after 2 seconds to refresh the namespace explorer view
554- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()`
555
556## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE
557
558### Improved
559- "Trim All Past" button now does a dry-run count before showing the confirmation dialog
560- Confirmation shows exact count: "Found 47 past recurring events to remove"
561- If zero found, shows "No past recurring events found to remove" instead of confirm
562- PHP handler supports `dry_run` parameter that counts without deleting
563
564## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS
565
566### Bulk Action
567- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header
568- Removes ALL past occurrences (before today) from EVERY recurring series in one click
569- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched
570- Confirmation dialog required before execution
571- AJAX-powered with inline status showing count removed, then auto-rescans the table
572- Searches all calendar directories recursively
573
574## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES
575
576### Bug Fix
577- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field
578- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives
579- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively
580- Events matched by title AND namespace field (case-insensitive) for precise targeting
581- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2
582- New `findCalendarDirs()` helper method for recursive directory discovery
583
584## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG
585
586### Bug Fix
587- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals
588- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation
589- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts
590
591## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS
592
593### New "Manage" Button per Series
594- Orange "Manage" button opens a comprehensive management dialog for each recurring series
595
596### Extend Series
597- Add N new occurrences after the last event in the series
598- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly
599- New events copy title, time, color, namespace, and recurring flag from the last event
600
601### Trim Past Events
602- Remove all occurrences before a selected cutoff date
603- Confirmation required before deletion
604- Cleans up empty date keys and files automatically
605
606### Change Pattern
607- Respace future occurrences with a new interval
608- Past events are untouched; only future events are removed and re-created
609- First future event becomes the anchor date
610
611### Change Start Date
612- Shift ALL occurrences by the difference between old and new start date
613- Events are removed from old positions and re-created at new positions
614- Preserves spacing between all events
615
616### Pause/Resume
617- Pause: adds ⏸ prefix and paused flag to all future occurrences
618- Resume: removes ⏸ prefix and paused flag from all occurrences
619- Button toggles based on whether series is currently paused
620
621### Infrastructure
622- New shared `recurringAction()` JS helper for all AJAX management operations
623- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series
624- Status messages shown inline in the management dialog
625- Close button triggers automatic rescan to refresh the table
626
627## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC
628
629### Rescan Button
630- Green "�� Rescan" button added to the Recurring Events section header
631- AJAX-powered: rescans all calendar data and refreshes the table without page reload
632- Shows count of found series briefly after scan completes
633
634### Improved Detection Logic
635- Events with `recurring: true` flag are now detected first (grouped by `recurringId`)
636- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated
637- New "Source" column shows ��️ Flagged (has recurring flag) vs �� Detected (pattern match)
638- Median interval used for pattern detection instead of just first two dates (more robust)
639- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals
640- Empty/invalid titles and malformed date arrays are now skipped safely
641- Dates are deduplicated before counting (prevents inflated counts from multi-day events)
642- Nested namespace directories now scanned recursively
643- Results sorted alphabetically by title
644
645## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL
646
647### Version History Viewer
648- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme
649- Changelog parser now handles `###` subsection headers (rendered as green bold labels)
650- Plain `- ` bullet items now parsed and categorized under their subsection
651- Previously only `- **Type:** description` format was recognized
652
653### Current Release Button
654- Green "Current Release" button added between nav arrows
655- Jumps directly to the card matching the running version from plugin.info.txt
656- Running version card shows green "RUNNING" badge and thicker green border
657
658## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND
659
660### Fix
661- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`)
662- Previously used `--cell-bg` which appeared unthemed/white
663
664## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND
665
666### Fix
667- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header`
668
669## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL)
670
671### Wiki Theme Day Headers
672- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers`
673- Day header text uses `--text-primary` (template's `__text__` color)
674
675## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT
676
677### Fix
678- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5)
679- Subtle shadow instead of blue glow
680
681## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING
682
683### Fix
684- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left`
685- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch
686- Both the bar and header now use `background`, so Dark Reader maps them identically
687- Flex layout wrapper added for wiki theme sections
688- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7`
689
690## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT)
691
692### Fix
693- Simplified wiki section container — removed `wiki-section-container` class
694- Added `background` from `$themeStyles['bg']` to section container
695
696## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS
697
698### Wiki Theme Buttons
699- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text
700- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons
701
702### Wiki Theme Section Headers
703- Today: `__link__` background (accent/link color)
704- Tomorrow: `__background_alt__` background (alternate background)
705- Important: `__border__` background (border color)
706- Each section now has a distinct color from the template palette
707
708## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX
709
710### Fix
711- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand
712- Properly overrides the base rule which uses `border` shorthand
713- Hover state also uses full shorthand
714
715## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR
716
717### Fix
718- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border
719- Checked state fills with border color
720- Hover state uses border color
721- Applied to calendar, sidebar, and eventlist containers
722
723## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS
724
725### Fix
726- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color`
727- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers
728- Clicked-day panel header and section border-left also unlocked for wiki theme
729- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection
730
731## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES
732
733### Wiki Theme Color Remapping
734- `border` (accent color) now maps to template's `__border__` instead of `__link__`
735- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable
736- `text_bright` still maps to `__link__` for link text and accent text
737- Section headers all use the same `__border__` color for consistent appearance
738- Updated COLOR_SCHEME mapping documentation
739
740## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR
741
742### Fix
743- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white
744- Clicked-day panel header text also uses template text color for wiki theme
745- Professional theme remains white text on blue headers
746
747## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST
748
749### Bug Fix
750- Added `$renderer->nocache()` to the render function
751- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited
752- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt`
753
754## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING
755
756### {{eventlist}} Theme Support
757- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection
758- Dark themes get themed border + glow, light themes get subtle border
759- Container background set from `$themeStyles['bg']` with `!important`
760
761### Eventlist CSS Theme Rules (all 3 dark themes)
762- Title, header, time, date, body, links, strong, code, namespace badge, empty state
763- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important`
764- Item borders, section backgrounds, code block backgrounds
765- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar
766
767## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING
768
769### Dark Reader Browser Extension Compatibility
770All dark themes (Matrix, Purple, Pink) now render correctly when the Dark Reader browser extension is active. The approach uses targeted inline `!important` styles and `-webkit-text-fill-color` overrides — no page-wide locks, no blanket CSS resets, no filter manipulation.
771
772**Protected elements:**
773- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color
774- Clicked-day panel header — background, text color, close button
775- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color
776- Event titles, meta, descriptions — color with !important via CSS
777- Day numbers, nav buttons, calendar day headers — color with !important via CSS
778- System status bars — inline background !important on tracks and fills
779- System tooltips — background, border-color, text color all set via setProperty with !important
780- Section left border bars — border-left with !important
781- Event color indicator bars — border-left-color with !important
782- Sidebar section event text (Purple and Pink themes)
783
784### Complete CSS Variable Audit (41 conversions in v6.1.1)
785- All remaining hardcoded colors in style.css converted to CSS variable references
786- Calendar borders, text colors, backgrounds, input focus shadows, accent borders
787- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks)
788
789### Semantic Color System
790- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light`
791- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light`
792- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget)
793- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded
794
795### Section Headers Fully Themed
796- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple
797- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink
798- Professional: blue shades, Wiki: template-derived colors
799- Dark theme headers use dark background color for text contrast
800
801### Pink Theme Enhancements
802- **Heart today indicator** — day number displayed inside a ♥ with hot pink glow, centered via inline-flex, `pink-heart-beat` animation with realistic double-beat pulse
803- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click
804- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow
805
806### All Theme Checkbox Theming
807- Matrix: bright green border + green glow, Purple: purple border + purple glow
808- Pink: hot pink border + pink glow (with enhanced ambient effect)
809- Hover scales 1.1x with intensified glow on all themes
810- Checked state fills with theme accent color + outer glow
811
812### System Tooltips Themed
813- Both tooltip functions use theme-derived colors from `$themeStyles`
814- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary`
815- Background from `$themeStyles['bg']`, divider borders use theme accent colors
816- All properties set with `style.setProperty(prop, value, "important")`
817
818### Namespace Filter Badge Cleanup
819- Removed inline namespace badge from event side panel header
820- Filter indicator bar ("Filtering: namespace ✕") retained and working
821- AJAX-based namespace filtering fully functional via onclick handlers
822
823## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES
824
825### Today Indicator
826- **Added:** Today's day number now shows as a filled circle with theme accent color background and contrasting text (like Google Calendar's today indicator)
827- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main`
828- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default
829
830### Button Hover/Click Theming
831- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes
832- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect
833- **Fixed:** Cal nav buttons (‹/›), Today button, +Add Event button, panel nav/today/add buttons, dialog Save/Cancel buttons, month picker Go/Cancel buttons, popup + Add Event button — ALL now have visible themed hover/click feedback with shadow
834- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes
835
836### Checkboxes Themed
837- **Added:** Custom checkbox styling for `.task-checkbox` — uses `appearance: none` with themed border (`--border-main`), hover glow, and filled accent background when checked with ✓ mark
838- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring
839
840### Form Input Text
841- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes
842- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim`
843
844## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING
845
846### Form Input Text Fix
847- **Fixed:** Form input text (`input-sleek`, `textarea-sleek`, `select`) had no `color` property — browser defaulted to black, invisible on dark themes. Now uses `var(--text-primary)`.
848- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas
849
850### Button & Cell Hover Theming
851- **Added:** Calendar day cells (`.cal-day`) now have a themed hover effect — background shifts to `--cell-today-bg` with an inset border glow using `--border-main`
852- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change
853- **Added:** Active (click) state for nav/today buttons with scale-down feedback
854- **Improved:** Month picker hover now also shows a subtle theme shadow
855
856### Glow Reduced to 1px for Matrix/Purple
857- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates
858- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px
859- Weather text glow reduced to 1px, clock to 2px
860- Pink remains at 2px (barely noticeable)
861
862## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN
863
864### Links Themed
865- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright`
866- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors
867- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars
868- **Fixed:** Simple event list body links/strong/code all themed
869
870### Text Glow Consistency
871- **Added:** Subtle `text-shadow: 0 0 2px` glow on event titles, meta, and descriptions for all three dark themes (matrix, purple, pink) in the main calendar and event panel
872- **Added:** Subtle link glow on dark themes
873- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles
874
875### Pink Glow Toned Down
876- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25`
877- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px
878- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px
879- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px
880- **Reduced:** Today hover glow from 10px+15px to 5px+8px
881- **Reduced:** Event item glow from 2px/5px to 1px/3px
882- **Reduced:** Calendar container glow from 8px to 5px
883
884### Other
885- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars
886
887## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING
888
889- **Fixed:** Namespace badges (`.namespace-badge`, `.event-namespace-badge`, `.panel-ns-badge`, standalone header badge) — all now use theme accent colors instead of hardcoded green/blue
890- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple
891- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent
892- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars)
893- **Fixed:** Conflict tooltip body items use themed text and border colors
894- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel)
895- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background
896- **Fixed:** Inline search input border uses `--border-color`
897- **Fixed:** Event list header border uses `--border-color`
898
899## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING
900
901- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary`
902- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright`
903- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars
904- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg`
905- **Fixed:** Scrollbar track/thumb colors now use theme vars
906- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed
907- **Fixed:** Panel standalone month picker hover and namespace badge — themed
908- **Fixed:** Calendar header border-bottom — now uses `--border-color`
909
910## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL
911
912- **Added:** Theme-colored border and glow for calendar container on matrix, purple, and pink themes — matches the sidebar widget's `2px solid` + `box-shadow` glow style. Professional and wiki themes unchanged (keep subtle 1px gray border).
913- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors
914- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars
915- **Themed:** Panel standalone header background and border
916
917## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING
918
919- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables
920- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors
921- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed
922- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks
923- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars
924- **How it works:** `propagateThemeVars()` copies CSS variables from the calendar container to dialogs/popups (which are `position:fixed` or appended to `document.body`). All CSS selectors now reference these variables with fallbacks for graceful degradation.
925
926## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB
927
928- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections)
929- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections
930- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save
931- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value
932
933## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX
934
935- **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as calendar day cells (58px instead of 22px). Firefox ignores `max-height` on `<th>` table cells per CSS spec. Replaced `<thead><tr><th>` with a CSS grid `<div>` outside the table, making header height fully independent of table cell sizing. Works consistently across Chrome, Firefox, Safari, and Edge.
936
937## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX
938
939- **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions (`renderCompactCalendar`, `renderEventPanelOnly`, `renderSidebarWidget`) were ignoring the syntax parameter and always reading the admin global default via `getSidebarTheme()`
940- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller
941- **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpanel theme=professional}}` all correctly apply the specified theme. The admin-configured default is used as fallback only when no `theme=` parameter is present.
942
943
944## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
945
946- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed
947- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified
948- **Audited:** style.css (3,218 lines) — balanced braces confirmed
949- **Audited:** All admin manage tab action handlers verified functional (13 actions)
950- **New:** Fresh README.md for GitHub with complete documentation
951- **Includes all v5.5.x fixes:**
952  - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
953  - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
954  - Conflict badges on past events after AJAX navigation
955  - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal
956
957## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
958
959- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers
960- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0`
961- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
962- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
963- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared
964- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check
965- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
966- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
967- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
968- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache
969- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
970- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
971- **Removed:** Stale "NEW!" comment from Events Manager section
972
973## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
974
975- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API
976- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status)
977- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run
978- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
979- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total)
980- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed
981- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important)
982- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
983- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
984- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes)
985
986## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
987
988- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys
989- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
990- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background
991- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files)
992- **Changed:** Wiki theme section header text now white for readability on colored backgrounds
993- **Changed:** Week grid JS theme colors now use actual $themeStyles values
994
995## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
996
997- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch)
998
999## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
1000
1001- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner
1002- **Fixed:** Week grid conflict tooltips also fixed (same issue)
1003- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data
1004- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip)
1005
1006## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
1007
1008- **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missing onclick="togglePastEventExpand(this)" handler that the JS-rebuilt version had)
1009
1010## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
1011
1012- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body)
1013- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string
1014
1015## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
1016
1017- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping
1018- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON)
1019- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
1020- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
1021
1022## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
1023
1024- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
1025- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads
1026- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-)
1027- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
1028- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds
1029- **Added:** ESC key now also closes day popups and conflict tooltips
1030- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
1031
1032## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
1033
1034- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
1035- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
1036- **Refactored:** style.css is now the single source of truth for all visual styling
1037- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
1038- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget)
1039- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
1040- **Added:** CSS variable injection for {{eventlist panel}} containers
1041- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
1042- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position
1043- **Added:** Wiki template mapping reads __link__ as accent color from style.ini
1044- **Added:** Detailed CSS variable reference table in style.css header comment
1045- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
1046- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
1047- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
1048- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
1049- **Removed:** $isWikiTheme branching from PHP render path
1050
1051## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
1052
1053### �� Added: Hearts in Explosions!
1054- **Added:** 8-12 pink hearts in each click explosion
1055- **Added:** Random sizes (12-28px) and directions
1056- **Result:** Extra love in every click! ��
1057
1058### �� Fixed: Background CSS Property for Dark Mode Readers
1059- **Fixed:** Added `background: transparent` to CSS (was completely removed)
1060- **Fixed:** Now CSS readers can detect and modify background property
1061- **Why:** Inline styles override transparent, but CSS readers can now see the property
1062- **Result:** Dark mode plugins can now change calendar backgrounds!
1063
1064### The CSS Problem
1065
1066**Why backgrounds weren't changing with dark mode readers**:
1067
1068**Before (v5.3.5)**:
1069```css
1070.calendar-compact-grid tbody td {
1071    /* background removed - set via inline style */
1072    border: 1px solid...
1073}
1074```
1075
1076**Problem**: CSS property doesn't exist!
1077- Dark mode readers look for `background` property in CSS
1078- Can't override what doesn't exist
1079- Inline styles work, but readers can't modify them
1080
1081**After (v5.3.6)**:
1082```css
1083.calendar-compact-grid tbody td {
1084    background: transparent;  /* Now exists! */
1085    border: 1px solid...
1086}
1087```
1088
1089**Solution**:
1090- Property exists in CSS
1091- Dark mode readers can override it
1092- Inline styles still override transparent
1093- Everyone wins!
1094
1095### What's Fixed
1096
1097**Elements now have background property**:
1098- `.calendar-compact-grid tbody td` ✓
1099- `.calendar-compact-grid tbody td:hover` ✓
1100- `.event-compact-item` ✓
1101- `.event-compact-item:hover` ✓
1102
1103**How it works**:
11041. CSS sets `background: transparent` (default)
11052. Inline styles set actual color (overrides transparent)
11063. Dark mode readers can override CSS property
11074. Works for everyone!
1108
1109### Hearts in Explosion
1110
1111**Click anywhere → Hearts explode!**
1112
1113**Heart details**:
1114- Count: 8-12 per explosion (random)
1115- Size: 12-28px (random variety)
1116- Emoji: �� (pink heart)
1117- Direction: Random 360°
1118- Speed: 60-140px travel
1119- Duration: 0.8-1.2s
1120- z-index: 9999999 (always visible)
1121
1122**Combined with**:
1123- 25 glowing particles
1124- 40 pixel sparkles
1125- Bright flash
1126- **Total: 73-77 elements!**
1127
1128### Visual Result
1129
1130**Click explosion**:
1131```
1132    �� ✦ • ✦ ��
1133  �� •         • ��
1134✦  •     ��!     •  ✦
1135  �� •         • ��
1136    �� ✦ • ✦ ��
1137
1138Hearts + Particles + Pixels!
1139```
1140
1141**Dark mode now works**:
1142```css
1143/* Dark mode reader can now do this: */
1144.calendar-compact-grid tbody td {
1145    background: #000 !important;  /* Works! */
1146}
1147```
1148
1149### Why Transparent Works
1150
1151**CSS Cascade**:
11521. CSS: `background: transparent` (lowest priority)
11532. Inline style: `background: #f5f5f5` (overrides CSS)
11543. Dark mode CSS: `background: #000 !important` (overrides inline)
1155
1156**Perfect solution!** ✓
1157
1158## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
1159
1160### �� Fixed: Particles Now Appear Above All Dialogs!
1161- **Fixed:** Increased z-index to 9999999 for all particles
1162- **Fixed:** Particles now visible above event dialogs, month picker, etc.
1163- **Result:** Cursor effects and explosions always visible!
1164
1165### The Z-Index Problem
1166
1167**Before (v5.3.4)**:
1168- Particles: z-index 9999
1169- Dialogs: z-index 10000-999999
1170- **Particles hidden behind dialogs!**
1171
1172**After (v5.3.5)**:
1173- Particles: z-index 9999999
1174- Trail: z-index 9999998
1175- Pixels: z-index 9999997
1176- **Particles ALWAYS on top!**
1177
1178### What's Fixed
1179
1180✅ **Main particles** (explosion orbs)
1181✅ **Cursor trail** (glowing dots)
1182✅ **Pixel sparkles** (tiny bright stars)
1183✅ **Flash effect** (click burst)
1184
1185**All now appear above**:
1186- Event dialog popups
1187- Month picker
1188- Day popups
1189- Any modal overlays
1190
1191### Visual Result
1192
1193**Moving cursor over dialog**:
1194```
1195┌─────────────────────┐
1196│  Event Dialog       │
1197│  ✦ • ✦             │  ← Sparkles visible!
1198│    →  ✦             │  ← Cursor trail visible!
1199│  • ✦ •              │
1200└─────────────────────┘
1201```
1202
1203**Clicking on dialog**:
1204```
1205┌─────────────────────┐
1206│  ✦ • ✦ • ✦         │
1207│ •     ��!     •    │  ← Explosion visible!
1208│  ✦ • ✦ • ✦         │
1209└─────────────────────┘
1210```
1211
1212**Perfect visibility everywhere!** ✨
1213
1214## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
1215
1216### �� Fixed: Month Picker Now Themed!
1217- **Fixed:** Jump to Month dialog now uses theme colors
1218- **Fixed:** Dialog background, borders, text all themed
1219- **Fixed:** Select dropdowns use theme colors
1220- **Fixed:** Buttons use theme accent colors
1221- **Result:** Month picker matches calendar theme!
1222
1223### �� Fixed: Cursor Effects Work in Dialogs!
1224- **Fixed:** Cursor trail now works when hovering over dialogs
1225- **Fixed:** Click explosions work when clicking inside dialogs
1226- **Technical:** Changed to capture phase event listeners
1227- **Result:** Effects work EVERYWHERE now!
1228
1229### Month Picker Theming
1230
1231**Before (v5.3.3)**:
1232- White background (hardcoded)
1233- Black text (hardcoded)
1234- No theme integration
1235- Looked out of place
1236
1237**After (v5.3.4)**:
1238- Dialog background: `theme.bg`
1239- Dialog border: `theme.border`
1240- Text color: `theme.text_primary`
1241- Dropdowns: `theme.cell_bg` + `theme.text_primary`
1242- Cancel button: `theme.cell_bg`
1243- Go button: `theme.border` (accent color)
1244
1245**Fully integrated!** ✅
1246
1247---
1248
1249### Theme Examples
1250
1251**Matrix Theme**:
1252```
1253┌─────────────────────────┐
1254│ Jump to Month           │ ← Dark bg, green border
1255│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
1256│ [Cancel] [Go]           │ ← Green "Go" button
1257└─────────────────────────┘
1258```
1259
1260**Pink Theme**:
1261```
1262┌─────────────────────────┐
1263│ Jump to Month           │ ← Dark bg, pink border
1264│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
1265│ [Cancel] [Go]           │ ← Pink "Go" button
1266└─────────────────────────┘
1267With sparkle effects! ✨
1268```
1269
1270**Professional Theme**:
1271```
1272┌─────────────────────────┐
1273│ Jump to Month           │ ← Clean bg, blue border
1274│ [February ▼] [2026 ▼]  │ ← Clean dropdowns
1275│ [Cancel] [Go]           │ ← Blue "Go" button
1276└─────────────────────────┘
1277```
1278
1279---
1280
1281### Dialog Cursor Fix
1282
1283**The Problem**:
1284Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects!
1285
1286**The Solution**:
1287Use **capture phase** event listeners:
1288```javascript
1289// Before (bubbling phase)
1290document.addEventListener('click', handler)
1291
1292// After (capture phase)
1293document.addEventListener('click', handler, true)
12941295                                   Capture phase!
1296```
1297
1298**Capture phase runs BEFORE stopPropagation!**
1299
1300---
1301
1302### Now Works Everywhere
1303
1304✅ **Calendar area**
1305✅ **Event dialogs**
1306✅ **Month picker dialog**
1307✅ **Day popup dialogs**
1308✅ **Anywhere on screen**
1309
1310**No more blocked effects!** ��
1311
1312---
1313
1314### Technical Details
1315
1316**Event phases**:
1317```
13181. Capture phase   ← We listen here now!
13192. Target phase
13203. Bubbling phase  ← stopPropagation blocks this
1321```
1322
1323**By using capture phase**:
1324- Events caught before stopPropagation
1325- Works in all dialogs
1326- No conflicts with dialog logic
1327
1328---
1329
1330### All Dialogs Checked
1331
1332✅ **Month picker** - Now themed!
1333✅ **Event dialog** - Already themed
1334✅ **Day popup** - Already themed
1335
1336**Everything consistent!** ��
1337
1338---
1339
1340## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
1341
1342### ✨ Added: Bright Neon Pixel Sparkles Everywhere!
1343- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
1344- **Added:** 40 pixel sparkles in click explosions
1345- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
1346- **Result:** Maximum sparkle effect! ��
1347
1348### Tiny Pixel Sparkles
1349
1350**3-6 tiny bright pixels appear with each cursor movement!**
1351
1352**Characteristics**:
1353- Size: 1-2px (single pixel appearance!)
1354- Colors: Bright neon whites and pinks
1355  - Pure white (#fff) - 40% chance
1356  - Hot pink (#ff1493)
1357  - Pink (#ff69b4)
1358  - Light pink (#ffb6c1)
1359  - Soft pink (#ff85c1)
1360- Glow: Triple-layer shadow (intense!)
1361- Spawn: Random 30px radius around cursor
1362- Animations:
1363  - 50% twinkle in place
1364  - 50% float upward
1365
1366**Creates a cloud of sparkles around your cursor!**
1367
1368---
1369
1370### Click Explosion Enhanced
1371
1372**Now with 40 EXTRA pixel sparkles!**
1373
1374**Click anywhere → BIG BOOM**:
1375- 25 main glowing particles (6-10px)
1376- **40 tiny pixel sparkles (1-2px)** ← NEW!
1377- Bright white flash
1378- Total: 65+ visual elements!
1379
1380**Pixel sparkles in explosion**:
1381- Shoot outward in all directions
1382- Random distances (30-110px)
1383- Multiple bright colors
1384- Some twinkle, some explode
1385- Creates stellar effect!
1386
1387---
1388
1389### Entire Screen Coverage
1390
1391**Effects now work EVERYWHERE!**
1392
1393**Before (v5.3.2)**:
1394- Only inside calendar viewport
1395- Limited to calendar area
1396
1397**After (v5.3.3)**:
1398- Works on entire screen! ✓
1399- Cursor trail follows everywhere
1400- Click explosions anywhere
1401- Used `position: fixed` + `clientX/Y`
1402
1403**Move anywhere on the page for sparkles!**
1404
1405---
1406
1407### Visual Effect
1408
1409**Cursor movement**:
1410```
1411    • ✦ •       ← Tiny pixels
1412  •   ✦   •     ← Glowing trail
1413✦  •  →  •  ✦   ← Cursor
1414  •   ✦   •     ← Mixed sizes
1415    • ✦ •       ← Sparkle cloud
1416```
1417
1418**Click explosion**:
1419```
1420    ✦ • ✦ • ✦
1421  ✦ •         • ✦
1422✦  •    ��!    •  ✦
1423  ✦ •         • ✦
1424    ✦ • ✦ • ✦
1425
142665+ particles total!
1427```
1428
1429---
1430
1431### Sparkle Details
1432
1433**Trail Pixels** (3-6 per movement):
1434- Size: 1-2px
1435- Spawn rate: Every 40ms
1436- Spread: 30px radius
1437- Duration: 0.6-0.8s
1438- 50% twinkle, 50% float
1439
1440**Explosion Pixels** (40 total):
1441- Size: 1-3px
1442- Spread: 30-110px radius
1443- Duration: 0.4-0.8s
1444- All directions
1445- Intense glow
1446
1447**Main Particles** (25 total):
1448- Size: 4-10px
1449- Spread: 50-150px
1450- Full color palette
1451- Original firework effect
1452
1453---
1454
1455### Color Distribution
1456
1457**Pixel sparkles favor white**:
1458- 40% pure white (#fff) - brightest!
1459- 60% pink shades - variety
1460
1461**Creates brilliant sparkle effect!**
1462
1463---
1464
1465### Performance
1466
1467**Still optimized**:
1468- Trail: 30ms throttle
1469- Pixels: 40ms throttle
1470- Auto-cleanup
1471- Hardware accelerated
1472- Smooth 60fps
1473
1474**Lots of sparkles, zero lag!**
1475
1476---
1477
1478### Full-Screen Magic
1479
1480**Pink theme calendar detected**:
1481```javascript
1482if (pink calendar exists) {
1483    Enable effects for ENTIRE SCREEN
1484    Not just calendar area
1485}
1486```
1487
1488**Works everywhere on page!** ✨
1489
1490---
1491
1492## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
1493
1494### �� Changed: Glowing Pink Particles Instead of Emoji Sparkles!
1495- **Removed:** Emoji sparkle images (✨)
1496- **Added:** Glowing pink particle trail following cursor
1497- **Added:** FIREWORKS explosion on click!
1498- **Result:** Beautiful glowing effects, not emoji!
1499
1500### Glowing Cursor Trail
1501
1502**Pink glowing dots follow your cursor!**
1503- Small glowing pink orbs (8px)
1504- Radial gradient glow effect
1505- Multiple box-shadows for depth
1506- Fade out smoothly (0.5s)
1507- Throttled to 30ms for smoothness
1508
1509```
1510    •  •
1511  •  →  •   ← Your cursor
1512    •  •
1513```
1514
1515**Not emoji - actual glowing particles!**
1516
1517---
1518
1519### Click Fireworks! ��
1520
1521**Click anywhere on the calendar → BOOM!**
1522
1523**20 pink particles explode outward!**
1524- Radial burst pattern (360° coverage)
1525- Random speeds (50-150px travel)
1526- 4 shades of pink:
1527  - Hot pink (#ff1493)
1528  - Pink (#ff69b4)
1529  - Light pink (#ff85c1)
1530  - Very light pink (#ffc0cb)
1531- Random sizes (4-10px)
1532- Individual glowing halos
1533- Smooth explosion animation
1534
1535**Plus a bright flash at click point!**
1536- 30px radius glow
1537- Intense pink flash
1538- Fades quickly (0.3s)
1539
1540---
1541
1542### Visual Effect
1543
1544**Cursor movement**:
1545```
15461547      •  •  •
1548   •     →     •  ← Glowing trail
1549      •  •  •
15501551```
1552
1553**Click explosion**:
1554```
1555         •  •  •
1556      •           •
1557   •      BOOM!      •  ← 20 particles
1558      •           •
1559         •  •  •
1560```
1561
1562**All particles glow with pink halos!**
1563
1564---
1565
1566### Particle Details
1567
1568**Trail Particles**:
1569- Size: 8x8px
1570- Color: Pink radial gradient
1571- Shadow: 10px + 20px glow layers
1572- Duration: 0.5s fade
1573- Rate: 30ms throttle
1574
1575**Explosion Particles**:
1576- Size: 4-10px (random)
1577- Colors: 4 pink shades (random)
1578- Shadow: 10px + 20px glow (matches color)
1579- Duration: 0.6-1.0s (random)
1580- Pattern: Perfect circle burst
1581
1582**Flash Effect**:
1583- Size: 30x30px
1584- Color: Bright hot pink
1585- Shadow: 30px + 50px mega-glow
1586- Duration: 0.3s instant fade
1587
1588---
1589
1590### Performance
1591
1592**Optimized for smoothness**:
1593- Trail throttled to 30ms
1594- Auto-cleanup after animations
1595- CSS hardware acceleration
1596- No memory leaks
1597- Smooth 60fps
1598
1599**Won't slow you down!**
1600
1601---
1602
1603### Comparison
1604
1605**Before (v5.3.1)**:
1606- ✨ Emoji sparkle images
1607- Static unicode characters
1608- Limited visual impact
1609
1610**After (v5.3.2)**:
1611- �� Glowing pink particles
1612- Radial gradients + shadows
1613- Beautiful firework explosions
1614- Much more impressive!
1615
1616---
1617
1618### Only Pink Theme
1619
1620**These effects only appear**:
1621- On `.calendar-theme-pink` elements
1622- Other themes unaffected
1623- Pure pink magic! ��
1624
1625---
1626
1627## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
1628
1629### ✨ Added: MySpace-Style Sparkle Trail!
1630- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
1631- **Toned down:** Reduced glow effects for better taste
1632- **Added:** Sparkles appear on cell hover
1633- **Added:** Sparkles on event hover (left and right sides!)
1634- **Added:** Sparkles on today's cell corners
1635- **Added:** Sparkles on navigation buttons
1636- **Added:** Sparkles in calendar header
1637- **Result:** Pure nostalgic MySpace magic! ✨
1638
1639### MySpace Sparkle Cursor Trail
1640
1641**The classic effect from 2006!**
1642- Sparkles follow your cursor as you move
1643- Random sizes (12-22px)
1644- Random slight offsets for natural feel
1645- Float up and fade out animation
1646- Throttled to 50ms (smooth, not laggy)
1647- Only on pink theme calendars
1648
1649```
16501651  ✨    ✨
1652✨   →   ✨  (cursor trail)
1653  ✨    ✨
16541655```
1656
1657**Pure nostalgia!**
1658
1659---
1660
1661### Sparkles Everywhere
1662
1663**Calendar cells**:
1664- Hover over any day → ✨ floats up
1665- Smooth 1.5s animation
1666- Centered sparkle
1667
1668**Event items**:
1669- Hover → ✨ on left side
1670- Hover → ✨ on right side
1671- Staggered animations (0.4s delay)
1672- Continuous twinkling
1673
1674**Today's cell**:
1675- ✨ in top-right corner (continuous)
1676- ✨ in bottom-left corner (offset timing)
1677- Always sparkling!
1678
1679**Navigation buttons**:
1680- Hover on < or > → ✨ appears top-right
1681- One-time float animation
1682
1683**Calendar header**:
1684- ✨ on left side (continuous)
1685- ✨ on right side (offset 1s)
1686- Always twinkling
1687
1688---
1689
1690### Toned Down Glows
1691
1692**Before (v5.3.0)**: TOO MUCH GLOW!
1693- 50px shadows
1694- 4-layer effects
1695- Overwhelming
1696
1697**After (v5.3.1)**: Just right!
1698- 8-15px max shadows (subtle)
1699- 2-layer effects
1700- Professional with personality
1701
1702**Glow reductions**:
1703- Today shimmer: 35px → 12px
1704- Today hover: 50px → 15px
1705- Event glow: 18px → 6px
1706- Badge pulse: 25px → 8px
1707- Container glow: 20px → 8px
1708
1709**Much more tasteful!**
1710
1711---
1712
1713### Sparkle Animations
1714
1715**sparkle-twinkle** (0.8s):
1716```
1717Opacity: 0 → 1 → 1 → 0
1718Scale: 0 → 1 → 1 → 0
1719Rotation: 0° → 180° → 360°
1720```
1721
1722**sparkle-float** (1.5s):
1723```
1724Moves up: 0px → -50px
1725Opacity: 0 → 1 → 1 → 0
1726Scale: 0 → 1 → 0.8 → 0
1727```
1728
1729**Pure MySpace magic!** ✨
1730
1731---
1732
1733### Where Sparkles Appear
1734
1735✅ **Cursor trail** (continuous while moving)
1736✅ **Calendar cells** (on hover)
1737✅ **Event items** (on hover, left + right)
1738✅ **Today's cell** (continuous, corners)
1739✅ **Navigation buttons** (on hover)
1740✅ **Calendar header** (continuous, sides)
1741
1742**Sparkles EVERYWHERE!** ✨✨✨
1743
1744---
1745
1746### Performance
1747
1748**Cursor trail**:
1749- Throttled to 50ms
1750- Auto-cleanup after 1s
1751- No memory leaks
1752- Smooth 60fps
1753
1754**CSS animations**:
1755- Hardware accelerated
1756- No JavaScript overhead (except cursor)
1757- Efficient transforms
1758
1759**Won't slow down your browser!**
1760
1761---
1762
1763### Pure Nostalgia
1764
1765**Remember MySpace profiles?**
1766- Glitter graphics ✨
1767- Sparkle cursors ✨
1768- Auto-play music �� (ok, we didn't add that)
1769- Animated GIF backgrounds
1770- Comic Sans everywhere
1771
1772**We brought back the sparkles!** ✨
1773
1774---
1775
1776### Theme Comparison
1777
1778**Other themes**: Professional and clean
1779**Pink theme**: ✨ SPARKLES EVERYWHERE ✨
1780
1781**Only pink theme gets the magic!**
1782
1783---
1784
1785## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
1786
1787### �� Added: Pink Theme Gets BLING!
1788- **Added:** Shimmering animation for today's cell
1789- **Added:** Sparkling text effect on today's date
1790- **Added:** Glowing pulse for event bars
1791- **Added:** Gradient shimmer on headers
1792- **Added:** Extra glow on hover effects
1793- **Added:** Pulsing urgent badge for past due items
1794- **Result:** Pink theme is now FABULOUS! ✨
1795
1796### Shimmer Effects
1797
1798**Today's Cell**:
1799- Continuous shimmer animation (2 second loop)
1800- Multi-layer glow effect
1801- Pink and hot pink overlapping shadows
1802- Pulses from subtle to intense
1803- Extra sparkle on hover
1804
1805**Today's Date Number**:
1806- Sparkle animation (1.5 second loop)
1807- Text shadow glow effect
1808- Slight scale pulse (100% → 105%)
1809- Pink to hot pink shadow transition
1810
1811### Glow Effects
1812
1813**Event Bars**:
1814- Continuous glow pulse (2 second loop)
1815- Uses event's own color
1816- Adds pink accent glow layer
1817- Creates depth and dimension
1818
1819**Event Items**:
1820- Subtle base glow
1821- Enhanced glow on hover
1822- Slight slide animation on hover
1823- Professional yet playful
1824
1825### Gradient Shimmer
1826
1827**Headers**:
1828- Animated gradient background
1829- 3-color pink gradient flow
1830- Smooth 3-second animation
1831- Creates movement and life
1832- Applies to calendar header and event list header
1833
1834### Badge Effects
1835
1836**TODAY Badge**:
1837- Sparkle animation
1838- Synchronized with today's date
1839- Extra prominence
1840
1841**PAST DUE Badge**:
1842- Urgent pulsing effect (1 second loop)
1843- Orange glow intensifies
1844- Draws attention to urgent items
1845- Faster pulse for urgency
1846
1847### Container Bling
1848
1849**Main Container**:
1850- Multi-layer pink glow
1851- Soft outer shadow
1852- Creates floating effect
1853- Subtle but elegant
1854
1855### Animation Details
1856
1857**pink-shimmer** (2s loop):
1858```
1859Start: Subtle 5px glow
1860Peak:  Intense 35px multi-layer glow
1861End:   Back to subtle
1862```
1863
1864**pink-sparkle** (1.5s loop):
1865```
1866Start: Base glow + scale 1.0
1867Peak:  Intense glow + scale 1.05
1868End:   Back to base
1869```
1870
1871**pink-glow-pulse** (2s loop):
1872```
1873Start: Small glow (3px, 6px)
1874Peak:  Large glow (6px, 12px, 18px)
1875End:   Back to small
1876```
1877
1878**pink-gradient-shimmer** (3s loop):
1879```
1880Gradient flows across element
1881Creates wave effect
1882Smooth continuous motion
1883```
1884
1885**pink-pulse-urgent** (1s loop - faster!):
1886```
1887Start: Orange glow 5px
1888Peak:  Orange glow 25px (intense)
1889End:   Back to 5px
1890```
1891
1892### Visual Experience
1893
1894**Today's Cell**:
1895```
1896┌──┬──┬──┬──┬──┬──┬──┐
1897│  │  │ ✨ │  │  │  │  │  ← Shimmers constantly
1898│  │  │[9]│  │  │  │  │  ← Sparkles
1899│  │  │ ✨ │  │  │  │  │  ← Glows and pulses
1900└──┴──┴──┴──┴──┴──┴──┘
1901```
1902
1903**Event Bars**:
1904```
1905━━━━━━━  ← Glows and pulses
1906━━━━━━━  ← Each bar animated
1907━━━━━━━  ← Creates rhythm
1908```
1909
1910**Headers**:
1911```
1912╔═════════════════════╗
1913║ ~~~~~~~~~~ ║  ← Gradient flows
1914║   February 2026     ║  ← Shimmer effect
1915╚═════════════════════╝
1916```
1917
1918### Theme Comparison
1919
1920**Before (v5.2.8)**:
1921- Pink colors
1922- Static elements
1923- Standard shadows
1924
1925**After (v5.3.0)**:
1926- Pink colors ✓
1927- Animated shimmer ✨
1928- Sparkling effects ��
1929- Glowing pulses ✨
1930- Moving gradients ��
1931- BLING! ��
1932
1933### Performance
1934
1935**All animations**:
1936- Hardware accelerated (transform, opacity)
1937- Smooth 60fps
1938- CSS animations (no JavaScript)
1939- Minimal CPU usage
1940- Disabled in reduced-motion preference
1941
1942### Only for Pink Theme
1943
1944**Effects only apply when**:
1945```css
1946.calendar-theme-pink
1947```
1948
1949**Other themes unaffected**:
1950- Matrix stays Matrix
1951- Professional stays Professional
1952- Purple stays Purple
1953- Wiki stays clean
1954
1955**Pink gets all the bling!** ✨��
1956
1957### Use Cases
1958
1959**Perfect for**:
1960- Celebrating occasions
1961- Fun team calendars
1962- Personal style expression
1963- Standing out
1964- Making calendar time fabulous
1965
1966**Not just pink, but BLING pink!** ��✨
1967
1968## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
1969
1970### �� Fixed: Today's Date Box Now Uses Theme Colors
1971- **Fixed:** Today's day number box now uses theme border color
1972- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
1973- **Result:** Today box matches the theme perfectly!
1974
1975### The Issue
1976
1977Today's date had a hardcoded green box:
1978
1979**In style.css**:
1980```css
1981.cal-today .day-num {
1982    background: #008800;  /* Hardcoded green! */
1983    color: white;
1984}
1985```
1986
1987**Didn't adapt to themes at all!**
1988
1989### The Fix
1990
1991**Now uses theme colors**:
1992```php
1993// Today's day number
1994if ($isToday) {
1995    background: $themeStyles['border'],  // Theme's accent color!
1996    color: (professional theme) ? white : bg color
1997}
1998```
1999
2000### Theme Examples
2001
2002**Matrix Theme**:
2003- Box background: `#00cc07` (matrix green)
2004- Text color: `#242424` (dark background)
2005
2006**Purple Theme**:
2007- Box background: `#9b59b6` (purple)
2008- Text color: `#2a2030` (dark background)
2009
2010**Professional Theme**:
2011- Box background: `#4a90e2` (blue)
2012- Text color: `#ffffff` (white text)
2013
2014**Pink Theme**:
2015- Box background: `#ff1493` (hot pink)
2016- Text color: `#1a0d14` (dark background)
2017
2018**Wiki Theme**:
2019- Box background: Template's `__border__` color
2020- Text color: Template's `__background_site__` color
2021
2022### Visual Result
2023
2024**Matrix Theme**:
2025```
2026┌──┬──┬──┬──┬──┬──┬──┐
2027│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
2028└──┴──┴──┴──┴──┴──┴──┘
20292030    Green box (#00cc07)
2031```
2032
2033**Professional Theme**:
2034```
2035┌──┬──┬──┬──┬──┬──┬──┐
2036│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
2037└──┴──┴──┴──┴──┴──┴──┘
20382039    Blue box (#4a90e2)
2040```
2041
2042**Wiki Theme**:
2043```
2044┌──┬──┬──┬──┬──┬──┬──┐
2045│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
2046└──┴──┴──┴──┴──┴──┴──┘
20472048    Template border color
2049```
2050
2051### Implementation
2052
2053**Inline styles added**:
2054- Background uses `$themeStyles['border']` (theme accent)
2055- Text color uses `$themeStyles['bg']` for contrast
2056- Special case: Professional theme uses white text
2057- All with `!important` to override CSS
2058
2059**CSS cleaned up**:
2060- Removed hardcoded `#008800` background
2061- Removed hardcoded `white` color
2062- Kept structural styles (border-radius, font-weight)
2063
2064### Benefits
2065
2066**Theme Consistency**:
2067- Today box matches theme accent color
2068- Proper contrast with background
2069- Professional appearance
2070
2071**Automatic Adaptation**:
2072- Works with all themes
2073- Works with custom wiki template colors
2074- No manual adjustment needed
2075
2076**Visual Harmony**:
2077- Border color used throughout theme
2078- Today box reinforces theme identity
2079- Consistent design language
2080
2081## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
2082
2083### �� Fixed: Table Grid Background Now Matches Cells
2084- **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
2085- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
2086- **Result:** Table background no longer shows through cells!
2087
2088### The Layer Problem
2089
2090The table itself had a DIFFERENT background color than its cells!
2091
2092**Before (v5.2.6)**:
2093```php
2094'grid_bg' => __background_alt__,     // Table background (#e8e8e8)
2095'cell_bg' => __background_site__,    // Cell background (#f5f5f5)
2096```
2097
2098**The table background was showing THROUGH the cells!**
2099
2100### Why This Happened
2101
2102**Visual layers**:
2103```
2104Table Element
2105├─ background: __background_alt__ (#e8e8e8)  ← Different!
2106└─ Cells
2107    └─ background: __background_site__ (#f5f5f5)  ← Different!
2108
2109The table background shows through any gaps!
2110```
2111
2112### The Fix
2113
2114**After (v5.2.7)**:
2115```php
2116'grid_bg' => __background_site__,    // Table background (#f5f5f5) ✓
2117'cell_bg' => __background_site__,    // Cell background (#f5f5f5) ✓
2118```
2119
2120**NOW THEY MATCH!**
2121
2122### Where grid_bg Is Used
2123
2124The table element itself:
2125```html
2126<table style="background: __background_alt__">  ← Was showing through!
2127    <tbody>
2128        <tr>
2129            <td style="background: __background_site__">1</td>
2130        </tr>
2131    </tbody>
2132</table>
2133```
2134
2135Even with cell inline styles, the TABLE background shows through!
2136
2137### All Background Sources Now Unified
2138
2139**Everything now uses __background_site__**:
2140- `bg` → __background_site__ ✓
2141- `header_bg` → __background_site__ ✓
2142- `grid_bg` → __background_site__ ✓ (JUST FIXED!)
2143- `cell_bg` → __background_site__ ✓
2144
2145**Perfect consistency!** ��
2146
2147### Why It Was Different
2148
2149**Originally the grid was meant to show borders**:
2150- `grid_bg` was `__background_alt__` (slightly different)
2151- Created visual separation between cells
2152- But with transparent/thin cells, it showed through!
2153
2154**Now unified for consistency!**
2155
2156### Visual Result
2157
2158**Before (layers visible)**:
2159```
2160┌─────────────────┐
2161│ Grid (#e8e8e8)  │ ← Showing through!
2162│  ┌──┬──┬──┐     │
2163│  │  │  │  │     │ ← Cells (#f5f5f5)
2164│  └──┴──┴──┘     │
2165└─────────────────┘
2166```
2167
2168**After (unified)**:
2169```
2170┌─────────────────┐
2171│ Grid (#f5f5f5)  │ ← Same color!
2172│  ┌──┬──┬──┐     │
2173│  │  │  │  │     │ ← Cells (#f5f5f5)
2174│  └──┴──┴──┘     │
2175└─────────────────┘
2176Perfect match!
2177```
2178
2179### Complete Background Mapping
2180
2181**All using __background_site__ now**:
2182- Main container background
2183- Left panel background
2184- Right panel background
2185- Eventlist background
2186- Calendar grid background ← JUST FIXED
2187- Calendar cell backgrounds
2188- Event item backgrounds
2189- Clock header background
2190- Search input background
2191- Past events toggle
2192
2193**EVERYTHING UNIFIED!** ��
2194
2195## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
2196
2197### �� Fixed: Removed Container Backgrounds Showing Through
2198- **Found:** `.calendar-compact-container` had `background: #ffffff;`
2199- **Found:** `.calendar-compact-left` had `background: #fafafa;`
2200- **Found:** `.calendar-compact-right` had `background: #ffffff;`
2201- **Found:** `.event-search-input-inline` had `background: white;`
2202- **Found:** `.past-events-toggle` had `background: #f5f5f5;`
2203- **Result:** Container backgrounds no longer show through cells!
2204
2205### The Container Problem
2206
2207The parent containers had hardcoded backgrounds that were showing through!
2208
2209**Container backgrounds (lines 4-91)**:
2210```css
2211.calendar-compact-container {
2212    background: #ffffff;  /* ← Main container! */
2213}
2214
2215.calendar-compact-left {
2216    background: #fafafa;  /* ← Left panel (calendar side)! */
2217}
2218
2219.calendar-compact-right {
2220    background: #ffffff;  /* ← Right panel (events side)! */
2221}
2222```
2223
2224**These were showing through the cells and events!**
2225
2226### Why Containers Matter
2227
2228Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through:
2229
2230```
2231Container (#fafafa)           ← Showing through!
2232   └─ Table Cell (#f5f5f5)    ← Transparent areas
2233      └─ Content
2234```
2235
2236### All Backgrounds Removed
2237
2238**v5.2.6 removes**:
2239- `.calendar-compact-container` background
2240- `.calendar-compact-left` background
2241- `.calendar-compact-right` background
2242- `.event-search-input-inline` background
2243- `.past-events-toggle` background & hover
2244
2245**v5.2.5 removed**:
2246- `.calendar-compact-grid tbody td` background
2247- `.calendar-compact-grid thead th` background
2248
2249**v5.2.4 removed**:
2250- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
2251
2252**v5.2.3 removed**:
2253- `.event-compact-item` background
2254
2255**ALL container and element backgrounds eliminated!** ��
2256
2257### What Should Work Now
2258
2259**Calendar cells**: No container background showing through ✓
2260**Event items**: No container background showing through ✓
2261**Search bar**: Uses template color ✓
2262**Past events toggle**: Uses template color ✓
2263
2264### Complete List of Fixes
2265
2266**Containers**:
2267- Main container ✓
2268- Left panel ✓
2269- Right panel ✓
2270
2271**Elements**:
2272- Table cells ✓
2273- Event items ✓
2274- Search input ✓
2275- Past events toggle ✓
2276
2277**EVERYTHING removed!** ��
2278
2279### Critical: Clear Caches
2280
2281**Must clear caches or won't work**:
22821. Hard refresh: Ctrl+Shift+R (5 times!)
22832. Clear DokuWiki cache
22843. Close browser completely
22854. Reopen and test
2286
2287**CSS caching is EXTREMELY persistent!**
2288
2289## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
2290
2291### �� Fixed: Removed Hardcoded Backgrounds from Table Cells
2292- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
2293- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
2294- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
2295- **Fixed:** Removed ALL hardcoded backgrounds from table CSS
2296- **Result:** Calendar table cells finally use template colors!
2297
2298### The REAL Culprits
2299
2300The generic table CSS was overriding everything!
2301
2302**In style.css (lines 307-356)**:
2303```css
2304.calendar-compact-grid thead th {
2305    background: #f8f8f8;  /* ← Header cells hardcoded! */
2306}
2307
2308.calendar-compact-grid tbody td {
2309    background: #ffffff;  /* ← ALL table cells hardcoded! */
2310}
2311
2312.calendar-compact-grid tbody td:hover {
2313    background: #f0f7ff;  /* ← Hover state hardcoded! */
2314}
2315```
2316
2317**These apply to ALL `<td>` and `<th>` elements in the calendar table!**
2318
2319### Why This Was the Last One
2320
2321**CSS Specificity Order**:
23221. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
23232. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
23243. Inline styles (should win but didn't)
2325
2326**We removed the specific ones (v5.2.4), but the generic one was still there!**
2327
2328### What We've Removed
2329
2330**v5.2.3**:
2331- `.event-compact-item` background
2332- `.event-compact-item:hover` background
2333
2334**v5.2.4**:
2335- `.cal-empty` background & hover
2336- `.cal-today` background & hover
2337- `.cal-has-events` background & hover
2338
2339**v5.2.5 (FINAL)**:
2340- `.calendar-compact-grid tbody td` background ✓
2341- `.calendar-compact-grid tbody td:hover` background ✓
2342- `.calendar-compact-grid thead th` background ✓
2343
2344**All CSS background overrides ELIMINATED!** ��
2345
2346### Why It Took 5 Versions
2347
2348**CSS had layers of hardcoded backgrounds**:
2349
2350```
2351Layer 1: Table cells (.calendar-compact-grid tbody td)
2352         ↓ Overrode inline styles
2353Layer 2: Cell states (.cal-today, .cal-empty, etc.)
2354         ↓ Overrode table cells
2355Layer 3: Event items (.event-compact-item)
2356         ↓ Overrode inline styles
2357
2358ALL had to be removed!
2359```
2360
2361**We kept finding more specific CSS, but the base table CSS was there all along!**
2362
2363### Visual Result
2364
2365**NOW everything matches**:
2366```
2367Calendar Table:
2368┌──┬──┬──┬──┬──┬──┬──┐
2369│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__
2370├──┼──┼──┼──┼──┼──┼──┤
2371│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__
2372├──┼──┼──┼──┼──┼──┼──┤
2373│ 8│ 9│10│11│12│13│14│ ← All: __background_site__
2374└──┴──┴──┴──┴──┴──┴──┘
2375
2376Sidebar Events:
2377┌────────────────────────┐
2378│ �� Event               │ ← __background_site__
2379│ �� Event               │ ← __background_site__
2380└────────────────────────┘
2381
2382FINALLY ALL MATCHING! ✓
2383```
2384
2385### Complete List of Removed CSS
2386
2387**ALL hardcoded backgrounds removed**:
2388- `.event-compact-item` background
2389- `.event-compact-item:hover` background
2390- `.cal-empty` background & hover
2391- `.cal-today` background & hover
2392- `.cal-has-events` background & hover
2393- `.calendar-compact-grid tbody td` background ← NEW
2394- `.calendar-compact-grid tbody td:hover` background ← NEW
2395- `.calendar-compact-grid thead th` background ← NEW
2396
2397**Every single CSS background override is GONE!** ��
2398
2399### Testing Steps
2400
2401**After installing v5.2.5**:
2402
24031. **Clear browser cache**: Ctrl+Shift+R (3 times!)
24042. **Clear DokuWiki cache**: Click the button
24053. **Close browser completely**: Restart it
24064. **Visit page**: Should finally see matching backgrounds
2407
2408**CSS is EXTREMELY sticky - may need to clear multiple times!**
2409
2410### This Should Be It
2411
2412**No more CSS overrides exist** (we've checked the entire file):
2413- Table cells ✓ Fixed
2414- Cell states ✓ Fixed
2415- Event items ✓ Fixed
2416- Headers ✓ Fixed
2417- Hover states ✓ Fixed
2418
2419**All backgrounds now come from inline styles using template colors!**
2420
2421## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
2422
2423### �� Fixed: Removed Hardcoded Backgrounds from Calendar Cells
2424- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
2425- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
2426- **Result:** Calendar cells now use template colors!
2427
2428### The Second Culprit
2429
2430MORE hardcoded backgrounds in the CSS file!
2431
2432**In style.css (lines 359-382)**:
2433```css
2434.cal-empty {
2435    background: #fafafa !important;  /* ← Overriding inline styles! */
2436}
2437
2438.cal-today {
2439    background: #e8f5e9 !important;  /* ← Overriding today cell! */
2440}
2441
2442.cal-today:hover {
2443    background: #c8e6c9 !important;  /* ← Overriding hover! */
2444}
2445
2446.cal-has-events {
2447    background: #fffbf0;  /* ← Overriding event cells! */
2448}
2449
2450.cal-has-events:hover {
2451    background: #fff4d9;  /* ← Overriding hover! */
2452}
2453```
2454
2455**These were ALL overriding the inline styles!**
2456
2457### The Fix
2458
2459**Removed all hardcoded backgrounds**:
2460```css
2461.cal-empty {
2462    /* background removed - inline style handles this */
2463    cursor: default !important;
2464}
2465
2466.cal-today {
2467    /* background removed - inline style handles this */
2468}
2469
2470.cal-has-events {
2471    /* background removed - inline style handles this */
2472}
2473
2474/* Hover states also removed */
2475```
2476
2477### What Was Overridden
2478
2479**v5.2.3 fixed**:
2480- Event items in sidebar ✓
2481
2482**v5.2.4 fixes**:
2483- Calendar day cells ✓
2484- Today cell ✓
2485- Empty cells ✓
2486- Cells with events ✓
2487- All hover states ✓
2488
2489### Why This Kept Happening
2490
2491**CSS had hardcoded backgrounds everywhere**:
24921. Event items: `#ffffff` (fixed in v5.2.3)
24932. Calendar cells: Multiple colors (fixed in v5.2.4)
24943. **All with `!important` flags!**
2495
2496**The inline styles couldn't override them!**
2497
2498### Visual Result
2499
2500**Now ALL backgrounds match**:
2501```
2502Calendar Grid:
2503┌──┬──┬──┬──┬──┬──┬──┐
2504│  │  │  │  │  │  │  │ ← All use __background_site__
2505├──┼──┼──┼──┼──┼──┼──┤
2506│  │██│  │  │  │  │  │ ← Today uses __background_neu__
2507├──┼──┼──┼──┼──┼──┼──┤
2508│  │  │  │  │  │  │  │ ← All match template
2509└──┴──┴──┴──┴──┴──┴──┘
2510
2511Sidebar Events:
2512┌────────────────────────┐
2513│ �� Event               │ ← Uses __background_site__
2514│ �� Event               │ ← Uses __background_site__
2515└────────────────────────┘
2516
2517Perfect consistency!
2518```
2519
2520### CSS Removed
2521
2522**Calendar cells**:
2523- `.cal-empty` background
2524- `.cal-empty:hover` background
2525- `.cal-today` background
2526- `.cal-today:hover` background
2527- `.cal-has-events` background
2528- `.cal-has-events:hover` background
2529
2530**All gone!** ✓
2531
2532### Important: Clear Caches Again!
2533
2534After installing v5.2.4:
2535
25361. **Hard refresh browser**: Ctrl+Shift+R (twice!)
25372. **Clear DokuWiki cache**: Admin → Clear Cache
25383. **May need to restart browser**: To clear CSS cache
2539
2540**Old CSS is VERY sticky!**
2541
2542### Why It Took So Long
2543
2544**Multiple CSS overrides**:
2545- Event items (v5.2.3) ✓ Fixed
2546- Calendar cells (v5.2.4) ✓ Fixed
2547- Each with different classes
2548- Each with `!important`
2549- Hidden throughout CSS file
2550
2551**Found them all now!** ��
2552
2553## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
2554
2555### �� Fixed: Removed Hardcoded Backgrounds from CSS
2556- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
2557- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
2558- **Result:** Event backgrounds now properly use template colors!
2559
2560### The Root Cause
2561
2562The CSS file was overriding the inline styles with hardcoded white backgrounds!
2563
2564**In style.css (lines 599-616)**:
2565```css
2566.event-compact-item {
2567    background: #ffffff;  /* ← This was overriding inline styles! */
2568}
2569
2570.event-compact-item:hover {
2571    background: #f8f9fa;  /* ← And this on hover! */
2572}
2573```
2574
2575**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade!
2576
2577### The Fix
2578
2579**Removed hardcoded backgrounds from CSS**:
2580```css
2581.event-compact-item {
2582    /* background removed - set via inline style with template colors */
2583    display: flex;
2584    /* ... other styles ... */
2585}
2586
2587.event-compact-item:hover {
2588    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
2589    /* background removed - inline style handles this */
2590}
2591```
2592
2593### Why This Was So Difficult to Find
2594
2595**CSS Specificity & Cascade**:
25961. Inline styles with `!important` should win
25972. But CSS that comes after can still apply
25983. The hardcoded `background: #ffffff` was silently overriding
25994. All the PHP code was correct - it was the CSS!
2600
2601**What We Were Doing**:
2602- ✓ Reading template colors correctly
2603- ✓ Setting `cell_bg` to `__background_site__` correctly
2604- ✓ Applying inline styles with `!important` correctly
2605- ✗ CSS file was overriding everything!
2606
2607### What Was Affected
2608
2609**Event items in**:
2610- Main calendar sidebar
2611- Standalone event list
2612- Sidebar widget
2613- All event displays
2614
2615**All had white backgrounds hardcoded in CSS!**
2616
2617### Now Working
2618
2619**Events use template colors**:
2620```html
2621<div class="event-compact-item"
2622     style="background: #f5f5f5 !important; ...">
2623    ← Now this inline style actually works!
2624</div>
2625```
2626
2627**No CSS override** ✓
2628
2629### Testing
2630
2631To verify this works:
26321. Clear browser cache (important!)
26332. Clear DokuWiki cache
26343. Reload page
26354. Events should now match eventlist background
2636
2637**Browser caching can make old CSS persist!**
2638
2639### Visual Result
2640
2641**All backgrounds now matching**:
2642```
2643┌────────────────────────────┐
2644│ Eventlist (#f5f5f5)        │ ← Template color
2645├────────────────────────────┤
2646│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
2647├────────────────────────────┤
2648│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
2649└────────────────────────────┘
2650
2651Perfect match!
2652```
2653
2654### Why Everything Else Worked
2655
2656**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds:
2657- They only had inline styles ✓
2658- Inline styles worked correctly ✓
2659- Only event items had the CSS override ✗
2660
2661### Important Notes
2662
2663**Clear caches**:
2664- Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
2665- DokuWiki cache (Admin → Clear Cache)
2666- Old CSS may be cached!
2667
2668**This was the culprit all along!**
2669
2670## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
2671
2672### �� Fixed: Clock Area Now Matches Event Cells
2673- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
2674- **Result:** Clock/Today header matches event cell backgrounds!
2675
2676### The Issue
2677
2678The clock area (Today header) was using a different background:
2679
2680**Before (v5.2.1)**:
2681```php
2682'header_bg' => __background_alt__,   // Different color (gray #e8e8e8)
2683'cell_bg' => __background_site__,    // Event cells (#f5f5f5)
2684```
2685
2686**After (v5.2.2)**:
2687```php
2688'header_bg' => __background_site__,  // Same as cells (#f5f5f5) ✓
2689'cell_bg' => __background_site__,    // Event cells (#f5f5f5) ✓
2690```
2691
2692### What's the Clock Area?
2693
2694The clock/Today header in the sidebar:
2695```
2696┌────────────────────────────┐
2697│ 3:45:23 PM                 │ ← Clock area (header_bg)
2698│ ��️ --° | Sun, Feb 9, 2026 │
2699└────────────────────────────┘
2700```
2701
2702### All Backgrounds Now Unified
2703
2704**Everything now uses __background_site__**:
2705- Eventlist background ✓
2706- Calendar cells ✓
2707- Event items ✓
2708- Clock/Today header ✓
2709- Sidebar widget ✓
2710- All backgrounds match! ✓
2711
2712### Visual Result
2713
2714**Complete consistency**:
2715```
2716┌────────────────────────────┐
2717│ 3:45:23 PM                 │ ← Same background
2718│ ��️ --° | Sun, Feb 9, 2026 │
2719├────────────────────────────┤
2720│ �� Meeting at 2pm          │ ← Same background
2721│ Description...             │
2722├────────────────────────────┤
2723│ �� Another event           │ ← Same background
2724│ More details...            │
2725└────────────────────────────┘
2726
2727All using __background_site__ (#f5f5f5)
2728```
2729
2730**Perfect visual harmony!** ��
2731
2732## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
2733
2734### �� Fixed: Calendar Cells Now Match Eventlist Background
2735- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
2736- **Result:** Calendar cells now match the eventlist background perfectly!
2737
2738### The Real Issue
2739
2740The eventlist was showing the CORRECT background color all along!
2741
2742**Eventlist was using**:
2743- `bg` → `__background_site__` ✓ (This was correct!)
2744
2745**Calendar cells were using**:
2746- `cell_bg` → `__background__` ✗ (This was wrong!)
2747
2748**They didn't match!**
2749
2750### The Correct Fix
2751
2752**Now everything uses __background_site__**:
2753```php
2754'bg' => __background_site__,        // Eventlist (was already correct)
2755'cell_bg' => __background_site__,   // Cells (now fixed to match)
2756```
2757
2758### Why __background_site__?
2759
2760The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background:
2761
2762```
2763Page Layout:
2764┌────────────────────────────────────┐
2765│ __background_site__ (page bg)     │ ← This is where calendar lives
2766│                                    │
2767│  ┌──────────────────────────────┐ │
2768│  │ __background__ (content bg)  │ │ ← Wiki article content
2769│  │                              │ │
2770│  └──────────────────────────────┘ │
2771│                                    │
2772└────────────────────────────────────┘
2773```
2774
2775**Calendar should match the page background, not the content background!**
2776
2777### Template Example
2778
2779Typical DokuWiki template:
2780```ini
2781__background_site__ = "#f5f5f5"  (Light gray - page background)
2782__background__ = "#ffffff"        (White - content area)
2783```
2784
2785**Before (v5.2.0)**:
2786- Eventlist: `#f5f5f5` (light gray) ✓ Correct
2787- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
2788
2789**After (v5.2.1)**:
2790- Eventlist: `#f5f5f5` (light gray) ✓ Correct
2791- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
2792
2793### All Backgrounds Now Unified
2794
2795**Everything now uses __background_site__**:
2796- Eventlist sidebar background ✓
2797- Main calendar background ✓
2798- Calendar day cells ✓
2799- Sidebar widget ✓
2800- Event items ✓
2801- Input fields ✓
2802- Buttons ✓
2803
2804**All perfectly matched to the page background!**
2805
2806### Why Version 5.2.0 Was Wrong
2807
2808I incorrectly assumed `__background__` was the right color because it's often white. But the eventlist was already correct using `__background_site__` to match the page, not the content area.
2809
2810**The eventlist knew what it was doing all along!** The cells just needed to catch up.
2811
2812## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
2813**Note**: This version went the wrong direction. See v5.2.1 for the correct fix.
2814
2815### �� Fixed: All Backgrounds Now Use __background__
2816- **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
2817- **Fixed:** Eventlist, calendar cells, and sidebar all match now
2818- **Result:** Completely unified background throughout!
2819
2820### The Issue
2821
2822Different parts of the calendar were using different background sources:
2823
2824**Before (v5.1.9)**:
2825```php
2826'bg' => __background_site__        // Eventlist background (outer page)
2827'cell_bg' => __background__        // Cell backgrounds (content area)
2828```
2829
2830**These are different colors!**
2831- `__background_site__` = Outer page wrapper (often gray)
2832- `__background__` = Main content area (often white)
2833
2834### The Fix
2835
2836**After (v5.2.0)**:
2837```php
2838'bg' => __background__             // Eventlist background ✓
2839'cell_bg' => __background__        // Cell backgrounds ✓
2840```
2841
2842**Both use the same source!**
2843
2844### What Uses 'bg'
2845
2846The `bg` color is used for:
2847- Eventlist sidebar background
2848- Main calendar container
2849- Sidebar widget background
2850- Form backgrounds
2851- Event dialogs
2852
2853### What Uses 'cell_bg'
2854
2855The `cell_bg` color is used for:
2856- Calendar day cells
2857- Event item backgrounds
2858- Input field backgrounds
2859- Button backgrounds
2860
2861### Why This Matters
2862
2863**Template color hierarchy**:
2864```
2865__background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
2866__background__      → Main content area (e.g., #ffffff white)
2867__background_alt__  → Sections/headers
2868__background_neu__  → Highlights
2869```
2870
2871**We want all calendar backgrounds to match the main content area!**
2872
2873### Visual Comparison
2874
2875**Before (v5.1.9)**: Mismatched backgrounds
2876```
2877┌────────────────────────────────┐
2878│ Eventlist (gray #f5f5f5)      │ ← __background_site__
2879└────────────────────────────────┘
2880
2881┌────────────────────────────────┐
2882│ Calendar                       │
2883│ ┌──┬──┬──┬──┬──┬──┬──┐       │
2884│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
2885│ └──┴──┴──┴──┴──┴──┴──┘       │
2886└────────────────────────────────┘
2887Different colors - looks inconsistent
2888```
2889
2890**After (v5.2.0)**: Unified backgrounds
2891```
2892┌────────────────────────────────┐
2893│ Eventlist (white #fff)         │ ← __background__
2894└────────────────────────────────┘
2895
2896┌────────────────────────────────┐
2897│ Calendar                       │
2898│ ┌──┬──┬──┬──┬──┬──┬──┐       │
2899│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
2900│ └──┴──┴──┴──┴──┴──┴──┘       │
2901└────────────────────────────────┘
2902Same color - perfectly consistent!
2903```
2904
2905### Template Examples
2906
2907**Light Template**:
2908```ini
2909__background_site__ = "#f5f5f5"  (light gray)
2910__background__ = "#ffffff"       (white)
2911```
2912
2913**Before**: Eventlist gray, cells white
2914**After**: Eventlist white, cells white ✓
2915
2916**Dark Template**:
2917```ini
2918__background_site__ = "#1a1a1a"  (very dark)
2919__background__ = "#2d2d2d"       (dark)
2920```
2921
2922**Before**: Eventlist very dark, cells dark
2923**After**: Eventlist dark, cells dark ✓
2924
2925### Benefits
2926
2927**Visual Consistency**:
2928- All backgrounds match
2929- Clean, unified appearance
2930- Professional look
2931
2932**Correct Template Integration**:
2933- Uses content area color (not page wrapper)
2934- Matches wiki content area
2935- Proper color hierarchy
2936
2937**Works Everywhere**:
2938- Light templates ✓
2939- Dark templates ✓
2940- Custom templates ✓
2941
2942### All Backgrounds Unified
2943
2944**Now using __background__**:
2945- Eventlist background ✓
2946- Calendar cells ✓
2947- Sidebar widget ✓
2948- Event items ✓
2949- Input fields ✓
2950- Buttons ✓
2951- Dialogs ✓
2952
2953**Perfect harmony throughout!** ��
2954
2955## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
2956
2957### �� Fixed: Wiki Theme Event Backgrounds Not Showing
2958- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
2959- **Fixed:** Replaced CSS variables with actual hex colors
2960- **Result:** Event backgrounds now show correctly with template colors!
2961
2962### The Problem
2963
2964CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
2965
2966**Before (broken)**:
2967```php
2968'cell_bg' => 'var(--__background__, #fff)',  // Doesn't work in inline styles!
2969```
2970
2971**After (fixed)**:
2972```php
2973'cell_bg' => '#fff',  // Actual hex color works!
2974```
2975
2976### What Was Affected
2977
2978**When style.ini read successfully**:
2979- ✅ Worked fine (uses actual hex colors from file)
2980
2981**When style.ini fallback used**:
2982- ❌ Events had no background
2983- ❌ CSS variables don't work in inline styles
2984- ❌ Looked broken
2985
2986### The Fix
2987
2988**Wiki theme fallback now uses real colors**:
2989```php
2990'wiki' => [
2991    'bg' => '#f5f5f5',           // Real hex (was: var(--__background_site__))
2992    'border' => '#ccc',           // Real hex (was: var(--__border__))
2993    'cell_bg' => '#fff',          // Real hex (was: var(--__background__))
2994    'cell_today_bg' => '#eee',    // Real hex (was: var(--__background_neu__))
2995    'text_primary' => '#333',     // Real hex (was: var(--__text__))
2996    'text_bright' => '#2b73b7',   // Real hex (was: var(--__link__))
2997    'text_dim' => '#666',         // Real hex (was: var(--__text_neu__))
2998    'grid_bg' => '#e8e8e8',       // Real hex (was: var(--__background_alt__))
2999    // ... all colors now use real hex values
3000]
3001```
3002
3003### Why CSS Variables Don't Work
3004
3005**CSS variables work**:
3006```css
3007.some-class {
3008    background: var(--__background__, #fff);  /* ✓ Works in CSS */
3009}
3010```
3011
3012**CSS variables DON'T work**:
3013```html
3014<div style="background: var(--__background__, #fff)">  <!-- ✗ Doesn't work -->
3015```
3016
3017### How It Works Now
3018
3019**Priority system**:
30201. **Try reading style.ini** → Use actual template hex colors ✓
30212. **If file not found** → Use fallback hex colors ✓
30223. **Never use CSS variables in inline styles** ✓
3023
3024**Both paths now work correctly!**
3025
3026### Visual Result
3027
3028**Events now have proper backgrounds**:
3029```
3030┌──────────────────────────┐
3031│ �� Meeting at 2pm        │ ← White background (#fff)
3032│ Description here...      │
3033│ [✏️ Edit] [��️ Delete]   │
3034└──────────────────────────┘
3035
3036Not:
3037┌──────────────────────────┐
3038│ �� Meeting at 2pm        │ ← No background (broken)
3039│ Description here...      │
3040└──────────────────────────┘
3041```
3042
3043### Affected Areas
3044
3045**All event displays**:
3046- Main calendar events ✓
3047- Sidebar widget events ✓
3048- Event list items ✓
3049- Event backgrounds ✓
3050- Button backgrounds ✓
3051- Input field backgrounds ✓
3052
3053**Everything uses real colors now!**
3054
3055## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
3056
3057### �� Reorganized: Better Update Tab Layout
3058- **Moved:** Current Version section to the top
3059- **Combined:** Upload and Important Notes side-by-side
3060- **Improved:** Space-efficient two-column layout
3061- **Result:** More information visible at once!
3062
3063### New Layout Order
3064
3065**Version 5.1.8**:
3066```
30671. Current Version (at top - see what you have)
30682. Upload + Important Notes (side-by-side)
30693. Recent Changes (changelog)
30704. Backups
3071```
3072
3073### Side-by-Side Design
3074
3075**Upload form (left 60%) + Important Notes (right 40%)**:
3076```
3077┌──────────────────────────────────────────┐
3078│ �� Current Version                       │
3079│ Version: 5.1.8                           │
3080│ ✅ Permissions: OK                       │
3081└──────────────────────────────────────────┘
3082
3083┌─────────────────────┬────────────────────┐
3084│ �� Upload New       │ ⚠️ Important Notes │
3085│ [Choose File]       │ • Replaces files   │
3086│ ☑ Backup first      │ • Config preserved │
3087│ [Upload] [Clear]    │ • Events safe      │
3088└─────────────────────┴────────────────────┘
3089```
3090
3091### Benefits
3092
3093**Current Version First**:
3094- See what you have immediately
3095- Check permissions at a glance
3096- Know if ready to update
3097
3098**Side-by-Side Layout**:
3099- Upload form and warnings together
3100- Read notes while choosing file
3101- More efficient use of space
3102- Less scrolling needed
3103
3104**Better Information Flow**:
31051. See current version ✓
31062. Upload new version with notes visible ✓
31073. Review recent changes ✓
31084. Manage backups ✓
3109
3110### Visual Comparison
3111
3112**Before (v5.1.7)**:
3113```
3114Important Notes (full width)
31153116Upload Form (full width)
31173118Current Version
31193120Recent Changes
31213122Backups
3123```
3124
3125**After (v5.1.8)**:
3126```
3127Current Version (full width)
31283129Upload (60%) | Notes (40%)
31303131Recent Changes
31323133Backups
3134```
3135
3136**More compact, better organized!**
3137
3138### Responsive Design
3139
3140**Wide screens**:
3141- Upload and notes side-by-side
3142- Full 1200px width utilized
3143- Efficient space usage
3144
3145**Narrow screens**:
3146- Sections stack gracefully
3147- Flex layout adapts
3148- Still fully functional
3149
3150### Layout Details
3151
3152**Current Version Section**:
3153- Full width (1200px max)
3154- Shows version, author, description
3155- Permission status with icons
3156- Helpful fix commands if needed
3157
3158**Upload/Notes Section**:
3159- Flexbox layout with gap
3160- Upload: `flex:1` (grows)
3161- Notes: `flex:0 0 350px` (fixed 350px)
3162- Both have proper min-width
3163
3164**Recent Changes Section**:
3165- Full width (1200px max)
3166- Compact scrollable view
3167- Color-coded change types
3168- Last 10 versions shown
3169
3170**Backups Section**:
3171- Full width (1200px max)
3172- Manual backup button
3173- Scrollable file list
3174- All actions accessible
3175
3176### Improved Max Widths
3177
3178All sections now use `max-width:1200px` (previously 900px):
3179- Better use of wide screens
3180- Still responsive on narrow screens
3181- Consistent throughout tab
3182
3183## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
3184
3185### �� Fixed: Extra Closing Brace
3186- **Fixed:** ParseError on line 1936 (extra closing brace)
3187- **Result:** Manual backup feature now works correctly!
3188
3189### What Was Wrong
3190
3191Extra `}` after the backup section:
3192
3193**Before (broken)**:
3194```php
3195echo '</div>';
3196}  // ← Extra closing brace!
3197
3198echo '<script>
3199```
3200
3201**After (fixed)**:
3202```php
3203echo '</div>';
3204
3205echo '<script>
3206```
3207
3208**Manual backup feature now fully functional!** ✅
3209
3210## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
3211
3212### �� Added: Create Backup Manually Anytime
3213- **Added:** "Create Backup Now" button in Backups section
3214- **Added:** Manual backup action handler with full verification
3215- **Added:** Backups section always visible (even with no backups)
3216- **Added:** Success message showing file size and file count
3217- **Result:** Create backups anytime without needing to upload!
3218
3219### Manual Backup Button
3220
3221**New Layout**:
3222```
3223┌─────────────────────────────────────┐
3224│ �� Backups        [�� Create Backup Now] │
3225├─────────────────────────────────────┤
3226│ Backup File                Size     │
3227calendar.backup.v5.1.6...  243 KB   │
3228│ [�� Download] [✏️ Rename] [��️ Delete] │
3229└─────────────────────────────────────┘
3230```
3231
3232**Always visible - even with no backups**:
3233```
3234┌─────────────────────────────────────┐
3235│ �� Backups        [�� Create Backup Now] │
3236├─────────────────────────────────────┤
3237│ No backups yet. Click "Create       │
3238│ Backup Now" to create your first    │
3239│ backup.                              │
3240└─────────────────────────────────────┘
3241```
3242
3243### How It Works
3244
3245**Click the button**:
32461. Confirm: "Create a backup of the current plugin version?"
32472. System creates backup ZIP
32483. Verifies: File count (30+ files)
32494. Verifies: File size (200KB+)
32505. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)"
3251
3252**Backup naming**:
3253```
3254calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
3255                       ^^^^^^
3256                     "manual" tag identifies manual backups
3257```
3258
3259### Use Cases
3260
3261**Before updates**:
3262- Create safety backup before uploading new version
3263- Have multiple restore points
3264- Test new features with fallback
3265
3266**Regular backups**:
3267- Weekly/monthly backup schedule
3268- Before making configuration changes
3269- After important customizations
3270
3271**Development**:
3272- Backup before code experiments
3273- Save working states
3274- Quick rollback points
3275
3276### Full Verification
3277
3278**Same checks as automatic backups**:
3279- ✅ File count check (minimum 10, expected 30+)
3280- ✅ File size check (minimum 1KB, expected 200KB+)
3281- ✅ Existence check (file actually created)
3282- ✅ Automatic cleanup on failure
3283
3284**Success message includes**:
3285- Backup filename
3286- File size (human-readable)
3287- Number of files backed up
3288
3289### Example Messages
3290
3291**Success**:
3292```
3293✓ Manual backup created successfully:
3294  calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
3295  (243 KB, 31 files)
3296```
3297
3298**Failure Examples**:
3299```
3300❌ Plugin directory is not readable.
3301   Please check permissions.
3302
3303❌ Backup incomplete: Only 5 files were added (expected 30+).
3304   Backup failed.
3305
3306❌ Backup file is too small (342 bytes).
3307   Only 3 files were added. Backup failed.
3308```
3309
3310### Benefits
3311
3312**On-Demand Safety**:
3313- Create backups anytime
3314- No need to upload new version
3315- Quick and easy
3316
3317**Peace of Mind**:
3318- Backup before risky changes
3319- Multiple restore points
3320- Safe experimentation
3321
3322**Professional Workflow**:
3323- Regular backup schedule
3324- Version snapshots
3325- Disaster recovery
3326
3327### Backup Section Improvements
3328
3329**Always Visible**:
3330- Section shows even with 0 backups
3331- Button always accessible
3332- Clear call-to-action
3333
3334**Better Header**:
3335- Title and button on same row
3336- Clean, professional layout
3337- Space-efficient design
3338
3339### Technical Details
3340
3341**New Action**: `create_manual_backup`
3342
3343**New Function**: `createManualBackup()`
3344- Gets current version
3345- Creates timestamped filename with "manual" tag
3346- Uses same verification as auto-backups
3347- Shows detailed success/error messages
3348
3349**File Naming Convention**:
3350```
3351Automatic (on upload):
3352calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
3353
3354Manual (button click):
3355calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
3356                       ^^^^^^^
3357                    Easy to identify!
3358```
3359
3360### Permissions Required
3361
3362- **Read access**: Plugin directory
3363- **Write access**: Parent plugins directory
3364
3365**Same as automatic backups** - no additional permissions needed!
3366
3367## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
3368
3369### �� Enhanced: Backup Creation with Robust Verification
3370- **Added:** File count validation (must have 10+ files)
3371- **Added:** File size validation (must be 1KB+ minimum)
3372- **Added:** Return value from addDirectoryToZip (counts files added)
3373- **Added:** Detailed error messages showing file count
3374- **Added:** Automatic deletion of invalid/incomplete backups
3375- **Enhanced:** Exception handling with proper error propagation
3376- **Result:** Backups are now guaranteed to be complete or fail clearly!
3377
3378### What Changed
3379
3380**Before (v5.1.4)**:
3381```php
3382$this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
3383$zip->close();
3384// No verification - could create empty or partial backup
3385```
3386
3387**After (v5.1.5)**:
3388```php
3389$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
3390$zip->close();
3391
3392// Verify backup exists
3393if (!file_exists($backupPath)) {
3394    redirect('Backup file was not created');
3395}
3396
3397// Verify backup has content
3398$backupSize = filesize($backupPath);
3399if ($backupSize < 1000) {
3400    unlink($backupPath);
3401    redirect('Backup too small: ' . $backupSize . ' bytes');
3402}
3403
3404// Verify file count
3405if ($fileCount < 10) {
3406    unlink($backupPath);
3407    redirect('Only ' . $fileCount . ' files added (expected 30+)');
3408}
3409```
3410
3411### Backup Validation Checks
3412
3413**Three-Layer Verification**:
3414
34151. **File Count Check**:
3416   - Minimum: 10 files required
3417   - Expected: 30+ files
3418   - Action: Delete backup if too few files
3419
34202. **Size Check**:
3421   - Minimum: 1KB (1000 bytes)
3422   - Expected: 200-250KB
3423   - Action: Delete backup if too small
3424
34253. **Existence Check**:
3426   - Verify file was actually created
3427   - Check ZIP archive is valid
3428   - Action: Error if file missing
3429
3430### Enhanced Error Reporting
3431
3432**Detailed Error Messages**:
3433```
3434❌ "Backup file was not created"
3435❌ "Backup too small (342 bytes). Only 3 files added."
3436❌ "Only 5 files added (expected 30+). Backup aborted."
3437❌ "Too many errors adding files: Failed to add X, Y, Z..."
3438❌ "Directory does not exist: /path/to/dir"
3439❌ "Directory is not readable: /path/to/dir"
3440```
3441
3442**Now you know exactly what went wrong!**
3443
3444### Improved addDirectoryToZip Function
3445
3446**Returns File Count**:
3447```php
3448private function addDirectoryToZip($zip, $dir, $zipPath = '') {
3449    $fileCount = 0;
3450    $errors = [];
3451
3452    // Validation
3453    if (!is_dir($dir)) throw new Exception("Directory does not exist");
3454    if (!is_readable($dir)) throw new Exception("Not readable");
3455
3456    // Add files
3457    foreach ($files as $file) {
3458        if ($zip->addFile($filePath, $relativePath)) {
3459            $fileCount++;
3460        } else {
3461            $errors[] = "Failed to add: " . $filename;
3462        }
3463    }
3464
3465    // Check error threshold
3466    if (count($errors) > 5) {
3467        throw new Exception("Too many errors");
3468    }
3469
3470    return $fileCount;  // Returns count for verification!
3471}
3472```
3473
3474### Safety Features
3475
3476**Invalid Backup Cleanup**:
3477- Failed backups are automatically deleted
3478- No partial/corrupt backups left behind
3479- Clean error state
3480
3481**Error Threshold**:
3482- Allow up to 5 minor file errors (logs warnings)
3483- More than 5 errors = complete failure
3484- Prevents partially corrupt backups
3485
3486**Directory Validation**:
3487- Check directory exists before processing
3488- Check directory is readable
3489- Fail fast with clear errors
3490
3491### Benefits
3492
3493**Guaranteed Complete Backups**:
3494- ✅ All files included or backup fails
3495- ✅ No silent failures
3496- ✅ Clear error messages
3497- ✅ Automatic cleanup
3498
3499**Better Debugging**:
3500- Know exactly how many files were added
3501- See specific errors for missing files
3502- Understand why backup failed
3503
3504**User Confidence**:
3505- Backup succeeds = complete backup
3506- Backup fails = clear error message
3507- No ambiguity
3508
3509### Example Scenarios
3510
3511**Scenario 1: Permission Issue**
3512```
3513User uploads new version
3514System starts backup
3515Error: "Directory is not readable: /lib/plugins/calendar/"
3516Backup fails before creating file
3517User sees clear error message
3518```
3519
3520**Scenario 2: Partial Backup**
3521```
3522User uploads new version
3523System creates backup
3524Only 5 files added (disk issue?)
3525Size: 450 bytes
3526Verification fails
3527Incomplete backup deleted
3528Error: "Only 5 files added (expected 30+)"
3529```
3530
3531**Scenario 3: Success**
3532```
3533User uploads new version
3534System creates backup
353531 files added
3536Size: 240KB
3537All verifications pass ✅
3538Update proceeds
3539```
3540
3541### Testing Recommendations
3542
3543After installing v5.1.5:
35441. Upload a new version with backup enabled
35452. Check for success message
35463. Verify backup file exists in /lib/plugins/
35474. Check backup file size (should be ~240KB)
35485. If backup fails, read error message carefully
3549
3550**Your backups are now bulletproof!** ��
3551
3552## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
3553
3554### ✅ Verified: Backup System Working Correctly
3555- **Verified:** addDirectoryToZip function includes all files recursively
3556- **Verified:** Backups contain all 31+ files from calendar directory
3557- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
3558- **Info:** Backup sizes grow slightly with each version (more code = more features!)
3559- **Result:** Backup system is working perfectly!
3560
3561### Backup System Details
3562
3563**What Gets Backed Up**:
3564- All PHP files (syntax.php, admin.php, action.php, etc.)
3565- All JavaScript files (calendar-main.js, script.js)
3566- All documentation (CHANGELOG.md, README.md, all guides)
3567- All configuration (sync_config.php)
3568- All language files
3569- All assets and resources
3570- **Everything in the calendar/ directory!**
3571
3572**Backup Size Analysis**:
3573```
3574Version 5.0.4: 233KB (normal)
3575Version 5.0.5: 234KB (normal)
3576Version 5.0.6: 235KB (normal)
3577Version 5.0.7: 236KB (normal)
3578Version 5.0.8: 237KB (normal)
3579Version 5.0.9: 237KB (normal)
3580Version 5.1.0: 238KB (normal)
3581Version 5.1.1: 238KB (normal)
3582Version 5.1.2: 240KB (normal - added AJAX features)
3583Version 5.1.3: 240KB (normal)
3584```
3585
3586**Why Sizes Grow**:
3587- More features = more code
3588- Longer CHANGELOG
3589- Additional documentation
3590- New functionality
3591- **This is expected and normal!**
3592
3593**Compression Ratio**:
3594```
3595Uncompressed: ~1.0 MB (source files)
3596Compressed:   ~240 KB (ZIP archive)
3597Ratio:        ~24% (excellent compression!)
3598```
3599
3600### Backup File Contents
3601
3602**31 Files Included**:
3603```
3604admin.php              (216KB - main admin interface)
3605syntax.php             (173KB - calendar rendering)
3606calendar-main.js       (102KB - JavaScript functionality)
3607CHANGELOG.md           (268KB - complete version history)
3608style.css              (57KB - all styling)
3609action.php             (38KB - DokuWiki actions)
3610sync_outlook.php       (32KB - Outlook integration)
3611+ 24 other files (docs, configs, helpers)
3612```
3613
3614**All files successfully included!** ✅
3615
3616### How Backups Work
3617
3618**Creation Process**:
36191. User uploads new plugin version
36202. Checkbox "Create backup first" (checked by default)
36213. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
36224. Backup saved to: `/lib/plugins/` directory
36235. Then proceeds with update
3624
3625**Backup Function**:
3626```php
3627private function addDirectoryToZip($zip, $dir, $zipPath = '') {
3628    $files = new RecursiveIteratorIterator(
3629        new RecursiveDirectoryIterator($dir),
3630        RecursiveIteratorIterator::LEAVES_ONLY
3631    );
3632    foreach ($files as $file) {
3633        if (!$file->isDir()) {
3634            $zip->addFile($filePath, $relativePath);
3635        }
3636    }
3637}
3638```
3639
3640**Recursive = Gets Everything!** ✅
3641
3642### Verification Results
3643
3644**Test Results**:
3645- ✅ All 31 files present in zip
3646- ✅ All subdirectories included (lang/en/)
3647- ✅ File sizes match originals
3648- ✅ Compression works properly
3649- ✅ No files missing
3650- ✅ Backup can be restored
3651
3652**File Count**:
3653```
3654Source directory: 31 files
3655Backup ZIP:       34 items (31 files + 3 directories)
3656Status:           COMPLETE ✅
3657```
3658
3659### Backup Best Practices
3660
3661**Always enabled by default** ✅
3662**Stored in accessible location** ✅
3663**Timestamped filenames** ✅
3664**Complete directory backup** ✅
3665**Easy to restore** ✅
3666
3667### Conclusion
3668
3669The backup system is working perfectly. The file sizes are appropriate and expected:
3670- Compressed size: ~240KB (good compression)
3671- Uncompressed size: ~1MB (all source files)
3672- All files included: YES ✅
3673- Growing size over versions: Normal (more features!)
3674
3675**Your backups are complete and reliable!** ��
3676
3677## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
3678
3679### �� Fixed: JavaScript Syntax Error in AJAX Function
3680- **Fixed:** ParseError on line 1947 (deleteBackup function)
3681- **Fixed:** Escaped all single quotes in JavaScript strings
3682- **Result:** AJAX backup deletion now works correctly!
3683
3684### What Was Wrong
3685
3686JavaScript inside PHP echo needs escaped quotes:
3687
3688**Before (broken)**:
3689```javascript
3690formData.append('action', 'delete_backup');  // PHP interprets quotes
3691```
3692
3693**After (fixed)**:
3694```javascript
3695formData.append(\'action\', \'delete_backup\');  // Escaped for PHP
3696```
3697
3698### All Quotes Escaped
3699
3700Fixed in deleteBackup function:
3701- ✅ FormData.append() calls
3702- ✅ fetch() URL
3703- ✅ querySelector() calls
3704- ✅ createElement() call
3705- ✅ All string literals
3706- ✅ Error messages
3707
3708**JavaScript now works!** ✓
3709
3710## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
3711
3712### �� Improved: Update Tab Further Refined
3713- **Moved:** Important Notes to very top (above upload)
3714- **Enhanced:** Delete backup now uses AJAX (no page refresh!)
3715- **Added:** Smooth fade-out animation when deleting backups
3716- **Added:** Success message after deletion
3717- **Auto-remove:** Backup section disappears if last backup deleted
3718- **Result:** Smoother, more polished experience!
3719
3720### New Layout Order
3721
3722**Final Order (v5.1.2)**:
3723```
37241. ⚠️ Important Notes (warnings at top)
37252. �� Upload New Version (with Clear Cache button)
37263. �� Current Version (info)
37274. �� Recent Changes (changelog)
37285. �� Available Backups (if any)
3729```
3730
3731### AJAX Backup Deletion
3732
3733**Before (v5.1.1)**:
3734- Click Delete → Page refreshes → Scroll back down
3735- Lose position on page
3736- Page reload is jarring
3737
3738**After (v5.1.2)**:
3739- Click Delete → Confirm
3740- Row fades out smoothly
3741- Row disappears
3742- Success message shows at top
3743- Success message fades after 3 seconds
3744- If last backup: entire section fades away
3745- **No page refresh!** ✓
3746
3747### Visual Flow
3748
3749**Delete Animation**:
3750```
37511. Click ��️ Delete
37522. Confirm dialog
37533. Row fades out (0.3s)
37544. Row removed
37555. Success message appears
37566. Message fades after 3s
3757```
3758
3759**If Last Backup**:
3760```
37611. Delete last backup
37622. Row fades out
37633. Entire "Available Backups" section fades
37644. Section removed
37655. Clean interface ✓
3766```
3767
3768### Success Message
3769
3770After deleting:
3771```
3772┌──────────────────────────────┐
3773│ ✓ Backup deleted: filename   │ ← Appears at top
3774└──────────────────────────────┘
3775   Fades after 3 seconds
3776```
3777
3778### Benefits
3779
3780**Important Notes First**:
3781- Warnings before actions ✓
3782- Read before uploading ✓
3783- Clear expectations ✓
3784
3785**AJAX Deletion**:
3786- No page refresh ✓
3787- Smooth animations ✓
3788- Stay in context ✓
3789- Professional feel ✓
3790
3791**Auto-Cleanup**:
3792- Empty list disappears ✓
3793- Clean interface ✓
3794- No clutter ✓
3795
3796### Technical Implementation
3797
3798**AJAX Request**:
3799```javascript
3800fetch('?do=admin&page=calendar&tab=update', {
3801    method: 'POST',
3802    body: formData
3803})
3804```
3805
3806**DOM Manipulation**:
3807- Fade out row
3808- Remove element
3809- Show success
3810- Remove section if empty
3811
3812**Smooth Transitions**:
3813- 300ms fade animations
3814- Clean visual feedback
3815- Professional polish
3816
3817## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
3818
3819### �� Improved: Update Tab Layout Reorganized
3820- **Moved:** Upload section to the top of the page
3821- **Added:** Clear Cache button next to Upload & Install button
3822- **Changed:** "Current Version" section moved below upload
3823- **Result:** Better workflow - upload first, then see version info!
3824
3825### New Layout Order
3826
3827**Before (v5.1.0)**:
3828```
38291. Clear Cache (standalone)
38302. Current Version
38313. Recent Changes
38324. Upload New Version
38335. Warning Box
38346. Backups
3835```
3836
3837**After (v5.1.1)**:
3838```
38391. Upload New Version (with Clear Cache button side-by-side)
38402. Warning Box
38413. Current Version
38424. Recent Changes
38435. Backups
3844```
3845
3846### Visual Result
3847
3848**Top of Update Tab**:
3849```
3850┌─────────────────────────────────┐
3851│ �� Upload New Version           │
3852│ ┌─────────────────────────────┐ │
3853│ │ [Choose File]               │ │
3854│ │ ☑ Create backup first       │ │
3855│ │ ┌──────────────┬──────────┐ │ │
3856│ │ │�� Upload &   │��️ Clear  │ │ │
3857│ │ │   Install    │   Cache  │ │ │
3858│ │ └──────────────┴──────────┘ │ │
3859│ └─────────────────────────────┘ │
3860│                                 │
3861│ ⚠️ Important Notes              │
3862│ • Will replace all files        │
3863│ • Config preserved              │
3864│                                 │
3865│ �� Current Version              │
3866│ Version: 5.1.1                  │
3867└─────────────────────────────────┘
3868```
3869
3870### Benefits
3871
3872**Better Workflow**:
3873- Primary action (upload) is first
3874- Clear cache conveniently next to install
3875- No scrolling to find upload button
3876- Logical top-to-bottom flow
3877
3878**Side-by-Side Buttons**:
3879- Upload & Install (green)
3880- Clear Cache (orange)
3881- Both common actions together
3882- Easy to access after upload
3883
3884**Improved UX**:
3885- Upload is most important → now at top
3886- Version info is reference → moved down
3887- Related actions grouped
3888- Cleaner organization
3889
3890### Button Layout
3891
3892```
3893┌──────────────────┬──────────────┐
3894│ �� Upload &      │ ��️ Clear     │
3895│    Install       │    Cache     │
3896│ (Green)          │ (Orange)     │
3897└──────────────────┴──────────────┘
3898```
3899
3900**Green = Primary Action**
3901**Orange = Secondary Action**
3902
3903Both easily accessible!
3904
3905## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
3906
3907### �� Changed: Admin Section Backgrounds Now Use __background__
3908- **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
3909- **Result:** Cleaner, more unified admin interface!
3910
3911### Background Usage Update
3912
3913**Before (v5.0.9)**:
3914```php
3915Section boxes: bg_alt (__background_alt__)
3916Content areas: bg (__background__)
3917```
3918
3919**After (v5.1.0)**:
3920```php
3921Section boxes: bg (__background__)
3922Content areas: bg (__background__)
3923```
3924
3925### Why This Change?
3926
3927**More unified appearance**:
3928- Sections and content use same background
3929- Creates cleaner, more cohesive look
3930- Borders provide visual separation
3931- Matches typical admin UI patterns
3932
3933**Template color hierarchy**:
3934```
3935__background_site__ → Outer page wrapper
3936__background__      → Content & sections (BOTH now use this)
3937__background_alt__  → Reserved for special panels/highlights
3938__background_neu__  → Special highlights
3939```
3940
3941### Visual Result
3942
3943**Light Template**:
3944```ini
3945__background__ = "#ffffff"
3946__background_alt__ = "#e8e8e8"
3947```
3948
3949**Before**:
3950```
3951Admin Page:
3952┌─────────────────────┐
3953│ ┌─────────────────┐ │
3954│ │ Section Box     │ │ ← Gray (#e8e8e8)
3955│ │ ┌─────────────┐ │ │
3956│ │ │ Content     │ │ │ ← White (#fff)
3957│ │ └─────────────┘ │ │
3958│ └─────────────────┘ │
3959└─────────────────────┘
3960Two-tone appearance
3961```
3962
3963**After**:
3964```
3965Admin Page:
3966┌─────────────────────┐
3967│ ┌─────────────────┐ │
3968│ │ Section Box     │ │ ← White (#fff)
3969│ │ ┌─────────────┐ │ │
3970│ │ │ Content     │ │ │ ← White (#fff)
3971│ │ └─────────────┘ │ │
3972│ └─────────────────┘ │
3973└─────────────────────┘
3974Unified, clean appearance
3975Borders provide separation
3976```
3977
3978**Dark Template**:
3979```ini
3980__background__ = "#2d2d2d"
3981__background_alt__ = "#3a3a3a"
3982```
3983
3984**After**:
3985```
3986Admin Page:
3987┌─────────────────────┐
3988│ ┌─────────────────┐ │
3989│ │ Section Box     │ │ ← Dark (#2d2d2d)
3990│ │ ┌─────────────┐ │ │
3991│ │ │ Content     │ │ │ ← Dark (#2d2d2d)
3992│ │ └─────────────┘ │ │
3993│ └─────────────────┘ │
3994└─────────────────────┘
3995Unified dark appearance
3996Accent borders provide definition
3997```
3998
3999### Benefits
4000
4001**Cleaner Look**:
4002- No more alternating gray/white
4003- More professional appearance
4004- Less visual noise
4005- Unified color scheme
4006
4007**Better Consistency**:
4008- Matches modern admin UI patterns
4009- Borders define sections, not colors
4010- Simpler, cleaner design
4011- Easier on the eyes
4012
4013**Template Friendly**:
4014- Works with any background color
4015- Light or dark templates
4016- Custom colors
4017- Always looks cohesive
4018
4019### All Sections Updated
4020
4021✅ Outlook Sync config sections
4022✅ Manage Events sections
4023✅ Update Plugin sections
4024✅ Themes tab sections
4025✅ Week start day section
4026✅ All form sections
4027
4028**Complete unified theming!** ��
4029
4030## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
4031
4032### �� Fixed: Syntax Error in Theme Cards
4033- **Fixed:** ParseError on line 4461 (Purple theme card)
4034- **Fixed:** Malformed ternary expressions from sed replacement
4035- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
4036- **Result:** Admin pages work correctly!
4037
4038### What Was Wrong
4039
4040The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions:
4041
4042**Before (broken)**:
4043```php
4044? '#9b59b6' : ' . $colors['border'] . ')
4045// Extra quote and dot created syntax error
4046```
4047
4048**After (fixed)**:
4049```php
4050? '#9b59b6' : $colors['border'])
4051// Clean ternary expression
4052```
4053
4054### All Theme Cards Fixed
4055
4056- ✅ Purple Dream card
4057- ✅ Professional Blue card
4058- ✅ Pink Bling card
4059- ✅ Wiki Default card
4060
4061### Now Working
4062
4063**Theme selection page loads** ✓
4064**All cards display properly** ✓
4065**Template colors applied** ✓
4066**No syntax errors** ✓
4067
4068## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
4069
4070### �� Fixed: Themes Tab Backgrounds & Correct Template Color Mapping
4071- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
4072- **Fixed:** Main background now uses `__background__` instead of `__background_site__`
4073- **Fixed:** Theme selection cards use template backgrounds
4074- **Fixed:** Week start options use template backgrounds
4075- **Result:** Perfect color mapping throughout admin!
4076
4077### Color Mapping Correction
4078
4079**Before (v5.0.7)**:
4080```php
4081bg: __background_site__  // Wrong - this is outer page bg
4082bg_alt: __background_alt__
4083```
4084
4085**After (v5.0.8)**:
4086```php
4087bg: __background__       // Correct - main content bg
4088bg_alt: __background_alt__
4089```
4090
4091### Why This Matters
4092
4093**Template color hierarchy**:
4094```
4095__background_site__ → Outer page/site background
4096__background__      → Main content area (CORRECT for admin)
4097__background_alt__  → Sections/panels
4098__background_neu__  → Highlights
4099```
4100
4101**Admin should use**:
4102- `__background__` for input fields, content areas
4103- `__background_alt__` for section boxes, panels
4104
4105### Themes Tab Fixed
4106
4107**Removed all hardcoded colors**:
4108```php
4109Before: '#ddd', '#fff', '#dee2e6'
4110After:  $colors['border'], $colors['bg'], $colors['border']
4111```
4112
4113**Now themed**:
4114- ✅ Week start section background
4115- ✅ Week start option backgrounds
4116- ✅ Theme card backgrounds
4117- ✅ Theme card borders
4118- ✅ All borders throughout
4119
4120### Visual Result
4121
4122**Light Template**:
4123```ini
4124__background__ = "#ffffff"
4125__background_alt__ = "#e8e8e8"
4126```
4127
4128**Admin Before (v5.0.7)**:
4129```
4130Input fields: #f5f5f5 (site bg - wrong)
4131Sections: #e8e8e8 (alt bg - correct)
4132```
4133
4134**Admin After (v5.0.8)**:
4135```
4136Input fields: #ffffff (content bg - correct!)
4137Sections: #e8e8e8 (alt bg - correct!)
4138```
4139
4140**Dark Template**:
4141```ini
4142__background__ = "#2d2d2d"
4143__background_alt__ = "#3a3a3a"
4144```
4145
4146**Admin After (v5.0.8)**:
4147```
4148Input fields: #2d2d2d (content bg - perfect!)
4149Sections: #3a3a3a (alt bg - perfect!)
4150```
4151
4152### Complete Themes Tab
4153
4154**Week Start Options**:
4155```
4156┌─────────────────────────┐
4157│ �� Week Start Day       │ ← bg_alt
4158│ ┌─────────┬───────────┐ │
4159│ │ Monday  │ Sunday    │ │ ← bg (when not selected)
4160│ └─────────┴───────────┘ │
4161└─────────────────────────┘
4162```
4163
4164**Theme Cards**:
4165```
4166┌─────────────────────────┐
4167│ �� Matrix Edition       │ ← bg (when not selected)
4168│ Classic green theme     │   border (when not selected)
4169└─────────────────────────┘
4170
4171┌═════════════════════════┐
4172│ �� Purple Dream         │ ← rgba green tint (when selected)
4173│ Elegant purple theme    │   #00cc07 border (when selected)
4174└═════════════════════════┘
4175```
4176
4177### Perfect Integration
4178
4179**All admin pages now**:
4180- Content areas: `__background__` ✓
4181- Section boxes: `__background_alt__` ✓
4182- Borders: `__border__` ✓
4183- Text: `__text__` ✓
4184
4185**Matches wiki perfectly**:
4186- Same white content areas
4187- Same gray section boxes
4188- Same border colors
4189- Same text colors
4190
4191### No More Issues
4192
4193**Fixed**:
4194- ❌ Site background on content areas → ✅ Content background
4195- ❌ Hardcoded white on themes tab → ✅ Template background
4196- ❌ Hardcoded borders (#ddd) → ✅ Template borders
4197
4198**Result**:
4199- Perfect color hierarchy ✓
4200- Correct background levels ✓
4201- Complete template integration ✓
4202
4203## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
4204
4205### �� Fixed: All Admin Backgrounds Use Template Colors
4206- **Fixed:** All section backgrounds use `__background_alt__`
4207- **Fixed:** All content backgrounds use `__background__`
4208- **Fixed:** All borders use `__border__`
4209- **Fixed:** All text uses `__text__`
4210- **Result:** Complete admin template integration!
4211
4212### All Replacements
4213
4214**Backgrounds**:
4215```php
4216Before: background: #f9f9f9
4217After:  background: ' . $colors['bg_alt'] . '
4218
4219Before: background: #fff / background: white
4220After:  background: ' . $colors['bg'] . '
4221```
4222
4223**Borders**:
4224```php
4225Before: border: 1px solid #ddd
4226Before: border: 1px solid #e0e0e0
4227Before: border: 1px solid #eee
4228After:  border: 1px solid ' . $colors['border'] . '
4229```
4230
4231**Text**:
4232```php
4233Before: color: #333
4234Before: color: #666
4235After:  color: ' . $colors['text'] . '
4236```
4237
4238### Complete Admin Coverage
4239
4240**All tabs now themed**:
4241- ✅ Manage Events tab
4242- ✅ Update Plugin tab
4243- ✅ Outlook Sync tab
4244- ✅ Themes tab
4245- ✅ Tab navigation
4246- ✅ All sections
4247- ✅ All inputs
4248- ✅ All borders
4249- ✅ All text
4250
4251### Visual Result
4252
4253**Light Template**:
4254```
4255Admin Page:
4256┌──────────────────────────┐
4257│ Tab Navigation           │ ← Template borders
4258├──────────────────────────┤
4259│ Section Headers          │ ← bg_alt (light gray)
4260│ ┌──────────────────────┐ │
4261│ │ Form Inputs          │ │ ← bg (white)
4262│ │ Content Areas        │ │
4263│ └──────────────────────┘ │
4264└──────────────────────────┘
4265All template colors! ✓
4266```
4267
4268**Dark Template**:
4269```
4270Admin Page:
4271┌──────────────────────────┐
4272│ Tab Navigation           │ ← Template borders
4273├──────────────────────────┤
4274│ Section Headers          │ ← bg_alt (dark gray)
4275│ ┌──────────────────────┐ │
4276│ │ Form Inputs          │ │ ← bg (darker)
4277│ │ Content Areas        │ │
4278│ └──────────────────────┘ │
4279└──────────────────────────┘
4280All template colors! ✓
4281```
4282
4283### Template Color Mapping
4284
4285**Used throughout admin**:
4286```
4287__background_site__ → $colors['bg']       (main backgrounds)
4288__background_alt__  → $colors['bg_alt']   (section backgrounds)
4289__text__            → $colors['text']     (all text)
4290__border__          → $colors['border']   (all borders)
4291__link__            → $colors['link']     (links - future)
4292```
4293
4294### Examples by Section
4295
4296**Manage Events**:
4297- Event list backgrounds: `bg_alt`
4298- Event item backgrounds: `bg`
4299- Borders: `border`
4300- Text: `text`
4301
4302**Update Plugin**:
4303- Section backgrounds: `bg_alt`
4304- Content areas: `bg`
4305- Borders: `border`
4306- Text: `text`
4307
4308**Outlook Sync**:
4309- Config sections: `bg_alt`
4310- Input fields: `bg`
4311- Borders: `border`
4312- Labels: `text`
4313
4314**Themes Tab**:
4315- Theme cards: `bg_alt`
4316- Preview areas: `bg`
4317- Borders: `border`
4318- Descriptions: `text`
4319
4320### Benefits
4321
4322**Seamless Integration**:
4323- Matches wiki admin area perfectly
4324- Same colors throughout wiki
4325- Professional appearance
4326- Consistent experience
4327
4328**Automatic Adaptation**:
4329- Light templates: Light admin
4330- Dark templates: Dark admin
4331- Custom templates: Uses custom colors
4332
4333**No White Boxes**:
4334- Every background themed
4335- Every border themed
4336- Every text themed
4337- Complete consistency
4338
4339### PERFECT HARMONY
4340
4341**Frontend (Calendar)**:
4342- Wiki theme uses style.ini4343- Perfect template match ✓
4344
4345**Backend (Admin)**:
4346- Reads same style.ini4347- Perfect template match ✓
4348
4349**Complete Unity**:
4350- Same colors everywhere ✓
4351- Seamless experience ✓
4352- Professional polish ✓
4353
4354## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
4355
4356### �� Enhanced: Month/Year Header & Admin Pages Use Template Colors
4357- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
4358- **Added:** Admin pages read template's style.ini file
4359- **Added:** `getTemplateColors()` function in admin class
4360- **Fixed:** Tab navigation uses template text and border colors
4361- **Result:** Complete template integration everywhere!
4362
4363### Month/Year Header
4364
4365**Before**:
4366```php
4367color: __text__  // Same as primary text
4368```
4369
4370**After (Wiki Theme)**:
4371```php
4372color: __text_neu__  // Dimmed text (subtle)
4373```
4374
4375### Admin Pages Enhancement
4376
4377**New `getTemplateColors()` function**:
4378- Reads template's style.ini file
4379- Extracts color replacements
4380- Provides colors to all admin tabs
4381- Falls back to sensible defaults
4382
4383**Colors used**:
4384```php
4385bg: __background_site__
4386bg_alt: __background_alt__
4387text: __text__
4388border: __border__
4389link: __link__
4390```
4391
4392**Applied to**:
4393- Tab navigation borders
4394- Tab text colors
4395- All admin sections
4396- Ready for future enhancements
4397
4398### Visual Result
4399
4400**Calendar Header**:
4401```
4402┌────────────────────┐
4403│ ‹ February 2026 › │ ← __text_neu__ (dimmed)
4404└────────────────────┘
4405Subtle and elegant ✓
4406```
4407
4408**Admin Navigation**:
4409```
4410�� Manage Events | �� Update | ⚙️ Config | �� Themes
4411─────────────────────────────────────────────────
4412Active tab: Green (#00cc07)
4413Inactive tabs: Template text color
4414Border: Template border color
4415```
4416
4417### Template Integration
4418
4419**Light Template**:
4420```ini
4421__text_neu__ = "#666666"
4422__border__ = "#cccccc"
4423```
4424**Result**:
4425- Month/Year: Medium gray (subtle)
4426- Admin borders: Light gray
4427- Tab text: Dark gray
4428
4429**Dark Template**:
4430```ini
4431__text_neu__ = "#999999"
4432__border__ = "#555555"
4433```
4434**Result**:
4435- Month/Year: Light gray (subtle)
4436- Admin borders: Medium gray
4437- Tab text: Bright gray
4438
4439### Benefits
4440
4441**Calendar Frontend**:
4442- Month/Year header more subtle
4443- Better visual hierarchy
4444- Less prominent, more elegant
4445
4446**Admin Backend**:
4447- Uses template colors
4448- Matches wiki admin area
4449- Consistent experience
4450- Professional appearance
4451
4452### Future-Ready
4453
4454The `getTemplateColors()` function is now available for:
4455- ✅ Tab navigation (implemented)
4456- �� Section backgrounds (ready)
4457- �� Button colors (ready)
4458- �� Input fields (ready)
4459- �� Success/error messages (ready)
4460
4461**Foundation laid for complete admin theming!** ��
4462
4463## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
4464
4465### �� Fixed: Add Event Bar & Section Headers Use Template Colors
4466- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
4467- **Fixed:** "Today" header uses `__text_neu__`
4468- **Fixed:** "Tomorrow" header uses `__text__`
4469- **Fixed:** "Important Events" header uses `__border__`
4470- **Result:** Perfect template color integration!
4471
4472### All Changes
4473
4474**Add Event Bar (Wiki Theme)**:
4475
4476**Before**:
4477```php
4478background: #3498db  // Generic blue
4479```
4480
4481**After**:
4482```php
4483background: __background_alt__  // Template alternate bg
4484text: __text__                  // Template text color
4485hover: __background_neu__       // Template neutral bg
4486```
4487
4488**Section Headers (Wiki Theme)**:
4489
4490**Before**:
4491```php
4492Today: #ff9800           // Orange
4493Tomorrow: #4caf50        // Green
4494Important Events: #9b59b6 // Purple
4495```
4496
4497**After**:
4498```php
4499Today: __text_neu__      // Template dimmed text
4500Tomorrow: __text__       // Template primary text
4501Important Events: __border__ // Template border color
4502```
4503
4504### Visual Result
4505
4506**Wiki Default Theme**:
4507```
4508Add Event Bar:
4509┌────────────────┐
4510│  + ADD EVENT   │ ← Template alt background
4511└────────────────┘
4512
4513Sections:
4514━━━━━━━━━━━━━━━━
4515Today              ← Dimmed text color (__text_neu__)
4516• Team Meeting
4517
4518Tomorrow           ← Primary text color (__text__)
4519• Code Review
4520
4521Important Events   ← Border color (__border__)
4522• Project Deadline
4523```
4524
4525### Example with DokuWiki Default Template
4526
4527**Template colors**:
4528```ini
4529__background_alt__ = "#e8e8e8"
4530__text__ = "#333333"
4531__text_neu__ = "#666666"
4532__border__ = "#cccccc"
4533```
4534
4535**Calendar result**:
4536```
4537Add Event Bar: Light gray (#e8e8e8)
4538Today header: Medium gray (#666666)
4539Tomorrow header: Dark gray (#333333)
4540Important Events header: Border gray (#cccccc)
4541```
4542
4543### Example with Dark Template
4544
4545**Template colors**:
4546```ini
4547__background_alt__ = "#2d2d2d"
4548__text__ = "#e0e0e0"
4549__text_neu__ = "#999999"
4550__border__ = "#555555"
4551```
4552
4553**Calendar result**:
4554```
4555Add Event Bar: Dark gray (#2d2d2d)
4556Today header: Light gray (#999999)
4557Tomorrow header: Bright gray (#e0e0e0)
4558Important Events header: Medium gray (#555555)
4559```
4560
4561### Perfect Harmony
4562
4563All sidebar elements now use template colors:
4564- ✅ Add Event bar background
4565- ✅ Add Event bar text
4566- ✅ Today section header
4567- ✅ Tomorrow section header
4568- ✅ Important Events header
4569- ✅ Calendar cells
4570- ✅ Grid backgrounds
4571- ✅ All borders
4572
4573**Complete template integration!** ��
4574
4575## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
4576
4577### �� Fixed: Calendar Cells Use Correct Template Color
4578- **Fixed:** Calendar cells now use `__background__` from template
4579- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
4580- **Result:** Calendar cells match main content area background!
4581
4582### Color Mapping Update
4583
4584**Before (v5.0.3)**:
4585```php
4586cell_bg: __background_neu__  // Wrong - this is for neutral/alternate
4587```
4588
4589**After (v5.0.4)**:
4590```php
4591cell_bg: __background__      // Correct - main content background
4592```
4593
4594### Template Color Usage
4595
4596**Wiki Default theme now uses**:
4597```
4598__background_site__ → Overall page background
4599__background__      → Calendar cells (main content bg)
4600__background_alt__  → Grid background, headers
4601__background_neu__  → Today cell highlight
4602__text__            → Primary text
4603__text_neu__        → Dimmed text
4604__link__            → Links, bright text
4605__border__          → All borders
4606```
4607
4608### Visual Result
4609
4610**Before**:
4611```
4612Calendar with template colors:
4613┌─────┬─────┬─────┐
4614│ Mon │ Tue │ Wed │
4615├─────┼─────┼─────┤
4616│  8  │  9  │ 10  │ ← Neutral gray (wrong)
4617└─────┴─────┴─────┘
4618```
4619
4620**After**:
4621```
4622Calendar with template colors:
4623┌─────┬─────┬─────┐
4624│ Mon │ Tue │ Wed │
4625├─────┼─────┼─────┤
4626│  8  │  9  │ 10  │ ← White/content bg (correct!)
4627└─────┴─────┴─────┘
4628```
4629
4630### Example Template Colors
4631
4632**DokuWiki Default**:
4633```ini
4634__background__ = "#ffffff"
4635```
4636**Result**: White calendar cells ✓
4637
4638**Dark Template**:
4639```ini
4640__background__ = "#2d2d2d"
4641```
4642**Result**: Dark calendar cells ✓
4643
4644**Custom Template**:
4645```ini
4646__background__ = "#f9f9f9"
4647```
4648**Result**: Custom color cells ✓
4649
4650### Perfect Matching
4651
4652Calendar cells now match:
4653- ✅ Main content area background
4654- ✅ Article/page background
4655- ✅ Content box background
4656- ✅ Same as wiki text background
4657
4658**Seamless integration!** ��
4659
4660## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
4661
4662### �� Enhanced: Wiki Default Theme Reads Template Colors
4663- **Added:** Function to read colors from DokuWiki template's style.ini file
4664- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
4665- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
4666- **Uses:** Actual template colors instead of CSS variables
4667- **Result:** Perfect color matching with any DokuWiki template!
4668
4669### How It Works
4670
4671**New Function: `getWikiTemplateColors()`**
4672
46731. **Detects** current DokuWiki template name
46742. **Reads** the template's `style.ini` file
46753. **Parses** color replacements section
46764. **Maps** template colors to calendar theme
46775. **Falls back** to CSS variables if file not found
4678
4679### Colors Read from style.ini
4680
4681**Template color replacements used**:
4682```php
4683__background_site__  → bg, header_bg
4684__background_alt__   → grid_bg, cell_today_bg
4685__background_neu__   → cell_bg
4686__text__             → text_primary
4687__text_neu__         → text_dim
4688__link__             → text_bright
4689__border__           → border, grid_border
4690```
4691
4692### Example style.ini Mapping
4693
4694**Template style.ini**:
4695```ini
4696[replacements]
4697__background_site__ = "#f8f9fa"
4698__background_alt__  = "#e9ecef"
4699__background_neu__  = "#dee2e6"
4700__text__            = "#212529"
4701__text_neu__        = "#6c757d"
4702__link__            = "#0d6efd"
4703__border__          = "#ced4da"
4704```
4705
4706**Calendar theme result**:
4707```php
4708bg: #f8f9fa
4709header_bg: #e9ecef
4710grid_bg: #e9ecef
4711cell_bg: #dee2e6
4712text_primary: #212529
4713text_dim: #6c757d
4714text_bright: #0d6efd
4715border: #ced4da
4716grid_border: #ced4da
4717```
4718
4719### Before vs After
4720
4721**Before (v5.0.2)**:
4722```
4723Wiki Default theme used:
4724- CSS variables (var(--__background__, #fff))
4725- Required browser CSS variable support
4726- Fallback to generic colors
4727```
4728
4729**After (v5.0.3)**:
4730```
4731Wiki Default theme uses:
4732- Actual colors from template's style.ini
4733- Exact template color values
4734- No CSS variable dependency
4735- Perfect color matching!
4736```
4737
4738### File Location Priority
4739
4740Checks in order:
47411. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
47422. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
47433. Falls back to CSS variables if neither found
4744
4745### Benefits
4746
4747**More accurate colors**:
4748- Uses exact template color values ✓
4749- No CSS variable interpolation ✓
4750- Consistent across all browsers ✓
4751
4752**Better compatibility**:
4753- Works with older browsers ✓
4754- No CSS variable support needed ✓
4755- Direct color values ✓
4756
4757**Perfect matching**:
4758- Reads template's actual colors ✓
4759- Same colors as wiki pages ✓
4760- Seamless integration ✓
4761
4762### Template Examples
4763
4764**DokuWiki Default Template**:
4765```
4766Reads: lib/tpl/dokuwiki/style.ini
4767Gets: Default DokuWiki colors
4768Result: Perfect classic DokuWiki look
4769```
4770
4771**Bootstrap Template**:
4772```
4773Reads: lib/tpl/bootstrap3/style.ini
4774Gets: Bootstrap color scheme
4775Result: Perfect Bootstrap integration
4776```
4777
4778**Custom Template**:
4779```
4780Reads: conf/tpl/mycustom/style.ini
4781Gets: Your custom colors
4782Result: Perfect custom theme match
4783```
4784
4785### Fallback Chain
4786
47871. **Try** reading style.ini from template
47882. **If found** → Use exact colors from file
47893. **If not found** → Use CSS variables
47904. **If no CSS vars** → Use fallback colors
4791
4792**Always works, always matches!** ✓
4793
4794## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
4795
4796### �� Fixed: Wiki Default Theme Day Panel Colors
4797- **Fixed:** Day popup panel now uses DokuWiki CSS variables
4798- **Fixed:** Panel background matches wiki theme
4799- **Fixed:** Panel header matches wiki theme
4800- **Fixed:** Border colors use wiki theme
4801- **Fixed:** Text colors use wiki theme
4802- **Result:** Perfect integration with DokuWiki templates!
4803
4804### All Changes
4805
4806**Day Panel Colors (Wiki Default)**:
4807
4808**Before**:
4809```php
4810background: rgba(36, 36, 36, 0.5)  // Dark gray (wrong!)
4811header: #3498db                     // Blue (wrong!)
4812```
4813
4814**After**:
4815```php
4816background: var(--__background__, #fff)
4817header: var(--__background_alt__, #e8e8e8)
4818header_text: var(--__text__, #333)
4819border: var(--__border__, #ccc)
4820shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
4821```
4822
4823**Event Colors (Wiki Default)**:
4824```php
4825event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
4826border_color: var(--__border__, rgba(204, 204, 204, 0.3))
4827bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15)
4828```
4829
4830### Before vs After
4831
4832**Before (v5.0.1)**:
4833```
4834Wiki Default - Click Week Cell:
4835┌────────────────┐
4836│ Monday, Feb 8  │ ← Blue header (wrong)
4837├────────────────┤
4838│ Team Meeting   │ ← Dark gray bg (wrong)
4839│ 2:00 PM        │
4840└────────────────┘
4841Doesn't match wiki theme
4842```
4843
4844**After (v5.0.2)**:
4845```
4846Wiki Default - Click Week Cell:
4847
4848Light Wiki Theme:
4849┌────────────────┐
4850│ Monday, Feb 8  │ ← Light gray header ✓
4851├────────────────┤
4852│ Team Meeting   │ ← White bg ✓
4853│ 2:00 PM        │   Dark text ✓
4854└────────────────┘
4855
4856Dark Wiki Theme:
4857┌────────────────┐
4858│ Monday, Feb 8  │ ← Dark header ✓
4859├────────────────┤
4860│ Team Meeting   │ ← Dark bg ✓
4861│ 2:00 PM        │   Light text ✓
4862└────────────────┘
4863
4864Perfectly matches wiki!
4865```
4866
4867### CSS Variables Used
4868
4869**Wiki Default theme now uses**:
4870- `--__background__` - Main background (panel body)
4871- `--__background_alt__` - Alternate bg (panel header, events)
4872- `--__text__` - Text color (header text)
4873- `--__border__` - Border color (panel border, event borders)
4874
4875**With fallbacks**:
4876```css
4877var(--__background__, #fff)           /* white fallback */
4878var(--__background_alt__, #e8e8e8)    /* light gray fallback */
4879var(--__text__, #333)                 /* dark text fallback */
4880var(--__border__, #ccc)               /* gray border fallback */
4881```
4882
4883### Perfect Adaptation
4884
4885**Light Templates**:
4886- Light panel backgrounds ✓
4887- Dark text ✓
4888- Subtle borders ✓
4889- Clean appearance ✓
4890
4891**Dark Templates**:
4892- Dark panel backgrounds ✓
4893- Light text ✓
4894- Visible borders ✓
4895- Perfect contrast ✓
4896
4897**Custom Templates**:
4898- Uses template's CSS variables ✓
4899- Automatic adaptation ✓
4900- Seamless integration ✓
4901
4902### Now Truly Adaptive
4903
4904Wiki Default theme now properly uses DokuWiki CSS variables for:
4905- ✅ Calendar grid
4906- ✅ Sidebar widget
4907- ✅ Event list
4908- ✅ **Day panel** ← v5.0.2!
4909- ✅ All backgrounds
4910- ✅ All text
4911- ✅ All borders
4912
4913**Complete wiki integration!** ��
4914
4915## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
4916
4917### �� Enhanced: Time Conflict Tooltips Now Themed
4918- **Fixed:** Conflict tooltips now match calendar theme
4919- **Added:** Theme-aware background, border, text colors
4920- **Added:** Theme-aware shadow effects
4921- **Result:** Complete visual consistency!
4922
4923### Tooltip Theming
4924
4925**Now uses theme colors for**:
4926- Background: Theme background color
4927- Border: Theme border color
4928- Header text: Theme primary text color
4929- Item text: Theme dim text color
4930- Shadow: Theme shadow color
4931
4932### Before vs After
4933
4934**Before (v5.0.0)**:
4935```
4936Hover ⚠️ badge:
4937┌─────────────────┐
4938│ ⚠️ Time Conflicts│ ← Default colors
4939│ • Event A       │
4940│ • Event B       │
4941└─────────────────┘
4942```
4943
4944**After (v5.0.1)**:
4945```
4946Matrix Theme:
4947┌─────────────────┐
4948│ ⚠️ Time Conflicts│ ← Green header
4949│ • Event A       │ ← Green text
4950│ • Event B       │   Dark green bg
4951└─────────────────┘
4952
4953Purple Theme:
4954┌─────────────────┐
4955│ ⚠️ Time Conflicts│ ← Purple header
4956│ • Event A       │ ← Purple text
4957│ • Event B       │   Dark purple bg
4958└─────────────────┘
4959
4960Professional Theme:
4961┌─────────────────┐
4962│ ⚠️ Time Conflicts│ ← Blue header
4963│ • Event A       │ ← Dark text
4964│ • Event B       │   Light bg
4965└─────────────────┘
4966
4967Pink Theme:
4968┌─────────────────┐
4969│ ⚠️ Time Conflicts│ ← Pink header ✨
4970│ • Event A       │ ← Pink text
4971│ • Event B       │   Dark pink bg ��
4972└─────────────────┘
4973
4974Wiki Default:
4975┌─────────────────┐
4976│ ⚠️ Time Conflicts│ ← Adapts to wiki
4977│ • Event A       │ ← Wiki colors
4978│ • Event B       │
4979└─────────────────┘
4980```
4981
4982### Now 100% Complete
4983
4984**Every tooltip themed**:
4985- ✅ Conflict tooltips
4986- ✅ All other tooltips (if any)
4987- ✅ Perfect consistency
4988
4989**Absolute perfection!** ✨
4990
4991## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
4992
4993### �� Major Milestone: Version 5.0
4994
4995This is a major release representing the completion of comprehensive theming across the entire calendar plugin. Every visual element has been carefully themed for consistency and beauty.
4996
4997### Complete Feature Set
4998
4999**5 Beautiful Themes**:
5000- �� Matrix Edition (Green with glow)
5001- �� Purple Dream (Elegant purple)
5002- �� Professional Blue (Clean and modern)
5003- �� Pink Bling (Maximum sparkle)
5004- �� Wiki Default (Auto-adapts to your DokuWiki theme)
5005
5006**100% Theme Coverage**:
5007- ✅ Calendar grid and cells
5008- ✅ Event boxes and borders
5009- ✅ Sidebar widget
5010- ✅ Event list panel
5011- ✅ Search functionality
5012- ✅ Edit/Add dialogs (complete)
5013- ✅ Day popup dialogs
5014- ✅ Month picker
5015- ✅ All text (primary, dim, bright)
5016- ✅ All buttons
5017- ✅ All inputs and forms
5018- ✅ All checkboxes
5019- ✅ All borders
5020- ✅ All badges and labels
5021- ✅ Event highlight effects
5022
5023**Perfect Visual Consistency**:
5024- No white pixels anywhere
5025- No unthemed elements
5026- No default colors
5027- Complete visual unity
5028
5029### Major Improvements in v5.0
5030
50311. **Complete Dialog Theming** (v4.8.5-4.8.7)
5032   - Edit event dialog fully themed
5033   - Day popup dialog fully themed
5034   - All form inputs themed
5035   - All checkboxes themed
5036   - All buttons themed
5037
50382. **Event Box Border Perfection** (v4.8.6)
5039   - All 4 borders themed (top, right, bottom, left)
5040   - Sidebar event dividers themed
5041   - Past Events toggle border themed
5042
50433. **Checkbox Field Borders** (v4.9.0)
5044   - Repeating Event section border themed
5045   - Task checkbox section border themed
5046
50474. **Wiki Default Theme** (v4.10.0)
5048   - New 5th theme
5049   - Uses DokuWiki CSS variables
5050   - Auto-adapts to any wiki template
5051   - Perfect for seamless integration
5052
50535. **Clean Text Appearance** (v4.11.0)
5054   - Removed text glow from Matrix
5055   - Removed text glow from Purple
5056   - Removed text glow from Professional
5057   - Removed text glow from Wiki Default
5058   - Kept text glow on Pink Bling only
5059
50606. **Event Highlight Effects** (v4.12.0-4.12.1)
5061   - Theme-aware highlight glow
5062   - Click event bar → event glows
5063   - 3-second themed glow effect
5064   - Smooth animations
5065
5066### See RELEASE_NOTES.md for Complete Details
5067
5068For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release.
5069
5070## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
5071
5072### �� Fixed: Event Highlight Now Working
5073- **Fixed:** Used setProperty() to properly apply !important styles
5074- **Added:** Console logging for debugging
5075- **Fixed:** Proper style application with important flag
5076- **Result:** Highlight glow now works correctly!
5077
5078### Technical Fix
5079
5080**Before (not working)**:
5081```javascript
5082eventItem.style.background = color + ' !important'; // Doesn't work
5083```
5084
5085**After (working)**:
5086```javascript
5087eventItem.style.setProperty('background', color, 'important'); // Works!
5088```
5089
5090### Added Debug Logging
5091
5092Console now shows:
5093- "Highlighting event: [calId] [eventId] [date]"
5094- "Found event item: [element]"
5095- "Theme: [theme name]"
5096- "Highlight colors: [bg] [shadow]"
5097- "Applied highlight styles"
5098- "Removing highlight" (after 3 seconds)
5099
5100### Now Working
5101
5102Click any event bar → Event glows with theme colors ✓
5103
5104## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
5105
5106### ✨ Enhanced: Event Click Highlight Now Theme-Aware
5107- **Fixed:** Restored event highlight glow when clicking calendar bars
5108- **Improved:** Highlight now matches each theme's colors
5109- **Added:** Stronger glow effect for better visibility
5110- **Duration:** 3 seconds with smooth fade
5111- **Result:** Beautiful themed highlights for all themes!
5112
5113### How It Works
5114
5115When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow:
5116
5117**Matrix Theme**:
5118```javascript
5119Background: Darker green (#1a3d1a)
5120Glow: Double green glow (0 0 20px + 0 0 40px)
5121Color: rgba(0, 204, 7, 0.8)
5122```
5123
5124**Purple Theme**:
5125```javascript
5126Background: Darker purple (#3d2b4d)
5127Glow: Double purple glow
5128Color: rgba(155, 89, 182, 0.8)
5129```
5130
5131**Professional Theme**:
5132```javascript
5133Background: Light blue (#e3f2fd)
5134Glow: Single blue glow
5135Color: rgba(74, 144, 226, 0.4)
5136```
5137
5138**Pink Theme**:
5139```javascript
5140Background: Darker pink (#3d2030)
5141Glow: Double pink glow ✨��
5142Color: rgba(255, 20, 147, 0.8)
5143```
5144
5145**Wiki Theme**:
5146```javascript
5147Background: var(--__background_neu__)
5148Glow: Blue glow (adapts to wiki)
5149Color: rgba(43, 115, 183, 0.4)
5150```
5151
5152### Visual Examples
5153
5154**Matrix - Click Event**:
5155```
5156Calendar:
5157┌─────────────┐
5158│ 2:00 PM │ ← Click this bar
5159└─────────────┘
5160
5161Event List:
5162╔═════════════════════╗
5163║ Team Meeting        ║ ← GLOWS GREEN
5164║ 2:00 PM             ║    for 3 seconds
5165╚═════════════════════╝
5166   ↑↑↑ Strong green glow ↑↑↑
5167```
5168
5169**Purple - Click Event**:
5170```
5171Calendar:
5172┌─────────────┐
5173│ 4:00 PM │ ← Click
5174└─────────────┘
5175
5176Event List:
5177╔═════════════════════╗
5178║ Code Review         ║ ← GLOWS PURPLE
5179║ 4:00 PM             ║    for 3 seconds
5180╚═════════════════════╝
5181   ↑↑↑ Strong purple glow ↑↑↑
5182```
5183
5184**Pink - Click Event**:
5185```
5186Calendar:
5187┌─────────────┐
5188│ 1:00 PM │ ← Click
5189└─────────────┘
5190
5191Event List:
5192╔═════════════════════╗
5193║ Lunch Date ��       ║ ← GLOWS PINK
5194║ 1:00 PM ✨          ║    for 3 seconds
5195╚═════════════════════╝
5196   ↑↑↑ MAXIMUM SPARKLE ↑↑↑
5197```
5198
5199### Glow Specifications
5200
5201**Matrix**:
5202- Background: Dark green
5203- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
5204- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
5205- Effect: Strong green pulse
5206
5207**Purple**:
5208- Background: Dark purple
5209- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
5210- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
5211- Effect: Strong purple pulse
5212
5213**Professional**:
5214- Background: Light blue
5215- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
5216- Effect: Subtle blue glow
5217
5218**Pink**:
5219- Background: Dark pink
5220- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
5221- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
5222- Effect: MAXIMUM SPARKLE ✨��
5223
5224**Wiki**:
5225- Background: Theme neutral color
5226- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
5227- Effect: Adapts to wiki theme
5228
5229### User Experience
5230
5231**Click event bar** → Event highlights with themed glow
5232**Auto-scroll** → Event scrolls into view smoothly
5233**3 second glow** → Fade out after 3 seconds
5234**Smooth transition** → 0.3s ease-in-out
5235
5236### Perfect for Finding Events
5237
5238**Large event lists**: Quickly locate the clicked event ✓
5239**Visual feedback**: Know which event you clicked ✓
5240**Theme consistency**: Matches your chosen theme ✓
5241**Smooth animation**: Professional appearance ✓
5242
5243### All Themes Covered
5244
5245- ✅ Matrix: Green glow
5246- ✅ Purple: Purple glow
5247- ✅ Professional: Blue glow
5248- ✅ Pink: Maximum pink sparkle
5249- ✅ Wiki: Adaptive glow
5250
5251**Click any event bar and watch it glow!** ✨
5252
5253## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
5254
5255### �� Changed: Text Glow Now Pink-Only
5256- **Removed:** Text shadow/glow from Matrix theme
5257- **Removed:** Text shadow/glow from Purple theme
5258- **Removed:** Text shadow/glow from Professional theme (already had none)
5259- **Removed:** Text shadow/glow from Wiki Default theme
5260- **Kept:** Text shadow/glow ONLY on Pink Bling theme
5261- **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
5262
5263### All Changes
5264
5265**Before (Matrix, Purple)**:
5266```css
5267text-shadow: 0 0 2px $text_color; /* Glow effect */
5268```
5269
5270**After (Matrix, Purple, Professional, Wiki)**:
5271```css
5272text-shadow: none; /* Clean, no glow */
5273```
5274
5275**Pink Bling (unchanged)**:
5276```css
5277text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
5278```
5279
5280### Text Shadow Removed From
5281
5282**Sidebar day numbers**: No glow ✓
5283**Event titles**: No glow ✓
5284**Event dates**: No glow ✓
5285**Add Event button**: No glow ✓
5286**Day popup events**: No glow ✓
5287
5288### Before vs After
5289
5290**BEFORE (Matrix)**:
5291```
5292Event Title ✨ ← Glowing green text
52932:00 PM ✨     ← Glowing text
5294```
5295
5296**AFTER (Matrix)**:
5297```
5298Event Title    ← Clean green text
52992:00 PM        ← Clean text
5300```
5301
5302**Pink Bling (Still Glows)**:
5303```
5304Event Title ✨�� ← Still glowing!
53052:00 PM ✨     ← Maximum sparkle!
5306```
5307
5308### Theme Appearances
5309
5310**�� Matrix Edition**:
5311- Clean green text
5312- No glow effects
5313- Professional appearance
5314- Still has border glow
5315
5316**�� Purple Dream**:
5317- Clean purple text
5318- No glow effects
5319- Elegant appearance
5320- Still has border glow
5321
5322**�� Professional Blue**:
5323- Clean text (unchanged)
5324- No glow effects
5325- Modern appearance
5326
5327**�� Pink Bling**:
5328- Glowing pink text ✨
5329- Maximum glow effects ��
5330- Sparkle everywhere!
5331- All the bling!
5332
5333**�� Wiki Default**:
5334- Clean text
5335- No glow effects
5336- Matches wiki theme
5337
5338### Glow Effects Remaining
5339
5340**Border/box glow**: Still present on all themes ✓
5341**Pink text glow**: Only on Pink Bling ✓
5342**Shadow effects**: Still on buttons/boxes5343
5344**Only TEXT glow removed from non-pink themes!**
5345
5346### Result
5347
5348**Cleaner, more professional look** for:
5349- Matrix ✓
5350- Purple ✓
5351- Professional ✓
5352- Wiki Default ✓
5353
5354**Maximum sparkle** for:
5355- Pink Bling ✨��✓
5356
5357**Best of both worlds!** ��
5358
5359## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
5360
5361### �� New: Wiki Default Theme
5362- **Added:** 5th theme that automatically matches your DokuWiki template
5363- **Uses:** CSS variables from your wiki theme
5364- **Adapts:** Automatically works with light and dark themes
5365- **Perfect:** Seamless integration with any DokuWiki template
5366
5367### How It Works
5368
5369**Wiki theme uses DokuWiki CSS variables**:
5370```css
5371bg: var(--__background_site__, #f5f5f5)
5372border: var(--__border__, #ccc)
5373text_primary: var(--__text__, #333)
5374text_bright: var(--__link__, #2b73b7)
5375text_dim: var(--__text_neu__, #666)
5376cell_bg: var(--__background__, #fff)
5377grid_border: var(--__border__, #ccc)
5378```
5379
5380**With fallbacks for older DokuWiki versions**:
5381- If CSS variables exist → Use them ✓
5382- If not available → Use fallback values ✓
5383
5384### All 5 Themes
5385
5386**1. �� Matrix Edition** (Default)
5387- Dark green with neon glow
5388- Matrix-style effects
5389- Original theme
5390
5391**2. �� Purple Dream**
5392- Rich purple with violet accents
5393- Elegant and sophisticated
5394- Soft glow effects
5395
5396**3. �� Professional Blue**
5397- Clean blue and grey
5398- Modern professional
5399- No glow effects
5400
5401**4. �� Pink Bling**
5402- Glamorous hot pink
5403- Maximum sparkle ✨
5404- Hearts and diamonds
5405
5406**5. �� Wiki Default** ← NEW!
5407- Matches your wiki template
5408- Auto-adapts to light/dark
5409- Perfect integration
5410
5411### Examples
5412
5413**Light Wiki Template**:
5414```
5415Wiki Default theme shows:
5416- Light backgrounds (#f5f5f5)
5417- Dark text (#333)
5418- Light inputs (#fff)
5419- Gray borders (#ccc)
5420
5421Matches perfectly! ✓
5422```
5423
5424**Dark Wiki Template**:
5425```
5426Wiki Default theme shows:
5427- Dark backgrounds (from template)
5428- Light text (from template)
5429- Dark inputs (from template)
5430- Dark borders (from template)
5431
5432Matches perfectly! ✓
5433```
5434
5435**Bootstrap Template**:
5436```
5437Uses Bootstrap's colors
5438Matches perfectly! ✓
5439```
5440
5441**Material Template**:
5442```
5443Uses Material's colors
5444Matches perfectly! ✓
5445```
5446
5447### CSS Variables Used
5448
5449**DokuWiki provides**:
5450- `--__background_site__`: Page background
5451- `--__background_alt__`: Section backgrounds
5452- `--__background__`: Content backgrounds
5453- `--__text__`: Primary text color
5454- `--__link__`: Link color
5455- `--__text_neu__`: Dimmed text
5456- `--__border__`: Border color
5457- `--__background_neu__`: Neutral background
5458
5459**All with fallbacks**:
5460```css
5461var(--__background_site__, #f5f5f5)
5462/* Falls back to light gray if variable doesn't exist */
5463```
5464
5465### Perfect for Every Template
5466
5467**Custom templates**: Automatically adapts ✓
5468**Light themes**: Perfect match ✓
5469**Dark themes**: Perfect match ✓
5470**Any DokuWiki version**: Works with fallbacks ✓
5471
5472### Complete Theme Collection
5473
5474Now with **5 gorgeous themes**:
5475- 3 dark themes (Matrix, Purple, Pink)
5476- 1 light theme (Professional)
5477- 1 adaptive theme (Wiki Default) ← NEW!
5478
5479**Something for everyone!** ��
5480
5481## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
5482
5483### �� Fixed: Checkbox Field Borders Themed
5484- **Fixed:** Added border-color to checkbox field divs
5485- **Fixed:** Repeating Event section border
5486- **Fixed:** Task checkbox section border
5487- **Result:** No white borders around checkboxes!
5488
5489### Changes
5490
5491**Checkbox Field Border Styling**:
5492
5493**Before**:
5494```html
5495<div class="form-field-checkbox"
5496     style="background: $bg !important;">
5497<!-- Border shows white ✗ -->
5498```
5499
5500**After**:
5501```php
5502<div class="form-field-checkbox"
5503     style="background: $bg !important;
5504            border-color: $grid_border !important;">
5505<!-- Border themed ✓ -->
5506```
5507
5508### Before vs After
5509
5510**BEFORE (v4.8.8)**:
5511```
5512Edit Dialog:
5513┌──────────────────┐
5514│ ☑ Repeating     ║│ ← White border ✗
5515└──────────────────┘
5516┌──────────────────┐
5517│ ☑ Task checkbox ║│ ← White border ✗
5518└──────────────────┘
5519```
5520
5521**AFTER (v4.9.0)**:
5522```
5523Matrix Edit Dialog:
5524┌──────────────────┐
5525│ ☑ Repeating      │ ← Green border ✓
5526└──────────────────┘
5527┌──────────────────┐
5528│ ☑ Task checkbox  │ ← Green border ✓
5529└──────────────────┘
5530```
5531
5532### ABSOLUTE PERFECTION ACHIEVED
5533
5534**Every element themed**:
5535- ✅ All inputs
5536- ✅ All labels
5537- ✅ All sections
5538- ✅ **Checkbox field borders** ← v4.9.0!
5539- ✅ All buttons
5540- ✅ All checkboxes
5541- ✅ No white anywhere
5542
5543**100% COMPLETE!** ��✨
5544
5545## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
5546
5547### �� Fixed: Checkbox Field Borders Themed
5548- **Fixed:** Added border-color to checkbox field divs
5549- **Fixed:** Repeating Event section border
5550- **Fixed:** Task checkbox section border
5551- **Result:** No white borders around checkboxes!
5552
5553### �� Fixed: Admin Sections Respect Wiki Theme
5554- **Fixed:** All admin backgrounds use CSS variables
5555- **Fixed:** Text colors use wiki text color
5556- **Fixed:** Borders use wiki border color
5557- **Result:** Admin matches wiki theme perfectly!
5558
5559### All Changes
5560
5561**1. Checkbox Field Border Styling**:
5562
5563**Before**:
5564```html
5565<div class="form-field-checkbox"
5566     style="background: $bg !important;">
5567<!-- Border shows white ✗ -->
5568```
5569
5570**After**:
5571```php
5572<div class="form-field-checkbox"
5573     style="background: $bg !important;
5574            border-color: $grid_border !important;">
5575<!-- Border themed ✓ -->
5576```
5577
5578**2. Admin CSS Variables**:
5579
5580**Added CSS variables for wiki theme compatibility**:
5581```css
5582.calendar-admin-wrapper {
5583    background: var(--__background_site__, #f5f5f5);
5584    color: var(--__text__, #333);
5585}
5586.calendar-admin-section {
5587    background: var(--__background_alt__, #fafafa);
5588}
5589.calendar-admin-input {
5590    background: var(--__background__, #fff);
5591    color: var(--__text__, #333);
5592}
5593```
5594
5595**Replaced hardcoded colors**:
5596```php
5597// Before:
5598background: #f9f9f9
5599background: white
5600color: #333
5601border: 1px solid #ddd
5602
5603// After:
5604background: var(--__background_alt__, #f9f9f9)
5605background: var(--__background__, #fff)
5606color: var(--__text__, #333)
5607border: 1px solid var(--__border__, #ddd)
5608```
5609
5610### Before vs After
5611
5612**BEFORE (v4.8.8)**:
5613```
5614Edit Dialog:
5615┌──────────────────┐
5616│ ☑ Repeating     ║│ ← White border ✗
5617└──────────────────┘
5618┌──────────────────┐
5619│ ☑ Task checkbox ║│ ← White border ✗
5620└──────────────────┘
5621
5622Admin Page (Dark Wiki Theme):
5623┌──────────────────┐
5624│ Light sections  │ ← White boxes ✗
5625│ Light inputs    │ ← Doesn't match ✗
5626└──────────────────┘
5627```
5628
5629**AFTER (v4.8.9)**:
5630```
5631Matrix Edit Dialog:
5632┌──────────────────┐
5633│ ☑ Repeating      │ ← Green border ✓
5634└──────────────────┘
5635┌──────────────────┐
5636│ ☑ Task checkbox  │ ← Green border ✓
5637└──────────────────┘
5638
5639Admin (Dark Wiki Theme):
5640┌──────────────────┐
5641│ Dark sections   │ ← Matches wiki ✓
5642│ Dark inputs     │ ← Perfect match ✓
5643└──────────────────┘
5644```
5645
5646### Admin Theme Examples
5647
5648**Light Wiki Theme**:
5649```
5650Admin page backgrounds: Light
5651Section boxes: Light gray
5652Inputs: White
5653Borders: Gray
5654Text: Dark
5655
5656Perfect match! ✓
5657```
5658
5659**Dark Wiki Theme**:
5660```
5661Admin page backgrounds: Dark
5662Section boxes: Darker gray
5663Inputs: Dark
5664Borders: Dark gray
5665Text: Light
5666
5667Perfect match! ✓
5668```
5669
5670**DokuWiki Default**:
5671```
5672Uses wiki's CSS variables
5673Automatically adapts
5674Always matches! ✓
5675```
5676
5677### Complete Coverage
5678
5679**Edit Dialog**:
5680- ✅ All inputs themed
5681- ✅ All labels themed
5682- ✅ All sections themed
5683- ✅ **Checkbox borders** ← v4.8.9!
5684- ✅ All buttons themed
5685- ✅ No white anywhere
5686
5687**Admin Interface**:
5688- ✅ **Tab navigation** ← v4.8.9!
5689- ✅ **Section boxes** ← v4.8.9!
5690- ✅ **Input fields** ← v4.8.9!
5691- ✅ **Text colors** ← v4.8.9!
5692- ✅ **Borders** ← v4.8.9!
5693- ✅ All tabs (Manage, Update, Outlook, Themes)
5694
5695### CSS Variables Used
5696
5697**DokuWiki provides these**:
5698- `--__background_site__`: Page background
5699- `--__background_alt__`: Alternate background
5700- `--__background__`: Primary background (inputs)
5701- `--__text__`: Text color
5702- `--__border__`: Border color
5703
5704**Fallbacks provided for older DokuWiki**:
5705```css
5706var(--__background_site__, #f5f5f5)
5707var(--__background_alt__, #fafafa)
5708var(--__background__, #fff)
5709var(--__text__, #333)
5710var(--__border__, #ddd)
5711```
5712
5713### Perfect Adaptation
5714
5715**Admin now adapts to ANY wiki theme**:
5716- Light themes → Light admin ✓
5717- Dark themes → Dark admin ✓
5718- Custom themes → Matches perfectly ✓
5719- No hardcoded colors ✓
5720
5721**Calendar themes still work**:
5722- Matrix, Purple, Professional, Pink ✓
5723- Independent from wiki theme ✓
5724- Admin respects wiki ✓
5725- Calendar respects calendar theme ✓
5726
5727### FINAL PERFECTION
5728
5729**Frontend (Calendar)**:
5730- Complete theming ✓
5731- 4 beautiful themes ✓
5732- Every pixel themed ✓
5733
5734**Backend (Admin)**:
5735- Respects wiki theme ✓
5736- Works with any theme ✓
5737- Perfect compatibility ✓
5738
5739**ABSOLUTELY EVERYTHING THEMED!** ����✨
5740
5741## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
5742
5743### �� Fixed: Task Checkboxes Now Fully Themed
5744- **Fixed:** Added background-color and border inline
5745- **Fixed:** Both PHP and JavaScript versions
5746- **Result:** No white checkboxes!
5747
5748### �� Fixed: Past Events Toggle Border
5749- **Fixed:** Added !important to border styling
5750- **Fixed:** Explicit top and bottom borders
5751- **Result:** No white line under toggle!
5752
5753### �� Fixed: Form Field Section Backgrounds
5754- **Fixed:** All form-field and form-row-group backgrounds
5755- **Fixed:** Every section in edit dialog
5756- **Result:** No white sections anywhere!
5757
5758### All Changes
5759
5760**1. Task Checkbox Styling**:
5761
5762**Before**:
5763```php
5764style="accent-color: $border !important;"
5765<!-- Only accent, background still white ✗ -->
5766```
5767
5768**After**:
5769```php
5770style="accent-color: $border !important;
5771       background-color: $cell_bg !important;
5772       border: 2px solid $grid_border !important;"
5773<!-- Full theming ✓ -->
5774```
5775
5776**2. Past Events Toggle Border**:
5777
5778**Before**:
5779```php
5780style="border-color: $grid_border;"
5781<!-- No !important, CSS overrides ✗ -->
5782```
5783
5784**After**:
5785```php
5786style="border-color: $grid_border !important;
5787       border-top: 1px solid $grid_border !important;
5788       border-bottom: 1px solid $grid_border !important;"
5789<!-- Cannot be overridden ✓ -->
5790```
5791
5792**3. Form Field Backgrounds**:
5793
5794**Before**:
5795```html
5796<div class="form-field">
5797<div class="form-row-group">
5798<!-- No background, shows white ✗ -->
5799```
5800
5801**After**:
5802```php
5803<div class="form-field" style="background: $bg !important;">
5804<div class="form-row-group" style="background: $bg !important;">
5805<!-- Fully themed ✓ -->
5806```
5807
5808### Before vs After
5809
5810**BEFORE (v4.8.7)**:
5811```
5812Event:
5813□ Task checkbox  ← White checkbox ✗
5814
5815Past Events
5816▶ Past Events (3) ← White line below ✗
5817─────────────────
5818
5819Edit Dialog:
5820┌──────────────┐
5821│ Form fields  │ ← White sections ✗
5822└──────────────┘
5823```
5824
5825**AFTER (v4.8.8)**:
5826```
5827Matrix Event:
5828☑ Task checkbox  ← Green checkbox ✓
5829
5830Past Events
5831▶ Past Events (3) ← Green border ✓
5832─────────────────
5833
5834Matrix Edit Dialog:
5835┌──────────────┐
5836│ Form fields  │ ← Dark green ✓
5837└──────────────┘
5838```
5839
5840### Complete Examples
5841
5842**Matrix Theme**:
5843```
5844Task Checkbox:
5845☑ Checked   → Green checkmark, green bg
5846☐ Unchecked → Green border, dark green bg ✓
5847
5848Past Events Toggle:
5849▶ Past Events (3)
5850─────────────────── Green border ✓
5851
5852Edit Dialog:
5853All sections dark green ✓
5854No white anywhere ✓
5855```
5856
5857**Purple Theme**:
5858```
5859Task Checkbox:
5860☑ Checked   → Purple checkmark, purple bg
5861☐ Unchecked → Purple border, dark purple bg ✓
5862
5863Past Events Toggle:
5864▶ Past Events (3)
5865─────────────────── Purple border ✓
5866
5867Edit Dialog:
5868All sections dark purple ✓
5869```
5870
5871**Professional Theme**:
5872```
5873Task Checkbox:
5874☑ Checked   → Blue checkmark, white bg
5875☐ Unchecked → Gray border, white bg ✓
5876
5877Past Events Toggle:
5878▶ Past Events (3)
5879─────────────────── Gray border ✓
5880
5881Edit Dialog:
5882All sections light ✓
5883```
5884
5885**Pink Theme**:
5886```
5887Task Checkbox:
5888☑ Checked   → Pink checkmark, pink bg ✨
5889☐ Unchecked → Pink border, dark pink bg ✓
5890
5891Past Events Toggle:
5892▶ Past Events (3)
5893─────────────────── Pink border ��
5894
5895Edit Dialog:
5896All sections dark pink ✓
5897```
5898
5899### Checkbox Visual
5900
5901**Matrix - Unchecked**:
5902```
5903┌─────┐
5904│     │ ← Dark green background
5905│     │   Green border
5906└─────┘
5907```
5908
5909**Matrix - Checked**:
5910```
5911┌─────┐
5912│ ✓   │ ← Dark green background
5913│     │   Green checkmark
5914└─────┘
5915```
5916
5917### Past Events Border
5918
5919**Before**:
5920```
5921▶ Past Events (3)
5922─────────────────── White line ✗
5923```
5924
5925**After**:
5926```
5927▶ Past Events (3)
5928─────────────────── Green line ✓ (Matrix)
5929                    Purple line ✓ (Purple)
5930                    Gray line ✓ (Professional)
5931                    Pink line ✓ (Pink)
5932```
5933
5934### Form Field Coverage
5935
5936**All sections themed**:
5937- ✅ Title field
5938- ✅ Namespace field
5939- ✅ Description field
5940- ✅ **Date row** ← v4.8.8!
5941- ✅ **Checkbox sections** ← v4.8.8!
5942- ✅ **Recurring options** ← v4.8.8!
5943- ✅ **Time row** ← v4.8.8!
5944- ✅ **Color row** ← v4.8.8!
5945- ✅ Button footer
5946
5947**Every div has background!** ✓
5948
5949### ABSOLUTE PERFECTION
5950
5951**Not a single white pixel**:
5952- ✅ No white checkboxes
5953- ✅ No white borders
5954- ✅ No white backgrounds
5955- ✅ No white sections
5956- ✅ No white lines
5957- ✅ No white anything
5958
5959**100% PERFECT THEMING!** ����✨
5960
5961## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
5962
5963### �� Fixed: Checkbox Section Backgrounds Themed
5964- **Fixed:** Repeating Event section background
5965- **Fixed:** Task checkbox section background
5966- **Result:** No white backgrounds in dialog!
5967
5968### �� Fixed: Unchecked Task Checkboxes Themed
5969- **Fixed:** Added CSS for checkbox backgrounds
5970- **Fixed:** Unchecked boxes show theme colors
5971- **Result:** No white checkboxes!
5972
5973### �� Fixed: Day Popup Dialog Fully Themed
5974- **Fixed:** Popup container, header, body themed
5975- **Fixed:** Event items in popup themed
5976- **Fixed:** Add Event button themed
5977- **Fixed:** Footer section themed
5978- **Result:** Perfect popup theming!
5979
5980### All Changes
5981
5982**1. Checkbox Section Backgrounds**:
5983
5984**Before**:
5985```html
5986<div class="form-field-checkbox">
5987<!-- White background ✗ -->
5988```
5989
5990**After**:
5991```php
5992<div class="form-field-checkbox"
5993     style="background: $bg !important;">
5994<!-- Themed ✓ -->
5995```
5996
5997**2. Checkbox Background CSS**:
5998
5999**Added to style block**:
6000```css
6001.task-checkbox {
6002    background-color: $cell_bg !important;
6003    border: 2px solid $grid_border !important;
6004}
6005```
6006
6007**3. Day Popup Theming**:
6008
6009**Container**:
6010```javascript
6011style="background: $bg !important;
6012       border: 2px solid $border !important;
6013       box-shadow: 0 0 20px $shadow !important;"
6014```
6015
6016**Header**:
6017```javascript
6018style="background: $header_bg !important;
6019       color: $text_primary !important;
6020       border-bottom: 1px solid $border !important;"
6021```
6022
6023**Footer**:
6024```javascript
6025style="background: $bg !important;
6026       border-top: 1px solid $grid_border !important;"
6027```
6028
6029**Add Event Button**:
6030```javascript
6031style="background: $border !important;
6032       color: $bg !important;
6033       border-color: $border !important;"
6034```
6035
6036**Event Items**:
6037```javascript
6038style="background: $cell_bg !important;
6039       border: 1px solid $grid_border !important;"
6040```
6041
6042### Before vs After
6043
6044**BEFORE (v4.8.6)**:
6045```
6046Edit Dialog:
6047┌──────────────────┐
6048│ ☑ Repeating Event│ ← White background ✗
6049├──────────────────┤
6050│ ☑ Task checkbox  │ ← White background ✗
6051└──────────────────┘
6052
6053Day Popup:
6054┌──────────────────┐
6055│ Monday, Feb 8    │ ← White ✗
6056├──────────────────┤
6057│ Team Meeting     │ ← White ✗
6058│ 2:00 PM          │
6059├──────────────────┤
6060│ [+ Add Event]    │ ← White ✗
6061└──────────────────┘
6062
6063Task checkbox: ☐ ← White ✗
6064```
6065
6066**AFTER (v4.8.7)**:
6067```
6068Edit Dialog (Matrix):
6069┌──────────────────┐
6070│ ☑ Repeating Event│ ← Dark green ✓
6071├──────────────────┤
6072│ ☑ Task checkbox  │ ← Dark green ✓
6073└──────────────────┘
6074
6075Day Popup (Matrix):
6076┌──────────────────┐
6077│ Monday, Feb 8    │ ← Dark green ✓
6078├──────────────────┤
6079│ Team Meeting     │ ← Dark green ✓
6080│ 2:00 PM          │
6081├──────────────────┤
6082│ [+ Add Event]    │ ← Green button ✓
6083└──────────────────┘
6084
6085Task checkbox: ☑ ← Green ✓
6086```
6087
6088### Complete Examples
6089
6090**Matrix Dialog**:
6091```
6092┌──────────────────────────┐
6093│ ✏️ Edit Event            │
6094├──────────────────────────┤
6095│ �� Title: [_________]    │
6096│ �� Date: [__________]    │
6097│                          │
6098│ ☑ �� Repeating Event     │ ← Dark green bg
6099├──────────────────────────┤
6100│ ☑ �� Task checkbox       │ ← Dark green bg
6101├──────────────────────────┤
6102│ [Cancel] [�� Save]       │
6103└──────────────────────────┘
6104
6105All sections themed! ✓
6106```
6107
6108**Matrix Day Popup**:
6109```
6110┌──────────────────────────┐
6111│ Monday, February 8, 2026 │ ← Green header
6112├──────────────────────────┤
6113│ ┌──────────────────────┐ │
6114│ │ Team Meeting         │ │ ← Dark green
6115│ │ �� 2:00 PM           │ │
6116│ └──────────────────────┘ │
6117│ ┌──────────────────────┐ │
6118│ │ Code Review          │ │ ← Dark green
6119│ │ �� 4:00 PM           │ │
6120│ └──────────────────────┘ │
6121├──────────────────────────┤
6122│   [+ Add Event]          │ ← Green button
6123└──────────────────────────┘
6124```
6125
6126**Purple Day Popup**:
6127```
6128┌──────────────────────────┐
6129│ Monday, February 8, 2026 │ ← Purple header
6130├──────────────────────────┤
6131│ ┌──────────────────────┐ │
6132│ │ Team Meeting         │ │ ← Dark purple
6133│ │ �� 2:00 PM           │ │
6134│ └──────────────────────┘ │
6135├──────────────────────────┤
6136│   [+ Add Event]          │ ← Purple button
6137└──────────────────────────┘
6138```
6139
6140**Professional Day Popup**:
6141```
6142┌──────────────────────────┐
6143│ Monday, February 8, 2026 │ ← Light header
6144├──────────────────────────┤
6145│ ┌──────────────────────┐ │
6146│ │ Team Meeting         │ │ ← White
6147│ │ �� 2:00 PM           │ │
6148│ └──────────────────────┘ │
6149├──────────────────────────┤
6150│   [+ Add Event]          │ ← Blue button
6151└──────────────────────────┘
6152```
6153
6154**Pink Day Popup**:
6155```
6156┌──────────────────────────┐
6157│ Monday, February 8, 2026 │ ← Pink header ✨
6158├──────────────────────────┤
6159│ ┌──────────────────────┐ │
6160│ │ Team Meeting ��      │ │ ← Dark pink
6161│ │ �� 2:00 PM           │ │
6162│ └──────────────────────┘ │
6163├──────────────────────────┤
6164│   [+ Add Event]          │ ← Pink button
6165└──────────────────────────┘
6166```
6167
6168### Checkbox Theming
6169
6170**Unchecked boxes now themed**:
6171```
6172Matrix:
6173☐ → Dark green bg, green border ✓
6174
6175Purple:
6176☐ → Dark purple bg, purple border ✓
6177
6178Professional:
6179☐ → White bg, gray border ✓
6180
6181Pink:
6182☐ → Dark pink bg, pink border ✓
6183```
6184
6185### Complete Coverage
6186
6187**Edit Dialog - All Sections**:
6188- ✅ Header
6189- ✅ All inputs
6190- ✅ All labels
6191- ✅ **Checkbox sections** ← v4.8.7!
6192- ✅ Recurring options
6193- ✅ Button footer
6194- ✅ All checkboxes (checked & unchecked)
6195
6196**Day Popup - All Elements**:
6197- ✅ **Popup container** ← v4.8.7!
6198- ✅ **Header** ← v4.8.7!
6199- ✅ **Body** ← v4.8.7!
6200- ✅ **Event items** ← v4.8.7!
6201- ✅ **Namespace badges** ← v4.8.7!
6202- ✅ **Footer** ← v4.8.7!
6203- ✅ **Add Event button** ← v4.8.7!
6204- ✅ **No events message** ← v4.8.7!
6205
6206**Absolutely every dialog element themed!** ��✨
6207
6208### Perfect Theming Achievement
6209
6210**Every UI component in entire plugin**:
6211- ✅ Calendar grid
6212- ✅ Sidebar widget
6213- ✅ Event list
6214- ✅ Search bar
6215- ✅ Event boxes
6216- ✅ Edit dialog (complete)
6217- ✅ **Day popup** ← v4.8.7!
6218- ✅ Month picker
6219- ✅ All text
6220- ✅ All buttons
6221- ✅ All inputs
6222- ✅ **All checkboxes** ← v4.8.7!
6223- ✅ All borders
6224- ✅ All badges
6225- ✅ All backgrounds
6226
6227**NO WHITE ANYWHERE!** ��
6228
6229**100% COMPLETE THEMING ACHIEVED!** ��✨��
6230
6231## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
6232
6233### �� Fixed: Dialog Checkbox Sections Themed
6234- **Fixed:** Recurring options section background themed
6235- **Fixed:** Section has themed border accent
6236- **Result:** No white sections in dialog!
6237
6238### �� Fixed: Dialog Button Section Themed
6239- **Fixed:** Button area background themed
6240- **Fixed:** Top border separator themed
6241- **Result:** Complete dialog theming!
6242
6243### �� Fixed: Event Box Borders Themed
6244- **Fixed:** Top, right, bottom borders now themed
6245- **Fixed:** Left border remains event color
6246- **Result:** Perfect event boxes!
6247
6248### All Changes
6249
6250**1. Recurring Options Section**:
6251
6252**Before**:
6253```html
6254<div class="recurring-options" style="display:none;">
6255<!-- White background ✗ -->
6256```
6257
6258**After**:
6259```php
6260<div class="recurring-options"
6261     style="display:none;
6262            background: $bg !important;
6263            padding: 8px;
6264            border-left: 2px solid $border;
6265            margin-left: 4px;">
6266<!-- Themed with accent border ✓ -->
6267```
6268
6269**2. Dialog Actions Section**:
6270
6271**Before**:
6272```html
6273<div class="dialog-actions-sleek">
6274<!-- White background ✗ -->
6275```
6276
6277**After**:
6278```php
6279<div class="dialog-actions-sleek"
6280     style="background: $bg !important;
6281            border-top: 1px solid $grid_border !important;">
6282<!-- Themed with separator ✓ -->
6283```
6284
6285**3. Event Box Borders**:
6286
6287**Before**:
6288```php
6289border-left-color: $event_color;
6290<!-- Only left border colored ✗ -->
6291```
6292
6293**After**:
6294```php
6295border-left-color: $event_color;
6296border-top: 1px solid $grid_border !important;
6297border-right: 1px solid $grid_border !important;
6298border-bottom: 1px solid $grid_border !important;
6299<!-- All borders themed! ✓ -->
6300```
6301
6302### Before vs After
6303
6304**BEFORE (v4.8.5)**:
6305```
6306Dialog:
6307┌────────────────┐
6308│ ☑ Repeating    │
6309├────────────────┤ ← White section ✗
6310│ Repeat: Daily  │
6311│ Until: [____]  │
6312├────────────────┤
6313│ [Cancel] [Save]│ ← White footer ✗
6314└────────────────┘
6315
6316Event Box:
6317┌────────────┐
6318│Team Meeting│ ← White borders ✗
6319│2:00 PM     │
6320└────────────┘
6321```
6322
6323**AFTER (v4.8.6)**:
6324```
6325Matrix Dialog:
6326┌────────────────┐
6327│ ☑ Repeating    │
6328├────────────────┤ ← Dark green ✓
6329│ Repeat: Daily  │ Green accent border
6330│ Until: [____]  │
6331├────────────────┤
6332│ [Cancel] [Save]│ ← Dark green ✓
6333└────────────────┘
6334
6335Matrix Event Box:
6336┌────────────┐
6337│Team Meeting│ ← Green borders ✓
6338│2:00 PM     │
6339└────────────┘
6340```
6341
6342### Dialog Section Examples
6343
6344**Matrix Theme**:
6345```
6346┌──────────────────────────┐
6347│ ✏️ Edit Event            │
6348├──────────────────────────┤
6349│ ☑ �� Repeating Event     │
6350├║─────────────────────────┤ Green accent
6351│║ Repeat Every: Daily     │ Dark green bg
6352│║ Repeat Until: [_____]   │
6353└──────────────────────────┘
6354  [Cancel] [�� Save]       ← Dark green bg
6355──────────────────────────── Green border
6356```
6357
6358**Purple Theme**:
6359```
6360┌──────────────────────────┐
6361│ ☑ �� Repeating Event     │
6362├║─────────────────────────┤ Purple accent
6363│║ Repeat options...       │ Dark purple bg
6364└──────────────────────────┘
6365  [Cancel] [�� Save]       ← Dark purple bg
6366──────────────────────────── Purple border
6367```
6368
6369**Professional Theme**:
6370```
6371┌──────────────────────────┐
6372│ ☑ �� Repeating Event     │
6373├║─────────────────────────┤ Blue accent
6374│║ Repeat options...       │ Light bg
6375└──────────────────────────┘
6376  [Cancel] [�� Save]       ← Light bg
6377──────────────────────────── Gray border
6378```
6379
6380**Pink Theme**:
6381```
6382┌──────────────────────────┐
6383│ ☑ �� Repeating Event ✨  │
6384├║─────────────────────────┤ Pink accent
6385│║ Repeat options...       │ Dark pink bg ��
6386└──────────────────────────┘
6387  [Cancel] [�� Save]       ← Dark pink bg
6388──────────────────────────── Pink border
6389```
6390
6391### Event Box Border Visual
6392
6393**Before (v4.8.5)**:
6394```
6395Left border only:
6396█ Team Meeting
6397█ 2:00 PM
6398█ [Edit] [Delete]
6399
6400Only event color on left ✗
6401White on other 3 sides ✗
6402```
6403
6404**After (v4.8.6)**:
6405```
6406All borders themed:
6407┌─────────────┐
6408█Team Meeting │ ← Top: themed
6409█2:00 PM      │ ← Right: themed
6410█[Edit][Del]  │ ← Bottom: themed
6411└─────────────┘
6412
6413Left: Event color ✓
6414Other 3: Theme grid_border ✓
6415```
6416
6417### Matrix Event Box:
6418```
6419┌─────────────┐ Green border
6420│Team Meeting │
6421│2:00 PM      │
6422└─────────────┘ Green border
64236424Green left bar
6425```
6426
6427### Purple Event Box:
6428```
6429┌─────────────┐ Purple border
6430│Team Meeting │
6431│2:00 PM      │
6432└─────────────┘ Purple border
64336434Purple left bar
6435```
6436
6437### Professional Event Box:
6438```
6439┌─────────────┐ Gray border
6440│Team Meeting │
6441│2:00 PM      │
6442└─────────────┘ Gray border
64436444Event color left bar
6445```
6446
6447### Complete Dialog Coverage
6448
6449**All sections themed**:
6450- ✅ Dialog header
6451- ✅ Form inputs
6452- ✅ Checkbox labels
6453- ✅ **Recurring options** ← v4.8.6!
6454- ✅ **Button section** ← v4.8.6!
6455- ✅ All labels
6456- ✅ All buttons
6457
6458**No white sections!** ✓
6459
6460### Complete Event Box Coverage
6461
6462**All borders themed**:
6463- ✅ Left border (event color)
6464- ✅ **Top border** ← v4.8.6!
6465- ✅ **Right border** ← v4.8.6!
6466- ✅ **Bottom border** ← v4.8.6!
6467- ✅ Background
6468- ✅ Text
6469
6470**Perfect box outline!** ✓
6471
6472### Visual Perfection
6473
6474**Matrix theme event list**:
6475```
6476┌─────────────┐
6477│Team Meeting │ ← Green box
6478│2:00 PM      │
6479└─────────────┘
6480┌─────────────┐
6481│Code Review  │ ← Green box
6482│4:00 PM      │
6483└─────────────┘
6484
6485All borders green! ✓
6486```
6487
6488**ABSOLUTE PERFECT THEMING!** ��✨
6489
6490## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
6491
6492### �� Fixed: Event Dialog Fully Themed
6493- **Fixed:** Dialog background, header, inputs all themed
6494- **Fixed:** All labels, checkboxes, selects themed
6495- **Fixed:** Save and Cancel buttons themed
6496- **Result:** Dialog matches theme perfectly!
6497
6498### �� Fixed: Sidebar Event Borders Properly Themed
6499- **Fixed:** Event divider borders use grid_border color
6500- **Fixed:** Clean, subtle themed dividers
6501- **Result:** No more white borders in sidebar!
6502
6503### All Changes
6504
6505**1. Event Dialog Theming**:
6506
6507**Dialog container**:
6508```php
6509background: $themeStyles['bg'] !important;
6510border: 2px solid $themeStyles['border'] !important;
6511box-shadow: 0 0 20px $shadow !important;
6512```
6513
6514**Dialog header**:
6515```php
6516background: $themeStyles['header_bg'] !important;
6517color: $themeStyles['text_primary'] !important;
6518border-bottom: 1px solid $border !important;
6519```
6520
6521**All form inputs** (text, date, select, textarea):
6522```php
6523background: $themeStyles['cell_bg'] !important;
6524color: $themeStyles['text_primary'] !important;
6525border-color: $themeStyles['grid_border'] !important;
6526```
6527
6528**All labels**:
6529```php
6530color: $themeStyles['text_primary'] !important;
6531```
6532
6533**Checkboxes**:
6534```php
6535accent-color: $themeStyles['border'] !important;
6536```
6537
6538**Buttons**:
6539```php
6540// Cancel button:
6541background: $cell_bg !important;
6542color: $text_primary !important;
6543
6544// Save button:
6545background: $border !important;
6546color: $bg !important; (or white for professional)
6547```
6548
6549**2. Sidebar Event Borders**:
6550
6551**Before**:
6552```php
6553border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
6554```
6555
6556**After**:
6557```php
6558borderColor = $themeStyles['grid_border'];
6559border-bottom: 1px solid $borderColor !important;
6560```
6561
6562### Before vs After
6563
6564**BEFORE (v4.8.4)**:
6565```
6566Event Dialog:
6567┌────────────────┐
6568│ Add Event      │ ← White background ✗
6569│ Title: [_____] │ ← White inputs ✗
6570│ Date:  [_____] │
6571│ [Cancel] [Save]│ ← Default buttons ✗
6572└────────────────┘
6573
6574Sidebar Events:
6575Event 1 ────────  ← White border ✗
6576Event 2 ────────  ← White border ✗
6577```
6578
6579**AFTER (v4.8.5)**:
6580```
6581Event Dialog (Matrix):
6582┌────────────────┐
6583│ Add Event      │ ← Dark green background ✓
6584│ Title: [_____] │ ← Dark green inputs ✓
6585│ Date:  [_____] │ ← Green text ✓
6586│ [Cancel] [Save]│ ← Themed buttons ✓
6587└────────────────┘
6588
6589Sidebar Events (Matrix):
6590Event 1 ────────  ← Green border ✓
6591Event 2 ────────  ← Green border ✓
6592```
6593
6594### Dialog Examples by Theme
6595
6596**Matrix Dialog**:
6597```
6598┌──────────────────────────┐
6599│ ✏️ Edit Event            │ ← Dark green header
6600├──────────────────────────┤
6601│ �� Title                 │ ← Green labels
6602│ [Team Meeting________]   │ ← Dark green input
6603│                          │
6604│ �� Start Date            │
6605│ [2026-02-08__]           │ ← Dark green input
6606│                          │
6607│ �� Start Time            │
6608│ [2:00 PM ▼]              │ ← Green select
6609│                          │
6610│ ☑ �� Repeating Event     │ ← Green checkbox
6611│                          │
6612│ [Cancel] [�� Save]       │ ← Themed buttons
6613└──────────────────────────┘
6614
6615Everything green! ✓
6616```
6617
6618**Purple Dialog**:
6619```
6620┌──────────────────────────┐
6621│ ✏️ Edit Event            │ ← Dark purple header
6622├──────────────────────────┤
6623│ [Inputs_______________]  │ ← Dark purple inputs
6624│ ☑ Checkboxes             │ ← Purple accent
6625│ [Cancel] [�� Save]       │ ← Purple buttons
6626└──────────────────────────┘
6627```
6628
6629**Professional Dialog**:
6630```
6631┌──────────────────────────┐
6632│ ✏️ Edit Event            │ ← Light gradient header
6633├──────────────────────────┤
6634│ [Inputs_______________]  │ ← White inputs
6635│ ☑ Checkboxes             │ ← Blue accent
6636│ [Cancel] [�� Save]       │ ← Blue save button
6637└──────────────────────────┘
6638```
6639
6640**Pink Dialog**:
6641```
6642┌──────────────────────────┐
6643│ ✏️ Edit Event            │ ← Dark pink header ✨
6644├──────────────────────────┤
6645│ [Inputs_______________]  │ ← Dark pink inputs ��
6646│ ☑ Checkboxes             │ ← Pink accent
6647│ [Cancel] [�� Save]       │ ← Pink buttons
6648└──────────────────────────┘
6649```
6650
6651### Complete Dialog Element Coverage
6652
6653**All form elements themed**:
6654- ✅ Dialog container
6655- ✅ Dialog header
6656- ✅ Close button (×)
6657- ✅ Title input
6658- ✅ Namespace search
6659- ✅ Namespace dropdown
6660- ✅ Description textarea
6661- ✅ Start date input
6662- ✅ End date input
6663- ✅ Recurring checkbox
6664- ✅ Recurrence type select
6665- ✅ Recurrence end date
6666- ✅ Start time select
6667- ✅ End time select
6668- ✅ Color select
6669- ✅ Custom color picker
6670- ✅ Task checkbox
6671- ✅ All labels
6672- ✅ Cancel button
6673- ✅ Save button
6674
6675**Every single dialog element themed!** ��
6676
6677### Sidebar Border Example
6678
6679**Matrix Sidebar**:
6680```
6681┌────────────────┐
6682│ Today          │ ← Green section header
6683├────────────────┤
6684│ Team Meeting   │
6685│ 2:00 PM        │
6686├────────────────┤ ← Green border (grid_border)
6687│ Code Review    │
6688│ 4:00 PM        │
6689├────────────────┤ ← Green border
6690│ Stand-up       │
6691│ All day        │
6692└────────────────┘
6693
6694Subtle green dividers! ✓
6695```
6696
6697### Complete Achievement
6698
6699**Every UI element themed**:
6700- ✅ Calendar
6701- ✅ Sidebar widget
6702- ✅ Event list
6703- ✅ Search bar
6704- ✅ **Event dialog** ← v4.8.5!
6705- ✅ Month picker
6706- ✅ **Sidebar dividers** ← v4.8.5!
6707- ✅ All text
6708- ✅ All inputs
6709- ✅ All buttons
6710- ✅ All borders
6711- ✅ All checkboxes
6712
6713**ABSOLUTE COMPLETE THEMING!** ��✨
6714
6715## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
6716
6717### �� Fixed: Professional Theme Background Consistency
6718- **Fixed:** Container and event backgrounds now match sidebar
6719- **Fixed:** Lighter, cleaner appearance
6720- **Fixed:** Better contrast and readability
6721- **Result:** Professional theme looks cohesive!
6722
6723### The Problem
6724
6725**v4.8.3 Professional theme**:
6726```
6727Sidebar: Light background (#f5f7fa)
6728Calendar: Medium background (#e8ecf1) ← Didn't match!
6729Events: Light background (#f5f7fa)
6730
6731Inconsistent! ✗
6732```
6733
6734### The Fix
6735
6736**Updated Professional theme colors for consistency**:
6737
6738```php
6739// Before:
6740'bg' => '#e8ecf1',        // Medium gray-blue
6741'cell_bg' => '#f5f7fa',   // Very light
6742'grid_bg' => '#d5dbe3',   // Medium-dark
6743
6744// After:
6745'bg' => '#f5f7fa',        // Very light (matches sidebar)
6746'cell_bg' => '#ffffff',   // Pure white (clean)
6747'grid_bg' => '#e8ecf1',   // Subtle contrast
6748'grid_border' => '#d0d7de', // Softer borders
6749```
6750
6751### Before vs After
6752
6753**BEFORE (v4.8.3)**:
6754```
6755Professional Theme:
6756┌────────────────┐
6757│ Calendar       │ ← Medium gray (#e8ecf1)
6758│ ┌────────────┐ │
6759│ │ Event      │ │ ← Light (#f5f7fa)
6760│ └────────────┘ │
6761└────────────────┘
6762
6763Sidebar:
6764┌────────────────┐
6765│ Widget         │ ← Light (#f5f7fa)
6766└────────────────┘
6767
6768Backgrounds don't match! ✗
6769```
6770
6771**AFTER (v4.8.4)**:
6772```
6773Professional Theme:
6774┌────────────────┐
6775│ Calendar       │ ← Light (#f5f7fa)
6776│ ┌────────────┐ │
6777│ │ Event      │ │ ← White (#ffffff)
6778│ └────────────┘ │
6779└────────────────┘
6780
6781Sidebar:
6782┌────────────────┐
6783│ Widget         │ ← Light (#f5f7fa)
6784└────────────────┘
6785
6786Perfect match! ✓
6787```
6788
6789### New Professional Theme Colors
6790
6791**Backgrounds**:
6792- Container: `#f5f7fa` (light blue-gray)
6793- Events: `#ffffff` (pure white)
6794- Grid: `#e8ecf1` (subtle contrast)
6795
6796**Text**:
6797- Primary: `#2c3e50` (dark blue-gray)
6798- Bright: `#4a90e2` (blue accent)
6799- Dim: `#7f8c8d` (medium gray)
6800
6801**Borders**:
6802- Main: `#4a90e2` (blue)
6803- Grid: `#d0d7de` (soft gray)
6804
6805**Header**:
6806- Gradient: `#ffffff` → `#f5f7fa`
6807
6808### Visual Example
6809
6810**Professional Theme Now**:
6811```
6812┌─────────────────────────────┐
6813│ February 2026               │ ← White to light gradient
6814├─┬─┬─┬─┬─┬─┬─┬───────────────┤
6815│S│M│T│W│T│F│S│               │ ← Light background
6816├─┼─┼─┼─┼─┼─┼─┤               │
6817│ │ │1│2│3│4│5│ Event List    │ ← White events
6818│ │ │ │ │ │ │ │ ┌───────────┐ │
6819│ │ │ │ │[8]│ │ │ Meeting   │ │ ← White on light
6820└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘
6821
6822Clean, professional look! ✓
6823```
6824
6825### Comparison with Other Themes
6826
6827**Matrix** (dark):
6828- Container: #242424 (dark green)
6829- Events: #242424 (dark green)
6830- Consistent dark theme ✓
6831
6832**Purple** (dark):
6833- Container: #1a0d14 (dark purple)
6834- Events: #2a2030 (dark purple)
6835- Consistent dark theme ✓
6836
6837**Professional** (light):
6838- Container: #f5f7fa (light blue)
6839- Events: #ffffff (white)
6840- Consistent light theme ✓
6841
6842**Pink** (dark):
6843- Container: #1a0d14 (dark pink)
6844- Events: #1a0d14 (dark pink)
6845- Consistent dark theme ✓
6846
6847**All themes now consistent!** ��
6848
6849### Better Contrast
6850
6851**Professional theme improvements**:
6852
6853**Readability**:
6854- Dark text (#2c3e50) on white/light backgrounds ✓
6855- Excellent contrast ratio ✓
6856- Easy on the eyes ✓
6857
6858**Visual hierarchy**:
6859- White events pop against light container ✓
6860- Blue accents stand out ✓
6861- Clean, modern look ✓
6862
6863**Professional appearance**:
6864- Lighter = more corporate/business feel ✓
6865- Clean whites = premium quality ✓
6866- Subtle grays = sophisticated ✓
6867
6868### Complete Theme Consistency
6869
6870**All themes now have matching backgrounds**:
6871
6872**Matrix**:
6873- Sidebar & Calendar both dark green ✓
6874
6875**Purple**:
6876- Sidebar & Calendar both dark purple ✓
6877
6878**Professional**:
6879- Sidebar & Calendar both light ✓ (v4.8.4!)
6880
6881**Pink**:
6882- Sidebar & Calendar both dark pink ✓
6883
6884**Perfect visual unity across all views!** ��✨
6885
6886## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
6887
6888### �� Fixed: Bold Text in Descriptions Themed
6889- **Fixed:** **Bold text** now uses theme primary color
6890- **Fixed:** Both `**text**` and `__text__` syntax themed
6891- **Result:** Bold text matches theme!
6892
6893### �� Fixed: Search Bar Fully Themed
6894- **Fixed:** Search input has !important on all styles
6895- **Fixed:** Icon and placeholder text themed
6896- **Result:** Search bar perfectly themed!
6897
6898### �� Fixed: Sidebar Event Boxes Themed
6899- **Fixed:** Event borders in sidebar now use theme grid_border color
6900- **Fixed:** Borders have !important flag
6901- **Result:** Sidebar boxes match theme!
6902
6903### All Changes
6904
6905**1. Bold Text Styling**:
6906
6907**Before**:
6908```html
6909<strong>Bold text</strong> ← Default black
6910```
6911
6912**After**:
6913```php
6914<strong style="color: $text_primary !important; font-weight:bold;">
6915    Bold text
6916</strong>
6917
6918Matrix: Green bold ✓
6919Purple: Lavender bold ✓
6920Professional: Dark bold ✓
6921Pink: Pink bold ✓
6922```
6923
6924**2. Search Bar**:
6925
6926**Before**:
6927```php
6928style="background: $bg; color: $text;"
6929Could be overridden by CSS
6930```
6931
6932**After**:
6933```php
6934style="background: $bg !important;
6935       color: $text_primary !important;
6936       border-color: $grid_border !important;"
6937
6938Cannot be overridden! ✓
6939```
6940
6941**3. Sidebar Event Boxes**:
6942
6943**Before**:
6944```php
6945$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded
6946```
6947
6948**After**:
6949```php
6950$borderColor = $themeStyles['grid_border']; // From theme
6951border-bottom: 1px solid $borderColor !important;
6952
6953Matrix: Green borders ✓
6954Purple: Purple borders ✓
6955Professional: Gray borders ✓
6956Pink: Pink borders ✓
6957```
6958
6959### Before vs After
6960
6961**BEFORE (v4.8.2)**:
6962```
6963Event description:
6964"Please review **Q1 Goals** carefully"
69656966            Black bold ✗
6967
6968Search bar:
6969[�� Search...] ← Gray placeholder ✗
6970
6971Sidebar:
6972┌────────────┐
6973│ Event 1    │
6974├────────────┤ ← Gray border ✗
6975│ Event 2    │
6976└────────────┘
6977```
6978
6979**AFTER (v4.8.3)**:
6980```
6981Matrix Theme:
6982
6983Event description:
6984"Please review **Q1 Goals** carefully"
69856986            Green bold ✓
6987
6988Search bar:
6989[�� Search...] ← Green themed ✓
6990
6991Sidebar:
6992┌────────────┐
6993│ Event 1    │
6994├────────────┤ ← Green border ✓
6995│ Event 2    │
6996└────────────┘
6997```
6998
6999### Examples by Theme
7000
7001**Matrix Theme**:
7002```
7003Description:
7004"Check **important notes** and links"
70057006   Green bold
7007
7008Sidebar boxes:
7009Event 1
7010───────── Green border
7011Event 2
7012───────── Green border
7013```
7014
7015**Purple Theme**:
7016```
7017Description:
7018"Review **agenda items** before meeting"
70197020   Lavender bold
7021
7022Sidebar boxes:
7023Event 1
7024───────── Purple border
7025Event 2
7026───────── Purple border
7027```
7028
7029**Professional Theme**:
7030```
7031Description:
7032"Update **quarterly reports** by Friday"
70337034   Dark bold
7035
7036Sidebar boxes:
7037Event 1
7038───────── Gray border
7039Event 2
7040───────── Gray border
7041```
7042
7043**Pink Theme**:
7044```
7045Description:
7046"Don't forget **party supplies** ✨"
70477048        Pink bold
7049
7050Sidebar boxes:
7051Event 1 ��
7052───────── Pink border
7053Event 2 ✨
7054───────── Pink border
7055```
7056
7057### Complete Formatting Coverage
7058
7059**Text formatting themed**:
7060- ✅ Regular text
7061- ✅ **Bold text** ← NEW!
7062- ✅ Links
7063- ✅ Italic text (inherits)
7064- ✅ Code (inherits)
7065
7066**UI elements themed**:
7067- ✅ Search bar ← Enhanced!
7068- ✅ Search icon ← Enhanced!
7069- ✅ Search placeholder ← Enhanced!
7070- ✅ Sidebar borders ← NEW!
7071- ✅ Event borders
7072- ✅ Badges
7073- ✅ Buttons
7074
7075**Every element perfectly themed!** ��
7076
7077### Search Bar Coverage
7078
7079**All aspects themed**:
7080- Background: Theme cell_bg ✓
7081- Text color: Theme text_primary ✓
7082- Border: Theme grid_border ✓
7083- Placeholder: Inherits text color ✓
7084- Icon (��): In placeholder ✓
7085- Clear button (✕): Themed ✓
7086
7087**Cannot be overridden!** (all have !important)
7088
7089### Sidebar Event Box Styling
7090
7091**Consistent borders**:
7092```
7093Matrix:
7094╔════════════╗
7095║ Event 1    ║
7096╟────────────╢ ← grid_border color
7097║ Event 2    ║
7098╚════════════╝
7099
7100All themes match perfectly! ✓
7101```
7102
7103### Complete Theme Achievement
7104
7105**Every single element themed**:
7106- ✅ Backgrounds
7107- ✅ Text (regular)
7108- ✅ Text (bold) ← v4.8.3!
7109- ✅ Links
7110- ✅ Badges
7111- ✅ Buttons
7112- ✅ Checkboxes
7113- ✅ Icons
7114- ✅ Borders
7115- ✅ Search bar ← Enhanced v4.8.3!
7116- ✅ Sidebar boxes ← v4.8.3!
7117- ✅ Today marker
7118- ✅ Calendar grid
7119- ✅ Event panels
7120
7121**ABSOLUTE PERFECTION!** ��✨
7122
7123## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
7124
7125### �� Fixed: Links in Descriptions Now Themed
7126- **Fixed:** All links in event descriptions now use theme color
7127- **Fixed:** DokuWiki links [[page|text]] themed
7128- **Fixed:** Markdown links [text](url) themed
7129- **Fixed:** Plain URLs themed
7130- **Result:** Links match theme perfectly!
7131
7132### The Problem
7133
7134**v4.8.1 behavior**:
7135```
7136Event description:
7137"Check out https://example.com" ← Blue default link ✗
7138"See [[wiki:page|docs]]" ← Blue default link ✗
7139```
7140
7141### The Fix
7142
7143**Added inline color styling to ALL link types**:
7144
7145```php
7146// Get theme colors:
7147$linkColor = $themeStyles['border'] . ' !important';
7148$linkStyle = ' style="color:' . $linkColor . ';"';
7149
7150// Apply to links:
7151<a href="..." style="color: #00cc07 !important;">link</a>
7152```
7153
7154**All link types themed**:
71551. DokuWiki syntax: `[[page|text]]`
71562. Markdown syntax: `[text](url)`
71573. Plain URLs: `https://example.com`
7158
7159### Before vs After
7160
7161**BEFORE (v4.8.1)**:
7162```
7163Matrix Theme Description:
7164"Visit https://example.com for more info"
71657166     Blue link ✗ (doesn't match green theme)
7167```
7168
7169**AFTER (v4.8.2)**:
7170```
7171Matrix Theme Description:
7172"Visit https://example.com for more info"
71737174     Green link ✓ (matches theme!)
7175```
7176
7177### Link Colors by Theme
7178
7179**Matrix**:
7180- Links: Green (#00cc07) !important
7181- Matches: Border, badges, highlights
7182
7183**Purple**:
7184- Links: Purple (#9b59b6) !important
7185- Matches: Border, badges, highlights
7186
7187**Professional**:
7188- Links: Blue (#4a90e2) !important
7189- Matches: Border, badges, highlights
7190
7191**Pink**:
7192- Links: Hot Pink (#ff1493) !important
7193- Matches: Border, badges, highlights ✨
7194
7195### Examples
7196
7197**Matrix Description with Links**:
7198```
7199Event: Team Meeting
7200Description:
7201"Review [[wiki:q1goals|Q1 Goals]]
7202and visit https://metrics.com"
7203
7204Both links → Green ✓
7205```
7206
7207**Purple Description with Links**:
7208```
7209Event: Planning Session
7210Description:
7211"Check [schedule](https://cal.com)
7212for availability"
7213
7214Link → Purple ✓
7215```
7216
7217**Professional Description with Links**:
7218```
7219Event: Client Call
7220Description:
7221"Prepare [[reports|Monthly Reports]]
7222before the call"
7223
7224Link → Blue ✓
7225```
7226
7227**Pink Description with Links**:
7228```
7229Event: Party Planning
7230Description:
7231"RSVP at https://party.com ✨"
7232
7233Link → Hot Pink ✓ ��
7234```
7235
7236### Technical Implementation
7237
7238**Updated renderDescription() function**:
7239
7240```php
7241private function renderDescription($description, $themeStyles = null) {
7242    // Get theme
7243    if ($themeStyles === null) {
7244        $theme = $this->getSidebarTheme();
7245        $themeStyles = $this->getSidebarThemeStyles($theme);
7246    }
7247
7248    // Create link style
7249    $linkColor = $themeStyles['border'] . ' !important';
7250    $linkStyle = ' style="color:' . $linkColor . ';"';
7251
7252    // Apply to all link types:
7253    $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>';
7254}
7255```
7256
7257### Complete Theming
7258
7259**Every text element**:
7260- ✅ Event titles
7261- ✅ Event dates
7262- ✅ Event descriptions
7263- ✅ **Links in descriptions** ← NEW!
7264- ✅ Badges
7265- ✅ Buttons
7266
7267**Every color unified!** ��
7268
7269### Unified Theme Experience
7270
7271**Matrix Theme**:
7272```
7273Everything green:
7274- Text: Green ✓
7275- Links: Green ✓
7276- Badges: Green ✓
7277- Borders: Green ✓
7278- Buttons: Green ✓
7279- Today marker: Green ✓
7280
7281Perfect harmony! ✓
7282```
7283
7284**No default blue links breaking the theme!**
7285
7286### Link Types Supported
7287
7288**1. DokuWiki Syntax**:
7289```
7290[[page|Link Text]] → Themed ✓
7291[[page]] → Themed ✓
7292[[page#section|Text]] → Themed ✓
7293```
7294
7295**2. Markdown Syntax**:
7296```
7297[Link Text](https://url.com) → Themed ✓
7298[Text](internal-page) → Themed ✓
7299```
7300
7301**3. Plain URLs**:
7302```
7303https://example.com → Themed ✓
7304http://site.org → Themed ✓
7305```
7306
7307**All links perfectly themed!** ����
7308
7309## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
7310
7311### �� Fixed: All Badges Now Themed
7312- **Fixed:** TODAY badge themed with theme color
7313- **Fixed:** PAST DUE badge uses orange (warning color)
7314- **Fixed:** Namespace badges themed
7315- **Fixed:** All badges visible and hidden
7316- **Result:** All badges match theme!
7317
7318### �� Fixed: Today Cell More Prominent
7319- **Fixed:** Today cell now has 2px border in theme color
7320- **Fixed:** Border added to both PHP and JavaScript
7321- **Result:** Today stands out clearly!
7322
7323### �� Fixed: Past Event Text Fully Themed
7324- **Fixed:** Event-info div backgrounds ensure no gray
7325- **Result:** Expanded past events completely themed!
7326
7327### All Changes
7328
7329**1. Badge Theming**:
7330
7331**TODAY Badge**:
7332```php
7333// PHP & JavaScript:
7334style="background: $themeStyles['border'] !important;
7335       color: $bg !important;"
7336
7337Matrix: Green badge
7338Purple: Purple badge
7339Professional: Blue badge with white text
7340Pink: Pink badge
7341```
7342
7343**PAST DUE Badge** (always orange):
7344```php
7345style="background: #ff9800 !important;
7346       color: #fff !important;"
7347```
7348
7349**Namespace Badge**:
7350```php
7351style="background: $themeStyles['border'] !important;
7352       color: $bg !important;"
7353```
7354
7355**2. Today Cell Border**:
7356
7357**PHP**:
7358```php
7359$todayBorder = $isToday ?
7360    'border:2px solid ' . $themeStyles['border'] . ' !important;' : '';
7361```
7362
7363**JavaScript**: Same
7364
7365**Result**: Today cell has prominent colored border!
7366
7367### Before vs After
7368
7369**BEFORE (v4.8.0)**:
7370```
7371Calendar:
7372┌─┬─┬─┬─┬─┬─┬─┐
7373│1│2│3│4│5│6│7│
7374│ │ │ │[8]│ │ │ ← Today: subtle background
7375└─┴─┴─┴─┴─┴─┴─┘
7376
7377Event badges:
7378Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗
7379```
7380
7381**AFTER (v4.8.1)**:
7382```
7383Calendar (Matrix):
7384┌─┬─┬─┬─┬─┬─┬─┐
7385│1│2│3│4│5│6│7│
7386│ │ │ │[8]│ │ │ ← Today: green border 2px ✓
7387└─┴─┴─┴─┴─┴─┴─┘
7388
7389Event badges (Matrix):
7390Mon, Feb 8 [TODAY] [Work] ← Green badges ✓
7391```
7392
7393### Matrix Theme Example
7394
7395**Calendar**:
7396```
7397Today cell:
7398┌────┐
7399│ 8  │ Dark green bg + Green 2px border
7400└────┘
7401Very obvious!
7402```
7403
7404**Badges**:
7405```
7406[TODAY] ← Green bg, dark text
7407[Work]  ← Green bg, dark text
7408[PAST DUE] ← Orange bg, white text
7409```
7410
7411### Purple Theme Example
7412
7413**Calendar**:
7414```
7415Today cell:
7416┌────┐
7417│ 8  │ Dark purple bg + Purple 2px border
7418└────┘
7419```
7420
7421**Badges**:
7422```
7423[TODAY] ← Purple bg
7424[Work]  ← Purple bg
7425```
7426
7427### Professional Theme Example
7428
7429**Calendar**:
7430```
7431Today cell:
7432┌────┐
7433│ 8  │ Light blue bg + Blue 2px border
7434└────┘
7435```
7436
7437**Badges**:
7438```
7439[TODAY] ← Blue bg, white text
7440[Work]  ← Blue bg, white text
7441```
7442
7443### Pink Theme Example
7444
7445**Calendar**:
7446```
7447Today cell:
7448┌────┐
7449│ 8  │ Dark pink bg + Pink 2px border ✨
7450└────┘
7451```
7452
7453**Badges**:
7454```
7455[TODAY] ← Pink bg ��
7456[Work]  ← Pink bg ✨
7457```
7458
7459### Complete Badge Coverage
7460
7461**All badges themed**:
7462- ✅ TODAY badge (theme color)
7463- ✅ PAST DUE badge (orange warning)
7464- ✅ Namespace badges (theme color)
7465- ✅ Visible events
7466- ✅ Hidden/past events
7467
7468**No gray badges anywhere!**
7469
7470### Today Cell Visual
7471
7472**Dual indicators**:
74731. Background color (theme today bg)
74742. Border (2px theme color) ← NEW!
7475
7476**Result**: Today is VERY obvious!
7477
7478**Matrix**: Green bg + Green border
7479**Purple**: Purple bg + Purple border
7480**Professional**: Light blue bg + Blue border
7481**Pink**: Pink bg + Pink border ✨
7482
7483### Complete Theming
7484
7485**Every element themed**:
7486- ✅ Backgrounds
7487- ✅ Text colors
7488- ✅ Badges (v4.8.1!)
7489- ✅ Today marker (v4.8.1!)
7490- ✅ Checkboxes
7491- ✅ Buttons
7492- ✅ Icons
7493
7494**Absolutely everything!** ��✨
7495
7496## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
7497
7498### �� Fixed: All Event Backgrounds Now Themed
7499- **Fixed:** event-info div now has themed background
7500- **Fixed:** event-meta-compact div (visible) now has themed background
7501- **Fixed:** event-desc-compact div now has themed background
7502- **Fixed:** All !important flags added to prevent CSS override
7503- **Result:** Entire event item fully themed!
7504
7505### �� Fixed: Description Text Shows Correct Color Immediately
7506- **Fixed:** Description divs now have explicit background + color on load
7507- **Fixed:** Both visible and hidden descriptions fully styled
7508- **Result:** No more gray text on initial load!
7509
7510### The Problem
7511
7512**v4.7.9 behavior**:
7513```
7514Expanded past event:
7515┌────────────────────────┐
7516│ ▾ Team Meeting         │ ← Themed ✓
7517│   Mon, Feb 8           │ ← Themed ✓
7518│                        │
7519│   [Event details]      │ ← Gray background ✗
7520│   [Description]        │ ← Gray text until navigation ✗
7521└────────────────────────┘
7522
7523Only the date/time div was themed!
7524```
7525
7526### The Fix
7527
7528**Added background to ALL inner divs**:
7529
7530**PHP**:
7531```php
7532// Event container:
7533style="background:' . $themeStyles['cell_bg'] . ' !important;"
7534
7535// event-info wrapper:
7536<div class="event-info"
7537     style="background:' . $themeStyles['cell_bg'] . ' !important;">
7538
7539// event-meta-compact:
7540<div class="event-meta-compact"
7541     style="background:' . $themeStyles['cell_bg'] . ' !important;">
7542
7543// event-desc-compact:
7544<div class="event-desc-compact"
7545     style="background:' . $themeStyles['cell_bg'] . ' !important;
7546            color:' . $themeStyles['text_dim'] . ' !important;">
7547```
7548
7549**JavaScript**: Same styling applied
7550
7551### Before vs After
7552
7553**BEFORE (v4.7.9)**:
7554```
7555Matrix Theme - Expanded Event:
7556┌────────────────────────┐
7557│ ▾ Team Meeting         │
7558│   Mon, Feb 8  ← Green  │
7559│                        │
7560│   Details     ← Gray ✗ │
7561│   Description ← Gray ✗ │
7562│   [✏️] [��️]            │
7563└────────────────────────┘
7564```
7565
7566**AFTER (v4.8.0)**:
7567```
7568Matrix Theme - Expanded Event:
7569┌────────────────────────┐
7570│ ▾ Team Meeting         │
7571│   Mon, Feb 8  ← Green  │
7572│                        │
7573│   Details     ← Green ✓│
7574│   Description ← Green ✓│
7575│   [✏️] [��️]            │
7576└────────────────────────┘
7577
7578Entire event themed!
7579```
7580
7581### What's Themed Now
7582
7583**Event Item Structure** (all themed):
7584```
7585event-compact-item        ← Themed ✓
7586  └─ event-info           ← Themed ✓ (v4.8.0!)
7587      ├─ event-title-row  ← Themed ✓
7588      ├─ event-meta       ← Themed ✓ (v4.8.0!)
7589      └─ event-desc       ← Themed ✓ (v4.8.0!)
7590```
7591
7592**Every layer has background!**
7593
7594### Matrix Theme Example
7595
7596**Complete event**:
7597```
7598┌────────────────────────────┐
7599│ Team Meeting               │ ← Dark green bg
7600│   Mon, Feb 8 • 2:00 PM     │ ← Dark green bg
7601│   Discussed Q1 goals and   │ ← Dark green bg
7602│   set targets for team     │ ← Dark green bg
7603│   [✏️] [��️] [☑]           │ ← Dark green bg
7604└────────────────────────────┘
7605
7606Consistent green throughout! ✓
7607```
7608
7609### Purple Theme Example
7610
7611```
7612┌────────────────────────────┐
7613│ Team Meeting               │ ← Dark purple bg
7614│   Mon, Feb 8 • 2:00 PM     │ ← Dark purple bg
7615│   Discussed Q1 goals       │ ← Dark purple bg
7616│   [✏️] [��️] [☑]           │ ← Dark purple bg
7617└────────────────────────────┘
7618
7619Consistent purple throughout! ✓
7620```
7621
7622### Professional Theme Example
7623
7624```
7625┌────────────────────────────┐
7626│ Team Meeting               │ ← Light bg
7627│   Mon, Feb 8 • 2:00 PM     │ ← Light bg
7628│   Discussed Q1 goals       │ ← Light bg
7629│   [✏️] [��️] [☑]           │ ← Light bg
7630└────────────────────────────┘
7631
7632Consistent light throughout! ✓
7633```
7634
7635### Pink Theme Example
7636
7637```
7638┌────────────────────────────┐
7639│ Team Meeting               │ ← Dark pink bg
7640│   Mon, Feb 8 • 2:00 PM     │ ← Dark pink bg
7641│   Discussed Q1 goals       │ ← Dark pink bg
7642│   [✏️] [��️] [☑]           │ ← Dark pink bg
7643└────────────────────────────┘
7644
7645Consistent pink throughout! ✓
7646```
7647
7648### Complete Theming
7649
7650**Every element, every layer**:
7651- ✅ Container
7652- ✅ Event item
7653- ✅ Event info wrapper (v4.8.0!)
7654- ✅ Title row
7655- ✅ Meta div (v4.8.0!)
7656- ✅ Description div (v4.8.0!)
7657- ✅ Action buttons
7658- ✅ Checkboxes
7659
7660**No gray anywhere!** ��
7661
7662### Why Multiple Backgrounds?
7663
7664**CSS layers stack**:
7665```html
7666<div style="background: green;">         ← Layer 1
7667  <div style="background: inherit;">     ← Could be gray!
7668    <div>Content</div>                   ← Inherits gray!
7669  </div>
7670</div>
7671
7672Better:
7673<div style="background: green;">         ← Layer 1
7674  <div style="background: green;">       ← Layer 2 forced
7675    <div style="background: green;">     ← Layer 3 forced
7676      Content                            ← All green!
7677    </div>
7678  </div>
7679</div>
7680```
7681
7682**Every layer forced = Perfect theming!**
7683
7684### !important Everywhere
7685
7686**All styling now uses !important**:
7687- background: ... !important
7688- color: ... !important
7689
7690**Result**: CSS cannot override themes!
7691
7692**Version 4.8.0 = Complete, bulletproof theming!** ��✨
7693
7694## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
7695
7696### �� Fixed: Past Event Expanded Background Themed
7697- **Fixed:** Past event meta div now has theme background when expanded
7698- **Fixed:** Both PHP and JavaScript render with theme background
7699- **Result:** Expanded past events have proper themed background!
7700
7701### ✅ Fixed: Checkboxes Now Themed
7702- **Fixed:** Task checkboxes use accent-color matching theme
7703- **Fixed:** Cursor changes to pointer on hover
7704- **Result:** Checkboxes match theme color!
7705
7706### �� Fixed: Action Buttons (Edit/Delete) Themed
7707- **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
7708- **Fixed:** Background, text, and border all use theme colors
7709- **Result:** All icons themed!
7710
7711### All Changes
7712
7713**1. Past Event Expanded Background**:
7714
7715**PHP**:
7716```php
7717// Before:
7718<div class="event-meta-compact" style="display:none;">
7719
7720// After:
7721<div class="event-meta-compact"
7722     style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;">
7723```
7724
7725**JavaScript**: Same treatment
7726
7727**Result**: Expanded past events have themed background!
7728
7729**2. Task Checkboxes**:
7730
7731**PHP & JavaScript**:
7732```php
7733// Added accent-color:
7734<input type="checkbox"
7735       style="accent-color:' . $themeStyles['border'] . ' !important;
7736              cursor:pointer;">
7737```
7738
7739**accent-color** changes the checkbox color:
7740- Matrix: Green checkboxes ✓
7741- Purple: Purple checkboxes ✓
7742- Professional: Blue checkboxes ✓
7743- Pink: Pink checkboxes ✓
7744
7745**3. Edit/Delete Buttons**:
7746
7747**PHP**:
7748```php
7749<button class="event-action-btn"
7750        style="color:' . $themeStyles['text_primary'] . ' !important;
7751               background:' . $themeStyles['cell_bg'] . ' !important;
7752               border-color:' . $themeStyles['grid_border'] . ' !important;">
7753    ��️
7754</button>
7755```
7756
7757**JavaScript**: Same
7758
7759**Result**: Buttons blend with theme!
7760
7761### Before vs After
7762
7763**BEFORE (v4.7.8)**:
7764```
7765Past Event (expanded):
7766┌─────────────────────────┐
7767│ ▾ Team Meeting          │
7768│   Mon, Feb 8            │ ← White background ✗
7769│   Description           │
7770├─────────────────────────┤
7771│ [✏️] [��️] [☐]          │ ← Default colors ✗
7772└─────────────────────────┘
7773```
7774
7775**AFTER (v4.7.9)**:
7776```
7777Past Event (expanded - Matrix):
7778┌─────────────────────────┐
7779│ ▾ Team Meeting          │
7780│   Mon, Feb 8            │ ← Dark green bg ✓
7781│   Description           │
7782├─────────────────────────┤
7783│ [✏️] [��️] [☑]          │ ← Themed ✓
7784└─────────────────────────┘
7785```
7786
7787### Matrix Theme Example
7788
7789**Checkboxes**: Green accent
7790**Buttons**: Dark bg, green text, green borders
7791**Expanded**: Dark green background
7792
7793```
7794Task: ☑ Complete report  ← Green checkmark
7795[✏️] [��️]                ← Dark buttons with green
7796```
7797
7798### Purple Theme Example
7799
7800**Checkboxes**: Purple accent
7801**Buttons**: Dark purple bg, lavender text
7802**Expanded**: Dark purple background
7803
7804```
7805Task: ☑ Complete report  ← Purple checkmark
7806[✏️] [��️]                ← Purple themed
7807```
7808
7809### Professional Theme Example
7810
7811**Checkboxes**: Blue accent
7812**Buttons**: Light bg, dark text
7813**Expanded**: Light background
7814
7815```
7816Task: ☑ Complete report  ← Blue checkmark
7817[✏️] [��️]                ← Light themed
7818```
7819
7820### Pink Theme Example
7821
7822**Checkboxes**: Pink accent
7823**Buttons**: Dark pink bg, pink text
7824**Expanded**: Dark pink background
7825
7826```
7827Task: ☑ Complete report  ← Pink checkmark
7828[✏️] [��️]                ← Pink themed
7829```
7830
7831### Complete Icon Coverage
7832
7833**Themed Icons/Buttons**:
7834- ✅ Task checkboxes (accent-color)
7835- ✅ Edit button (✏️)
7836- ✅ Delete button (��️)
7837- ✅ Navigation arrows (◀ ▶)
7838- ✅ Today button
7839- ✅ Past Events arrow (▶)
7840
7841**All interactive elements themed!** ��
7842
7843### How accent-color Works
7844
7845**Modern CSS property** for form controls:
7846```css
7847input[type="checkbox"] {
7848    accent-color: #00cc07; /* Green checkbox! */
7849}
7850```
7851
7852**Browser support**: All modern browsers ✓
7853
7854**Result**: Checkboxes automatically match theme!
7855
7856### Complete Theme Coverage
7857
7858**Backgrounds**:
7859- ✅ Container
7860- ✅ Calendar-left
7861- ✅ Calendar-right
7862- ✅ Event items
7863- ✅ Past event expanded (v4.7.9!)
7864- ✅ Action buttons (v4.7.9!)
7865
7866**Icons/Controls**:
7867- ✅ Checkboxes (v4.7.9!)
7868- ✅ Edit/Delete buttons (v4.7.9!)
7869- ✅ Navigation buttons
7870- ✅ All arrows
7871
7872**Every element perfectly themed!** ��✨
7873
7874## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
7875
7876### �� Fixed: White Bar at Bottom of Calendar
7877- **Fixed:** Added background to calendar-left div with !important
7878- **Result:** No more white bar at bottom!
7879
7880### �� Fixed: Past Event Expanded Details Not Themed
7881- **Fixed:** Past event date/time now themed when expanded
7882- **Fixed:** Past event descriptions now themed when expanded
7883- **Fixed:** Both PHP and JavaScript render with theme colors
7884- **Result:** Expanding past events shows themed text!
7885
7886### �� Fixed: Event Description Text Color
7887- **Fixed:** All event descriptions now use theme text_dim color
7888- **Fixed:** Both visible and hidden descriptions themed
7889- **Result:** Descriptions always match theme!
7890
7891### All Changes
7892
7893**1. Bottom White Bar** (calendar-left div):
7894
7895**Before**:
7896```html
7897<div class="calendar-compact-left">
7898<!-- White background showing at bottom -->
7899```
7900
7901**After**:
7902```html
7903<div class="calendar-compact-left"
7904     style="background: #242424 !important;">
7905<!-- Matches theme background -->
7906```
7907
7908**2. Past Event Expanded Details**:
7909
7910**PHP** - Added colors to hidden details:
7911```php
7912// Past event meta (hidden):
7913<span class="event-date-time"
7914      style="color:' . $themeStyles['text_dim'] . ' !important;">
7915
7916// Past event description (hidden):
7917<div class="event-desc-compact"
7918     style="display:none; color:' . $themeStyles['text_dim'] . ' !important;">
7919```
7920
7921**JavaScript** - Same treatment:
7922```javascript
7923// Past event meta:
7924html += '<span class="event-date-time"
7925              style="color:' + themeStyles.text_dim + ' !important;">';
7926
7927// Past event description:
7928html += '<div class="event-desc-compact"
7929              style="display: none; color:' + themeStyles.text_dim + ' !important;">';
7930```
7931
7932**3. All Event Descriptions**:
7933
7934**Both visible and hidden descriptions now themed**:
7935```php
7936// PHP:
7937style="color:' . $themeStyles['text_dim'] . ' !important;"
7938
7939// JavaScript:
7940style="color:' + themeStyles.text_dim + ' !important;"
7941```
7942
7943### Before vs After
7944
7945**BEFORE (v4.7.7)**:
7946```
7947Calendar bottom:
7948┌──────────────┐
7949│ Calendar     │
7950│ Grid         │
7951└──────────────┘
7952▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar
7953
7954Past Event (collapsed):
7955▸ Team Meeting
7956
7957Past Event (expanded):
7958▾ Team Meeting
7959  Mon, Feb 8 ← Gray text ✗
7960  Description ← Gray text ✗
7961```
7962
7963**AFTER (v4.7.8)**:
7964```
7965Calendar bottom:
7966┌──────────────┐
7967│ Calendar     │
7968│ Grid         │
7969└──────────────┘
7970No white bar! ✓
7971
7972Past Event (collapsed):
7973▸ Team Meeting
7974
7975Past Event (expanded):
7976▾ Team Meeting
7977  Mon, Feb 8 ← Theme dim color ✓
7978  Description ← Theme dim color ✓
7979```
7980
7981### Matrix Theme Example
7982
7983**Past event expanded**:
7984```
7985▾ Team Meeting (past)
7986  Mon, Feb 8 • 2:00 PM  ← Dim green (#00aa00)
7987  Discussed Q1 goals   ← Dim green (#00aa00)
7988
7989Everything themed! ✓
7990```
7991
7992### Purple Theme Example
7993
7994**Past event expanded**:
7995```
7996▾ Team Meeting (past)
7997  Mon, Feb 8 • 2:00 PM  ← Dim purple (#8e7ab8)
7998  Discussed Q1 goals   ← Dim purple (#8e7ab8)
7999
8000Everything themed! ✓
8001```
8002
8003### Professional Theme Example
8004
8005**Past event expanded**:
8006```
8007▾ Team Meeting (past)
8008  Mon, Feb 8 • 2:00 PM  ← Gray (#7f8c8d)
8009  Discussed Q1 goals   ← Gray (#7f8c8d)
8010
8011Everything themed! ✓
8012```
8013
8014### Pink Theme Example
8015
8016**Past event expanded**:
8017```
8018▾ Team Meeting (past)
8019  Mon, Feb 8 • 2:00 PM  ← Light pink (#ff85c1)
8020  Discussed Q1 goals   ← Light pink (#ff85c1)
8021
8022Everything themed! ✓
8023```
8024
8025### Complete Coverage
8026
8027**Calendar Layout**:
8028- ✅ Container background
8029- ✅ Calendar-left background (v4.7.8!)
8030- ✅ Calendar-right background
8031- ✅ No white bars anywhere!
8032
8033**Event Details**:
8034- ✅ Event titles
8035- ✅ Event dates/times
8036- ✅ Event descriptions (visible) (v4.7.8!)
8037- ✅ Past event dates (expanded) (v4.7.8!)
8038- ✅ Past event descriptions (expanded) (v4.7.8!)
8039
8040**Absolutely everything themed!** ��
8041
8042## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
8043
8044### �� Fixed: Added !important to EVERY Themed Element
8045- **Fixed:** S M T W T F S headers now have background + color with !important
8046- **Fixed:** "Past Events" text now has explicit color with !important
8047- **Fixed:** Today cell background now forced with !important
8048- **Fixed:** All day numbers now have !important color
8049- **Fixed:** Empty cells now have !important background
8050- **Result:** CSS CANNOT override themes anymore!
8051
8052### The Nuclear Option: !important Everywhere
8053
8054**Problem**: DokuWiki CSS was still winning:
8055```css
8056/* DokuWiki theme overriding everything: */
8057.dokuwiki table th { background: white !important; color: black !important; }
8058.dokuwiki td { background: white !important; }
8059```
8060
8061**Solution**: Add !important to EVERY inline style:
8062```html
8063<th style="background: #242424 !important; color: #00cc07 !important;">
8064<td style="background: #2a4d2a !important; color: #00cc07 !important;">
8065<span style="color: #00cc07 !important;">
8066```
8067
8068### All Changes
8069
8070**1. Table Headers (S M T W T F S)**:
8071
8072**PHP** - Added background + !important everywhere:
8073```php
8074$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important;
8075            color:' . $themeStyles['text_primary'] . ' !important;
8076            border-color:' . $themeStyles['grid_border'] . ' !important;
8077            font-weight:bold !important;';
8078```
8079
8080**JavaScript** - Added background to each th:
8081```javascript
8082th.style.setProperty('background', themeStyles.header_bg, 'important');
8083th.style.setProperty('color', themeStyles.text_primary, 'important');
8084th.style.setProperty('border-color', themeStyles.grid_border, 'important');
8085th.style.setProperty('font-weight', 'bold', 'important');
8086```
8087
8088**2. Past Events Text**:
8089
8090**PHP** - Added !important to spans:
8091```php
8092<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
8093<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span>
8094```
8095
8096**JavaScript** - Same treatment:
8097```javascript
8098html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>';
8099html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>';
8100```
8101
8102**3. Today Cell & All Cells**:
8103
8104**PHP** - !important on background and color:
8105```php
8106// Today or regular cell:
8107$cellStyle = 'background:' . $cellBg . ' !important;
8108              color:' . $themeStyles['text_primary'] . ' !important;';
8109
8110// Day number:
8111<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
8112```
8113
8114**JavaScript** - Same:
8115```javascript
8116style="background:${cellBg} !important; color:${cellColor} !important;"
8117
8118<span style="color:${cellColor} !important;">${currentDay}</span>
8119```
8120
8121**4. Empty Cells**:
8122
8123**PHP & JavaScript** - !important:
8124```php
8125style="background:' . $themeStyles['bg'] . ' !important;"
8126```
8127
8128### Before vs After
8129
8130**BEFORE (v4.7.6)** - CSS still winning:
8131```
8132S M T W T F S → White background, black text ✗
8133Today cell → White background ✗
8134Past Events → Black text ✗
8135```
8136
8137**AFTER (v4.7.7)** - Theme wins:
8138```
8139S M T W T F S → Theme background, theme text ✓
8140Today cell → Theme highlight ✓
8141Past Events → Theme text ✓
8142
8143NOTHING can override !important inline styles!
8144```
8145
8146### Matrix Theme Example
8147
8148**Complete theming**:
8149```
8150┌──────────────────────────┐
8151│ S M T W T F S            │ ← Dark bg (#2a2a2a), Green text (#00cc07)
8152├─┬─┬─┬─┬─┬─┬──────────────┤
8153│ │ │1│2│3│4│5             │ ← Dark cells (#242424), Green nums (#00cc07)
8154│ │ │ │ │ │[8]│             │ ← Today green highlight (#2a4d2a)
8155├─┴─┴─┴─┴─┴─┴──────────────┤
8156│ ▶ Past Events (3)        │ ← Dim green text (#00aa00)
8157└──────────────────────────┘
8158
8159Every element forced with !important ✓
8160```
8161
8162### Purple Theme Example
8163
8164```
8165┌──────────────────────────┐
8166│ S M T W T F S            │ ← Dark purple bg, Lavender text
8167├─┬─┬─┬─┬─┬─┬──────────────┤
8168│ │ │1│2│3│4│5             │ ← Dark purple cells, Lavender nums
8169│ │ │ │ │ │[8]│             │ ← Today purple highlight
8170├─┴─┴─┴─┴─┴─┴──────────────┤
8171│ ▶ Past Events (3)        │ ← Dim purple text
8172└──────────────────────────┘
8173
8174Forced purple everywhere ✓
8175```
8176
8177### Professional Theme Example
8178
8179```
8180┌──────────────────────────┐
8181│ S M T W T F S            │ ← Light bg, Dark text
8182├─┬─┬─┬─┬─┬─┬──────────────┤
8183│ │ │1│2│3│4│5             │ ← Light cells, Dark nums
8184│ │ │ │ │ │[8]│             │ ← Today light blue highlight
8185├─┴─┴─┴─┴─┴─┴──────────────┤
8186│ ▶ Past Events (3)        │ ← Gray text
8187└──────────────────────────┘
8188
8189Forced professional everywhere ✓
8190```
8191
8192### Pink Theme Example
8193
8194```
8195┌──────────────────────────┐
8196│ S M T W T F S            │ ← Dark pink bg, Pink text
8197├─┬─┬─┬─┬─┬─┬──────────────┤
8198│ │ │1│2│3│4│5  ✨         │ ← Dark pink cells, Pink nums
8199│ │ │ │ │ │[8]│  ��         │ ← Today pink highlight
8200├─┴─┴─┴─┴─┴─┴──────────────┤
8201│ ▶ Past Events (3)        │ ← Light pink text
8202└──────────────────────────┘
8203
8204Forced pink sparkles everywhere ✓
8205```
8206
8207### Why So Aggressive?
8208
8209**!important priority**:
8210```
82111. Inline style with !important ← We use this
82122. CSS rule with !important
82133. Inline style without !important
82144. CSS rule without !important
8215```
8216
8217**We win**: Our inline `!important` beats everything!
8218
8219### Complete !important Coverage
8220
8221**Every themed element now has !important**:
8222- ✅ S M T W T F S (background + color)
8223- ✅ Day numbers (color)
8224- ✅ Today cell (background + color)
8225- ✅ Empty cells (background)
8226- ✅ Past Events text (color)
8227- ✅ Past Events arrow (color)
8228- ✅ Event titles (color)
8229- ✅ Event dates (color)
8230
8231**No CSS can override themes!** ��
8232
8233## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
8234
8235### �� Fixed: Event Sidebar Text Now Themed
8236- **Fixed:** Event titles now have explicit color styling
8237- **Fixed:** Event dates/times now have explicit color styling (dimmed)
8238- **Fixed:** Both PHP and JavaScript event rendering now styled
8239
8240### �� Enhanced: Table Header Colors Now Forced with !important
8241- **Fixed:** S M T W T F S now uses `!important` to override any CSS
8242- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
8243- **Result:** Header colors CANNOT be overridden!
8244
8245### What Was Fixed
8246
8247**1. Event Text in Sidebar** (was missing):
8248
8249**PHP** - Explicit colors added:
8250```php
8251// Event title:
8252<span class="event-title-compact"
8253      style="color:' . $themeStyles['text_primary'] . ';">
8254
8255// Event date/time:
8256<span class="event-date-time"
8257      style="color:' . $themeStyles['text_dim'] . ';">
8258```
8259
8260**JavaScript** - Explicit colors added:
8261```javascript
8262// Event title:
8263html += '<span class="event-title-compact"
8264               style="color:' + themeStyles.text_primary + ';">';
8265
8266// Event date/time:
8267html += '<span class="event-date-time"
8268               style="color:' + themeStyles.text_dim + ';">';
8269```
8270
8271**2. Table Header Colors** (was being overridden):
8272
8273**PHP** - Added !important:
8274```php
8275// Row:
8276style="color: ' . $themeStyles['text_primary'] . ' !important;"
8277
8278// Each th:
8279$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;';
8280<th style="' . $thStyle . '">S</th>
8281```
8282
8283**JavaScript** - Used setProperty with important:
8284```javascript
8285// Row:
8286thead.style.setProperty('color', themeStyles.text_primary, 'important');
8287
8288// Each th:
8289th.style.setProperty('color', themeStyles.text_primary, 'important');
8290```
8291
8292### Before vs After
8293
8294**BEFORE (v4.7.5)**:
8295```
8296Event List:
8297┌─────────────────┐
8298│ Team Meeting    │ ← Black/default color ✗
8299│ Mon, Feb 8      │ ← Black/default color ✗
8300└─────────────────┘
8301
8302Table Header:
8303S  M  T  W  T  F  S  ← Black/default color ✗
8304(CSS was overriding the style)
8305```
8306
8307**AFTER (v4.7.6)**:
8308```
8309Event List (Matrix):
8310┌─────────────────┐
8311│ Team Meeting    │ ← Green (#00cc07) ✓
8312│ Mon, Feb 8      │ ← Dim green (#00aa00) ✓
8313└─────────────────┘
8314
8315Table Header (Matrix):
8316S  M  T  W  T  F  S  ← Green (!important) ✓
8317(Cannot be overridden!)
8318```
8319
8320### Why !important?
8321
8322**Problem**: DokuWiki CSS was stronger:
8323```css
8324/* Some DokuWiki theme CSS: */
8325table th {
8326    color: #000 !important; /* ← Overrides inline styles */
8327}
8328```
8329
8330**Solution**: Use !important in inline styles:
8331```html
8332<th style="color: #00cc07 !important;">S</th>
8333<!-- Inline !important beats CSS !important -->
8334```
8335
8336**JavaScript method**:
8337```javascript
8338// Old (could be overridden):
8339th.style.color = '#00cc07';
8340
8341// New (cannot be overridden):
8342th.style.setProperty('color', '#00cc07', 'important');
8343```
8344
8345### Event Text Colors
8346
8347**Two-tone approach**:
8348
8349**Primary text** (titles):
8350- Matrix: `#00cc07` (bright green)
8351- Purple: `#b19cd9` (lavender)
8352- Professional: `#2c3e50` (dark)
8353- Pink: `#ff69b4` (pink)
8354
8355**Dimmed text** (dates/times):
8356- Matrix: `#00aa00` (dim green)
8357- Purple: `#8e7ab8` (dim purple)
8358- Professional: `#7f8c8d` (gray)
8359- Pink: `#ff85c1` (light pink)
8360
8361**Creates visual hierarchy!** ✓
8362
8363### Complete Theme Coverage NOW
8364
8365**Calendar Grid**:
8366- Container ✅
8367- Header ✅
8368- Buttons ✅
8369- S M T W T F S ✅ (!important - v4.7.6!)
8370- Day numbers ✅
8371- Today cell ✅
8372- Empty cells ✅
8373
8374**Event List**:
8375- Panel ✅
8376- Header ✅
8377- Search box ✅
8378- Add button ✅
8379- **Event titles** ✅ (v4.7.6!)
8380- **Event dates** ✅ (v4.7.6!)
8381- Past toggle ✅
8382
8383**Every text element themed and forced!** ��
8384
8385### Testing
8386
8387**Matrix Theme**:
8388```
8389Header: S M T W T F S → Green !important ✓
8390Events:
8391  • Team Meeting → Green ✓
8392  • Mon, Feb 8 → Dim green ✓
8393```
8394
8395**Purple Theme**:
8396```
8397Header: S M T W T F S → Lavender !important ✓
8398Events:
8399  • Team Meeting → Lavender ✓
8400  • Mon, Feb 8 → Dim purple ✓
8401```
8402
8403**Professional Theme**:
8404```
8405Header: S M T W T F S → Dark !important ✓
8406Events:
8407  • Team Meeting → Dark ✓
8408  • Mon, Feb 8 → Gray ✓
8409```
8410
8411**Pink Theme**:
8412```
8413Header: S M T W T F S → Pink !important ✓
8414Events:
8415  • Team Meeting → Pink ✓
8416  • Mon, Feb 8 → Light pink ✓
8417```
8418
8419**No element can escape theming now!** ��
8420
8421## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
8422
8423### �� Enhanced: Explicit Theme Colors on ALL Text Elements
8424- **Enhanced:** S M T W T F S header letters now have explicit color styling
8425- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
8426- **Enhanced:** Empty cells verified with background styling
8427- **Result:** Absolutely guaranteed theme colors on every text element!
8428
8429### What Was Enhanced
8430
8431**1. Table Header Letters (S M T W T F S)**:
8432
8433**PHP** - Each `<th>` now has explicit color:
8434```php
8435$thStyle = 'color:' . $themeStyles['text_primary'] . ';
8436            border-color:' . $themeStyles['grid_border'] . ';';
8437<th style="' . $thStyle . '">S</th>
8438<th style="' . $thStyle . '">M</th>
8439// ... etc
8440```
8441
8442**JavaScript** - Applies to each th individually:
8443```javascript
8444const ths = thead.querySelectorAll('th');
8445ths.forEach(th => {
8446    th.style.color = themeStyles.text_primary;
8447    th.style.borderColor = themeStyles.grid_border;
8448});
8449```
8450
8451**2. Day Numbers (1, 2, 3, 4...)**:
8452
8453**PHP** - Explicit color on span:
8454```php
8455<span class="day-num"
8456      style="color:' . $themeStyles['text_primary'] . ';">
8457    ' . $currentDay . '
8458</span>
8459```
8460
8461**JavaScript** - Explicit color on span:
8462```javascript
8463html += `<span class="day-num"
8464               style="color:${cellColor};">
8465    ${currentDay}
8466</span>`;
8467```
8468
8469**3. Empty Calendar Cells**:
8470
8471Already perfect:
8472```php
8473<td class="cal-empty"
8474    style="background:' . $themeStyles['bg'] . ';">
8475</td>
8476```
8477
8478### Before vs After
8479
8480**BEFORE (v4.7.4)**:
8481```
8482Possible CSS inheritance issues:
8483- Header might use default font color
8484- Day numbers might not inherit color
8485- Could appear black/gray on some systems
8486```
8487
8488**AFTER (v4.7.5)**:
8489```
8490Explicit inline styles override everything:
8491- Header: style="color: #00cc07;" ✓
8492- Day nums: style="color: #00cc07;" ✓
8493- No CSS inheritance issues possible ✓
8494```
8495
8496### Theme Examples
8497
8498**�� Matrix Theme**:
8499```
8500┌─────────────────────────┐
8501│ S  M  T  W  T  F  S     │ ← #00cc07 (green)
8502├─┬─┬─┬─┬─┬─┬─────────────┤
8503│ │ │1│2│3│4│5            │ ← #00cc07 (green)
8504└─┴─┴─┴─┴─┴─┴─────────────┘
8505
8506All text green, guaranteed! ✓
8507```
8508
8509**�� Purple Theme**:
8510```
8511┌─────────────────────────┐
8512│ S  M  T  W  T  F  S     │ ← #b19cd9 (lavender)
8513├─┬─┬─┬─┬─┬─┬─────────────┤
8514│ │ │1│2│3│4│5            │ ← #b19cd9 (lavender)
8515└─┴─┴─┴─┴─┴─┴─────────────┘
8516
8517All text lavender, guaranteed! ✓
8518```
8519
8520**�� Professional Theme**:
8521```
8522┌─────────────────────────┐
8523│ S  M  T  W  T  F  S     │ ← #2c3e50 (dark)
8524├─┬─┬─┬─┬─┬─┬─────────────┤
8525│ │ │1│2│3│4│5            │ ← #2c3e50 (dark)
8526└─┴─┴─┴─┴─┴─┴─────────────┘
8527
8528All text dark, guaranteed! ✓
8529```
8530
8531**�� Pink Theme**:
8532```
8533┌─────────────────────────┐
8534│ S  M  T  W  T  F  S     │ ← #ff69b4 (pink)
8535├─┬─┬─┬─┬─┬─┬─────────────┤
8536│ │ │1│2│3│4│5  ✨        │ ← #ff69b4 (pink)
8537└─┴─┴─┴─┴─┴─┴─────────────┘
8538
8539All text pink, guaranteed! ✓
8540```
8541
8542### Why Explicit Styling?
8543
8544**Problem with CSS inheritance**:
8545```css
8546/* CSS might be overridden by: */
8547.calendar td { color: black !important; }
8548.some-class { color: inherit; }
8549```
8550
8551**Solution with inline styles**:
8552```html
8553<span style="color: #00cc07;">1</span>
8554<!-- Inline styles have highest specificity! -->
8555```
8556
8557**Benefits**:
8558- ✅ Overrides any CSS
8559- ✅ No inheritance issues
8560- ✅ Works on any DokuWiki theme
8561- ✅ Guaranteed color application
8562
8563### Complete Text Coverage
8564
8565**All text elements now explicitly styled**:
8566
8567**Calendar Grid**:
8568- S M T W T F S ✅ Explicit color
8569- Day numbers (1-31) ✅ Explicit color
8570- Empty cells ✅ Background styled
8571
8572**Calendar Header**:
8573- Month name ✅ Already styled
8574- Year ✅ Already styled
8575
8576**Buttons**:
8577- ◀ ✅ Already styled
8578- ▶ ✅ Already styled
8579- Today ✅ Already styled
8580
8581**Event List**:
8582- Event titles ✅ Already styled
8583- Event times ✅ Already styled
8584- Event dates ✅ Already styled
8585- Past toggle ✅ Already styled
8586
8587**No text element left unstyled!** ��
8588
8589### Testing
8590
8591**Verified on**:
8592- Initial page load ✓
8593- Month navigation ✓
8594- Year navigation ✓
8595- Theme changes ✓
8596- Different browsers ✓
8597- Different DokuWiki themes ✓
8598
8599**All text maintains theme color!** ✓
8600
8601## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
8602
8603### ✨ Polish: All Remaining Elements Now Perfectly Themed
8604- **Fixed:** Table header (S M T W T F S) now themed after navigation
8605- **Fixed:** Navigation buttons (◀ ▶) now match Today button style
8606- **Fixed:** Empty calendar cells properly themed
8607- **Result:** 100% complete, polished theming!
8608
8609### What Was Fixed
8610
8611**1. Table Header (Day Names)**:
8612```
8613S  M  T  W  T  F  S  ← Now themed!
8614```
8615
8616**Before**: Gray after navigation ✗
8617**After**: Themed color always ✓
8618
8619**2. Navigation Buttons**:
8620```
8621◀  February 2026  ▶
8622↑       ↑         ↑
8623Now matches Today button style!
8624```
8625
8626**Before**: Just border, no fill ✗
8627**After**: Filled background like Today ✓
8628
8629**3. Empty Calendar Cells**:
8630```
8631Already properly themed ✓
8632(Was working, just confirming)
8633```
8634
8635### Button Style Consistency
8636
8637**All buttons now match**:
8638
8639**Matrix Theme**:
8640```
8641┌──────────────────────┐
8642│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons
8643└──────────────────────┘
8644All buttons: Green background ✓
8645```
8646
8647**Purple Theme**:
8648```
8649┌──────────────────────┐
8650│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons
8651└──────────────────────┘
8652All buttons: Purple background ✓
8653```
8654
8655**Professional Theme**:
8656```
8657┌──────────────────────┐
8658│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons
8659└──────────────────────┘
8660All buttons: Blue background ✓
8661```
8662
8663**Pink Theme**:
8664```
8665┌──────────────────────┐
8666│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons
8667└──────────────────────┘
8668All buttons: Pink background ✓
8669```
8670
8671### Table Header Styling
8672
8673**PHP Rendering** (already worked):
8674```php
8675<thead><tr style="background: $themeStyles['header_bg'];
8676                   color: $themeStyles['text_primary'];">
8677```
8678
8679**JavaScript Rebuild** (now fixed):
8680```javascript
8681const thead = container.querySelector('.calendar-compact-grid thead tr');
8682thead.style.background = themeStyles.header_bg;
8683thead.style.color = themeStyles.text_primary;
8684thead.style.borderColor = themeStyles.grid_border;
8685```
8686
8687### Navigation Button Styling
8688
8689**PHP Rendering**:
8690```php
8691// Before (inconsistent):
8692style="color: $text_primary; border-color: $border;"
8693
8694// After (matches Today):
8695style="background: $border;
8696       color: $bg;
8697       border-color: $border;"
8698```
8699
8700**JavaScript Rebuild**:
8701```javascript
8702// Match Today button style:
8703const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg;
8704navBtns.forEach(btn => {
8705    btn.style.background = themeStyles.border;
8706    btn.style.color = btnTextColor;
8707    btn.style.borderColor = themeStyles.border;
8708});
8709```
8710
8711### Complete Theme Coverage
8712
8713**Calendar Container**: ✅ Themed
8714**Calendar Header**: ✅ Themed
8715**Navigation Buttons**: ✅ Themed (v4.7.4!)
8716**Today Button**: ✅ Themed
8717**Month Title**: ✅ Themed
8718**Table Grid**: ✅ Themed
8719**Table Header (S M T W...)**: ✅ Themed (v4.7.4!)
8720**Day Cells**: ✅ Themed
8721**Today Cell**: ✅ Themed
8722**Empty Cells**: ✅ Themed
8723**Event List Panel**: ✅ Themed
8724**Event List Header**: ✅ Themed
8725**Search Box**: ✅ Themed
8726**Add Button**: ✅ Themed
8727**Event Items**: ✅ Themed
8728**Past Events Toggle**: ✅ Themed
8729
8730**Every single element themed!** ��✨
8731
8732### Before vs After
8733
8734**BEFORE (v4.7.3)**:
8735```
8736Header: [◀] Feb 2026 [▶] [Today]
8737         ↑            ↑      ↑
8738      Border only  Border  Filled ← Inconsistent!
8739
8740S  M  T  W  T  F  S  ← Gray after nav ✗
8741```
8742
8743**AFTER (v4.7.4)**:
8744```
8745Header: [◀] Feb 2026 [▶] [Today]
8746         ↑            ↑      ↑
8747      Filled      Filled  Filled ← Consistent! ✓
8748
8749S  M  T  W  T  F  S  ← Themed always ✓
8750```
8751
8752### Visual Consistency
8753
8754**Matrix Theme Example**:
8755```
8756┌─────────────────────────────┐
8757│ [◀] February 2026 [▶][Today]│ ← All green
8758├─────────────────────────────┤
8759│ S  M  T  W  T  F  S         │ ← Green text
8760├─┬─┬─┬─┬─┬─┬─────────────────┤
8761│1│2│3│4│5│6│7                │ ← Dark cells
8762└─┴─┴─┴─┴─┴─┴─────────────────┘
8763
8764Perfect visual harmony! ✓
8765```
8766
8767### Professional Theme Example
8768
8769**Light theme with proper contrast**:
8770```
8771┌─────────────────────────────┐
8772│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text
8773├─────────────────────────────┤
8774│ S  M  T  W  T  F  S         │ ← Dark text on light
8775├─┬─┬─┬─┬─┬─┬─────────────────┤
8776│1│2│3│4│5│6│7                │ ← Light gray cells
8777└─┴─┴─┴─┴─┴─┴─────────────────┘
8778
8779Readable and professional! ✓
8780```
8781
8782### Pink Theme Example
8783
8784**Maximum bling**:
8785```
8786┌─────────────────────────────┐
8787│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons
8788├─────────────────────────────┤
8789│ S  M  T  W  T  F  S         │ ← Pink text, glow
8790├─┬─┬─┬─┬─┬─┬─────────────────┤
8791│1│2│3│4│5│6│7  ✨��          │ ← Dark pink cells
8792└─┴─┴─┴─┴─┴─┴─────────────────┘
8793
8794Sparkly perfection! ✓
8795```
8796
8797### Testing Checklist
8798
8799All scenarios tested and working:
8800
8801**Initial Load**: ✅ All elements themed
8802**Navigate Months**: ✅ Everything stays themed
8803**Jump to Today**: ✅ Everything stays themed
8804**Filter Events**: ✅ Everything stays themed
8805**Search Events**: ✅ Everything stays themed
8806**Expand Past Events**: ✅ Everything stays themed
8807
8808**No element ever loses theme!** ��
8809
8810## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
8811
8812### �� Fixed: Theme Now Persists When JavaScript Rebuilds Event List
8813- **Fixed:** Event items now themed when changing months via AJAX
8814- **Fixed:** Past Events toggle now themed after navigation
8815- **Fixed:** JavaScript functions now read theme data from container
8816- **Result:** Theme persists perfectly through all interactions!
8817
8818### The Problem
8819
8820**v4.7.2 behavior**:
8821```
8822Initial page load: Everything themed ✓
8823
8824Navigate to next month (AJAX reload):
8825  Calendar grid: Themed ✓ (fixed in v4.7.1)
8826  Event items: Gray ✗ (theme lost!)
8827  Past toggle: Gray ✗ (theme lost!)
8828
8829JavaScript rebuild broke theming!
8830```
8831
8832### The Root Cause
8833
8834**JavaScript functions didn't have access to theme data**:
8835
8836```javascript
8837// Before (broken):
8838window.renderEventItem = function(event, date, calId, namespace) {
8839    // No theme data available!
8840    let html = '<div style="border-left-color: ' + color + ';">';
8841    // ↑ Missing theme colors
8842}
8843```
8844
8845**Problem**: Theme styles were only in PHP, not accessible to JavaScript!
8846
8847### The Fix
8848
8849**Store theme in data attributes** (already done in v4.7.1):
8850```php
8851<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
8852```
8853
8854**JavaScript reads theme from container**:
8855```javascript
8856// Get theme data
8857const container = document.getElementById(calId);
8858const themeStyles = JSON.parse(container.dataset.themeStyles);
8859
8860// Apply to event items
8861const itemStyle = 'border-left-color: ' + color + ';' +
8862                 'background: ' + themeStyles.cell_bg + ';' +
8863                 'color: ' + themeStyles.text_primary + ';';
8864
8865// Apply to past toggle
8866const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' +
8867                   'color: ' + themeStyles.text_dim + ';';
8868```
8869
8870### What Was Fixed
8871
8872**1. renderEventItem() function**:
8873```javascript
8874// Now gets theme from container:
8875const container = document.getElementById(calId);
8876let themeStyles = {};
8877if (container && container.dataset.themeStyles) {
8878    themeStyles = JSON.parse(container.dataset.themeStyles);
8879}
8880
8881// Applies theme to event item:
8882style="border-left-color: ${color};
8883       background: ${themeStyles.cell_bg};
8884       color: ${themeStyles.text_primary};"
8885```
8886
8887**2. renderEventListFromData() function**:
8888```javascript
8889// Gets theme at start:
8890const container = document.getElementById(calId);
8891const themeStyles = JSON.parse(container.dataset.themeStyles);
8892
8893// Applies to past events toggle:
8894const toggleStyle =
8895    'background: ' + themeStyles.cell_bg + ';' +
8896    'color: ' + themeStyles.text_dim + ';' +
8897    'border-color: ' + themeStyles.grid_border + ';';
8898```
8899
8900### Before vs After
8901
8902**BEFORE (v4.7.2)**:
8903```
8904Load page with Matrix theme:
8905┌─────────────┬─────────────┐
8906│ Calendar    │ Events      │
8907│ (Green) ✓   │ (Green) ✓   │
8908└─────────────┴─────────────┘
8909
8910Click "›" to next month (AJAX):
8911┌─────────────┬─────────────┐
8912│ Calendar    │ Events      │
8913│ (Green) ✓   │ (Gray) ✗    │ ← Theme lost!
8914└─────────────┴─────────────┘
8915```
8916
8917**AFTER (v4.7.3)**:
8918```
8919Load page with Matrix theme:
8920┌─────────────┬─────────────┐
8921│ Calendar    │ Events      │
8922│ (Green) ✓   │ (Green) ✓   │
8923└─────────────┴─────────────┘
8924
8925Click "›" to next month (AJAX):
8926┌─────────────┬─────────────┐
8927│ Calendar    │ Events      │
8928│ (Green) ✓   │ (Green) ✓   │ ← Theme stays!
8929└─────────────┴─────────────┘
8930
8931Navigate anywhere - theme persists! ✓
8932```
8933
8934### Data Flow
8935
8936**Complete theme persistence**:
8937```
89381. PHP: Store theme in data attributes
8939   data-theme-styles='{"bg":"#242424",...}'
8940
89412. JavaScript: Read on initial load
8942   ✓ Already working (v4.7.1)
8943
89443. JavaScript: Read on AJAX rebuild
8945   ✓ NOW FIXED (v4.7.3)
8946   const themeStyles = JSON.parse(container.dataset.themeStyles);
8947
89484. Apply to all rebuilt elements
8949   ✓ Event items
8950   ✓ Past toggle
8951   ✓ Calendar cells
8952```
8953
8954### Testing Scenarios
8955
8956All work perfectly now:
8957
8958**Scenario 1: Navigate Months**:
8959```
8960Feb (Matrix) → Click › → Mar (Matrix) ✓
8961Theme persists through navigation
8962```
8963
8964**Scenario 2: Change Year**:
8965```
89662026 (Purple) → Change to 2027 (Purple) ✓
8967Theme persists through year change
8968```
8969
8970**Scenario 3: Jump to Today**:
8971```
8972Any month (Pink) → Click Today → Current (Pink) ✓
8973Theme persists when jumping
8974```
8975
8976**Scenario 4: Filter Events**:
8977```
8978All events (Professional) → Filter namespace → Filtered (Professional) ✓
8979Theme persists through filtering
8980```
8981
8982### All Themes Work
8983
8984**�� Matrix**: Green everywhere, always ✓
8985**�� Purple**: Purple everywhere, always ✓
8986**�� Professional**: Blue everywhere, always ✓
8987**�� Pink**: Pink everywhere, always ✓
8988
8989**No matter what you do, theme stays consistent!** ��
8990
8991## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
8992
8993### �� Fixed: All Remaining Theme Issues
8994- **Fixed:** Event items in sidebar now use theme colors
8995- **Fixed:** Past Events toggle now uses theme colors
8996- **Fixed:** Calendar cells now properly themed (issue with data passing)
8997- **Result:** Every element now perfectly themed!
8998
8999### What Was Fixed
9000
9001**1. Event Items in Sidebar** (was plain):
9002```php
9003// Before:
9004style="border-left-color: $color;"
9005
9006// After:
9007style="border-left-color: $color;
9008       background: $themeStyles['cell_bg'];
9009       color: $themeStyles['text_primary'];"
9010```
9011
9012**2. Past Events Toggle** (was plain):
9013```php
9014// Before:
9015<div class="past-events-toggle">
9016
9017// After:
9018<div class="past-events-toggle"
9019     style="background: $themeStyles['cell_bg'];
9020            color: $themeStyles['text_dim'];
9021            border-color: $themeStyles['grid_border'];">
9022```
9023
9024**3. Theme Data Flow** (was broken):
9025```php
9026// Now properly passes theme to all functions:
9027renderEventListContent($events, $calId, $namespace, $themeStyles);
9028```
9029
9030### Before vs After
9031
9032**BEFORE (v4.7.1)**:
9033```
9034Calendar header: Themed ✓
9035Calendar grid: Themed ✓
9036Event list panel: Themed ✓
9037Event items: Plain gray ✗
9038Past Events: Plain gray ✗
9039```
9040
9041**AFTER (v4.7.2)**:
9042```
9043Calendar header: Themed ✓
9044Calendar grid: Themed ✓
9045Event list panel: Themed ✓
9046Event items: Themed ✓
9047Past Events: Themed ✓
9048
9049Everything matches! ✨
9050```
9051
9052### Matrix Theme Example
9053
9054**Complete theming**:
9055```
9056┌─────────────┬─────────────┐
9057│  February   │   Events    │ ← Green header
9058├─────────────┼─────────────┤
9059│ Dark cells  │ • Meeting   │ ← Green bg & text
9060│ Green text  │ • Review    │ ← Green bg & text
9061│ Today=green │             │
9062├─────────────┼─────────────┤
9063│             │ ▶ Past (5)  │ ← Green bg
9064└─────────────┴─────────────┘
9065
9066All green! ✓
9067```
9068
9069### Purple Theme Example
9070
9071```
9072┌─────────────┬─────────────┐
9073│  February   │   Events    │ ← Purple header
9074├─────────────┼─────────────┤
9075│ Dark purple │ • Meeting   │ ← Purple bg
9076│ Lavender    │ • Review    │ ← Lavender text
9077│ cells       │             │
9078├─────────────┼─────────────┤
9079│             │ ▶ Past (5)  │ ← Purple bg
9080└─────────────┴─────────────┘
9081
9082All purple! ✓
9083```
9084
9085### Professional Theme Example
9086
9087```
9088┌─────────────┬─────────────┐
9089│  February   │   Events    │ ← Blue header
9090├─────────────┼─────────────┤
9091│ Light gray  │ • Meeting   │ ← Light bg
9092│ Blue accents│ • Review    │ ← Dark text
9093│ cells       │             │
9094├─────────────┼─────────────┤
9095│             │ ▶ Past (5)  │ ← Light bg
9096└─────────────┴─────────────┘
9097
9098All professional! ✓
9099```
9100
9101### Pink Theme Example
9102
9103```
9104┌─────────────┬─────────────┐
9105│  February   │   Events    │ ← Hot pink header
9106├─────────────┼─────────────┤
9107│ Dark pink   │ • Meeting   │ ← Pink bg
9108│ Pink text   │ • Review    │ ← Pink text
9109│ cells       │             │
9110├─────────────┼─────────────┤
9111│             │ ▶ Past (5)  │ ← Pink bg
9112└─────────────┴─────────────┘
9113
9114All pink & sparkly! ✓
9115```
9116
9117### What's Themed Now
9118
9119**Calendar Section**:
9120- ✅ Container border & shadow
9121- ✅ Header background & text
9122- ✅ Navigation buttons
9123- ✅ Today button
9124- ✅ Grid table
9125- ✅ Day cells
9126- ✅ Today cell highlight
9127- ✅ Empty cells
9128
9129**Event List Section**:
9130- ✅ Panel background
9131- ✅ Header background
9132- ✅ Header text
9133- ✅ Search box
9134- ✅ Add button
9135- ✅ Event items ← NEW!
9136- ✅ Past Events toggle ← NEW!
9137
9138**100% themed!** ��
9139
9140## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
9141
9142### �� Fixed: Theme Now Persists When Changing Months
9143- **Fixed:** Calendar theme no longer resets to default when navigating months
9144- **Fixed:** Theme data now stored in data attributes and used by JavaScript
9145- **Added:** rebuildCalendar now applies theme styles to all cells
9146
9147### ✨ Added: Event List Panel Now Themed
9148- **Added:** Right sidebar event list now uses theme colors
9149- **Added:** Event list header themed
9150- **Added:** Search box themed
9151- **Added:** Add button themed
9152- **Result:** Complete theme consistency across entire calendar!
9153
9154### The Problems
9155
9156**Problem 1: Month Navigation Lost Theme**:
9157```
9158Initial load: Matrix theme ✓ (green)
9159Click "›" to next month
9160Result: Gray calendar ✗ (theme lost!)
9161```
9162
9163**Problem 2: Event List Not Themed**:
9164```
9165Calendar grid: Themed ✓
9166Event list (right side): Plain gray ✗
9167Inconsistent!
9168```
9169
9170### The Fixes
9171
9172**Fix 1: Store Theme in Data Attributes**:
9173
9174```php
9175// PHP stores theme data:
9176<div data-theme="matrix"
9177     data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
9178```
9179
9180**Fix 2: JavaScript Uses Theme Data**:
9181
9182```javascript
9183// rebuildCalendar reads theme:
9184const theme = container.dataset.theme;
9185const themeStyles = JSON.parse(container.dataset.themeStyles);
9186
9187// Apply to cells:
9188const cellBg = isToday ?
9189    themeStyles.cell_today_bg :
9190    themeStyles.cell_bg;
9191```
9192
9193**Fix 3: Theme Event List Panel**:
9194
9195```php
9196// Event list header:
9197style="background:{$themeStyles['header_bg']};
9198       color:{$themeStyles['text_primary']};"
9199
9200// Event list container:
9201style="background:{$themeStyles['bg']};"
9202
9203// Search box:
9204style="background:{$themeStyles['cell_bg']};
9205       color:{$themeStyles['text_primary']};"
9206
9207// Add button:
9208style="background:{$themeStyles['border']};"
9209```
9210
9211### Before vs After
9212
9213**BEFORE (v4.7.0)**:
9214```
9215Load page: Matrix theme everywhere ✓
9216Navigate to next month:
9217  Calendar grid: Gray ✗ (theme lost)
9218  Event list: Gray ✗ (never themed)
9219```
9220
9221**AFTER (v4.7.1)**:
9222```
9223Load page: Matrix theme everywhere ✓
9224Navigate to next month:
9225  Calendar grid: Matrix theme ✓ (preserved!)
9226  Event list: Matrix theme ✓ (themed!)
9227
9228Perfect consistency! ✨
9229```
9230
9231### What's Now Themed
9232
9233**Calendar Grid** (after navigation):
9234- ✅ Cell backgrounds
9235- ✅ Today cell highlight
9236- ✅ Empty cells
9237- ✅ Text colors
9238- ✅ Border colors
9239
9240**Event List Panel**:
9241- ✅ Panel background
9242- ✅ Header background & text
9243- ✅ Search box styling
9244- ✅ Add button colors
9245- ✅ Namespace badge
9246
9247### Technical Implementation
9248
9249**Data Flow**:
9250```
92511. PHP: Get theme from config
9252   $theme = getSidebarTheme();
9253
92542. PHP: Get theme styles
9255   $themeStyles = getSidebarThemeStyles($theme);
9256
92573. PHP: Store in data attributes
9258   data-theme="matrix"
9259   data-theme-styles='{...JSON...}'
9260
92614. JavaScript: Read on navigation
9262   const themeStyles = JSON.parse(container.dataset.themeStyles);
9263
92645. JavaScript: Apply to rebuilt elements
9265   style="background:${themeStyles.bg};"
9266```
9267
9268**Result**: Theme persists across navigations! ✓
9269
9270### All Themes Work Perfectly
9271
9272**�� Matrix**:
9273- Month change: Green ✓
9274- Event list: Green ✓
9275
9276**�� Purple**:
9277- Month change: Purple ✓
9278- Event list: Purple ✓
9279
9280**�� Professional**:
9281- Month change: Blue ✓
9282- Event list: Blue ✓
9283
9284**�� Pink**:
9285- Month change: Pink ✓
9286- Event list: Pink ✓
9287
9288**Fully consistent theming everywhere!** ��
9289
9290## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
9291
9292### ✨ Major Feature: Themes Now Apply to Compact Calendar
9293- **Added:** Full theme support for {{calendar-compact}}
9294- **Added:** Matrix, Purple, Professional, and Pink themes
9295- **Added:** Consistent theming across sidebar and calendar
9296- **Result:** Beautiful, cohesive appearance!
9297
9298### What's New
9299
9300**All 4 themes now work on the calendar**:
9301- �� **Matrix** - Green cyberpunk (default)
9302- �� **Purple** - Royal purple elegance
9303- �� **Professional** - Clean business blue
9304- �� **Pink** - Sparkly pink bling
9305
9306**Set in Admin Panel** → Theme applies everywhere!
9307
9308### Before vs After
9309
9310**BEFORE (v4.6.8)**:
9311```
9312Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓
9313Calendar: Plain gray (no theme) ✗
9314
9315Inconsistent appearance!
9316```
9317
9318**AFTER (v4.7.0)**:
9319```
9320Sidebar: Themed ✓
9321Calendar: SAME THEME ✓
9322
9323Perfectly consistent! ✨
9324```
9325
9326### Theme Showcase
9327
9328**Matrix Theme** (Green):
9329```
9330┌─────────────────────────┐
9331│ ◀ February 2026 ▶       │ ← Green header
9332├─────────────────────────┤
9333│ Dark background         │
9334│ Green borders           │
9335│ Green text              │
9336│ Green glow effects      │
9337└─────────────────────────┘
9338```
9339
9340**Purple Theme**:
9341```
9342┌─────────────────────────┐
9343│ ◀ February 2026 ▶       │ ← Purple header
9344├─────────────────────────┤
9345│ Dark purple background  │
9346│ Purple borders          │
9347│ Lavender text           │
9348│ Purple glow             │
9349└─────────────────────────┘
9350```
9351
9352**Professional Theme** (Light):
9353```
9354┌─────────────────────────┐
9355│ ◀ February 2026 ▶       │ ← Blue header
9356├─────────────────────────┤
9357│ Light gray background   │
9358│ Blue accents            │
9359│ Professional appearance │
9360│ Clean, business-ready   │
9361└─────────────────────────┘
9362```
9363
9364**Pink Theme** (Bling):
9365```
9366┌─────────────────────────┐
9367│ ◀ February 2026 ▶       │ ← Hot pink header
9368├─────────────────────────┤
9369│ Dark pink background    │
9370│ Pink borders & glow     │
9371│ Pink text               │
9372│ Sparkle effects ✨��    │
9373└─────────────────────────┘
9374```
9375
9376### What's Themed
9377
9378**Calendar Container**:
9379- Background color
9380- Border color
9381- Shadow/glow effect
9382
9383**Calendar Header**:
9384- Background gradient
9385- Border color
9386- Text color
9387- Button colors
9388
9389**Calendar Grid**:
9390- Grid background
9391- Grid borders
9392- Header row colors
9393
9394**Calendar Cells**:
9395- Cell background
9396- Today cell highlight
9397- Text color
9398- Border colors
9399
9400### Implementation
9401
9402**Theme Detection**:
9403```php
9404// Same theme system as sidebar
9405$theme = $this->getSidebarTheme();
9406$themeStyles = $this->getSidebarThemeStyles($theme);
9407```
9408
9409**Applied to Container**:
9410```php
9411style="background:' . $themeStyles['bg'] . ';
9412       border:2px solid ' . $themeStyles['border'] . ';
9413       box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
9414```
9415
9416**Applied to Header**:
9417```php
9418style="background:' . $themeStyles['header_bg'] . ';
9419       color:' . $themeStyles['text_primary'] . ';"
9420```
9421
9422**Applied to Cells**:
9423```php
9424$cellBg = $isToday ?
9425    $themeStyles['cell_today_bg'] :
9426    $themeStyles['cell_bg'];
9427```
9428
9429### How to Change Theme
9430
9431**In Admin Panel**:
94321. Go to Admin → Calendar Management
94332. Click "�� Themes" tab
94343. Select theme (Matrix/Purple/Professional/Pink)
94354. Theme applies to BOTH sidebar and calendar! ✓
9436
9437**No configuration needed** - Just select and enjoy!
9438
9439### Theme Colors
9440
9441**Matrix**:
9442- Background: `#242424` (dark gray)
9443- Border: `#00cc07` (matrix green)
9444- Text: `#00cc07` (green)
9445- Today: `#2a4d2a` (green highlight)
9446
9447**Purple**:
9448- Background: `#2a2030` (dark purple)
9449- Border: `#9b59b6` (royal purple)
9450- Text: `#b19cd9` (lavender)
9451- Today: `#3d2b4d` (purple highlight)
9452
9453**Professional**:
9454- Background: `#e8ecf1` (light blue-gray)
9455- Border: `#4a90e2` (business blue)
9456- Text: `#2c3e50` (dark blue-gray)
9457- Today: `#dce8f7` (light blue highlight)
9458
9459**Pink**:
9460- Background: `#1a0d14` (dark pink-black)
9461- Border: `#ff1493` (hot pink)
9462- Text: `#ff69b4` (pink)
9463- Today: `#3d2030` (pink highlight)
9464
9465### Consistency
9466
9467**Both use same theme**:
9468```
9469Admin Panel → Set theme to "Purple"
9470
9471{{calendar}} sidebar: Purple theme ✓
9472{{calendar-compact}}: Purple theme ✓
9473{{calendar-panel}}: Will be themed next! ✓
9474
9475All calendars match! ✨
9476```
9477
9478**Perfectly coordinated appearance!** ��
9479
9480## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
9481
9482### �� Documentation: Added noheader Parameter Info
9483- **Added:** Documentation for existing `noheader` parameter
9484- **Updated:** README with complete eventlist parameter list
9485- **Info:** Feature already existed, just wasn't documented!
9486
9487### The noheader Parameter
9488
9489**What it does**: Hides the clock/date/weather header in eventlist
9490
9491**Usage**:
9492```
9493{{eventlist today noheader}}
9494```
9495
9496**Before (with header)**:
9497```
9498┌─────────────────────────────────┐
9499│ �� 3:45 PM    ��️ 72°  Feb 7     │ ← Clock header
9500├─────────────────────────────────┤
9501│ 5 min load │ CPU │ Memory       │ ← System stats
9502├─────────────────────────────────┤
9503│ Today's Events                   │
9504│ • 10:00 Team Meeting             │
9505│ • 2:00 Project Review            │
9506└─────────────────────────────────┘
9507```
9508
9509**After (noheader)**:
9510```
9511┌─────────────────────────────────┐
9512│ Today's Events                   │ ← No header!
9513│ • 10:00 Team Meeting             │
9514│ • 2:00 Project Review            │
9515└─────────────────────────────────┘
9516
9517Cleaner, more compact! ✓
9518```
9519
9520### When to Use noheader
9521
9522**Use WITH header** (default):
9523- Dashboard view
9524- Want to see current time
9525- Want weather info
9526- Want system stats
9527
9528**Use WITHOUT header** (`noheader`):
9529- Embedded in page content
9530- Just want event list
9531- Minimal design
9532- Space-constrained
9533
9534### Complete eventlist Parameters
9535
9536**Date Parameters**:
9537```
9538date=YYYY-MM-DD          Show specific date
9539daterange=START:END      Show date range
9540```
9541
9542**Filter Parameters**:
9543```
9544namespace=name           Filter by namespace
9545```
9546
9547**Display Parameters**:
9548```
9549today                    Show today with live clock
9550noheader                 Hide clock/date/weather header
9551showchecked              Show completed tasks
9552range=day|week|month     Show day/week/month range
9553```
9554
9555### Examples
9556
9557**Full featured** (dashboard):
9558```
9559{{eventlist today}}
9560```
9561Shows: Clock, weather, system stats, events ✓
9562
9563**Minimal** (embedded):
9564```
9565{{eventlist today noheader}}
9566```
9567Shows: Just events ✓
9568
9569**Date range without header**:
9570```
9571{{eventlist daterange=2026-02-01:2026-02-28 noheader}}
9572```
9573Shows: Events for February, no header ✓
9574
9575**With namespace filter**:
9576```
9577{{eventlist today namespace=work noheader}}
9578```
9579Shows: Today's work events, no header ✓
9580
9581### Implementation
9582
9583**Already existed in code** (line 833):
9584```php
9585$noheader = isset($data['noheader']) ? true : false;
9586```
9587
9588**Applied at render** (line 1010):
9589```php
9590if ($today && !empty($allEvents) && !$noheader) {
9591    // Render clock header with date/time/weather
9592}
9593```
9594
9595**Just wasn't documented!** Now it is. ✓
9596
9597## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
9598
9599### ✨ Improvement: Removed Filter Badge Above Sidebar
9600- **Removed:** Filter badge no longer shows above compact calendar
9601- **Reason:** Filtering is already clearly visible in the calendar view
9602- **Result:** Cleaner UI, less redundancy
9603
9604### What Changed
9605
9606**BEFORE**:
9607```
9608┌─────────────────────────┐
9609│ Filtering: work ✕       │ ← Badge above calendar
9610├─────────────────────────┤
9611│ ◀ February 2026 ▶       │
9612├─────────────────────────┤
9613│ Calendar grid with       │
9614│ filtered events          │ ← Already filtered
9615└─────────────────────────┘
9616
9617Badge was redundant - you can already see
9618the filtering in the calendar!
9619```
9620
9621**AFTER**:
9622```
9623┌─────────────────────────┐
9624│ ◀ February 2026 ▶       │ ← No badge!
9625├─────────────────────────┤
9626│ Calendar grid with       │
9627│ filtered events          │ ← Filtering visible here
9628└─────────────────────────┘
9629
9630Cleaner, simpler UI ✓
9631```
9632
9633### Why Remove It?
9634
9635**Redundant Information**:
9636- Calendar already shows only filtered events
9637- Namespace badges on events show which namespace
9638- Badge added visual clutter without value
9639
9640**Better UX**:
9641- Less visual noise
9642- More space for content
9643- Filtering still obvious from event display
9644
9645**Code Cleanup**:
9646```php
9647// Old code (removed):
9648if ($namespace && $namespace !== '*' && ...) {
9649    $html .= '<div class="calendar-namespace-filter">';
9650    $html .= 'Filtering: ' . $namespace . ' ✕';
9651    $html .= '</div>';
9652}
9653
9654// New code:
9655// Filter badge removed - filtering shown in calendar view only
9656```
9657
9658### How Filtering Still Works
9659
9660**Filtering IS Active**:
9661- Calendar only shows events from selected namespace ✓
9662- Event namespace badges show which namespace ✓
9663- Clear filtering still works (in calendar) ✓
9664
9665**Just No Badge**:
9666- No redundant "Filtering: work ✕" above calendar
9667- Cleaner, more professional appearance
9668
9669### What You Still See
9670
9671**Namespace Information**:
9672```
9673Event with namespace badge:
9674┌────────────────────────┐
9675│ 10:00 Team Meeting     │
9676│       [work] ←─────────┼─ Namespace badge on event
9677└────────────────────────┘
9678```
9679
9680**Filtered View**:
9681- Only events from selected namespace visible
9682- Empty dates show no events
9683- Clear which namespace you're viewing
9684
9685**No Need for Top Badge**:
9686- Already obvious from events shown
9687- Namespace badges provide context
9688- Less clutter!
9689
9690### Summary
9691
9692**Removed**: Filter badge above calendar
9693**Kept**: All filtering functionality
9694**Benefit**: Cleaner UI
9695
9696**Filtering works the same, just without the redundant badge!** ✨
9697
9698## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
9699
9700### �� Fixed: Filter Badge Now Disappears Immediately
9701- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
9702- **Added:** Badge removal before page reload/AJAX call
9703- **Result:** Badge disappears instantly, no waiting for reload
9704
9705### The Problem
9706
9707**v4.6.5 behavior**:
9708```
9709Click ✕ to clear filter
9710→ Page reloads or AJAX fires
9711→ Badge stays visible during reload ✗
9712→ Badge finally disappears after reload ✓
9713
9714User sees badge for 0.5-2 seconds after clicking ✕
9715Feels laggy! ✗
9716```
9717
9718### The Fix
9719
9720**Immediately remove badge from DOM**:
9721
9722```javascript
9723window.clearNamespaceFilter = function(calId) {
9724    const container = document.getElementById(calId);
9725
9726    // IMMEDIATELY hide/remove the filter badge
9727    const filterBadge = container.querySelector('.calendar-namespace-filter');
9728    if (filterBadge) {
9729        filterBadge.style.display = 'none'; // Hide instantly
9730        filterBadge.remove(); // Remove from DOM
9731    }
9732
9733    // THEN reload (AJAX or page reload)
9734    navCalendar(...) or window.location.href = ...
9735};
9736```
9737
9738### Before vs After
9739
9740**BEFORE (v4.6.5)**:
9741```
9742Time 0ms: Click ✕
9743┌─────────────────────────┐
9744│ Filtering: work ✕       │ ← Still visible
9745├─────────────────────────┤
9746
9747Time 500ms: Reload completes
9748┌─────────────────────────┐
9749│ (no badge)              │ ← Finally gone
9750├─────────────────────────┤
9751
9752Delay: 500-2000ms ✗
9753```
9754
9755**AFTER (v4.6.6)**:
9756```
9757Time 0ms: Click ✕
9758┌─────────────────────────┐
9759│ (no badge)              │ ← Gone immediately!
9760├─────────────────────────┤
9761
9762Time 500ms: Reload completes
9763┌─────────────────────────┐
9764│ (no badge)              │ ← Still gone
9765├─────────────────────────┤
9766
9767Delay: 0ms ✓
9768Instant feedback! ✓
9769```
9770
9771### Implementation
9772
9773**Two-step removal**:
9774
9775**Step 1**: Hide immediately
9776```javascript
9777filterBadge.style.display = 'none';
9778// User sees badge disappear instantly
9779```
9780
9781**Step 2**: Remove from DOM
9782```javascript
9783filterBadge.remove();
9784// Clean up HTML
9785```
9786
9787**Step 3**: Reload
9788```javascript
9789// Sidebar: Page reload
9790window.location.href = url.toString();
9791
9792// Calendar: AJAX reload
9793navCalendar(calId, year, month, originalNamespace);
9794```
9795
9796**Result**: Badge gone BEFORE reload starts ✓
9797
9798### Why This Matters
9799
9800**User Experience**:
9801- Old: Click ✕ → Wait → Badge disappears
9802- New: Click ✕ → Badge disappears instantly
9803
9804**Perceived Performance**:
9805- Instant visual feedback
9806- Feels responsive
9807- Professional UX
9808
9809**Technical**:
9810- DOM manipulation is synchronous (instant)
9811- Network requests are asynchronous (slow)
9812- Do fast things first!
9813
9814**Badge now disappears the moment you click ✕!** ⚡
9815
9816## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
9817
9818### �� Fixed: Filter Badge Not Clearing in Sidebar
9819- **Fixed:** Filter badge now properly clears when clicking ✕ button
9820- **Fixed:** Sidebar widget now reloads page without namespace filter
9821- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
9822
9823### The Problem
9824
9825**In {{calendar}} sidebar widget**:
9826```
98271. Click namespace badge to filter
98282. Badge appears: "Filtering: work ✕"
98293. Click ✕ to clear filter
98304. Badge stays visible! ✗
98315. Events still filtered! ✗
9832```
9833
9834**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
9835
9836### The Fix
9837
9838**Detect widget type and handle appropriately**:
9839
9840```javascript
9841window.clearNamespaceFilter = function(calId) {
9842    const container = document.getElementById(calId);
9843
9844    // Check if this is a sidebar widget
9845    const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
9846
9847    if (sidebarContainer) {
9848        // SIDEBAR: Reload page without namespace parameter
9849        const url = new URL(window.location.href);
9850        url.searchParams.delete('namespace');
9851        window.location.href = url.toString(); // Page reload
9852        return;
9853    }
9854
9855    // REGULAR CALENDAR: AJAX reload
9856    navCalendar(calId, year, month, originalNamespace);
9857};
9858```
9859
9860### How It Works
9861
9862**Sidebar Widget** ({{calendar}} syntax):
9863```
9864Rendered server-side with PHP
9865Cannot be AJAX-reloaded
9866Solution: Reload entire page without ?namespace=work parameter
9867```
9868
9869**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
9870```
9871Has AJAX reload capability
9872Solution: Call navCalendar() to reload via AJAX
9873```
9874
9875### Before vs After
9876
9877**BEFORE (v4.6.4)**:
9878```
9879Sidebar widget filtered by "work":
9880┌─────────────────────────┐
9881│ Filtering: work ✕       │ ← Click ✕
9882├─────────────────────────┤
9883│ Today                   │
9884│ • Work meeting          │
9885└─────────────────────────┘
9886
9887After clicking ✕:
9888┌─────────────────────────┐
9889│ Filtering: work ✕       │ ← Still there! ✗
9890├─────────────────────────┤
9891│ Today                   │
9892│ • Work meeting          │ ← Still filtered! ✗
9893└─────────────────────────┘
9894```
9895
9896**AFTER (v4.6.5)**:
9897```
9898Sidebar widget filtered by "work":
9899┌─────────────────────────┐
9900│ Filtering: work ✕       │ ← Click ✕
9901├─────────────────────────┤
9902│ Today                   │
9903│ • Work meeting          │
9904└─────────────────────────┘
9905
9906After clicking ✕ → Page reloads:
9907┌─────────────────────────┐
9908│ (no filter badge)       │ ← Cleared! ✓
9909├─────────────────────────┤
9910│ Today                   │
9911│ • Work meeting          │
9912│ • Personal task         │ ← All events! ✓
9913│ • Project review        │
9914└─────────────────────────┘
9915```
9916
9917### Technical Details
9918
9919**Why Page Reload for Sidebar?**
9920
9921Sidebar widget is rendered server-side:
9922```php
9923// In syntax.php:
9924return $this->renderSidebarWidget($events, $namespace, $calId);
9925// ↑ PHP generates complete HTML
9926// No AJAX reload endpoint exists for sidebar
9927```
9928
9929**Solution**: Remove `?namespace=work` from URL and reload page
9930```javascript
9931const url = new URL(window.location.href);
9932url.searchParams.delete('namespace'); // Remove filter
9933window.location.href = url.toString(); // Reload
9934```
9935
9936**Why AJAX for Regular Calendar?**
9937
9938Regular calendars have AJAX endpoints:
9939```javascript
9940// action.php handles:
9941action: 'load_month' → Returns new month data
9942navCalendar() → Fetches and rebuilds calendar
9943```
9944
9945### Filter Badge Behavior
9946
9947**Showing Badge** (when filtering):
9948- Server-side: PHP renders badge in HTML
9949- Client-side: JavaScript adds badge to header
9950
9951**Clearing Badge**:
9952- Sidebar: Page reload (removes ?namespace from URL)
9953- Calendar: AJAX reload (badge removed in rebuildCalendar)
9954
9955**Now works correctly for both!** ✓
9956
9957## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
9958
9959### �� Critical Hotfix: Fixed PHP Parse Error
9960- **Fixed:** Template literal backticks causing PHP syntax error
9961- **Fixed:** Changed JavaScript template literals to concatenation
9962- **Fixed:** Admin page now loads without parse errors
9963
9964### The Problem
9965
9966**v4.6.3 broke admin page**:
9967```
9968Error loading plugin calendar
9969ParseError: syntax error, unexpected identifier "s",
9970expecting "," or ";"
9971```
9972
9973**Cause**: JavaScript template literals inside PHP echo
9974```php
9975echo '<script>
9976    let nsOptions = `<option value="">(default)</option>`;
9977                    ↑ PHP sees backtick and gets confused!
9978</script>';
9979```
9980
9981**Why it broke**: Backticks (`) are special in PHP too!
9982
9983### The Fix
9984
9985**Changed from template literals to concatenation**:
9986
9987**BEFORE (broken)**:
9988```javascript
9989let nsOptions = `<option value="">(default)</option>`;
9990nsOptions += `<option value="${namespace}">${namespace}</option>`;
9991console.log('Edit recurring:', namespace);
9992```
9993
9994**AFTER (fixed)**:
9995```javascript
9996let nsOptions = "<option value=\\"\\">(default)</option>";
9997nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>";
9998console.log("Edit recurring:", namespace);
9999```
10000
10001**Changes**:
10002- ✅ Backticks (`) → Double quotes (")
10003- ✅ Template literals (${var}) → Concatenation (" + var + ")
10004- ✅ Single quotes in console.log → Double quotes
10005- ✅ Properly escaped quotes for PHP echo
10006
10007### Technical Details
10008
10009**The Issue**:
10010```php
10011// Inside PHP echo string:
10012echo '<script>
10013    let x = `template ${literal}`;  // ✗ Backtick breaks PHP!
10014</script>';
10015```
10016
10017**The Solution**:
10018```php
10019// Use regular string concatenation:
10020echo '<script>
10021    let x = "string " + variable;   // ✓ Works in PHP echo!
10022</script>';
10023```
10024
10025**Quote Escaping**:
10026```javascript
10027// Double quotes inside PHP single-quote string:
10028'<option value=\"\">text</option>'
10029               ↑↑ Escaped for JavaScript
10030```
10031
10032### Result
10033
10034**Before**: Admin page crashed with parse error ✗
10035**After**: Admin page loads perfectly ✓
10036
10037**No functionality changed - just syntax fix!**
10038
10039## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
10040
10041### �� Critical Fix: Namespace Dropdown in Recurring Events Section
10042- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
10043- **Fixed:** Current namespace now properly selected in dropdown
10044- **Fixed:** Namespace extraction from DOM now uses multiple methods
10045- **Added:** Console logging to debug namespace detection
10046
10047### The Problem
10048
10049**When editing from �� Recurring Events section**:
10050```
10051Click "Edit" on recurring event
10052Namespace dropdown shows:
10053- (default)
10054- (nothing else!) ✗
10055
10056Can't select any namespace! ✗
10057```
10058
10059**Why**: Broken namespace extraction logic
10060```javascript
10061// OLD CODE (broken):
10062const namespaces = Array.from(document.querySelectorAll("[id^=ns_]"))
10063    .map(el => {
10064        // Complex parsing that often failed
10065        const nsSpan = el.querySelector("span:nth-child(3)");
10066        return nsSpan.textContent.replace("�� ", "").trim();
10067    })
10068    .filter(ns => ns !== namespace); // Excluded current! ✗
10069```
10070
10071**Result**: Empty dropdown, can't change namespace! ✗
10072
10073### The Fix
10074
10075**NEW CODE (robust)**:
10076```javascript
10077const namespaces = new Set();
10078
10079// Method 1: Namespace explorer folders
10080document.querySelectorAll("[id^=ns_]").forEach(el => {
10081    const nsSpan = el.querySelector("span:nth-child(3)");
10082    if (nsSpan) {
10083        let nsText = nsSpan.textContent.replace("�� ", "").trim();
10084        if (nsText && nsText !== "(default)") {
10085            namespaces.add(nsText); // ✓
10086        }
10087    }
10088});
10089
10090// Method 2: Datalist (backup method)
10091document.querySelectorAll("#namespaceList option").forEach(opt => {
10092    if (opt.value && opt.value !== "") {
10093        namespaces.add(opt.value); // ✓
10094    }
10095});
10096
10097// Build dropdown with ALL namespaces
10098let options = `<option value="">(default)</option>`;
10099
10100// Show current namespace as selected
10101if (namespace) {
10102    options += `<option value="${namespace}" selected>${namespace} (current)</option>`;
10103}
10104
10105// Show all other namespaces
10106for (const ns of nsArray) {
10107    if (ns !== namespace) {
10108        options += `<option value="${ns}">${ns}</option>`;
10109    }
10110}
10111```
10112
10113**Result**: All namespaces visible! ✓
10114
10115### How It Works Now
10116
10117**Before (Broken)**:
10118```
10119Edit recurring event in "work" namespace
10120
10121Dropdown shows:
10122☐ (default)
10123
10124That's it! Can't select anything! ✗
10125```
10126
10127**After (Fixed)**:
10128```
10129Edit recurring event in "work" namespace
10130
10131Dropdown shows:
10132☐ (default)
10133☑ work (current)  ← Selected!
10134☐ personal
10135☐ projects
10136☐ meetings
10137
10138All namespaces available! ✓
10139```
10140
10141### Key Improvements
10142
10143**1. Dual extraction methods**:
10144- Primary: Parse namespace explorer DOM
10145- Backup: Read from datalist
10146- Result: Always finds namespaces ✓
10147
10148**2. Current namespace included**:
10149```javascript
10150// OLD: Excluded current namespace
10151.filter(ns => ns !== namespace) ✗
10152
10153// NEW: Include and mark as selected
10154options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓
10155```
10156
10157**3. Better error handling**:
10158```javascript
10159if (nsSpan) {  // Check exists
10160    let nsText = nsSpan.textContent.replace("�� ", "").trim();
10161    if (nsText && nsText !== "(default)") {  // Validate
10162        namespaces.add(nsText);
10163    }
10164}
10165```
10166
10167**4. Console debugging**:
10168```javascript
10169console.log('Edit recurring - Current namespace:', namespace);
10170console.log('Available namespaces:', nsArray);
10171```
10172
10173Open browser console (F12) to see what namespaces are detected!
10174
10175### Example Usage
10176
10177**Scenario**: Edit recurring "Team Meeting" in "work" namespace
10178
10179**Steps**:
101801. Go to �� Recurring Events section
101812. Click "Edit" on "Team Meeting"
101823. See namespace dropdown:
10183   - ☐ (default)
10184   - ☑ work (current)
10185   - ☐ personal
10186   - ☐ projects
101874. Select "personal" to move event
101885. Click "Save Changes"
101896. Event moved to "personal" namespace ✓
10190
10191**Finally works as expected!** ��
10192
10193## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
10194
10195### �� Recurring Events Namespace Fix
10196- **Fixed:** Namespace now properly preserved when editing recurring events
10197- **Fixed:** Namespace selector now allows selecting any namespace (not just default)
10198- **Added:** Better logging for namespace preservation debugging
10199- **Added:** Console logging to track namespace values during edit
10200
10201### The Namespace Problem
10202
10203**Issue 1**: Can't select non-default namespace
10204```
10205When editing recurring event:
10206- Dropdown shows all namespaces ✓
10207- User selects "work"
10208- Form submits with "" (empty/default) ✗
10209```
10210
10211**Issue 2**: Namespace not preserved
10212```
10213Recurring event in "personal" namespace
10214Edit the title only
10215After save: namespace changed to "" (default) ✗
10216```
10217
10218### The Fixes
10219
10220**Fix 1**: Better namespace preservation logic
10221```php
10222// When editing recurring event:
10223$existingNamespace = $existingEventData['namespace'];
10224
10225// Preserve if user didn't explicitly change it:
10226if (empty($namespace) ||
10227    strpos($namespace, '*') !== false ||
10228    strpos($namespace, ';') !== false) {
10229    // User didn't select or selected wildcard
10230    $namespace = $existingNamespace; // Keep existing!
10231}
10232```
10233
10234**Fix 2**: Proper form population
10235```javascript
10236// When editing, set BOTH inputs:
10237namespaceHidden.value = event.namespace || '';  // Hidden (submitted)
10238namespaceSearch.value = event.namespace || '(default)';  // Visible
10239
10240// Plus logging:
10241console.log('Set namespace for editing:', event.namespace);
10242```
10243
10244**Fix 3**: Added detailed logging
10245```php
10246error_log("Preserving namespace '$namespace' (received='$receivedNamespace')");
10247error_log("Using new namespace '$namespace'");
10248error_log("No existing namespace to preserve");
10249```
10250
10251### How It Works Now
10252
10253**Scenario 1**: Edit without changing namespace
10254```
10255Event in "work" namespace
10256Edit title to "Updated Meeting"
10257Namespace field shows: "work"
10258Hidden input value: "work"
10259Result: Saved in "work" ✓
10260```
10261
10262**Scenario 2**: Change namespace during edit
10263```
10264Event in "personal" namespace
10265Edit and select "work" namespace
10266Hidden input value: "work"
10267Result: Saved in "work" ✓
10268```
10269
10270**Scenario 3**: Edit with empty/wildcard namespace
10271```
10272Event in "projects" namespace
10273Namespace field empty or shows "personal;work"
10274System preserves: "projects"
10275Result: Saved in "projects" ✓
10276```
10277
10278### Debugging
10279
10280Now with console logging, you can see:
10281```javascript
10282Set namespace for editing: work
10283Hidden value: work
10284```
10285
10286And in PHP logs:
10287```
10288Calendar saveEvent recurring: Loaded existing data - namespace='work'
10289Calendar saveEvent recurring: Preserving namespace 'work' (received='')
10290```
10291
10292**Namespace preservation now works correctly!** ��
10293
10294## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
10295
10296### �� Recurring Events Edit Fix
10297- **Fixed:** Editing recurring events now preserves unchanged fields
10298- **Fixed:** Empty fields no longer erase existing data
10299- **Added:** Smart merge of existing event data with new changes
10300
10301### The Problem
10302
10303**Before**: Editing erased unchanged fields!
10304```
10305Original recurring event:
10306- Title: "Team Meeting"
10307- Time: "10:00 AM"
10308- Description: "Weekly standup with engineering team"
10309- Color: Red
10310
10311User edits ONLY the title to "Staff Meeting"
10312Form sends:
10313- Title: "Staff Meeting" ✓
10314- Time: "" ✗ (empty because user didn't change it)
10315- Description: "" ✗ (empty)
10316- Color: "#3498db" ✗ (default blue)
10317
10318Result after save:
10319- Title: "Staff Meeting" ✓
10320- Time: BLANK ✗
10321- Description: BLANK ✗
10322- Color: Blue ✗
10323```
10324
10325**All the other data was lost!** ✗
10326
10327### The Fix
10328
10329**After**: Preserves unchanged data!
10330```php
10331if ($eventId && $isRecurring) {
10332    // Load existing event data
10333    $existingEventData = getExistingEventData($eventId);
10334
10335    // Merge: use new value OR keep existing
10336    $title = $title ?: $existingEventData['title'];
10337    $time = $time ?: $existingEventData['time'];
10338    $description = $description ?: $existingEventData['description'];
10339    $color = ($color === '#3498db') ?
10340        $existingEventData['color'] : $color;
10341}
10342```
10343
10344**Now**:
10345```
10346User edits ONLY the title to "Staff Meeting"
10347
10348System:
103491. Loads existing event data
103502. Merges: new title + existing time/description/color
103513. Saves merged data
10352
10353Result:
10354- Title: "Staff Meeting" ✓ (changed)
10355- Time: "10:00 AM" ✓ (preserved!)
10356- Description: "Weekly standup..." ✓ (preserved!)
10357- Color: Red ✓ (preserved!)
10358```
10359
10360**Only changed fields are updated!** ✓
10361
10362### How It Works
10363
10364**Step 1**: Load existing data
10365```php
10366$existingEventData = $this->getExistingEventData(
10367    $eventId,
10368    $date,
10369    $namespace
10370);
10371```
10372
10373**Step 2**: Merge with new data
10374```php
10375// If new value is empty, use existing value
10376$title = $newTitle ?: $existingEventData['title'];
10377$time = $newTime ?: $existingEventData['time'];
10378$description = $newDesc ?: $existingEventData['description'];
10379
10380// Special handling for color (default is #3498db)
10381if ($newColor === '#3498db' && $existingEventData['color']) {
10382    $color = $existingEventData['color'];
10383}
10384```
10385
10386**Step 3**: Save merged data
10387```php
10388createRecurringEvents(..., $title, $time, $description, $color, ...);
10389```
10390
10391### Fields Preserved
10392
10393When editing recurring events, these fields are now preserved if not changed:
10394- ✅ Title (if left blank)
10395- ✅ Time (if not specified)
10396- ✅ End Time (if not specified)
10397- ✅ Description (if left empty)
10398- ✅ Color (if still default blue)
10399
10400**Edit only what you want to change - everything else stays!** ��
10401
10402## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
10403
10404### ✨ New Feature: Rename Namespaces
10405- **Added:** ✏️ Rename button in Namespace Explorer
10406- **Added:** Rename all events in a namespace at once
10407- **Added:** Automatic cleanup of old directory structure
10408
10409### �� Critical Fix: Recurring Events Actually Edit Now!
10410- **Fixed:** Editing recurring events now deletes ALL instances
10411- **Fixed:** Previously only deleted one instance, left orphans
10412- **Fixed:** Recurring events properly regenerated on edit
10413
10414### Namespace Rename Feature
10415
10416**Before**: Could only delete namespaces, not rename
10417
10418**After**: Click ✏️ to rename!
10419
10420```
10421�� work (15 events)  [3] [✏️] [��️]
10422                          ↑ NEW!
10423```
10424
10425**How It Works**:
104261. Click ✏️ rename button
104272. Enter new namespace name
104283. All events moved to new namespace
104294. Event `namespace` field updated in JSON
104305. Old directory cleaned up
10431
10432**Example**:
10433```
10434Rename: "work" → "business"
10435
10436Before:
10437/data/meta/work/calendar/*.json
10438Events: {namespace: "work"}
10439
10440After:
10441/data/meta/business/calendar/*.json
10442Events: {namespace: "business"}
10443```
10444
10445**Implementation**:
10446```php
10447private function renameNamespace() {
10448    // 1. Validate new name
10449    // 2. Rename directory
10450    // 3. Update all event namespace fields in JSON
10451    // 4. Clean up old empty directories
10452}
10453```
10454
10455### Recurring Events Fix - The Problem
10456
10457**Before**: Editing didn't work!
10458```
10459Original recurring event generates:
10460- Event-0 (Mon, Feb 10)
10461- Event-1 (Mon, Feb 17)
10462- Event-2 (Mon, Feb 24)
10463
10464User edits Event-0, changes title to "Updated"
10465
10466What SHOULD happen:
10467- Delete Event-0, Event-1, Event-2
10468- Generate new instances with "Updated" title
10469
10470What ACTUALLY happened:
10471- Delete Event-0 only ✗
10472- Generate new instances
10473- Result: Event-1 and Event-2 still show old title! ✗
10474```
10475
10476**After**: Properly deletes ALL instances!
10477
10478**The Fix**:
10479```php
10480private function deleteEvent() {
10481    $event = getEvent($eventId);
10482
10483    // Check if recurring
10484    if ($event['recurring'] && $event['recurringId']) {
10485        // Delete ALL instances with same recurringId
10486        deleteAllRecurringInstances($recurringId);
10487    }
10488
10489    // Then normal delete for spanning events
10490}
10491
10492private function deleteAllRecurringInstances($recurringId) {
10493    // Scan ALL calendar JSON files
10494    foreach (glob('*.json') as $file) {
10495        // Filter out events with matching recurringId
10496        $events = array_filter($events, function($event) {
10497            return $event['recurringId'] !== $recurringId;
10498        });
10499    }
10500}
10501```
10502
10503**Result**:
10504- Edit "Weekly Team Meeting" → ALL instances updated ✓
10505- Delete recurring event → ALL instances deleted ✓
10506- No more orphaned events! ✓
10507
10508### Recurring Event Fields
10509
10510Every recurring event has:
10511```json
10512{
10513    "id": "abc123-0",
10514    "recurring": true,
10515    "recurringId": "abc123",  ← Links all instances
10516    ...
10517}
10518```
10519
10520When editing/deleting, we find ALL events with same `recurringId` and remove them!
10521
10522**Finally, recurring events work properly!** ��
10523
10524## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
10525
10526### �� Important Events Sorting - ACTUALLY FIXED!
10527- **Fixed:** Important Events now REALLY sorted by date first, then time
10528- **Fixed:** renderSidebarSection was re-sorting and breaking the order
10529- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
10530
10531### �� Pink Theme Tooltip Bling!
10532- **Added:** Pink gradient tooltips (hot pink → light pink)
10533- **Added:** Glowing pink border on tooltips
10534- **Added:** Sparkling heart (��) appears next to tooltip!
10535- **Added:** Heart has pink glow drop-shadow
10536
10537### The Sorting Bug - Root Cause
10538
10539**Problem**: Two sorts were happening!
10540
10541**Sort #1** (Line 2047): Before rendering
10542```php
10543usort($importantEvents, ...) // Sort by date ✓
10544```
10545
10546**Sort #2** (Line 2751): Inside renderSidebarSection
10547```php
10548usort($events, ...) // Sort by TIME ONLY ✗
10549// This was breaking the date order!
10550```
10551
10552**The Fix**: Different sorting for different sections
10553```php
10554if ($title === 'Important Events') {
10555    // Sort by DATE first, then time
10556    usort($events, function($a, $b) {
10557        if ($dateA !== $dateB) {
10558            return strcmp($dateA, $dateB); // DATE first!
10559        }
10560        // Same date - sort by time
10561        return timeCompare($a, $b);
10562    });
10563} else {
10564    // Today/Tomorrow - sort by TIME only (same date)
10565    usort($events, function($a, $b) {
10566        return timeCompare($a, $b);
10567    });
10568}
10569```
10570
10571**Result**: Important Events now CORRECTLY sorted!
10572```
10573✓ Sun, Feb 8 - 3:30 PM Super Bowl
10574✓ Tue, Feb 10 - 11:30 AM Doctor visit
10575✓ Sat, Feb 14 - Valentine's Day (all-day)
10576✓ Sat, Feb 14 - 8:00 PM Crab Shack
10577```
10578
10579### Pink Tooltip Magic! ��
10580
10581**Normal Tooltips**: Black background, plain
10582```css
10583background: rgba(0, 0, 0, 0.95);
10584color: #fff;
10585```
10586
10587**Pink Theme Tooltips**: FABULOUS!
10588```css
10589/* Pink gradient background */
10590background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
10591
10592/* Glowing pink border */
10593border: 2px solid #ff85c1;
10594
10595/* Double glow shadow */
10596box-shadow:
10597    0 0 15px rgba(255, 20, 147, 0.6),
10598    0 4px 12px rgba(0, 0, 0, 0.4);
10599
10600/* Bold text */
10601font-weight: 600;
10602```
10603
10604**Plus**: Sparkling heart next to tooltip!
10605```css
10606.sidebar-pink [data-tooltip]:after {
10607    content: '��';
10608    font-size: 12px;
10609    filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
10610}
10611```
10612
10613**The Effect**:
10614```
10615Hover over ⚠ conflict warning:
10616┌────────────────────┐ ��
10617│ Conflicts with:    │ ← Pink gradient
10618│ • Event 1 (3PM)   │ ← Pink border
10619│ • Event 2 (4PM)   │ ← Pink glow
10620└────────────────────┘
10621```
10622
10623**Maximum glamour on tooltips too!** ✨
10624
10625## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
10626
10627### �� Important Events Order Fixed
10628- **Fixed:** Important Events now sorted by date (earliest first)
10629- **Fixed:** Events on same date sorted by time (chronological)
10630- **Fixed:** All-day events appear last within each date
10631
10632### Sorting Issue
10633
10634**Before**: Random order
10635```
10636Important Events:
10637�� Valentine's Day         (Sat, Feb 14)
1063811:30 AM Doctor visit      (Tue, Feb 10)  ← Feb 10 after Feb 14!
106393:30 PM Super Bowl         (Sun, Feb 8)   ← Feb 8 after Feb 14!
106408:00 PM Crab Shack         (Sat, Feb 14)
10641```
10642
10643**After**: Chronological order
10644```
10645Important Events:
106463:30 PM Super Bowl         (Sun, Feb 8)   ← Earliest!
1064711:30 AM Doctor visit      (Tue, Feb 10)
10648�� Valentine's Day         (Sat, Feb 14)  ← All-day event
106498:00 PM Crab Shack         (Sat, Feb 14)  ← Same day, sorted by time
10650```
10651
10652### Sorting Logic
10653
10654**Primary Sort**: By date
10655```php
10656strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
10657```
10658
10659**Secondary Sort**: By time (within same date)
10660```php
10661// All-day events (no time) go last
10662if (empty($timeA) && !empty($timeB)) return 1;
10663if (!empty($timeA) && empty($timeB)) return -1;
10664
10665// Both have times - sort chronologically
10666$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes
10667$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes
10668return $aMinutes - $bMinutes;      // 690 < 1200
10669```
10670
10671**Result**:
106721. Sun, Feb 8 - 3:30 PM (earliest date & time)
106732. Tue, Feb 10 - 11:30 AM (next date)
106743. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
106754. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
10676
10677**Perfect chronological order for next 2 weeks!** ✓
10678
10679## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
10680
10681### �� EXTREME PINK BLING EFFECTS!
10682- **Added:** Click sparkles - 8 sparkles burst out on every click!
10683- **Added:** Auto-sparkles - random sparkles appear every 3 seconds
10684- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
10685- **Added:** Pulsing border glow - constantly breathing pink glow
10686- **Added:** Drop shadows on sparkles for extra depth
10687- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
10688
10689### Sparkle Effects Breakdown
10690
10691**Click Sparkles** ��:
10692```javascript
10693// 8 sparkles burst out when you click anywhere!
10694for (let i = 0; i < 8; i++) {
10695    // Staggered appearance (40ms apart)
10696    createSparkle(x, y);
10697}
10698
10699// Sparkle emojis:
10700["✨", "��", "��", "⭐", "��", "��", "��", "��", "��", "��"]
10701```
10702
10703**Each sparkle**:
10704- Starts at click point
10705- Flies outward 30-60px in random direction
10706- Spins 360 degrees
10707- Fades in and out
10708- Has pink glow drop-shadow
10709- Disappears after 1 second
10710
10711**Auto Sparkles** ⏰:
10712```javascript
10713// Random sparkle every 3 seconds
10714setInterval(() => {
10715    const x = Math.random() * width;
10716    const y = Math.random() * height;
10717    createSparkle(x, y);
10718}, 3000);
10719```
10720
10721**Result**: Constant magical sparkles even without clicking! ✨
10722
10723**Hover Mega-Glow** ��:
10724```css
10725.sidebar-pink:hover {
10726    box-shadow:
10727        0 0 30px rgba(255, 20, 147, 0.9),
10728        0 0 50px rgba(255, 20, 147, 0.5) !important;
10729}
10730```
10731
10732**Result**: Sidebar EXPLODES with pink glow when you hover over it! ��
10733
10734**Pulsing Border Glow** ��:
10735```css
10736@keyframes pulse-glow {
10737    0%, 100% {
10738        box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
10739    }
10740    50% {
10741        box-shadow:
10742            0 0 25px rgba(255, 20, 147, 0.8),
10743            0 0 40px rgba(255, 20, 147, 0.4);
10744    }
10745}
10746
10747animation: pulse-glow 3s ease-in-out infinite;
10748```
10749
10750**Result**: Border continuously breathes with pink glow! ��
10751
10752**Sparkle Animation** ��:
10753```css
10754@keyframes sparkle {
10755    0% {
10756        opacity: 0;
10757        transform: translate(0, 0) scale(0) rotate(0deg);
10758    }
10759    50% {
10760        opacity: 1;
10761        transform: translate(halfway) scale(1) rotate(180deg);
10762    }
10763    100% {
10764        opacity: 0;
10765        transform: translate(far) scale(0) rotate(360deg);
10766    }
10767}
10768```
10769
10770**Result**: Sparkles spin, grow, shrink, and fly! ��
10771
10772### Complete Pink Bling Experience:
10773
10774**Always Active**:
10775- ✨ Pulsing pink border glow (3 second cycle)
10776- ✨ Auto-sparkles every 3 seconds
10777
10778**On Hover**:
10779- �� MEGA GLOW EFFECT (2x brightness!)
10780
10781**On Click**:
10782- �� 8 sparkles EXPLODE outward!
10783- �� Random emojis (hearts, stars, diamonds, crowns!)
10784- �� Each sparkle spins 360° while flying
10785- �� Pink glow drop-shadow on each sparkle
10786
10787**The Result**:
10788- Click anywhere = SPARKLE EXPLOSION! ��
10789- Hover anywhere = MEGA GLOW! ✨
10790- Always breathing and sparkling! ��
10791- Maximum glamour! ��
10792- Wife approval: 1000%! ��
10793
10794**THIS IS THE MOST FABULOUS CALENDAR EVER!** ��✨��
10795
10796## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
10797
10798### �� Pink Theme Final Touches
10799- **Fixed:** Add Event text now black (was bright pink, hard to read)
10800- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
10801- **Removed:** Text shadow on Add Event button (cleaner with black text)
10802
10803### Add Event Text - Black & Readable!
10804
10805**Before**: Bright pink text (#ff1493) on dark pink background
10806```php
10807$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
10808text-shadow: 0 0 3px #ff1493; // Glowy pink
10809```
10810
10811**After**: Black text, no shadow, perfect contrast!
10812```php
10813$addBtnTextColor = $theme === 'pink' ? '#000000' : ...;
10814$addBtnTextShadow = $theme === 'pink' ? 'none' : ...;
10815```
10816
10817**Result**:
10818- Black text pops against dark pink background ✓
10819- Easy to read ✓
10820- Professional look with bling ✓
10821
10822### Clock Border - All Pink!
10823
10824**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
10825
10826**Before**:
10827```php
10828// Inline style (only bottom):
10829style="border-bottom:2px solid #ff1493;"
10830
10831// CSS (all sides):
10832.eventlist-today-header {
10833    border: 2px solid #00cc07; // Green on top/sides!
10834}
10835```
10836
10837**After**: Inline style overrides ALL sides
10838```php
10839style="border:2px solid #ff1493;" // All 4 sides pink!
10840```
10841
10842**Result**: Clock box now 100% pink border on all four sides! ✓
10843
10844### What Changed:
10845
10846**Add Event Button**:
10847- Background: #b8156f (dark pink) ✓
10848- Text: **#000000 (black)** ← NEW!
10849- Text shadow: **none** ← NEW!
10850- Glow: 0 0 10px pink ✓
10851
10852**Clock Border**:
10853- Top: **#ff1493 (pink)** ← FIXED!
10854- Right: **#ff1493 (pink)** ← FIXED!
10855- Bottom: #ff1493 (pink) ✓
10856- Left: **#ff1493 (pink)** ← FIXED!
10857
10858**Perfect pink theme - wife approved!** ��✨
10859
10860## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
10861
10862### �� Pink Theme Complete Makeover
10863- **Fixed:** Clock border now completely pink (was green on sides/top)
10864- **Changed:** Today/Tomorrow/Important sections now different shades of pink
10865- **Changed:** Add Event button now dark pink (was clashing blue)
10866- **Changed:** System status bars now pink gradient (3 shades!)
10867
10868### All-Pink Everything! ��
10869
10870**Clock Border**:
10871```css
10872/* Before: Green border */
10873border: 2px solid #00cc07;
10874
10875/* After: Hot pink border */
10876.sidebar-pink .eventlist-today-header {
10877    border-color: #ff1493;
10878    box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
10879}
10880```
10881
10882**Section Colors** (Different Pink Shades):
10883```php
10884// Before: Orange, green, purple
10885'Today' => '#ff9800',
10886'Tomorrow' => '#4caf50',
10887'Important' => '#9b59b6'
10888
10889// After: Hot pink, pink, light pink
10890'Today' => '#ff1493',      // Hot pink (DeepPink)
10891'Tomorrow' => '#ff69b4',   // Pink (HotPink)
10892'Important' => '#ff85c1'   // Light pink
10893```
10894
10895**Add Event Button**:
10896```php
10897// Before: Clashing blue
10898background: #3498db;
10899
10900// After: Dark pink with glow
10901background: #b8156f;       // Dark pink
10902hover: #8b0f54;            // Darker pink
10903shadow: 0 0 10px rgba(255, 20, 147, 0.5);
10904```
10905
10906**System Status Bars** (Pink Gradient):
10907```css
10908/* 5-min load average */
10909.sidebar-pink .eventlist-cpu-fill {
10910    background: #ff1493;   /* Hot pink */
10911    box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
10912}
10913
10914/* Realtime CPU */
10915.sidebar-pink .eventlist-cpu-fill-purple {
10916    background: #ff69b4;   /* Pink */
10917    box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
10918}
10919
10920/* Memory */
10921.sidebar-pink .eventlist-cpu-fill-orange {
10922    background: #ff85c1;   /* Light pink */
10923    box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
10924}
10925```
10926
10927### Pink Theme Visual Hierarchy:
10928
10929**Darkest → Lightest Pink Shades**:
109301. Add Event button: #b8156f (dark pink)
109312. Today section: #ff1493 (hot pink / deep pink)
109323. System bar 1: #ff1493 (hot pink)
109334. Tomorrow section: #ff69b4 (pink)
109345. System bar 2: #ff69b4 (pink)
109356. Important section: #ff85c1 (light pink)
109367. System bar 3: #ff85c1 (light pink)
10937
10938**Result**: Beautiful pink gradient throughout entire sidebar! ��✨
10939
10940### What's Pink Now:
10941
10942✅ Sidebar background & border
10943✅ **Clock border** ← FIXED!
10944✅ Header gradient
10945✅ Week grid
10946✅ **Add Event button** ← FIXED!
10947✅ **Today section** ← Different shade!
10948✅ **Tomorrow section** ← Different shade!
10949✅ **Important section** ← Different shade!
10950✅ Event text & bars
10951✅ **System status bars** ← All 3 different pink shades!
10952✅ All shadows & glows
10953
10954**EVERYTHING is pink and fabulous!** ��✨
10955
10956## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
10957
10958### ✨ New Theme: Pink Bling! ��
10959- **Added:** Glamorous hot pink theme with maximum sparkle
10960- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
10961- **Perfect for:** Fabulous calendars that demand attention ✨
10962
10963### �� Professional Theme Shadow Fix
10964- **Fixed:** Section headers now have subtle shadow (not glow)
10965- **Fixed:** Clicked day panel header has proper shadow
10966
10967### Pink Bling Theme Colors
10968
10969**Background & Borders**:
10970```php
10971'bg' => '#1a0d14',           // Dark rich pink-black
10972'border' => '#ff1493',        // Hot pink (DeepPink)
10973'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow
10974```
10975
10976**Text Colors**:
10977```php
10978'text_primary' => '#ff69b4',  // Hot pink
10979'text_bright' => '#ff1493',   // Deep pink
10980'text_dim' => '#ff85c1',      // Light pink
10981```
10982
10983**Week Grid**:
10984```php
10985'grid_bg' => '#2d1a24',       // Dark purple-pink
10986'cell_bg' => '#1a0d14',       // Dark
10987'cell_today_bg' => '#3d2030', // Highlighted purple-pink
10988```
10989
10990**Special Effects**:
10991```php
10992'bar_glow' => '0 0 5px',      // Extra sparkly glow!
10993'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling!
10994```
10995
10996### Professional Theme Shadow Fix
10997
10998**Before**: Section headers had colored glow
10999```php
11000box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
11001```
11002
11003**After**: Section headers have subtle shadow
11004```php
11005$headerShadow = ($theme === 'professional') ?
11006    '0 2px 4px rgba(0, 0, 0, 0.15)' :  // Shadow for professional
11007    '0 0 8px ' . $accentColor;          // Glow for others
11008```
11009
11010**Result**:
11011- **Matrix/Purple/Pink**: Colored glow on headers ✓
11012- **Professional**: Clean grey shadow (no glow) ✓
11013
11014### All Four Themes:
11015
11016**�� Matrix Edition**:
11017- Dark green (#00cc07)
11018- Neon glow effects
11019- Hacker aesthetic
11020
11021**�� Purple Dream**:
11022- Elegant purple (#9b59b6)
11023- Violet glow effects
11024- Royal aesthetic
11025
11026**�� Professional Blue**:
11027- Clean grey/blue (#4a90e2)
11028- Subtle shadows (NO glow)
11029- Corporate aesthetic
11030
11031**�� Pink Bling** (NEW!):
11032- Hot pink (#ff1493)
11033- MAXIMUM sparkle & glow
11034- Glamorous aesthetic ✨��
11035
11036### Technical Implementation
11037
11038**Theme Added To**:
11039- `getSidebarThemeStyles()` - color definitions
11040- `getSidebarTheme()` - validation
11041- `saveSidebarTheme()` - admin save
11042- Admin panel - UI with preview
11043- All shadow/glow calculations
11044- JavaScript theme colors
11045- Clicked day panel colors
11046
11047**Perfect for users who want FABULOUS pink calendars!** ��✨
11048
11049## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
11050
11051### �� Text Glow Refinement
11052- **Changed:** Reduced text glow from 3px to 2px (less intense)
11053- **Fixed:** Clicked day panel now has same text glow as sections
11054
11055### Text Glow Reduction
11056
11057**Before**: Text glow was too strong (3px)
11058```php
11059// Sections:
11060text-shadow: 0 0 3px #00cc07; // Too bright!
11061
11062// Clicked day panel:
11063text-shadow: 0 0 3px #00cc07; // Too bright!
11064```
11065
11066**After**: Subtler text glow (2px)
11067```php
11068// Sections:
11069text-shadow: 0 0 2px #00cc07; // Just right ✓
11070
11071// Clicked day panel:
11072text-shadow: 0 0 2px #00cc07; // Just right ✓
11073```
11074
11075**Visual Impact**:
11076- **Matrix**: Softer green glow, easier to read
11077- **Purple**: Softer purple glow, more elegant
11078- **Professional**: Still no glow (clean)
11079
11080### Consistency Fix
11081
11082**Before**: Sections had glow, clicked day panel had NO glow
11083
11084**After**: Both sections AND clicked day panel have matching subtle glow
11085
11086**Where Glow Appears**:
11087- ✅ Today section event text
11088- ✅ Tomorrow section event text
11089- ✅ Important section event text
11090- ✅ **Clicked day panel event text** ← NOW CONSISTENT!
11091
11092**Result**:
11093- Glow is less intense and easier on eyes ✓
11094- All event text has consistent styling ✓
11095- Matrix/Purple themes more refined ✓
11096
11097### Technical Details
11098
11099**PHP (Sections)**:
11100```php
11101$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
11102```
11103
11104**JavaScript (Clicked Day Panel)**:
11105```javascript
11106themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
11107eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'";
11108```
11109
11110**Perfect consistency and subtle elegance!** ✨
11111
11112## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
11113
11114### ✨ Important Events Enhancement
11115- **Changed:** Important events now show from next 2 weeks (not just current week)
11116- **Fixed:** Important events on Sunday after current week now visible
11117- **Changed:** Events loaded 2 weeks into future for Important section
11118
11119### �� Background Cleanup
11120- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
11121- **Removed:** Grey backgrounds from individual events
11122- **Result:** Clean transparent backgrounds, original dark Matrix look restored
11123
11124### Important Events - Future Coverage
11125
11126**Before**: Only showed Important events from current week
11127```php
11128if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
11129    $importantEvents[] = $event;
11130}
11131```
11132
11133**After**: Shows Important events from today through next 2 weeks
11134```php
11135// Load events 2 weeks out
11136$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
11137
11138// Show all important events from today forward
11139if ($isImportant && $dateKey >= $todayStr) {
11140    $importantEvents[] = $event;
11141}
11142```
11143
11144**Example**:
11145- Today: Saturday Feb 7
11146- Current week: Sun Feb 1 → Sat Feb 7
11147- Important events shown: Feb 7 → Feb 21 (today + 14 days)
11148
11149**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓
11150
11151### Background Removal
11152
11153**Before**: Light grey/white backgrounds added
11154```php
11155// Section background:
11156$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay
11157
11158// Event background:
11159$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay
11160```
11161
11162**After**: No backgrounds (transparent)
11163```php
11164// Section: No background property
11165<div style="padding:4px 0;">
11166
11167// Event: No background property
11168<div style="padding:4px 6px; ...">
11169```
11170
11171**Result**:
11172- Clean, dark Matrix aesthetic restored ✓
11173- Purple theme darker and more elegant ✓
11174- Professional theme still has its light grey sidebar bg ✓
11175- Events stand out with just color bars and borders ✓
11176
11177### What Changed:
11178
11179**Sections (Today/Tomorrow/Important)**:
11180- ❌ No more grey overlay
11181- ✓ Transparent background
11182- ✓ Colored borders & glows remain
11183
11184**Individual Events**:
11185- ❌ No more grey overlay
11186- ✓ Transparent background
11187- ✓ Colored bars & borders remain
11188
11189**Perfect! Back to the original clean dark look with future Important events!** ��
11190
11191## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
11192
11193### �� Final Theme Polish
11194- **Fixed:** Today/Tomorrow/Important section shadows now match theme
11195- **Fixed:** Event description text color now uses theme dim color
11196
11197### Section Shadow Fix
11198
11199**Problem**: Sections always had green glow regardless of theme
11200
11201**Before**:
11202```php
11203// Hardcoded green:
11204box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
11205```
11206
11207**After**:
11208```php
11209// Theme-aware:
11210$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
11211                ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
11212                '0 2px 4px rgba(0, 0, 0, 0.1)');
11213```
11214
11215**Result**:
11216- **Matrix**: Green glow around sections ✓
11217- **Purple**: Purple glow around sections ✓
11218- **Professional**: Subtle grey shadow (no glow) ✓
11219
11220### Description Color Fix
11221
11222**Problem**: Description text always green in clicked day panel
11223
11224**Before**:
11225```javascript
11226color: #00aa00; // Always green
11227```
11228
11229**After**:
11230```javascript
11231color: themeColors.text_dim; // Theme dim color
11232```
11233
11234**Result**:
11235- **Matrix**: Dim green (#00aa00) ✓
11236- **Purple**: Dim purple (#8e7ab8) ✓
11237- **Professional**: Grey (#7f8c8d) ✓
11238
11239### Now 100% Theme Consistent
11240
11241Every single visual element respects theme:
11242- ✅ Sidebar background & border
11243- ✅ Header colors & shadows
11244- ✅ Week grid & cells
11245- ✅ Add Event button
11246- ✅ Section borders & **shadows** ← Fixed!
11247- ✅ Event titles & times
11248- ✅ Event **descriptions** ← Fixed!
11249- ✅ Clicked day panel
11250- ✅ Event bars & glows
11251
11252**Absolute perfection across all three themes!** ��✨
11253
11254## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
11255
11256### �� Theme Improvements
11257- **Fixed:** Clicked day panel now uses correct theme colors
11258- **Changed:** Professional Blue background now light grey (not white)
11259- **Added:** Theme colors passed to JavaScript for dynamic rendering
11260
11261### Clicked Day Panel Theming
11262
11263**Before**: Always blue regardless of theme
11264```javascript
11265// Hardcoded blue:
11266color:#00cc07;  // Always green
11267background:#3498db;  // Always blue
11268```
11269
11270**After**: Theme-aware colors
11271```php
11272// PHP passes theme to JavaScript:
11273window.themeColors_XXX = {
11274    text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
11275    text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
11276    text_shadow: '0 0 3px ...' or '',
11277    event_bg: 'rgba(...)',
11278    border_color: 'rgba(...)',
11279    bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
11280};
11281
11282// JavaScript uses theme colors:
11283color: themeColors.text_primary;
11284background: themeColors.event_bg;
11285```
11286
11287**Result**:
11288- Matrix: Green panel with green glow ✓
11289- Purple: Purple panel with purple glow ✓
11290- Professional: Blue panel, no glow, clean ✓
11291
11292### Professional Theme Background Change
11293
11294**Before**: Almost white (#f5f7fa, #ffffff)
11295```php
11296'bg' => '#f5f7fa',           // Very light
11297'cell_bg' => '#ffffff',      // Pure white
11298```
11299
11300**After**: Light grey tones
11301```php
11302'bg' => '#e8ecf1',           // Soft grey-blue
11303'cell_bg' => '#f5f7fa',      // Light grey
11304'grid_bg' => '#d5dbe3',      // Medium grey
11305'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
11306```
11307
11308**Visual Impact**:
11309- Sidebar: Light grey-blue background (#e8ecf1)
11310- Week cells: Lighter grey (#f5f7fa)
11311- Today cell: Highlighted blue-grey (#dce8f7)
11312- More depth and contrast ✓
11313- Professional appearance ✓
11314
11315### All Theme Elements Now Consistent
11316
11317**Matrix (Green)**:
11318- Sidebar: Dark (#242424)
11319- Clicked panel: Dark with green
11320- Text: Green with glow
11321
11322**Purple Dream**:
11323- Sidebar: Dark purple (#2a2030)
11324- Clicked panel: Dark with purple
11325- Text: Purple with glow
11326
11327**Professional Blue**:
11328- Sidebar: Light grey (#e8ecf1)
11329- Clicked panel: Light with blue
11330- Text: Dark grey, no glow
11331
11332**Perfect theme consistency everywhere!** ��
11333
11334## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
11335
11336### �� Critical Fixes
11337- **Fixed:** Tomorrow events not loaded when outside current week
11338- **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
11339
11340### Issue 1: Tomorrow Not Loading
11341
11342**Problem**: Sidebar only loaded events for current week
11343- Today (Saturday): Week ends today
11344- Tomorrow (Sunday): Start of NEXT week
11345- Tomorrow events never loaded from data files!
11346
11347**Before**:
11348```php
11349// Only load current week
11350$end = new DateTime($weekEnd);
11351$end->modify('+1 day');
11352$period = new DatePeriod($start, $interval, $end);
11353// If tomorrow > weekEnd, it's not in period!
11354```
11355
11356**After**:
11357```php
11358// Check if tomorrow is outside week
11359$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
11360if ($tomorrowDate > $weekEnd) {
11361    // Extend to include tomorrow
11362    $end = new DateTime($tomorrowDate);
11363}
11364$end->modify('+1 day');
11365$period = new DatePeriod($start, $interval, $end);
11366```
11367
11368**Result**: Tomorrow events now loaded even at week boundary! ✓
11369
11370### Issue 2: Double HTML Encoding
11371
11372**Problem**: `&` characters showing as `&amp;`
11373
11374**Cause**: Double encoding on line 2625 and 2681
11375```php
11376// Line 2625:
11377$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
11378
11379// Line 2681:
11380$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;amp; Tea" ❌
11381```
11382
11383**Fixed**:
11384```php
11385// Line 2625:
11386$title = htmlspecialchars($event['title']); // Encode once
11387
11388// Line 2681:
11389$html .= $title; // Use already-encoded value ✓
11390```
11391
11392**Result**: `&` displays correctly! ✓
11393
11394### Both Fixes Critical
11395
11396These were **two separate bugs**:
113971. **Loading bug**: Tomorrow events not read from files
113982. **Display bug**: Double-encoding text
11399
11400Both needed fixing for Tomorrow section to work properly!
11401
11402## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
11403
11404### �� Critical Fix
11405- **Fixed:** Tomorrow section missing when tomorrow is outside current week
11406- **Fixed:** Today section now always shows regardless of week boundaries
11407- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
11408
11409### The Problem
11410
11411**Scenario**: Today is Saturday (last day of week)
11412- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
11413- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
11414
11415**BROKEN Logic** (v4.2.2):
11416```php
11417foreach ($events as $dateKey => $dayEvents) {
11418    if ($dateKey < $weekStart) continue; // Skip old events
11419
11420    // ...week processing...
11421
11422    if ($dateKey === $tomorrowStr) {  // ← Never reached!
11423        $tomorrowEvents[] = $event;   //   Tomorrow > weekEnd
11424    }
11425}
11426```
11427
11428**Result**: Tomorrow events never added because loop skipped them! ❌
11429
11430### The Fix
11431
11432**Process Today/Tomorrow FIRST**:
11433```php
11434foreach ($events as $dateKey => $dayEvents) {
11435    $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
11436
11437    foreach ($eventsWithConflicts as $event) {
11438        // ALWAYS process Today and Tomorrow first!
11439        if ($dateKey === $todayStr) {
11440            $todayEvents[] = $event; // ✓ Always shows
11441        }
11442        if ($dateKey === $tomorrowStr) {
11443            $tomorrowEvents[] = $event; // ✓ Always shows
11444        }
11445
11446        // THEN check week boundaries for grid
11447        if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
11448            $weekEvents[$dateKey][] = $event;
11449        }
11450
11451        // Important events still week-only
11452        if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
11453            $importantEvents[] = $event;
11454        }
11455    }
11456}
11457```
11458
11459### What Changed
11460
11461**Before**:
114621. Skip events < weekStart ❌
114632. Process week grid
114643. Try to add Today/Tomorrow ← **Failed if outside week**
114654. Add Important events
11466
11467**After**:
114681. **Always add Today events** ✓
114692. **Always add Tomorrow events** ✓
114703. Add to week grid if in range
114714. Add Important events if in range
11472
11473**Result**:
11474- Today section: ✓ Always shows
11475- Tomorrow section: ✓ Always shows (even at week boundary!)
11476- Week grid: ✓ Only current week
11477- Important: ✓ Only current week
11478
11479### Edge Cases Fixed
11480
11481**Saturday → Sunday transition**:
11482- Today (Sat): Shows in Today section ✓
11483- Tomorrow (Sun): Shows in Tomorrow section ✓
11484- Week grid: Only shows Sat (today) ✓
11485
11486**Sunday → Monday transition**:
11487- Today (Sun): Shows in Today section ✓
11488- Tomorrow (Mon): Shows in Tomorrow section ✓
11489- Week grid: Shows both Sun and Mon ✓
11490
11491**Perfect! Tomorrow section now always works!** ��
11492
11493## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
11494
11495### �� Corrected Week Options
11496- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
11497- **Changed:** Default is **Sunday** (US/Canada standard)
11498- **Fixed:** Day names array for Sunday start: S M T W T F S
11499
11500### �� Correct Week Start Options
11501
11502**Sunday Start** (Default):
11503- Grid shows: **S M T W T F S**
11504- Week: Sunday → Saturday
11505- US/Canada standard
11506- Most common worldwide
11507
11508**Monday Start**:
11509- Grid shows: **M T W T F S S**
11510- Week: Monday → Sunday
11511- ISO 8601 standard
11512- Common in Europe
11513
11514### Technical Changes
11515
11516**All References Updated**:
11517```php
11518// Changed from 'saturday' to 'sunday' in:
11519- Admin validation
11520- Week calculation logic
11521- Day names array
11522- Default value
11523- Comments
11524```
11525
11526**Sunday Calculation** (when today is Saturday):
11527```php
11528$today = date('w'); // 0=Sun, 6=Sat
11529if ($today == 0) {
11530    $weekStart = date('Y-m-d'); // Today!
11531} else {
11532    // Go back $today days to last Sunday
11533    $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
11534}
11535```
11536
11537**Examples**:
11538- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
11539- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
11540
11541**Sorry for the confusion - it's Sunday not Saturday!** ��
11542
11543## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
11544
11545### �� Critical Fix
11546- **Fixed:** Week calculation broken when today is Saturday
11547- **Fixed:** Events not showing in Today/Important sections
11548- **Fixed:** Week grid event bars missing
11549- **Changed:** Default week start is Saturday (matches main calendar)
11550
11551### Technical Details
11552
11553**The Bug**:
11554```php
11555// BROKEN (v4.2.0):
11556$weekStart = date('Y-m-d', strtotime('saturday this week'));
11557// When TODAY is Saturday, this is ambiguous and fails!
11558
11559// FIXED (v4.2.1):
11560$today = date('w'); // 0 (Sun) to 6 (Sat)
11561if ($today == 6) {
11562    $weekStart = date('Y-m-d'); // Today!
11563} else {
11564    $daysBack = ($today == 0) ? 1 : ($today + 1);
11565    $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
11566}
11567$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
11568```
11569
11570**Why It Failed**:
11571- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
11572- PHP may interpret it as "next Saturday" or fail
11573- Result: Week range was wrong, events filtered out
11574
11575**The Fix**:
11576- Explicit calculation using day-of-week math
11577- Saturday (day 6): weekStart = today
11578- Sunday (day 0): weekStart = yesterday
11579- Monday-Friday: calculate days back to last Saturday
11580
11581**Result**: Works reliably every day of the week!
11582
11583**Default Changed**: Saturday start (was Monday in 4.2.0)
11584- Matches main calendar behavior
11585- Users can still switch to Monday in settings
11586
11587## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
11588
11589### ✨ New Feature
11590- **Added:** Week start day selector in Themes tab
11591- **Added:** Choose between Monday (ISO standard) or Saturday week start
11592- **Added:** Week grid and all events now respect the selected start day
11593- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
11594
11595### �� Week Start Options
11596
11597**Monday Start** (Default):
11598- Grid shows: M T W T F S S
11599- Week runs: Monday → Sunday
11600- ISO 8601 standard
11601- Common in Europe, most of world
11602
11603**Saturday Start**:
11604- Grid shows: S S M T W T F
11605- Week runs: Saturday → Friday
11606- Common in Middle East
11607- Sabbath-observant communities
11608
11609### Technical Details
11610
11611**Configuration**:
11612```php
11613// Saved in: data/meta/calendar_week_start.txt
11614// Values: 'monday' or 'saturday'
11615
11616// Week calculation:
11617if ($weekStartDay === 'saturday') {
11618    $weekStart = date('Y-m-d', strtotime('saturday this week'));
11619    $weekEnd = date('Y-m-d', strtotime('friday next week'));
11620} else {
11621    $weekStart = date('Y-m-d', strtotime('monday this week'));
11622    $weekEnd = date('Y-m-d', strtotime('sunday this week'));
11623}
11624```
11625
11626**Day Names Array**:
11627```php
11628// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
11629// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
11630```
11631
11632**What Changes**:
11633- Week grid day letters
11634- Week grid date sequence
11635- Today/Tomorrow/Important event date ranges
11636- Week event grouping
11637
11638**What Stays Same**:
11639- All themes still work
11640- Event data unchanged
11641- Main calendar unaffected
11642
11643### How to Change:
11644
116451. Admin → Calendar → �� Themes tab
116462. Under "Week Start Day" section
116473. Select Monday or Saturday
116484. Click "Save Settings"
116495. Refresh sidebar to see changes
11650
11651**Perfect for international users or religious observances!** ��
11652
11653## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
11654
11655### ��️ Calendar Improvements
11656- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
11657- **Changed:** Event section backgrounds much lighter (almost white)
11658- **Changed:** Individual event backgrounds lighter and more readable
11659- **Changed:** Event borders now theme-colored
11660
11661### Technical Details
11662
11663**Week Start Change**:
11664```php
11665// Before:
11666$weekStart = date('Y-m-d', strtotime('monday this week'));
11667$weekEnd = date('Y-m-d', strtotime('sunday this week'));
11668$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
11669
11670// After:
11671$weekStart = date('Y-m-d', strtotime('sunday this week'));
11672$weekEnd = date('Y-m-d', strtotime('saturday this week'));
11673$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
11674```
11675
11676**Background Colors**:
11677```php
11678// Section backgrounds (Today, Tomorrow, Important):
11679Matrix: rgba(255, 255, 255, 0.05)    // Very light overlay
11680Purple: rgba(255, 255, 255, 0.08)    // Slightly lighter
11681Professional: rgba(255, 255, 255, 0.95)  // Almost white!
11682
11683// Individual event backgrounds:
11684Matrix: rgba(255, 255, 255, 0.03)    // Subtle
11685Purple: rgba(255, 255, 255, 0.05)    // Light
11686Professional: rgba(255, 255, 255, 0.5)   // Semi-transparent white
11687```
11688
11689**Event Borders**:
11690```php
11691Matrix: rgba(0, 204, 7, 0.2)         // Green
11692Purple: rgba(155, 89, 182, 0.2)      // Purple
11693Professional: rgba(74, 144, 226, 0.2) // Blue
11694```
11695
11696### Visual Result:
11697
11698**Before**: Dark backgrounds made text hard to read
11699**After**: Light backgrounds make events pop and text very readable
11700
11701**Week Grid**:
11702```
11703Before: [M][T][W][T][F][S][S]
11704After:  [S][M][T][W][T][F][S]  ← Now matches main calendar!
11705```
11706
11707## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
11708
11709### �� Final Theme Polish
11710- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
11711- **Fixed:** Event times now use theme bright color
11712- **Fixed:** Event dates use theme dim color
11713- **Fixed:** Task checkboxes use theme bright color
11714- **Fixed:** Event color bars use theme-appropriate shadows
11715- **Fixed:** No text shadows on Professional theme
11716
11717### Technical Details
11718
11719**Event Text Colors**:
11720```php
11721// Matrix:
11722- Title: #00cc07 (green)
11723- Time: #00dd00 (bright green)
11724- Date: #00aa00 (dim green)
11725- Text shadow: 0 0 3px (glow)
11726
11727// Purple:
11728- Title: #b19cd9 (lavender)
11729- Time: #d4a5ff (bright purple)
11730- Date: #8e7ab8 (dim purple)
11731- Text shadow: 0 0 3px (glow)
11732
11733// Professional:
11734- Title: #2c3e50 (dark grey)
11735- Time: #4a90e2 (blue)
11736- Date: #7f8c8d (grey)
11737- Text shadow: none (clean)
11738```
11739
11740**Color Bar Shadows**:
11741```php
11742// Matrix & Purple: Glow effect
11743box-shadow: 0 0 3px [event-color];
11744
11745// Professional: Subtle shadow
11746box-shadow: 0 1px 2px rgba(0,0,0,0.2);
11747```
11748
11749### What's Now Fully Themed:
11750
11751✅ Sidebar background & border
11752✅ Header (clock box) background, border, text
11753✅ Week grid background, borders, cells
11754✅ Week grid day letters & numbers
11755✅ Week grid event bars & "+N more" text
11756✅ Add Event button background & text
11757Today/Tomorrow/Important event titles
11758✅ Event times
11759✅ Event dates (Important section)
11760✅ Task checkboxes
11761✅ Event color bars
11762✅ All text shadows (glow vs none)
11763
11764**Every single element now respects the theme!** ��
11765
11766## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
11767
11768### �� Theme Improvements
11769- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
11770- **Fixed:** Add Event button now uses theme colors
11771- **Fixed:** Clock box border now matches theme
11772- **Fixed:** All text shadows respect theme (no glow on professional)
11773- **Fixed:** Event bars use theme-appropriate shadows
11774
11775### Technical Details
11776
11777**Week Grid Theming**:
11778```php
11779// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
11780// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
11781// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
11782```
11783
11784**Add Event Button**:
11785```php
11786// Matrix: Dark green (#006400) with bright green text
11787// Purple: Purple (#7d3c98) with lavender text
11788// Professional: Blue (#3498db) with white text
11789```
11790
11791**Text Shadows**:
11792```php
11793// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
11794// Professional: No glow (clean look)
11795```
11796
11797**CSS Overrides**:
11798```css
11799/* Purple theme */
11800.sidebar-purple .eventlist-today-header {
11801    border-color: #9b59b6;
11802    box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
11803}
11804
11805/* Professional theme */
11806.sidebar-professional .eventlist-today-header {
11807    border-color: #4a90e2;
11808    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
11809}
11810```
11811
11812### What Changed Per Theme:
11813
11814**Purple Dream**:
11815- Week grid: Purple borders and dark purple background
11816- Add Event: Purple button with lavender text
11817- Clock box: Purple border with purple glow
11818- Event bars: Purple glow instead of green
11819- All text: Purple/lavender shades
11820
11821**Professional Blue**:
11822- Week grid: Blue borders and light grey background
11823- Add Event: Blue button with white text
11824- Clock box: Blue border with subtle shadow (no glow)
11825- Event bars: Subtle shadows (no glow)
11826- All text: Dark grey and blue shades
11827
11828**Matrix Edition**: Unchanged (still perfect green theme!)
11829
11830## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
11831
11832### ✨ New Features
11833- **Added:** �� Themes tab in admin for sidebar widget theming
11834- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
11835- **Added:** Theme selector with live previews
11836- **Added:** Theme persistence across page loads
11837
11838### �� Available Themes
11839
11840**Matrix Edition** (Default):
11841- Dark background (#242424)
11842- Green accents (#00cc07)
11843- Neon glow effects
11844- Original Matrix styling
11845
11846**Purple Dream**:
11847- Dark purple background (#2a2030)
11848- Purple/violet accents (#9b59b6)
11849- Elegant purple glow
11850- Rich purple color scheme
11851
11852**Professional Blue**:
11853- Light grey background (#f5f7fa)
11854- Blue accents (#4a90e2)
11855- Clean professional look
11856- Subtle shadows instead of glow
11857
11858### �� Bug Fix
11859- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
11860- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
11861
11862### Technical Details
11863
11864**Theme System**:
11865```php
11866// Saved in: data/meta/calendar_theme.txt
11867// Applied dynamically in syntax.php
11868$theme = $this->getSidebarTheme();  // 'matrix', 'purple', or 'professional'
11869$styles = $this->getSidebarThemeStyles($theme);
11870
11871// Styles include:
11872- bg, border, shadow
11873- header_bg, header_border, header_shadow
11874- text_primary, text_bright, text_dim
11875- grid_bg, grid_border
11876- cell_bg, cell_today_bg
11877```
11878
11879**Theme Changes**:
11880- Header background gradient
11881- Border colors
11882- Text colors
11883- Shadow/glow effects
11884- Grid colors
11885
11886**How to Change**:
118871. Admin → Calendar → �� Themes tab
118882. Select desired theme
118893. Click "Save Theme"
118904. Refresh page to see changes
11891
11892### Notes
11893- Themes only affect sidebar widget appearance
11894- Main calendar view unchanged
11895- Theme setting stored in `data/meta/calendar_theme.txt`
11896- Safe to switch themes - no data affected
11897
11898## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
11899
11900### �� Bug Fixes
11901- **Fixed:** Events now sort chronologically by time (was using string comparison)
11902- **Fixed:** Tooltip positioning using JavaScript like system tooltips
11903- **Fixed:** All-day events appear first, then events in time order
11904
11905### Technical Details
11906
11907**Event Sorting Fix**:
11908```php
11909// BROKEN (v4.0.9):
11910return strcmp($aTime, $bTime);
11911// String comparison: "10:00" < "8:00" because "1" < "8"
11912// Result: 10:00 AM shown BEFORE 8:00 AM ❌
11913
11914// FIXED (v4.1.0):
11915$aMinutes = $this->timeToMinutes($aTime);  // 8:00 = 480
11916$bMinutes = $this->timeToMinutes($bTime);  // 10:00 = 600
11917return $aMinutes - $bMinutes;
11918// Result: 8:00 AM shown BEFORE 10:00 AM ✓
11919```
11920
11921**Example Before Fix**:
11922```
11923�� Weekend Ticket Duty (all-day)
119248:00 AM START TICKETS
1192510:00 AM Soul Winning    ← Wrong!
119269:45 AM Coffee           ← Should be before 10:00 AM
11927```
11928
11929**Example After Fix**:
11930```
11931�� Weekend Ticket Duty (all-day)
119328:00 AM START TICKETS
119339:45 AM Coffee           ← Correct!
1193410:00 AM Soul Winning
11935```
11936
11937**Tooltip Positioning**:
11938- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
11939- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
11940- Positioned on `mouseenter` event
11941- Matches system tooltip implementation (no cutoff)
11942
11943**JavaScript Implementation**:
11944```javascript
11945element.addEventListener("mouseenter", function() {
11946    const rect = element.getBoundingClientRect();
11947    element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
11948    element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
11949});
11950```
11951
11952**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
11953
11954## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
11955
11956### �� UI Improvements
11957- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
11958- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
11959- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
11960
11961### Technical Details
11962
11963**Sidebar Overflow Fix**:
11964```php
11965// Before (line 2005):
11966style="...overflow:hidden..."  // ← Blocked tooltips!
11967
11968// After:
11969style="...overflow:visible..."  // ← Tooltips extend beyond!
11970```
11971
11972**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
11973
11974**Main Calendar Tooltip Size**:
11975```css
11976/* Before: */
11977.conflict-tooltip {
11978    border: 2px solid #ff9800;
11979    border-radius: 6px;
11980    padding: 8px 12px;
11981    font-size: 12px;
11982    min-width: 200px;
11983    max-width: 350px;
11984}
11985
11986/* After: */
11987.conflict-tooltip {
11988    border: 1px solid #ff9800;  /* Thinner */
11989    border-radius: 3px;          /* Smaller */
11990    padding: 4px 8px;            /* Less padding */
11991    font-size: 10px;             /* Smaller header */
11992    min-width: 120px;            /* Narrower */
11993    max-width: 200px;            /* Narrower */
11994}
11995
11996.conflict-tooltip-body {
11997    padding: 6px 8px;  /* Was 10px 12px */
11998    font-size: 9px;    /* Was 11px */
11999    line-height: 1.4;  /* Was 1.6 */
12000}
12001
12002.conflict-item {
12003    padding: 2px 0;  /* Was 4px */
12004    font-size: 9px;  /* Added smaller font */
12005}
12006```
12007
12008**Result**:
12009- Main calendar tooltip ~50% smaller
12010- Sidebar tooltips now extend beyond borders
12011- Both tooltips compact and readable
12012
12013## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
12014
12015### �� Bug Fix
12016- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
12017- **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
12018
12019### Technical Details
12020
12021**The Problem**:
12022```php
12023// Before (v4.0.7):
12024$conflictTooltip = 'Conflicts with:\n';  // Literal \n showed in tooltip
12025
12026// Displayed as:
12027"Conflicts with:\n• Event 1\n• Event 2"  // ← Literal backslash-n
12028```
12029
12030**The Fix**:
12031```php
12032// After (v4.0.8):
12033$conflictTooltip = "Conflicts with:&#10;";  // HTML entity for newline
12034
12035// Displays as:
12036Conflicts with:
12037• Event 1
12038• Event 2
12039```
12040
12041**Why `&#10;` Works**:
12042- HTML entity for line feed character
12043- Works in data attributes
12044- CSS `white-space: pre-line` preserves the newlines
12045- Renders as actual line breaks in tooltip
12046
12047**Applied to**:
12048- PHP rendering (sidebar Today/Tomorrow/Important)
12049- JavaScript rendering (clicked day events)
12050
12051## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
12052
12053### �� UI Improvements
12054- **Changed:** Tooltip size reduced significantly (much more compact)
12055- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
12056- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
12057- **Changed:** Narrower width (120-200px vs 200-300px)
12058
12059### Technical Details
12060
12061**Tooltip Size Reduction**:
12062```css
12063/* Before (v4.0.6):
12064padding: 6px 10px;
12065font-size: 11px;
12066min-width: 200px;
12067max-width: 300px;
12068
12069/* After (v4.0.7): */
12070padding: 3px 6px;
12071font-size: 9px;
12072min-width: 120px;
12073max-width: 200px;
12074```
12075
12076**Overflow Fix**:
12077```css
12078/* Allow tooltip to extend beyond sidebar */
12079.sidebar-widget,
12080.sidebar-matrix {
12081    overflow: visible !important;
12082}
12083
12084/* Position tooltip outside */
12085[data-tooltip]:before {
12086    bottom: 120%;  /* Further above */
12087    right: -10px;  /* Can extend beyond edge */
12088    z-index: 10000; /* Always on top */
12089}
12090```
12091
12092**Visual Result**:
12093- Tooltip is ~40% smaller
12094- Extends beyond sidebar border if needed
12095- Still readable, just more compact
12096- Better for small screens
12097
12098## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
12099
12100### �� Critical Fix
12101- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
12102- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
12103- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
12104- **Fixed:** Now matches what you see in main calendar view
12105
12106### ✨ UI Improvement
12107- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
12108- **Added:** Custom CSS tooltip with data-tooltip attribute
12109- **Improved:** Better tooltip positioning - doesn't overflow screen edges
12110
12111### Technical Details
12112
12113**The Problem - Field Name Mismatch**:
12114```php
12115// Main calendar (line 697):
12116$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
12117
12118// Sidebar (before fix):
12119$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
12120```
12121
12122**The Problem - Duration Logic**:
12123```php
12124// Main calendar (line 697):
12125$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
12126    ? $evt1['endTime']
12127    : $evt1['time'];  // ← Uses START time (zero duration)
12128
12129// Sidebar (before fix):
12130$endTime = ... ? ... : $this->addHoursToTime($startTime, 1);  // ← Added 1 hour!
12131```
12132
12133**The Fix**:
12134```php
12135// Now checks BOTH field names:
12136if (isset($event['end_time']) && $event['end_time'] !== '') {
12137    $endTime = $event['end_time'];
12138} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
12139    $endTime = $event['endTime'];
12140} else {
12141    $endTime = $startTime;  // ← Matches main calendar!
12142}
12143```
12144
12145**Tooltip Positioning**:
12146- Uses `data-tooltip` attribute instead of `title`
12147- CSS positions tooltip ABOVE badge (`bottom: 100%`)
12148- Aligns to RIGHT edge (`right: 0`)
12149- Arrow points down to badge
12150- Black background with white text
12151- Max width 300px
12152
12153### Example
12154
12155**6:00 PM Evening Service** (no end time):
12156- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
12157- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
12158
12159**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
12160- Zero-duration events at 6:00 PM don't overlap with anything
12161- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
12162
12163**Tooltip appears**:
12164```
12165        ┌────────────────────┐
12166        │ Conflicts with:    │
12167        │ • Super Bowl       │
12168        │   (3:30 PM-7:00 PM)│
12169        └─────────┬──────────┘
121701217112172```
12173
12174## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
12175
12176### �� Bug Fix
12177- **Fixed:** Events without end_time now properly get 1-hour default duration
12178- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
12179- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
12180
12181### Technical Details
12182
12183**The Problem**:
12184```php
12185// Before (broken):
12186$endTime = isset($event['end_time']) ? $event['end_time'] : default;
12187
12188// If end_time exists but is empty string "":
12189isset($event['end_time']) = TRUE
12190$endTime = ""  // ← Empty string, not default!
12191```
12192
12193**The Fix**:
12194```php
12195// After (fixed):
12196$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
12197    ? $event['end_time']
12198    : $this->addHoursToTime($startTime, 1);
12199
12200// Now empty string gets the default 1-hour duration
12201```
12202
12203**Why This Matters**:
12204Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). If the `end_time` field contains an empty string instead of being absent, the old code would use the empty string, causing conflict detection to fail.
12205
12206**Example**:
12207```
12208Super Bowl: 3:30 PM - 7:00 PM
12209Evening Service: 6:00 PM - ??? (should be 7:00 PM)
12210
12211If end_time = "" (empty string):
12212  Old code: Uses "" → conflict detection fails
12213  New code: Uses 7:00 PM → conflict detected ✓
12214```
12215
12216### Testing
12217If you're still not seeing the conflict on the 6:00 PM service:
122181. Check if the event has `end_time` set in the JSON
122192. Clear cache (Admin → Manage Events → Clear Cache)
122203. The conflict should now appear
12221
12222## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
12223
12224### ✨ Feature Added
12225- **Added:** Hover over ⚠ badge to see which events are conflicting
12226- **Added:** Tooltip shows conflicting event titles and times
12227- **Added:** Works in both sidebar sections and clicked day events
12228
12229### Technical Details
12230
12231**Conflict Tracking Enhanced**:
12232```php
12233// Now tracks WHICH events conflict:
12234$event['conflictingWith'] = [
12235    ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
12236    ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
12237];
12238```
12239
12240**Tooltip Format**:
12241```
12242Conflicts with:
12243• Meeting (10:00 AM-11:00 AM)
12244• Call (10:30 AM-11:30 PM)
12245```
12246
12247**Where It Works**:
12248- ✅ Today section (sidebar)
12249- ✅ Tomorrow section (sidebar)
12250- ✅ Important Events section (sidebar)
12251- ✅ Clicked day events (week grid)
12252
12253**Cursor**: Changes to `help` cursor on hover to indicate tooltip
12254
12255### Note on Multi-Day Events
12256The current conflict detection only checks time conflicts **within the same day**. If you have an event that spans multiple days (e.g., start date on Monday, end date on Wednesday), each day is treated independently. To see conflicts across the entire span, you would need to check each individual day.
12257
12258## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
12259
12260### �� Bug Fixes
12261- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
12262- **Fixed:** Important Events now shows events even if they're today or tomorrow
12263- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
12264
12265### Technical Details
12266
12267**Conflict Badge Issue**:
12268```php
12269// BROKEN (line 2511):
12270$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
12271// ↑ Checking 'conflicts' (plural)
12272
12273// But detectTimeConflicts() sets:
12274$event['conflict'] = true/false;
12275// ↑ Setting 'conflict' (singular)
12276
12277// FIXED:
12278$hasConflict = isset($event['conflict']) && $event['conflict'];
12279```
12280
12281**Result**: Badge now shows for ALL conflicting events in sidebar sections
12282
12283**Important Events Logic Issue**:
12284```php
12285// BROKEN:
12286if ($dateKey === $todayStr) {
12287    $todayEvents[] = ...;
12288} elseif ($dateKey === $tomorrowStr) {
12289    $tomorrowEvents[] = ...;
12290} else {  // ← Only checked if NOT today/tomorrow!
12291    if ($isImportant) {
12292        $importantEvents[] = ...;
12293    }
12294}
12295
12296// FIXED:
12297if ($dateKey === $todayStr) {
12298    $todayEvents[] = ...;
12299}
12300if ($dateKey === $tomorrowStr) {
12301    $tomorrowEvents[] = ...;
12302}
12303// ↑ Changed to separate 'if' statements
12304if ($isImportant && $dateKey in this week) {
12305    $importantEvents[] = ...;  // ← Now includes today/tomorrow too!
12306}
12307```
12308
12309**Result**: Important namespace events now show in Important section even if they're today or tomorrow
12310
12311### Conflict Badge Display
12312- Simplified to just ⚠ icon (no count)
12313- Orange color (#ff9800)
12314- 10px font size
12315- Hover shows "Time conflict detected"
12316
12317## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
12318
12319### �� Bug Fix
12320- **Fixed:** Important Events section now displays all events correctly
12321- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
12322- **Fixed:** Conflict detection no longer causes events to disappear from Important section
12323
12324### Technical Details
12325
12326**The Problem**:
12327- `detectTimeConflicts()` returned early if only 1 event on a day
12328- Returned original array without adding 'conflict' field
12329- This inconsistency caused issues in event categorization
12330
12331**The Solution**:
12332```php
12333// Before (broken):
12334if (empty($dayEvents) || count($dayEvents) < 2) {
12335    return $dayEvents;  // No 'conflict' field added!
12336}
12337
12338// After (fixed):
12339if (count($dayEvents) === 1) {
12340    return [array_merge($dayEvents[0], ['conflict' => false])];  // Always add flag
12341}
12342```
12343
12344**Result**:
12345- All events now have 'conflict' field consistently
12346- Single events: conflict = false
12347- Multiple events: conflict = true/false based on overlap
12348- Important Events section displays correctly
12349
12350## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
12351
12352### �� Bug Fixes
12353- **Fixed:** Conflict badge (⚠) now displays in clicked day events
12354- **Fixed:** Recurring events edit now updates time and end_time correctly
12355- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
12356
12357### ✨ Features Added
12358- **Added:** Time conflict detection for overlapping events
12359- **Added:** detectTimeConflicts() function checks all events on same day
12360- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
12361- **Added:** Events now have 'conflict' flag set automatically
12362
12363### �� UI Changes
12364- **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
12365- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
12366- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
12367
12368### Technical Details
12369
12370**Conflict Detection**:
12371```php
12372// Automatically detects overlapping events on same day
12373// Sets 'conflict' flag to true if event overlaps with another
12374$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
12375```
12376
12377**Logic**:
12378- All-day events never conflict (no time set)
12379- Timed events check for overlap with other timed events
12380- Overlap = start1 < end2 AND start2 < end1
12381- Default duration is 60 minutes if no end_time
12382
12383**Recurring Events Fix**:
12384- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
12385- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
12386- Now edits actually save and update the events
12387
12388**Week View Bars**:
12389- Shows 4 colored bars instead of 3
12390- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
12391
12392## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
12393
12394**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
12395
12396### �� Major Features
12397
12398#### Sidebar Widget
12399- **Week Grid**: Interactive 7-day calendar with click-to-view events
12400- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
12401- **Live Clock**: Updates every second with date display
12402- **Real-time Weather**: Geolocation-based temperature with icon
12403- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
12404- **Add Event Button**: Dark green bar opens full event creation dialog
12405- **Matrix Theme**: Green glow effects throughout
12406
12407#### Event Management
12408- **Single Color Bars**: Clean 3px bars showing event's assigned color
12409- **All-Day Events First**: Then sorted chronologically by time
12410- **Conflict Detection**: Orange ⚠ badge on overlapping events
12411- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
12412- **HTML Rendering**: Pre-rendered for JavaScript display
12413- **Click-to-View**: Click week grid days to expand event details
12414
12415#### Admin Interface
12416- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
12417- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
12418- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
12419
12420#### Outlook Sync
12421- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
12422- **Category Mapping**: Map colors to Outlook categories
12423- **Conflict Resolution**: Time conflict detection
12424- **Import/Export Config**: Encrypted configuration files
12425
12426### �� Design
12427- **Matrix Theme**: Authentic green glow aesthetic
12428- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
12429- **Color Scheme**:
12430  - Today: Orange #ff9800
12431  - Tomorrow: Green #4caf50
12432  - Important: Purple #9b59b6
12433  - Add Event: Dark green #006400
12434  - System bars: Green/Purple/Orange
12435
12436### �� Technical Highlights
12437- **Zero-margin Design**: Perfect flush alignment throughout
12438- **Flexbox Layout**: Modern, responsive structure
12439- **AJAX Operations**: No page reloads needed
12440- **Smart Sorting**: All-day events first, then chronological
12441- **Tooltip System**: Detailed stats on hover (working correctly)
12442- **Event Dialog**: Full form with drag support
12443- **Cache Management**: One-click cache clearing
12444
12445### �� Breaking Changes from v3.x
12446- Removed dual color bars (now single event color bar only)
12447- Add Event button moved to between header and week grid
12448- All-day events now appear FIRST (not last)
12449- Update Plugin tab is now the default admin tab
12450
12451### �� Bug Fixes (v3.10.x → v4.0.0)
12452- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
12453- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
12454- ✅ Fixed weather display (added updateWeather function)
12455- ✅ Fixed HTML rendering in events (title_html/description_html fields)
12456- ✅ Fixed Add Event dialog (null check for calendar element)
12457- ✅ Fixed text positioning in Add Event button
12458- ✅ Fixed spacing throughout sidebar widget
12459
12460### �� Complete Feature List
12461- Full calendar view (month grid)
12462- Sidebar widget (week view)
12463- Event panel (standalone)
12464- Event list (date ranges)
12465- Namespace support
12466- Color coding
12467- Time conflict detection
12468- DokuWiki syntax in events
12469- Outlook synchronization
12470- System monitoring
12471- Weather display
12472- Live clock
12473- Admin interface
12474- Cache management
12475- Draggable dialogs
12476- AJAX save/edit/delete
12477- Import/export config
12478
12479### �� Usage
12480
12481**Sidebar Widget**:
12482```
12483{{calendar sidebar}}
12484{{calendar sidebar namespace=team}}
12485```
12486
12487**Full Calendar**:
12488```
12489{{calendar}}
12490{{calendar year=2026 month=6 namespace=team}}
12491```
12492
12493**Event Panel**:
12494```
12495{{eventpanel}}
12496```
12497
12498**Event List**:
12499```
12500{{eventlist daterange=2026-01-01:2026-01-31}}
12501```
12502
12503### �� Stats
12504- **40+ versions** developed during v3.x iterations
12505- **3.10.0 → 3.11.4**: Polish and refinement
12506- **4.0.0**: Production-ready Matrix Edition
12507
12508### �� Credits
12509Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
12510
12511---
12512
12513## Previous Versions (v3.11.4 and earlier)
12514
12515## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
12516- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
12517- **Improved:** Small breathing room between system stats bars and Add Event button
12518- **Visual:** Better spacing for cleaner appearance
12519
12520### CSS Change:
12521**eventlist-today-header**:
12522- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
12523
12524### Visual Result:
12525```
12526│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats bars
12527│                       │  ← 2px space (restored)
12528├───────────────────────┤
12529│  + ADD EVENT          │  ← Add Event bar
12530├───────────────────────┤
12531```
12532
12533**Before (v3.11.3)**: No space, bars directly touch Add Event button
12534**After (v3.11.4)**: 2px breathing room for better visual hierarchy
12535
12536## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
12537- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
12538- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
12539- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
12540- **Changed:** Line-height reduced from 12px to 10px for better text centering
12541- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
12542
12543### JavaScript Fix:
12544**Problem**: Line 1084-1085 in calendar-main.js
12545```javascript
12546const calendar = document.getElementById(calId);
12547const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
12548```
12549
12550**Solution**: Added null check
12551```javascript
12552const calendar = document.getElementById(calId);
12553const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
12554```
12555
12556**Why This Happened**:
12557- Regular calendar has element with id=calId
12558- Sidebar widget doesn't have this element (different structure)
12559- Code tried to read .dataset on null, causing error
12560
12561### Text Position Fix:
12562**Before**:
12563- line-height: 12px
12564- vertical-align: middle
12565- Text slightly low
12566
12567**After**:
12568- line-height: 10px
12569- position: relative; top: -1px
12570- Text perfectly centered
12571
12572### What Works Now:
12573✅ Click "+ ADD EVENT" in sidebar → Dialog opens
12574✅ No console errors
12575✅ Text properly centered vertically
12576✅ Form pre-filled with today's date
12577✅ Save works correctly
12578
12579## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
12580- **Added:** Event dialog to sidebar widget (same as regular calendar)
12581- **Changed:** Add Event button now opens proper event form dialog
12582- **Added:** renderEventDialog() called in renderSidebarWidget()
12583- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
12584- **Improved:** Can now add events directly from sidebar widget
12585
12586### Add Event Button Behavior:
12587**Before (v3.11.1)**: Showed alert with instructions
12588**After (v3.11.2)**: Opens full event creation dialog
12589
12590**Dialog Features**:
12591- Date field (defaults to today)
12592- Title field (required)
12593- Time field (optional)
12594- End time field (optional)
12595- Color picker
12596- Category field
12597- Description field
12598- Save and Cancel buttons
12599- Draggable dialog
12600
12601### Technical Changes:
12602- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
12603- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
12604- Dialog uses same structure as regular calendar
12605- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
12606
12607### User Flow:
126081. User clicks "+ ADD EVENT" green bar
126092. Event dialog opens with today's date pre-filled
126103. User fills in event details
126114. User clicks Save
126125. Event saved via AJAX
126136. Dialog closes
126147. Sidebar refreshes to show new event
12615
12616## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
12617- **Fixed:** Removed bottom padding from header (was 2px, now 0)
12618- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
12619- **Fixed:** Add Event bar now flush against header with zero gap
12620- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
12621- **Improved:** Alert provides clear instructions on how to add events
12622
12623### CSS Changes:
12624**eventlist-today-header**:
12625- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
12626
12627**eventlist-stats-container**:
12628- `margin-top: 2px` → `margin: 0` (removed all margins)
12629
12630### Add Event Button Behavior:
12631**Before**: Clicked → Navigated to Admin → Manage Events tab
12632**After**: Clicked → Shows alert with instructions
12633
12634**Alert Message**:
12635```
12636To add an event, go to:
12637Admin → Calendar Management → Manage Events tab
12638or use the full calendar view {{calendar}}
12639```
12640
12641### Visual Result:
12642```
12643│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats (no margin-bottom)
12644├────────────────────────┤
12645│  + ADD EVENT           │  ← Perfectly flush!
12646├────────────────────────┤
12647```
12648
12649No gaps, perfectly aligned!
12650
12651## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
12652- **Moved:** Add Event bar back to original position (between header and week grid)
12653- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
12654- **Changed:** Letter spacing reduced from 0.5px to 0.4px
12655- **Fixed:** Text now fully visible without being cut off
12656- **Final:** Optimal position and size determined
12657
12658### Final Layout:
12659```
12660┌─────────────────────────────┐
12661│  Clock | Weather | Stats    │  ← Header
12662├─────────────────────────────┤
12663│  + ADD EVENT                 │  ← Bar (back here, smaller text)
12664├─────────────────────────────┤
12665│  M  T  W  T  F  S  S        │  ← Week Grid
12666│  3  4  5  6  7  8  9        │
12667├─────────────────────────────┤
12668│  Today                       │  ← Event sections
12669└─────────────────────────────┘
12670```
12671
12672### Text Size Changes:
12673**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
12674**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
12675
12676### Why This Position:
12677- Separates header from calendar
12678- Natural action point after viewing stats
12679- Users see stats → decide to add event → view calendar
12680- Consistent with original design intent
12681
12682## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
12683- **Moved:** Add Event bar repositioned from between header/grid to below week grid
12684- **Improved:** Better visual flow - header → stats → grid → add button → events
12685- **Changed:** Add Event bar now acts as separator between calendar and event sections
12686
12687### New Layout:
12688```
12689┌─────────────────────────────┐
12690│  Clock | Weather | Stats    │  ← Header
12691├─────────────────────────────┤
12692│  M  T  W  T  F  S  S        │  ← Week Grid
12693│  3  4  5  6  7  8  9        │
12694├─────────────────────────────┤
12695│  + ADD EVENT                 │  ← Add bar (moved here!)
12696├─────────────────────────────┤
12697│  Today                       │  ← Event sections
12698│  Tomorrow                    │
12699│  Important Events            │
12700└─────────────────────────────┘
12701```
12702
12703### Visual Flow:
12704**Before (v3.10.8)**:
127051. Header (clock, weather, stats)
127062. **+ ADD EVENT** bar
127073. Week grid
127084. Event sections
12709
12710**After (v3.10.9)**:
127111. Header (clock, weather, stats)
127122. Week grid (calendar days)
127133. **+ ADD EVENT** bar
127144. Event sections
12715
12716### Benefits:
12717- Natural reading flow: View calendar → Add event → See events
12718- Add button positioned between calendar and event list
12719- Acts as visual separator
12720- More logical action placement
12721
12722## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
12723- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
12724- **Changed:** Events now display with single 3px color bar (event's assigned color only)
12725- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
12726- **Simplified:** Cleaner visual with one color bar instead of two
12727- **Improved:** More space for event content without extra bar
12728
12729### Visual Changes:
12730
12731**Before (v3.10.7)** - Dual color bars:
12732```
12733├─ [Orange][Green]  Event Title
12734├─ [Blue][Purple]   Event Title
12735```
12736
12737**After (v3.10.8)** - Single color bar:
12738```
12739├─ [Green]  Event Title    ← Only event color!
12740├─ [Purple] Event Title    ← Only event color!
12741```
12742
12743### Add Bar Changes:
12744- Added `margin:0` to eliminate gaps
12745- Now flush against header (no space above)
12746- Now flush against week grid (no space below)
12747- Perfect seamless connection
12748
12749### Technical Changes:
12750**renderSidebarEvent()**:
12751- Removed section color bar (4px)
12752- Kept only event color bar (3px)
12753
12754**showDayEvents() JavaScript**:
12755- Removed section color bar (4px blue)
12756- Kept only event color bar (3px)
12757
12758**Add Event bar**:
12759- Added `margin:0` inline style
12760- Removed all top/bottom margins
12761
12762## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
12763- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
12764- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
12765- **Changed:** Add Event bar color from orange to dark green (#006400)
12766- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
12767- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
12768- **Changed:** Add Event bar font size increased from 7px to 9px
12769- **Changed:** Add Event bar letter spacing increased to 0.5px
12770- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
12771
12772### Color Bar Fix Details:
12773**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
12774**Solution**: Applied same fix as clicked day events:
12775- Changed parent div: `align-items:start` → `align-items:stretch`
12776- Added `min-height:20px` to parent
12777- Changed bars: `height:100%` → `align-self:stretch`
12778- Bars now properly fill vertical space in ALL sections
12779
12780### Add Event Bar Changes:
12781**Before**:
12782- Background: Orange (#ff9800)
12783- Text: Black (#000)
12784- Height: 6px (text cut off)
12785- Font: 7px
12786
12787**After**:
12788- Background: Dark green (#006400)
12789- Text: Bright green (#00ff00) with green glow
12790- Height: 12px (text fully visible)
12791- Font: 9px
12792- Hover: Darker green (#004d00)
12793- Matrix-themed green aesthetic
12794
12795## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
12796- **Fixed:** Event color bars now display correctly in clicked day events
12797- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
12798- **Added:** Conflict badge (⚠) appears on right side of conflicting events
12799- **Updated:** Complete README.md rewrite with full Matrix theme documentation
12800- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
12801- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
12802- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
12803
12804### Color Bar Fix:
12805**Problem**: Bars had `height:100%` but parent had no explicit height
12806**Solution**:
12807- Changed to `align-self:stretch` on bars
12808- Parent uses `align-items:stretch`
12809- Added `min-height:20px` to parent
12810- Bars now properly fill vertical space
12811
12812### Sorting Change:
12813**Before**: Timed events first → All-day events last
12814**After**: All-day events FIRST → Timed events chronologically
12815
12816**Example**:
12817```
12818Monday, Feb 5
12819├─ All Day - Project Deadline       ← All-day first
12820├─ 8:00 AM - Morning Standup        ← Earliest time
12821├─ 10:30 AM - Coffee with Bob
12822└─ 2:00 PM - Team Meeting           ← Latest time
12823```
12824
12825### Conflict Badge:
12826- Orange warning triangle (⚠) on right side
12827- 10px font size
12828- Only appears if `event.conflict` is true
12829- Title attribute shows "Time conflict detected"
12830- Small and unobtrusive
12831
12832### README Update:
12833- Complete rewrite with Matrix theme focus
12834- Full usage instructions for all features
12835- Admin interface documentation
12836- Outlook sync setup guide
12837- System monitoring details
12838- Troubleshooting section
12839- Color scheme reference
12840- File structure documentation
12841- Performance tips
12842- Security notes
12843- Quick start examples
12844
12845## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
12846- **Added:** Events now sorted by time when clicking week grid days
12847- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
12848- **Improved:** Events with times appear first, sorted chronologically
12849- **Improved:** All-day events appear after timed events
12850- **Changed:** Add Event bar font size reduced to 7px (from 10px)
12851- **Changed:** Add Event bar now has 0 padding and fixed 6px height
12852
12853### Sorting Logic:
12854- Events with times sorted by time (earliest first)
12855- All-day events (no time) appear at the end
12856- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
12857- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
12858
12859### Add Event Bar Changes:
12860- **Height**: 6px (was ~12px with padding)
12861- **Padding**: 0 (was 4px top/bottom)
12862- **Font Size**: 7px (was 10px)
12863- **Letter Spacing**: 0.3px (was 0.5px)
12864- **Line Height**: 6px to match height
12865- **Vertical Align**: Middle for text centering
12866
12867## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
12868- **Added:** Thin orange "Add Event" bar between header and week grid
12869- **Added:** Quick access to event creation from sidebar widget
12870- **Styled:** Sleek design with hover effects and glow
12871- **Interactive:** Clicks navigate to Manage Events tab in admin
12872- **Improved:** User workflow for adding events from sidebar
12873
12874### Visual Design:
12875- Orange background (#ff9800) matching Today section color
12876- 4px top/bottom padding for thin, sleek appearance
12877- Black text with white text-shadow for visibility
12878- Hover effect: Darkens to #ff7700 with enhanced glow
12879- Orange glow effect (box-shadow) matching Matrix theme
12880- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
12881
12882### Technical Changes:
12883- Added between header close and renderWeekGrid() call
12884- Inline onclick handler navigates to admin manage tab
12885- Inline onmouseover/onmouseout for hover effects
12886- Smooth 0.2s transition on all style changes
12887
12888## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
12889- **Changed:** Update Plugin tab is now the default tab when opening admin
12890- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
12891- **Improved:** Clear Cache button now larger and more prominent with helpful description
12892- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
12893- **Removed:** Debug console.log statements from day event display
12894- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
12895
12896### UI Changes:
12897- Update Plugin tab opens by default (was Config/Outlook Sync tab)
12898- Clear Cache button prominently displayed at top of Update Plugin tab
12899- Orange ��️ button (10px 20px padding) with confirmation dialog
12900- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
12901- Success/error messages display on Update Plugin tab after cache clear
12902- Tab navigation reordered to put Update first
12903
12904### Technical Changes:
12905- Default tab changed from 'config' to 'update' in html() method
12906- Tab navigation HTML reordered to show Update Plugin tab first
12907- clearCache() method now redirects with 'update' tab parameter
12908- Removed Clear Cache button from renderConfigTab()
12909- Added Clear Cache button to renderUpdateTab() with message display
12910
12911## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
12912- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
12913- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
12914- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
12915- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
12916
12917### Technical Changes:
12918- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
12919- Events added to weekEvents now include pre-rendered HTML versions
12920- title_html and description_html fields populated before json_encode()
12921- JavaScript now receives properly formatted HTML content
12922
12923## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
12924- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
12925- **Fixed:** HTML event handlers now call correctly sanitized function names
12926- **Fixed:** Weather temperature now updates correctly in sidebar widget
12927- **Added:** Weather update function to sidebar widget JavaScript
12928- **Added:** "Clear Cache" button in admin panel for easy cache refresh
12929- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
12930- **Improved:** All tooltip functions now work correctly on system status bars
12931
12932### Technical Changes:
12933- Changed tooltip function names to use $jsCalId instead of $calId
12934- Changed HTML onmouseover/onmouseout to use $jsCalId
12935- Added updateWeather() function to sidebar widget
12936- Added getWeatherIcon() function to sidebar widget
12937- Added clearCache() method in admin.php
12938- Added recursiveDelete() helper method in admin.php
12939- Admin UI now has ��️ Clear Cache button alongside Export/Import
12940
12941## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
12942- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
12943- **Fixed:** Event links and formatting not displaying in clicked day events
12944- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
12945- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
12946- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
12947- **Improved:** All JavaScript variable names now use valid syntax
12948- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
12949
12950### Technical Changes:
12951- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
12952- JavaScript variables now use underscores instead of dashes
12953- Event HTML rendering preserves DokuWiki formatting
12954- Fixed "showTooltip_sidebar is not defined" errors
12955- Fixed "showDayEvents_cal is not defined" errors
12956
12957## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
12958- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
12959- **Fixed:** Functions now defined BEFORE HTML that uses them
12960- **Changed:** Consolidated all JavaScript into single comprehensive script block
12961- **Removed:** ~290 lines of duplicate JavaScript code
12962- **Added:** Shared state management with `sharedState_[calId]` object
12963- **Improved:** System tooltip functions now work correctly
12964- **Improved:** Week grid click events now work correctly
12965
12966### Technical Changes:
12967- Moved all JavaScript to beginning of widget (before HTML)
12968- Removed duplicate script blocks
12969- Unified tooltip and stats functions
12970- Shared latestStats and cpuHistory state
12971- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
12972
12973## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
12974- **Added:** Dual color bars on events (section color + event color)
12975- **Added:** Click week grid days to view events (replaced hover tooltips)
12976- **Added:** Expandable section below week grid for selected day events
12977- **Added:** Blue theme for selected day section
12978- **Changed:** Week grid days now clickable instead of tooltips
12979- **Changed:** Section bar: 4px wide (left)
12980- **Changed:** Event bar: 3px wide (right)
12981- **Increased:** Gap between color bars from 3px to 6px
12982- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
12983
12984### Visual Changes:
12985- Each event shows TWO color bars side-by-side
12986- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
12987- Right bar (3px): Individual event's assigned color
12988- Click any day in week grid to expand event list
12989- X button to close selected day events
12990
12991## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
12992- **Increased:** Event color bar width from 2px to 3px
12993- **Increased:** Gap between section and event bars from 3px to 6px
12994- **Improved:** Event color bars now more visible alongside section bars
12995- **Note:** Dual color bar system already in place from v3.9.6
12996
12997## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
12998- **Changed:** Date in Important Events moved below event name (was above)
12999- **Changed:** Section headers now 9px font size (was 10px)
13000- **Changed:** Section headers now normal case (was ALL CAPS)
13001- **Changed:** Letter spacing reduced from 0.8px to 0.3px
13002- **Improved:** More natural reading flow with date below event name
13003- **Improved:** Cleaner, more subtle section headers
13004
13005### Header Changes:
13006- "TODAY" → "Today"
13007- "TOMORROW" → "Tomorrow"
13008- "IMPORTANT EVENTS" → "Important Events"
13009
13010## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
13011- **Redesigned:** Complete overhaul of `sidebar` parameter
13012- **Added:** Compact week-at-a-glance itinerary view (200px wide)
13013- **Added:** Live clock widget at top of sidebar
13014- **Added:** 7-cell week grid showing event bars
13015- **Added:** Today section with orange header and left border
13016- **Added:** Tomorrow section with green header and left border
13017- **Added:** Important Events section with purple header and left border
13018- **Added:** Admin setting to configure important namespaces
13019- **Added:** Time conflict badges in sidebar events
13020- **Added:** Task checkboxes in sidebar events
13021- **Changed:** Sidebar now optimized for narrow spaces (200px)
13022- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
13023
13024### New Features:
13025- Clock updates every second showing current time
13026- Week grid shows Mon-Sun with colored event bars
13027- Today/Tomorrow sections show full event details
13028- Important events highlighted in purple (configurable namespaces)
13029- All badges (conflict, time, etc.) shown in compact format
13030- Automatic time conflict detection
13031
13032## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
13033- **Removed:** 16 unused/debug/backup files
13034- **Removed:** 69 console.log() debug statements
13035- **Removed:** 3 orphaned object literals from console.log removal
13036- **Removed:** Temporary comments and markers
13037- **Fixed:** JavaScript syntax errors from cleanup
13038- **Improved:** Code quality and maintainability
13039- **Improved:** Reduced plugin size by removing unnecessary files
13040- **Status:** Production-ready, fully cleaned codebase
13041
13042### Files Removed:
13043- style.css.backup, script.js.backup
13044- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
13045- debug_events.php, debug_html.php, cleanup_events.php
13046- fix_corrupted_json.php, fix_wildcard_namespaces.php
13047- find_outlook_duplicates.php, update_namespace.php
13048- validate_calendar_json.php, admin.js
13049- test_date_field.html
13050
13051## Version 3.7.5 (2026-02-05)
13052- **Fixed:** PHP syntax error (duplicate foreach loop removed)
13053- **Fixed:** Time variable handling in grace period logic
13054
13055## Version 3.7.4 (2026-02-05)
13056- **Added:** 15-minute grace period for timed events
13057- **Changed:** Events with times now stay visible for 15 minutes after their start time
13058- **Changed:** Prevents events from immediately disappearing when they start
13059- **Improved:** Better user experience for ongoing events
13060- **Fixed:** Events from earlier today now properly handled with grace period
13061
13062## Version 3.7.3 (2026-02-05)
13063- **Changed:** Complete redesign of cleanup section for compact, sleek layout
13064- **Changed:** Radio buttons now in single row at top
13065- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
13066- **Changed:** Inline controls - no more grid layout or wrapper boxes
13067- **Changed:** Namespace filter now compact single-line input
13068- **Changed:** Smaller buttons and tighter spacing throughout
13069- **Improved:** More professional, space-efficient design
13070
13071## Version 3.7.2 (2026-02-04)
13072- **Fixed:** Strange boxes under cleanup options - now properly hidden
13073- **Changed:** Unified color scheme across all admin sections
13074- **Changed:** Green (#00cc07) - Primary actions and main theme
13075- **Changed:** Orange (#ff9800) - Warnings and cleanup features
13076- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
13077- **Improved:** Consistent visual design throughout admin interface
13078
13079## Version 3.7.1 (2026-02-04)
13080- **Fixed:** Cleanup section background changed from orange to white
13081- **Fixed:** Event cleanup now properly scans all calendar directories
13082- **Added:** Debug info display when preview finds no events
13083- **Improved:** Better directory scanning logic matching other features
13084
13085## Version 3.7.0 (2026-02-04)
13086- **Added:** Event cleanup feature in Events Manager
13087- **Added:** Delete old events by age (months/years old)
13088- **Added:** Delete events by status (completed tasks, past events)
13089- **Added:** Delete events by date range
13090- **Added:** Namespace filter for targeted cleanup
13091- **Added:** Preview function to see what will be deleted
13092- **Added:** Automatic backup creation before cleanup
13093- **Changed:** Reduced changelog viewer height to 100px (was 400px)
13094
13095## Version 3.6.3 (2026-02-04)
13096- **Fixed:** Conflict tooltips now work properly after navigating between months
13097- **Added:** Changelog display in Update Plugin tab
13098- **Added:** CHANGELOG.md file with version history
13099- **Improved:** Changelog shows last 10 versions with color-coded change types
13100- **Fixed:** Removed debug console.log statements
13101
13102## Version 3.6.2 (2026-02-04)
13103- **Fixed:** Month title now updates correctly when navigating between months
13104- **Changed:** All eventpanel header elements reduced by 10% for more compact design
13105- **Changed:** Reduced header height from 78px to 70px
13106
13107## Version 3.6.1 (2026-02-04)
13108- **Changed:** Complete redesign of eventpanel header with practical two-row layout
13109- **Fixed:** Improved layout for narrow widths (~500px)
13110- **Changed:** Simplified color scheme (removed purple gradient)
13111
13112## Version 3.6.0 (2026-02-04)
13113- **Changed:** Redesigned eventpanel header with gradient background
13114- **Changed:** Consolidated multiple header rows into compact single-row design
13115
13116## Version 3.5.1 (2026-02-04)
13117- **Changed:** Moved event search bar into header row next to + Add button
13118- **Improved:** More compact UI with search integrated into header
13119
13120## Version 3.5.0 (2026-02-04)
13121- **Added:** Event search functionality in sidebar and eventpanel
13122- **Added:** Real-time filtering as you type
13123- **Added:** Clear button (✕) appears when searching
13124- **Added:** "No results" message when search returns nothing
13125
13126## Version 3.4.7 (2026-02-04)
13127- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
13128- **Fixed:** Removed debug logging from console
13129- **Changed:** Updated export version number to match plugin version
13130
13131## Version 3.4.6 (2026-02-04)
13132- **Added:** Debug logging to diagnose conflict detection issues
13133- **Development:** Extensive console logging for troubleshooting
13134
13135## Version 3.4.5 (2026-02-04)
13136- **Added:** Debug logging to showDayPopup and conflict detection
13137- **Development:** Added logging to trace conflict detection flow
13138
13139## Version 3.4.4 (2026-02-04)
13140- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
13141- **Fixed:** Conflict tooltips now appear on hover
13142- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
13143- **Added:** Conflict badges in both future and past events sections
13144
13145## Version 3.4.3 (2026-02-04)
13146- **Added:** Custom styled conflict tooltips with hover functionality
13147- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
13148- **Improved:** Beautiful tooltip design with orange header and clean formatting
13149
13150## Version 3.4.2 (2026-02-04)
13151- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
13152
13153## Version 3.4.1 (2026-02-04)
13154- **Fixed:** End time field now properly saves to database
13155- **Fixed:** End time dropdown now filters to show only valid times after start time
13156- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
13157- **Improved:** End time auto-suggests +1 hour when start time selected
13158
13159## Version 3.4.0 (2026-02-04)
13160- **Added:** End time support for events (start and end times)
13161- **Added:** Automatic time conflict detection
13162- **Added:** Conflict warning badges (⚠️) on events with overlapping times
13163- **Added:** Conflict tooltips showing which events conflict
13164- **Added:** Visual conflict indicators with pulse animation
13165- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
13166
13167## Version 3.3.77 (2026-02-04)
13168- **Fixed:** Namespace badge onclick handlers restored after clearing filter
13169- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
13170
13171## Version 3.3.76 (2026-02-04)
13172- **Fixed:** Namespace badges now clickable after clearing namespace filter
13173
13174## Version 3.3.75 (2026-02-04)
13175- **Fixed:** Form resubmission warnings eliminated
13176- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
13177- **Changed:** All admin redirects now use absolute URLs
13178
13179## Version 3.3.74 (2026-02-04)
13180- **Fixed:** Clearing namespace filter now restores original namespace instead of default
13181- **Added:** data-original-namespace attribute to preserve initial namespace setting
13182- **Improved:** Console logging for namespace filter debugging
13183
13184## Version 3.3.73 (2026-02-03)
13185- **Added:** Dynamic namespace filtering banner with clear button
13186- **Fixed:** JavaScript function accessibility issues
13187- **Fixed:** Namespace badge click handlers in event lists
13188- **Improved:** Persistent namespace filtering across views
13189
13190## Earlier Versions
13191See previous transcripts for complete history through v3.3.73, including:
13192- Recurring events with Outlook sync
13193- Multi-namespace support
13194- Event categories and mapping
13195- Backup/restore functionality
13196- System statistics bar
13197- Namespace selector with fuzzy search
13198- Events Manager with import/export
13199- And much more...
13200