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) 1294 ↑ 1295 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``` 1546 • 1547 • • • 1548 • → • ← Glowing trail 1549 • • • 1550 • 1551``` 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``` 1650 ✨ 1651 ✨ ✨ 1652✨ → ✨ (cursor trail) 1653 ✨ ✨ 1654 ✨ 1655``` 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└──┴──┴──┴──┴──┴──┴──┘ 2029 ↑ 2030 Green box (#00cc07) 2031``` 2032 2033**Professional Theme**: 2034``` 2035┌──┬──┬──┬──┬──┬──┬──┐ 2036│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2037└──┴──┴──┴──┴──┴──┴──┘ 2038 ↑ 2039 Blue box (#4a90e2) 2040``` 2041 2042**Wiki Theme**: 2043``` 2044┌──┬──┬──┬──┬──┬──┬──┐ 2045│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2046└──┴──┴──┴──┴──┴──┴──┘ 2047 ↑ 2048 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) 3115↓ 3116Upload Form (full width) 3117↓ 3118Current Version 3119↓ 3120Recent Changes 3121↓ 3122Backups 3123``` 3124 3125**After (v5.1.8)**: 3126``` 3127Current Version (full width) 3128↓ 3129Upload (60%) | Notes (40%) 3130↓ 3131Recent Changes 3132↓ 3133Backups 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 │ 3227│ calendar.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.ini ✓ 4343- Perfect template match ✓ 4344 4345**Backend (Admin)**: 4346- Reads same style.ini ✓ 4347- 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/boxes ✓ 5343 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 6423↑ 6424Green left bar 6425``` 6426 6427### Purple Event Box: 6428``` 6429┌─────────────┐ Purple border 6430│Team Meeting │ 6431│2:00 PM │ 6432└─────────────┘ Purple border 6433↑ 6434Purple left bar 6435``` 6436 6437### Professional Event Box: 6438``` 6439┌─────────────┐ Gray border 6440│Team Meeting │ 6441│2:00 PM │ 6442└─────────────┘ Gray border 6443↑ 6444Event 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" 6965 ↑ 6966 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" 6985 ↑ 6986 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" 7005 ↑ 7006 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" 7019 ↑ 7020 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" 7033 ↑ 7034 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** ✨" 7047 ↑ 7048 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" 7165 ↑ 7166 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" 7173 ↑ 7174 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:** `&` 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 `&` 11373 11374**Cause**: Double encoding on line 2625 and 2681 11375```php 11376// Line 2625: 11377$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 11378 11379// Line 2681: 11380$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &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 11757✅ Today/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 ` ` 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: "; // HTML entity for newline 12034 12035// Displays as: 12036Conflicts with: 12037• Event 1 12038• Event 2 12039``` 12040 12041**Why ` ` 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 └─────────┬──────────┘ 12170 ▼ 12171 ⚠ 12172``` 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