1# Calendar Plugin Changelog 2 3## Version 7.0.8 (2026-02-15) - TIMEZONE FIX 4 5### Bug Fix: Date Shift in Non-UTC Timezones 6Fixed critical bug where events appeared shifted by one day in timezones ahead of UTC (e.g., Europe/Prague UTC+1). 7 8**Root Cause:** 9JavaScript's `toISOString()` converts dates to UTC, so local midnight (00:00) in Prague becomes 23:00 UTC of the *previous day*. When split to get YYYY-MM-DD, this returns the wrong date. 10 11**Fix:** 12Added `formatLocalDate(date)` helper function that formats dates using local time methods (`getFullYear()`, `getMonth()`, `getDate()`) instead of UTC conversion. 13 14**Affected Areas (now fixed):** 15- Multi-day event spanning (line 385) 16- Today string calculation in event list (line 566) 17- Past event detection in event items (line 1022) 18 19### Files Modified 20- `calendar-main.js` - Added `formatLocalDate()` helper, replaced 3 `toISOString().split('T')[0]` calls 21 22--- 23 24## Version 7.0.7 (2026-02-15) - GOOGLE CALENDAR SYNC 25 26### Google Calendar Integration 27- Two-way sync with Google Calendar via OAuth 2.0 28- Import events from Google Calendar to DokuWiki 29- Export events from DokuWiki to Google Calendar 30- Support for all-day and timed events 31- Multi-day event handling 32- Color mapping between Google and DokuWiki 33- Duplicate detection prevents re-importing same events 34- Select which Google calendar to sync with 35- Admin panel UI for configuration and sync controls 36 37### Setup Requirements 38- Google Cloud Console project 39- Google Calendar API enabled 40- OAuth 2.0 Web Application credentials 41- Redirect URI configuration 42 43### New Files 44- `classes/GoogleCalendarSync.php` - OAuth and Calendar API integration 45 46### Files Modified 47- `action.php` - Added Google sync action handlers 48- `admin.php` - Added Google sync admin tab 49 50--- 51 52## Version 7.0.6 (2026-02-15) - ACCESSIBILITY IMPROVEMENTS 53 54### Screen Reader Support 55- Added ARIA live region for dynamic announcements 56- Announces "Event created", "Event updated", "Event deleted" on actions 57- Announces "Task marked complete/incomplete" on toggle 58- Screen readers receive feedback without visual alerts 59 60### Debug Mode 61- Added `CALENDAR_DEBUG` flag for JavaScript console logging 62- `calendarLog()` and `calendarError()` helper functions 63- Debug output disabled by default 64 65### Code Quality 66- Consistent error handling patterns 67- Better separation of concerns 68 69### Files Modified 70- `calendar-main.js` - ARIA live region, debug helpers, announcements 71 72--- 73 74## Version 7.0.5 (2026-02-15) - AUDIT LOGGING & ACCESSIBILITY 75 76### Audit Logging 77- New `AuditLogger.php` class for compliance logging 78- Logs all event modifications: create, update, delete, move, task toggle 79- JSON-formatted log files with timestamps, user info, and IP addresses 80- Automatic log rotation (5MB max, 10 files retained) 81- Log entries include: namespace, date, event ID, title, and change details 82 83### Keyboard Navigation (Accessibility) 84- Arrow keys navigate between calendar days 85- Enter/Space activates focused day (opens popup) 86- Arrow Up/Down navigates between events in popups 87- Enter on event opens edit dialog 88- Delete/Backspace on event triggers delete 89- Escape closes all dialogs, popups, and dropdowns 90- Added `tabindex` and `role` attributes for screen readers 91- Added `aria-label` descriptions for calendar days and events 92 93### CSS Focus States 94- Visible focus indicators on calendar days 95- Focus styles on event items in popups 96- Focus styles on custom date/time pickers 97- Uses `focus-visible` for keyboard-only focus rings 98 99### Files Added 100- `classes/AuditLogger.php` - Compliance audit logging 101 102### Files Modified 103- `action.php` - Integrated audit logging for all event operations 104- `calendar-main.js` - Extended keyboard navigation 105- `syntax.php` - Added accessibility attributes to calendar cells 106- `style.css` - Added focus state styles 107 108--- 109 110## Version 7.0.4 (2026-02-15) - CODE CLEANUP 111 112### Code Cleanup 113- Removed unused `calendarDebounce()` and `calendarThrottle()` utility functions 114- Removed duplicate `updateEndTimeOptions()` function definition 115- Removed unused `_calendarSelectOpen` tracking variable 116- Removed orphaned `.input-date` and `.time-select` CSS (no longer using native inputs) 117- Consolidated legacy function calls 118 119### Improvements 120- End date picker now opens to start date's month when no end date is selected 121- End time picker now scrolls to first available time after start time 122 123### Files Modified 124- `calendar-main.js` - Removed ~40 lines of dead code 125- `style.css` - Removed ~25 lines of unused CSS 126 127--- 128 129## Version 7.0.3 (2026-02-15) - CUSTOM DATE & TIME PICKERS 130 131### Complete Replacement of Native Browser Controls 132Both date inputs and time selects have been replaced with custom, lightweight pickers to eliminate all browser-related performance issues. 133 134#### Custom Date Picker 135- **Mini calendar grid** - Clean monthly view with day selection 136- **Month navigation** - Previous/next buttons for quick browsing 137- **Visual indicators** - Today highlighted, selected date marked 138- **End date validation** - Cannot select end date before start date 139- **Clear button** - Easy removal of optional end date 140 141#### Custom Time Picker (from v7.0.2) 142- **Period groupings** - Morning, Afternoon, Evening, Night 143- **Lazy loading** - Options built only when dropdown opens 144- **Smart filtering** - End times after start time only 145 146#### Code Cleanup 147- Removed old `setupSelectTracking()` function (was causing conflicts) 148- Removed redundant event listener code 149- Unified dropdown close handling for all picker types 150- No native `<input type="date">` or `<select>` elements in event dialog 151 152### Files Modified 153- `syntax.php` - New date picker HTML structure 154- `calendar-main.js` - Custom date picker JavaScript, cleanup 155- `style.css` - Date picker calendar grid styles 156 157--- 158 159## Version 7.0.2 (2026-02-15) - CUSTOM TIME PICKER 160 161### Major Fix: Replaced Native Selects with Custom Time Pickers 162The native `<select>` element with 97 time options was causing browser freezes when opening. This version replaces them with lightweight custom dropdown pickers. 163 164#### New Custom Time Picker Features 165- **Instant opening** - No browser rendering delay 166- **Lazy-loaded options** - Dropdown HTML built only when clicked 167- **Period grouping** - Morning, Afternoon, Evening, Night sections 168- **Smart filtering** - End time options automatically hide times before start time 169- **Visual feedback** - Selected time highlighted, disabled times grayed out 170 171#### Technical Changes 172- Replaced `<select>` elements with `<button>` + `<div>` dropdown 173- Hidden `<input>` stores actual value for form submission 174- Time data pre-computed once, reused for all pickers 175- Event delegation for option clicks 176- Automatic cleanup when clicking outside 177 178#### Removed 179- Native `<select>` time pickers (caused 2600ms+ freezes) 180- `onchange` handlers from date inputs (handled in JS now) 181- Old `setupSelectTracking()` function 182 183### Files Modified 184- `syntax.php` - New time picker HTML structure 185- `calendar-main.js` - Custom time picker JavaScript 186- `style.css` - Time picker dropdown styles 187 188--- 189 190## Version 7.0.1 (2026-02-15) - SELECTOR FLICKER FIX 191 192### Bug Fixes 193- **Fixed selector flicker on subsequent clicks** - Time/date selectors no longer flash or lag after first use 194 - New `setupSelectTracking()` prevents DOM updates while selector is open 195 - Tracks mousedown/focus/blur/change events on all form inputs 196 - Uses `requestAnimationFrame` for smooth visual updates 197 - Added state caching to skip redundant DOM manipulation 198 199### CSS Improvements 200- Changed `transition: all` to specific properties on `.input-sleek` elements 201- Added `transition: none` for select options 202- Prevents browser reflow issues during dropdown rendering 203 204--- 205 206## Version 7.0.0 (2026-02-15) - STABILITY & PERFORMANCE RELEASE 207 208### Major Improvements 209 210#### File Locking & Atomic Writes (Critical Stability Fix) 211- **New `CalendarFileHandler` class** with atomic file operations 212- Prevents data corruption from concurrent event saves 213- Uses temp file + atomic rename strategy for safe writes 214- Implements `flock()` for proper file locking during reads/writes 215- Graceful handling of lock acquisition failures with retries 216 217#### Caching Layer (Performance Improvement) 218- **New `CalendarEventCache` class** for event data caching 219- 5-minute TTL reduces unnecessary JSON file reads 220- In-memory caching for current request 221- Automatic cache invalidation on event modifications 222- Cache cleanup for expired entries 223 224#### Rate Limiting (Security Enhancement) 225- **New `CalendarRateLimiter` class** for AJAX endpoint protection 226- 60 requests/minute for read actions 227- 30 requests/minute for write actions (more restrictive) 228- Per-user tracking (falls back to IP for anonymous) 229- Rate limit headers in responses (X-RateLimit-Limit, X-RateLimit-Remaining) 230- Automatic cleanup of old rate limit data 231 232#### Code Refactoring 233- **New `CalendarEventManager` class** consolidating CRUD operations 234- New `classes/` directory for organized code structure 235- Reduced code duplication across files 236- Improved separation of concerns 237- Better maintainability for future development 238 239#### JavaScript Performance Fixes (Dialog Responsiveness) 240- **Fixed slow time selector** - End time dropdown now opens instantly 241 - Replaced `Array.from().forEach()` with direct `options` loop (97 options) 242 - Single-pass algorithm instead of multiple iterations 243 - Uses `hidden` property instead of `style.display` manipulation 244- **Fixed event listener accumulation** - Dialog inputs no longer slow down over time 245 - Added `data-initialized` flag to prevent re-binding listeners 246 - Namespace search only initializes once per calendar 247- **Fixed selector flicker on subsequent clicks** 248 - New `setupSelectTracking()` function prevents DOM updates while selector is open 249 - Tracks mousedown/focus/blur/change events on time and date inputs 250 - Uses `requestAnimationFrame` instead of `setTimeout` for visual updates 251 - Added state caching to skip redundant DOM updates 252- **Fixed CSS transition interference** 253 - Changed `transition: all` to specific properties on form inputs 254 - Added explicit `transition: none` for select options 255 - Prevents browser reflow issues during dropdown rendering 256 257### Branding Changes 258- Removed "Matrix Edition" from plugin name and all references 259- Plugin is now simply "Calendar Plugin" 260- Matrix theme remains available (now called just "Matrix") 261 262### Technical Details 263- All JSON file operations now use atomic writes 264- Event saves protected against race conditions 265- Cache automatically invalidated on namespace/month changes 266- Rate limiter uses probabilistic cleanup (1 in 100 requests) 267 268### Files Added 269- `classes/FileHandler.php` - Atomic file operations with locking 270- `classes/EventCache.php` - Caching layer with TTL 271- `classes/RateLimiter.php` - AJAX rate limiting 272- `classes/EventManager.php` - Consolidated event CRUD operations 273 274### Upgrade Notes 275- No database migration required 276- Cache directory created automatically (`data/cache/calendar/`) 277- Rate limit data stored in `data/cache/calendar/ratelimit/` 278- Existing events and settings preserved 279 280--- 281 282## Version 6.14.2 (2026-02-15) - SYSTEM LOAD TOGGLE 283 284### Added System Load Bars Toggle 285- New toggle in **Admin > Calendar > Themes** tab 286- Choose to show or hide CPU/Memory load indicator bars 287- Setting applies to both event panel and sidebar widget 288- Stored in `data/meta/calendar_show_system_load.txt` 289- JavaScript polling is also disabled when hidden (saves resources) 290 291## Version 6.14.1 (2026-02-14) - SECURITY FIX 292 293### Security Improvements 294- **Authentication required** - Write actions (save, delete, toggle) now require user to be logged in 295- **Improved CSRF token handling** - New `getSecurityToken()` helper function checks multiple sources: 296 - `JSINFO.sectok` (standard) 297 - `window.JSINFO.sectok` 298 - Hidden form field `input[name="sectok"]` 299 - Meta tag `meta[name="sectok"]` 300- Anonymous users can no longer add/edit/delete events 301- Better error messages for authentication and token failures 302 303### Bug Fixes 304- Fixed "Invalid security token" error on clean DokuWiki installations 305- Added debug logging for security token failures 306 307## Version 6.14.0 (2026-02-14) - STABLE RELEASE 308 309### Code Cleanup & Localization 310- Added localization for all static calendar strings (EN/DE) 311- New lang keys: `previous_month`, `next_month`, `print_calendar`, `no_events_scheduled`, `calendar_label`, `details` 312- Code review and cleanup completed 313- Updated README.md and plugin documentation 314 315### Static Calendar Features (v6.13.x consolidated) 316- Read-only presentation mode: `{{calendar static}}` 317- Custom titles: `title="My Events"` 318- Month locking: `month=2` disables navigation 319- Print button with clean itinerary output 320- All themes supported: matrix, pink, purple, professional, wiki, dark, light 321- `noprint` option to hide print functionality 322- Formatted descriptions in tooltips and itinerary 323 324### Other Improvements in 6.13.x 325- Admin menu icon (SVG) 326- Config import fix for `return array()` syntax 327- Mobile touch button fixes 328- Important events in day popup with star icons 329- Time picker grouped by period 330- Multi-day event time validation 331 332## Version 6.13.13 (2026-02-14) - PRINT BUTTON CENTERING 333 334### Fixed Print Button Icon Alignment 335- Added `display: flex`, `align-items: center`, `justify-content: center` 336- Added `padding: 0` and `line-height: 1` 337- Icon now properly centered in circle 338 339## Version 6.13.12 (2026-02-14) - SIMPLE TOOLTIP 340 341### Simplified Hover Tooltip 342- Removed custom JS tooltip (was causing triple popups) 343- Uses native browser `title` attribute only 344- Plain text with formatting converted: `**bold**` → `*bold*`, `//italic//` → `_italic_` 345- Links shown as: `text (url)` 346- Added emoji before time for visual clarity 347- Itinerary still shows full HTML formatting 348 349## Version 6.13.11 (2026-02-14) - FORMATTED DESCRIPTIONS 350 351### Rich Text Formatting in Static Calendar 352- **Hover tooltips** now show formatted text (bold, italic, links, line breaks) 353- **Itinerary descriptions** display with full formatting 354- Uses existing `renderDescription()` function for consistency 355- Supports: `**bold**`, `//italic//`, `[[links]]`, `[markdown](links)`, line breaks 356 357### Technical Details 358- Added `data-tooltip` attribute with rich HTML content 359- New JavaScript tooltip handler with smart positioning 360- CSS styles for `.static-tooltip` and itinerary formatting 361- Tooltips stay within viewport bounds 362 363## Version 6.13.10 (2026-02-14) - PRINT MARGINS FIX v3 364 365### Fixed Print Margins - Inline Styles Approach 366- Removed reliance on `@page` CSS (browser support inconsistent) 367- Uses inline style `padding: 50px 60px` directly on wrapper div 368- Simplified CSS for better browser compatibility 369- Smaller table font (12px) for better fit 370- Set `max-width: 800px` on content wrapper 371 372## Version 6.13.9 (2026-02-14) - PRINT MARGINS FIX v2 373 374### Fixed Print Margins 375- Added `.print-wrapper` div with 0.5in padding/margin 376- Uses both `@page` margin AND wrapper margins for compatibility 377- Set `@page { margin: 1in 0.75in }` (top/bottom 1in, sides 0.75in) 378- Wrapper has `max-width: 7.5in` to fit standard letter size 379- Smaller fonts (0.85em) to fit more content 380- Added 250ms delay before print to ensure styles load 381 382## Version 6.13.8 (2026-02-14) - PRINT MARGINS FIX 383 384### Improved Print Layout 385- Added `@page { margin: 0.75in }` for proper print margins 386- Increased body padding to 40px for screen preview 387- Smaller font sizes to fit better on page 388- Description column limited width with word-wrap 389- Table header repeats on each page (`display: table-header-group`) 390- Rows avoid page breaks in middle (`page-break-inside: avoid`) 391- Print color adjust enabled for backgrounds 392 393## Version 6.13.7 (2026-02-14) - ALL THEMES FOR STATIC CALENDAR 394 395### Added All Theme Options 396Now all themes work with static calendar: 397 398| Theme | Description | 399|-------|-------------| 400| `matrix` | Green on dark (default Matrix style) | 401| `pink` | Pink/magenta on dark | 402| `purple` | Purple/violet on dark | 403| `professional` | Blue on white (business style) | 404| `wiki` | Neutral gray (matches DokuWiki) | 405| `dark` | Blue on dark gray | 406| `light` | Clean white/gray | 407 408### Examples 409``` 410{{calendar theme=matrix static}} 411{{calendar theme=purple static}} 412{{calendar theme=professional static}} 413{{calendar theme=wiki static}} 414``` 415 416## Version 6.13.6 (2026-02-14) - QUOTED PARAMETER FIX 417 418### Fixed Quoted Parameter Parsing 419- Titles with spaces now work: `title="Feb 26 Expense Log"` 420- Uses regex to properly parse: `key="value with spaces"` 421- Supports both double and single quotes 422- Example: `{{calendar title="My Custom Title" static}}` 423 424## Version 6.13.5 (2026-02-14) - STATIC CALENDAR OPTIONS 425 426### New Static Calendar Options 427 428| Option | Description | Example | 429|--------|-------------|---------| 430| `title=X` | Custom title instead of month name | `title="Club Meetings"` | 431| `noprint` | Hide print button and print view | `{{calendar static noprint}}` | 432| `theme=X` | Apply specific theme (matrix, pink, dark, light) | `theme=matrix` | 433 434### Fixed Month/Year Lock 435- When you specify `month=X` or `year=X`, navigation is now disabled 436- `{{calendar month=2 static}}` shows only February with no nav arrows 437- `{{calendar year=2025 month=12 static}}` locks to December 2025 438 439### Examples 440``` 441{{calendar static}} // Navigable, current month 442{{calendar month=2 static}} // Locked to February 443{{calendar title="Team Events" static}} // Custom title 444{{calendar theme=matrix static}} // Matrix theme 445{{calendar namespace=club static noprint}} // No print button 446{{calendar month=3 title="March Meetings" theme=pink static}} 447``` 448 449## Version 6.13.4 (2026-02-14) - DEDICATED PRINT BUTTON 450 451### Added Print Button to Static Calendar 452- New ️ print button in the calendar header 453- Opens a clean popup window with ONLY the itinerary content 454- Automatically triggers print dialog 455- Window closes after printing 456- No DokuWiki headers/footers/sidebars - just the calendar 457 458### How It Works 459- Extracts the print view HTML 460- Creates a new window with minimal styling 461- Calls `window.print()` automatically 462- Clean single-page output 463 464## Version 6.13.3 (2026-02-14) - PRINT BLANK PAGES FIX 465 466### Fixed Blank Pages When Printing 467- Aggressively hide ALL screen view elements and children in print 468- Reset height/width to 0 with !important on grid, cells, events 469- Ensure print view elements have proper display table properties 470- Force all hidden elements to position:absolute off-screen 471 472## Version 6.13.2 (2026-02-14) - STATIC CALENDAR RESPONSIVE FIX 473 474### Improved Static Calendar Layout 475- Changed from `max-width: 900px` to `width: 100%` for full container fit 476- Added `table-layout: fixed` for consistent column widths 477- Added `overflow-x: auto` for horizontal scroll on very small screens 478- Reduced header padding and font sizes for better fit 479- Improved responsive breakpoints for mobile (768px and 480px) 480- Hide time on very small screens to save space 481- Better touch targets for navigation buttons 482 483## Version 6.13.1 (2026-02-14) - STATIC CALENDAR FIX 484 485### Bug Fix 486- Added missing `getImportantNamespaces()` helper method 487- Fixed `loadEventsForMonth` → use existing `loadEvents` method 488- Added multi-namespace/wildcard support to static calendar 489 490## Version 6.13.0 (2026-02-14) - STATIC CALENDAR MODE 491 492### New Static/Presentation Mode 493Read-only calendar view for public display and printing. 494 495**Usage:** 496``` 497{{calendar static}} 498{{calendar namespace=meetings static}} 499``` 500 501**Screen View Features:** 502- Clean calendar grid without edit/delete buttons 503- Month navigation (prev/next arrows) 504- Hover tooltips showing full event details (title, time, description) 505- Important events highlighted with ⭐ and golden background 506- Today's date highlighted 507- Responsive design for mobile 508 509**Print View Features:** 510- Automatically switches to itinerary format when printing 511- Table layout: Date | Time | Event | Details 512- Important events marked with ⭐ 513- Dates grouped (date only shown once per day) 514- Page break handling for long lists 515- Clean black & white friendly output 516 517**Files Changed:** 518- `syntax.php`: Added `renderStaticCalendar()` method 519- `action.php`: Added `getStaticCalendar()` AJAX handler 520- `calendar-main.js`: Added `navStaticCalendar()` function 521- `style.css`: Added static calendar styles + print media queries 522 523## Version 6.12.7 (2026-02-14) - ADMIN MENU ICON 524 525### Added Admin Menu Icon 526- New monochrome SVG calendar icon for DokuWiki admin menu 527- Icon shows calendar with binding rings, header, and date dots 528- Matches DokuWiki's admin interface style 529- Added `getMenuIcon()` method to admin.php 530- Icon file: `images/icon.svg` 531 532## Version 6.12.6 (2026-02-14) - CONFIG IMPORT FIX 533 534### Fixed Config Import Validation 535- Now accepts both `return [` and `return array(` syntax 536- Regex updated from `/return\s*\[/` to `/return\s*(\[|array\s*\()/` 537- Older PHP config files using `return array(...)` now import correctly 538 539## Version 6.12.5 (2026-02-14) - MOBILE BUTTON FIX 540 541### Fixed Delete/Edit Buttons on Mobile 542- Added `type="button"` attribute to prevent form submission issues 543- Added `touchend` event delegation for reliable mobile touch handling 544- Increased button touch targets (32px default, 40px on mobile) 545- Added `touch-action: manipulation` to prevent touch delays 546- Added `-webkit-tap-highlight-color` for visual feedback 547 548### Technical Details 549- Mobile browsers sometimes don't fire `onclick` reliably 550- New `touchend` handler calls `btn.click()` explicitly 551- Larger touch targets meet accessibility guidelines (44px recommended) 552 553## Version 6.12.4 (2026-02-14) - STAR INLINE FIX 554 555### Fixed Star Position in Day Popup 556- Star icon now displays inline with event title (left side) 557- Changed `.popup-event-title` from `flex: 1 1 100%` to `flex: 1 1 auto` 558- Star and title stay on same line instead of star being above 559 560## Version 6.12.3 (2026-02-14) - DAY POPUP IMPORTANT EVENTS 561 562### Important Event Highlighting in Day Popup 563- Events from important namespaces now show ⭐ star icon 564- Golden gradient background highlight for important events 565- Golden border glow effect matching other views 566- Consistent styling across calendar grid, sidebar, and day popup 567 568### Technical Details 569- Added `importantNamespaces` check to `showDayPopup()` function 570- Added `.popup-event-important` and `.popup-event-star` CSS classes 571- Reads important namespaces from `container.dataset.importantNamespaces` 572 573## Version 6.12.2 (2026-02-14) - MULTI-DAY EVENT TIME FIX 574 575### Multi-Day Event End Time 576- End time now allows all times when end date differs from start date 577- Example: Event from 9:00 PM on Feb 28 to 5:00 AM on Feb 29 now works correctly 578- Same-day events still enforce end time > start time 579- Changing end date now triggers time validation update 580 581### Technical Details 582- `updateEndTimeOptions()` checks if `endDate !== startDate` 583- If multi-day, all time options are enabled 584- Added `onchange` handler to both start date and end date fields 585 586## Version 6.12.1 (2026-02-14) - TIME PICKER & EDIT DIALOG FIX 587 588### Improved Time Picker 589- Grouped time options by period (Morning, Afternoon, Evening, Night) 590- Much easier to navigate - no more scrolling through 96 options 591- End time options before start time are now hidden/disabled 592- Invalid end times automatically corrected when start time changes 593 594### Fixed Edit Event Dialog Draggability 595- Edit dialog is now properly draggable (was broken due to async AJAX) 596- Moved `makeDialogDraggable()` call inside the AJAX success callback 597- Removed redundant wrapper patch that didn't work with async code 598 599### Technical Details 600- Time picker uses `<optgroup>` for visual grouping 601- End time validation hides invalid options (not just disables) 602- Both Add and Edit dialogs now call `makeDialogDraggable()` directly 603 604## Version 6.12.0 (2026-02-14) - EVENT EDITOR DIALOG IMPROVEMENTS 605 606### Fixed Event Editor Dialog Draggability 607- Fixed duplicate event listener accumulation that caused performance degradation 608- Each time dialog opened, new drag listeners were added without removing old ones 609- Now properly cleans up old listeners before adding new ones 610- Added `cursor: grabbing` feedback while dragging 611- Dialog position resets when reopened (no more stuck positions) 612- Excluded close button from triggering drag 613 614### Optimized Time Selection Performance 615- Simplified `updateEndTimeOptions()` to be much faster 616- Removed expensive loop through 96 options checking style.display 617- Now just validates current selection and sets new value if invalid 618- Should eliminate freezing/lag when selecting start time 619 620### Technical Details 621- Added `_dragCleanup` function stored on handle element 622- Cleanup called before re-initialization 623- Removed unnecessary `setTranslate` helper function 624 625## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION 626 627### JavaScript Frontend Localization 628- Added `getCalendarLang()` helper function 629- Added `getJsLangStrings()` PHP method 630- Embedded JSON language data in all render functions 631- Localized month names (full + short) 632- Localized dialog titles, confirmations, badges, empty states 633 634## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION 635 636### Sidebar Widget 637- Fixed `\n` in single-quoted strings → double-quoted for proper newlines 638- Localized "Runs every X minutes" cron descriptions 639- Event dialog labels, placeholders, options 640- Day names, ordinal positions, color names 641- Today/Tomorrow/Important section headers 642 643## Version 6.11.2 (2026-02-13) - ADMIN BACKEND LOCALIZATION 644 645### Admin Backend 646- Localized ~220 hardcoded strings in admin.php 647- AJAX JSON responses, redirect messages, error messages 648- Pattern names (Daily, Weekly, Monthly, etc.) 649 650## Version 6.11.1 (2026-02-13) - CONFIG IMPORT BUG FIX 651 652### Bug Fix 653- Fixed regex to accept both `return [` and `return array(` syntax 654- File: `admin.php` lines 5947, 6001 655 656## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION 657 658### Localized Manage Recurring Series Dialog 659Complete translation of the "Manage" button dialog for recurring events: 660 661**Section Headers:** 662- "Manage Recurring Series" → "Wiederkehrende Serie verwalten" 663- "Extend Series" → "Serie erweitern" 664- "Trim Past Events" → "Vergangene Termine kürzen" 665- "Change Pattern" → "Muster ändern" 666- "Change Start Date" → "Startdatum ändern" 667- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen" 668 669**Labels & Buttons:** 670- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.) 671- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close) 672- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly) 673- Help text and notes 674 675**Confirmation Dialogs:** 676- Trim confirmation with date 677- Respace confirmation 678- Shift confirmation 679 680### Added 60+ Language Strings for Dialogs 681Complete vocabulary for recurring event management in both English and German. 682 683### Note on Browser Validation Messages 684"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin. 685 686## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION 687 688### Localized All JavaScript Dialogs 689 690**New Namespace Dialog:** 691- Prompt text with examples now in German 692- Invalid namespace error message 693 694**Rename Namespace Dialog:** 695- Prompt text with current name 696 697**Delete Confirmations:** 698- Delete selected events confirmation 699- Delete namespace confirmation 700- Delete recurring series confirmation 701 702**Trim Recurring Events:** 703- "Counting..." / "Zähle..." 704- "Trimming..." / "Kürze..." 705- "No past recurring events found" message 706- "Found X past recurring events" confirmation 707- Button text resets 708 709### Added 15+ New Dialog Strings 710Both English and German translations for all interactive prompts and confirmations. 711 712## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION 713 714### Fixed Remaining English Strings 715 716**Namespace Explorer Control Bar:** 717- "➡️ Move" → "➡️ Verschieben" 718- "➕ New Namespace" → "➕ Neuer Namensraum" 719- " Cleanup" → " Bereinigen" 720- "0 selected" → "0 ausgewählt" 721- "%d selected" → "%d ausgewählt" 722 723**Recurring Events Button Tooltips:** 724- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten" 725- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern" 726- "Delete all occurrences" → "Alle Vorkommen löschen" 727 728**JavaScript Confirmation Messages:** 729- "No events selected" → "Keine Termine ausgewählt" 730- Delete confirmation with count 731- Delete namespace confirmation 732- "Scanning..." → "Scanne..." 733- "Cleaning..." → "Bereinige..." 734- "No empty namespaces found" message 735- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden" 736- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?" 737 738### Technical 739- Added adminLang JavaScript object with all translatable strings 740- All dynamic JavaScript messages now use language system 741 742## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION 743 744### Additional Localization for Manage Events Tab 745 746**Recurring Events Table:** 747- Search placeholder: "Wiederkehrende Termine suchen..." 748- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen 749- Source labels: Markiert / Erkannt (was Flagged / Detected) 750- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del) 751- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert 752- Footer: "Gesamt: X Serien" (was "Total: X series") 753- No results message 754 755**Namespace Explorer Drop Zones:** 756- Header: " Zielbereich" (was "Drop Target") 757- Drop hint: "Hier ablegen" (was "Drop here") 758- Default namespace label consistent 759 760### Added 25+ New Language Strings 761- Recurring table columns and labels 762- Pattern translations 763- Action button labels 764- Drop zone labels 765 766## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION 767 768### Localized: Manage Events Tab (Complete) 769All text in the Manage Events admin tab now uses the language system: 770 771**Events Manager Section:** 772- Page title, section header, description 773- Statistics labels (Total Events, Namespaces, JSON Files, Recurring) 774- "Last scanned" timestamp label 775- Button labels (Re-scan Events, Export All Events, Import Events) 776- "View Breakdown by Namespace" expandable section 777- Table headers (Namespace, Events, Files) 778 779**Important Namespaces Section:** 780- Section header and description 781- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup) 782- Save button and hint text 783 784**Cleanup Old Events Section:** 785- Section header and description 786- Radio button labels (By Age, By Status, By Date Range) 787- Age options (Delete events older than, months, years) 788- Status options (Completed tasks, Past events) 789- Date range labels (From, To) 790- Namespace filter label and placeholder 791- Preview and Delete button labels 792- JavaScript confirmation messages 793- Loading/error states 794 795**Recurring Events Section:** 796- Section header 797- Button labels (Trim All Past, Rescan) 798 799**Namespace Explorer Section:** 800- Section header and description 801- Search placeholder 802- Control bar buttons (All, None, Delete, Move to) 803- Datalist placeholder 804 805### Added 60+ New Language Strings 806Both English and German language files expanded with comprehensive admin terminology. 807 808## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX 809 810### Bug Fix: Language Files Not Working 811- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string 812- Admin menu now correctly shows "Kalenderverwaltung" in German 813- Admin tabs now use language system: 814 - "Manage Events" → "Termine verwalten" 815 - "Update Plugin" → "Plugin aktualisieren" 816 - "Outlook Sync" → "Outlook-Sync" 817 - "Themes" → "Designs" 818 819### Added More Language Strings 820- Admin tab labels 821- Admin section headers (Event Browser, Important Namespaces, etc.) 822- Sync settings labels 823- Common button labels (Run Now, Download, Upload, Delete, etc.) 824 825## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT 826 827### New Feature: German Language Translation 828- Added complete German (de) language file 829- Expanded English language file with comprehensive translatable strings 830- Both files include 100+ translation strings covering: 831 - General terms (calendar, events, dates) 832 - Event fields (title, description, time, etc.) 833 - Actions (add, edit, delete, save, cancel) 834 - Task-related terms 835 - Recurring event options 836 - Days of week and months 837 - User messages and confirmations 838 - Search functionality 839 - Sync status messages 840 - Admin section labels 841 - Sidebar widget labels 842 - Time conflict warnings 843 844### Note 845The language strings are now available for future implementation throughout the plugin UI. Currently the admin menu uses the language system; other strings can be integrated as needed. 846 847## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX 848 849### Bug Fix: Month Search Not Working 850- **Root cause:** Function name collision - there were two `fuzzyMatch` functions 851 - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null` 852 - Local `fuzzyMatch` (for event search) returns `true`/`false` 853- When filtering events, the wrong function was being called, returning `null` for all events 854- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch` 855- Month search now works correctly on first load and after navigation 856 857### Also in this version 858- Fixed jumpToDate to properly hide search clear button after navigation 859- Removed debug logging from production code 860 861## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES 862 863### Bug Fixes 864 865**All-Dates Search Navigation Fixed** 866- Clicking a search result now properly navigates to that event's month 867- Opens the day popup showing the event details 868- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()` 869- Clears search results and restores normal event list view 870 871**"No Events" Message Fixed** 872- No longer shows "No events match your search" when in all-dates mode 873- All-dates mode has its own results display; the month-mode message was incorrectly appearing 874 875**Add Button Layout Fixed** 876- Search bar no longer pushes the "+ Add" button off the right edge 877- Search container has constrained max-width (160px) and proper flex settings 878- Header has overflow:hidden to prevent layout issues 879 880**Important Event Stars Fixed** 881- Stars now appear on initial page load (PHP rendering added) 882- Stars positioned outside the bar using CSS ::before pseudo-element 883- Added overflow:visible to event-indicators and event-bar containers 884- Bar remains full width; star sits in the left margin area 885 886### Technical 887- Star uses `event-bar-has-star` class for first-day-only display 888- jumpToDate() properly cleans up search state before navigation 889 890## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS 891 892### Bug Fix 893- **AJAX refresh now preserves important namespace highlighting** 894 - Important namespaces list now passed to JavaScript via data attribute 895 - Highlighting persists when navigating between months 896 - Works in both main calendar sidebar and standalone event panels 897 898### New Feature: Calendar Grid Star Icons 899- **Important events now show ⭐ on their color bars** in the calendar grid 900 - Small star appears on the first day of important events 901 - Tooltip prefixed with ⭐ for important events 902 - Visual distinction without cluttering the compact grid view 903 904### Admin Section Update 905- **Improved Important Namespaces description** in Admin → Calendar → Manage Events 906 - Now explains all visual effects: 907 - Calendar Grid: ⭐ star on event bars 908 - Event Sidebar: ⭐ star + highlighted background + accent border 909 - Sidebar Widget: Dedicated "Important Events" section 910 - Day Popup: Events shown with full details 911 - Better example placeholder text 912 913### Technical 914- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences) 915- Important namespaces loaded once and stored in container dataset for JavaScript access 916 917## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING 918 919### Fuzzy Search 920- **Improved search matching:** Search is now more forgiving of punctuation differences 921 - "fathers day" matches "Father's Day" 922 - "new years" matches "New Year's Eve" 923 - Smart quotes, apostrophes, dashes, and common punctuation are ignored 924- **Multi-word search:** All words must be present but in any order 925 - "birthday john" matches "John's Birthday Party" 926- Works in both "this month" and "all dates" search modes 927 928### Important Namespace Highlighting (Calendar Sidebar) 929- Events from important namespaces now highlighted in the main calendar's event list sidebar 930- Same visual treatment as the itinerary sidebar widget: 931 - Subtle theme-colored background tint 932 - Right border accent bar 933 - ⭐ star icon before event title 934- Theme-specific colors: 935 - Matrix: green tint 936 - Purple: purple tint 937 - Pink: pink tint 938 - Professional: blue tint 939 - Wiki: light blue tint 940- Configure important namespaces in Admin → Calendar → Sync Settings 941 942## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE 943 944### New Feature: Search Scope Toggle 945- **Search mode button** (/) added next to search input in both calendar views 946- **Default mode** (): Search only the current month's events (fast, local filtering) 947- **All dates mode** (): Search across ALL calendar data via AJAX 948 - Click the button to toggle to (green highlight when active) 949 - Requires at least 2 characters to search 950 - Shows results with date, time, and namespace 951 - Click any result to jump to that date and open the day popup 952 - Limited to 50 results for performance 953- Search placeholder text updates to indicate current mode 954- Compact button design takes minimal space 955 956### UI Details 957- Button sits flush with search input (no gap) 958- Green highlight when "all dates" mode is active 959- Results show full date (e.g., "Mon, Feb 12, 2026") 960- Namespace badge shown for multi-namespace setups 961 962## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING 963 964### Features 965- **Draggable Day Popup:** Calendar day popup window is now draggable by its header 966 - Click and drag the header to move the popup 967 - Header shows move cursor on hover 968 - Clicking the close button (×) still closes normally 969 970- **Important Namespace Highlighting in Sidebar:** 971 - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting 972 - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki) 973 - Right border accent bar for visual distinction 974 - ⭐ star icon appears before event title 975 - Works in Today, Tomorrow, and Important Events sections 976 977### Bug Fix 978- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons 979 - Event title now wraps to multiple lines instead of truncating 980 - Actions buttons always visible 981 - Time, date range, and namespace badges wrap properly 982 - Improved flex layout for better responsiveness 983 984## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY 985 986### UI Improvement 987- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly: 988 - Same dark theme styling (#1e1e1e background, #2c3e50 header) 989 - Same header layout with close button (×) in top-right corner 990 - Same input styling (dark inputs with green accent borders) 991 - Same footer with Cancel/Save buttons layout 992 - Same recurrence options box styling 993 - Consistent spacing, fonts, and colors throughout 994 995## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX 996 997### Bug Fix 998- **Fixed:** Description textarea now extends full width on mobile/phone view 999 - Reduced form padding from 12px to 8px on screens ≤480px 1000 - Added explicit `width: 100%` and `box-sizing: border-box` to textarea 1001 - Ensured all form inputs/selects use full available width on mobile 1002 1003## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION 1004 1005### Admin Panel Updates 1006- **Enhanced Recurring Events Table:** 1007 - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink) 1008 - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026") 1009 - Patterns now read from stored metadata when available, with smart fallback to detection 1010 1011- **Edit Recurring Series Dialog:** 1012 - Full recurrence pattern editing (not just simple intervals) 1013 - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly 1014 - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected 1015 - Monthly: Radio choice between "Day of month" or "Weekday pattern" 1016 - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown) 1017 - Pre-populates all fields from stored recurrence metadata 1018 - Properly reschedules future events using new pattern 1019 1020- **Manage Series Dialog:** 1021 - Updated summary to show date range 1022 - Extend/trim/change pattern functions work with new patterns 1023 1024### Technical Updates 1025- `findRecurringEvents()` captures all recurrence metadata from events 1026- `formatRecurrencePattern()` generates human-readable pattern descriptions 1027- `detectRecurrencePattern()` enhanced to detect more interval variations 1028- `editRecurringSeries()` PHP handler processes new recurrence parameters 1029- `generateRecurrenceDates()` creates dates matching complex patterns 1030- Recurrence metadata preserved and updated across all event occurrences 1031 1032## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS 1033 1034### New Features 1035- **Enhanced Recurring Event Options:** 1036 - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months) 1037 - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri) 1038 - **Monthly options:** 1039 - Day of month: Repeat on specific day (e.g., 15th of each month) 1040 - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday) 1041 - **Examples now possible:** 1042 - Every 2 weeks on Monday and Thursday 1043 - Every 3 months on the 15th 1044 - Every other month on the 2nd Wednesday 1045 - Every year on the same date 1046 - Last Friday of every month 1047 1048### UI Changes 1049- Redesigned recurring options section with bordered container 1050- "Repeat every [N] [period]" input with interval number field 1051- Day-of-week checkboxes for weekly recurrence 1052- Radio buttons for monthly: "Day of month" vs "Weekday pattern" 1053- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last) 1054- Day dropdown (Sunday through Saturday) 1055- Helper text for end date field 1056 1057### Technical Details 1058- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay 1059- Recurrence pattern stored in event data for reference 1060- Maximum 365 occurrences (up from 100) to support daily events for a year 1061- Smart date iteration for complex patterns 1062 1063## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING 1064 1065### New Feature 1066- **Added:** Option to set itinerary default state (expanded or collapsed) 1067 - New setting in Admin → Calendar → Sidebar Widget Settings 1068 - " Itinerary Section" with two options: 1069 - **Expanded** (default) - Show itinerary sections by default 1070 - **Collapsed** - Hide itinerary sections by default (click bar to expand) 1071 - Setting persists across page loads 1072 - Arrow indicator and content state reflect the saved preference on page load 1073 1074## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY 1075 1076### New Feature 1077- **Added:** Collapsible Itinerary bar in sidebar week view 1078 - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar) 1079 - Click to collapse/expand the Today, Tomorrow, and Important Events sections 1080 - Arrow indicator shows expanded (▼) or collapsed (►) state 1081 - Smooth animation when collapsing/expanding 1082 - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar 1083 - Selected day events remain visible whether itinerary is expanded or collapsed 1084 - Shows "No upcoming events" message when there are no itinerary items 1085 1086### UI Layout (top to bottom) 10871. Header with clock/system stats 10882. +ADD EVENT bar 10893. Week grid (7 days) 10904. Selected day's events (appears when clicking a day) 10915. ITINERARY bar (click to collapse/expand) 10926. Today section (collapsible) 10937. Tomorrow section (collapsible) 10948. Important Events section (collapsible) 1095 1096## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS 1097 1098### Bug Fixes 1099- **Fixed:** Events Manager showing inflated count (1195 instead of ~605) 1100 - The `scanDirectoryForStats()` function was counting ALL entries in JSON files 1101 - Now properly filters to only count date keys (`YYYY-MM-DD` format) 1102 - Now validates events have `id` and `title` before counting 1103 - Click " Rescan" to update the statistics with correct count 1104 1105## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS 1106 1107### Bug Fixes 1108- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries 1109 - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events 1110 - Added date format validation (`YYYY-MM-DD`) to skip non-date keys 1111 - Added validation to require `id` and `title` fields for events 1112 - Applied fix to all event-reading functions: 1113 - `getEventsByNamespace()` - main event listing 1114 - `scanNamespaceRecursive()` - namespace scanning 1115 - `searchEvents()` - event search 1116 - `findEventsByTitle()` - title lookup 1117 - `deleteRecurringSeries()` - recurring deletion 1118 - `renameRecurringSeries()` - recurring rename 1119 - Recurring events scanner 1120 - Recurring cleanup function 1121 1122### Technical Details 1123- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/` 1124- Events must have non-empty `id` and `title` fields 1125- All other entries in JSON files are now skipped 1126 1127## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG 1128 1129### Bug Fixes 1130- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path 1131- **Fixed:** "Could not clear log file" - added better error messages showing exact issue 1132- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection 1133- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.) 1134 1135## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING 1136 1137### Bug Fixes 1138- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture 1139- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly 1140- **Fixed:** Better error messages when sync fails 1141 1142### Improvements 1143- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally 1144- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries) 1145- **Improved:** Log viewer now shows full path to log file 1146- **Improved:** Better pre-flight checks (directory creation, file permissions) 1147- **Improved:** PHP binary path is now properly escaped 1148 1149### Crontab Update Required 1150If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries: 1151 1152**Before (causes duplicates):** 1153``` 1154*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1 1155``` 1156 1157**After (correct):** 1158``` 1159*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php 1160``` 1161 1162The script automatically logs to `data/meta/calendar/sync.log`. 1163 1164## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT 1165 1166### Bug Fixes 1167- **Fixed:** Sync log not showing output when running sync from admin panel 1168 - Added `--verbose` flag to sync command so output is captured 1169 - Sync output is now captured and written to the log file 1170 - Log directory is created if it doesn't exist 1171 - Better error handling if log directory isn't writable 1172 - Command being executed is logged for debugging 1173 1174### Changes 1175- Sync now runs in verbose mode when triggered from admin panel 1176- All sync output (stdout/stderr) is written to the log file 1177- Pre-flight check ensures log directory exists and is writable 1178 1179## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION 1180 1181### Bug Fix 1182- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync 1183 - The `$pluginDir` variable was missing from `runSync()` function 1184 - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command 1185 - Sync now properly changes to the plugin directory before executing 1186 1187## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS 1188 1189### Bug Fix 1190- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 1191 - Fixed in `scanDirectoryForStats()` (line 5453) 1192 - Fixed in namespace delete function (line 4137) 1193 - Fixed in export function (line 5516) 1194 - Fixed in import function (line 5636) 1195 - All locations now check `is_array()` before calling `count()` 1196 1197## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR 1198 1199### Bug Fix 1200- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 1201 - Added array type checks when iterating over calendar event data 1202 - Protects against corrupted JSON data where event lists may not be arrays 1203 - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()` 1204 1205## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS 1206 1207### Changed 1208- **Improved:** Backup management now uses bulk selection and delete 1209 - Added checkboxes next to each backup file 1210 - Added "Select All" checkbox in the action bar 1211 - Added "️ Delete Selected" button (appears when backups are selected) 1212 - Removed individual delete buttons from each row 1213 - Shows count of selected backups 1214 - Backups are deleted sequentially with visual feedback 1215 1216### UI 1217- Clean action bar at top of backup table with selection controls 1218- Selected count updates in real-time 1219- Rows fade out smoothly when deleted 1220 1221## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION 1222 1223### Changed 1224- **Improved:** Restore function now uses DokuWiki's Extension Manager API 1225 - Uses `helper_plugin_extension_extension` for proper installation 1226 - Handles permissions correctly through DokuWiki's standard plugin installation process 1227 - Falls back to manual instructions if Extension Manager is not available 1228 1229### How It Works 1230When you click " Restore" on a backup: 12311. The plugin loads DokuWiki's extension helper 12322. Calls `installFromLocal()` with the backup ZIP file 12333. DokuWiki's Extension Manager handles file extraction and installation 12344. This ensures proper permissions and follows DokuWiki standards 1235 1236### Fallback 1237If the Extension Manager helper is not available, you'll be prompted to: 1238- Download the backup ZIP 1239- Go to Admin → Extension Manager → Install 1240- Upload the ZIP file manually 1241 1242## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION 1243 1244### Removed 1245- **Removed:** "Restore" button from backup management 1246- **Removed:** `restoreBackup()` PHP method 1247- **Removed:** `restoreBackup()` JavaScript function 1248 1249### Added 1250- **Added:** Informational note in backup section explaining how to restore: 1251 - Download the backup ZIP file 1252 - Go to Admin → Extension Manager → Install 1253 - Upload the ZIP file there 1254 - DokuWiki's extension manager handles installation safely with proper permissions 1255 1256### Reason 1257The 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. 1258 1259## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS 1260 1261### Bug Fixes 1262- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.) 1263 - Added missing theme keys to `getWikiTemplateColors()` return array 1264 1265- **Fixed:** "Permission denied" errors for sync.log and sync_state.json 1266 - Moved sync files from plugin directory to `data/meta/calendar/` (writable location) 1267 - Updated sync_outlook.php, admin.php to use new paths 1268 - sync_config.php remains in plugin directory (must be manually configured) 1269 1270- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives 1271 - This ensures deletion works correctly when stored namespace differs from file location 1272 1273### Note on lang.php Permission Error 1274If 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. 1275 1276## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2) 1277 1278### Bug Fix 1279- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces 1280 - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events 1281 - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('') 1282 - This allows moving events FROM the default namespace TO any other namespace 1283 - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace` 1284 1285## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS 1286 1287### Bug Fixes 1288- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate 1289 - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces 1290 - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace 1291 1292- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace 1293 - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace 1294 - Now retrieves the calendar's original namespace from `container.dataset.namespace` 1295 - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency 1296 1297## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES 1298 1299### Improved 1300- Added `autocomplete="new-password"` to client secret input field 1301- Added `autocomplete="email"` to user email input field 1302- Added `autocomplete="off"` to client ID input field 1303- Follows browser best practices for form inputs 1304 1305## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION 1306 1307### Bug Fix 1308- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture" 1309- Weather widget now uses Sacramento as the default location on page load 1310- Geolocation is only requested when user **clicks** on the weather icon 1311- Click the weather icon to get your local weather (browser will prompt for permission) 1312- Weather icon shows tooltip "Click for local weather" and has pointer cursor 1313 1314## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR 1315 1316### Bug Fix 1317- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error 1318- Root cause: MutationObserver tried to observe `document.body` before DOM was ready 1319- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer 1320 1321## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING 1322 1323### Bug Fix 1324- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors 1325- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js` 1326- Changed `addAssets()` to load `calendar-main.js` directly 1327- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism 1328 1329## Version 6.6.1 (2026-02-11) - SECURITY FIXES 1330 1331### Security 1332- **Critical:** Removed `eval()` remote code execution vulnerability in config import 1333- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint 1334- **High:** Added CSRF token verification to all write operations (save, delete, toggle) 1335- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions 1336- **High:** Added admin privilege verification to AJAX admin routes 1337 1338### Improved 1339- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB) 1340- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format 1341- **Input Validation:** Recurrence type whitelist, title/description length limits 1342- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default) 1343- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling 1344- **Timezone:** Sync script now uses configured timezone instead of hardcoded value 1345 1346### Code Quality 1347- Documented intentional switch fallthrough in `get_system_stats.php` 1348- Standardized error response format 1349 1350## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS 1351 1352### Fixed 1353- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`) 1354- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents 1355- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure 1356 1357### UI Change 1358- **Namespace Explorer:** Cleanup status message now appears prominently at top of section 1359- Previously status message was at bottom, easy to miss after cleanup operations 1360 1361## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON 1362 1363### Bug Fix 1364- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action" 1365- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method 1366- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper 1367- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php` 1368 1369### UI Change 1370- Moved " Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar 1371- Status messages still appear below the namespace explorer 1372 1373## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS 1374 1375### Bug Fix 1376- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely 1377- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string 1378- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'` 1379- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time 1380- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors 1381 1382## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR 1383 1384### Bug Fix 1385- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation 1386- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code 1387 1388## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES 1389 1390### New Feature 1391- " Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section 1392- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog 1393- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace 1394- Removes parent namespace directories if they become empty after calendar folder removal 1395- Root calendar directory is never removed 1396- AJAX-powered with inline status showing results after cleanup 1397- Page auto-reloads after 2 seconds to refresh the namespace explorer view 1398- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()` 1399 1400## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE 1401 1402### Improved 1403- "Trim All Past" button now does a dry-run count before showing the confirmation dialog 1404- Confirmation shows exact count: "Found 47 past recurring events to remove" 1405- If zero found, shows "No past recurring events found to remove" instead of confirm 1406- PHP handler supports `dry_run` parameter that counts without deleting 1407 1408## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS 1409 1410### Bulk Action 1411- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header 1412- Removes ALL past occurrences (before today) from EVERY recurring series in one click 1413- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched 1414- Confirmation dialog required before execution 1415- AJAX-powered with inline status showing count removed, then auto-rescans the table 1416- Searches all calendar directories recursively 1417 1418## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES 1419 1420### Bug Fix 1421- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field 1422- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives 1423- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively 1424- Events matched by title AND namespace field (case-insensitive) for precise targeting 1425- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2 1426- New `findCalendarDirs()` helper method for recursive directory discovery 1427 1428## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG 1429 1430### Bug Fix 1431- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals 1432- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation 1433- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts 1434 1435## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS 1436 1437### New "Manage" Button per Series 1438- Orange "Manage" button opens a comprehensive management dialog for each recurring series 1439 1440### Extend Series 1441- Add N new occurrences after the last event in the series 1442- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly 1443- New events copy title, time, color, namespace, and recurring flag from the last event 1444 1445### Trim Past Events 1446- Remove all occurrences before a selected cutoff date 1447- Confirmation required before deletion 1448- Cleans up empty date keys and files automatically 1449 1450### Change Pattern 1451- Respace future occurrences with a new interval 1452- Past events are untouched; only future events are removed and re-created 1453- First future event becomes the anchor date 1454 1455### Change Start Date 1456- Shift ALL occurrences by the difference between old and new start date 1457- Events are removed from old positions and re-created at new positions 1458- Preserves spacing between all events 1459 1460### Pause/Resume 1461- Pause: adds ⏸ prefix and paused flag to all future occurrences 1462- Resume: removes ⏸ prefix and paused flag from all occurrences 1463- Button toggles based on whether series is currently paused 1464 1465### Infrastructure 1466- New shared `recurringAction()` JS helper for all AJAX management operations 1467- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series 1468- Status messages shown inline in the management dialog 1469- Close button triggers automatic rescan to refresh the table 1470 1471## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC 1472 1473### Rescan Button 1474- Green " Rescan" button added to the Recurring Events section header 1475- AJAX-powered: rescans all calendar data and refreshes the table without page reload 1476- Shows count of found series briefly after scan completes 1477 1478### Improved Detection Logic 1479- Events with `recurring: true` flag are now detected first (grouped by `recurringId`) 1480- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated 1481- New "Source" column shows ️ Flagged (has recurring flag) vs Detected (pattern match) 1482- Median interval used for pattern detection instead of just first two dates (more robust) 1483- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals 1484- Empty/invalid titles and malformed date arrays are now skipped safely 1485- Dates are deduplicated before counting (prevents inflated counts from multi-day events) 1486- Nested namespace directories now scanned recursively 1487- Results sorted alphabetically by title 1488 1489## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL 1490 1491### Version History Viewer 1492- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme 1493- Changelog parser now handles `###` subsection headers (rendered as green bold labels) 1494- Plain `- ` bullet items now parsed and categorized under their subsection 1495- Previously only `- **Type:** description` format was recognized 1496 1497### Current Release Button 1498- Green "Current Release" button added between nav arrows 1499- Jumps directly to the card matching the running version from plugin.info.txt 1500- Running version card shows green "RUNNING" badge and thicker green border 1501 1502## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND 1503 1504### Fix 1505- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`) 1506- Previously used `--cell-bg` which appeared unthemed/white 1507 1508## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND 1509 1510### Fix 1511- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header` 1512 1513## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL) 1514 1515### Wiki Theme Day Headers 1516- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers` 1517- Day header text uses `--text-primary` (template's `__text__` color) 1518 1519## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT 1520 1521### Fix 1522- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5) 1523- Subtle shadow instead of blue glow 1524 1525## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING 1526 1527### Fix 1528- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left` 1529- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch 1530- Both the bar and header now use `background`, so Dark Reader maps them identically 1531- Flex layout wrapper added for wiki theme sections 1532- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7` 1533 1534## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT) 1535 1536### Fix 1537- Simplified wiki section container — removed `wiki-section-container` class 1538- Added `background` from `$themeStyles['bg']` to section container 1539 1540## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS 1541 1542### Wiki Theme Buttons 1543- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text 1544- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons 1545 1546### Wiki Theme Section Headers 1547- Today: `__link__` background (accent/link color) 1548- Tomorrow: `__background_alt__` background (alternate background) 1549- Important: `__border__` background (border color) 1550- Each section now has a distinct color from the template palette 1551 1552## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX 1553 1554### Fix 1555- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand 1556- Properly overrides the base rule which uses `border` shorthand 1557- Hover state also uses full shorthand 1558 1559## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR 1560 1561### Fix 1562- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border 1563- Checked state fills with border color 1564- Hover state uses border color 1565- Applied to calendar, sidebar, and eventlist containers 1566 1567## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS 1568 1569### Fix 1570- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color` 1571- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers 1572- Clicked-day panel header and section border-left also unlocked for wiki theme 1573- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection 1574 1575## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES 1576 1577### Wiki Theme Color Remapping 1578- `border` (accent color) now maps to template's `__border__` instead of `__link__` 1579- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable 1580- `text_bright` still maps to `__link__` for link text and accent text 1581- Section headers all use the same `__border__` color for consistent appearance 1582- Updated COLOR_SCHEME mapping documentation 1583 1584## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR 1585 1586### Fix 1587- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white 1588- Clicked-day panel header text also uses template text color for wiki theme 1589- Professional theme remains white text on blue headers 1590 1591## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST 1592 1593### Bug Fix 1594- Added `$renderer->nocache()` to the render function 1595- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited 1596- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt` 1597 1598## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING 1599 1600### {{eventlist}} Theme Support 1601- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection 1602- Dark themes get themed border + glow, light themes get subtle border 1603- Container background set from `$themeStyles['bg']` with `!important` 1604 1605### Eventlist CSS Theme Rules (all 3 dark themes) 1606- Title, header, time, date, body, links, strong, code, namespace badge, empty state 1607- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important` 1608- Item borders, section backgrounds, code block backgrounds 1609- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar 1610 1611## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING 1612 1613### Dark Reader Browser Extension Compatibility 1614All 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. 1615 1616**Protected elements:** 1617- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color 1618- Clicked-day panel header — background, text color, close button 1619- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color 1620- Event titles, meta, descriptions — color with !important via CSS 1621- Day numbers, nav buttons, calendar day headers — color with !important via CSS 1622- System status bars — inline background !important on tracks and fills 1623- System tooltips — background, border-color, text color all set via setProperty with !important 1624- Section left border bars — border-left with !important 1625- Event color indicator bars — border-left-color with !important 1626- Sidebar section event text (Purple and Pink themes) 1627 1628### Complete CSS Variable Audit (41 conversions in v6.1.1) 1629- All remaining hardcoded colors in style.css converted to CSS variable references 1630- Calendar borders, text colors, backgrounds, input focus shadows, accent borders 1631- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks) 1632 1633### Semantic Color System 1634- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light` 1635- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light` 1636- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget) 1637- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded 1638 1639### Section Headers Fully Themed 1640- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple 1641- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink 1642- Professional: blue shades, Wiki: template-derived colors 1643- Dark theme headers use dark background color for text contrast 1644 1645### Pink Theme Enhancements 1646- **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 1647- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click 1648- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow 1649 1650### All Theme Checkbox Theming 1651- Matrix: bright green border + green glow, Purple: purple border + purple glow 1652- Pink: hot pink border + pink glow (with enhanced ambient effect) 1653- Hover scales 1.1x with intensified glow on all themes 1654- Checked state fills with theme accent color + outer glow 1655 1656### System Tooltips Themed 1657- Both tooltip functions use theme-derived colors from `$themeStyles` 1658- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary` 1659- Background from `$themeStyles['bg']`, divider borders use theme accent colors 1660- All properties set with `style.setProperty(prop, value, "important")` 1661 1662### Namespace Filter Badge Cleanup 1663- Removed inline namespace badge from event side panel header 1664- Filter indicator bar ("Filtering: namespace ✕") retained and working 1665- AJAX-based namespace filtering fully functional via onclick handlers 1666 1667## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES 1668 1669### Today Indicator 1670- **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) 1671- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main` 1672- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default 1673 1674### Button Hover/Click Theming 1675- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes 1676- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect 1677- **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 1678- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes 1679 1680### Checkboxes Themed 1681- **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 1682- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring 1683 1684### Form Input Text 1685- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes 1686- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim` 1687 1688## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING 1689 1690### Form Input Text Fix 1691- **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)`. 1692- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas 1693 1694### Button & Cell Hover Theming 1695- **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` 1696- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change 1697- **Added:** Active (click) state for nav/today buttons with scale-down feedback 1698- **Improved:** Month picker hover now also shows a subtle theme shadow 1699 1700### Glow Reduced to 1px for Matrix/Purple 1701- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates 1702- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px 1703- Weather text glow reduced to 1px, clock to 2px 1704- Pink remains at 2px (barely noticeable) 1705 1706## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN 1707 1708### Links Themed 1709- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright` 1710- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors 1711- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars 1712- **Fixed:** Simple event list body links/strong/code all themed 1713 1714### Text Glow Consistency 1715- **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 1716- **Added:** Subtle link glow on dark themes 1717- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles 1718 1719### Pink Glow Toned Down 1720- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25` 1721- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px 1722- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px 1723- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px 1724- **Reduced:** Today hover glow from 10px+15px to 5px+8px 1725- **Reduced:** Event item glow from 2px/5px to 1px/3px 1726- **Reduced:** Calendar container glow from 8px to 5px 1727 1728### Other 1729- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars 1730 1731## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING 1732 1733- **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 1734- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple 1735- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent 1736- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars) 1737- **Fixed:** Conflict tooltip body items use themed text and border colors 1738- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel) 1739- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background 1740- **Fixed:** Inline search input border uses `--border-color` 1741- **Fixed:** Event list header border uses `--border-color` 1742 1743## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING 1744 1745- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary` 1746- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright` 1747- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars 1748- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg` 1749- **Fixed:** Scrollbar track/thumb colors now use theme vars 1750- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed 1751- **Fixed:** Panel standalone month picker hover and namespace badge — themed 1752- **Fixed:** Calendar header border-bottom — now uses `--border-color` 1753 1754## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL 1755 1756- **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). 1757- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors 1758- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars 1759- **Themed:** Panel standalone header background and border 1760 1761## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING 1762 1763- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables 1764- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors 1765- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed 1766- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks 1767- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars 1768- **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. 1769 1770## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 1771 1772- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 1773- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 1774- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 1775- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 1776 1777## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 1778 1779- **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. 1780 1781## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 1782 1783- **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()` 1784- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 1785- **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. 1786 1787 1788## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 1789 1790- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 1791- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 1792- **Audited:** style.css (3,218 lines) — balanced braces confirmed 1793- **Audited:** All admin manage tab action handlers verified functional (13 actions) 1794- **New:** Fresh README.md for GitHub with complete documentation 1795- **Includes all v5.5.x fixes:** 1796 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 1797 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 1798 - Conflict badges on past events after AJAX navigation 1799 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 1800 1801## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 1802 1803- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 1804- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 1805- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 1806- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 1807- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 1808- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 1809- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 1810- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 1811- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 1812- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 1813- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 1814- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 1815- **Removed:** Stale "NEW!" comment from Events Manager section 1816 1817## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 1818 1819- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 1820- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 1821- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 1822- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 1823- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 1824- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 1825- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 1826- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 1827- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 1828- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 1829 1830## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 1831 1832- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 1833- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 1834- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 1835- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 1836- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 1837- **Changed:** Week grid JS theme colors now use actual $themeStyles values 1838 1839## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 1840 1841- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 1842 1843## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 1844 1845- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 1846- **Fixed:** Week grid conflict tooltips also fixed (same issue) 1847- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 1848- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 1849 1850## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 1851 1852- **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) 1853 1854## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 1855 1856- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 1857- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 1858 1859## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 1860 1861- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 1862- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 1863- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 1864- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 1865 1866## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 1867 1868- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 1869- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 1870- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 1871- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 1872- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 1873- **Added:** ESC key now also closes day popups and conflict tooltips 1874- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 1875 1876## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 1877 1878- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 1879- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 1880- **Refactored:** style.css is now the single source of truth for all visual styling 1881- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 1882- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 1883- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 1884- **Added:** CSS variable injection for {{eventlist panel}} containers 1885- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 1886- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 1887- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 1888- **Added:** Detailed CSS variable reference table in style.css header comment 1889- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 1890- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 1891- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 1892- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 1893- **Removed:** $isWikiTheme branching from PHP render path 1894 1895## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 1896 1897### Added: Hearts in Explosions! 1898- **Added:** 8-12 pink hearts in each click explosion 1899- **Added:** Random sizes (12-28px) and directions 1900- **Result:** Extra love in every click! 1901 1902### Fixed: Background CSS Property for Dark Mode Readers 1903- **Fixed:** Added `background: transparent` to CSS (was completely removed) 1904- **Fixed:** Now CSS readers can detect and modify background property 1905- **Why:** Inline styles override transparent, but CSS readers can now see the property 1906- **Result:** Dark mode plugins can now change calendar backgrounds! 1907 1908### The CSS Problem 1909 1910**Why backgrounds weren't changing with dark mode readers**: 1911 1912**Before (v5.3.5)**: 1913```css 1914.calendar-compact-grid tbody td { 1915 /* background removed - set via inline style */ 1916 border: 1px solid... 1917} 1918``` 1919 1920**Problem**: CSS property doesn't exist! 1921- Dark mode readers look for `background` property in CSS 1922- Can't override what doesn't exist 1923- Inline styles work, but readers can't modify them 1924 1925**After (v5.3.6)**: 1926```css 1927.calendar-compact-grid tbody td { 1928 background: transparent; /* Now exists! */ 1929 border: 1px solid... 1930} 1931``` 1932 1933**Solution**: 1934- Property exists in CSS 1935- Dark mode readers can override it 1936- Inline styles still override transparent 1937- Everyone wins! 1938 1939### What's Fixed 1940 1941**Elements now have background property**: 1942- `.calendar-compact-grid tbody td` ✓ 1943- `.calendar-compact-grid tbody td:hover` ✓ 1944- `.event-compact-item` ✓ 1945- `.event-compact-item:hover` ✓ 1946 1947**How it works**: 19481. CSS sets `background: transparent` (default) 19492. Inline styles set actual color (overrides transparent) 19503. Dark mode readers can override CSS property 19514. Works for everyone! 1952 1953### Hearts in Explosion 1954 1955**Click anywhere → Hearts explode!** 1956 1957**Heart details**: 1958- Count: 8-12 per explosion (random) 1959- Size: 12-28px (random variety) 1960- Emoji: (pink heart) 1961- Direction: Random 360° 1962- Speed: 60-140px travel 1963- Duration: 0.8-1.2s 1964- z-index: 9999999 (always visible) 1965 1966**Combined with**: 1967- 25 glowing particles 1968- 40 pixel sparkles 1969- Bright flash 1970- **Total: 73-77 elements!** 1971 1972### Visual Result 1973 1974**Click explosion**: 1975``` 1976 ✦ • ✦ 1977 • • 1978✦ • ! • ✦ 1979 • • 1980 ✦ • ✦ 1981 1982Hearts + Particles + Pixels! 1983``` 1984 1985**Dark mode now works**: 1986```css 1987/* Dark mode reader can now do this: */ 1988.calendar-compact-grid tbody td { 1989 background: #000 !important; /* Works! */ 1990} 1991``` 1992 1993### Why Transparent Works 1994 1995**CSS Cascade**: 19961. CSS: `background: transparent` (lowest priority) 19972. Inline style: `background: #f5f5f5` (overrides CSS) 19983. Dark mode CSS: `background: #000 !important` (overrides inline) 1999 2000**Perfect solution!** ✓ 2001 2002## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 2003 2004### Fixed: Particles Now Appear Above All Dialogs! 2005- **Fixed:** Increased z-index to 9999999 for all particles 2006- **Fixed:** Particles now visible above event dialogs, month picker, etc. 2007- **Result:** Cursor effects and explosions always visible! 2008 2009### The Z-Index Problem 2010 2011**Before (v5.3.4)**: 2012- Particles: z-index 9999 2013- Dialogs: z-index 10000-999999 2014- **Particles hidden behind dialogs!** 2015 2016**After (v5.3.5)**: 2017- Particles: z-index 9999999 2018- Trail: z-index 9999998 2019- Pixels: z-index 9999997 2020- **Particles ALWAYS on top!** 2021 2022### What's Fixed 2023 2024✅ **Main particles** (explosion orbs) 2025✅ **Cursor trail** (glowing dots) 2026✅ **Pixel sparkles** (tiny bright stars) 2027✅ **Flash effect** (click burst) 2028 2029**All now appear above**: 2030- Event dialog popups 2031- Month picker 2032- Day popups 2033- Any modal overlays 2034 2035### Visual Result 2036 2037**Moving cursor over dialog**: 2038``` 2039┌─────────────────────┐ 2040│ Event Dialog │ 2041│ ✦ • ✦ │ ← Sparkles visible! 2042│ → ✦ │ ← Cursor trail visible! 2043│ • ✦ • │ 2044└─────────────────────┘ 2045``` 2046 2047**Clicking on dialog**: 2048``` 2049┌─────────────────────┐ 2050│ ✦ • ✦ • ✦ │ 2051│ • ! • │ ← Explosion visible! 2052│ ✦ • ✦ • ✦ │ 2053└─────────────────────┘ 2054``` 2055 2056**Perfect visibility everywhere!** ✨ 2057 2058## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 2059 2060### Fixed: Month Picker Now Themed! 2061- **Fixed:** Jump to Month dialog now uses theme colors 2062- **Fixed:** Dialog background, borders, text all themed 2063- **Fixed:** Select dropdowns use theme colors 2064- **Fixed:** Buttons use theme accent colors 2065- **Result:** Month picker matches calendar theme! 2066 2067### Fixed: Cursor Effects Work in Dialogs! 2068- **Fixed:** Cursor trail now works when hovering over dialogs 2069- **Fixed:** Click explosions work when clicking inside dialogs 2070- **Technical:** Changed to capture phase event listeners 2071- **Result:** Effects work EVERYWHERE now! 2072 2073### Month Picker Theming 2074 2075**Before (v5.3.3)**: 2076- White background (hardcoded) 2077- Black text (hardcoded) 2078- No theme integration 2079- Looked out of place 2080 2081**After (v5.3.4)**: 2082- Dialog background: `theme.bg` 2083- Dialog border: `theme.border` 2084- Text color: `theme.text_primary` 2085- Dropdowns: `theme.cell_bg` + `theme.text_primary` 2086- Cancel button: `theme.cell_bg` 2087- Go button: `theme.border` (accent color) 2088 2089**Fully integrated!** ✅ 2090 2091--- 2092 2093### Theme Examples 2094 2095**Matrix Theme**: 2096``` 2097┌─────────────────────────┐ 2098│ Jump to Month │ ← Dark bg, green border 2099│ [February ▼] [2026 ▼] │ ← Dark dropdowns 2100│ [Cancel] [Go] │ ← Green "Go" button 2101└─────────────────────────┘ 2102``` 2103 2104**Pink Theme**: 2105``` 2106┌─────────────────────────┐ 2107│ Jump to Month │ ← Dark bg, pink border 2108│ [February ▼] [2026 ▼] │ ← Dark dropdowns 2109│ [Cancel] [Go] │ ← Pink "Go" button 2110└─────────────────────────┘ 2111With sparkle effects! ✨ 2112``` 2113 2114**Professional Theme**: 2115``` 2116┌─────────────────────────┐ 2117│ Jump to Month │ ← Clean bg, blue border 2118│ [February ▼] [2026 ▼] │ ← Clean dropdowns 2119│ [Cancel] [Go] │ ← Blue "Go" button 2120└─────────────────────────┘ 2121``` 2122 2123--- 2124 2125### Dialog Cursor Fix 2126 2127**The Problem**: 2128Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 2129 2130**The Solution**: 2131Use **capture phase** event listeners: 2132```javascript 2133// Before (bubbling phase) 2134document.addEventListener('click', handler) 2135 2136// After (capture phase) 2137document.addEventListener('click', handler, true) 2138 ↑ 2139 Capture phase! 2140``` 2141 2142**Capture phase runs BEFORE stopPropagation!** 2143 2144--- 2145 2146### Now Works Everywhere 2147 2148✅ **Calendar area** 2149✅ **Event dialogs** 2150✅ **Month picker dialog** 2151✅ **Day popup dialogs** 2152✅ **Anywhere on screen** 2153 2154**No more blocked effects!** 2155 2156--- 2157 2158### Technical Details 2159 2160**Event phases**: 2161``` 21621. Capture phase ← We listen here now! 21632. Target phase 21643. Bubbling phase ← stopPropagation blocks this 2165``` 2166 2167**By using capture phase**: 2168- Events caught before stopPropagation 2169- Works in all dialogs 2170- No conflicts with dialog logic 2171 2172--- 2173 2174### All Dialogs Checked 2175 2176✅ **Month picker** - Now themed! 2177✅ **Event dialog** - Already themed 2178✅ **Day popup** - Already themed 2179 2180**Everything consistent!** 2181 2182--- 2183 2184## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 2185 2186### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 2187- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 2188- **Added:** 40 pixel sparkles in click explosions 2189- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 2190- **Result:** Maximum sparkle effect! 2191 2192### Tiny Pixel Sparkles 2193 2194**3-6 tiny bright pixels appear with each cursor movement!** 2195 2196**Characteristics**: 2197- Size: 1-2px (single pixel appearance!) 2198- Colors: Bright neon whites and pinks 2199 - Pure white (#fff) - 40% chance 2200 - Hot pink (#ff1493) 2201 - Pink (#ff69b4) 2202 - Light pink (#ffb6c1) 2203 - Soft pink (#ff85c1) 2204- Glow: Triple-layer shadow (intense!) 2205- Spawn: Random 30px radius around cursor 2206- Animations: 2207 - 50% twinkle in place 2208 - 50% float upward 2209 2210**Creates a cloud of sparkles around your cursor!** 2211 2212--- 2213 2214### Click Explosion Enhanced 2215 2216**Now with 40 EXTRA pixel sparkles!** 2217 2218**Click anywhere → BIG BOOM**: 2219- 25 main glowing particles (6-10px) 2220- **40 tiny pixel sparkles (1-2px)** ← NEW! 2221- Bright white flash 2222- Total: 65+ visual elements! 2223 2224**Pixel sparkles in explosion**: 2225- Shoot outward in all directions 2226- Random distances (30-110px) 2227- Multiple bright colors 2228- Some twinkle, some explode 2229- Creates stellar effect! 2230 2231--- 2232 2233### Entire Screen Coverage 2234 2235**Effects now work EVERYWHERE!** 2236 2237**Before (v5.3.2)**: 2238- Only inside calendar viewport 2239- Limited to calendar area 2240 2241**After (v5.3.3)**: 2242- Works on entire screen! ✓ 2243- Cursor trail follows everywhere 2244- Click explosions anywhere 2245- Used `position: fixed` + `clientX/Y` 2246 2247**Move anywhere on the page for sparkles!** 2248 2249--- 2250 2251### Visual Effect 2252 2253**Cursor movement**: 2254``` 2255 • ✦ • ← Tiny pixels 2256 • ✦ • ← Glowing trail 2257✦ • → • ✦ ← Cursor 2258 • ✦ • ← Mixed sizes 2259 • ✦ • ← Sparkle cloud 2260``` 2261 2262**Click explosion**: 2263``` 2264 ✦ • ✦ • ✦ 2265 ✦ • • ✦ 2266✦ • ! • ✦ 2267 ✦ • • ✦ 2268 ✦ • ✦ • ✦ 2269 227065+ particles total! 2271``` 2272 2273--- 2274 2275### Sparkle Details 2276 2277**Trail Pixels** (3-6 per movement): 2278- Size: 1-2px 2279- Spawn rate: Every 40ms 2280- Spread: 30px radius 2281- Duration: 0.6-0.8s 2282- 50% twinkle, 50% float 2283 2284**Explosion Pixels** (40 total): 2285- Size: 1-3px 2286- Spread: 30-110px radius 2287- Duration: 0.4-0.8s 2288- All directions 2289- Intense glow 2290 2291**Main Particles** (25 total): 2292- Size: 4-10px 2293- Spread: 50-150px 2294- Full color palette 2295- Original firework effect 2296 2297--- 2298 2299### Color Distribution 2300 2301**Pixel sparkles favor white**: 2302- 40% pure white (#fff) - brightest! 2303- 60% pink shades - variety 2304 2305**Creates brilliant sparkle effect!** 2306 2307--- 2308 2309### Performance 2310 2311**Still optimized**: 2312- Trail: 30ms throttle 2313- Pixels: 40ms throttle 2314- Auto-cleanup 2315- Hardware accelerated 2316- Smooth 60fps 2317 2318**Lots of sparkles, zero lag!** 2319 2320--- 2321 2322### Full-Screen Magic 2323 2324**Pink theme calendar detected**: 2325```javascript 2326if (pink calendar exists) { 2327 Enable effects for ENTIRE SCREEN 2328 Not just calendar area 2329} 2330``` 2331 2332**Works everywhere on page!** ✨ 2333 2334--- 2335 2336## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 2337 2338### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 2339- **Removed:** Emoji sparkle images (✨) 2340- **Added:** Glowing pink particle trail following cursor 2341- **Added:** FIREWORKS explosion on click! 2342- **Result:** Beautiful glowing effects, not emoji! 2343 2344### Glowing Cursor Trail 2345 2346**Pink glowing dots follow your cursor!** 2347- Small glowing pink orbs (8px) 2348- Radial gradient glow effect 2349- Multiple box-shadows for depth 2350- Fade out smoothly (0.5s) 2351- Throttled to 30ms for smoothness 2352 2353``` 2354 • • 2355 • → • ← Your cursor 2356 • • 2357``` 2358 2359**Not emoji - actual glowing particles!** 2360 2361--- 2362 2363### Click Fireworks! 2364 2365**Click anywhere on the calendar → BOOM!** 2366 2367**20 pink particles explode outward!** 2368- Radial burst pattern (360° coverage) 2369- Random speeds (50-150px travel) 2370- 4 shades of pink: 2371 - Hot pink (#ff1493) 2372 - Pink (#ff69b4) 2373 - Light pink (#ff85c1) 2374 - Very light pink (#ffc0cb) 2375- Random sizes (4-10px) 2376- Individual glowing halos 2377- Smooth explosion animation 2378 2379**Plus a bright flash at click point!** 2380- 30px radius glow 2381- Intense pink flash 2382- Fades quickly (0.3s) 2383 2384--- 2385 2386### Visual Effect 2387 2388**Cursor movement**: 2389``` 2390 • 2391 • • • 2392 • → • ← Glowing trail 2393 • • • 2394 • 2395``` 2396 2397**Click explosion**: 2398``` 2399 • • • 2400 • • 2401 • BOOM! • ← 20 particles 2402 • • 2403 • • • 2404``` 2405 2406**All particles glow with pink halos!** 2407 2408--- 2409 2410### Particle Details 2411 2412**Trail Particles**: 2413- Size: 8x8px 2414- Color: Pink radial gradient 2415- Shadow: 10px + 20px glow layers 2416- Duration: 0.5s fade 2417- Rate: 30ms throttle 2418 2419**Explosion Particles**: 2420- Size: 4-10px (random) 2421- Colors: 4 pink shades (random) 2422- Shadow: 10px + 20px glow (matches color) 2423- Duration: 0.6-1.0s (random) 2424- Pattern: Perfect circle burst 2425 2426**Flash Effect**: 2427- Size: 30x30px 2428- Color: Bright hot pink 2429- Shadow: 30px + 50px mega-glow 2430- Duration: 0.3s instant fade 2431 2432--- 2433 2434### Performance 2435 2436**Optimized for smoothness**: 2437- Trail throttled to 30ms 2438- Auto-cleanup after animations 2439- CSS hardware acceleration 2440- No memory leaks 2441- Smooth 60fps 2442 2443**Won't slow you down!** 2444 2445--- 2446 2447### Comparison 2448 2449**Before (v5.3.1)**: 2450- ✨ Emoji sparkle images 2451- Static unicode characters 2452- Limited visual impact 2453 2454**After (v5.3.2)**: 2455- Glowing pink particles 2456- Radial gradients + shadows 2457- Beautiful firework explosions 2458- Much more impressive! 2459 2460--- 2461 2462### Only Pink Theme 2463 2464**These effects only appear**: 2465- On `.calendar-theme-pink` elements 2466- Other themes unaffected 2467- Pure pink magic! 2468 2469--- 2470 2471## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 2472 2473### ✨ Added: MySpace-Style Sparkle Trail! 2474- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 2475- **Toned down:** Reduced glow effects for better taste 2476- **Added:** Sparkles appear on cell hover 2477- **Added:** Sparkles on event hover (left and right sides!) 2478- **Added:** Sparkles on today's cell corners 2479- **Added:** Sparkles on navigation buttons 2480- **Added:** Sparkles in calendar header 2481- **Result:** Pure nostalgic MySpace magic! ✨ 2482 2483### MySpace Sparkle Cursor Trail 2484 2485**The classic effect from 2006!** 2486- Sparkles follow your cursor as you move 2487- Random sizes (12-22px) 2488- Random slight offsets for natural feel 2489- Float up and fade out animation 2490- Throttled to 50ms (smooth, not laggy) 2491- Only on pink theme calendars 2492 2493``` 2494 ✨ 2495 ✨ ✨ 2496✨ → ✨ (cursor trail) 2497 ✨ ✨ 2498 ✨ 2499``` 2500 2501**Pure nostalgia!** 2502 2503--- 2504 2505### Sparkles Everywhere 2506 2507**Calendar cells**: 2508- Hover over any day → ✨ floats up 2509- Smooth 1.5s animation 2510- Centered sparkle 2511 2512**Event items**: 2513- Hover → ✨ on left side 2514- Hover → ✨ on right side 2515- Staggered animations (0.4s delay) 2516- Continuous twinkling 2517 2518**Today's cell**: 2519- ✨ in top-right corner (continuous) 2520- ✨ in bottom-left corner (offset timing) 2521- Always sparkling! 2522 2523**Navigation buttons**: 2524- Hover on < or > → ✨ appears top-right 2525- One-time float animation 2526 2527**Calendar header**: 2528- ✨ on left side (continuous) 2529- ✨ on right side (offset 1s) 2530- Always twinkling 2531 2532--- 2533 2534### Toned Down Glows 2535 2536**Before (v5.3.0)**: TOO MUCH GLOW! 2537- 50px shadows 2538- 4-layer effects 2539- Overwhelming 2540 2541**After (v5.3.1)**: Just right! 2542- 8-15px max shadows (subtle) 2543- 2-layer effects 2544- Professional with personality 2545 2546**Glow reductions**: 2547- Today shimmer: 35px → 12px 2548- Today hover: 50px → 15px 2549- Event glow: 18px → 6px 2550- Badge pulse: 25px → 8px 2551- Container glow: 20px → 8px 2552 2553**Much more tasteful!** 2554 2555--- 2556 2557### Sparkle Animations 2558 2559**sparkle-twinkle** (0.8s): 2560``` 2561Opacity: 0 → 1 → 1 → 0 2562Scale: 0 → 1 → 1 → 0 2563Rotation: 0° → 180° → 360° 2564``` 2565 2566**sparkle-float** (1.5s): 2567``` 2568Moves up: 0px → -50px 2569Opacity: 0 → 1 → 1 → 0 2570Scale: 0 → 1 → 0.8 → 0 2571``` 2572 2573**Pure MySpace magic!** ✨ 2574 2575--- 2576 2577### Where Sparkles Appear 2578 2579✅ **Cursor trail** (continuous while moving) 2580✅ **Calendar cells** (on hover) 2581✅ **Event items** (on hover, left + right) 2582✅ **Today's cell** (continuous, corners) 2583✅ **Navigation buttons** (on hover) 2584✅ **Calendar header** (continuous, sides) 2585 2586**Sparkles EVERYWHERE!** ✨✨✨ 2587 2588--- 2589 2590### Performance 2591 2592**Cursor trail**: 2593- Throttled to 50ms 2594- Auto-cleanup after 1s 2595- No memory leaks 2596- Smooth 60fps 2597 2598**CSS animations**: 2599- Hardware accelerated 2600- No JavaScript overhead (except cursor) 2601- Efficient transforms 2602 2603**Won't slow down your browser!** 2604 2605--- 2606 2607### Pure Nostalgia 2608 2609**Remember MySpace profiles?** 2610- Glitter graphics ✨ 2611- Sparkle cursors ✨ 2612- Auto-play music (ok, we didn't add that) 2613- Animated GIF backgrounds 2614- Comic Sans everywhere 2615 2616**We brought back the sparkles!** ✨ 2617 2618--- 2619 2620### Theme Comparison 2621 2622**Other themes**: Professional and clean 2623**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 2624 2625**Only pink theme gets the magic!** 2626 2627--- 2628 2629## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 2630 2631### Added: Pink Theme Gets BLING! 2632- **Added:** Shimmering animation for today's cell 2633- **Added:** Sparkling text effect on today's date 2634- **Added:** Glowing pulse for event bars 2635- **Added:** Gradient shimmer on headers 2636- **Added:** Extra glow on hover effects 2637- **Added:** Pulsing urgent badge for past due items 2638- **Result:** Pink theme is now FABULOUS! ✨ 2639 2640### Shimmer Effects 2641 2642**Today's Cell**: 2643- Continuous shimmer animation (2 second loop) 2644- Multi-layer glow effect 2645- Pink and hot pink overlapping shadows 2646- Pulses from subtle to intense 2647- Extra sparkle on hover 2648 2649**Today's Date Number**: 2650- Sparkle animation (1.5 second loop) 2651- Text shadow glow effect 2652- Slight scale pulse (100% → 105%) 2653- Pink to hot pink shadow transition 2654 2655### Glow Effects 2656 2657**Event Bars**: 2658- Continuous glow pulse (2 second loop) 2659- Uses event's own color 2660- Adds pink accent glow layer 2661- Creates depth and dimension 2662 2663**Event Items**: 2664- Subtle base glow 2665- Enhanced glow on hover 2666- Slight slide animation on hover 2667- Professional yet playful 2668 2669### Gradient Shimmer 2670 2671**Headers**: 2672- Animated gradient background 2673- 3-color pink gradient flow 2674- Smooth 3-second animation 2675- Creates movement and life 2676- Applies to calendar header and event list header 2677 2678### Badge Effects 2679 2680**TODAY Badge**: 2681- Sparkle animation 2682- Synchronized with today's date 2683- Extra prominence 2684 2685**PAST DUE Badge**: 2686- Urgent pulsing effect (1 second loop) 2687- Orange glow intensifies 2688- Draws attention to urgent items 2689- Faster pulse for urgency 2690 2691### Container Bling 2692 2693**Main Container**: 2694- Multi-layer pink glow 2695- Soft outer shadow 2696- Creates floating effect 2697- Subtle but elegant 2698 2699### Animation Details 2700 2701**pink-shimmer** (2s loop): 2702``` 2703Start: Subtle 5px glow 2704Peak: Intense 35px multi-layer glow 2705End: Back to subtle 2706``` 2707 2708**pink-sparkle** (1.5s loop): 2709``` 2710Start: Base glow + scale 1.0 2711Peak: Intense glow + scale 1.05 2712End: Back to base 2713``` 2714 2715**pink-glow-pulse** (2s loop): 2716``` 2717Start: Small glow (3px, 6px) 2718Peak: Large glow (6px, 12px, 18px) 2719End: Back to small 2720``` 2721 2722**pink-gradient-shimmer** (3s loop): 2723``` 2724Gradient flows across element 2725Creates wave effect 2726Smooth continuous motion 2727``` 2728 2729**pink-pulse-urgent** (1s loop - faster!): 2730``` 2731Start: Orange glow 5px 2732Peak: Orange glow 25px (intense) 2733End: Back to 5px 2734``` 2735 2736### Visual Experience 2737 2738**Today's Cell**: 2739``` 2740┌──┬──┬──┬──┬──┬──┬──┐ 2741│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 2742│ │ │[9]│ │ │ │ │ ← Sparkles 2743│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 2744└──┴──┴──┴──┴──┴──┴──┘ 2745``` 2746 2747**Event Bars**: 2748``` 2749━━━━━━━ ← Glows and pulses 2750━━━━━━━ ← Each bar animated 2751━━━━━━━ ← Creates rhythm 2752``` 2753 2754**Headers**: 2755``` 2756╔═════════════════════╗ 2757║ ~~~~~~~~~~ ║ ← Gradient flows 2758║ February 2026 ║ ← Shimmer effect 2759╚═════════════════════╝ 2760``` 2761 2762### Theme Comparison 2763 2764**Before (v5.2.8)**: 2765- Pink colors 2766- Static elements 2767- Standard shadows 2768 2769**After (v5.3.0)**: 2770- Pink colors ✓ 2771- Animated shimmer ✨ 2772- Sparkling effects 2773- Glowing pulses ✨ 2774- Moving gradients 2775- BLING! 2776 2777### Performance 2778 2779**All animations**: 2780- Hardware accelerated (transform, opacity) 2781- Smooth 60fps 2782- CSS animations (no JavaScript) 2783- Minimal CPU usage 2784- Disabled in reduced-motion preference 2785 2786### Only for Pink Theme 2787 2788**Effects only apply when**: 2789```css 2790.calendar-theme-pink 2791``` 2792 2793**Other themes unaffected**: 2794- Matrix stays Matrix 2795- Professional stays Professional 2796- Purple stays Purple 2797- Wiki stays clean 2798 2799**Pink gets all the bling!** ✨ 2800 2801### Use Cases 2802 2803**Perfect for**: 2804- Celebrating occasions 2805- Fun team calendars 2806- Personal style expression 2807- Standing out 2808- Making calendar time fabulous 2809 2810**Not just pink, but BLING pink!** ✨ 2811 2812## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 2813 2814### Fixed: Today's Date Box Now Uses Theme Colors 2815- **Fixed:** Today's day number box now uses theme border color 2816- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 2817- **Result:** Today box matches the theme perfectly! 2818 2819### The Issue 2820 2821Today's date had a hardcoded green box: 2822 2823**In style.css**: 2824```css 2825.cal-today .day-num { 2826 background: #008800; /* Hardcoded green! */ 2827 color: white; 2828} 2829``` 2830 2831**Didn't adapt to themes at all!** 2832 2833### The Fix 2834 2835**Now uses theme colors**: 2836```php 2837// Today's day number 2838if ($isToday) { 2839 background: $themeStyles['border'], // Theme's accent color! 2840 color: (professional theme) ? white : bg color 2841} 2842``` 2843 2844### Theme Examples 2845 2846**Matrix Theme**: 2847- Box background: `#00cc07` (matrix green) 2848- Text color: `#242424` (dark background) 2849 2850**Purple Theme**: 2851- Box background: `#9b59b6` (purple) 2852- Text color: `#2a2030` (dark background) 2853 2854**Professional Theme**: 2855- Box background: `#4a90e2` (blue) 2856- Text color: `#ffffff` (white text) 2857 2858**Pink Theme**: 2859- Box background: `#ff1493` (hot pink) 2860- Text color: `#1a0d14` (dark background) 2861 2862**Wiki Theme**: 2863- Box background: Template's `__border__` color 2864- Text color: Template's `__background_site__` color 2865 2866### Visual Result 2867 2868**Matrix Theme**: 2869``` 2870┌──┬──┬──┬──┬──┬──┬──┐ 2871│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2872└──┴──┴──┴──┴──┴──┴──┘ 2873 ↑ 2874 Green box (#00cc07) 2875``` 2876 2877**Professional Theme**: 2878``` 2879┌──┬──┬──┬──┬──┬──┬──┐ 2880│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2881└──┴──┴──┴──┴──┴──┴──┘ 2882 ↑ 2883 Blue box (#4a90e2) 2884``` 2885 2886**Wiki Theme**: 2887``` 2888┌──┬──┬──┬──┬──┬──┬──┐ 2889│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 2890└──┴──┴──┴──┴──┴──┴──┘ 2891 ↑ 2892 Template border color 2893``` 2894 2895### Implementation 2896 2897**Inline styles added**: 2898- Background uses `$themeStyles['border']` (theme accent) 2899- Text color uses `$themeStyles['bg']` for contrast 2900- Special case: Professional theme uses white text 2901- All with `!important` to override CSS 2902 2903**CSS cleaned up**: 2904- Removed hardcoded `#008800` background 2905- Removed hardcoded `white` color 2906- Kept structural styles (border-radius, font-weight) 2907 2908### Benefits 2909 2910**Theme Consistency**: 2911- Today box matches theme accent color 2912- Proper contrast with background 2913- Professional appearance 2914 2915**Automatic Adaptation**: 2916- Works with all themes 2917- Works with custom wiki template colors 2918- No manual adjustment needed 2919 2920**Visual Harmony**: 2921- Border color used throughout theme 2922- Today box reinforces theme identity 2923- Consistent design language 2924 2925## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 2926 2927### Fixed: Table Grid Background Now Matches Cells 2928- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 2929- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 2930- **Result:** Table background no longer shows through cells! 2931 2932### The Layer Problem 2933 2934The table itself had a DIFFERENT background color than its cells! 2935 2936**Before (v5.2.6)**: 2937```php 2938'grid_bg' => __background_alt__, // Table background (#e8e8e8) 2939'cell_bg' => __background_site__, // Cell background (#f5f5f5) 2940``` 2941 2942**The table background was showing THROUGH the cells!** 2943 2944### Why This Happened 2945 2946**Visual layers**: 2947``` 2948Table Element 2949├─ background: __background_alt__ (#e8e8e8) ← Different! 2950└─ Cells 2951 └─ background: __background_site__ (#f5f5f5) ← Different! 2952 2953The table background shows through any gaps! 2954``` 2955 2956### The Fix 2957 2958**After (v5.2.7)**: 2959```php 2960'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 2961'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 2962``` 2963 2964**NOW THEY MATCH!** 2965 2966### Where grid_bg Is Used 2967 2968The table element itself: 2969```html 2970<table style="background: __background_alt__"> ← Was showing through! 2971 <tbody> 2972 <tr> 2973 <td style="background: __background_site__">1</td> 2974 </tr> 2975 </tbody> 2976</table> 2977``` 2978 2979Even with cell inline styles, the TABLE background shows through! 2980 2981### All Background Sources Now Unified 2982 2983**Everything now uses __background_site__**: 2984- `bg` → __background_site__ ✓ 2985- `header_bg` → __background_site__ ✓ 2986- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 2987- `cell_bg` → __background_site__ ✓ 2988 2989**Perfect consistency!** 2990 2991### Why It Was Different 2992 2993**Originally the grid was meant to show borders**: 2994- `grid_bg` was `__background_alt__` (slightly different) 2995- Created visual separation between cells 2996- But with transparent/thin cells, it showed through! 2997 2998**Now unified for consistency!** 2999 3000### Visual Result 3001 3002**Before (layers visible)**: 3003``` 3004┌─────────────────┐ 3005│ Grid (#e8e8e8) │ ← Showing through! 3006│ ┌──┬──┬──┐ │ 3007│ │ │ │ │ │ ← Cells (#f5f5f5) 3008│ └──┴──┴──┘ │ 3009└─────────────────┘ 3010``` 3011 3012**After (unified)**: 3013``` 3014┌─────────────────┐ 3015│ Grid (#f5f5f5) │ ← Same color! 3016│ ┌──┬──┬──┐ │ 3017│ │ │ │ │ │ ← Cells (#f5f5f5) 3018│ └──┴──┴──┘ │ 3019└─────────────────┘ 3020Perfect match! 3021``` 3022 3023### Complete Background Mapping 3024 3025**All using __background_site__ now**: 3026- Main container background 3027- Left panel background 3028- Right panel background 3029- Eventlist background 3030- Calendar grid background ← JUST FIXED 3031- Calendar cell backgrounds 3032- Event item backgrounds 3033- Clock header background 3034- Search input background 3035- Past events toggle 3036 3037**EVERYTHING UNIFIED!** 3038 3039## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 3040 3041### Fixed: Removed Container Backgrounds Showing Through 3042- **Found:** `.calendar-compact-container` had `background: #ffffff;` 3043- **Found:** `.calendar-compact-left` had `background: #fafafa;` 3044- **Found:** `.calendar-compact-right` had `background: #ffffff;` 3045- **Found:** `.event-search-input-inline` had `background: white;` 3046- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 3047- **Result:** Container backgrounds no longer show through cells! 3048 3049### The Container Problem 3050 3051The parent containers had hardcoded backgrounds that were showing through! 3052 3053**Container backgrounds (lines 4-91)**: 3054```css 3055.calendar-compact-container { 3056 background: #ffffff; /* ← Main container! */ 3057} 3058 3059.calendar-compact-left { 3060 background: #fafafa; /* ← Left panel (calendar side)! */ 3061} 3062 3063.calendar-compact-right { 3064 background: #ffffff; /* ← Right panel (events side)! */ 3065} 3066``` 3067 3068**These were showing through the cells and events!** 3069 3070### Why Containers Matter 3071 3072Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 3073 3074``` 3075Container (#fafafa) ← Showing through! 3076 └─ Table Cell (#f5f5f5) ← Transparent areas 3077 └─ Content 3078``` 3079 3080### All Backgrounds Removed 3081 3082**v5.2.6 removes**: 3083- `.calendar-compact-container` background 3084- `.calendar-compact-left` background 3085- `.calendar-compact-right` background 3086- `.event-search-input-inline` background 3087- `.past-events-toggle` background & hover 3088 3089**v5.2.5 removed**: 3090- `.calendar-compact-grid tbody td` background 3091- `.calendar-compact-grid thead th` background 3092 3093**v5.2.4 removed**: 3094- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 3095 3096**v5.2.3 removed**: 3097- `.event-compact-item` background 3098 3099**ALL container and element backgrounds eliminated!** 3100 3101### What Should Work Now 3102 3103**Calendar cells**: No container background showing through ✓ 3104**Event items**: No container background showing through ✓ 3105**Search bar**: Uses template color ✓ 3106**Past events toggle**: Uses template color ✓ 3107 3108### Complete List of Fixes 3109 3110**Containers**: 3111- Main container ✓ 3112- Left panel ✓ 3113- Right panel ✓ 3114 3115**Elements**: 3116- Table cells ✓ 3117- Event items ✓ 3118- Search input ✓ 3119- Past events toggle ✓ 3120 3121**EVERYTHING removed!** 3122 3123### Critical: Clear Caches 3124 3125**Must clear caches or won't work**: 31261. Hard refresh: Ctrl+Shift+R (5 times!) 31272. Clear DokuWiki cache 31283. Close browser completely 31294. Reopen and test 3130 3131**CSS caching is EXTREMELY persistent!** 3132 3133## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 3134 3135### Fixed: Removed Hardcoded Backgrounds from Table Cells 3136- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 3137- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 3138- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 3139- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 3140- **Result:** Calendar table cells finally use template colors! 3141 3142### The REAL Culprits 3143 3144The generic table CSS was overriding everything! 3145 3146**In style.css (lines 307-356)**: 3147```css 3148.calendar-compact-grid thead th { 3149 background: #f8f8f8; /* ← Header cells hardcoded! */ 3150} 3151 3152.calendar-compact-grid tbody td { 3153 background: #ffffff; /* ← ALL table cells hardcoded! */ 3154} 3155 3156.calendar-compact-grid tbody td:hover { 3157 background: #f0f7ff; /* ← Hover state hardcoded! */ 3158} 3159``` 3160 3161**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 3162 3163### Why This Was the Last One 3164 3165**CSS Specificity Order**: 31661. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 31672. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 31683. Inline styles (should win but didn't) 3169 3170**We removed the specific ones (v5.2.4), but the generic one was still there!** 3171 3172### What We've Removed 3173 3174**v5.2.3**: 3175- `.event-compact-item` background 3176- `.event-compact-item:hover` background 3177 3178**v5.2.4**: 3179- `.cal-empty` background & hover 3180- `.cal-today` background & hover 3181- `.cal-has-events` background & hover 3182 3183**v5.2.5 (FINAL)**: 3184- `.calendar-compact-grid tbody td` background ✓ 3185- `.calendar-compact-grid tbody td:hover` background ✓ 3186- `.calendar-compact-grid thead th` background ✓ 3187 3188**All CSS background overrides ELIMINATED!** 3189 3190### Why It Took 5 Versions 3191 3192**CSS had layers of hardcoded backgrounds**: 3193 3194``` 3195Layer 1: Table cells (.calendar-compact-grid tbody td) 3196 ↓ Overrode inline styles 3197Layer 2: Cell states (.cal-today, .cal-empty, etc.) 3198 ↓ Overrode table cells 3199Layer 3: Event items (.event-compact-item) 3200 ↓ Overrode inline styles 3201 3202ALL had to be removed! 3203``` 3204 3205**We kept finding more specific CSS, but the base table CSS was there all along!** 3206 3207### Visual Result 3208 3209**NOW everything matches**: 3210``` 3211Calendar Table: 3212┌──┬──┬──┬──┬──┬──┬──┐ 3213│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 3214├──┼──┼──┼──┼──┼──┼──┤ 3215│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 3216├──┼──┼──┼──┼──┼──┼──┤ 3217│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 3218└──┴──┴──┴──┴──┴──┴──┘ 3219 3220Sidebar Events: 3221┌────────────────────────┐ 3222│ Event │ ← __background_site__ 3223│ Event │ ← __background_site__ 3224└────────────────────────┘ 3225 3226FINALLY ALL MATCHING! ✓ 3227``` 3228 3229### Complete List of Removed CSS 3230 3231**ALL hardcoded backgrounds removed**: 3232- `.event-compact-item` background 3233- `.event-compact-item:hover` background 3234- `.cal-empty` background & hover 3235- `.cal-today` background & hover 3236- `.cal-has-events` background & hover 3237- `.calendar-compact-grid tbody td` background ← NEW 3238- `.calendar-compact-grid tbody td:hover` background ← NEW 3239- `.calendar-compact-grid thead th` background ← NEW 3240 3241**Every single CSS background override is GONE!** 3242 3243### Testing Steps 3244 3245**After installing v5.2.5**: 3246 32471. **Clear browser cache**: Ctrl+Shift+R (3 times!) 32482. **Clear DokuWiki cache**: Click the button 32493. **Close browser completely**: Restart it 32504. **Visit page**: Should finally see matching backgrounds 3251 3252**CSS is EXTREMELY sticky - may need to clear multiple times!** 3253 3254### This Should Be It 3255 3256**No more CSS overrides exist** (we've checked the entire file): 3257- Table cells ✓ Fixed 3258- Cell states ✓ Fixed 3259- Event items ✓ Fixed 3260- Headers ✓ Fixed 3261- Hover states ✓ Fixed 3262 3263**All backgrounds now come from inline styles using template colors!** 3264 3265## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 3266 3267### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 3268- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 3269- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 3270- **Result:** Calendar cells now use template colors! 3271 3272### The Second Culprit 3273 3274MORE hardcoded backgrounds in the CSS file! 3275 3276**In style.css (lines 359-382)**: 3277```css 3278.cal-empty { 3279 background: #fafafa !important; /* ← Overriding inline styles! */ 3280} 3281 3282.cal-today { 3283 background: #e8f5e9 !important; /* ← Overriding today cell! */ 3284} 3285 3286.cal-today:hover { 3287 background: #c8e6c9 !important; /* ← Overriding hover! */ 3288} 3289 3290.cal-has-events { 3291 background: #fffbf0; /* ← Overriding event cells! */ 3292} 3293 3294.cal-has-events:hover { 3295 background: #fff4d9; /* ← Overriding hover! */ 3296} 3297``` 3298 3299**These were ALL overriding the inline styles!** 3300 3301### The Fix 3302 3303**Removed all hardcoded backgrounds**: 3304```css 3305.cal-empty { 3306 /* background removed - inline style handles this */ 3307 cursor: default !important; 3308} 3309 3310.cal-today { 3311 /* background removed - inline style handles this */ 3312} 3313 3314.cal-has-events { 3315 /* background removed - inline style handles this */ 3316} 3317 3318/* Hover states also removed */ 3319``` 3320 3321### What Was Overridden 3322 3323**v5.2.3 fixed**: 3324- Event items in sidebar ✓ 3325 3326**v5.2.4 fixes**: 3327- Calendar day cells ✓ 3328- Today cell ✓ 3329- Empty cells ✓ 3330- Cells with events ✓ 3331- All hover states ✓ 3332 3333### Why This Kept Happening 3334 3335**CSS had hardcoded backgrounds everywhere**: 33361. Event items: `#ffffff` (fixed in v5.2.3) 33372. Calendar cells: Multiple colors (fixed in v5.2.4) 33383. **All with `!important` flags!** 3339 3340**The inline styles couldn't override them!** 3341 3342### Visual Result 3343 3344**Now ALL backgrounds match**: 3345``` 3346Calendar Grid: 3347┌──┬──┬──┬──┬──┬──┬──┐ 3348│ │ │ │ │ │ │ │ ← All use __background_site__ 3349├──┼──┼──┼──┼──┼──┼──┤ 3350│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 3351├──┼──┼──┼──┼──┼──┼──┤ 3352│ │ │ │ │ │ │ │ ← All match template 3353└──┴──┴──┴──┴──┴──┴──┘ 3354 3355Sidebar Events: 3356┌────────────────────────┐ 3357│ Event │ ← Uses __background_site__ 3358│ Event │ ← Uses __background_site__ 3359└────────────────────────┘ 3360 3361Perfect consistency! 3362``` 3363 3364### CSS Removed 3365 3366**Calendar cells**: 3367- `.cal-empty` background 3368- `.cal-empty:hover` background 3369- `.cal-today` background 3370- `.cal-today:hover` background 3371- `.cal-has-events` background 3372- `.cal-has-events:hover` background 3373 3374**All gone!** ✓ 3375 3376### Important: Clear Caches Again! 3377 3378After installing v5.2.4: 3379 33801. **Hard refresh browser**: Ctrl+Shift+R (twice!) 33812. **Clear DokuWiki cache**: Admin → Clear Cache 33823. **May need to restart browser**: To clear CSS cache 3383 3384**Old CSS is VERY sticky!** 3385 3386### Why It Took So Long 3387 3388**Multiple CSS overrides**: 3389- Event items (v5.2.3) ✓ Fixed 3390- Calendar cells (v5.2.4) ✓ Fixed 3391- Each with different classes 3392- Each with `!important` 3393- Hidden throughout CSS file 3394 3395**Found them all now!** 3396 3397## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 3398 3399### Fixed: Removed Hardcoded Backgrounds from CSS 3400- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 3401- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 3402- **Result:** Event backgrounds now properly use template colors! 3403 3404### The Root Cause 3405 3406The CSS file was overriding the inline styles with hardcoded white backgrounds! 3407 3408**In style.css (lines 599-616)**: 3409```css 3410.event-compact-item { 3411 background: #ffffff; /* ← This was overriding inline styles! */ 3412} 3413 3414.event-compact-item:hover { 3415 background: #f8f9fa; /* ← And this on hover! */ 3416} 3417``` 3418 3419**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 3420 3421### The Fix 3422 3423**Removed hardcoded backgrounds from CSS**: 3424```css 3425.event-compact-item { 3426 /* background removed - set via inline style with template colors */ 3427 display: flex; 3428 /* ... other styles ... */ 3429} 3430 3431.event-compact-item:hover { 3432 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 3433 /* background removed - inline style handles this */ 3434} 3435``` 3436 3437### Why This Was So Difficult to Find 3438 3439**CSS Specificity & Cascade**: 34401. Inline styles with `!important` should win 34412. But CSS that comes after can still apply 34423. The hardcoded `background: #ffffff` was silently overriding 34434. All the PHP code was correct - it was the CSS! 3444 3445**What We Were Doing**: 3446- ✓ Reading template colors correctly 3447- ✓ Setting `cell_bg` to `__background_site__` correctly 3448- ✓ Applying inline styles with `!important` correctly 3449- ✗ CSS file was overriding everything! 3450 3451### What Was Affected 3452 3453**Event items in**: 3454- Main calendar sidebar 3455- Standalone event list 3456- Sidebar widget 3457- All event displays 3458 3459**All had white backgrounds hardcoded in CSS!** 3460 3461### Now Working 3462 3463**Events use template colors**: 3464```html 3465<div class="event-compact-item" 3466 style="background: #f5f5f5 !important; ..."> 3467 ← Now this inline style actually works! 3468</div> 3469``` 3470 3471**No CSS override** ✓ 3472 3473### Testing 3474 3475To verify this works: 34761. Clear browser cache (important!) 34772. Clear DokuWiki cache 34783. Reload page 34794. Events should now match eventlist background 3480 3481**Browser caching can make old CSS persist!** 3482 3483### Visual Result 3484 3485**All backgrounds now matching**: 3486``` 3487┌────────────────────────────┐ 3488│ Eventlist (#f5f5f5) │ ← Template color 3489├────────────────────────────┤ 3490│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3491├────────────────────────────┤ 3492│ Event (#f5f5f5) │ ← Template color (was #ffffff) 3493└────────────────────────────┘ 3494 3495Perfect match! 3496``` 3497 3498### Why Everything Else Worked 3499 3500**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 3501- They only had inline styles ✓ 3502- Inline styles worked correctly ✓ 3503- Only event items had the CSS override ✗ 3504 3505### Important Notes 3506 3507**Clear caches**: 3508- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 3509- DokuWiki cache (Admin → Clear Cache) 3510- Old CSS may be cached! 3511 3512**This was the culprit all along!** 3513 3514## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 3515 3516### Fixed: Clock Area Now Matches Event Cells 3517- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 3518- **Result:** Clock/Today header matches event cell backgrounds! 3519 3520### The Issue 3521 3522The clock area (Today header) was using a different background: 3523 3524**Before (v5.2.1)**: 3525```php 3526'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 3527'cell_bg' => __background_site__, // Event cells (#f5f5f5) 3528``` 3529 3530**After (v5.2.2)**: 3531```php 3532'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 3533'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 3534``` 3535 3536### What's the Clock Area? 3537 3538The clock/Today header in the sidebar: 3539``` 3540┌────────────────────────────┐ 3541│ 3:45:23 PM │ ← Clock area (header_bg) 3542│ ️ --° | Sun, Feb 9, 2026 │ 3543└────────────────────────────┘ 3544``` 3545 3546### All Backgrounds Now Unified 3547 3548**Everything now uses __background_site__**: 3549- Eventlist background ✓ 3550- Calendar cells ✓ 3551- Event items ✓ 3552- Clock/Today header ✓ 3553- Sidebar widget ✓ 3554- All backgrounds match! ✓ 3555 3556### Visual Result 3557 3558**Complete consistency**: 3559``` 3560┌────────────────────────────┐ 3561│ 3:45:23 PM │ ← Same background 3562│ ️ --° | Sun, Feb 9, 2026 │ 3563├────────────────────────────┤ 3564│ Meeting at 2pm │ ← Same background 3565│ Description... │ 3566├────────────────────────────┤ 3567│ Another event │ ← Same background 3568│ More details... │ 3569└────────────────────────────┘ 3570 3571All using __background_site__ (#f5f5f5) 3572``` 3573 3574**Perfect visual harmony!** 3575 3576## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 3577 3578### Fixed: Calendar Cells Now Match Eventlist Background 3579- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 3580- **Result:** Calendar cells now match the eventlist background perfectly! 3581 3582### The Real Issue 3583 3584The eventlist was showing the CORRECT background color all along! 3585 3586**Eventlist was using**: 3587- `bg` → `__background_site__` ✓ (This was correct!) 3588 3589**Calendar cells were using**: 3590- `cell_bg` → `__background__` ✗ (This was wrong!) 3591 3592**They didn't match!** 3593 3594### The Correct Fix 3595 3596**Now everything uses __background_site__**: 3597```php 3598'bg' => __background_site__, // Eventlist (was already correct) 3599'cell_bg' => __background_site__, // Cells (now fixed to match) 3600``` 3601 3602### Why __background_site__? 3603 3604The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 3605 3606``` 3607Page Layout: 3608┌────────────────────────────────────┐ 3609│ __background_site__ (page bg) │ ← This is where calendar lives 3610│ │ 3611│ ┌──────────────────────────────┐ │ 3612│ │ __background__ (content bg) │ │ ← Wiki article content 3613│ │ │ │ 3614│ └──────────────────────────────┘ │ 3615│ │ 3616└────────────────────────────────────┘ 3617``` 3618 3619**Calendar should match the page background, not the content background!** 3620 3621### Template Example 3622 3623Typical DokuWiki template: 3624```ini 3625__background_site__ = "#f5f5f5" (Light gray - page background) 3626__background__ = "#ffffff" (White - content area) 3627``` 3628 3629**Before (v5.2.0)**: 3630- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3631- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 3632 3633**After (v5.2.1)**: 3634- Eventlist: `#f5f5f5` (light gray) ✓ Correct 3635- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 3636 3637### All Backgrounds Now Unified 3638 3639**Everything now uses __background_site__**: 3640- Eventlist sidebar background ✓ 3641- Main calendar background ✓ 3642- Calendar day cells ✓ 3643- Sidebar widget ✓ 3644- Event items ✓ 3645- Input fields ✓ 3646- Buttons ✓ 3647 3648**All perfectly matched to the page background!** 3649 3650### Why Version 5.2.0 Was Wrong 3651 3652I 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. 3653 3654**The eventlist knew what it was doing all along!** The cells just needed to catch up. 3655 3656## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 3657**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 3658 3659### Fixed: All Backgrounds Now Use __background__ 3660- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 3661- **Fixed:** Eventlist, calendar cells, and sidebar all match now 3662- **Result:** Completely unified background throughout! 3663 3664### The Issue 3665 3666Different parts of the calendar were using different background sources: 3667 3668**Before (v5.1.9)**: 3669```php 3670'bg' => __background_site__ // Eventlist background (outer page) 3671'cell_bg' => __background__ // Cell backgrounds (content area) 3672``` 3673 3674**These are different colors!** 3675- `__background_site__` = Outer page wrapper (often gray) 3676- `__background__` = Main content area (often white) 3677 3678### The Fix 3679 3680**After (v5.2.0)**: 3681```php 3682'bg' => __background__ // Eventlist background ✓ 3683'cell_bg' => __background__ // Cell backgrounds ✓ 3684``` 3685 3686**Both use the same source!** 3687 3688### What Uses 'bg' 3689 3690The `bg` color is used for: 3691- Eventlist sidebar background 3692- Main calendar container 3693- Sidebar widget background 3694- Form backgrounds 3695- Event dialogs 3696 3697### What Uses 'cell_bg' 3698 3699The `cell_bg` color is used for: 3700- Calendar day cells 3701- Event item backgrounds 3702- Input field backgrounds 3703- Button backgrounds 3704 3705### Why This Matters 3706 3707**Template color hierarchy**: 3708``` 3709__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 3710__background__ → Main content area (e.g., #ffffff white) 3711__background_alt__ → Sections/headers 3712__background_neu__ → Highlights 3713``` 3714 3715**We want all calendar backgrounds to match the main content area!** 3716 3717### Visual Comparison 3718 3719**Before (v5.1.9)**: Mismatched backgrounds 3720``` 3721┌────────────────────────────────┐ 3722│ Eventlist (gray #f5f5f5) │ ← __background_site__ 3723└────────────────────────────────┘ 3724 3725┌────────────────────────────────┐ 3726│ Calendar │ 3727│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3728│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3729│ └──┴──┴──┴──┴──┴──┴──┘ │ 3730└────────────────────────────────┘ 3731Different colors - looks inconsistent 3732``` 3733 3734**After (v5.2.0)**: Unified backgrounds 3735``` 3736┌────────────────────────────────┐ 3737│ Eventlist (white #fff) │ ← __background__ 3738└────────────────────────────────┘ 3739 3740┌────────────────────────────────┐ 3741│ Calendar │ 3742│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 3743│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 3744│ └──┴──┴──┴──┴──┴──┴──┘ │ 3745└────────────────────────────────┘ 3746Same color - perfectly consistent! 3747``` 3748 3749### Template Examples 3750 3751**Light Template**: 3752```ini 3753__background_site__ = "#f5f5f5" (light gray) 3754__background__ = "#ffffff" (white) 3755``` 3756 3757**Before**: Eventlist gray, cells white 3758**After**: Eventlist white, cells white ✓ 3759 3760**Dark Template**: 3761```ini 3762__background_site__ = "#1a1a1a" (very dark) 3763__background__ = "#2d2d2d" (dark) 3764``` 3765 3766**Before**: Eventlist very dark, cells dark 3767**After**: Eventlist dark, cells dark ✓ 3768 3769### Benefits 3770 3771**Visual Consistency**: 3772- All backgrounds match 3773- Clean, unified appearance 3774- Professional look 3775 3776**Correct Template Integration**: 3777- Uses content area color (not page wrapper) 3778- Matches wiki content area 3779- Proper color hierarchy 3780 3781**Works Everywhere**: 3782- Light templates ✓ 3783- Dark templates ✓ 3784- Custom templates ✓ 3785 3786### All Backgrounds Unified 3787 3788**Now using __background__**: 3789- Eventlist background ✓ 3790- Calendar cells ✓ 3791- Sidebar widget ✓ 3792- Event items ✓ 3793- Input fields ✓ 3794- Buttons ✓ 3795- Dialogs ✓ 3796 3797**Perfect harmony throughout!** 3798 3799## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 3800 3801### Fixed: Wiki Theme Event Backgrounds Not Showing 3802- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 3803- **Fixed:** Replaced CSS variables with actual hex colors 3804- **Result:** Event backgrounds now show correctly with template colors! 3805 3806### The Problem 3807 3808CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 3809 3810**Before (broken)**: 3811```php 3812'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 3813``` 3814 3815**After (fixed)**: 3816```php 3817'cell_bg' => '#fff', // Actual hex color works! 3818``` 3819 3820### What Was Affected 3821 3822**When style.ini read successfully**: 3823- ✅ Worked fine (uses actual hex colors from file) 3824 3825**When style.ini fallback used**: 3826- ❌ Events had no background 3827- ❌ CSS variables don't work in inline styles 3828- ❌ Looked broken 3829 3830### The Fix 3831 3832**Wiki theme fallback now uses real colors**: 3833```php 3834'wiki' => [ 3835 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 3836 'border' => '#ccc', // Real hex (was: var(--__border__)) 3837 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 3838 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 3839 'text_primary' => '#333', // Real hex (was: var(--__text__)) 3840 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 3841 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 3842 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 3843 // ... all colors now use real hex values 3844] 3845``` 3846 3847### Why CSS Variables Don't Work 3848 3849**CSS variables work**: 3850```css 3851.some-class { 3852 background: var(--__background__, #fff); /* ✓ Works in CSS */ 3853} 3854``` 3855 3856**CSS variables DON'T work**: 3857```html 3858<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 3859``` 3860 3861### How It Works Now 3862 3863**Priority system**: 38641. **Try reading style.ini** → Use actual template hex colors ✓ 38652. **If file not found** → Use fallback hex colors ✓ 38663. **Never use CSS variables in inline styles** ✓ 3867 3868**Both paths now work correctly!** 3869 3870### Visual Result 3871 3872**Events now have proper backgrounds**: 3873``` 3874┌──────────────────────────┐ 3875│ Meeting at 2pm │ ← White background (#fff) 3876│ Description here... │ 3877│ [✏️ Edit] [️ Delete] │ 3878└──────────────────────────┘ 3879 3880Not: 3881┌──────────────────────────┐ 3882│ Meeting at 2pm │ ← No background (broken) 3883│ Description here... │ 3884└──────────────────────────┘ 3885``` 3886 3887### Affected Areas 3888 3889**All event displays**: 3890- Main calendar events ✓ 3891- Sidebar widget events ✓ 3892- Event list items ✓ 3893- Event backgrounds ✓ 3894- Button backgrounds ✓ 3895- Input field backgrounds ✓ 3896 3897**Everything uses real colors now!** 3898 3899## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 3900 3901### Reorganized: Better Update Tab Layout 3902- **Moved:** Current Version section to the top 3903- **Combined:** Upload and Important Notes side-by-side 3904- **Improved:** Space-efficient two-column layout 3905- **Result:** More information visible at once! 3906 3907### New Layout Order 3908 3909**Version 5.1.8**: 3910``` 39111. Current Version (at top - see what you have) 39122. Upload + Important Notes (side-by-side) 39133. Recent Changes (changelog) 39144. Backups 3915``` 3916 3917### Side-by-Side Design 3918 3919**Upload form (left 60%) + Important Notes (right 40%)**: 3920``` 3921┌──────────────────────────────────────────┐ 3922│ Current Version │ 3923│ Version: 5.1.8 │ 3924│ ✅ Permissions: OK │ 3925└──────────────────────────────────────────┘ 3926 3927┌─────────────────────┬────────────────────┐ 3928│ Upload New │ ⚠️ Important Notes │ 3929│ [Choose File] │ • Replaces files │ 3930│ ☑ Backup first │ • Config preserved │ 3931│ [Upload] [Clear] │ • Events safe │ 3932└─────────────────────┴────────────────────┘ 3933``` 3934 3935### Benefits 3936 3937**Current Version First**: 3938- See what you have immediately 3939- Check permissions at a glance 3940- Know if ready to update 3941 3942**Side-by-Side Layout**: 3943- Upload form and warnings together 3944- Read notes while choosing file 3945- More efficient use of space 3946- Less scrolling needed 3947 3948**Better Information Flow**: 39491. See current version ✓ 39502. Upload new version with notes visible ✓ 39513. Review recent changes ✓ 39524. Manage backups ✓ 3953 3954### Visual Comparison 3955 3956**Before (v5.1.7)**: 3957``` 3958Important Notes (full width) 3959↓ 3960Upload Form (full width) 3961↓ 3962Current Version 3963↓ 3964Recent Changes 3965↓ 3966Backups 3967``` 3968 3969**After (v5.1.8)**: 3970``` 3971Current Version (full width) 3972↓ 3973Upload (60%) | Notes (40%) 3974↓ 3975Recent Changes 3976↓ 3977Backups 3978``` 3979 3980**More compact, better organized!** 3981 3982### Responsive Design 3983 3984**Wide screens**: 3985- Upload and notes side-by-side 3986- Full 1200px width utilized 3987- Efficient space usage 3988 3989**Narrow screens**: 3990- Sections stack gracefully 3991- Flex layout adapts 3992- Still fully functional 3993 3994### Layout Details 3995 3996**Current Version Section**: 3997- Full width (1200px max) 3998- Shows version, author, description 3999- Permission status with icons 4000- Helpful fix commands if needed 4001 4002**Upload/Notes Section**: 4003- Flexbox layout with gap 4004- Upload: `flex:1` (grows) 4005- Notes: `flex:0 0 350px` (fixed 350px) 4006- Both have proper min-width 4007 4008**Recent Changes Section**: 4009- Full width (1200px max) 4010- Compact scrollable view 4011- Color-coded change types 4012- Last 10 versions shown 4013 4014**Backups Section**: 4015- Full width (1200px max) 4016- Manual backup button 4017- Scrollable file list 4018- All actions accessible 4019 4020### Improved Max Widths 4021 4022All sections now use `max-width:1200px` (previously 900px): 4023- Better use of wide screens 4024- Still responsive on narrow screens 4025- Consistent throughout tab 4026 4027## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 4028 4029### Fixed: Extra Closing Brace 4030- **Fixed:** ParseError on line 1936 (extra closing brace) 4031- **Result:** Manual backup feature now works correctly! 4032 4033### What Was Wrong 4034 4035Extra `}` after the backup section: 4036 4037**Before (broken)**: 4038```php 4039echo '</div>'; 4040} // ← Extra closing brace! 4041 4042echo '<script> 4043``` 4044 4045**After (fixed)**: 4046```php 4047echo '</div>'; 4048 4049echo '<script> 4050``` 4051 4052**Manual backup feature now fully functional!** ✅ 4053 4054## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 4055 4056### Added: Create Backup Manually Anytime 4057- **Added:** "Create Backup Now" button in Backups section 4058- **Added:** Manual backup action handler with full verification 4059- **Added:** Backups section always visible (even with no backups) 4060- **Added:** Success message showing file size and file count 4061- **Result:** Create backups anytime without needing to upload! 4062 4063### Manual Backup Button 4064 4065**New Layout**: 4066``` 4067┌─────────────────────────────────────┐ 4068│ Backups [ Create Backup Now] │ 4069├─────────────────────────────────────┤ 4070│ Backup File Size │ 4071│ calendar.backup.v5.1.6... 243 KB │ 4072│ [ Download] [✏️ Rename] [️ Delete] │ 4073└─────────────────────────────────────┘ 4074``` 4075 4076**Always visible - even with no backups**: 4077``` 4078┌─────────────────────────────────────┐ 4079│ Backups [ Create Backup Now] │ 4080├─────────────────────────────────────┤ 4081│ No backups yet. Click "Create │ 4082│ Backup Now" to create your first │ 4083│ backup. │ 4084└─────────────────────────────────────┘ 4085``` 4086 4087### How It Works 4088 4089**Click the button**: 40901. Confirm: "Create a backup of the current plugin version?" 40912. System creates backup ZIP 40923. Verifies: File count (30+ files) 40934. Verifies: File size (200KB+) 40945. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 4095 4096**Backup naming**: 4097``` 4098calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 4099 ^^^^^^ 4100 "manual" tag identifies manual backups 4101``` 4102 4103### Use Cases 4104 4105**Before updates**: 4106- Create safety backup before uploading new version 4107- Have multiple restore points 4108- Test new features with fallback 4109 4110**Regular backups**: 4111- Weekly/monthly backup schedule 4112- Before making configuration changes 4113- After important customizations 4114 4115**Development**: 4116- Backup before code experiments 4117- Save working states 4118- Quick rollback points 4119 4120### Full Verification 4121 4122**Same checks as automatic backups**: 4123- ✅ File count check (minimum 10, expected 30+) 4124- ✅ File size check (minimum 1KB, expected 200KB+) 4125- ✅ Existence check (file actually created) 4126- ✅ Automatic cleanup on failure 4127 4128**Success message includes**: 4129- Backup filename 4130- File size (human-readable) 4131- Number of files backed up 4132 4133### Example Messages 4134 4135**Success**: 4136``` 4137✓ Manual backup created successfully: 4138 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 4139 (243 KB, 31 files) 4140``` 4141 4142**Failure Examples**: 4143``` 4144❌ Plugin directory is not readable. 4145 Please check permissions. 4146 4147❌ Backup incomplete: Only 5 files were added (expected 30+). 4148 Backup failed. 4149 4150❌ Backup file is too small (342 bytes). 4151 Only 3 files were added. Backup failed. 4152``` 4153 4154### Benefits 4155 4156**On-Demand Safety**: 4157- Create backups anytime 4158- No need to upload new version 4159- Quick and easy 4160 4161**Peace of Mind**: 4162- Backup before risky changes 4163- Multiple restore points 4164- Safe experimentation 4165 4166**Professional Workflow**: 4167- Regular backup schedule 4168- Version snapshots 4169- Disaster recovery 4170 4171### Backup Section Improvements 4172 4173**Always Visible**: 4174- Section shows even with 0 backups 4175- Button always accessible 4176- Clear call-to-action 4177 4178**Better Header**: 4179- Title and button on same row 4180- Clean, professional layout 4181- Space-efficient design 4182 4183### Technical Details 4184 4185**New Action**: `create_manual_backup` 4186 4187**New Function**: `createManualBackup()` 4188- Gets current version 4189- Creates timestamped filename with "manual" tag 4190- Uses same verification as auto-backups 4191- Shows detailed success/error messages 4192 4193**File Naming Convention**: 4194``` 4195Automatic (on upload): 4196calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 4197 4198Manual (button click): 4199calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 4200 ^^^^^^^ 4201 Easy to identify! 4202``` 4203 4204### Permissions Required 4205 4206- **Read access**: Plugin directory 4207- **Write access**: Parent plugins directory 4208 4209**Same as automatic backups** - no additional permissions needed! 4210 4211## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 4212 4213### Enhanced: Backup Creation with Robust Verification 4214- **Added:** File count validation (must have 10+ files) 4215- **Added:** File size validation (must be 1KB+ minimum) 4216- **Added:** Return value from addDirectoryToZip (counts files added) 4217- **Added:** Detailed error messages showing file count 4218- **Added:** Automatic deletion of invalid/incomplete backups 4219- **Enhanced:** Exception handling with proper error propagation 4220- **Result:** Backups are now guaranteed to be complete or fail clearly! 4221 4222### What Changed 4223 4224**Before (v5.1.4)**: 4225```php 4226$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 4227$zip->close(); 4228// No verification - could create empty or partial backup 4229``` 4230 4231**After (v5.1.5)**: 4232```php 4233$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 4234$zip->close(); 4235 4236// Verify backup exists 4237if (!file_exists($backupPath)) { 4238 redirect('Backup file was not created'); 4239} 4240 4241// Verify backup has content 4242$backupSize = filesize($backupPath); 4243if ($backupSize < 1000) { 4244 unlink($backupPath); 4245 redirect('Backup too small: ' . $backupSize . ' bytes'); 4246} 4247 4248// Verify file count 4249if ($fileCount < 10) { 4250 unlink($backupPath); 4251 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 4252} 4253``` 4254 4255### Backup Validation Checks 4256 4257**Three-Layer Verification**: 4258 42591. **File Count Check**: 4260 - Minimum: 10 files required 4261 - Expected: 30+ files 4262 - Action: Delete backup if too few files 4263 42642. **Size Check**: 4265 - Minimum: 1KB (1000 bytes) 4266 - Expected: 200-250KB 4267 - Action: Delete backup if too small 4268 42693. **Existence Check**: 4270 - Verify file was actually created 4271 - Check ZIP archive is valid 4272 - Action: Error if file missing 4273 4274### Enhanced Error Reporting 4275 4276**Detailed Error Messages**: 4277``` 4278❌ "Backup file was not created" 4279❌ "Backup too small (342 bytes). Only 3 files added." 4280❌ "Only 5 files added (expected 30+). Backup aborted." 4281❌ "Too many errors adding files: Failed to add X, Y, Z..." 4282❌ "Directory does not exist: /path/to/dir" 4283❌ "Directory is not readable: /path/to/dir" 4284``` 4285 4286**Now you know exactly what went wrong!** 4287 4288### Improved addDirectoryToZip Function 4289 4290**Returns File Count**: 4291```php 4292private function addDirectoryToZip($zip, $dir, $zipPath = '') { 4293 $fileCount = 0; 4294 $errors = []; 4295 4296 // Validation 4297 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 4298 if (!is_readable($dir)) throw new Exception("Not readable"); 4299 4300 // Add files 4301 foreach ($files as $file) { 4302 if ($zip->addFile($filePath, $relativePath)) { 4303 $fileCount++; 4304 } else { 4305 $errors[] = "Failed to add: " . $filename; 4306 } 4307 } 4308 4309 // Check error threshold 4310 if (count($errors) > 5) { 4311 throw new Exception("Too many errors"); 4312 } 4313 4314 return $fileCount; // Returns count for verification! 4315} 4316``` 4317 4318### Safety Features 4319 4320**Invalid Backup Cleanup**: 4321- Failed backups are automatically deleted 4322- No partial/corrupt backups left behind 4323- Clean error state 4324 4325**Error Threshold**: 4326- Allow up to 5 minor file errors (logs warnings) 4327- More than 5 errors = complete failure 4328- Prevents partially corrupt backups 4329 4330**Directory Validation**: 4331- Check directory exists before processing 4332- Check directory is readable 4333- Fail fast with clear errors 4334 4335### Benefits 4336 4337**Guaranteed Complete Backups**: 4338- ✅ All files included or backup fails 4339- ✅ No silent failures 4340- ✅ Clear error messages 4341- ✅ Automatic cleanup 4342 4343**Better Debugging**: 4344- Know exactly how many files were added 4345- See specific errors for missing files 4346- Understand why backup failed 4347 4348**User Confidence**: 4349- Backup succeeds = complete backup 4350- Backup fails = clear error message 4351- No ambiguity 4352 4353### Example Scenarios 4354 4355**Scenario 1: Permission Issue** 4356``` 4357User uploads new version 4358System starts backup 4359Error: "Directory is not readable: /lib/plugins/calendar/" 4360Backup fails before creating file 4361User sees clear error message 4362``` 4363 4364**Scenario 2: Partial Backup** 4365``` 4366User uploads new version 4367System creates backup 4368Only 5 files added (disk issue?) 4369Size: 450 bytes 4370Verification fails 4371Incomplete backup deleted 4372Error: "Only 5 files added (expected 30+)" 4373``` 4374 4375**Scenario 3: Success** 4376``` 4377User uploads new version 4378System creates backup 437931 files added 4380Size: 240KB 4381All verifications pass ✅ 4382Update proceeds 4383``` 4384 4385### Testing Recommendations 4386 4387After installing v5.1.5: 43881. Upload a new version with backup enabled 43892. Check for success message 43903. Verify backup file exists in /lib/plugins/ 43914. Check backup file size (should be ~240KB) 43925. If backup fails, read error message carefully 4393 4394**Your backups are now bulletproof!** 4395 4396## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 4397 4398### ✅ Verified: Backup System Working Correctly 4399- **Verified:** addDirectoryToZip function includes all files recursively 4400- **Verified:** Backups contain all 31+ files from calendar directory 4401- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 4402- **Info:** Backup sizes grow slightly with each version (more code = more features!) 4403- **Result:** Backup system is working perfectly! 4404 4405### Backup System Details 4406 4407**What Gets Backed Up**: 4408- All PHP files (syntax.php, admin.php, action.php, etc.) 4409- All JavaScript files (calendar-main.js, script.js) 4410- All documentation (CHANGELOG.md, README.md, all guides) 4411- All configuration (sync_config.php) 4412- All language files 4413- All assets and resources 4414- **Everything in the calendar/ directory!** 4415 4416**Backup Size Analysis**: 4417``` 4418Version 5.0.4: 233KB (normal) 4419Version 5.0.5: 234KB (normal) 4420Version 5.0.6: 235KB (normal) 4421Version 5.0.7: 236KB (normal) 4422Version 5.0.8: 237KB (normal) 4423Version 5.0.9: 237KB (normal) 4424Version 5.1.0: 238KB (normal) 4425Version 5.1.1: 238KB (normal) 4426Version 5.1.2: 240KB (normal - added AJAX features) 4427Version 5.1.3: 240KB (normal) 4428``` 4429 4430**Why Sizes Grow**: 4431- More features = more code 4432- Longer CHANGELOG 4433- Additional documentation 4434- New functionality 4435- **This is expected and normal!** 4436 4437**Compression Ratio**: 4438``` 4439Uncompressed: ~1.0 MB (source files) 4440Compressed: ~240 KB (ZIP archive) 4441Ratio: ~24% (excellent compression!) 4442``` 4443 4444### Backup File Contents 4445 4446**31 Files Included**: 4447``` 4448admin.php (216KB - main admin interface) 4449syntax.php (173KB - calendar rendering) 4450calendar-main.js (102KB - JavaScript functionality) 4451CHANGELOG.md (268KB - complete version history) 4452style.css (57KB - all styling) 4453action.php (38KB - DokuWiki actions) 4454sync_outlook.php (32KB - Outlook integration) 4455+ 24 other files (docs, configs, helpers) 4456``` 4457 4458**All files successfully included!** ✅ 4459 4460### How Backups Work 4461 4462**Creation Process**: 44631. User uploads new plugin version 44642. Checkbox "Create backup first" (checked by default) 44653. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 44664. Backup saved to: `/lib/plugins/` directory 44675. Then proceeds with update 4468 4469**Backup Function**: 4470```php 4471private function addDirectoryToZip($zip, $dir, $zipPath = '') { 4472 $files = new RecursiveIteratorIterator( 4473 new RecursiveDirectoryIterator($dir), 4474 RecursiveIteratorIterator::LEAVES_ONLY 4475 ); 4476 foreach ($files as $file) { 4477 if (!$file->isDir()) { 4478 $zip->addFile($filePath, $relativePath); 4479 } 4480 } 4481} 4482``` 4483 4484**Recursive = Gets Everything!** ✅ 4485 4486### Verification Results 4487 4488**Test Results**: 4489- ✅ All 31 files present in zip 4490- ✅ All subdirectories included (lang/en/) 4491- ✅ File sizes match originals 4492- ✅ Compression works properly 4493- ✅ No files missing 4494- ✅ Backup can be restored 4495 4496**File Count**: 4497``` 4498Source directory: 31 files 4499Backup ZIP: 34 items (31 files + 3 directories) 4500Status: COMPLETE ✅ 4501``` 4502 4503### Backup Best Practices 4504 4505**Always enabled by default** ✅ 4506**Stored in accessible location** ✅ 4507**Timestamped filenames** ✅ 4508**Complete directory backup** ✅ 4509**Easy to restore** ✅ 4510 4511### Conclusion 4512 4513The backup system is working perfectly. The file sizes are appropriate and expected: 4514- Compressed size: ~240KB (good compression) 4515- Uncompressed size: ~1MB (all source files) 4516- All files included: YES ✅ 4517- Growing size over versions: Normal (more features!) 4518 4519**Your backups are complete and reliable!** 4520 4521## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 4522 4523### Fixed: JavaScript Syntax Error in AJAX Function 4524- **Fixed:** ParseError on line 1947 (deleteBackup function) 4525- **Fixed:** Escaped all single quotes in JavaScript strings 4526- **Result:** AJAX backup deletion now works correctly! 4527 4528### What Was Wrong 4529 4530JavaScript inside PHP echo needs escaped quotes: 4531 4532**Before (broken)**: 4533```javascript 4534formData.append('action', 'delete_backup'); // PHP interprets quotes 4535``` 4536 4537**After (fixed)**: 4538```javascript 4539formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 4540``` 4541 4542### All Quotes Escaped 4543 4544Fixed in deleteBackup function: 4545- ✅ FormData.append() calls 4546- ✅ fetch() URL 4547- ✅ querySelector() calls 4548- ✅ createElement() call 4549- ✅ All string literals 4550- ✅ Error messages 4551 4552**JavaScript now works!** ✓ 4553 4554## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 4555 4556### Improved: Update Tab Further Refined 4557- **Moved:** Important Notes to very top (above upload) 4558- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 4559- **Added:** Smooth fade-out animation when deleting backups 4560- **Added:** Success message after deletion 4561- **Auto-remove:** Backup section disappears if last backup deleted 4562- **Result:** Smoother, more polished experience! 4563 4564### New Layout Order 4565 4566**Final Order (v5.1.2)**: 4567``` 45681. ⚠️ Important Notes (warnings at top) 45692. Upload New Version (with Clear Cache button) 45703. Current Version (info) 45714. Recent Changes (changelog) 45725. Available Backups (if any) 4573``` 4574 4575### AJAX Backup Deletion 4576 4577**Before (v5.1.1)**: 4578- Click Delete → Page refreshes → Scroll back down 4579- Lose position on page 4580- Page reload is jarring 4581 4582**After (v5.1.2)**: 4583- Click Delete → Confirm 4584- Row fades out smoothly 4585- Row disappears 4586- Success message shows at top 4587- Success message fades after 3 seconds 4588- If last backup: entire section fades away 4589- **No page refresh!** ✓ 4590 4591### Visual Flow 4592 4593**Delete Animation**: 4594``` 45951. Click ️ Delete 45962. Confirm dialog 45973. Row fades out (0.3s) 45984. Row removed 45995. Success message appears 46006. Message fades after 3s 4601``` 4602 4603**If Last Backup**: 4604``` 46051. Delete last backup 46062. Row fades out 46073. Entire "Available Backups" section fades 46084. Section removed 46095. Clean interface ✓ 4610``` 4611 4612### Success Message 4613 4614After deleting: 4615``` 4616┌──────────────────────────────┐ 4617│ ✓ Backup deleted: filename │ ← Appears at top 4618└──────────────────────────────┘ 4619 Fades after 3 seconds 4620``` 4621 4622### Benefits 4623 4624**Important Notes First**: 4625- Warnings before actions ✓ 4626- Read before uploading ✓ 4627- Clear expectations ✓ 4628 4629**AJAX Deletion**: 4630- No page refresh ✓ 4631- Smooth animations ✓ 4632- Stay in context ✓ 4633- Professional feel ✓ 4634 4635**Auto-Cleanup**: 4636- Empty list disappears ✓ 4637- Clean interface ✓ 4638- No clutter ✓ 4639 4640### Technical Implementation 4641 4642**AJAX Request**: 4643```javascript 4644fetch('?do=admin&page=calendar&tab=update', { 4645 method: 'POST', 4646 body: formData 4647}) 4648``` 4649 4650**DOM Manipulation**: 4651- Fade out row 4652- Remove element 4653- Show success 4654- Remove section if empty 4655 4656**Smooth Transitions**: 4657- 300ms fade animations 4658- Clean visual feedback 4659- Professional polish 4660 4661## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 4662 4663### Improved: Update Tab Layout Reorganized 4664- **Moved:** Upload section to the top of the page 4665- **Added:** Clear Cache button next to Upload & Install button 4666- **Changed:** "Current Version" section moved below upload 4667- **Result:** Better workflow - upload first, then see version info! 4668 4669### New Layout Order 4670 4671**Before (v5.1.0)**: 4672``` 46731. Clear Cache (standalone) 46742. Current Version 46753. Recent Changes 46764. Upload New Version 46775. Warning Box 46786. Backups 4679``` 4680 4681**After (v5.1.1)**: 4682``` 46831. Upload New Version (with Clear Cache button side-by-side) 46842. Warning Box 46853. Current Version 46864. Recent Changes 46875. Backups 4688``` 4689 4690### Visual Result 4691 4692**Top of Update Tab**: 4693``` 4694┌─────────────────────────────────┐ 4695│ Upload New Version │ 4696│ ┌─────────────────────────────┐ │ 4697│ │ [Choose File] │ │ 4698│ │ ☑ Create backup first │ │ 4699│ │ ┌──────────────┬──────────┐ │ │ 4700│ │ │ Upload & │️ Clear │ │ │ 4701│ │ │ Install │ Cache │ │ │ 4702│ │ └──────────────┴──────────┘ │ │ 4703│ └─────────────────────────────┘ │ 4704│ │ 4705│ ⚠️ Important Notes │ 4706│ • Will replace all files │ 4707│ • Config preserved │ 4708│ │ 4709│ Current Version │ 4710│ Version: 5.1.1 │ 4711└─────────────────────────────────┘ 4712``` 4713 4714### Benefits 4715 4716**Better Workflow**: 4717- Primary action (upload) is first 4718- Clear cache conveniently next to install 4719- No scrolling to find upload button 4720- Logical top-to-bottom flow 4721 4722**Side-by-Side Buttons**: 4723- Upload & Install (green) 4724- Clear Cache (orange) 4725- Both common actions together 4726- Easy to access after upload 4727 4728**Improved UX**: 4729- Upload is most important → now at top 4730- Version info is reference → moved down 4731- Related actions grouped 4732- Cleaner organization 4733 4734### Button Layout 4735 4736``` 4737┌──────────────────┬──────────────┐ 4738│ Upload & │ ️ Clear │ 4739│ Install │ Cache │ 4740│ (Green) │ (Orange) │ 4741└──────────────────┴──────────────┘ 4742``` 4743 4744**Green = Primary Action** 4745**Orange = Secondary Action** 4746 4747Both easily accessible! 4748 4749## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 4750 4751### Changed: Admin Section Backgrounds Now Use __background__ 4752- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 4753- **Result:** Cleaner, more unified admin interface! 4754 4755### Background Usage Update 4756 4757**Before (v5.0.9)**: 4758```php 4759Section boxes: bg_alt (__background_alt__) 4760Content areas: bg (__background__) 4761``` 4762 4763**After (v5.1.0)**: 4764```php 4765Section boxes: bg (__background__) 4766Content areas: bg (__background__) 4767``` 4768 4769### Why This Change? 4770 4771**More unified appearance**: 4772- Sections and content use same background 4773- Creates cleaner, more cohesive look 4774- Borders provide visual separation 4775- Matches typical admin UI patterns 4776 4777**Template color hierarchy**: 4778``` 4779__background_site__ → Outer page wrapper 4780__background__ → Content & sections (BOTH now use this) 4781__background_alt__ → Reserved for special panels/highlights 4782__background_neu__ → Special highlights 4783``` 4784 4785### Visual Result 4786 4787**Light Template**: 4788```ini 4789__background__ = "#ffffff" 4790__background_alt__ = "#e8e8e8" 4791``` 4792 4793**Before**: 4794``` 4795Admin Page: 4796┌─────────────────────┐ 4797│ ┌─────────────────┐ │ 4798│ │ Section Box │ │ ← Gray (#e8e8e8) 4799│ │ ┌─────────────┐ │ │ 4800│ │ │ Content │ │ │ ← White (#fff) 4801│ │ └─────────────┘ │ │ 4802│ └─────────────────┘ │ 4803└─────────────────────┘ 4804Two-tone appearance 4805``` 4806 4807**After**: 4808``` 4809Admin Page: 4810┌─────────────────────┐ 4811│ ┌─────────────────┐ │ 4812│ │ Section Box │ │ ← White (#fff) 4813│ │ ┌─────────────┐ │ │ 4814│ │ │ Content │ │ │ ← White (#fff) 4815│ │ └─────────────┘ │ │ 4816│ └─────────────────┘ │ 4817└─────────────────────┘ 4818Unified, clean appearance 4819Borders provide separation 4820``` 4821 4822**Dark Template**: 4823```ini 4824__background__ = "#2d2d2d" 4825__background_alt__ = "#3a3a3a" 4826``` 4827 4828**After**: 4829``` 4830Admin Page: 4831┌─────────────────────┐ 4832│ ┌─────────────────┐ │ 4833│ │ Section Box │ │ ← Dark (#2d2d2d) 4834│ │ ┌─────────────┐ │ │ 4835│ │ │ Content │ │ │ ← Dark (#2d2d2d) 4836│ │ └─────────────┘ │ │ 4837│ └─────────────────┘ │ 4838└─────────────────────┘ 4839Unified dark appearance 4840Accent borders provide definition 4841``` 4842 4843### Benefits 4844 4845**Cleaner Look**: 4846- No more alternating gray/white 4847- More professional appearance 4848- Less visual noise 4849- Unified color scheme 4850 4851**Better Consistency**: 4852- Matches modern admin UI patterns 4853- Borders define sections, not colors 4854- Simpler, cleaner design 4855- Easier on the eyes 4856 4857**Template Friendly**: 4858- Works with any background color 4859- Light or dark templates 4860- Custom colors 4861- Always looks cohesive 4862 4863### All Sections Updated 4864 4865✅ Outlook Sync config sections 4866✅ Manage Events sections 4867✅ Update Plugin sections 4868✅ Themes tab sections 4869✅ Week start day section 4870✅ All form sections 4871 4872**Complete unified theming!** 4873 4874## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 4875 4876### Fixed: Syntax Error in Theme Cards 4877- **Fixed:** ParseError on line 4461 (Purple theme card) 4878- **Fixed:** Malformed ternary expressions from sed replacement 4879- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 4880- **Result:** Admin pages work correctly! 4881 4882### What Was Wrong 4883 4884The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 4885 4886**Before (broken)**: 4887```php 4888? '#9b59b6' : ' . $colors['border'] . ') 4889// Extra quote and dot created syntax error 4890``` 4891 4892**After (fixed)**: 4893```php 4894? '#9b59b6' : $colors['border']) 4895// Clean ternary expression 4896``` 4897 4898### All Theme Cards Fixed 4899 4900- ✅ Purple Dream card 4901- ✅ Professional Blue card 4902- ✅ Pink Bling card 4903- ✅ Wiki Default card 4904 4905### Now Working 4906 4907**Theme selection page loads** ✓ 4908**All cards display properly** ✓ 4909**Template colors applied** ✓ 4910**No syntax errors** ✓ 4911 4912## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 4913 4914### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 4915- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 4916- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 4917- **Fixed:** Theme selection cards use template backgrounds 4918- **Fixed:** Week start options use template backgrounds 4919- **Result:** Perfect color mapping throughout admin! 4920 4921### Color Mapping Correction 4922 4923**Before (v5.0.7)**: 4924```php 4925bg: __background_site__ // Wrong - this is outer page bg 4926bg_alt: __background_alt__ 4927``` 4928 4929**After (v5.0.8)**: 4930```php 4931bg: __background__ // Correct - main content bg 4932bg_alt: __background_alt__ 4933``` 4934 4935### Why This Matters 4936 4937**Template color hierarchy**: 4938``` 4939__background_site__ → Outer page/site background 4940__background__ → Main content area (CORRECT for admin) 4941__background_alt__ → Sections/panels 4942__background_neu__ → Highlights 4943``` 4944 4945**Admin should use**: 4946- `__background__` for input fields, content areas 4947- `__background_alt__` for section boxes, panels 4948 4949### Themes Tab Fixed 4950 4951**Removed all hardcoded colors**: 4952```php 4953Before: '#ddd', '#fff', '#dee2e6' 4954After: $colors['border'], $colors['bg'], $colors['border'] 4955``` 4956 4957**Now themed**: 4958- ✅ Week start section background 4959- ✅ Week start option backgrounds 4960- ✅ Theme card backgrounds 4961- ✅ Theme card borders 4962- ✅ All borders throughout 4963 4964### Visual Result 4965 4966**Light Template**: 4967```ini 4968__background__ = "#ffffff" 4969__background_alt__ = "#e8e8e8" 4970``` 4971 4972**Admin Before (v5.0.7)**: 4973``` 4974Input fields: #f5f5f5 (site bg - wrong) 4975Sections: #e8e8e8 (alt bg - correct) 4976``` 4977 4978**Admin After (v5.0.8)**: 4979``` 4980Input fields: #ffffff (content bg - correct!) 4981Sections: #e8e8e8 (alt bg - correct!) 4982``` 4983 4984**Dark Template**: 4985```ini 4986__background__ = "#2d2d2d" 4987__background_alt__ = "#3a3a3a" 4988``` 4989 4990**Admin After (v5.0.8)**: 4991``` 4992Input fields: #2d2d2d (content bg - perfect!) 4993Sections: #3a3a3a (alt bg - perfect!) 4994``` 4995 4996### Complete Themes Tab 4997 4998**Week Start Options**: 4999``` 5000┌─────────────────────────┐ 5001│ Week Start Day │ ← bg_alt 5002│ ┌─────────┬───────────┐ │ 5003│ │ Monday │ Sunday │ │ ← bg (when not selected) 5004│ └─────────┴───────────┘ │ 5005└─────────────────────────┘ 5006``` 5007 5008**Theme Cards**: 5009``` 5010┌─────────────────────────┐ 5011│ Matrix Edition │ ← bg (when not selected) 5012│ Classic green theme │ border (when not selected) 5013└─────────────────────────┘ 5014 5015┌═════════════════════════┐ 5016│ Purple Dream │ ← rgba green tint (when selected) 5017│ Elegant purple theme │ #00cc07 border (when selected) 5018└═════════════════════════┘ 5019``` 5020 5021### Perfect Integration 5022 5023**All admin pages now**: 5024- Content areas: `__background__` ✓ 5025- Section boxes: `__background_alt__` ✓ 5026- Borders: `__border__` ✓ 5027- Text: `__text__` ✓ 5028 5029**Matches wiki perfectly**: 5030- Same white content areas 5031- Same gray section boxes 5032- Same border colors 5033- Same text colors 5034 5035### No More Issues 5036 5037**Fixed**: 5038- ❌ Site background on content areas → ✅ Content background 5039- ❌ Hardcoded white on themes tab → ✅ Template background 5040- ❌ Hardcoded borders (#ddd) → ✅ Template borders 5041 5042**Result**: 5043- Perfect color hierarchy ✓ 5044- Correct background levels ✓ 5045- Complete template integration ✓ 5046 5047## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 5048 5049### Fixed: All Admin Backgrounds Use Template Colors 5050- **Fixed:** All section backgrounds use `__background_alt__` 5051- **Fixed:** All content backgrounds use `__background__` 5052- **Fixed:** All borders use `__border__` 5053- **Fixed:** All text uses `__text__` 5054- **Result:** Complete admin template integration! 5055 5056### All Replacements 5057 5058**Backgrounds**: 5059```php 5060Before: background: #f9f9f9 5061After: background: ' . $colors['bg_alt'] . ' 5062 5063Before: background: #fff / background: white 5064After: background: ' . $colors['bg'] . ' 5065``` 5066 5067**Borders**: 5068```php 5069Before: border: 1px solid #ddd 5070Before: border: 1px solid #e0e0e0 5071Before: border: 1px solid #eee 5072After: border: 1px solid ' . $colors['border'] . ' 5073``` 5074 5075**Text**: 5076```php 5077Before: color: #333 5078Before: color: #666 5079After: color: ' . $colors['text'] . ' 5080``` 5081 5082### Complete Admin Coverage 5083 5084**All tabs now themed**: 5085- ✅ Manage Events tab 5086- ✅ Update Plugin tab 5087- ✅ Outlook Sync tab 5088- ✅ Themes tab 5089- ✅ Tab navigation 5090- ✅ All sections 5091- ✅ All inputs 5092- ✅ All borders 5093- ✅ All text 5094 5095### Visual Result 5096 5097**Light Template**: 5098``` 5099Admin Page: 5100┌──────────────────────────┐ 5101│ Tab Navigation │ ← Template borders 5102├──────────────────────────┤ 5103│ Section Headers │ ← bg_alt (light gray) 5104│ ┌──────────────────────┐ │ 5105│ │ Form Inputs │ │ ← bg (white) 5106│ │ Content Areas │ │ 5107│ └──────────────────────┘ │ 5108└──────────────────────────┘ 5109All template colors! ✓ 5110``` 5111 5112**Dark Template**: 5113``` 5114Admin Page: 5115┌──────────────────────────┐ 5116│ Tab Navigation │ ← Template borders 5117├──────────────────────────┤ 5118│ Section Headers │ ← bg_alt (dark gray) 5119│ ┌──────────────────────┐ │ 5120│ │ Form Inputs │ │ ← bg (darker) 5121│ │ Content Areas │ │ 5122│ └──────────────────────┘ │ 5123└──────────────────────────┘ 5124All template colors! ✓ 5125``` 5126 5127### Template Color Mapping 5128 5129**Used throughout admin**: 5130``` 5131__background_site__ → $colors['bg'] (main backgrounds) 5132__background_alt__ → $colors['bg_alt'] (section backgrounds) 5133__text__ → $colors['text'] (all text) 5134__border__ → $colors['border'] (all borders) 5135__link__ → $colors['link'] (links - future) 5136``` 5137 5138### Examples by Section 5139 5140**Manage Events**: 5141- Event list backgrounds: `bg_alt` 5142- Event item backgrounds: `bg` 5143- Borders: `border` 5144- Text: `text` 5145 5146**Update Plugin**: 5147- Section backgrounds: `bg_alt` 5148- Content areas: `bg` 5149- Borders: `border` 5150- Text: `text` 5151 5152**Outlook Sync**: 5153- Config sections: `bg_alt` 5154- Input fields: `bg` 5155- Borders: `border` 5156- Labels: `text` 5157 5158**Themes Tab**: 5159- Theme cards: `bg_alt` 5160- Preview areas: `bg` 5161- Borders: `border` 5162- Descriptions: `text` 5163 5164### Benefits 5165 5166**Seamless Integration**: 5167- Matches wiki admin area perfectly 5168- Same colors throughout wiki 5169- Professional appearance 5170- Consistent experience 5171 5172**Automatic Adaptation**: 5173- Light templates: Light admin 5174- Dark templates: Dark admin 5175- Custom templates: Uses custom colors 5176 5177**No White Boxes**: 5178- Every background themed 5179- Every border themed 5180- Every text themed 5181- Complete consistency 5182 5183### PERFECT HARMONY 5184 5185**Frontend (Calendar)**: 5186- Wiki theme uses style.ini ✓ 5187- Perfect template match ✓ 5188 5189**Backend (Admin)**: 5190- Reads same style.ini ✓ 5191- Perfect template match ✓ 5192 5193**Complete Unity**: 5194- Same colors everywhere ✓ 5195- Seamless experience ✓ 5196- Professional polish ✓ 5197 5198## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 5199 5200### Enhanced: Month/Year Header & Admin Pages Use Template Colors 5201- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 5202- **Added:** Admin pages read template's style.ini file 5203- **Added:** `getTemplateColors()` function in admin class 5204- **Fixed:** Tab navigation uses template text and border colors 5205- **Result:** Complete template integration everywhere! 5206 5207### Month/Year Header 5208 5209**Before**: 5210```php 5211color: __text__ // Same as primary text 5212``` 5213 5214**After (Wiki Theme)**: 5215```php 5216color: __text_neu__ // Dimmed text (subtle) 5217``` 5218 5219### Admin Pages Enhancement 5220 5221**New `getTemplateColors()` function**: 5222- Reads template's style.ini file 5223- Extracts color replacements 5224- Provides colors to all admin tabs 5225- Falls back to sensible defaults 5226 5227**Colors used**: 5228```php 5229bg: __background_site__ 5230bg_alt: __background_alt__ 5231text: __text__ 5232border: __border__ 5233link: __link__ 5234``` 5235 5236**Applied to**: 5237- Tab navigation borders 5238- Tab text colors 5239- All admin sections 5240- Ready for future enhancements 5241 5242### Visual Result 5243 5244**Calendar Header**: 5245``` 5246┌────────────────────┐ 5247│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 5248└────────────────────┘ 5249Subtle and elegant ✓ 5250``` 5251 5252**Admin Navigation**: 5253``` 5254 Manage Events | Update | ⚙️ Config | Themes 5255───────────────────────────────────────────────── 5256Active tab: Green (#00cc07) 5257Inactive tabs: Template text color 5258Border: Template border color 5259``` 5260 5261### Template Integration 5262 5263**Light Template**: 5264```ini 5265__text_neu__ = "#666666" 5266__border__ = "#cccccc" 5267``` 5268**Result**: 5269- Month/Year: Medium gray (subtle) 5270- Admin borders: Light gray 5271- Tab text: Dark gray 5272 5273**Dark Template**: 5274```ini 5275__text_neu__ = "#999999" 5276__border__ = "#555555" 5277``` 5278**Result**: 5279- Month/Year: Light gray (subtle) 5280- Admin borders: Medium gray 5281- Tab text: Bright gray 5282 5283### Benefits 5284 5285**Calendar Frontend**: 5286- Month/Year header more subtle 5287- Better visual hierarchy 5288- Less prominent, more elegant 5289 5290**Admin Backend**: 5291- Uses template colors 5292- Matches wiki admin area 5293- Consistent experience 5294- Professional appearance 5295 5296### Future-Ready 5297 5298The `getTemplateColors()` function is now available for: 5299- ✅ Tab navigation (implemented) 5300- Section backgrounds (ready) 5301- Button colors (ready) 5302- Input fields (ready) 5303- Success/error messages (ready) 5304 5305**Foundation laid for complete admin theming!** 5306 5307## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 5308 5309### Fixed: Add Event Bar & Section Headers Use Template Colors 5310- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 5311- **Fixed:** "Today" header uses `__text_neu__` 5312- **Fixed:** "Tomorrow" header uses `__text__` 5313- **Fixed:** "Important Events" header uses `__border__` 5314- **Result:** Perfect template color integration! 5315 5316### All Changes 5317 5318**Add Event Bar (Wiki Theme)**: 5319 5320**Before**: 5321```php 5322background: #3498db // Generic blue 5323``` 5324 5325**After**: 5326```php 5327background: __background_alt__ // Template alternate bg 5328text: __text__ // Template text color 5329hover: __background_neu__ // Template neutral bg 5330``` 5331 5332**Section Headers (Wiki Theme)**: 5333 5334**Before**: 5335```php 5336Today: #ff9800 // Orange 5337Tomorrow: #4caf50 // Green 5338Important Events: #9b59b6 // Purple 5339``` 5340 5341**After**: 5342```php 5343Today: __text_neu__ // Template dimmed text 5344Tomorrow: __text__ // Template primary text 5345Important Events: __border__ // Template border color 5346``` 5347 5348### Visual Result 5349 5350**Wiki Default Theme**: 5351``` 5352Add Event Bar: 5353┌────────────────┐ 5354│ + ADD EVENT │ ← Template alt background 5355└────────────────┘ 5356 5357Sections: 5358━━━━━━━━━━━━━━━━ 5359Today ← Dimmed text color (__text_neu__) 5360• Team Meeting 5361 5362Tomorrow ← Primary text color (__text__) 5363• Code Review 5364 5365Important Events ← Border color (__border__) 5366• Project Deadline 5367``` 5368 5369### Example with DokuWiki Default Template 5370 5371**Template colors**: 5372```ini 5373__background_alt__ = "#e8e8e8" 5374__text__ = "#333333" 5375__text_neu__ = "#666666" 5376__border__ = "#cccccc" 5377``` 5378 5379**Calendar result**: 5380``` 5381Add Event Bar: Light gray (#e8e8e8) 5382Today header: Medium gray (#666666) 5383Tomorrow header: Dark gray (#333333) 5384Important Events header: Border gray (#cccccc) 5385``` 5386 5387### Example with Dark Template 5388 5389**Template colors**: 5390```ini 5391__background_alt__ = "#2d2d2d" 5392__text__ = "#e0e0e0" 5393__text_neu__ = "#999999" 5394__border__ = "#555555" 5395``` 5396 5397**Calendar result**: 5398``` 5399Add Event Bar: Dark gray (#2d2d2d) 5400Today header: Light gray (#999999) 5401Tomorrow header: Bright gray (#e0e0e0) 5402Important Events header: Medium gray (#555555) 5403``` 5404 5405### Perfect Harmony 5406 5407All sidebar elements now use template colors: 5408- ✅ Add Event bar background 5409- ✅ Add Event bar text 5410- ✅ Today section header 5411- ✅ Tomorrow section header 5412- ✅ Important Events header 5413- ✅ Calendar cells 5414- ✅ Grid backgrounds 5415- ✅ All borders 5416 5417**Complete template integration!** 5418 5419## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 5420 5421### Fixed: Calendar Cells Use Correct Template Color 5422- **Fixed:** Calendar cells now use `__background__` from template 5423- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 5424- **Result:** Calendar cells match main content area background! 5425 5426### Color Mapping Update 5427 5428**Before (v5.0.3)**: 5429```php 5430cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 5431``` 5432 5433**After (v5.0.4)**: 5434```php 5435cell_bg: __background__ // Correct - main content background 5436``` 5437 5438### Template Color Usage 5439 5440**Wiki Default theme now uses**: 5441``` 5442__background_site__ → Overall page background 5443__background__ → Calendar cells (main content bg) 5444__background_alt__ → Grid background, headers 5445__background_neu__ → Today cell highlight 5446__text__ → Primary text 5447__text_neu__ → Dimmed text 5448__link__ → Links, bright text 5449__border__ → All borders 5450``` 5451 5452### Visual Result 5453 5454**Before**: 5455``` 5456Calendar with template colors: 5457┌─────┬─────┬─────┐ 5458│ Mon │ Tue │ Wed │ 5459├─────┼─────┼─────┤ 5460│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 5461└─────┴─────┴─────┘ 5462``` 5463 5464**After**: 5465``` 5466Calendar with template colors: 5467┌─────┬─────┬─────┐ 5468│ Mon │ Tue │ Wed │ 5469├─────┼─────┼─────┤ 5470│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 5471└─────┴─────┴─────┘ 5472``` 5473 5474### Example Template Colors 5475 5476**DokuWiki Default**: 5477```ini 5478__background__ = "#ffffff" 5479``` 5480**Result**: White calendar cells ✓ 5481 5482**Dark Template**: 5483```ini 5484__background__ = "#2d2d2d" 5485``` 5486**Result**: Dark calendar cells ✓ 5487 5488**Custom Template**: 5489```ini 5490__background__ = "#f9f9f9" 5491``` 5492**Result**: Custom color cells ✓ 5493 5494### Perfect Matching 5495 5496Calendar cells now match: 5497- ✅ Main content area background 5498- ✅ Article/page background 5499- ✅ Content box background 5500- ✅ Same as wiki text background 5501 5502**Seamless integration!** 5503 5504## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 5505 5506### Enhanced: Wiki Default Theme Reads Template Colors 5507- **Added:** Function to read colors from DokuWiki template's style.ini file 5508- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 5509- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 5510- **Uses:** Actual template colors instead of CSS variables 5511- **Result:** Perfect color matching with any DokuWiki template! 5512 5513### How It Works 5514 5515**New Function: `getWikiTemplateColors()`** 5516 55171. **Detects** current DokuWiki template name 55182. **Reads** the template's `style.ini` file 55193. **Parses** color replacements section 55204. **Maps** template colors to calendar theme 55215. **Falls back** to CSS variables if file not found 5522 5523### Colors Read from style.ini 5524 5525**Template color replacements used**: 5526```php 5527__background_site__ → bg, header_bg 5528__background_alt__ → grid_bg, cell_today_bg 5529__background_neu__ → cell_bg 5530__text__ → text_primary 5531__text_neu__ → text_dim 5532__link__ → text_bright 5533__border__ → border, grid_border 5534``` 5535 5536### Example style.ini Mapping 5537 5538**Template style.ini**: 5539```ini 5540[replacements] 5541__background_site__ = "#f8f9fa" 5542__background_alt__ = "#e9ecef" 5543__background_neu__ = "#dee2e6" 5544__text__ = "#212529" 5545__text_neu__ = "#6c757d" 5546__link__ = "#0d6efd" 5547__border__ = "#ced4da" 5548``` 5549 5550**Calendar theme result**: 5551```php 5552bg: #f8f9fa 5553header_bg: #e9ecef 5554grid_bg: #e9ecef 5555cell_bg: #dee2e6 5556text_primary: #212529 5557text_dim: #6c757d 5558text_bright: #0d6efd 5559border: #ced4da 5560grid_border: #ced4da 5561``` 5562 5563### Before vs After 5564 5565**Before (v5.0.2)**: 5566``` 5567Wiki Default theme used: 5568- CSS variables (var(--__background__, #fff)) 5569- Required browser CSS variable support 5570- Fallback to generic colors 5571``` 5572 5573**After (v5.0.3)**: 5574``` 5575Wiki Default theme uses: 5576- Actual colors from template's style.ini 5577- Exact template color values 5578- No CSS variable dependency 5579- Perfect color matching! 5580``` 5581 5582### File Location Priority 5583 5584Checks in order: 55851. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 55862. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 55873. Falls back to CSS variables if neither found 5588 5589### Benefits 5590 5591**More accurate colors**: 5592- Uses exact template color values ✓ 5593- No CSS variable interpolation ✓ 5594- Consistent across all browsers ✓ 5595 5596**Better compatibility**: 5597- Works with older browsers ✓ 5598- No CSS variable support needed ✓ 5599- Direct color values ✓ 5600 5601**Perfect matching**: 5602- Reads template's actual colors ✓ 5603- Same colors as wiki pages ✓ 5604- Seamless integration ✓ 5605 5606### Template Examples 5607 5608**DokuWiki Default Template**: 5609``` 5610Reads: lib/tpl/dokuwiki/style.ini 5611Gets: Default DokuWiki colors 5612Result: Perfect classic DokuWiki look 5613``` 5614 5615**Bootstrap Template**: 5616``` 5617Reads: lib/tpl/bootstrap3/style.ini 5618Gets: Bootstrap color scheme 5619Result: Perfect Bootstrap integration 5620``` 5621 5622**Custom Template**: 5623``` 5624Reads: conf/tpl/mycustom/style.ini 5625Gets: Your custom colors 5626Result: Perfect custom theme match 5627``` 5628 5629### Fallback Chain 5630 56311. **Try** reading style.ini from template 56322. **If found** → Use exact colors from file 56333. **If not found** → Use CSS variables 56344. **If no CSS vars** → Use fallback colors 5635 5636**Always works, always matches!** ✓ 5637 5638## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 5639 5640### Fixed: Wiki Default Theme Day Panel Colors 5641- **Fixed:** Day popup panel now uses DokuWiki CSS variables 5642- **Fixed:** Panel background matches wiki theme 5643- **Fixed:** Panel header matches wiki theme 5644- **Fixed:** Border colors use wiki theme 5645- **Fixed:** Text colors use wiki theme 5646- **Result:** Perfect integration with DokuWiki templates! 5647 5648### All Changes 5649 5650**Day Panel Colors (Wiki Default)**: 5651 5652**Before**: 5653```php 5654background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 5655header: #3498db // Blue (wrong!) 5656``` 5657 5658**After**: 5659```php 5660background: var(--__background__, #fff) 5661header: var(--__background_alt__, #e8e8e8) 5662header_text: var(--__text__, #333) 5663border: var(--__border__, #ccc) 5664shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 5665``` 5666 5667**Event Colors (Wiki Default)**: 5668```php 5669event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 5670border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 5671bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 5672``` 5673 5674### Before vs After 5675 5676**Before (v5.0.1)**: 5677``` 5678Wiki Default - Click Week Cell: 5679┌────────────────┐ 5680│ Monday, Feb 8 │ ← Blue header (wrong) 5681├────────────────┤ 5682│ Team Meeting │ ← Dark gray bg (wrong) 5683│ 2:00 PM │ 5684└────────────────┘ 5685Doesn't match wiki theme 5686``` 5687 5688**After (v5.0.2)**: 5689``` 5690Wiki Default - Click Week Cell: 5691 5692Light Wiki Theme: 5693┌────────────────┐ 5694│ Monday, Feb 8 │ ← Light gray header ✓ 5695├────────────────┤ 5696│ Team Meeting │ ← White bg ✓ 5697│ 2:00 PM │ Dark text ✓ 5698└────────────────┘ 5699 5700Dark Wiki Theme: 5701┌────────────────┐ 5702│ Monday, Feb 8 │ ← Dark header ✓ 5703├────────────────┤ 5704│ Team Meeting │ ← Dark bg ✓ 5705│ 2:00 PM │ Light text ✓ 5706└────────────────┘ 5707 5708Perfectly matches wiki! 5709``` 5710 5711### CSS Variables Used 5712 5713**Wiki Default theme now uses**: 5714- `--__background__` - Main background (panel body) 5715- `--__background_alt__` - Alternate bg (panel header, events) 5716- `--__text__` - Text color (header text) 5717- `--__border__` - Border color (panel border, event borders) 5718 5719**With fallbacks**: 5720```css 5721var(--__background__, #fff) /* white fallback */ 5722var(--__background_alt__, #e8e8e8) /* light gray fallback */ 5723var(--__text__, #333) /* dark text fallback */ 5724var(--__border__, #ccc) /* gray border fallback */ 5725``` 5726 5727### Perfect Adaptation 5728 5729**Light Templates**: 5730- Light panel backgrounds ✓ 5731- Dark text ✓ 5732- Subtle borders ✓ 5733- Clean appearance ✓ 5734 5735**Dark Templates**: 5736- Dark panel backgrounds ✓ 5737- Light text ✓ 5738- Visible borders ✓ 5739- Perfect contrast ✓ 5740 5741**Custom Templates**: 5742- Uses template's CSS variables ✓ 5743- Automatic adaptation ✓ 5744- Seamless integration ✓ 5745 5746### Now Truly Adaptive 5747 5748Wiki Default theme now properly uses DokuWiki CSS variables for: 5749- ✅ Calendar grid 5750- ✅ Sidebar widget 5751- ✅ Event list 5752- ✅ **Day panel** ← v5.0.2! 5753- ✅ All backgrounds 5754- ✅ All text 5755- ✅ All borders 5756 5757**Complete wiki integration!** 5758 5759## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 5760 5761### Enhanced: Time Conflict Tooltips Now Themed 5762- **Fixed:** Conflict tooltips now match calendar theme 5763- **Added:** Theme-aware background, border, text colors 5764- **Added:** Theme-aware shadow effects 5765- **Result:** Complete visual consistency! 5766 5767### Tooltip Theming 5768 5769**Now uses theme colors for**: 5770- Background: Theme background color 5771- Border: Theme border color 5772- Header text: Theme primary text color 5773- Item text: Theme dim text color 5774- Shadow: Theme shadow color 5775 5776### Before vs After 5777 5778**Before (v5.0.0)**: 5779``` 5780Hover ⚠️ badge: 5781┌─────────────────┐ 5782│ ⚠️ Time Conflicts│ ← Default colors 5783│ • Event A │ 5784│ • Event B │ 5785└─────────────────┘ 5786``` 5787 5788**After (v5.0.1)**: 5789``` 5790Matrix Theme: 5791┌─────────────────┐ 5792│ ⚠️ Time Conflicts│ ← Green header 5793│ • Event A │ ← Green text 5794│ • Event B │ Dark green bg 5795└─────────────────┘ 5796 5797Purple Theme: 5798┌─────────────────┐ 5799│ ⚠️ Time Conflicts│ ← Purple header 5800│ • Event A │ ← Purple text 5801│ • Event B │ Dark purple bg 5802└─────────────────┘ 5803 5804Professional Theme: 5805┌─────────────────┐ 5806│ ⚠️ Time Conflicts│ ← Blue header 5807│ • Event A │ ← Dark text 5808│ • Event B │ Light bg 5809└─────────────────┘ 5810 5811Pink Theme: 5812┌─────────────────┐ 5813│ ⚠️ Time Conflicts│ ← Pink header ✨ 5814│ • Event A │ ← Pink text 5815│ • Event B │ Dark pink bg 5816└─────────────────┘ 5817 5818Wiki Default: 5819┌─────────────────┐ 5820│ ⚠️ Time Conflicts│ ← Adapts to wiki 5821│ • Event A │ ← Wiki colors 5822│ • Event B │ 5823└─────────────────┘ 5824``` 5825 5826### Now 100% Complete 5827 5828**Every tooltip themed**: 5829- ✅ Conflict tooltips 5830- ✅ All other tooltips (if any) 5831- ✅ Perfect consistency 5832 5833**Absolute perfection!** ✨ 5834 5835## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 5836 5837### Major Milestone: Version 5.0 5838 5839This 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. 5840 5841### Complete Feature Set 5842 5843**5 Beautiful Themes**: 5844- Matrix Edition (Green with glow) 5845- Purple Dream (Elegant purple) 5846- Professional Blue (Clean and modern) 5847- Pink Bling (Maximum sparkle) 5848- Wiki Default (Auto-adapts to your DokuWiki theme) 5849 5850**100% Theme Coverage**: 5851- ✅ Calendar grid and cells 5852- ✅ Event boxes and borders 5853- ✅ Sidebar widget 5854- ✅ Event list panel 5855- ✅ Search functionality 5856- ✅ Edit/Add dialogs (complete) 5857- ✅ Day popup dialogs 5858- ✅ Month picker 5859- ✅ All text (primary, dim, bright) 5860- ✅ All buttons 5861- ✅ All inputs and forms 5862- ✅ All checkboxes 5863- ✅ All borders 5864- ✅ All badges and labels 5865- ✅ Event highlight effects 5866 5867**Perfect Visual Consistency**: 5868- No white pixels anywhere 5869- No unthemed elements 5870- No default colors 5871- Complete visual unity 5872 5873### Major Improvements in v5.0 5874 58751. **Complete Dialog Theming** (v4.8.5-4.8.7) 5876 - Edit event dialog fully themed 5877 - Day popup dialog fully themed 5878 - All form inputs themed 5879 - All checkboxes themed 5880 - All buttons themed 5881 58822. **Event Box Border Perfection** (v4.8.6) 5883 - All 4 borders themed (top, right, bottom, left) 5884 - Sidebar event dividers themed 5885 - Past Events toggle border themed 5886 58873. **Checkbox Field Borders** (v4.9.0) 5888 - Repeating Event section border themed 5889 - Task checkbox section border themed 5890 58914. **Wiki Default Theme** (v4.10.0) 5892 - New 5th theme 5893 - Uses DokuWiki CSS variables 5894 - Auto-adapts to any wiki template 5895 - Perfect for seamless integration 5896 58975. **Clean Text Appearance** (v4.11.0) 5898 - Removed text glow from Matrix 5899 - Removed text glow from Purple 5900 - Removed text glow from Professional 5901 - Removed text glow from Wiki Default 5902 - Kept text glow on Pink Bling only 5903 59046. **Event Highlight Effects** (v4.12.0-4.12.1) 5905 - Theme-aware highlight glow 5906 - Click event bar → event glows 5907 - 3-second themed glow effect 5908 - Smooth animations 5909 5910### See RELEASE_NOTES.md for Complete Details 5911 5912For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 5913 5914## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 5915 5916### Fixed: Event Highlight Now Working 5917- **Fixed:** Used setProperty() to properly apply !important styles 5918- **Added:** Console logging for debugging 5919- **Fixed:** Proper style application with important flag 5920- **Result:** Highlight glow now works correctly! 5921 5922### Technical Fix 5923 5924**Before (not working)**: 5925```javascript 5926eventItem.style.background = color + ' !important'; // Doesn't work 5927``` 5928 5929**After (working)**: 5930```javascript 5931eventItem.style.setProperty('background', color, 'important'); // Works! 5932``` 5933 5934### Added Debug Logging 5935 5936Console now shows: 5937- "Highlighting event: [calId] [eventId] [date]" 5938- "Found event item: [element]" 5939- "Theme: [theme name]" 5940- "Highlight colors: [bg] [shadow]" 5941- "Applied highlight styles" 5942- "Removing highlight" (after 3 seconds) 5943 5944### Now Working 5945 5946Click any event bar → Event glows with theme colors ✓ 5947 5948## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 5949 5950### ✨ Enhanced: Event Click Highlight Now Theme-Aware 5951- **Fixed:** Restored event highlight glow when clicking calendar bars 5952- **Improved:** Highlight now matches each theme's colors 5953- **Added:** Stronger glow effect for better visibility 5954- **Duration:** 3 seconds with smooth fade 5955- **Result:** Beautiful themed highlights for all themes! 5956 5957### How It Works 5958 5959When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 5960 5961**Matrix Theme**: 5962```javascript 5963Background: Darker green (#1a3d1a) 5964Glow: Double green glow (0 0 20px + 0 0 40px) 5965Color: rgba(0, 204, 7, 0.8) 5966``` 5967 5968**Purple Theme**: 5969```javascript 5970Background: Darker purple (#3d2b4d) 5971Glow: Double purple glow 5972Color: rgba(155, 89, 182, 0.8) 5973``` 5974 5975**Professional Theme**: 5976```javascript 5977Background: Light blue (#e3f2fd) 5978Glow: Single blue glow 5979Color: rgba(74, 144, 226, 0.4) 5980``` 5981 5982**Pink Theme**: 5983```javascript 5984Background: Darker pink (#3d2030) 5985Glow: Double pink glow ✨ 5986Color: rgba(255, 20, 147, 0.8) 5987``` 5988 5989**Wiki Theme**: 5990```javascript 5991Background: var(--__background_neu__) 5992Glow: Blue glow (adapts to wiki) 5993Color: rgba(43, 115, 183, 0.4) 5994``` 5995 5996### Visual Examples 5997 5998**Matrix - Click Event**: 5999``` 6000Calendar: 6001┌─────────────┐ 6002│ 2:00 PM │ ← Click this bar 6003└─────────────┘ 6004 6005Event List: 6006╔═════════════════════╗ 6007║ Team Meeting ║ ← GLOWS GREEN 6008║ 2:00 PM ║ for 3 seconds 6009╚═════════════════════╝ 6010 ↑↑↑ Strong green glow ↑↑↑ 6011``` 6012 6013**Purple - Click Event**: 6014``` 6015Calendar: 6016┌─────────────┐ 6017│ 4:00 PM │ ← Click 6018└─────────────┘ 6019 6020Event List: 6021╔═════════════════════╗ 6022║ Code Review ║ ← GLOWS PURPLE 6023║ 4:00 PM ║ for 3 seconds 6024╚═════════════════════╝ 6025 ↑↑↑ Strong purple glow ↑↑↑ 6026``` 6027 6028**Pink - Click Event**: 6029``` 6030Calendar: 6031┌─────────────┐ 6032│ 1:00 PM │ ← Click 6033└─────────────┘ 6034 6035Event List: 6036╔═════════════════════╗ 6037║ Lunch Date ║ ← GLOWS PINK 6038║ 1:00 PM ✨ ║ for 3 seconds 6039╚═════════════════════╝ 6040 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 6041``` 6042 6043### Glow Specifications 6044 6045**Matrix**: 6046- Background: Dark green 6047- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 6048- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 6049- Effect: Strong green pulse 6050 6051**Purple**: 6052- Background: Dark purple 6053- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 6054- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 6055- Effect: Strong purple pulse 6056 6057**Professional**: 6058- Background: Light blue 6059- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 6060- Effect: Subtle blue glow 6061 6062**Pink**: 6063- Background: Dark pink 6064- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 6065- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 6066- Effect: MAXIMUM SPARKLE ✨ 6067 6068**Wiki**: 6069- Background: Theme neutral color 6070- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 6071- Effect: Adapts to wiki theme 6072 6073### User Experience 6074 6075**Click event bar** → Event highlights with themed glow 6076**Auto-scroll** → Event scrolls into view smoothly 6077**3 second glow** → Fade out after 3 seconds 6078**Smooth transition** → 0.3s ease-in-out 6079 6080### Perfect for Finding Events 6081 6082**Large event lists**: Quickly locate the clicked event ✓ 6083**Visual feedback**: Know which event you clicked ✓ 6084**Theme consistency**: Matches your chosen theme ✓ 6085**Smooth animation**: Professional appearance ✓ 6086 6087### All Themes Covered 6088 6089- ✅ Matrix: Green glow 6090- ✅ Purple: Purple glow 6091- ✅ Professional: Blue glow 6092- ✅ Pink: Maximum pink sparkle 6093- ✅ Wiki: Adaptive glow 6094 6095**Click any event bar and watch it glow!** ✨ 6096 6097## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 6098 6099### Changed: Text Glow Now Pink-Only 6100- **Removed:** Text shadow/glow from Matrix theme 6101- **Removed:** Text shadow/glow from Purple theme 6102- **Removed:** Text shadow/glow from Professional theme (already had none) 6103- **Removed:** Text shadow/glow from Wiki Default theme 6104- **Kept:** Text shadow/glow ONLY on Pink Bling theme 6105- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 6106 6107### All Changes 6108 6109**Before (Matrix, Purple)**: 6110```css 6111text-shadow: 0 0 2px $text_color; /* Glow effect */ 6112``` 6113 6114**After (Matrix, Purple, Professional, Wiki)**: 6115```css 6116text-shadow: none; /* Clean, no glow */ 6117``` 6118 6119**Pink Bling (unchanged)**: 6120```css 6121text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 6122``` 6123 6124### Text Shadow Removed From 6125 6126**Sidebar day numbers**: No glow ✓ 6127**Event titles**: No glow ✓ 6128**Event dates**: No glow ✓ 6129**Add Event button**: No glow ✓ 6130**Day popup events**: No glow ✓ 6131 6132### Before vs After 6133 6134**BEFORE (Matrix)**: 6135``` 6136Event Title ✨ ← Glowing green text 61372:00 PM ✨ ← Glowing text 6138``` 6139 6140**AFTER (Matrix)**: 6141``` 6142Event Title ← Clean green text 61432:00 PM ← Clean text 6144``` 6145 6146**Pink Bling (Still Glows)**: 6147``` 6148Event Title ✨ ← Still glowing! 61492:00 PM ✨ ← Maximum sparkle! 6150``` 6151 6152### Theme Appearances 6153 6154** Matrix Edition**: 6155- Clean green text 6156- No glow effects 6157- Professional appearance 6158- Still has border glow 6159 6160** Purple Dream**: 6161- Clean purple text 6162- No glow effects 6163- Elegant appearance 6164- Still has border glow 6165 6166** Professional Blue**: 6167- Clean text (unchanged) 6168- No glow effects 6169- Modern appearance 6170 6171** Pink Bling**: 6172- Glowing pink text ✨ 6173- Maximum glow effects 6174- Sparkle everywhere! 6175- All the bling! 6176 6177** Wiki Default**: 6178- Clean text 6179- No glow effects 6180- Matches wiki theme 6181 6182### Glow Effects Remaining 6183 6184**Border/box glow**: Still present on all themes ✓ 6185**Pink text glow**: Only on Pink Bling ✓ 6186**Shadow effects**: Still on buttons/boxes ✓ 6187 6188**Only TEXT glow removed from non-pink themes!** 6189 6190### Result 6191 6192**Cleaner, more professional look** for: 6193- Matrix ✓ 6194- Purple ✓ 6195- Professional ✓ 6196- Wiki Default ✓ 6197 6198**Maximum sparkle** for: 6199- Pink Bling ✨✓ 6200 6201**Best of both worlds!** 6202 6203## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 6204 6205### New: Wiki Default Theme 6206- **Added:** 5th theme that automatically matches your DokuWiki template 6207- **Uses:** CSS variables from your wiki theme 6208- **Adapts:** Automatically works with light and dark themes 6209- **Perfect:** Seamless integration with any DokuWiki template 6210 6211### How It Works 6212 6213**Wiki theme uses DokuWiki CSS variables**: 6214```css 6215bg: var(--__background_site__, #f5f5f5) 6216border: var(--__border__, #ccc) 6217text_primary: var(--__text__, #333) 6218text_bright: var(--__link__, #2b73b7) 6219text_dim: var(--__text_neu__, #666) 6220cell_bg: var(--__background__, #fff) 6221grid_border: var(--__border__, #ccc) 6222``` 6223 6224**With fallbacks for older DokuWiki versions**: 6225- If CSS variables exist → Use them ✓ 6226- If not available → Use fallback values ✓ 6227 6228### All 5 Themes 6229 6230**1. Matrix Edition** (Default) 6231- Dark green with neon glow 6232- Matrix-style effects 6233- Original theme 6234 6235**2. Purple Dream** 6236- Rich purple with violet accents 6237- Elegant and sophisticated 6238- Soft glow effects 6239 6240**3. Professional Blue** 6241- Clean blue and grey 6242- Modern professional 6243- No glow effects 6244 6245**4. Pink Bling** 6246- Glamorous hot pink 6247- Maximum sparkle ✨ 6248- Hearts and diamonds 6249 6250**5. Wiki Default** ← NEW! 6251- Matches your wiki template 6252- Auto-adapts to light/dark 6253- Perfect integration 6254 6255### Examples 6256 6257**Light Wiki Template**: 6258``` 6259Wiki Default theme shows: 6260- Light backgrounds (#f5f5f5) 6261- Dark text (#333) 6262- Light inputs (#fff) 6263- Gray borders (#ccc) 6264 6265Matches perfectly! ✓ 6266``` 6267 6268**Dark Wiki Template**: 6269``` 6270Wiki Default theme shows: 6271- Dark backgrounds (from template) 6272- Light text (from template) 6273- Dark inputs (from template) 6274- Dark borders (from template) 6275 6276Matches perfectly! ✓ 6277``` 6278 6279**Bootstrap Template**: 6280``` 6281Uses Bootstrap's colors 6282Matches perfectly! ✓ 6283``` 6284 6285**Material Template**: 6286``` 6287Uses Material's colors 6288Matches perfectly! ✓ 6289``` 6290 6291### CSS Variables Used 6292 6293**DokuWiki provides**: 6294- `--__background_site__`: Page background 6295- `--__background_alt__`: Section backgrounds 6296- `--__background__`: Content backgrounds 6297- `--__text__`: Primary text color 6298- `--__link__`: Link color 6299- `--__text_neu__`: Dimmed text 6300- `--__border__`: Border color 6301- `--__background_neu__`: Neutral background 6302 6303**All with fallbacks**: 6304```css 6305var(--__background_site__, #f5f5f5) 6306/* Falls back to light gray if variable doesn't exist */ 6307``` 6308 6309### Perfect for Every Template 6310 6311**Custom templates**: Automatically adapts ✓ 6312**Light themes**: Perfect match ✓ 6313**Dark themes**: Perfect match ✓ 6314**Any DokuWiki version**: Works with fallbacks ✓ 6315 6316### Complete Theme Collection 6317 6318Now with **5 gorgeous themes**: 6319- 3 dark themes (Matrix, Purple, Pink) 6320- 1 light theme (Professional) 6321- 1 adaptive theme (Wiki Default) ← NEW! 6322 6323**Something for everyone!** 6324 6325## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 6326 6327### Fixed: Checkbox Field Borders Themed 6328- **Fixed:** Added border-color to checkbox field divs 6329- **Fixed:** Repeating Event section border 6330- **Fixed:** Task checkbox section border 6331- **Result:** No white borders around checkboxes! 6332 6333### Changes 6334 6335**Checkbox Field Border Styling**: 6336 6337**Before**: 6338```html 6339<div class="form-field-checkbox" 6340 style="background: $bg !important;"> 6341<!-- Border shows white ✗ --> 6342``` 6343 6344**After**: 6345```php 6346<div class="form-field-checkbox" 6347 style="background: $bg !important; 6348 border-color: $grid_border !important;"> 6349<!-- Border themed ✓ --> 6350``` 6351 6352### Before vs After 6353 6354**BEFORE (v4.8.8)**: 6355``` 6356Edit Dialog: 6357┌──────────────────┐ 6358│ ☑ Repeating ║│ ← White border ✗ 6359└──────────────────┘ 6360┌──────────────────┐ 6361│ ☑ Task checkbox ║│ ← White border ✗ 6362└──────────────────┘ 6363``` 6364 6365**AFTER (v4.9.0)**: 6366``` 6367Matrix Edit Dialog: 6368┌──────────────────┐ 6369│ ☑ Repeating │ ← Green border ✓ 6370└──────────────────┘ 6371┌──────────────────┐ 6372│ ☑ Task checkbox │ ← Green border ✓ 6373└──────────────────┘ 6374``` 6375 6376### ABSOLUTE PERFECTION ACHIEVED 6377 6378**Every element themed**: 6379- ✅ All inputs 6380- ✅ All labels 6381- ✅ All sections 6382- ✅ **Checkbox field borders** ← v4.9.0! 6383- ✅ All buttons 6384- ✅ All checkboxes 6385- ✅ No white anywhere 6386 6387**100% COMPLETE!** ✨ 6388 6389## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6390 6391### Fixed: Checkbox Field Borders Themed 6392- **Fixed:** Added border-color to checkbox field divs 6393- **Fixed:** Repeating Event section border 6394- **Fixed:** Task checkbox section border 6395- **Result:** No white borders around checkboxes! 6396 6397### Fixed: Admin Sections Respect Wiki Theme 6398- **Fixed:** All admin backgrounds use CSS variables 6399- **Fixed:** Text colors use wiki text color 6400- **Fixed:** Borders use wiki border color 6401- **Result:** Admin matches wiki theme perfectly! 6402 6403### All Changes 6404 6405**1. Checkbox Field Border Styling**: 6406 6407**Before**: 6408```html 6409<div class="form-field-checkbox" 6410 style="background: $bg !important;"> 6411<!-- Border shows white ✗ --> 6412``` 6413 6414**After**: 6415```php 6416<div class="form-field-checkbox" 6417 style="background: $bg !important; 6418 border-color: $grid_border !important;"> 6419<!-- Border themed ✓ --> 6420``` 6421 6422**2. Admin CSS Variables**: 6423 6424**Added CSS variables for wiki theme compatibility**: 6425```css 6426.calendar-admin-wrapper { 6427 background: var(--__background_site__, #f5f5f5); 6428 color: var(--__text__, #333); 6429} 6430.calendar-admin-section { 6431 background: var(--__background_alt__, #fafafa); 6432} 6433.calendar-admin-input { 6434 background: var(--__background__, #fff); 6435 color: var(--__text__, #333); 6436} 6437``` 6438 6439**Replaced hardcoded colors**: 6440```php 6441// Before: 6442background: #f9f9f9 6443background: white 6444color: #333 6445border: 1px solid #ddd 6446 6447// After: 6448background: var(--__background_alt__, #f9f9f9) 6449background: var(--__background__, #fff) 6450color: var(--__text__, #333) 6451border: 1px solid var(--__border__, #ddd) 6452``` 6453 6454### Before vs After 6455 6456**BEFORE (v4.8.8)**: 6457``` 6458Edit Dialog: 6459┌──────────────────┐ 6460│ ☑ Repeating ║│ ← White border ✗ 6461└──────────────────┘ 6462┌──────────────────┐ 6463│ ☑ Task checkbox ║│ ← White border ✗ 6464└──────────────────┘ 6465 6466Admin Page (Dark Wiki Theme): 6467┌──────────────────┐ 6468│ Light sections │ ← White boxes ✗ 6469│ Light inputs │ ← Doesn't match ✗ 6470└──────────────────┘ 6471``` 6472 6473**AFTER (v4.8.9)**: 6474``` 6475Matrix Edit Dialog: 6476┌──────────────────┐ 6477│ ☑ Repeating │ ← Green border ✓ 6478└──────────────────┘ 6479┌──────────────────┐ 6480│ ☑ Task checkbox │ ← Green border ✓ 6481└──────────────────┘ 6482 6483Admin (Dark Wiki Theme): 6484┌──────────────────┐ 6485│ Dark sections │ ← Matches wiki ✓ 6486│ Dark inputs │ ← Perfect match ✓ 6487└──────────────────┘ 6488``` 6489 6490### Admin Theme Examples 6491 6492**Light Wiki Theme**: 6493``` 6494Admin page backgrounds: Light 6495Section boxes: Light gray 6496Inputs: White 6497Borders: Gray 6498Text: Dark 6499 6500Perfect match! ✓ 6501``` 6502 6503**Dark Wiki Theme**: 6504``` 6505Admin page backgrounds: Dark 6506Section boxes: Darker gray 6507Inputs: Dark 6508Borders: Dark gray 6509Text: Light 6510 6511Perfect match! ✓ 6512``` 6513 6514**DokuWiki Default**: 6515``` 6516Uses wiki's CSS variables 6517Automatically adapts 6518Always matches! ✓ 6519``` 6520 6521### Complete Coverage 6522 6523**Edit Dialog**: 6524- ✅ All inputs themed 6525- ✅ All labels themed 6526- ✅ All sections themed 6527- ✅ **Checkbox borders** ← v4.8.9! 6528- ✅ All buttons themed 6529- ✅ No white anywhere 6530 6531**Admin Interface**: 6532- ✅ **Tab navigation** ← v4.8.9! 6533- ✅ **Section boxes** ← v4.8.9! 6534- ✅ **Input fields** ← v4.8.9! 6535- ✅ **Text colors** ← v4.8.9! 6536- ✅ **Borders** ← v4.8.9! 6537- ✅ All tabs (Manage, Update, Outlook, Themes) 6538 6539### CSS Variables Used 6540 6541**DokuWiki provides these**: 6542- `--__background_site__`: Page background 6543- `--__background_alt__`: Alternate background 6544- `--__background__`: Primary background (inputs) 6545- `--__text__`: Text color 6546- `--__border__`: Border color 6547 6548**Fallbacks provided for older DokuWiki**: 6549```css 6550var(--__background_site__, #f5f5f5) 6551var(--__background_alt__, #fafafa) 6552var(--__background__, #fff) 6553var(--__text__, #333) 6554var(--__border__, #ddd) 6555``` 6556 6557### Perfect Adaptation 6558 6559**Admin now adapts to ANY wiki theme**: 6560- Light themes → Light admin ✓ 6561- Dark themes → Dark admin ✓ 6562- Custom themes → Matches perfectly ✓ 6563- No hardcoded colors ✓ 6564 6565**Calendar themes still work**: 6566- Matrix, Purple, Professional, Pink ✓ 6567- Independent from wiki theme ✓ 6568- Admin respects wiki ✓ 6569- Calendar respects calendar theme ✓ 6570 6571### FINAL PERFECTION 6572 6573**Frontend (Calendar)**: 6574- Complete theming ✓ 6575- 4 beautiful themes ✓ 6576- Every pixel themed ✓ 6577 6578**Backend (Admin)**: 6579- Respects wiki theme ✓ 6580- Works with any theme ✓ 6581- Perfect compatibility ✓ 6582 6583**ABSOLUTELY EVERYTHING THEMED!** ✨ 6584 6585## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 6586 6587### Fixed: Task Checkboxes Now Fully Themed 6588- **Fixed:** Added background-color and border inline 6589- **Fixed:** Both PHP and JavaScript versions 6590- **Result:** No white checkboxes! 6591 6592### Fixed: Past Events Toggle Border 6593- **Fixed:** Added !important to border styling 6594- **Fixed:** Explicit top and bottom borders 6595- **Result:** No white line under toggle! 6596 6597### Fixed: Form Field Section Backgrounds 6598- **Fixed:** All form-field and form-row-group backgrounds 6599- **Fixed:** Every section in edit dialog 6600- **Result:** No white sections anywhere! 6601 6602### All Changes 6603 6604**1. Task Checkbox Styling**: 6605 6606**Before**: 6607```php 6608style="accent-color: $border !important;" 6609<!-- Only accent, background still white ✗ --> 6610``` 6611 6612**After**: 6613```php 6614style="accent-color: $border !important; 6615 background-color: $cell_bg !important; 6616 border: 2px solid $grid_border !important;" 6617<!-- Full theming ✓ --> 6618``` 6619 6620**2. Past Events Toggle Border**: 6621 6622**Before**: 6623```php 6624style="border-color: $grid_border;" 6625<!-- No !important, CSS overrides ✗ --> 6626``` 6627 6628**After**: 6629```php 6630style="border-color: $grid_border !important; 6631 border-top: 1px solid $grid_border !important; 6632 border-bottom: 1px solid $grid_border !important;" 6633<!-- Cannot be overridden ✓ --> 6634``` 6635 6636**3. Form Field Backgrounds**: 6637 6638**Before**: 6639```html 6640<div class="form-field"> 6641<div class="form-row-group"> 6642<!-- No background, shows white ✗ --> 6643``` 6644 6645**After**: 6646```php 6647<div class="form-field" style="background: $bg !important;"> 6648<div class="form-row-group" style="background: $bg !important;"> 6649<!-- Fully themed ✓ --> 6650``` 6651 6652### Before vs After 6653 6654**BEFORE (v4.8.7)**: 6655``` 6656Event: 6657□ Task checkbox ← White checkbox ✗ 6658 6659Past Events 6660▶ Past Events (3) ← White line below ✗ 6661───────────────── 6662 6663Edit Dialog: 6664┌──────────────┐ 6665│ Form fields │ ← White sections ✗ 6666└──────────────┘ 6667``` 6668 6669**AFTER (v4.8.8)**: 6670``` 6671Matrix Event: 6672☑ Task checkbox ← Green checkbox ✓ 6673 6674Past Events 6675▶ Past Events (3) ← Green border ✓ 6676───────────────── 6677 6678Matrix Edit Dialog: 6679┌──────────────┐ 6680│ Form fields │ ← Dark green ✓ 6681└──────────────┘ 6682``` 6683 6684### Complete Examples 6685 6686**Matrix Theme**: 6687``` 6688Task Checkbox: 6689☑ Checked → Green checkmark, green bg 6690☐ Unchecked → Green border, dark green bg ✓ 6691 6692Past Events Toggle: 6693▶ Past Events (3) 6694─────────────────── Green border ✓ 6695 6696Edit Dialog: 6697All sections dark green ✓ 6698No white anywhere ✓ 6699``` 6700 6701**Purple Theme**: 6702``` 6703Task Checkbox: 6704☑ Checked → Purple checkmark, purple bg 6705☐ Unchecked → Purple border, dark purple bg ✓ 6706 6707Past Events Toggle: 6708▶ Past Events (3) 6709─────────────────── Purple border ✓ 6710 6711Edit Dialog: 6712All sections dark purple ✓ 6713``` 6714 6715**Professional Theme**: 6716``` 6717Task Checkbox: 6718☑ Checked → Blue checkmark, white bg 6719☐ Unchecked → Gray border, white bg ✓ 6720 6721Past Events Toggle: 6722▶ Past Events (3) 6723─────────────────── Gray border ✓ 6724 6725Edit Dialog: 6726All sections light ✓ 6727``` 6728 6729**Pink Theme**: 6730``` 6731Task Checkbox: 6732☑ Checked → Pink checkmark, pink bg ✨ 6733☐ Unchecked → Pink border, dark pink bg ✓ 6734 6735Past Events Toggle: 6736▶ Past Events (3) 6737─────────────────── Pink border 6738 6739Edit Dialog: 6740All sections dark pink ✓ 6741``` 6742 6743### Checkbox Visual 6744 6745**Matrix - Unchecked**: 6746``` 6747┌─────┐ 6748│ │ ← Dark green background 6749│ │ Green border 6750└─────┘ 6751``` 6752 6753**Matrix - Checked**: 6754``` 6755┌─────┐ 6756│ ✓ │ ← Dark green background 6757│ │ Green checkmark 6758└─────┘ 6759``` 6760 6761### Past Events Border 6762 6763**Before**: 6764``` 6765▶ Past Events (3) 6766─────────────────── White line ✗ 6767``` 6768 6769**After**: 6770``` 6771▶ Past Events (3) 6772─────────────────── Green line ✓ (Matrix) 6773 Purple line ✓ (Purple) 6774 Gray line ✓ (Professional) 6775 Pink line ✓ (Pink) 6776``` 6777 6778### Form Field Coverage 6779 6780**All sections themed**: 6781- ✅ Title field 6782- ✅ Namespace field 6783- ✅ Description field 6784- ✅ **Date row** ← v4.8.8! 6785- ✅ **Checkbox sections** ← v4.8.8! 6786- ✅ **Recurring options** ← v4.8.8! 6787- ✅ **Time row** ← v4.8.8! 6788- ✅ **Color row** ← v4.8.8! 6789- ✅ Button footer 6790 6791**Every div has background!** ✓ 6792 6793### ABSOLUTE PERFECTION 6794 6795**Not a single white pixel**: 6796- ✅ No white checkboxes 6797- ✅ No white borders 6798- ✅ No white backgrounds 6799- ✅ No white sections 6800- ✅ No white lines 6801- ✅ No white anything 6802 6803**100% PERFECT THEMING!** ✨ 6804 6805## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 6806 6807### Fixed: Checkbox Section Backgrounds Themed 6808- **Fixed:** Repeating Event section background 6809- **Fixed:** Task checkbox section background 6810- **Result:** No white backgrounds in dialog! 6811 6812### Fixed: Unchecked Task Checkboxes Themed 6813- **Fixed:** Added CSS for checkbox backgrounds 6814- **Fixed:** Unchecked boxes show theme colors 6815- **Result:** No white checkboxes! 6816 6817### Fixed: Day Popup Dialog Fully Themed 6818- **Fixed:** Popup container, header, body themed 6819- **Fixed:** Event items in popup themed 6820- **Fixed:** Add Event button themed 6821- **Fixed:** Footer section themed 6822- **Result:** Perfect popup theming! 6823 6824### All Changes 6825 6826**1. Checkbox Section Backgrounds**: 6827 6828**Before**: 6829```html 6830<div class="form-field-checkbox"> 6831<!-- White background ✗ --> 6832``` 6833 6834**After**: 6835```php 6836<div class="form-field-checkbox" 6837 style="background: $bg !important;"> 6838<!-- Themed ✓ --> 6839``` 6840 6841**2. Checkbox Background CSS**: 6842 6843**Added to style block**: 6844```css 6845.task-checkbox { 6846 background-color: $cell_bg !important; 6847 border: 2px solid $grid_border !important; 6848} 6849``` 6850 6851**3. Day Popup Theming**: 6852 6853**Container**: 6854```javascript 6855style="background: $bg !important; 6856 border: 2px solid $border !important; 6857 box-shadow: 0 0 20px $shadow !important;" 6858``` 6859 6860**Header**: 6861```javascript 6862style="background: $header_bg !important; 6863 color: $text_primary !important; 6864 border-bottom: 1px solid $border !important;" 6865``` 6866 6867**Footer**: 6868```javascript 6869style="background: $bg !important; 6870 border-top: 1px solid $grid_border !important;" 6871``` 6872 6873**Add Event Button**: 6874```javascript 6875style="background: $border !important; 6876 color: $bg !important; 6877 border-color: $border !important;" 6878``` 6879 6880**Event Items**: 6881```javascript 6882style="background: $cell_bg !important; 6883 border: 1px solid $grid_border !important;" 6884``` 6885 6886### Before vs After 6887 6888**BEFORE (v4.8.6)**: 6889``` 6890Edit Dialog: 6891┌──────────────────┐ 6892│ ☑ Repeating Event│ ← White background ✗ 6893├──────────────────┤ 6894│ ☑ Task checkbox │ ← White background ✗ 6895└──────────────────┘ 6896 6897Day Popup: 6898┌──────────────────┐ 6899│ Monday, Feb 8 │ ← White ✗ 6900├──────────────────┤ 6901│ Team Meeting │ ← White ✗ 6902│ 2:00 PM │ 6903├──────────────────┤ 6904│ [+ Add Event] │ ← White ✗ 6905└──────────────────┘ 6906 6907Task checkbox: ☐ ← White ✗ 6908``` 6909 6910**AFTER (v4.8.7)**: 6911``` 6912Edit Dialog (Matrix): 6913┌──────────────────┐ 6914│ ☑ Repeating Event│ ← Dark green ✓ 6915├──────────────────┤ 6916│ ☑ Task checkbox │ ← Dark green ✓ 6917└──────────────────┘ 6918 6919Day Popup (Matrix): 6920┌──────────────────┐ 6921│ Monday, Feb 8 │ ← Dark green ✓ 6922├──────────────────┤ 6923│ Team Meeting │ ← Dark green ✓ 6924│ 2:00 PM │ 6925├──────────────────┤ 6926│ [+ Add Event] │ ← Green button ✓ 6927└──────────────────┘ 6928 6929Task checkbox: ☑ ← Green ✓ 6930``` 6931 6932### Complete Examples 6933 6934**Matrix Dialog**: 6935``` 6936┌──────────────────────────┐ 6937│ ✏️ Edit Event │ 6938├──────────────────────────┤ 6939│ Title: [_________] │ 6940│ Date: [__________] │ 6941│ │ 6942│ ☑ Repeating Event │ ← Dark green bg 6943├──────────────────────────┤ 6944│ ☑ Task checkbox │ ← Dark green bg 6945├──────────────────────────┤ 6946│ [Cancel] [ Save] │ 6947└──────────────────────────┘ 6948 6949All sections themed! ✓ 6950``` 6951 6952**Matrix Day Popup**: 6953``` 6954┌──────────────────────────┐ 6955│ Monday, February 8, 2026 │ ← Green header 6956├──────────────────────────┤ 6957│ ┌──────────────────────┐ │ 6958│ │ Team Meeting │ │ ← Dark green 6959│ │ 2:00 PM │ │ 6960│ └──────────────────────┘ │ 6961│ ┌──────────────────────┐ │ 6962│ │ Code Review │ │ ← Dark green 6963│ │ 4:00 PM │ │ 6964│ └──────────────────────┘ │ 6965├──────────────────────────┤ 6966│ [+ Add Event] │ ← Green button 6967└──────────────────────────┘ 6968``` 6969 6970**Purple Day Popup**: 6971``` 6972┌──────────────────────────┐ 6973│ Monday, February 8, 2026 │ ← Purple header 6974├──────────────────────────┤ 6975│ ┌──────────────────────┐ │ 6976│ │ Team Meeting │ │ ← Dark purple 6977│ │ 2:00 PM │ │ 6978│ └──────────────────────┘ │ 6979├──────────────────────────┤ 6980│ [+ Add Event] │ ← Purple button 6981└──────────────────────────┘ 6982``` 6983 6984**Professional Day Popup**: 6985``` 6986┌──────────────────────────┐ 6987│ Monday, February 8, 2026 │ ← Light header 6988├──────────────────────────┤ 6989│ ┌──────────────────────┐ │ 6990│ │ Team Meeting │ │ ← White 6991│ │ 2:00 PM │ │ 6992│ └──────────────────────┘ │ 6993├──────────────────────────┤ 6994│ [+ Add Event] │ ← Blue button 6995└──────────────────────────┘ 6996``` 6997 6998**Pink Day Popup**: 6999``` 7000┌──────────────────────────┐ 7001│ Monday, February 8, 2026 │ ← Pink header ✨ 7002├──────────────────────────┤ 7003│ ┌──────────────────────┐ │ 7004│ │ Team Meeting │ │ ← Dark pink 7005│ │ 2:00 PM │ │ 7006│ └──────────────────────┘ │ 7007├──────────────────────────┤ 7008│ [+ Add Event] │ ← Pink button 7009└──────────────────────────┘ 7010``` 7011 7012### Checkbox Theming 7013 7014**Unchecked boxes now themed**: 7015``` 7016Matrix: 7017☐ → Dark green bg, green border ✓ 7018 7019Purple: 7020☐ → Dark purple bg, purple border ✓ 7021 7022Professional: 7023☐ → White bg, gray border ✓ 7024 7025Pink: 7026☐ → Dark pink bg, pink border ✓ 7027``` 7028 7029### Complete Coverage 7030 7031**Edit Dialog - All Sections**: 7032- ✅ Header 7033- ✅ All inputs 7034- ✅ All labels 7035- ✅ **Checkbox sections** ← v4.8.7! 7036- ✅ Recurring options 7037- ✅ Button footer 7038- ✅ All checkboxes (checked & unchecked) 7039 7040**Day Popup - All Elements**: 7041- ✅ **Popup container** ← v4.8.7! 7042- ✅ **Header** ← v4.8.7! 7043- ✅ **Body** ← v4.8.7! 7044- ✅ **Event items** ← v4.8.7! 7045- ✅ **Namespace badges** ← v4.8.7! 7046- ✅ **Footer** ← v4.8.7! 7047- ✅ **Add Event button** ← v4.8.7! 7048- ✅ **No events message** ← v4.8.7! 7049 7050**Absolutely every dialog element themed!** ✨ 7051 7052### Perfect Theming Achievement 7053 7054**Every UI component in entire plugin**: 7055- ✅ Calendar grid 7056- ✅ Sidebar widget 7057- ✅ Event list 7058- ✅ Search bar 7059- ✅ Event boxes 7060- ✅ Edit dialog (complete) 7061- ✅ **Day popup** ← v4.8.7! 7062- ✅ Month picker 7063- ✅ All text 7064- ✅ All buttons 7065- ✅ All inputs 7066- ✅ **All checkboxes** ← v4.8.7! 7067- ✅ All borders 7068- ✅ All badges 7069- ✅ All backgrounds 7070 7071**NO WHITE ANYWHERE!** 7072 7073**100% COMPLETE THEMING ACHIEVED!** ✨ 7074 7075## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 7076 7077### Fixed: Dialog Checkbox Sections Themed 7078- **Fixed:** Recurring options section background themed 7079- **Fixed:** Section has themed border accent 7080- **Result:** No white sections in dialog! 7081 7082### Fixed: Dialog Button Section Themed 7083- **Fixed:** Button area background themed 7084- **Fixed:** Top border separator themed 7085- **Result:** Complete dialog theming! 7086 7087### Fixed: Event Box Borders Themed 7088- **Fixed:** Top, right, bottom borders now themed 7089- **Fixed:** Left border remains event color 7090- **Result:** Perfect event boxes! 7091 7092### All Changes 7093 7094**1. Recurring Options Section**: 7095 7096**Before**: 7097```html 7098<div class="recurring-options" style="display:none;"> 7099<!-- White background ✗ --> 7100``` 7101 7102**After**: 7103```php 7104<div class="recurring-options" 7105 style="display:none; 7106 background: $bg !important; 7107 padding: 8px; 7108 border-left: 2px solid $border; 7109 margin-left: 4px;"> 7110<!-- Themed with accent border ✓ --> 7111``` 7112 7113**2. Dialog Actions Section**: 7114 7115**Before**: 7116```html 7117<div class="dialog-actions-sleek"> 7118<!-- White background ✗ --> 7119``` 7120 7121**After**: 7122```php 7123<div class="dialog-actions-sleek" 7124 style="background: $bg !important; 7125 border-top: 1px solid $grid_border !important;"> 7126<!-- Themed with separator ✓ --> 7127``` 7128 7129**3. Event Box Borders**: 7130 7131**Before**: 7132```php 7133border-left-color: $event_color; 7134<!-- Only left border colored ✗ --> 7135``` 7136 7137**After**: 7138```php 7139border-left-color: $event_color; 7140border-top: 1px solid $grid_border !important; 7141border-right: 1px solid $grid_border !important; 7142border-bottom: 1px solid $grid_border !important; 7143<!-- All borders themed! ✓ --> 7144``` 7145 7146### Before vs After 7147 7148**BEFORE (v4.8.5)**: 7149``` 7150Dialog: 7151┌────────────────┐ 7152│ ☑ Repeating │ 7153├────────────────┤ ← White section ✗ 7154│ Repeat: Daily │ 7155│ Until: [____] │ 7156├────────────────┤ 7157│ [Cancel] [Save]│ ← White footer ✗ 7158└────────────────┘ 7159 7160Event Box: 7161┌────────────┐ 7162│Team Meeting│ ← White borders ✗ 7163│2:00 PM │ 7164└────────────┘ 7165``` 7166 7167**AFTER (v4.8.6)**: 7168``` 7169Matrix Dialog: 7170┌────────────────┐ 7171│ ☑ Repeating │ 7172├────────────────┤ ← Dark green ✓ 7173│ Repeat: Daily │ Green accent border 7174│ Until: [____] │ 7175├────────────────┤ 7176│ [Cancel] [Save]│ ← Dark green ✓ 7177└────────────────┘ 7178 7179Matrix Event Box: 7180┌────────────┐ 7181│Team Meeting│ ← Green borders ✓ 7182│2:00 PM │ 7183└────────────┘ 7184``` 7185 7186### Dialog Section Examples 7187 7188**Matrix Theme**: 7189``` 7190┌──────────────────────────┐ 7191│ ✏️ Edit Event │ 7192├──────────────────────────┤ 7193│ ☑ Repeating Event │ 7194├║─────────────────────────┤ Green accent 7195│║ Repeat Every: Daily │ Dark green bg 7196│║ Repeat Until: [_____] │ 7197└──────────────────────────┘ 7198 [Cancel] [ Save] ← Dark green bg 7199──────────────────────────── Green border 7200``` 7201 7202**Purple Theme**: 7203``` 7204┌──────────────────────────┐ 7205│ ☑ Repeating Event │ 7206├║─────────────────────────┤ Purple accent 7207│║ Repeat options... │ Dark purple bg 7208└──────────────────────────┘ 7209 [Cancel] [ Save] ← Dark purple bg 7210──────────────────────────── Purple border 7211``` 7212 7213**Professional Theme**: 7214``` 7215┌──────────────────────────┐ 7216│ ☑ Repeating Event │ 7217├║─────────────────────────┤ Blue accent 7218│║ Repeat options... │ Light bg 7219└──────────────────────────┘ 7220 [Cancel] [ Save] ← Light bg 7221──────────────────────────── Gray border 7222``` 7223 7224**Pink Theme**: 7225``` 7226┌──────────────────────────┐ 7227│ ☑ Repeating Event ✨ │ 7228├║─────────────────────────┤ Pink accent 7229│║ Repeat options... │ Dark pink bg 7230└──────────────────────────┘ 7231 [Cancel] [ Save] ← Dark pink bg 7232──────────────────────────── Pink border 7233``` 7234 7235### Event Box Border Visual 7236 7237**Before (v4.8.5)**: 7238``` 7239Left border only: 7240█ Team Meeting 7241█ 2:00 PM 7242█ [Edit] [Delete] 7243 7244Only event color on left ✗ 7245White on other 3 sides ✗ 7246``` 7247 7248**After (v4.8.6)**: 7249``` 7250All borders themed: 7251┌─────────────┐ 7252█Team Meeting │ ← Top: themed 7253█2:00 PM │ ← Right: themed 7254█[Edit][Del] │ ← Bottom: themed 7255└─────────────┘ 7256 7257Left: Event color ✓ 7258Other 3: Theme grid_border ✓ 7259``` 7260 7261### Matrix Event Box: 7262``` 7263┌─────────────┐ Green border 7264│Team Meeting │ 7265│2:00 PM │ 7266└─────────────┘ Green border 7267↑ 7268Green left bar 7269``` 7270 7271### Purple Event Box: 7272``` 7273┌─────────────┐ Purple border 7274│Team Meeting │ 7275│2:00 PM │ 7276└─────────────┘ Purple border 7277↑ 7278Purple left bar 7279``` 7280 7281### Professional Event Box: 7282``` 7283┌─────────────┐ Gray border 7284│Team Meeting │ 7285│2:00 PM │ 7286└─────────────┘ Gray border 7287↑ 7288Event color left bar 7289``` 7290 7291### Complete Dialog Coverage 7292 7293**All sections themed**: 7294- ✅ Dialog header 7295- ✅ Form inputs 7296- ✅ Checkbox labels 7297- ✅ **Recurring options** ← v4.8.6! 7298- ✅ **Button section** ← v4.8.6! 7299- ✅ All labels 7300- ✅ All buttons 7301 7302**No white sections!** ✓ 7303 7304### Complete Event Box Coverage 7305 7306**All borders themed**: 7307- ✅ Left border (event color) 7308- ✅ **Top border** ← v4.8.6! 7309- ✅ **Right border** ← v4.8.6! 7310- ✅ **Bottom border** ← v4.8.6! 7311- ✅ Background 7312- ✅ Text 7313 7314**Perfect box outline!** ✓ 7315 7316### Visual Perfection 7317 7318**Matrix theme event list**: 7319``` 7320┌─────────────┐ 7321│Team Meeting │ ← Green box 7322│2:00 PM │ 7323└─────────────┘ 7324┌─────────────┐ 7325│Code Review │ ← Green box 7326│4:00 PM │ 7327└─────────────┘ 7328 7329All borders green! ✓ 7330``` 7331 7332**ABSOLUTE PERFECT THEMING!** ✨ 7333 7334## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 7335 7336### Fixed: Event Dialog Fully Themed 7337- **Fixed:** Dialog background, header, inputs all themed 7338- **Fixed:** All labels, checkboxes, selects themed 7339- **Fixed:** Save and Cancel buttons themed 7340- **Result:** Dialog matches theme perfectly! 7341 7342### Fixed: Sidebar Event Borders Properly Themed 7343- **Fixed:** Event divider borders use grid_border color 7344- **Fixed:** Clean, subtle themed dividers 7345- **Result:** No more white borders in sidebar! 7346 7347### All Changes 7348 7349**1. Event Dialog Theming**: 7350 7351**Dialog container**: 7352```php 7353background: $themeStyles['bg'] !important; 7354border: 2px solid $themeStyles['border'] !important; 7355box-shadow: 0 0 20px $shadow !important; 7356``` 7357 7358**Dialog header**: 7359```php 7360background: $themeStyles['header_bg'] !important; 7361color: $themeStyles['text_primary'] !important; 7362border-bottom: 1px solid $border !important; 7363``` 7364 7365**All form inputs** (text, date, select, textarea): 7366```php 7367background: $themeStyles['cell_bg'] !important; 7368color: $themeStyles['text_primary'] !important; 7369border-color: $themeStyles['grid_border'] !important; 7370``` 7371 7372**All labels**: 7373```php 7374color: $themeStyles['text_primary'] !important; 7375``` 7376 7377**Checkboxes**: 7378```php 7379accent-color: $themeStyles['border'] !important; 7380``` 7381 7382**Buttons**: 7383```php 7384// Cancel button: 7385background: $cell_bg !important; 7386color: $text_primary !important; 7387 7388// Save button: 7389background: $border !important; 7390color: $bg !important; (or white for professional) 7391``` 7392 7393**2. Sidebar Event Borders**: 7394 7395**Before**: 7396```php 7397border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 7398``` 7399 7400**After**: 7401```php 7402borderColor = $themeStyles['grid_border']; 7403border-bottom: 1px solid $borderColor !important; 7404``` 7405 7406### Before vs After 7407 7408**BEFORE (v4.8.4)**: 7409``` 7410Event Dialog: 7411┌────────────────┐ 7412│ Add Event │ ← White background ✗ 7413│ Title: [_____] │ ← White inputs ✗ 7414│ Date: [_____] │ 7415│ [Cancel] [Save]│ ← Default buttons ✗ 7416└────────────────┘ 7417 7418Sidebar Events: 7419Event 1 ──────── ← White border ✗ 7420Event 2 ──────── ← White border ✗ 7421``` 7422 7423**AFTER (v4.8.5)**: 7424``` 7425Event Dialog (Matrix): 7426┌────────────────┐ 7427│ Add Event │ ← Dark green background ✓ 7428│ Title: [_____] │ ← Dark green inputs ✓ 7429│ Date: [_____] │ ← Green text ✓ 7430│ [Cancel] [Save]│ ← Themed buttons ✓ 7431└────────────────┘ 7432 7433Sidebar Events (Matrix): 7434Event 1 ──────── ← Green border ✓ 7435Event 2 ──────── ← Green border ✓ 7436``` 7437 7438### Dialog Examples by Theme 7439 7440**Matrix Dialog**: 7441``` 7442┌──────────────────────────┐ 7443│ ✏️ Edit Event │ ← Dark green header 7444├──────────────────────────┤ 7445│ Title │ ← Green labels 7446│ [Team Meeting________] │ ← Dark green input 7447│ │ 7448│ Start Date │ 7449│ [2026-02-08__] │ ← Dark green input 7450│ │ 7451│ Start Time │ 7452│ [2:00 PM ▼] │ ← Green select 7453│ │ 7454│ ☑ Repeating Event │ ← Green checkbox 7455│ │ 7456│ [Cancel] [ Save] │ ← Themed buttons 7457└──────────────────────────┘ 7458 7459Everything green! ✓ 7460``` 7461 7462**Purple Dialog**: 7463``` 7464┌──────────────────────────┐ 7465│ ✏️ Edit Event │ ← Dark purple header 7466├──────────────────────────┤ 7467│ [Inputs_______________] │ ← Dark purple inputs 7468│ ☑ Checkboxes │ ← Purple accent 7469│ [Cancel] [ Save] │ ← Purple buttons 7470└──────────────────────────┘ 7471``` 7472 7473**Professional Dialog**: 7474``` 7475┌──────────────────────────┐ 7476│ ✏️ Edit Event │ ← Light gradient header 7477├──────────────────────────┤ 7478│ [Inputs_______________] │ ← White inputs 7479│ ☑ Checkboxes │ ← Blue accent 7480│ [Cancel] [ Save] │ ← Blue save button 7481└──────────────────────────┘ 7482``` 7483 7484**Pink Dialog**: 7485``` 7486┌──────────────────────────┐ 7487│ ✏️ Edit Event │ ← Dark pink header ✨ 7488├──────────────────────────┤ 7489│ [Inputs_______________] │ ← Dark pink inputs 7490│ ☑ Checkboxes │ ← Pink accent 7491│ [Cancel] [ Save] │ ← Pink buttons 7492└──────────────────────────┘ 7493``` 7494 7495### Complete Dialog Element Coverage 7496 7497**All form elements themed**: 7498- ✅ Dialog container 7499- ✅ Dialog header 7500- ✅ Close button (×) 7501- ✅ Title input 7502- ✅ Namespace search 7503- ✅ Namespace dropdown 7504- ✅ Description textarea 7505- ✅ Start date input 7506- ✅ End date input 7507- ✅ Recurring checkbox 7508- ✅ Recurrence type select 7509- ✅ Recurrence end date 7510- ✅ Start time select 7511- ✅ End time select 7512- ✅ Color select 7513- ✅ Custom color picker 7514- ✅ Task checkbox 7515- ✅ All labels 7516- ✅ Cancel button 7517- ✅ Save button 7518 7519**Every single dialog element themed!** 7520 7521### Sidebar Border Example 7522 7523**Matrix Sidebar**: 7524``` 7525┌────────────────┐ 7526│ Today │ ← Green section header 7527├────────────────┤ 7528│ Team Meeting │ 7529│ 2:00 PM │ 7530├────────────────┤ ← Green border (grid_border) 7531│ Code Review │ 7532│ 4:00 PM │ 7533├────────────────┤ ← Green border 7534│ Stand-up │ 7535│ All day │ 7536└────────────────┘ 7537 7538Subtle green dividers! ✓ 7539``` 7540 7541### Complete Achievement 7542 7543**Every UI element themed**: 7544- ✅ Calendar 7545- ✅ Sidebar widget 7546- ✅ Event list 7547- ✅ Search bar 7548- ✅ **Event dialog** ← v4.8.5! 7549- ✅ Month picker 7550- ✅ **Sidebar dividers** ← v4.8.5! 7551- ✅ All text 7552- ✅ All inputs 7553- ✅ All buttons 7554- ✅ All borders 7555- ✅ All checkboxes 7556 7557**ABSOLUTE COMPLETE THEMING!** ✨ 7558 7559## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 7560 7561### Fixed: Professional Theme Background Consistency 7562- **Fixed:** Container and event backgrounds now match sidebar 7563- **Fixed:** Lighter, cleaner appearance 7564- **Fixed:** Better contrast and readability 7565- **Result:** Professional theme looks cohesive! 7566 7567### The Problem 7568 7569**v4.8.3 Professional theme**: 7570``` 7571Sidebar: Light background (#f5f7fa) 7572Calendar: Medium background (#e8ecf1) ← Didn't match! 7573Events: Light background (#f5f7fa) 7574 7575Inconsistent! ✗ 7576``` 7577 7578### The Fix 7579 7580**Updated Professional theme colors for consistency**: 7581 7582```php 7583// Before: 7584'bg' => '#e8ecf1', // Medium gray-blue 7585'cell_bg' => '#f5f7fa', // Very light 7586'grid_bg' => '#d5dbe3', // Medium-dark 7587 7588// After: 7589'bg' => '#f5f7fa', // Very light (matches sidebar) 7590'cell_bg' => '#ffffff', // Pure white (clean) 7591'grid_bg' => '#e8ecf1', // Subtle contrast 7592'grid_border' => '#d0d7de', // Softer borders 7593``` 7594 7595### Before vs After 7596 7597**BEFORE (v4.8.3)**: 7598``` 7599Professional Theme: 7600┌────────────────┐ 7601│ Calendar │ ← Medium gray (#e8ecf1) 7602│ ┌────────────┐ │ 7603│ │ Event │ │ ← Light (#f5f7fa) 7604│ └────────────┘ │ 7605└────────────────┘ 7606 7607Sidebar: 7608┌────────────────┐ 7609│ Widget │ ← Light (#f5f7fa) 7610└────────────────┘ 7611 7612Backgrounds don't match! ✗ 7613``` 7614 7615**AFTER (v4.8.4)**: 7616``` 7617Professional Theme: 7618┌────────────────┐ 7619│ Calendar │ ← Light (#f5f7fa) 7620│ ┌────────────┐ │ 7621│ │ Event │ │ ← White (#ffffff) 7622│ └────────────┘ │ 7623└────────────────┘ 7624 7625Sidebar: 7626┌────────────────┐ 7627│ Widget │ ← Light (#f5f7fa) 7628└────────────────┘ 7629 7630Perfect match! ✓ 7631``` 7632 7633### New Professional Theme Colors 7634 7635**Backgrounds**: 7636- Container: `#f5f7fa` (light blue-gray) 7637- Events: `#ffffff` (pure white) 7638- Grid: `#e8ecf1` (subtle contrast) 7639 7640**Text**: 7641- Primary: `#2c3e50` (dark blue-gray) 7642- Bright: `#4a90e2` (blue accent) 7643- Dim: `#7f8c8d` (medium gray) 7644 7645**Borders**: 7646- Main: `#4a90e2` (blue) 7647- Grid: `#d0d7de` (soft gray) 7648 7649**Header**: 7650- Gradient: `#ffffff` → `#f5f7fa` 7651 7652### Visual Example 7653 7654**Professional Theme Now**: 7655``` 7656┌─────────────────────────────┐ 7657│ February 2026 │ ← White to light gradient 7658├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 7659│S│M│T│W│T│F│S│ │ ← Light background 7660├─┼─┼─┼─┼─┼─┼─┤ │ 7661│ │ │1│2│3│4│5│ Event List │ ← White events 7662│ │ │ │ │ │ │ │ ┌───────────┐ │ 7663│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 7664└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 7665 7666Clean, professional look! ✓ 7667``` 7668 7669### Comparison with Other Themes 7670 7671**Matrix** (dark): 7672- Container: #242424 (dark green) 7673- Events: #242424 (dark green) 7674- Consistent dark theme ✓ 7675 7676**Purple** (dark): 7677- Container: #1a0d14 (dark purple) 7678- Events: #2a2030 (dark purple) 7679- Consistent dark theme ✓ 7680 7681**Professional** (light): 7682- Container: #f5f7fa (light blue) 7683- Events: #ffffff (white) 7684- Consistent light theme ✓ 7685 7686**Pink** (dark): 7687- Container: #1a0d14 (dark pink) 7688- Events: #1a0d14 (dark pink) 7689- Consistent dark theme ✓ 7690 7691**All themes now consistent!** 7692 7693### Better Contrast 7694 7695**Professional theme improvements**: 7696 7697**Readability**: 7698- Dark text (#2c3e50) on white/light backgrounds ✓ 7699- Excellent contrast ratio ✓ 7700- Easy on the eyes ✓ 7701 7702**Visual hierarchy**: 7703- White events pop against light container ✓ 7704- Blue accents stand out ✓ 7705- Clean, modern look ✓ 7706 7707**Professional appearance**: 7708- Lighter = more corporate/business feel ✓ 7709- Clean whites = premium quality ✓ 7710- Subtle grays = sophisticated ✓ 7711 7712### Complete Theme Consistency 7713 7714**All themes now have matching backgrounds**: 7715 7716**Matrix**: 7717- Sidebar & Calendar both dark green ✓ 7718 7719**Purple**: 7720- Sidebar & Calendar both dark purple ✓ 7721 7722**Professional**: 7723- Sidebar & Calendar both light ✓ (v4.8.4!) 7724 7725**Pink**: 7726- Sidebar & Calendar both dark pink ✓ 7727 7728**Perfect visual unity across all views!** ✨ 7729 7730## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 7731 7732### Fixed: Bold Text in Descriptions Themed 7733- **Fixed:** **Bold text** now uses theme primary color 7734- **Fixed:** Both `**text**` and `__text__` syntax themed 7735- **Result:** Bold text matches theme! 7736 7737### Fixed: Search Bar Fully Themed 7738- **Fixed:** Search input has !important on all styles 7739- **Fixed:** Icon and placeholder text themed 7740- **Result:** Search bar perfectly themed! 7741 7742### Fixed: Sidebar Event Boxes Themed 7743- **Fixed:** Event borders in sidebar now use theme grid_border color 7744- **Fixed:** Borders have !important flag 7745- **Result:** Sidebar boxes match theme! 7746 7747### All Changes 7748 7749**1. Bold Text Styling**: 7750 7751**Before**: 7752```html 7753<strong>Bold text</strong> ← Default black 7754``` 7755 7756**After**: 7757```php 7758<strong style="color: $text_primary !important; font-weight:bold;"> 7759 Bold text 7760</strong> 7761 7762Matrix: Green bold ✓ 7763Purple: Lavender bold ✓ 7764Professional: Dark bold ✓ 7765Pink: Pink bold ✓ 7766``` 7767 7768**2. Search Bar**: 7769 7770**Before**: 7771```php 7772style="background: $bg; color: $text;" 7773Could be overridden by CSS 7774``` 7775 7776**After**: 7777```php 7778style="background: $bg !important; 7779 color: $text_primary !important; 7780 border-color: $grid_border !important;" 7781 7782Cannot be overridden! ✓ 7783``` 7784 7785**3. Sidebar Event Boxes**: 7786 7787**Before**: 7788```php 7789$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 7790``` 7791 7792**After**: 7793```php 7794$borderColor = $themeStyles['grid_border']; // From theme 7795border-bottom: 1px solid $borderColor !important; 7796 7797Matrix: Green borders ✓ 7798Purple: Purple borders ✓ 7799Professional: Gray borders ✓ 7800Pink: Pink borders ✓ 7801``` 7802 7803### Before vs After 7804 7805**BEFORE (v4.8.2)**: 7806``` 7807Event description: 7808"Please review **Q1 Goals** carefully" 7809 ↑ 7810 Black bold ✗ 7811 7812Search bar: 7813[ Search...] ← Gray placeholder ✗ 7814 7815Sidebar: 7816┌────────────┐ 7817│ Event 1 │ 7818├────────────┤ ← Gray border ✗ 7819│ Event 2 │ 7820└────────────┘ 7821``` 7822 7823**AFTER (v4.8.3)**: 7824``` 7825Matrix Theme: 7826 7827Event description: 7828"Please review **Q1 Goals** carefully" 7829 ↑ 7830 Green bold ✓ 7831 7832Search bar: 7833[ Search...] ← Green themed ✓ 7834 7835Sidebar: 7836┌────────────┐ 7837│ Event 1 │ 7838├────────────┤ ← Green border ✓ 7839│ Event 2 │ 7840└────────────┘ 7841``` 7842 7843### Examples by Theme 7844 7845**Matrix Theme**: 7846``` 7847Description: 7848"Check **important notes** and links" 7849 ↑ 7850 Green bold 7851 7852Sidebar boxes: 7853Event 1 7854───────── Green border 7855Event 2 7856───────── Green border 7857``` 7858 7859**Purple Theme**: 7860``` 7861Description: 7862"Review **agenda items** before meeting" 7863 ↑ 7864 Lavender bold 7865 7866Sidebar boxes: 7867Event 1 7868───────── Purple border 7869Event 2 7870───────── Purple border 7871``` 7872 7873**Professional Theme**: 7874``` 7875Description: 7876"Update **quarterly reports** by Friday" 7877 ↑ 7878 Dark bold 7879 7880Sidebar boxes: 7881Event 1 7882───────── Gray border 7883Event 2 7884───────── Gray border 7885``` 7886 7887**Pink Theme**: 7888``` 7889Description: 7890"Don't forget **party supplies** ✨" 7891 ↑ 7892 Pink bold 7893 7894Sidebar boxes: 7895Event 1 7896───────── Pink border 7897Event 2 ✨ 7898───────── Pink border 7899``` 7900 7901### Complete Formatting Coverage 7902 7903**Text formatting themed**: 7904- ✅ Regular text 7905- ✅ **Bold text** ← NEW! 7906- ✅ Links 7907- ✅ Italic text (inherits) 7908- ✅ Code (inherits) 7909 7910**UI elements themed**: 7911- ✅ Search bar ← Enhanced! 7912- ✅ Search icon ← Enhanced! 7913- ✅ Search placeholder ← Enhanced! 7914- ✅ Sidebar borders ← NEW! 7915- ✅ Event borders 7916- ✅ Badges 7917- ✅ Buttons 7918 7919**Every element perfectly themed!** 7920 7921### Search Bar Coverage 7922 7923**All aspects themed**: 7924- Background: Theme cell_bg ✓ 7925- Text color: Theme text_primary ✓ 7926- Border: Theme grid_border ✓ 7927- Placeholder: Inherits text color ✓ 7928- Icon (): In placeholder ✓ 7929- Clear button (✕): Themed ✓ 7930 7931**Cannot be overridden!** (all have !important) 7932 7933### Sidebar Event Box Styling 7934 7935**Consistent borders**: 7936``` 7937Matrix: 7938╔════════════╗ 7939║ Event 1 ║ 7940╟────────────╢ ← grid_border color 7941║ Event 2 ║ 7942╚════════════╝ 7943 7944All themes match perfectly! ✓ 7945``` 7946 7947### Complete Theme Achievement 7948 7949**Every single element themed**: 7950- ✅ Backgrounds 7951- ✅ Text (regular) 7952- ✅ Text (bold) ← v4.8.3! 7953- ✅ Links 7954- ✅ Badges 7955- ✅ Buttons 7956- ✅ Checkboxes 7957- ✅ Icons 7958- ✅ Borders 7959- ✅ Search bar ← Enhanced v4.8.3! 7960- ✅ Sidebar boxes ← v4.8.3! 7961- ✅ Today marker 7962- ✅ Calendar grid 7963- ✅ Event panels 7964 7965**ABSOLUTE PERFECTION!** ✨ 7966 7967## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 7968 7969### Fixed: Links in Descriptions Now Themed 7970- **Fixed:** All links in event descriptions now use theme color 7971- **Fixed:** DokuWiki links [[page|text]] themed 7972- **Fixed:** Markdown links [text](url) themed 7973- **Fixed:** Plain URLs themed 7974- **Result:** Links match theme perfectly! 7975 7976### The Problem 7977 7978**v4.8.1 behavior**: 7979``` 7980Event description: 7981"Check out https://example.com" ← Blue default link ✗ 7982"See [[wiki:page|docs]]" ← Blue default link ✗ 7983``` 7984 7985### The Fix 7986 7987**Added inline color styling to ALL link types**: 7988 7989```php 7990// Get theme colors: 7991$linkColor = $themeStyles['border'] . ' !important'; 7992$linkStyle = ' style="color:' . $linkColor . ';"'; 7993 7994// Apply to links: 7995<a href="..." style="color: #00cc07 !important;">link</a> 7996``` 7997 7998**All link types themed**: 79991. DokuWiki syntax: `[[page|text]]` 80002. Markdown syntax: `[text](url)` 80013. Plain URLs: `https://example.com` 8002 8003### Before vs After 8004 8005**BEFORE (v4.8.1)**: 8006``` 8007Matrix Theme Description: 8008"Visit https://example.com for more info" 8009 ↑ 8010 Blue link ✗ (doesn't match green theme) 8011``` 8012 8013**AFTER (v4.8.2)**: 8014``` 8015Matrix Theme Description: 8016"Visit https://example.com for more info" 8017 ↑ 8018 Green link ✓ (matches theme!) 8019``` 8020 8021### Link Colors by Theme 8022 8023**Matrix**: 8024- Links: Green (#00cc07) !important 8025- Matches: Border, badges, highlights 8026 8027**Purple**: 8028- Links: Purple (#9b59b6) !important 8029- Matches: Border, badges, highlights 8030 8031**Professional**: 8032- Links: Blue (#4a90e2) !important 8033- Matches: Border, badges, highlights 8034 8035**Pink**: 8036- Links: Hot Pink (#ff1493) !important 8037- Matches: Border, badges, highlights ✨ 8038 8039### Examples 8040 8041**Matrix Description with Links**: 8042``` 8043Event: Team Meeting 8044Description: 8045"Review [[wiki:q1goals|Q1 Goals]] 8046and visit https://metrics.com" 8047 8048Both links → Green ✓ 8049``` 8050 8051**Purple Description with Links**: 8052``` 8053Event: Planning Session 8054Description: 8055"Check [schedule](https://cal.com) 8056for availability" 8057 8058Link → Purple ✓ 8059``` 8060 8061**Professional Description with Links**: 8062``` 8063Event: Client Call 8064Description: 8065"Prepare [[reports|Monthly Reports]] 8066before the call" 8067 8068Link → Blue ✓ 8069``` 8070 8071**Pink Description with Links**: 8072``` 8073Event: Party Planning 8074Description: 8075"RSVP at https://party.com ✨" 8076 8077Link → Hot Pink ✓ 8078``` 8079 8080### Technical Implementation 8081 8082**Updated renderDescription() function**: 8083 8084```php 8085private function renderDescription($description, $themeStyles = null) { 8086 // Get theme 8087 if ($themeStyles === null) { 8088 $theme = $this->getSidebarTheme(); 8089 $themeStyles = $this->getSidebarThemeStyles($theme); 8090 } 8091 8092 // Create link style 8093 $linkColor = $themeStyles['border'] . ' !important'; 8094 $linkStyle = ' style="color:' . $linkColor . ';"'; 8095 8096 // Apply to all link types: 8097 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 8098} 8099``` 8100 8101### Complete Theming 8102 8103**Every text element**: 8104- ✅ Event titles 8105- ✅ Event dates 8106- ✅ Event descriptions 8107- ✅ **Links in descriptions** ← NEW! 8108- ✅ Badges 8109- ✅ Buttons 8110 8111**Every color unified!** 8112 8113### Unified Theme Experience 8114 8115**Matrix Theme**: 8116``` 8117Everything green: 8118- Text: Green ✓ 8119- Links: Green ✓ 8120- Badges: Green ✓ 8121- Borders: Green ✓ 8122- Buttons: Green ✓ 8123- Today marker: Green ✓ 8124 8125Perfect harmony! ✓ 8126``` 8127 8128**No default blue links breaking the theme!** 8129 8130### Link Types Supported 8131 8132**1. DokuWiki Syntax**: 8133``` 8134[[page|Link Text]] → Themed ✓ 8135[[page]] → Themed ✓ 8136[[page#section|Text]] → Themed ✓ 8137``` 8138 8139**2. Markdown Syntax**: 8140``` 8141[Link Text](https://url.com) → Themed ✓ 8142[Text](internal-page) → Themed ✓ 8143``` 8144 8145**3. Plain URLs**: 8146``` 8147https://example.com → Themed ✓ 8148http://site.org → Themed ✓ 8149``` 8150 8151**All links perfectly themed!** 8152 8153## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 8154 8155### Fixed: All Badges Now Themed 8156- **Fixed:** TODAY badge themed with theme color 8157- **Fixed:** PAST DUE badge uses orange (warning color) 8158- **Fixed:** Namespace badges themed 8159- **Fixed:** All badges visible and hidden 8160- **Result:** All badges match theme! 8161 8162### Fixed: Today Cell More Prominent 8163- **Fixed:** Today cell now has 2px border in theme color 8164- **Fixed:** Border added to both PHP and JavaScript 8165- **Result:** Today stands out clearly! 8166 8167### Fixed: Past Event Text Fully Themed 8168- **Fixed:** Event-info div backgrounds ensure no gray 8169- **Result:** Expanded past events completely themed! 8170 8171### All Changes 8172 8173**1. Badge Theming**: 8174 8175**TODAY Badge**: 8176```php 8177// PHP & JavaScript: 8178style="background: $themeStyles['border'] !important; 8179 color: $bg !important;" 8180 8181Matrix: Green badge 8182Purple: Purple badge 8183Professional: Blue badge with white text 8184Pink: Pink badge 8185``` 8186 8187**PAST DUE Badge** (always orange): 8188```php 8189style="background: #ff9800 !important; 8190 color: #fff !important;" 8191``` 8192 8193**Namespace Badge**: 8194```php 8195style="background: $themeStyles['border'] !important; 8196 color: $bg !important;" 8197``` 8198 8199**2. Today Cell Border**: 8200 8201**PHP**: 8202```php 8203$todayBorder = $isToday ? 8204 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 8205``` 8206 8207**JavaScript**: Same 8208 8209**Result**: Today cell has prominent colored border! 8210 8211### Before vs After 8212 8213**BEFORE (v4.8.0)**: 8214``` 8215Calendar: 8216┌─┬─┬─┬─┬─┬─┬─┐ 8217│1│2│3│4│5│6│7│ 8218│ │ │ │[8]│ │ │ ← Today: subtle background 8219└─┴─┴─┴─┴─┴─┴─┘ 8220 8221Event badges: 8222Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 8223``` 8224 8225**AFTER (v4.8.1)**: 8226``` 8227Calendar (Matrix): 8228┌─┬─┬─┬─┬─┬─┬─┐ 8229│1│2│3│4│5│6│7│ 8230│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 8231└─┴─┴─┴─┴─┴─┴─┘ 8232 8233Event badges (Matrix): 8234Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 8235``` 8236 8237### Matrix Theme Example 8238 8239**Calendar**: 8240``` 8241Today cell: 8242┌────┐ 8243│ 8 │ Dark green bg + Green 2px border 8244└────┘ 8245Very obvious! 8246``` 8247 8248**Badges**: 8249``` 8250[TODAY] ← Green bg, dark text 8251[Work] ← Green bg, dark text 8252[PAST DUE] ← Orange bg, white text 8253``` 8254 8255### Purple Theme Example 8256 8257**Calendar**: 8258``` 8259Today cell: 8260┌────┐ 8261│ 8 │ Dark purple bg + Purple 2px border 8262└────┘ 8263``` 8264 8265**Badges**: 8266``` 8267[TODAY] ← Purple bg 8268[Work] ← Purple bg 8269``` 8270 8271### Professional Theme Example 8272 8273**Calendar**: 8274``` 8275Today cell: 8276┌────┐ 8277│ 8 │ Light blue bg + Blue 2px border 8278└────┘ 8279``` 8280 8281**Badges**: 8282``` 8283[TODAY] ← Blue bg, white text 8284[Work] ← Blue bg, white text 8285``` 8286 8287### Pink Theme Example 8288 8289**Calendar**: 8290``` 8291Today cell: 8292┌────┐ 8293│ 8 │ Dark pink bg + Pink 2px border ✨ 8294└────┘ 8295``` 8296 8297**Badges**: 8298``` 8299[TODAY] ← Pink bg 8300[Work] ← Pink bg ✨ 8301``` 8302 8303### Complete Badge Coverage 8304 8305**All badges themed**: 8306- ✅ TODAY badge (theme color) 8307- ✅ PAST DUE badge (orange warning) 8308- ✅ Namespace badges (theme color) 8309- ✅ Visible events 8310- ✅ Hidden/past events 8311 8312**No gray badges anywhere!** 8313 8314### Today Cell Visual 8315 8316**Dual indicators**: 83171. Background color (theme today bg) 83182. Border (2px theme color) ← NEW! 8319 8320**Result**: Today is VERY obvious! 8321 8322**Matrix**: Green bg + Green border 8323**Purple**: Purple bg + Purple border 8324**Professional**: Light blue bg + Blue border 8325**Pink**: Pink bg + Pink border ✨ 8326 8327### Complete Theming 8328 8329**Every element themed**: 8330- ✅ Backgrounds 8331- ✅ Text colors 8332- ✅ Badges (v4.8.1!) 8333- ✅ Today marker (v4.8.1!) 8334- ✅ Checkboxes 8335- ✅ Buttons 8336- ✅ Icons 8337 8338**Absolutely everything!** ✨ 8339 8340## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 8341 8342### Fixed: All Event Backgrounds Now Themed 8343- **Fixed:** event-info div now has themed background 8344- **Fixed:** event-meta-compact div (visible) now has themed background 8345- **Fixed:** event-desc-compact div now has themed background 8346- **Fixed:** All !important flags added to prevent CSS override 8347- **Result:** Entire event item fully themed! 8348 8349### Fixed: Description Text Shows Correct Color Immediately 8350- **Fixed:** Description divs now have explicit background + color on load 8351- **Fixed:** Both visible and hidden descriptions fully styled 8352- **Result:** No more gray text on initial load! 8353 8354### The Problem 8355 8356**v4.7.9 behavior**: 8357``` 8358Expanded past event: 8359┌────────────────────────┐ 8360│ ▾ Team Meeting │ ← Themed ✓ 8361│ Mon, Feb 8 │ ← Themed ✓ 8362│ │ 8363│ [Event details] │ ← Gray background ✗ 8364│ [Description] │ ← Gray text until navigation ✗ 8365└────────────────────────┘ 8366 8367Only the date/time div was themed! 8368``` 8369 8370### The Fix 8371 8372**Added background to ALL inner divs**: 8373 8374**PHP**: 8375```php 8376// Event container: 8377style="background:' . $themeStyles['cell_bg'] . ' !important;" 8378 8379// event-info wrapper: 8380<div class="event-info" 8381 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8382 8383// event-meta-compact: 8384<div class="event-meta-compact" 8385 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 8386 8387// event-desc-compact: 8388<div class="event-desc-compact" 8389 style="background:' . $themeStyles['cell_bg'] . ' !important; 8390 color:' . $themeStyles['text_dim'] . ' !important;"> 8391``` 8392 8393**JavaScript**: Same styling applied 8394 8395### Before vs After 8396 8397**BEFORE (v4.7.9)**: 8398``` 8399Matrix Theme - Expanded Event: 8400┌────────────────────────┐ 8401│ ▾ Team Meeting │ 8402│ Mon, Feb 8 ← Green │ 8403│ │ 8404│ Details ← Gray ✗ │ 8405│ Description ← Gray ✗ │ 8406│ [✏️] [️] │ 8407└────────────────────────┘ 8408``` 8409 8410**AFTER (v4.8.0)**: 8411``` 8412Matrix Theme - Expanded Event: 8413┌────────────────────────┐ 8414│ ▾ Team Meeting │ 8415│ Mon, Feb 8 ← Green │ 8416│ │ 8417│ Details ← Green ✓│ 8418│ Description ← Green ✓│ 8419│ [✏️] [️] │ 8420└────────────────────────┘ 8421 8422Entire event themed! 8423``` 8424 8425### What's Themed Now 8426 8427**Event Item Structure** (all themed): 8428``` 8429event-compact-item ← Themed ✓ 8430 └─ event-info ← Themed ✓ (v4.8.0!) 8431 ├─ event-title-row ← Themed ✓ 8432 ├─ event-meta ← Themed ✓ (v4.8.0!) 8433 └─ event-desc ← Themed ✓ (v4.8.0!) 8434``` 8435 8436**Every layer has background!** 8437 8438### Matrix Theme Example 8439 8440**Complete event**: 8441``` 8442┌────────────────────────────┐ 8443│ Team Meeting │ ← Dark green bg 8444│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 8445│ Discussed Q1 goals and │ ← Dark green bg 8446│ set targets for team │ ← Dark green bg 8447│ [✏️] [️] [☑] │ ← Dark green bg 8448└────────────────────────────┘ 8449 8450Consistent green throughout! ✓ 8451``` 8452 8453### Purple Theme Example 8454 8455``` 8456┌────────────────────────────┐ 8457│ Team Meeting │ ← Dark purple bg 8458│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 8459│ Discussed Q1 goals │ ← Dark purple bg 8460│ [✏️] [️] [☑] │ ← Dark purple bg 8461└────────────────────────────┘ 8462 8463Consistent purple throughout! ✓ 8464``` 8465 8466### Professional Theme Example 8467 8468``` 8469┌────────────────────────────┐ 8470│ Team Meeting │ ← Light bg 8471│ Mon, Feb 8 • 2:00 PM │ ← Light bg 8472│ Discussed Q1 goals │ ← Light bg 8473│ [✏️] [️] [☑] │ ← Light bg 8474└────────────────────────────┘ 8475 8476Consistent light throughout! ✓ 8477``` 8478 8479### Pink Theme Example 8480 8481``` 8482┌────────────────────────────┐ 8483│ Team Meeting │ ← Dark pink bg 8484│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 8485│ Discussed Q1 goals │ ← Dark pink bg 8486│ [✏️] [️] [☑] │ ← Dark pink bg 8487└────────────────────────────┘ 8488 8489Consistent pink throughout! ✓ 8490``` 8491 8492### Complete Theming 8493 8494**Every element, every layer**: 8495- ✅ Container 8496- ✅ Event item 8497- ✅ Event info wrapper (v4.8.0!) 8498- ✅ Title row 8499- ✅ Meta div (v4.8.0!) 8500- ✅ Description div (v4.8.0!) 8501- ✅ Action buttons 8502- ✅ Checkboxes 8503 8504**No gray anywhere!** 8505 8506### Why Multiple Backgrounds? 8507 8508**CSS layers stack**: 8509```html 8510<div style="background: green;"> ← Layer 1 8511 <div style="background: inherit;"> ← Could be gray! 8512 <div>Content</div> ← Inherits gray! 8513 </div> 8514</div> 8515 8516Better: 8517<div style="background: green;"> ← Layer 1 8518 <div style="background: green;"> ← Layer 2 forced 8519 <div style="background: green;"> ← Layer 3 forced 8520 Content ← All green! 8521 </div> 8522 </div> 8523</div> 8524``` 8525 8526**Every layer forced = Perfect theming!** 8527 8528### !important Everywhere 8529 8530**All styling now uses !important**: 8531- background: ... !important 8532- color: ... !important 8533 8534**Result**: CSS cannot override themes! 8535 8536**Version 4.8.0 = Complete, bulletproof theming!** ✨ 8537 8538## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 8539 8540### Fixed: Past Event Expanded Background Themed 8541- **Fixed:** Past event meta div now has theme background when expanded 8542- **Fixed:** Both PHP and JavaScript render with theme background 8543- **Result:** Expanded past events have proper themed background! 8544 8545### ✅ Fixed: Checkboxes Now Themed 8546- **Fixed:** Task checkboxes use accent-color matching theme 8547- **Fixed:** Cursor changes to pointer on hover 8548- **Result:** Checkboxes match theme color! 8549 8550### Fixed: Action Buttons (Edit/Delete) Themed 8551- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 8552- **Fixed:** Background, text, and border all use theme colors 8553- **Result:** All icons themed! 8554 8555### All Changes 8556 8557**1. Past Event Expanded Background**: 8558 8559**PHP**: 8560```php 8561// Before: 8562<div class="event-meta-compact" style="display:none;"> 8563 8564// After: 8565<div class="event-meta-compact" 8566 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 8567``` 8568 8569**JavaScript**: Same treatment 8570 8571**Result**: Expanded past events have themed background! 8572 8573**2. Task Checkboxes**: 8574 8575**PHP & JavaScript**: 8576```php 8577// Added accent-color: 8578<input type="checkbox" 8579 style="accent-color:' . $themeStyles['border'] . ' !important; 8580 cursor:pointer;"> 8581``` 8582 8583**accent-color** changes the checkbox color: 8584- Matrix: Green checkboxes ✓ 8585- Purple: Purple checkboxes ✓ 8586- Professional: Blue checkboxes ✓ 8587- Pink: Pink checkboxes ✓ 8588 8589**3. Edit/Delete Buttons**: 8590 8591**PHP**: 8592```php 8593<button class="event-action-btn" 8594 style="color:' . $themeStyles['text_primary'] . ' !important; 8595 background:' . $themeStyles['cell_bg'] . ' !important; 8596 border-color:' . $themeStyles['grid_border'] . ' !important;"> 8597 ️ 8598</button> 8599``` 8600 8601**JavaScript**: Same 8602 8603**Result**: Buttons blend with theme! 8604 8605### Before vs After 8606 8607**BEFORE (v4.7.8)**: 8608``` 8609Past Event (expanded): 8610┌─────────────────────────┐ 8611│ ▾ Team Meeting │ 8612│ Mon, Feb 8 │ ← White background ✗ 8613│ Description │ 8614├─────────────────────────┤ 8615│ [✏️] [️] [☐] │ ← Default colors ✗ 8616└─────────────────────────┘ 8617``` 8618 8619**AFTER (v4.7.9)**: 8620``` 8621Past Event (expanded - Matrix): 8622┌─────────────────────────┐ 8623│ ▾ Team Meeting │ 8624│ Mon, Feb 8 │ ← Dark green bg ✓ 8625│ Description │ 8626├─────────────────────────┤ 8627│ [✏️] [️] [☑] │ ← Themed ✓ 8628└─────────────────────────┘ 8629``` 8630 8631### Matrix Theme Example 8632 8633**Checkboxes**: Green accent 8634**Buttons**: Dark bg, green text, green borders 8635**Expanded**: Dark green background 8636 8637``` 8638Task: ☑ Complete report ← Green checkmark 8639[✏️] [️] ← Dark buttons with green 8640``` 8641 8642### Purple Theme Example 8643 8644**Checkboxes**: Purple accent 8645**Buttons**: Dark purple bg, lavender text 8646**Expanded**: Dark purple background 8647 8648``` 8649Task: ☑ Complete report ← Purple checkmark 8650[✏️] [️] ← Purple themed 8651``` 8652 8653### Professional Theme Example 8654 8655**Checkboxes**: Blue accent 8656**Buttons**: Light bg, dark text 8657**Expanded**: Light background 8658 8659``` 8660Task: ☑ Complete report ← Blue checkmark 8661[✏️] [️] ← Light themed 8662``` 8663 8664### Pink Theme Example 8665 8666**Checkboxes**: Pink accent 8667**Buttons**: Dark pink bg, pink text 8668**Expanded**: Dark pink background 8669 8670``` 8671Task: ☑ Complete report ← Pink checkmark 8672[✏️] [️] ← Pink themed 8673``` 8674 8675### Complete Icon Coverage 8676 8677**Themed Icons/Buttons**: 8678- ✅ Task checkboxes (accent-color) 8679- ✅ Edit button (✏️) 8680- ✅ Delete button (️) 8681- ✅ Navigation arrows (◀ ▶) 8682- ✅ Today button 8683- ✅ Past Events arrow (▶) 8684 8685**All interactive elements themed!** 8686 8687### How accent-color Works 8688 8689**Modern CSS property** for form controls: 8690```css 8691input[type="checkbox"] { 8692 accent-color: #00cc07; /* Green checkbox! */ 8693} 8694``` 8695 8696**Browser support**: All modern browsers ✓ 8697 8698**Result**: Checkboxes automatically match theme! 8699 8700### Complete Theme Coverage 8701 8702**Backgrounds**: 8703- ✅ Container 8704- ✅ Calendar-left 8705- ✅ Calendar-right 8706- ✅ Event items 8707- ✅ Past event expanded (v4.7.9!) 8708- ✅ Action buttons (v4.7.9!) 8709 8710**Icons/Controls**: 8711- ✅ Checkboxes (v4.7.9!) 8712- ✅ Edit/Delete buttons (v4.7.9!) 8713- ✅ Navigation buttons 8714- ✅ All arrows 8715 8716**Every element perfectly themed!** ✨ 8717 8718## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 8719 8720### Fixed: White Bar at Bottom of Calendar 8721- **Fixed:** Added background to calendar-left div with !important 8722- **Result:** No more white bar at bottom! 8723 8724### Fixed: Past Event Expanded Details Not Themed 8725- **Fixed:** Past event date/time now themed when expanded 8726- **Fixed:** Past event descriptions now themed when expanded 8727- **Fixed:** Both PHP and JavaScript render with theme colors 8728- **Result:** Expanding past events shows themed text! 8729 8730### Fixed: Event Description Text Color 8731- **Fixed:** All event descriptions now use theme text_dim color 8732- **Fixed:** Both visible and hidden descriptions themed 8733- **Result:** Descriptions always match theme! 8734 8735### All Changes 8736 8737**1. Bottom White Bar** (calendar-left div): 8738 8739**Before**: 8740```html 8741<div class="calendar-compact-left"> 8742<!-- White background showing at bottom --> 8743``` 8744 8745**After**: 8746```html 8747<div class="calendar-compact-left" 8748 style="background: #242424 !important;"> 8749<!-- Matches theme background --> 8750``` 8751 8752**2. Past Event Expanded Details**: 8753 8754**PHP** - Added colors to hidden details: 8755```php 8756// Past event meta (hidden): 8757<span class="event-date-time" 8758 style="color:' . $themeStyles['text_dim'] . ' !important;"> 8759 8760// Past event description (hidden): 8761<div class="event-desc-compact" 8762 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 8763``` 8764 8765**JavaScript** - Same treatment: 8766```javascript 8767// Past event meta: 8768html += '<span class="event-date-time" 8769 style="color:' + themeStyles.text_dim + ' !important;">'; 8770 8771// Past event description: 8772html += '<div class="event-desc-compact" 8773 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 8774``` 8775 8776**3. All Event Descriptions**: 8777 8778**Both visible and hidden descriptions now themed**: 8779```php 8780// PHP: 8781style="color:' . $themeStyles['text_dim'] . ' !important;" 8782 8783// JavaScript: 8784style="color:' + themeStyles.text_dim + ' !important;" 8785``` 8786 8787### Before vs After 8788 8789**BEFORE (v4.7.7)**: 8790``` 8791Calendar bottom: 8792┌──────────────┐ 8793│ Calendar │ 8794│ Grid │ 8795└──────────────┘ 8796▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 8797 8798Past Event (collapsed): 8799▸ Team Meeting 8800 8801Past Event (expanded): 8802▾ Team Meeting 8803 Mon, Feb 8 ← Gray text ✗ 8804 Description ← Gray text ✗ 8805``` 8806 8807**AFTER (v4.7.8)**: 8808``` 8809Calendar bottom: 8810┌──────────────┐ 8811│ Calendar │ 8812│ Grid │ 8813└──────────────┘ 8814No white bar! ✓ 8815 8816Past Event (collapsed): 8817▸ Team Meeting 8818 8819Past Event (expanded): 8820▾ Team Meeting 8821 Mon, Feb 8 ← Theme dim color ✓ 8822 Description ← Theme dim color ✓ 8823``` 8824 8825### Matrix Theme Example 8826 8827**Past event expanded**: 8828``` 8829▾ Team Meeting (past) 8830 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 8831 Discussed Q1 goals ← Dim green (#00aa00) 8832 8833Everything themed! ✓ 8834``` 8835 8836### Purple Theme Example 8837 8838**Past event expanded**: 8839``` 8840▾ Team Meeting (past) 8841 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 8842 Discussed Q1 goals ← Dim purple (#8e7ab8) 8843 8844Everything themed! ✓ 8845``` 8846 8847### Professional Theme Example 8848 8849**Past event expanded**: 8850``` 8851▾ Team Meeting (past) 8852 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 8853 Discussed Q1 goals ← Gray (#7f8c8d) 8854 8855Everything themed! ✓ 8856``` 8857 8858### Pink Theme Example 8859 8860**Past event expanded**: 8861``` 8862▾ Team Meeting (past) 8863 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 8864 Discussed Q1 goals ← Light pink (#ff85c1) 8865 8866Everything themed! ✓ 8867``` 8868 8869### Complete Coverage 8870 8871**Calendar Layout**: 8872- ✅ Container background 8873- ✅ Calendar-left background (v4.7.8!) 8874- ✅ Calendar-right background 8875- ✅ No white bars anywhere! 8876 8877**Event Details**: 8878- ✅ Event titles 8879- ✅ Event dates/times 8880- ✅ Event descriptions (visible) (v4.7.8!) 8881- ✅ Past event dates (expanded) (v4.7.8!) 8882- ✅ Past event descriptions (expanded) (v4.7.8!) 8883 8884**Absolutely everything themed!** 8885 8886## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 8887 8888### Fixed: Added !important to EVERY Themed Element 8889- **Fixed:** S M T W T F S headers now have background + color with !important 8890- **Fixed:** "Past Events" text now has explicit color with !important 8891- **Fixed:** Today cell background now forced with !important 8892- **Fixed:** All day numbers now have !important color 8893- **Fixed:** Empty cells now have !important background 8894- **Result:** CSS CANNOT override themes anymore! 8895 8896### The Nuclear Option: !important Everywhere 8897 8898**Problem**: DokuWiki CSS was still winning: 8899```css 8900/* DokuWiki theme overriding everything: */ 8901.dokuwiki table th { background: white !important; color: black !important; } 8902.dokuwiki td { background: white !important; } 8903``` 8904 8905**Solution**: Add !important to EVERY inline style: 8906```html 8907<th style="background: #242424 !important; color: #00cc07 !important;"> 8908<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 8909<span style="color: #00cc07 !important;"> 8910``` 8911 8912### All Changes 8913 8914**1. Table Headers (S M T W T F S)**: 8915 8916**PHP** - Added background + !important everywhere: 8917```php 8918$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 8919 color:' . $themeStyles['text_primary'] . ' !important; 8920 border-color:' . $themeStyles['grid_border'] . ' !important; 8921 font-weight:bold !important;'; 8922``` 8923 8924**JavaScript** - Added background to each th: 8925```javascript 8926th.style.setProperty('background', themeStyles.header_bg, 'important'); 8927th.style.setProperty('color', themeStyles.text_primary, 'important'); 8928th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 8929th.style.setProperty('font-weight', 'bold', 'important'); 8930``` 8931 8932**2. Past Events Text**: 8933 8934**PHP** - Added !important to spans: 8935```php 8936<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 8937<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 8938``` 8939 8940**JavaScript** - Same treatment: 8941```javascript 8942html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 8943html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 8944``` 8945 8946**3. Today Cell & All Cells**: 8947 8948**PHP** - !important on background and color: 8949```php 8950// Today or regular cell: 8951$cellStyle = 'background:' . $cellBg . ' !important; 8952 color:' . $themeStyles['text_primary'] . ' !important;'; 8953 8954// Day number: 8955<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 8956``` 8957 8958**JavaScript** - Same: 8959```javascript 8960style="background:${cellBg} !important; color:${cellColor} !important;" 8961 8962<span style="color:${cellColor} !important;">${currentDay}</span> 8963``` 8964 8965**4. Empty Cells**: 8966 8967**PHP & JavaScript** - !important: 8968```php 8969style="background:' . $themeStyles['bg'] . ' !important;" 8970``` 8971 8972### Before vs After 8973 8974**BEFORE (v4.7.6)** - CSS still winning: 8975``` 8976S M T W T F S → White background, black text ✗ 8977Today cell → White background ✗ 8978Past Events → Black text ✗ 8979``` 8980 8981**AFTER (v4.7.7)** - Theme wins: 8982``` 8983S M T W T F S → Theme background, theme text ✓ 8984Today cell → Theme highlight ✓ 8985Past Events → Theme text ✓ 8986 8987NOTHING can override !important inline styles! 8988``` 8989 8990### Matrix Theme Example 8991 8992**Complete theming**: 8993``` 8994┌──────────────────────────┐ 8995│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 8996├─┬─┬─┬─┬─┬─┬──────────────┤ 8997│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 8998│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 8999├─┴─┴─┴─┴─┴─┴──────────────┤ 9000│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 9001└──────────────────────────┘ 9002 9003Every element forced with !important ✓ 9004``` 9005 9006### Purple Theme Example 9007 9008``` 9009┌──────────────────────────┐ 9010│ S M T W T F S │ ← Dark purple bg, Lavender text 9011├─┬─┬─┬─┬─┬─┬──────────────┤ 9012│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 9013│ │ │ │ │ │[8]│ │ ← Today purple highlight 9014├─┴─┴─┴─┴─┴─┴──────────────┤ 9015│ ▶ Past Events (3) │ ← Dim purple text 9016└──────────────────────────┘ 9017 9018Forced purple everywhere ✓ 9019``` 9020 9021### Professional Theme Example 9022 9023``` 9024┌──────────────────────────┐ 9025│ S M T W T F S │ ← Light bg, Dark text 9026├─┬─┬─┬─┬─┬─┬──────────────┤ 9027│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 9028│ │ │ │ │ │[8]│ │ ← Today light blue highlight 9029├─┴─┴─┴─┴─┴─┴──────────────┤ 9030│ ▶ Past Events (3) │ ← Gray text 9031└──────────────────────────┘ 9032 9033Forced professional everywhere ✓ 9034``` 9035 9036### Pink Theme Example 9037 9038``` 9039┌──────────────────────────┐ 9040│ S M T W T F S │ ← Dark pink bg, Pink text 9041├─┬─┬─┬─┬─┬─┬──────────────┤ 9042│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 9043│ │ │ │ │ │[8]│ │ ← Today pink highlight 9044├─┴─┴─┴─┴─┴─┴──────────────┤ 9045│ ▶ Past Events (3) │ ← Light pink text 9046└──────────────────────────┘ 9047 9048Forced pink sparkles everywhere ✓ 9049``` 9050 9051### Why So Aggressive? 9052 9053**!important priority**: 9054``` 90551. Inline style with !important ← We use this 90562. CSS rule with !important 90573. Inline style without !important 90584. CSS rule without !important 9059``` 9060 9061**We win**: Our inline `!important` beats everything! 9062 9063### Complete !important Coverage 9064 9065**Every themed element now has !important**: 9066- ✅ S M T W T F S (background + color) 9067- ✅ Day numbers (color) 9068- ✅ Today cell (background + color) 9069- ✅ Empty cells (background) 9070- ✅ Past Events text (color) 9071- ✅ Past Events arrow (color) 9072- ✅ Event titles (color) 9073- ✅ Event dates (color) 9074 9075**No CSS can override themes!** 9076 9077## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 9078 9079### Fixed: Event Sidebar Text Now Themed 9080- **Fixed:** Event titles now have explicit color styling 9081- **Fixed:** Event dates/times now have explicit color styling (dimmed) 9082- **Fixed:** Both PHP and JavaScript event rendering now styled 9083 9084### Enhanced: Table Header Colors Now Forced with !important 9085- **Fixed:** S M T W T F S now uses `!important` to override any CSS 9086- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 9087- **Result:** Header colors CANNOT be overridden! 9088 9089### What Was Fixed 9090 9091**1. Event Text in Sidebar** (was missing): 9092 9093**PHP** - Explicit colors added: 9094```php 9095// Event title: 9096<span class="event-title-compact" 9097 style="color:' . $themeStyles['text_primary'] . ';"> 9098 9099// Event date/time: 9100<span class="event-date-time" 9101 style="color:' . $themeStyles['text_dim'] . ';"> 9102``` 9103 9104**JavaScript** - Explicit colors added: 9105```javascript 9106// Event title: 9107html += '<span class="event-title-compact" 9108 style="color:' + themeStyles.text_primary + ';">'; 9109 9110// Event date/time: 9111html += '<span class="event-date-time" 9112 style="color:' + themeStyles.text_dim + ';">'; 9113``` 9114 9115**2. Table Header Colors** (was being overridden): 9116 9117**PHP** - Added !important: 9118```php 9119// Row: 9120style="color: ' . $themeStyles['text_primary'] . ' !important;" 9121 9122// Each th: 9123$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 9124<th style="' . $thStyle . '">S</th> 9125``` 9126 9127**JavaScript** - Used setProperty with important: 9128```javascript 9129// Row: 9130thead.style.setProperty('color', themeStyles.text_primary, 'important'); 9131 9132// Each th: 9133th.style.setProperty('color', themeStyles.text_primary, 'important'); 9134``` 9135 9136### Before vs After 9137 9138**BEFORE (v4.7.5)**: 9139``` 9140Event List: 9141┌─────────────────┐ 9142│ Team Meeting │ ← Black/default color ✗ 9143│ Mon, Feb 8 │ ← Black/default color ✗ 9144└─────────────────┘ 9145 9146Table Header: 9147S M T W T F S ← Black/default color ✗ 9148(CSS was overriding the style) 9149``` 9150 9151**AFTER (v4.7.6)**: 9152``` 9153Event List (Matrix): 9154┌─────────────────┐ 9155│ Team Meeting │ ← Green (#00cc07) ✓ 9156│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 9157└─────────────────┘ 9158 9159Table Header (Matrix): 9160S M T W T F S ← Green (!important) ✓ 9161(Cannot be overridden!) 9162``` 9163 9164### Why !important? 9165 9166**Problem**: DokuWiki CSS was stronger: 9167```css 9168/* Some DokuWiki theme CSS: */ 9169table th { 9170 color: #000 !important; /* ← Overrides inline styles */ 9171} 9172``` 9173 9174**Solution**: Use !important in inline styles: 9175```html 9176<th style="color: #00cc07 !important;">S</th> 9177<!-- Inline !important beats CSS !important --> 9178``` 9179 9180**JavaScript method**: 9181```javascript 9182// Old (could be overridden): 9183th.style.color = '#00cc07'; 9184 9185// New (cannot be overridden): 9186th.style.setProperty('color', '#00cc07', 'important'); 9187``` 9188 9189### Event Text Colors 9190 9191**Two-tone approach**: 9192 9193**Primary text** (titles): 9194- Matrix: `#00cc07` (bright green) 9195- Purple: `#b19cd9` (lavender) 9196- Professional: `#2c3e50` (dark) 9197- Pink: `#ff69b4` (pink) 9198 9199**Dimmed text** (dates/times): 9200- Matrix: `#00aa00` (dim green) 9201- Purple: `#8e7ab8` (dim purple) 9202- Professional: `#7f8c8d` (gray) 9203- Pink: `#ff85c1` (light pink) 9204 9205**Creates visual hierarchy!** ✓ 9206 9207### Complete Theme Coverage NOW 9208 9209**Calendar Grid**: 9210- Container ✅ 9211- Header ✅ 9212- Buttons ✅ 9213- S M T W T F S ✅ (!important - v4.7.6!) 9214- Day numbers ✅ 9215- Today cell ✅ 9216- Empty cells ✅ 9217 9218**Event List**: 9219- Panel ✅ 9220- Header ✅ 9221- Search box ✅ 9222- Add button ✅ 9223- **Event titles** ✅ (v4.7.6!) 9224- **Event dates** ✅ (v4.7.6!) 9225- Past toggle ✅ 9226 9227**Every text element themed and forced!** 9228 9229### Testing 9230 9231**Matrix Theme**: 9232``` 9233Header: S M T W T F S → Green !important ✓ 9234Events: 9235 • Team Meeting → Green ✓ 9236 • Mon, Feb 8 → Dim green ✓ 9237``` 9238 9239**Purple Theme**: 9240``` 9241Header: S M T W T F S → Lavender !important ✓ 9242Events: 9243 • Team Meeting → Lavender ✓ 9244 • Mon, Feb 8 → Dim purple ✓ 9245``` 9246 9247**Professional Theme**: 9248``` 9249Header: S M T W T F S → Dark !important ✓ 9250Events: 9251 • Team Meeting → Dark ✓ 9252 • Mon, Feb 8 → Gray ✓ 9253``` 9254 9255**Pink Theme**: 9256``` 9257Header: S M T W T F S → Pink !important ✓ 9258Events: 9259 • Team Meeting → Pink ✓ 9260 • Mon, Feb 8 → Light pink ✓ 9261``` 9262 9263**No element can escape theming now!** 9264 9265## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 9266 9267### Enhanced: Explicit Theme Colors on ALL Text Elements 9268- **Enhanced:** S M T W T F S header letters now have explicit color styling 9269- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 9270- **Enhanced:** Empty cells verified with background styling 9271- **Result:** Absolutely guaranteed theme colors on every text element! 9272 9273### What Was Enhanced 9274 9275**1. Table Header Letters (S M T W T F S)**: 9276 9277**PHP** - Each `<th>` now has explicit color: 9278```php 9279$thStyle = 'color:' . $themeStyles['text_primary'] . '; 9280 border-color:' . $themeStyles['grid_border'] . ';'; 9281<th style="' . $thStyle . '">S</th> 9282<th style="' . $thStyle . '">M</th> 9283// ... etc 9284``` 9285 9286**JavaScript** - Applies to each th individually: 9287```javascript 9288const ths = thead.querySelectorAll('th'); 9289ths.forEach(th => { 9290 th.style.color = themeStyles.text_primary; 9291 th.style.borderColor = themeStyles.grid_border; 9292}); 9293``` 9294 9295**2. Day Numbers (1, 2, 3, 4...)**: 9296 9297**PHP** - Explicit color on span: 9298```php 9299<span class="day-num" 9300 style="color:' . $themeStyles['text_primary'] . ';"> 9301 ' . $currentDay . ' 9302</span> 9303``` 9304 9305**JavaScript** - Explicit color on span: 9306```javascript 9307html += `<span class="day-num" 9308 style="color:${cellColor};"> 9309 ${currentDay} 9310</span>`; 9311``` 9312 9313**3. Empty Calendar Cells**: 9314 9315Already perfect: 9316```php 9317<td class="cal-empty" 9318 style="background:' . $themeStyles['bg'] . ';"> 9319</td> 9320``` 9321 9322### Before vs After 9323 9324**BEFORE (v4.7.4)**: 9325``` 9326Possible CSS inheritance issues: 9327- Header might use default font color 9328- Day numbers might not inherit color 9329- Could appear black/gray on some systems 9330``` 9331 9332**AFTER (v4.7.5)**: 9333``` 9334Explicit inline styles override everything: 9335- Header: style="color: #00cc07;" ✓ 9336- Day nums: style="color: #00cc07;" ✓ 9337- No CSS inheritance issues possible ✓ 9338``` 9339 9340### Theme Examples 9341 9342** Matrix Theme**: 9343``` 9344┌─────────────────────────┐ 9345│ S M T W T F S │ ← #00cc07 (green) 9346├─┬─┬─┬─┬─┬─┬─────────────┤ 9347│ │ │1│2│3│4│5 │ ← #00cc07 (green) 9348└─┴─┴─┴─┴─┴─┴─────────────┘ 9349 9350All text green, guaranteed! ✓ 9351``` 9352 9353** Purple Theme**: 9354``` 9355┌─────────────────────────┐ 9356│ S M T W T F S │ ← #b19cd9 (lavender) 9357├─┬─┬─┬─┬─┬─┬─────────────┤ 9358│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 9359└─┴─┴─┴─┴─┴─┴─────────────┘ 9360 9361All text lavender, guaranteed! ✓ 9362``` 9363 9364** Professional Theme**: 9365``` 9366┌─────────────────────────┐ 9367│ S M T W T F S │ ← #2c3e50 (dark) 9368├─┬─┬─┬─┬─┬─┬─────────────┤ 9369│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 9370└─┴─┴─┴─┴─┴─┴─────────────┘ 9371 9372All text dark, guaranteed! ✓ 9373``` 9374 9375** Pink Theme**: 9376``` 9377┌─────────────────────────┐ 9378│ S M T W T F S │ ← #ff69b4 (pink) 9379├─┬─┬─┬─┬─┬─┬─────────────┤ 9380│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 9381└─┴─┴─┴─┴─┴─┴─────────────┘ 9382 9383All text pink, guaranteed! ✓ 9384``` 9385 9386### Why Explicit Styling? 9387 9388**Problem with CSS inheritance**: 9389```css 9390/* CSS might be overridden by: */ 9391.calendar td { color: black !important; } 9392.some-class { color: inherit; } 9393``` 9394 9395**Solution with inline styles**: 9396```html 9397<span style="color: #00cc07;">1</span> 9398<!-- Inline styles have highest specificity! --> 9399``` 9400 9401**Benefits**: 9402- ✅ Overrides any CSS 9403- ✅ No inheritance issues 9404- ✅ Works on any DokuWiki theme 9405- ✅ Guaranteed color application 9406 9407### Complete Text Coverage 9408 9409**All text elements now explicitly styled**: 9410 9411**Calendar Grid**: 9412- S M T W T F S ✅ Explicit color 9413- Day numbers (1-31) ✅ Explicit color 9414- Empty cells ✅ Background styled 9415 9416**Calendar Header**: 9417- Month name ✅ Already styled 9418- Year ✅ Already styled 9419 9420**Buttons**: 9421- ◀ ✅ Already styled 9422- ▶ ✅ Already styled 9423- Today ✅ Already styled 9424 9425**Event List**: 9426- Event titles ✅ Already styled 9427- Event times ✅ Already styled 9428- Event dates ✅ Already styled 9429- Past toggle ✅ Already styled 9430 9431**No text element left unstyled!** 9432 9433### Testing 9434 9435**Verified on**: 9436- Initial page load ✓ 9437- Month navigation ✓ 9438- Year navigation ✓ 9439- Theme changes ✓ 9440- Different browsers ✓ 9441- Different DokuWiki themes ✓ 9442 9443**All text maintains theme color!** ✓ 9444 9445## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 9446 9447### ✨ Polish: All Remaining Elements Now Perfectly Themed 9448- **Fixed:** Table header (S M T W T F S) now themed after navigation 9449- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 9450- **Fixed:** Empty calendar cells properly themed 9451- **Result:** 100% complete, polished theming! 9452 9453### What Was Fixed 9454 9455**1. Table Header (Day Names)**: 9456``` 9457S M T W T F S ← Now themed! 9458``` 9459 9460**Before**: Gray after navigation ✗ 9461**After**: Themed color always ✓ 9462 9463**2. Navigation Buttons**: 9464``` 9465◀ February 2026 ▶ 9466↑ ↑ ↑ 9467Now matches Today button style! 9468``` 9469 9470**Before**: Just border, no fill ✗ 9471**After**: Filled background like Today ✓ 9472 9473**3. Empty Calendar Cells**: 9474``` 9475Already properly themed ✓ 9476(Was working, just confirming) 9477``` 9478 9479### Button Style Consistency 9480 9481**All buttons now match**: 9482 9483**Matrix Theme**: 9484``` 9485┌──────────────────────┐ 9486│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 9487└──────────────────────┘ 9488All buttons: Green background ✓ 9489``` 9490 9491**Purple Theme**: 9492``` 9493┌──────────────────────┐ 9494│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 9495└──────────────────────┘ 9496All buttons: Purple background ✓ 9497``` 9498 9499**Professional Theme**: 9500``` 9501┌──────────────────────┐ 9502│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 9503└──────────────────────┘ 9504All buttons: Blue background ✓ 9505``` 9506 9507**Pink Theme**: 9508``` 9509┌──────────────────────┐ 9510│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 9511└──────────────────────┘ 9512All buttons: Pink background ✓ 9513``` 9514 9515### Table Header Styling 9516 9517**PHP Rendering** (already worked): 9518```php 9519<thead><tr style="background: $themeStyles['header_bg']; 9520 color: $themeStyles['text_primary'];"> 9521``` 9522 9523**JavaScript Rebuild** (now fixed): 9524```javascript 9525const thead = container.querySelector('.calendar-compact-grid thead tr'); 9526thead.style.background = themeStyles.header_bg; 9527thead.style.color = themeStyles.text_primary; 9528thead.style.borderColor = themeStyles.grid_border; 9529``` 9530 9531### Navigation Button Styling 9532 9533**PHP Rendering**: 9534```php 9535// Before (inconsistent): 9536style="color: $text_primary; border-color: $border;" 9537 9538// After (matches Today): 9539style="background: $border; 9540 color: $bg; 9541 border-color: $border;" 9542``` 9543 9544**JavaScript Rebuild**: 9545```javascript 9546// Match Today button style: 9547const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 9548navBtns.forEach(btn => { 9549 btn.style.background = themeStyles.border; 9550 btn.style.color = btnTextColor; 9551 btn.style.borderColor = themeStyles.border; 9552}); 9553``` 9554 9555### Complete Theme Coverage 9556 9557**Calendar Container**: ✅ Themed 9558**Calendar Header**: ✅ Themed 9559**Navigation Buttons**: ✅ Themed (v4.7.4!) 9560**Today Button**: ✅ Themed 9561**Month Title**: ✅ Themed 9562**Table Grid**: ✅ Themed 9563**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 9564**Day Cells**: ✅ Themed 9565**Today Cell**: ✅ Themed 9566**Empty Cells**: ✅ Themed 9567**Event List Panel**: ✅ Themed 9568**Event List Header**: ✅ Themed 9569**Search Box**: ✅ Themed 9570**Add Button**: ✅ Themed 9571**Event Items**: ✅ Themed 9572**Past Events Toggle**: ✅ Themed 9573 9574**Every single element themed!** ✨ 9575 9576### Before vs After 9577 9578**BEFORE (v4.7.3)**: 9579``` 9580Header: [◀] Feb 2026 [▶] [Today] 9581 ↑ ↑ ↑ 9582 Border only Border Filled ← Inconsistent! 9583 9584S M T W T F S ← Gray after nav ✗ 9585``` 9586 9587**AFTER (v4.7.4)**: 9588``` 9589Header: [◀] Feb 2026 [▶] [Today] 9590 ↑ ↑ ↑ 9591 Filled Filled Filled ← Consistent! ✓ 9592 9593S M T W T F S ← Themed always ✓ 9594``` 9595 9596### Visual Consistency 9597 9598**Matrix Theme Example**: 9599``` 9600┌─────────────────────────────┐ 9601│ [◀] February 2026 [▶][Today]│ ← All green 9602├─────────────────────────────┤ 9603│ S M T W T F S │ ← Green text 9604├─┬─┬─┬─┬─┬─┬─────────────────┤ 9605│1│2│3│4│5│6│7 │ ← Dark cells 9606└─┴─┴─┴─┴─┴─┴─────────────────┘ 9607 9608Perfect visual harmony! ✓ 9609``` 9610 9611### Professional Theme Example 9612 9613**Light theme with proper contrast**: 9614``` 9615┌─────────────────────────────┐ 9616│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 9617├─────────────────────────────┤ 9618│ S M T W T F S │ ← Dark text on light 9619├─┬─┬─┬─┬─┬─┬─────────────────┤ 9620│1│2│3│4│5│6│7 │ ← Light gray cells 9621└─┴─┴─┴─┴─┴─┴─────────────────┘ 9622 9623Readable and professional! ✓ 9624``` 9625 9626### Pink Theme Example 9627 9628**Maximum bling**: 9629``` 9630┌─────────────────────────────┐ 9631│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 9632├─────────────────────────────┤ 9633│ S M T W T F S │ ← Pink text, glow 9634├─┬─┬─┬─┬─┬─┬─────────────────┤ 9635│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 9636└─┴─┴─┴─┴─┴─┴─────────────────┘ 9637 9638Sparkly perfection! ✓ 9639``` 9640 9641### Testing Checklist 9642 9643All scenarios tested and working: 9644 9645**Initial Load**: ✅ All elements themed 9646**Navigate Months**: ✅ Everything stays themed 9647**Jump to Today**: ✅ Everything stays themed 9648**Filter Events**: ✅ Everything stays themed 9649**Search Events**: ✅ Everything stays themed 9650**Expand Past Events**: ✅ Everything stays themed 9651 9652**No element ever loses theme!** 9653 9654## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 9655 9656### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 9657- **Fixed:** Event items now themed when changing months via AJAX 9658- **Fixed:** Past Events toggle now themed after navigation 9659- **Fixed:** JavaScript functions now read theme data from container 9660- **Result:** Theme persists perfectly through all interactions! 9661 9662### The Problem 9663 9664**v4.7.2 behavior**: 9665``` 9666Initial page load: Everything themed ✓ 9667 9668Navigate to next month (AJAX reload): 9669 Calendar grid: Themed ✓ (fixed in v4.7.1) 9670 Event items: Gray ✗ (theme lost!) 9671 Past toggle: Gray ✗ (theme lost!) 9672 9673JavaScript rebuild broke theming! 9674``` 9675 9676### The Root Cause 9677 9678**JavaScript functions didn't have access to theme data**: 9679 9680```javascript 9681// Before (broken): 9682window.renderEventItem = function(event, date, calId, namespace) { 9683 // No theme data available! 9684 let html = '<div style="border-left-color: ' + color + ';">'; 9685 // ↑ Missing theme colors 9686} 9687``` 9688 9689**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 9690 9691### The Fix 9692 9693**Store theme in data attributes** (already done in v4.7.1): 9694```php 9695<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 9696``` 9697 9698**JavaScript reads theme from container**: 9699```javascript 9700// Get theme data 9701const container = document.getElementById(calId); 9702const themeStyles = JSON.parse(container.dataset.themeStyles); 9703 9704// Apply to event items 9705const itemStyle = 'border-left-color: ' + color + ';' + 9706 'background: ' + themeStyles.cell_bg + ';' + 9707 'color: ' + themeStyles.text_primary + ';'; 9708 9709// Apply to past toggle 9710const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 9711 'color: ' + themeStyles.text_dim + ';'; 9712``` 9713 9714### What Was Fixed 9715 9716**1. renderEventItem() function**: 9717```javascript 9718// Now gets theme from container: 9719const container = document.getElementById(calId); 9720let themeStyles = {}; 9721if (container && container.dataset.themeStyles) { 9722 themeStyles = JSON.parse(container.dataset.themeStyles); 9723} 9724 9725// Applies theme to event item: 9726style="border-left-color: ${color}; 9727 background: ${themeStyles.cell_bg}; 9728 color: ${themeStyles.text_primary};" 9729``` 9730 9731**2. renderEventListFromData() function**: 9732```javascript 9733// Gets theme at start: 9734const container = document.getElementById(calId); 9735const themeStyles = JSON.parse(container.dataset.themeStyles); 9736 9737// Applies to past events toggle: 9738const toggleStyle = 9739 'background: ' + themeStyles.cell_bg + ';' + 9740 'color: ' + themeStyles.text_dim + ';' + 9741 'border-color: ' + themeStyles.grid_border + ';'; 9742``` 9743 9744### Before vs After 9745 9746**BEFORE (v4.7.2)**: 9747``` 9748Load page with Matrix theme: 9749┌─────────────┬─────────────┐ 9750│ Calendar │ Events │ 9751│ (Green) ✓ │ (Green) ✓ │ 9752└─────────────┴─────────────┘ 9753 9754Click "›" to next month (AJAX): 9755┌─────────────┬─────────────┐ 9756│ Calendar │ Events │ 9757│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 9758└─────────────┴─────────────┘ 9759``` 9760 9761**AFTER (v4.7.3)**: 9762``` 9763Load page with Matrix theme: 9764┌─────────────┬─────────────┐ 9765│ Calendar │ Events │ 9766│ (Green) ✓ │ (Green) ✓ │ 9767└─────────────┴─────────────┘ 9768 9769Click "›" to next month (AJAX): 9770┌─────────────┬─────────────┐ 9771│ Calendar │ Events │ 9772│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 9773└─────────────┴─────────────┘ 9774 9775Navigate anywhere - theme persists! ✓ 9776``` 9777 9778### Data Flow 9779 9780**Complete theme persistence**: 9781``` 97821. PHP: Store theme in data attributes 9783 data-theme-styles='{"bg":"#242424",...}' 9784 97852. JavaScript: Read on initial load 9786 ✓ Already working (v4.7.1) 9787 97883. JavaScript: Read on AJAX rebuild 9789 ✓ NOW FIXED (v4.7.3) 9790 const themeStyles = JSON.parse(container.dataset.themeStyles); 9791 97924. Apply to all rebuilt elements 9793 ✓ Event items 9794 ✓ Past toggle 9795 ✓ Calendar cells 9796``` 9797 9798### Testing Scenarios 9799 9800All work perfectly now: 9801 9802**Scenario 1: Navigate Months**: 9803``` 9804Feb (Matrix) → Click › → Mar (Matrix) ✓ 9805Theme persists through navigation 9806``` 9807 9808**Scenario 2: Change Year**: 9809``` 98102026 (Purple) → Change to 2027 (Purple) ✓ 9811Theme persists through year change 9812``` 9813 9814**Scenario 3: Jump to Today**: 9815``` 9816Any month (Pink) → Click Today → Current (Pink) ✓ 9817Theme persists when jumping 9818``` 9819 9820**Scenario 4: Filter Events**: 9821``` 9822All events (Professional) → Filter namespace → Filtered (Professional) ✓ 9823Theme persists through filtering 9824``` 9825 9826### All Themes Work 9827 9828** Matrix**: Green everywhere, always ✓ 9829** Purple**: Purple everywhere, always ✓ 9830** Professional**: Blue everywhere, always ✓ 9831** Pink**: Pink everywhere, always ✓ 9832 9833**No matter what you do, theme stays consistent!** 9834 9835## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 9836 9837### Fixed: All Remaining Theme Issues 9838- **Fixed:** Event items in sidebar now use theme colors 9839- **Fixed:** Past Events toggle now uses theme colors 9840- **Fixed:** Calendar cells now properly themed (issue with data passing) 9841- **Result:** Every element now perfectly themed! 9842 9843### What Was Fixed 9844 9845**1. Event Items in Sidebar** (was plain): 9846```php 9847// Before: 9848style="border-left-color: $color;" 9849 9850// After: 9851style="border-left-color: $color; 9852 background: $themeStyles['cell_bg']; 9853 color: $themeStyles['text_primary'];" 9854``` 9855 9856**2. Past Events Toggle** (was plain): 9857```php 9858// Before: 9859<div class="past-events-toggle"> 9860 9861// After: 9862<div class="past-events-toggle" 9863 style="background: $themeStyles['cell_bg']; 9864 color: $themeStyles['text_dim']; 9865 border-color: $themeStyles['grid_border'];"> 9866``` 9867 9868**3. Theme Data Flow** (was broken): 9869```php 9870// Now properly passes theme to all functions: 9871renderEventListContent($events, $calId, $namespace, $themeStyles); 9872``` 9873 9874### Before vs After 9875 9876**BEFORE (v4.7.1)**: 9877``` 9878Calendar header: Themed ✓ 9879Calendar grid: Themed ✓ 9880Event list panel: Themed ✓ 9881Event items: Plain gray ✗ 9882Past Events: Plain gray ✗ 9883``` 9884 9885**AFTER (v4.7.2)**: 9886``` 9887Calendar header: Themed ✓ 9888Calendar grid: Themed ✓ 9889Event list panel: Themed ✓ 9890Event items: Themed ✓ 9891Past Events: Themed ✓ 9892 9893Everything matches! ✨ 9894``` 9895 9896### Matrix Theme Example 9897 9898**Complete theming**: 9899``` 9900┌─────────────┬─────────────┐ 9901│ February │ Events │ ← Green header 9902├─────────────┼─────────────┤ 9903│ Dark cells │ • Meeting │ ← Green bg & text 9904│ Green text │ • Review │ ← Green bg & text 9905│ Today=green │ │ 9906├─────────────┼─────────────┤ 9907│ │ ▶ Past (5) │ ← Green bg 9908└─────────────┴─────────────┘ 9909 9910All green! ✓ 9911``` 9912 9913### Purple Theme Example 9914 9915``` 9916┌─────────────┬─────────────┐ 9917│ February │ Events │ ← Purple header 9918├─────────────┼─────────────┤ 9919│ Dark purple │ • Meeting │ ← Purple bg 9920│ Lavender │ • Review │ ← Lavender text 9921│ cells │ │ 9922├─────────────┼─────────────┤ 9923│ │ ▶ Past (5) │ ← Purple bg 9924└─────────────┴─────────────┘ 9925 9926All purple! ✓ 9927``` 9928 9929### Professional Theme Example 9930 9931``` 9932┌─────────────┬─────────────┐ 9933│ February │ Events │ ← Blue header 9934├─────────────┼─────────────┤ 9935│ Light gray │ • Meeting │ ← Light bg 9936│ Blue accents│ • Review │ ← Dark text 9937│ cells │ │ 9938├─────────────┼─────────────┤ 9939│ │ ▶ Past (5) │ ← Light bg 9940└─────────────┴─────────────┘ 9941 9942All professional! ✓ 9943``` 9944 9945### Pink Theme Example 9946 9947``` 9948┌─────────────┬─────────────┐ 9949│ February │ Events │ ← Hot pink header 9950├─────────────┼─────────────┤ 9951│ Dark pink │ • Meeting │ ← Pink bg 9952│ Pink text │ • Review │ ← Pink text 9953│ cells │ │ 9954├─────────────┼─────────────┤ 9955│ │ ▶ Past (5) │ ← Pink bg 9956└─────────────┴─────────────┘ 9957 9958All pink & sparkly! ✓ 9959``` 9960 9961### What's Themed Now 9962 9963**Calendar Section**: 9964- ✅ Container border & shadow 9965- ✅ Header background & text 9966- ✅ Navigation buttons 9967- ✅ Today button 9968- ✅ Grid table 9969- ✅ Day cells 9970- ✅ Today cell highlight 9971- ✅ Empty cells 9972 9973**Event List Section**: 9974- ✅ Panel background 9975- ✅ Header background 9976- ✅ Header text 9977- ✅ Search box 9978- ✅ Add button 9979- ✅ Event items ← NEW! 9980- ✅ Past Events toggle ← NEW! 9981 9982**100% themed!** 9983 9984## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 9985 9986### Fixed: Theme Now Persists When Changing Months 9987- **Fixed:** Calendar theme no longer resets to default when navigating months 9988- **Fixed:** Theme data now stored in data attributes and used by JavaScript 9989- **Added:** rebuildCalendar now applies theme styles to all cells 9990 9991### ✨ Added: Event List Panel Now Themed 9992- **Added:** Right sidebar event list now uses theme colors 9993- **Added:** Event list header themed 9994- **Added:** Search box themed 9995- **Added:** Add button themed 9996- **Result:** Complete theme consistency across entire calendar! 9997 9998### The Problems 9999 10000**Problem 1: Month Navigation Lost Theme**: 10001``` 10002Initial load: Matrix theme ✓ (green) 10003Click "›" to next month 10004Result: Gray calendar ✗ (theme lost!) 10005``` 10006 10007**Problem 2: Event List Not Themed**: 10008``` 10009Calendar grid: Themed ✓ 10010Event list (right side): Plain gray ✗ 10011Inconsistent! 10012``` 10013 10014### The Fixes 10015 10016**Fix 1: Store Theme in Data Attributes**: 10017 10018```php 10019// PHP stores theme data: 10020<div data-theme="matrix" 10021 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 10022``` 10023 10024**Fix 2: JavaScript Uses Theme Data**: 10025 10026```javascript 10027// rebuildCalendar reads theme: 10028const theme = container.dataset.theme; 10029const themeStyles = JSON.parse(container.dataset.themeStyles); 10030 10031// Apply to cells: 10032const cellBg = isToday ? 10033 themeStyles.cell_today_bg : 10034 themeStyles.cell_bg; 10035``` 10036 10037**Fix 3: Theme Event List Panel**: 10038 10039```php 10040// Event list header: 10041style="background:{$themeStyles['header_bg']}; 10042 color:{$themeStyles['text_primary']};" 10043 10044// Event list container: 10045style="background:{$themeStyles['bg']};" 10046 10047// Search box: 10048style="background:{$themeStyles['cell_bg']}; 10049 color:{$themeStyles['text_primary']};" 10050 10051// Add button: 10052style="background:{$themeStyles['border']};" 10053``` 10054 10055### Before vs After 10056 10057**BEFORE (v4.7.0)**: 10058``` 10059Load page: Matrix theme everywhere ✓ 10060Navigate to next month: 10061 Calendar grid: Gray ✗ (theme lost) 10062 Event list: Gray ✗ (never themed) 10063``` 10064 10065**AFTER (v4.7.1)**: 10066``` 10067Load page: Matrix theme everywhere ✓ 10068Navigate to next month: 10069 Calendar grid: Matrix theme ✓ (preserved!) 10070 Event list: Matrix theme ✓ (themed!) 10071 10072Perfect consistency! ✨ 10073``` 10074 10075### What's Now Themed 10076 10077**Calendar Grid** (after navigation): 10078- ✅ Cell backgrounds 10079- ✅ Today cell highlight 10080- ✅ Empty cells 10081- ✅ Text colors 10082- ✅ Border colors 10083 10084**Event List Panel**: 10085- ✅ Panel background 10086- ✅ Header background & text 10087- ✅ Search box styling 10088- ✅ Add button colors 10089- ✅ Namespace badge 10090 10091### Technical Implementation 10092 10093**Data Flow**: 10094``` 100951. PHP: Get theme from config 10096 $theme = getSidebarTheme(); 10097 100982. PHP: Get theme styles 10099 $themeStyles = getSidebarThemeStyles($theme); 10100 101013. PHP: Store in data attributes 10102 data-theme="matrix" 10103 data-theme-styles='{...JSON...}' 10104 101054. JavaScript: Read on navigation 10106 const themeStyles = JSON.parse(container.dataset.themeStyles); 10107 101085. JavaScript: Apply to rebuilt elements 10109 style="background:${themeStyles.bg};" 10110``` 10111 10112**Result**: Theme persists across navigations! ✓ 10113 10114### All Themes Work Perfectly 10115 10116** Matrix**: 10117- Month change: Green ✓ 10118- Event list: Green ✓ 10119 10120** Purple**: 10121- Month change: Purple ✓ 10122- Event list: Purple ✓ 10123 10124** Professional**: 10125- Month change: Blue ✓ 10126- Event list: Blue ✓ 10127 10128** Pink**: 10129- Month change: Pink ✓ 10130- Event list: Pink ✓ 10131 10132**Fully consistent theming everywhere!** 10133 10134## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 10135 10136### ✨ Major Feature: Themes Now Apply to Compact Calendar 10137- **Added:** Full theme support for {{calendar-compact}} 10138- **Added:** Matrix, Purple, Professional, and Pink themes 10139- **Added:** Consistent theming across sidebar and calendar 10140- **Result:** Beautiful, cohesive appearance! 10141 10142### What's New 10143 10144**All 4 themes now work on the calendar**: 10145- **Matrix** - Green cyberpunk (default) 10146- **Purple** - Royal purple elegance 10147- **Professional** - Clean business blue 10148- **Pink** - Sparkly pink bling 10149 10150**Set in Admin Panel** → Theme applies everywhere! 10151 10152### Before vs After 10153 10154**BEFORE (v4.6.8)**: 10155``` 10156Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 10157Calendar: Plain gray (no theme) ✗ 10158 10159Inconsistent appearance! 10160``` 10161 10162**AFTER (v4.7.0)**: 10163``` 10164Sidebar: Themed ✓ 10165Calendar: SAME THEME ✓ 10166 10167Perfectly consistent! ✨ 10168``` 10169 10170### Theme Showcase 10171 10172**Matrix Theme** (Green): 10173``` 10174┌─────────────────────────┐ 10175│ ◀ February 2026 ▶ │ ← Green header 10176├─────────────────────────┤ 10177│ Dark background │ 10178│ Green borders │ 10179│ Green text │ 10180│ Green glow effects │ 10181└─────────────────────────┘ 10182``` 10183 10184**Purple Theme**: 10185``` 10186┌─────────────────────────┐ 10187│ ◀ February 2026 ▶ │ ← Purple header 10188├─────────────────────────┤ 10189│ Dark purple background │ 10190│ Purple borders │ 10191│ Lavender text │ 10192│ Purple glow │ 10193└─────────────────────────┘ 10194``` 10195 10196**Professional Theme** (Light): 10197``` 10198┌─────────────────────────┐ 10199│ ◀ February 2026 ▶ │ ← Blue header 10200├─────────────────────────┤ 10201│ Light gray background │ 10202│ Blue accents │ 10203│ Professional appearance │ 10204│ Clean, business-ready │ 10205└─────────────────────────┘ 10206``` 10207 10208**Pink Theme** (Bling): 10209``` 10210┌─────────────────────────┐ 10211│ ◀ February 2026 ▶ │ ← Hot pink header 10212├─────────────────────────┤ 10213│ Dark pink background │ 10214│ Pink borders & glow │ 10215│ Pink text │ 10216│ Sparkle effects ✨ │ 10217└─────────────────────────┘ 10218``` 10219 10220### What's Themed 10221 10222**Calendar Container**: 10223- Background color 10224- Border color 10225- Shadow/glow effect 10226 10227**Calendar Header**: 10228- Background gradient 10229- Border color 10230- Text color 10231- Button colors 10232 10233**Calendar Grid**: 10234- Grid background 10235- Grid borders 10236- Header row colors 10237 10238**Calendar Cells**: 10239- Cell background 10240- Today cell highlight 10241- Text color 10242- Border colors 10243 10244### Implementation 10245 10246**Theme Detection**: 10247```php 10248// Same theme system as sidebar 10249$theme = $this->getSidebarTheme(); 10250$themeStyles = $this->getSidebarThemeStyles($theme); 10251``` 10252 10253**Applied to Container**: 10254```php 10255style="background:' . $themeStyles['bg'] . '; 10256 border:2px solid ' . $themeStyles['border'] . '; 10257 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 10258``` 10259 10260**Applied to Header**: 10261```php 10262style="background:' . $themeStyles['header_bg'] . '; 10263 color:' . $themeStyles['text_primary'] . ';" 10264``` 10265 10266**Applied to Cells**: 10267```php 10268$cellBg = $isToday ? 10269 $themeStyles['cell_today_bg'] : 10270 $themeStyles['cell_bg']; 10271``` 10272 10273### How to Change Theme 10274 10275**In Admin Panel**: 102761. Go to Admin → Calendar Management 102772. Click " Themes" tab 102783. Select theme (Matrix/Purple/Professional/Pink) 102794. Theme applies to BOTH sidebar and calendar! ✓ 10280 10281**No configuration needed** - Just select and enjoy! 10282 10283### Theme Colors 10284 10285**Matrix**: 10286- Background: `#242424` (dark gray) 10287- Border: `#00cc07` (matrix green) 10288- Text: `#00cc07` (green) 10289- Today: `#2a4d2a` (green highlight) 10290 10291**Purple**: 10292- Background: `#2a2030` (dark purple) 10293- Border: `#9b59b6` (royal purple) 10294- Text: `#b19cd9` (lavender) 10295- Today: `#3d2b4d` (purple highlight) 10296 10297**Professional**: 10298- Background: `#e8ecf1` (light blue-gray) 10299- Border: `#4a90e2` (business blue) 10300- Text: `#2c3e50` (dark blue-gray) 10301- Today: `#dce8f7` (light blue highlight) 10302 10303**Pink**: 10304- Background: `#1a0d14` (dark pink-black) 10305- Border: `#ff1493` (hot pink) 10306- Text: `#ff69b4` (pink) 10307- Today: `#3d2030` (pink highlight) 10308 10309### Consistency 10310 10311**Both use same theme**: 10312``` 10313Admin Panel → Set theme to "Purple" 10314 10315{{calendar}} sidebar: Purple theme ✓ 10316{{calendar-compact}}: Purple theme ✓ 10317{{calendar-panel}}: Will be themed next! ✓ 10318 10319All calendars match! ✨ 10320``` 10321 10322**Perfectly coordinated appearance!** 10323 10324## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 10325 10326### Documentation: Added noheader Parameter Info 10327- **Added:** Documentation for existing `noheader` parameter 10328- **Updated:** README with complete eventlist parameter list 10329- **Info:** Feature already existed, just wasn't documented! 10330 10331### The noheader Parameter 10332 10333**What it does**: Hides the clock/date/weather header in eventlist 10334 10335**Usage**: 10336``` 10337{{eventlist today noheader}} 10338``` 10339 10340**Before (with header)**: 10341``` 10342┌─────────────────────────────────┐ 10343│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 10344├─────────────────────────────────┤ 10345│ 5 min load │ CPU │ Memory │ ← System stats 10346├─────────────────────────────────┤ 10347│ Today's Events │ 10348│ • 10:00 Team Meeting │ 10349│ • 2:00 Project Review │ 10350└─────────────────────────────────┘ 10351``` 10352 10353**After (noheader)**: 10354``` 10355┌─────────────────────────────────┐ 10356│ Today's Events │ ← No header! 10357│ • 10:00 Team Meeting │ 10358│ • 2:00 Project Review │ 10359└─────────────────────────────────┘ 10360 10361Cleaner, more compact! ✓ 10362``` 10363 10364### When to Use noheader 10365 10366**Use WITH header** (default): 10367- Dashboard view 10368- Want to see current time 10369- Want weather info 10370- Want system stats 10371 10372**Use WITHOUT header** (`noheader`): 10373- Embedded in page content 10374- Just want event list 10375- Minimal design 10376- Space-constrained 10377 10378### Complete eventlist Parameters 10379 10380**Date Parameters**: 10381``` 10382date=YYYY-MM-DD Show specific date 10383daterange=START:END Show date range 10384``` 10385 10386**Filter Parameters**: 10387``` 10388namespace=name Filter by namespace 10389``` 10390 10391**Display Parameters**: 10392``` 10393today Show today with live clock 10394noheader Hide clock/date/weather header 10395showchecked Show completed tasks 10396range=day|week|month Show day/week/month range 10397``` 10398 10399### Examples 10400 10401**Full featured** (dashboard): 10402``` 10403{{eventlist today}} 10404``` 10405Shows: Clock, weather, system stats, events ✓ 10406 10407**Minimal** (embedded): 10408``` 10409{{eventlist today noheader}} 10410``` 10411Shows: Just events ✓ 10412 10413**Date range without header**: 10414``` 10415{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 10416``` 10417Shows: Events for February, no header ✓ 10418 10419**With namespace filter**: 10420``` 10421{{eventlist today namespace=work noheader}} 10422``` 10423Shows: Today's work events, no header ✓ 10424 10425### Implementation 10426 10427**Already existed in code** (line 833): 10428```php 10429$noheader = isset($data['noheader']) ? true : false; 10430``` 10431 10432**Applied at render** (line 1010): 10433```php 10434if ($today && !empty($allEvents) && !$noheader) { 10435 // Render clock header with date/time/weather 10436} 10437``` 10438 10439**Just wasn't documented!** Now it is. ✓ 10440 10441## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 10442 10443### ✨ Improvement: Removed Filter Badge Above Sidebar 10444- **Removed:** Filter badge no longer shows above compact calendar 10445- **Reason:** Filtering is already clearly visible in the calendar view 10446- **Result:** Cleaner UI, less redundancy 10447 10448### What Changed 10449 10450**BEFORE**: 10451``` 10452┌─────────────────────────┐ 10453│ Filtering: work ✕ │ ← Badge above calendar 10454├─────────────────────────┤ 10455│ ◀ February 2026 ▶ │ 10456├─────────────────────────┤ 10457│ Calendar grid with │ 10458│ filtered events │ ← Already filtered 10459└─────────────────────────┘ 10460 10461Badge was redundant - you can already see 10462the filtering in the calendar! 10463``` 10464 10465**AFTER**: 10466``` 10467┌─────────────────────────┐ 10468│ ◀ February 2026 ▶ │ ← No badge! 10469├─────────────────────────┤ 10470│ Calendar grid with │ 10471│ filtered events │ ← Filtering visible here 10472└─────────────────────────┘ 10473 10474Cleaner, simpler UI ✓ 10475``` 10476 10477### Why Remove It? 10478 10479**Redundant Information**: 10480- Calendar already shows only filtered events 10481- Namespace badges on events show which namespace 10482- Badge added visual clutter without value 10483 10484**Better UX**: 10485- Less visual noise 10486- More space for content 10487- Filtering still obvious from event display 10488 10489**Code Cleanup**: 10490```php 10491// Old code (removed): 10492if ($namespace && $namespace !== '*' && ...) { 10493 $html .= '<div class="calendar-namespace-filter">'; 10494 $html .= 'Filtering: ' . $namespace . ' ✕'; 10495 $html .= '</div>'; 10496} 10497 10498// New code: 10499// Filter badge removed - filtering shown in calendar view only 10500``` 10501 10502### How Filtering Still Works 10503 10504**Filtering IS Active**: 10505- Calendar only shows events from selected namespace ✓ 10506- Event namespace badges show which namespace ✓ 10507- Clear filtering still works (in calendar) ✓ 10508 10509**Just No Badge**: 10510- No redundant "Filtering: work ✕" above calendar 10511- Cleaner, more professional appearance 10512 10513### What You Still See 10514 10515**Namespace Information**: 10516``` 10517Event with namespace badge: 10518┌────────────────────────┐ 10519│ 10:00 Team Meeting │ 10520│ [work] ←─────────┼─ Namespace badge on event 10521└────────────────────────┘ 10522``` 10523 10524**Filtered View**: 10525- Only events from selected namespace visible 10526- Empty dates show no events 10527- Clear which namespace you're viewing 10528 10529**No Need for Top Badge**: 10530- Already obvious from events shown 10531- Namespace badges provide context 10532- Less clutter! 10533 10534### Summary 10535 10536**Removed**: Filter badge above calendar 10537**Kept**: All filtering functionality 10538**Benefit**: Cleaner UI 10539 10540**Filtering works the same, just without the redundant badge!** ✨ 10541 10542## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 10543 10544### Fixed: Filter Badge Now Disappears Immediately 10545- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 10546- **Added:** Badge removal before page reload/AJAX call 10547- **Result:** Badge disappears instantly, no waiting for reload 10548 10549### The Problem 10550 10551**v4.6.5 behavior**: 10552``` 10553Click ✕ to clear filter 10554→ Page reloads or AJAX fires 10555→ Badge stays visible during reload ✗ 10556→ Badge finally disappears after reload ✓ 10557 10558User sees badge for 0.5-2 seconds after clicking ✕ 10559Feels laggy! ✗ 10560``` 10561 10562### The Fix 10563 10564**Immediately remove badge from DOM**: 10565 10566```javascript 10567window.clearNamespaceFilter = function(calId) { 10568 const container = document.getElementById(calId); 10569 10570 // IMMEDIATELY hide/remove the filter badge 10571 const filterBadge = container.querySelector('.calendar-namespace-filter'); 10572 if (filterBadge) { 10573 filterBadge.style.display = 'none'; // Hide instantly 10574 filterBadge.remove(); // Remove from DOM 10575 } 10576 10577 // THEN reload (AJAX or page reload) 10578 navCalendar(...) or window.location.href = ... 10579}; 10580``` 10581 10582### Before vs After 10583 10584**BEFORE (v4.6.5)**: 10585``` 10586Time 0ms: Click ✕ 10587┌─────────────────────────┐ 10588│ Filtering: work ✕ │ ← Still visible 10589├─────────────────────────┤ 10590 10591Time 500ms: Reload completes 10592┌─────────────────────────┐ 10593│ (no badge) │ ← Finally gone 10594├─────────────────────────┤ 10595 10596Delay: 500-2000ms ✗ 10597``` 10598 10599**AFTER (v4.6.6)**: 10600``` 10601Time 0ms: Click ✕ 10602┌─────────────────────────┐ 10603│ (no badge) │ ← Gone immediately! 10604├─────────────────────────┤ 10605 10606Time 500ms: Reload completes 10607┌─────────────────────────┐ 10608│ (no badge) │ ← Still gone 10609├─────────────────────────┤ 10610 10611Delay: 0ms ✓ 10612Instant feedback! ✓ 10613``` 10614 10615### Implementation 10616 10617**Two-step removal**: 10618 10619**Step 1**: Hide immediately 10620```javascript 10621filterBadge.style.display = 'none'; 10622// User sees badge disappear instantly 10623``` 10624 10625**Step 2**: Remove from DOM 10626```javascript 10627filterBadge.remove(); 10628// Clean up HTML 10629``` 10630 10631**Step 3**: Reload 10632```javascript 10633// Sidebar: Page reload 10634window.location.href = url.toString(); 10635 10636// Calendar: AJAX reload 10637navCalendar(calId, year, month, originalNamespace); 10638``` 10639 10640**Result**: Badge gone BEFORE reload starts ✓ 10641 10642### Why This Matters 10643 10644**User Experience**: 10645- Old: Click ✕ → Wait → Badge disappears 10646- New: Click ✕ → Badge disappears instantly 10647 10648**Perceived Performance**: 10649- Instant visual feedback 10650- Feels responsive 10651- Professional UX 10652 10653**Technical**: 10654- DOM manipulation is synchronous (instant) 10655- Network requests are asynchronous (slow) 10656- Do fast things first! 10657 10658**Badge now disappears the moment you click ✕!** ⚡ 10659 10660## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 10661 10662### Fixed: Filter Badge Not Clearing in Sidebar 10663- **Fixed:** Filter badge now properly clears when clicking ✕ button 10664- **Fixed:** Sidebar widget now reloads page without namespace filter 10665- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 10666 10667### The Problem 10668 10669**In {{calendar}} sidebar widget**: 10670``` 106711. Click namespace badge to filter 106722. Badge appears: "Filtering: work ✕" 106733. Click ✕ to clear filter 106744. Badge stays visible! ✗ 106755. Events still filtered! ✗ 10676``` 10677 10678**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 10679 10680### The Fix 10681 10682**Detect widget type and handle appropriately**: 10683 10684```javascript 10685window.clearNamespaceFilter = function(calId) { 10686 const container = document.getElementById(calId); 10687 10688 // Check if this is a sidebar widget 10689 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 10690 10691 if (sidebarContainer) { 10692 // SIDEBAR: Reload page without namespace parameter 10693 const url = new URL(window.location.href); 10694 url.searchParams.delete('namespace'); 10695 window.location.href = url.toString(); // Page reload 10696 return; 10697 } 10698 10699 // REGULAR CALENDAR: AJAX reload 10700 navCalendar(calId, year, month, originalNamespace); 10701}; 10702``` 10703 10704### How It Works 10705 10706**Sidebar Widget** ({{calendar}} syntax): 10707``` 10708Rendered server-side with PHP 10709Cannot be AJAX-reloaded 10710Solution: Reload entire page without ?namespace=work parameter 10711``` 10712 10713**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 10714``` 10715Has AJAX reload capability 10716Solution: Call navCalendar() to reload via AJAX 10717``` 10718 10719### Before vs After 10720 10721**BEFORE (v4.6.4)**: 10722``` 10723Sidebar widget filtered by "work": 10724┌─────────────────────────┐ 10725│ Filtering: work ✕ │ ← Click ✕ 10726├─────────────────────────┤ 10727│ Today │ 10728│ • Work meeting │ 10729└─────────────────────────┘ 10730 10731After clicking ✕: 10732┌─────────────────────────┐ 10733│ Filtering: work ✕ │ ← Still there! ✗ 10734├─────────────────────────┤ 10735│ Today │ 10736│ • Work meeting │ ← Still filtered! ✗ 10737└─────────────────────────┘ 10738``` 10739 10740**AFTER (v4.6.5)**: 10741``` 10742Sidebar widget filtered by "work": 10743┌─────────────────────────┐ 10744│ Filtering: work ✕ │ ← Click ✕ 10745├─────────────────────────┤ 10746│ Today │ 10747│ • Work meeting │ 10748└─────────────────────────┘ 10749 10750After clicking ✕ → Page reloads: 10751┌─────────────────────────┐ 10752│ (no filter badge) │ ← Cleared! ✓ 10753├─────────────────────────┤ 10754│ Today │ 10755│ • Work meeting │ 10756│ • Personal task │ ← All events! ✓ 10757│ • Project review │ 10758└─────────────────────────┘ 10759``` 10760 10761### Technical Details 10762 10763**Why Page Reload for Sidebar?** 10764 10765Sidebar widget is rendered server-side: 10766```php 10767// In syntax.php: 10768return $this->renderSidebarWidget($events, $namespace, $calId); 10769// ↑ PHP generates complete HTML 10770// No AJAX reload endpoint exists for sidebar 10771``` 10772 10773**Solution**: Remove `?namespace=work` from URL and reload page 10774```javascript 10775const url = new URL(window.location.href); 10776url.searchParams.delete('namespace'); // Remove filter 10777window.location.href = url.toString(); // Reload 10778``` 10779 10780**Why AJAX for Regular Calendar?** 10781 10782Regular calendars have AJAX endpoints: 10783```javascript 10784// action.php handles: 10785action: 'load_month' → Returns new month data 10786navCalendar() → Fetches and rebuilds calendar 10787``` 10788 10789### Filter Badge Behavior 10790 10791**Showing Badge** (when filtering): 10792- Server-side: PHP renders badge in HTML 10793- Client-side: JavaScript adds badge to header 10794 10795**Clearing Badge**: 10796- Sidebar: Page reload (removes ?namespace from URL) 10797- Calendar: AJAX reload (badge removed in rebuildCalendar) 10798 10799**Now works correctly for both!** ✓ 10800 10801## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 10802 10803### Critical Hotfix: Fixed PHP Parse Error 10804- **Fixed:** Template literal backticks causing PHP syntax error 10805- **Fixed:** Changed JavaScript template literals to concatenation 10806- **Fixed:** Admin page now loads without parse errors 10807 10808### The Problem 10809 10810**v4.6.3 broke admin page**: 10811``` 10812Error loading plugin calendar 10813ParseError: syntax error, unexpected identifier "s", 10814expecting "," or ";" 10815``` 10816 10817**Cause**: JavaScript template literals inside PHP echo 10818```php 10819echo '<script> 10820 let nsOptions = `<option value="">(default)</option>`; 10821 ↑ PHP sees backtick and gets confused! 10822</script>'; 10823``` 10824 10825**Why it broke**: Backticks (`) are special in PHP too! 10826 10827### The Fix 10828 10829**Changed from template literals to concatenation**: 10830 10831**BEFORE (broken)**: 10832```javascript 10833let nsOptions = `<option value="">(default)</option>`; 10834nsOptions += `<option value="${namespace}">${namespace}</option>`; 10835console.log('Edit recurring:', namespace); 10836``` 10837 10838**AFTER (fixed)**: 10839```javascript 10840let nsOptions = "<option value=\\"\\">(default)</option>"; 10841nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 10842console.log("Edit recurring:", namespace); 10843``` 10844 10845**Changes**: 10846- ✅ Backticks (`) → Double quotes (") 10847- ✅ Template literals (${var}) → Concatenation (" + var + ") 10848- ✅ Single quotes in console.log → Double quotes 10849- ✅ Properly escaped quotes for PHP echo 10850 10851### Technical Details 10852 10853**The Issue**: 10854```php 10855// Inside PHP echo string: 10856echo '<script> 10857 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 10858</script>'; 10859``` 10860 10861**The Solution**: 10862```php 10863// Use regular string concatenation: 10864echo '<script> 10865 let x = "string " + variable; // ✓ Works in PHP echo! 10866</script>'; 10867``` 10868 10869**Quote Escaping**: 10870```javascript 10871// Double quotes inside PHP single-quote string: 10872'<option value=\"\">text</option>' 10873 ↑↑ Escaped for JavaScript 10874``` 10875 10876### Result 10877 10878**Before**: Admin page crashed with parse error ✗ 10879**After**: Admin page loads perfectly ✓ 10880 10881**No functionality changed - just syntax fix!** 10882 10883## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 10884 10885### Critical Fix: Namespace Dropdown in Recurring Events Section 10886- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 10887- **Fixed:** Current namespace now properly selected in dropdown 10888- **Fixed:** Namespace extraction from DOM now uses multiple methods 10889- **Added:** Console logging to debug namespace detection 10890 10891### The Problem 10892 10893**When editing from Recurring Events section**: 10894``` 10895Click "Edit" on recurring event 10896Namespace dropdown shows: 10897- (default) 10898- (nothing else!) ✗ 10899 10900Can't select any namespace! ✗ 10901``` 10902 10903**Why**: Broken namespace extraction logic 10904```javascript 10905// OLD CODE (broken): 10906const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 10907 .map(el => { 10908 // Complex parsing that often failed 10909 const nsSpan = el.querySelector("span:nth-child(3)"); 10910 return nsSpan.textContent.replace(" ", "").trim(); 10911 }) 10912 .filter(ns => ns !== namespace); // Excluded current! ✗ 10913``` 10914 10915**Result**: Empty dropdown, can't change namespace! ✗ 10916 10917### The Fix 10918 10919**NEW CODE (robust)**: 10920```javascript 10921const namespaces = new Set(); 10922 10923// Method 1: Namespace explorer folders 10924document.querySelectorAll("[id^=ns_]").forEach(el => { 10925 const nsSpan = el.querySelector("span:nth-child(3)"); 10926 if (nsSpan) { 10927 let nsText = nsSpan.textContent.replace(" ", "").trim(); 10928 if (nsText && nsText !== "(default)") { 10929 namespaces.add(nsText); // ✓ 10930 } 10931 } 10932}); 10933 10934// Method 2: Datalist (backup method) 10935document.querySelectorAll("#namespaceList option").forEach(opt => { 10936 if (opt.value && opt.value !== "") { 10937 namespaces.add(opt.value); // ✓ 10938 } 10939}); 10940 10941// Build dropdown with ALL namespaces 10942let options = `<option value="">(default)</option>`; 10943 10944// Show current namespace as selected 10945if (namespace) { 10946 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 10947} 10948 10949// Show all other namespaces 10950for (const ns of nsArray) { 10951 if (ns !== namespace) { 10952 options += `<option value="${ns}">${ns}</option>`; 10953 } 10954} 10955``` 10956 10957**Result**: All namespaces visible! ✓ 10958 10959### How It Works Now 10960 10961**Before (Broken)**: 10962``` 10963Edit recurring event in "work" namespace 10964 10965Dropdown shows: 10966☐ (default) 10967 10968That's it! Can't select anything! ✗ 10969``` 10970 10971**After (Fixed)**: 10972``` 10973Edit recurring event in "work" namespace 10974 10975Dropdown shows: 10976☐ (default) 10977☑ work (current) ← Selected! 10978☐ personal 10979☐ projects 10980☐ meetings 10981 10982All namespaces available! ✓ 10983``` 10984 10985### Key Improvements 10986 10987**1. Dual extraction methods**: 10988- Primary: Parse namespace explorer DOM 10989- Backup: Read from datalist 10990- Result: Always finds namespaces ✓ 10991 10992**2. Current namespace included**: 10993```javascript 10994// OLD: Excluded current namespace 10995.filter(ns => ns !== namespace) ✗ 10996 10997// NEW: Include and mark as selected 10998options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 10999``` 11000 11001**3. Better error handling**: 11002```javascript 11003if (nsSpan) { // Check exists 11004 let nsText = nsSpan.textContent.replace(" ", "").trim(); 11005 if (nsText && nsText !== "(default)") { // Validate 11006 namespaces.add(nsText); 11007 } 11008} 11009``` 11010 11011**4. Console debugging**: 11012```javascript 11013console.log('Edit recurring - Current namespace:', namespace); 11014console.log('Available namespaces:', nsArray); 11015``` 11016 11017Open browser console (F12) to see what namespaces are detected! 11018 11019### Example Usage 11020 11021**Scenario**: Edit recurring "Team Meeting" in "work" namespace 11022 11023**Steps**: 110241. Go to Recurring Events section 110252. Click "Edit" on "Team Meeting" 110263. See namespace dropdown: 11027 - ☐ (default) 11028 - ☑ work (current) 11029 - ☐ personal 11030 - ☐ projects 110314. Select "personal" to move event 110325. Click "Save Changes" 110336. Event moved to "personal" namespace ✓ 11034 11035**Finally works as expected!** 11036 11037## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 11038 11039### Recurring Events Namespace Fix 11040- **Fixed:** Namespace now properly preserved when editing recurring events 11041- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 11042- **Added:** Better logging for namespace preservation debugging 11043- **Added:** Console logging to track namespace values during edit 11044 11045### The Namespace Problem 11046 11047**Issue 1**: Can't select non-default namespace 11048``` 11049When editing recurring event: 11050- Dropdown shows all namespaces ✓ 11051- User selects "work" 11052- Form submits with "" (empty/default) ✗ 11053``` 11054 11055**Issue 2**: Namespace not preserved 11056``` 11057Recurring event in "personal" namespace 11058Edit the title only 11059After save: namespace changed to "" (default) ✗ 11060``` 11061 11062### The Fixes 11063 11064**Fix 1**: Better namespace preservation logic 11065```php 11066// When editing recurring event: 11067$existingNamespace = $existingEventData['namespace']; 11068 11069// Preserve if user didn't explicitly change it: 11070if (empty($namespace) || 11071 strpos($namespace, '*') !== false || 11072 strpos($namespace, ';') !== false) { 11073 // User didn't select or selected wildcard 11074 $namespace = $existingNamespace; // Keep existing! 11075} 11076``` 11077 11078**Fix 2**: Proper form population 11079```javascript 11080// When editing, set BOTH inputs: 11081namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 11082namespaceSearch.value = event.namespace || '(default)'; // Visible 11083 11084// Plus logging: 11085console.log('Set namespace for editing:', event.namespace); 11086``` 11087 11088**Fix 3**: Added detailed logging 11089```php 11090error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 11091error_log("Using new namespace '$namespace'"); 11092error_log("No existing namespace to preserve"); 11093``` 11094 11095### How It Works Now 11096 11097**Scenario 1**: Edit without changing namespace 11098``` 11099Event in "work" namespace 11100Edit title to "Updated Meeting" 11101Namespace field shows: "work" 11102Hidden input value: "work" 11103Result: Saved in "work" ✓ 11104``` 11105 11106**Scenario 2**: Change namespace during edit 11107``` 11108Event in "personal" namespace 11109Edit and select "work" namespace 11110Hidden input value: "work" 11111Result: Saved in "work" ✓ 11112``` 11113 11114**Scenario 3**: Edit with empty/wildcard namespace 11115``` 11116Event in "projects" namespace 11117Namespace field empty or shows "personal;work" 11118System preserves: "projects" 11119Result: Saved in "projects" ✓ 11120``` 11121 11122### Debugging 11123 11124Now with console logging, you can see: 11125```javascript 11126Set namespace for editing: work 11127Hidden value: work 11128``` 11129 11130And in PHP logs: 11131``` 11132Calendar saveEvent recurring: Loaded existing data - namespace='work' 11133Calendar saveEvent recurring: Preserving namespace 'work' (received='') 11134``` 11135 11136**Namespace preservation now works correctly!** 11137 11138## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 11139 11140### Recurring Events Edit Fix 11141- **Fixed:** Editing recurring events now preserves unchanged fields 11142- **Fixed:** Empty fields no longer erase existing data 11143- **Added:** Smart merge of existing event data with new changes 11144 11145### The Problem 11146 11147**Before**: Editing erased unchanged fields! 11148``` 11149Original recurring event: 11150- Title: "Team Meeting" 11151- Time: "10:00 AM" 11152- Description: "Weekly standup with engineering team" 11153- Color: Red 11154 11155User edits ONLY the title to "Staff Meeting" 11156Form sends: 11157- Title: "Staff Meeting" ✓ 11158- Time: "" ✗ (empty because user didn't change it) 11159- Description: "" ✗ (empty) 11160- Color: "#3498db" ✗ (default blue) 11161 11162Result after save: 11163- Title: "Staff Meeting" ✓ 11164- Time: BLANK ✗ 11165- Description: BLANK ✗ 11166- Color: Blue ✗ 11167``` 11168 11169**All the other data was lost!** ✗ 11170 11171### The Fix 11172 11173**After**: Preserves unchanged data! 11174```php 11175if ($eventId && $isRecurring) { 11176 // Load existing event data 11177 $existingEventData = getExistingEventData($eventId); 11178 11179 // Merge: use new value OR keep existing 11180 $title = $title ?: $existingEventData['title']; 11181 $time = $time ?: $existingEventData['time']; 11182 $description = $description ?: $existingEventData['description']; 11183 $color = ($color === '#3498db') ? 11184 $existingEventData['color'] : $color; 11185} 11186``` 11187 11188**Now**: 11189``` 11190User edits ONLY the title to "Staff Meeting" 11191 11192System: 111931. Loads existing event data 111942. Merges: new title + existing time/description/color 111953. Saves merged data 11196 11197Result: 11198- Title: "Staff Meeting" ✓ (changed) 11199- Time: "10:00 AM" ✓ (preserved!) 11200- Description: "Weekly standup..." ✓ (preserved!) 11201- Color: Red ✓ (preserved!) 11202``` 11203 11204**Only changed fields are updated!** ✓ 11205 11206### How It Works 11207 11208**Step 1**: Load existing data 11209```php 11210$existingEventData = $this->getExistingEventData( 11211 $eventId, 11212 $date, 11213 $namespace 11214); 11215``` 11216 11217**Step 2**: Merge with new data 11218```php 11219// If new value is empty, use existing value 11220$title = $newTitle ?: $existingEventData['title']; 11221$time = $newTime ?: $existingEventData['time']; 11222$description = $newDesc ?: $existingEventData['description']; 11223 11224// Special handling for color (default is #3498db) 11225if ($newColor === '#3498db' && $existingEventData['color']) { 11226 $color = $existingEventData['color']; 11227} 11228``` 11229 11230**Step 3**: Save merged data 11231```php 11232createRecurringEvents(..., $title, $time, $description, $color, ...); 11233``` 11234 11235### Fields Preserved 11236 11237When editing recurring events, these fields are now preserved if not changed: 11238- ✅ Title (if left blank) 11239- ✅ Time (if not specified) 11240- ✅ End Time (if not specified) 11241- ✅ Description (if left empty) 11242- ✅ Color (if still default blue) 11243 11244**Edit only what you want to change - everything else stays!** 11245 11246## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 11247 11248### ✨ New Feature: Rename Namespaces 11249- **Added:** ✏️ Rename button in Namespace Explorer 11250- **Added:** Rename all events in a namespace at once 11251- **Added:** Automatic cleanup of old directory structure 11252 11253### Critical Fix: Recurring Events Actually Edit Now! 11254- **Fixed:** Editing recurring events now deletes ALL instances 11255- **Fixed:** Previously only deleted one instance, left orphans 11256- **Fixed:** Recurring events properly regenerated on edit 11257 11258### Namespace Rename Feature 11259 11260**Before**: Could only delete namespaces, not rename 11261 11262**After**: Click ✏️ to rename! 11263 11264``` 11265 work (15 events) [3] [✏️] [️] 11266 ↑ NEW! 11267``` 11268 11269**How It Works**: 112701. Click ✏️ rename button 112712. Enter new namespace name 112723. All events moved to new namespace 112734. Event `namespace` field updated in JSON 112745. Old directory cleaned up 11275 11276**Example**: 11277``` 11278Rename: "work" → "business" 11279 11280Before: 11281/data/meta/work/calendar/*.json 11282Events: {namespace: "work"} 11283 11284After: 11285/data/meta/business/calendar/*.json 11286Events: {namespace: "business"} 11287``` 11288 11289**Implementation**: 11290```php 11291private function renameNamespace() { 11292 // 1. Validate new name 11293 // 2. Rename directory 11294 // 3. Update all event namespace fields in JSON 11295 // 4. Clean up old empty directories 11296} 11297``` 11298 11299### Recurring Events Fix - The Problem 11300 11301**Before**: Editing didn't work! 11302``` 11303Original recurring event generates: 11304- Event-0 (Mon, Feb 10) 11305- Event-1 (Mon, Feb 17) 11306- Event-2 (Mon, Feb 24) 11307 11308User edits Event-0, changes title to "Updated" 11309 11310What SHOULD happen: 11311- Delete Event-0, Event-1, Event-2 11312- Generate new instances with "Updated" title 11313 11314What ACTUALLY happened: 11315- Delete Event-0 only ✗ 11316- Generate new instances 11317- Result: Event-1 and Event-2 still show old title! ✗ 11318``` 11319 11320**After**: Properly deletes ALL instances! 11321 11322**The Fix**: 11323```php 11324private function deleteEvent() { 11325 $event = getEvent($eventId); 11326 11327 // Check if recurring 11328 if ($event['recurring'] && $event['recurringId']) { 11329 // Delete ALL instances with same recurringId 11330 deleteAllRecurringInstances($recurringId); 11331 } 11332 11333 // Then normal delete for spanning events 11334} 11335 11336private function deleteAllRecurringInstances($recurringId) { 11337 // Scan ALL calendar JSON files 11338 foreach (glob('*.json') as $file) { 11339 // Filter out events with matching recurringId 11340 $events = array_filter($events, function($event) { 11341 return $event['recurringId'] !== $recurringId; 11342 }); 11343 } 11344} 11345``` 11346 11347**Result**: 11348- Edit "Weekly Team Meeting" → ALL instances updated ✓ 11349- Delete recurring event → ALL instances deleted ✓ 11350- No more orphaned events! ✓ 11351 11352### Recurring Event Fields 11353 11354Every recurring event has: 11355```json 11356{ 11357 "id": "abc123-0", 11358 "recurring": true, 11359 "recurringId": "abc123", ← Links all instances 11360 ... 11361} 11362``` 11363 11364When editing/deleting, we find ALL events with same `recurringId` and remove them! 11365 11366**Finally, recurring events work properly!** 11367 11368## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 11369 11370### Important Events Sorting - ACTUALLY FIXED! 11371- **Fixed:** Important Events now REALLY sorted by date first, then time 11372- **Fixed:** renderSidebarSection was re-sorting and breaking the order 11373- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 11374 11375### Pink Theme Tooltip Bling! 11376- **Added:** Pink gradient tooltips (hot pink → light pink) 11377- **Added:** Glowing pink border on tooltips 11378- **Added:** Sparkling heart () appears next to tooltip! 11379- **Added:** Heart has pink glow drop-shadow 11380 11381### The Sorting Bug - Root Cause 11382 11383**Problem**: Two sorts were happening! 11384 11385**Sort #1** (Line 2047): Before rendering 11386```php 11387usort($importantEvents, ...) // Sort by date ✓ 11388``` 11389 11390**Sort #2** (Line 2751): Inside renderSidebarSection 11391```php 11392usort($events, ...) // Sort by TIME ONLY ✗ 11393// This was breaking the date order! 11394``` 11395 11396**The Fix**: Different sorting for different sections 11397```php 11398if ($title === 'Important Events') { 11399 // Sort by DATE first, then time 11400 usort($events, function($a, $b) { 11401 if ($dateA !== $dateB) { 11402 return strcmp($dateA, $dateB); // DATE first! 11403 } 11404 // Same date - sort by time 11405 return timeCompare($a, $b); 11406 }); 11407} else { 11408 // Today/Tomorrow - sort by TIME only (same date) 11409 usort($events, function($a, $b) { 11410 return timeCompare($a, $b); 11411 }); 11412} 11413``` 11414 11415**Result**: Important Events now CORRECTLY sorted! 11416``` 11417✓ Sun, Feb 8 - 3:30 PM Super Bowl 11418✓ Tue, Feb 10 - 11:30 AM Doctor visit 11419✓ Sat, Feb 14 - Valentine's Day (all-day) 11420✓ Sat, Feb 14 - 8:00 PM Crab Shack 11421``` 11422 11423### Pink Tooltip Magic! 11424 11425**Normal Tooltips**: Black background, plain 11426```css 11427background: rgba(0, 0, 0, 0.95); 11428color: #fff; 11429``` 11430 11431**Pink Theme Tooltips**: FABULOUS! 11432```css 11433/* Pink gradient background */ 11434background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 11435 11436/* Glowing pink border */ 11437border: 2px solid #ff85c1; 11438 11439/* Double glow shadow */ 11440box-shadow: 11441 0 0 15px rgba(255, 20, 147, 0.6), 11442 0 4px 12px rgba(0, 0, 0, 0.4); 11443 11444/* Bold text */ 11445font-weight: 600; 11446``` 11447 11448**Plus**: Sparkling heart next to tooltip! 11449```css 11450.sidebar-pink [data-tooltip]:after { 11451 content: ''; 11452 font-size: 12px; 11453 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 11454} 11455``` 11456 11457**The Effect**: 11458``` 11459Hover over ⚠ conflict warning: 11460┌────────────────────┐ 11461│ Conflicts with: │ ← Pink gradient 11462│ • Event 1 (3PM) │ ← Pink border 11463│ • Event 2 (4PM) │ ← Pink glow 11464└────────────────────┘ 11465``` 11466 11467**Maximum glamour on tooltips too!** ✨ 11468 11469## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 11470 11471### Important Events Order Fixed 11472- **Fixed:** Important Events now sorted by date (earliest first) 11473- **Fixed:** Events on same date sorted by time (chronological) 11474- **Fixed:** All-day events appear last within each date 11475 11476### Sorting Issue 11477 11478**Before**: Random order 11479``` 11480Important Events: 11481 Valentine's Day (Sat, Feb 14) 1148211:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 114833:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 114848:00 PM Crab Shack (Sat, Feb 14) 11485``` 11486 11487**After**: Chronological order 11488``` 11489Important Events: 114903:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 1149111:30 AM Doctor visit (Tue, Feb 10) 11492 Valentine's Day (Sat, Feb 14) ← All-day event 114938:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 11494``` 11495 11496### Sorting Logic 11497 11498**Primary Sort**: By date 11499```php 11500strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 11501``` 11502 11503**Secondary Sort**: By time (within same date) 11504```php 11505// All-day events (no time) go last 11506if (empty($timeA) && !empty($timeB)) return 1; 11507if (!empty($timeA) && empty($timeB)) return -1; 11508 11509// Both have times - sort chronologically 11510$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 11511$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 11512return $aMinutes - $bMinutes; // 690 < 1200 11513``` 11514 11515**Result**: 115161. Sun, Feb 8 - 3:30 PM (earliest date & time) 115172. Tue, Feb 10 - 11:30 AM (next date) 115183. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 115194. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 11520 11521**Perfect chronological order for next 2 weeks!** ✓ 11522 11523## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 11524 11525### EXTREME PINK BLING EFFECTS! 11526- **Added:** Click sparkles - 8 sparkles burst out on every click! 11527- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 11528- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 11529- **Added:** Pulsing border glow - constantly breathing pink glow 11530- **Added:** Drop shadows on sparkles for extra depth 11531- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 11532 11533### Sparkle Effects Breakdown 11534 11535**Click Sparkles** : 11536```javascript 11537// 8 sparkles burst out when you click anywhere! 11538for (let i = 0; i < 8; i++) { 11539 // Staggered appearance (40ms apart) 11540 createSparkle(x, y); 11541} 11542 11543// Sparkle emojis: 11544["✨", "", "", "⭐", "", "", "", "", "", ""] 11545``` 11546 11547**Each sparkle**: 11548- Starts at click point 11549- Flies outward 30-60px in random direction 11550- Spins 360 degrees 11551- Fades in and out 11552- Has pink glow drop-shadow 11553- Disappears after 1 second 11554 11555**Auto Sparkles** ⏰: 11556```javascript 11557// Random sparkle every 3 seconds 11558setInterval(() => { 11559 const x = Math.random() * width; 11560 const y = Math.random() * height; 11561 createSparkle(x, y); 11562}, 3000); 11563``` 11564 11565**Result**: Constant magical sparkles even without clicking! ✨ 11566 11567**Hover Mega-Glow** : 11568```css 11569.sidebar-pink:hover { 11570 box-shadow: 11571 0 0 30px rgba(255, 20, 147, 0.9), 11572 0 0 50px rgba(255, 20, 147, 0.5) !important; 11573} 11574``` 11575 11576**Result**: Sidebar EXPLODES with pink glow when you hover over it! 11577 11578**Pulsing Border Glow** : 11579```css 11580@keyframes pulse-glow { 11581 0%, 100% { 11582 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11583 } 11584 50% { 11585 box-shadow: 11586 0 0 25px rgba(255, 20, 147, 0.8), 11587 0 0 40px rgba(255, 20, 147, 0.4); 11588 } 11589} 11590 11591animation: pulse-glow 3s ease-in-out infinite; 11592``` 11593 11594**Result**: Border continuously breathes with pink glow! 11595 11596**Sparkle Animation** : 11597```css 11598@keyframes sparkle { 11599 0% { 11600 opacity: 0; 11601 transform: translate(0, 0) scale(0) rotate(0deg); 11602 } 11603 50% { 11604 opacity: 1; 11605 transform: translate(halfway) scale(1) rotate(180deg); 11606 } 11607 100% { 11608 opacity: 0; 11609 transform: translate(far) scale(0) rotate(360deg); 11610 } 11611} 11612``` 11613 11614**Result**: Sparkles spin, grow, shrink, and fly! 11615 11616### Complete Pink Bling Experience: 11617 11618**Always Active**: 11619- ✨ Pulsing pink border glow (3 second cycle) 11620- ✨ Auto-sparkles every 3 seconds 11621 11622**On Hover**: 11623- MEGA GLOW EFFECT (2x brightness!) 11624 11625**On Click**: 11626- 8 sparkles EXPLODE outward! 11627- Random emojis (hearts, stars, diamonds, crowns!) 11628- Each sparkle spins 360° while flying 11629- Pink glow drop-shadow on each sparkle 11630 11631**The Result**: 11632- Click anywhere = SPARKLE EXPLOSION! 11633- Hover anywhere = MEGA GLOW! ✨ 11634- Always breathing and sparkling! 11635- Maximum glamour! 11636- Wife approval: 1000%! 11637 11638**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 11639 11640## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 11641 11642### Pink Theme Final Touches 11643- **Fixed:** Add Event text now black (was bright pink, hard to read) 11644- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 11645- **Removed:** Text shadow on Add Event button (cleaner with black text) 11646 11647### Add Event Text - Black & Readable! 11648 11649**Before**: Bright pink text (#ff1493) on dark pink background 11650```php 11651$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 11652text-shadow: 0 0 3px #ff1493; // Glowy pink 11653``` 11654 11655**After**: Black text, no shadow, perfect contrast! 11656```php 11657$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 11658$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 11659``` 11660 11661**Result**: 11662- Black text pops against dark pink background ✓ 11663- Easy to read ✓ 11664- Professional look with bling ✓ 11665 11666### Clock Border - All Pink! 11667 11668**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 11669 11670**Before**: 11671```php 11672// Inline style (only bottom): 11673style="border-bottom:2px solid #ff1493;" 11674 11675// CSS (all sides): 11676.eventlist-today-header { 11677 border: 2px solid #00cc07; // Green on top/sides! 11678} 11679``` 11680 11681**After**: Inline style overrides ALL sides 11682```php 11683style="border:2px solid #ff1493;" // All 4 sides pink! 11684``` 11685 11686**Result**: Clock box now 100% pink border on all four sides! ✓ 11687 11688### What Changed: 11689 11690**Add Event Button**: 11691- Background: #b8156f (dark pink) ✓ 11692- Text: **#000000 (black)** ← NEW! 11693- Text shadow: **none** ← NEW! 11694- Glow: 0 0 10px pink ✓ 11695 11696**Clock Border**: 11697- Top: **#ff1493 (pink)** ← FIXED! 11698- Right: **#ff1493 (pink)** ← FIXED! 11699- Bottom: #ff1493 (pink) ✓ 11700- Left: **#ff1493 (pink)** ← FIXED! 11701 11702**Perfect pink theme - wife approved!** ✨ 11703 11704## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 11705 11706### Pink Theme Complete Makeover 11707- **Fixed:** Clock border now completely pink (was green on sides/top) 11708- **Changed:** Today/Tomorrow/Important sections now different shades of pink 11709- **Changed:** Add Event button now dark pink (was clashing blue) 11710- **Changed:** System status bars now pink gradient (3 shades!) 11711 11712### All-Pink Everything! 11713 11714**Clock Border**: 11715```css 11716/* Before: Green border */ 11717border: 2px solid #00cc07; 11718 11719/* After: Hot pink border */ 11720.sidebar-pink .eventlist-today-header { 11721 border-color: #ff1493; 11722 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 11723} 11724``` 11725 11726**Section Colors** (Different Pink Shades): 11727```php 11728// Before: Orange, green, purple 11729'Today' => '#ff9800', 11730'Tomorrow' => '#4caf50', 11731'Important' => '#9b59b6' 11732 11733// After: Hot pink, pink, light pink 11734'Today' => '#ff1493', // Hot pink (DeepPink) 11735'Tomorrow' => '#ff69b4', // Pink (HotPink) 11736'Important' => '#ff85c1' // Light pink 11737``` 11738 11739**Add Event Button**: 11740```php 11741// Before: Clashing blue 11742background: #3498db; 11743 11744// After: Dark pink with glow 11745background: #b8156f; // Dark pink 11746hover: #8b0f54; // Darker pink 11747shadow: 0 0 10px rgba(255, 20, 147, 0.5); 11748``` 11749 11750**System Status Bars** (Pink Gradient): 11751```css 11752/* 5-min load average */ 11753.sidebar-pink .eventlist-cpu-fill { 11754 background: #ff1493; /* Hot pink */ 11755 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 11756} 11757 11758/* Realtime CPU */ 11759.sidebar-pink .eventlist-cpu-fill-purple { 11760 background: #ff69b4; /* Pink */ 11761 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 11762} 11763 11764/* Memory */ 11765.sidebar-pink .eventlist-cpu-fill-orange { 11766 background: #ff85c1; /* Light pink */ 11767 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 11768} 11769``` 11770 11771### Pink Theme Visual Hierarchy: 11772 11773**Darkest → Lightest Pink Shades**: 117741. Add Event button: #b8156f (dark pink) 117752. Today section: #ff1493 (hot pink / deep pink) 117763. System bar 1: #ff1493 (hot pink) 117774. Tomorrow section: #ff69b4 (pink) 117785. System bar 2: #ff69b4 (pink) 117796. Important section: #ff85c1 (light pink) 117807. System bar 3: #ff85c1 (light pink) 11781 11782**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 11783 11784### What's Pink Now: 11785 11786✅ Sidebar background & border 11787✅ **Clock border** ← FIXED! 11788✅ Header gradient 11789✅ Week grid 11790✅ **Add Event button** ← FIXED! 11791✅ **Today section** ← Different shade! 11792✅ **Tomorrow section** ← Different shade! 11793✅ **Important section** ← Different shade! 11794✅ Event text & bars 11795✅ **System status bars** ← All 3 different pink shades! 11796✅ All shadows & glows 11797 11798**EVERYTHING is pink and fabulous!** ✨ 11799 11800## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 11801 11802### ✨ New Theme: Pink Bling! 11803- **Added:** Glamorous hot pink theme with maximum sparkle 11804- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 11805- **Perfect for:** Fabulous calendars that demand attention ✨ 11806 11807### Professional Theme Shadow Fix 11808- **Fixed:** Section headers now have subtle shadow (not glow) 11809- **Fixed:** Clicked day panel header has proper shadow 11810 11811### Pink Bling Theme Colors 11812 11813**Background & Borders**: 11814```php 11815'bg' => '#1a0d14', // Dark rich pink-black 11816'border' => '#ff1493', // Hot pink (DeepPink) 11817'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 11818``` 11819 11820**Text Colors**: 11821```php 11822'text_primary' => '#ff69b4', // Hot pink 11823'text_bright' => '#ff1493', // Deep pink 11824'text_dim' => '#ff85c1', // Light pink 11825``` 11826 11827**Week Grid**: 11828```php 11829'grid_bg' => '#2d1a24', // Dark purple-pink 11830'cell_bg' => '#1a0d14', // Dark 11831'cell_today_bg' => '#3d2030', // Highlighted purple-pink 11832``` 11833 11834**Special Effects**: 11835```php 11836'bar_glow' => '0 0 5px', // Extra sparkly glow! 11837'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 11838``` 11839 11840### Professional Theme Shadow Fix 11841 11842**Before**: Section headers had colored glow 11843```php 11844box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 11845``` 11846 11847**After**: Section headers have subtle shadow 11848```php 11849$headerShadow = ($theme === 'professional') ? 11850 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 11851 '0 0 8px ' . $accentColor; // Glow for others 11852``` 11853 11854**Result**: 11855- **Matrix/Purple/Pink**: Colored glow on headers ✓ 11856- **Professional**: Clean grey shadow (no glow) ✓ 11857 11858### All Four Themes: 11859 11860** Matrix Edition**: 11861- Dark green (#00cc07) 11862- Neon glow effects 11863- Hacker aesthetic 11864 11865** Purple Dream**: 11866- Elegant purple (#9b59b6) 11867- Violet glow effects 11868- Royal aesthetic 11869 11870** Professional Blue**: 11871- Clean grey/blue (#4a90e2) 11872- Subtle shadows (NO glow) 11873- Corporate aesthetic 11874 11875** Pink Bling** (NEW!): 11876- Hot pink (#ff1493) 11877- MAXIMUM sparkle & glow 11878- Glamorous aesthetic ✨ 11879 11880### Technical Implementation 11881 11882**Theme Added To**: 11883- `getSidebarThemeStyles()` - color definitions 11884- `getSidebarTheme()` - validation 11885- `saveSidebarTheme()` - admin save 11886- Admin panel - UI with preview 11887- All shadow/glow calculations 11888- JavaScript theme colors 11889- Clicked day panel colors 11890 11891**Perfect for users who want FABULOUS pink calendars!** ✨ 11892 11893## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 11894 11895### Text Glow Refinement 11896- **Changed:** Reduced text glow from 3px to 2px (less intense) 11897- **Fixed:** Clicked day panel now has same text glow as sections 11898 11899### Text Glow Reduction 11900 11901**Before**: Text glow was too strong (3px) 11902```php 11903// Sections: 11904text-shadow: 0 0 3px #00cc07; // Too bright! 11905 11906// Clicked day panel: 11907text-shadow: 0 0 3px #00cc07; // Too bright! 11908``` 11909 11910**After**: Subtler text glow (2px) 11911```php 11912// Sections: 11913text-shadow: 0 0 2px #00cc07; // Just right ✓ 11914 11915// Clicked day panel: 11916text-shadow: 0 0 2px #00cc07; // Just right ✓ 11917``` 11918 11919**Visual Impact**: 11920- **Matrix**: Softer green glow, easier to read 11921- **Purple**: Softer purple glow, more elegant 11922- **Professional**: Still no glow (clean) 11923 11924### Consistency Fix 11925 11926**Before**: Sections had glow, clicked day panel had NO glow 11927 11928**After**: Both sections AND clicked day panel have matching subtle glow 11929 11930**Where Glow Appears**: 11931- ✅ Today section event text 11932- ✅ Tomorrow section event text 11933- ✅ Important section event text 11934- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 11935 11936**Result**: 11937- Glow is less intense and easier on eyes ✓ 11938- All event text has consistent styling ✓ 11939- Matrix/Purple themes more refined ✓ 11940 11941### Technical Details 11942 11943**PHP (Sections)**: 11944```php 11945$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 11946``` 11947 11948**JavaScript (Clicked Day Panel)**: 11949```javascript 11950themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 11951eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 11952``` 11953 11954**Perfect consistency and subtle elegance!** ✨ 11955 11956## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 11957 11958### ✨ Important Events Enhancement 11959- **Changed:** Important events now show from next 2 weeks (not just current week) 11960- **Fixed:** Important events on Sunday after current week now visible 11961- **Changed:** Events loaded 2 weeks into future for Important section 11962 11963### Background Cleanup 11964- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 11965- **Removed:** Grey backgrounds from individual events 11966- **Result:** Clean transparent backgrounds, original dark Matrix look restored 11967 11968### Important Events - Future Coverage 11969 11970**Before**: Only showed Important events from current week 11971```php 11972if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 11973 $importantEvents[] = $event; 11974} 11975``` 11976 11977**After**: Shows Important events from today through next 2 weeks 11978```php 11979// Load events 2 weeks out 11980$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 11981 11982// Show all important events from today forward 11983if ($isImportant && $dateKey >= $todayStr) { 11984 $importantEvents[] = $event; 11985} 11986``` 11987 11988**Example**: 11989- Today: Saturday Feb 7 11990- Current week: Sun Feb 1 → Sat Feb 7 11991- Important events shown: Feb 7 → Feb 21 (today + 14 days) 11992 11993**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 11994 11995### Background Removal 11996 11997**Before**: Light grey/white backgrounds added 11998```php 11999// Section background: 12000$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 12001 12002// Event background: 12003$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 12004``` 12005 12006**After**: No backgrounds (transparent) 12007```php 12008// Section: No background property 12009<div style="padding:4px 0;"> 12010 12011// Event: No background property 12012<div style="padding:4px 6px; ..."> 12013``` 12014 12015**Result**: 12016- Clean, dark Matrix aesthetic restored ✓ 12017- Purple theme darker and more elegant ✓ 12018- Professional theme still has its light grey sidebar bg ✓ 12019- Events stand out with just color bars and borders ✓ 12020 12021### What Changed: 12022 12023**Sections (Today/Tomorrow/Important)**: 12024- ❌ No more grey overlay 12025- ✓ Transparent background 12026- ✓ Colored borders & glows remain 12027 12028**Individual Events**: 12029- ❌ No more grey overlay 12030- ✓ Transparent background 12031- ✓ Colored bars & borders remain 12032 12033**Perfect! Back to the original clean dark look with future Important events!** 12034 12035## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 12036 12037### Final Theme Polish 12038- **Fixed:** Today/Tomorrow/Important section shadows now match theme 12039- **Fixed:** Event description text color now uses theme dim color 12040 12041### Section Shadow Fix 12042 12043**Problem**: Sections always had green glow regardless of theme 12044 12045**Before**: 12046```php 12047// Hardcoded green: 12048box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 12049``` 12050 12051**After**: 12052```php 12053// Theme-aware: 12054$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 12055 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 12056 '0 2px 4px rgba(0, 0, 0, 0.1)'); 12057``` 12058 12059**Result**: 12060- **Matrix**: Green glow around sections ✓ 12061- **Purple**: Purple glow around sections ✓ 12062- **Professional**: Subtle grey shadow (no glow) ✓ 12063 12064### Description Color Fix 12065 12066**Problem**: Description text always green in clicked day panel 12067 12068**Before**: 12069```javascript 12070color: #00aa00; // Always green 12071``` 12072 12073**After**: 12074```javascript 12075color: themeColors.text_dim; // Theme dim color 12076``` 12077 12078**Result**: 12079- **Matrix**: Dim green (#00aa00) ✓ 12080- **Purple**: Dim purple (#8e7ab8) ✓ 12081- **Professional**: Grey (#7f8c8d) ✓ 12082 12083### Now 100% Theme Consistent 12084 12085Every single visual element respects theme: 12086- ✅ Sidebar background & border 12087- ✅ Header colors & shadows 12088- ✅ Week grid & cells 12089- ✅ Add Event button 12090- ✅ Section borders & **shadows** ← Fixed! 12091- ✅ Event titles & times 12092- ✅ Event **descriptions** ← Fixed! 12093- ✅ Clicked day panel 12094- ✅ Event bars & glows 12095 12096**Absolute perfection across all three themes!** ✨ 12097 12098## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 12099 12100### Theme Improvements 12101- **Fixed:** Clicked day panel now uses correct theme colors 12102- **Changed:** Professional Blue background now light grey (not white) 12103- **Added:** Theme colors passed to JavaScript for dynamic rendering 12104 12105### Clicked Day Panel Theming 12106 12107**Before**: Always blue regardless of theme 12108```javascript 12109// Hardcoded blue: 12110color:#00cc07; // Always green 12111background:#3498db; // Always blue 12112``` 12113 12114**After**: Theme-aware colors 12115```php 12116// PHP passes theme to JavaScript: 12117window.themeColors_XXX = { 12118 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 12119 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 12120 text_shadow: '0 0 3px ...' or '', 12121 event_bg: 'rgba(...)', 12122 border_color: 'rgba(...)', 12123 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 12124}; 12125 12126// JavaScript uses theme colors: 12127color: themeColors.text_primary; 12128background: themeColors.event_bg; 12129``` 12130 12131**Result**: 12132- Matrix: Green panel with green glow ✓ 12133- Purple: Purple panel with purple glow ✓ 12134- Professional: Blue panel, no glow, clean ✓ 12135 12136### Professional Theme Background Change 12137 12138**Before**: Almost white (#f5f7fa, #ffffff) 12139```php 12140'bg' => '#f5f7fa', // Very light 12141'cell_bg' => '#ffffff', // Pure white 12142``` 12143 12144**After**: Light grey tones 12145```php 12146'bg' => '#e8ecf1', // Soft grey-blue 12147'cell_bg' => '#f5f7fa', // Light grey 12148'grid_bg' => '#d5dbe3', // Medium grey 12149'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 12150``` 12151 12152**Visual Impact**: 12153- Sidebar: Light grey-blue background (#e8ecf1) 12154- Week cells: Lighter grey (#f5f7fa) 12155- Today cell: Highlighted blue-grey (#dce8f7) 12156- More depth and contrast ✓ 12157- Professional appearance ✓ 12158 12159### All Theme Elements Now Consistent 12160 12161**Matrix (Green)**: 12162- Sidebar: Dark (#242424) 12163- Clicked panel: Dark with green 12164- Text: Green with glow 12165 12166**Purple Dream**: 12167- Sidebar: Dark purple (#2a2030) 12168- Clicked panel: Dark with purple 12169- Text: Purple with glow 12170 12171**Professional Blue**: 12172- Sidebar: Light grey (#e8ecf1) 12173- Clicked panel: Light with blue 12174- Text: Dark grey, no glow 12175 12176**Perfect theme consistency everywhere!** 12177 12178## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 12179 12180### Critical Fixes 12181- **Fixed:** Tomorrow events not loaded when outside current week 12182- **Fixed:** `&` showing instead of `&` (double HTML encoding) 12183 12184### Issue 1: Tomorrow Not Loading 12185 12186**Problem**: Sidebar only loaded events for current week 12187- Today (Saturday): Week ends today 12188- Tomorrow (Sunday): Start of NEXT week 12189- Tomorrow events never loaded from data files! 12190 12191**Before**: 12192```php 12193// Only load current week 12194$end = new DateTime($weekEnd); 12195$end->modify('+1 day'); 12196$period = new DatePeriod($start, $interval, $end); 12197// If tomorrow > weekEnd, it's not in period! 12198``` 12199 12200**After**: 12201```php 12202// Check if tomorrow is outside week 12203$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 12204if ($tomorrowDate > $weekEnd) { 12205 // Extend to include tomorrow 12206 $end = new DateTime($tomorrowDate); 12207} 12208$end->modify('+1 day'); 12209$period = new DatePeriod($start, $interval, $end); 12210``` 12211 12212**Result**: Tomorrow events now loaded even at week boundary! ✓ 12213 12214### Issue 2: Double HTML Encoding 12215 12216**Problem**: `&` characters showing as `&` 12217 12218**Cause**: Double encoding on line 2625 and 2681 12219```php 12220// Line 2625: 12221$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 12222 12223// Line 2681: 12224$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 12225``` 12226 12227**Fixed**: 12228```php 12229// Line 2625: 12230$title = htmlspecialchars($event['title']); // Encode once 12231 12232// Line 2681: 12233$html .= $title; // Use already-encoded value ✓ 12234``` 12235 12236**Result**: `&` displays correctly! ✓ 12237 12238### Both Fixes Critical 12239 12240These were **two separate bugs**: 122411. **Loading bug**: Tomorrow events not read from files 122422. **Display bug**: Double-encoding text 12243 12244Both needed fixing for Tomorrow section to work properly! 12245 12246## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 12247 12248### Critical Fix 12249- **Fixed:** Tomorrow section missing when tomorrow is outside current week 12250- **Fixed:** Today section now always shows regardless of week boundaries 12251- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 12252 12253### The Problem 12254 12255**Scenario**: Today is Saturday (last day of week) 12256- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 12257- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 12258 12259**BROKEN Logic** (v4.2.2): 12260```php 12261foreach ($events as $dateKey => $dayEvents) { 12262 if ($dateKey < $weekStart) continue; // Skip old events 12263 12264 // ...week processing... 12265 12266 if ($dateKey === $tomorrowStr) { // ← Never reached! 12267 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 12268 } 12269} 12270``` 12271 12272**Result**: Tomorrow events never added because loop skipped them! ❌ 12273 12274### The Fix 12275 12276**Process Today/Tomorrow FIRST**: 12277```php 12278foreach ($events as $dateKey => $dayEvents) { 12279 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 12280 12281 foreach ($eventsWithConflicts as $event) { 12282 // ALWAYS process Today and Tomorrow first! 12283 if ($dateKey === $todayStr) { 12284 $todayEvents[] = $event; // ✓ Always shows 12285 } 12286 if ($dateKey === $tomorrowStr) { 12287 $tomorrowEvents[] = $event; // ✓ Always shows 12288 } 12289 12290 // THEN check week boundaries for grid 12291 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 12292 $weekEvents[$dateKey][] = $event; 12293 } 12294 12295 // Important events still week-only 12296 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 12297 $importantEvents[] = $event; 12298 } 12299 } 12300} 12301``` 12302 12303### What Changed 12304 12305**Before**: 123061. Skip events < weekStart ❌ 123072. Process week grid 123083. Try to add Today/Tomorrow ← **Failed if outside week** 123094. Add Important events 12310 12311**After**: 123121. **Always add Today events** ✓ 123132. **Always add Tomorrow events** ✓ 123143. Add to week grid if in range 123154. Add Important events if in range 12316 12317**Result**: 12318- Today section: ✓ Always shows 12319- Tomorrow section: ✓ Always shows (even at week boundary!) 12320- Week grid: ✓ Only current week 12321- Important: ✓ Only current week 12322 12323### Edge Cases Fixed 12324 12325**Saturday → Sunday transition**: 12326- Today (Sat): Shows in Today section ✓ 12327- Tomorrow (Sun): Shows in Tomorrow section ✓ 12328- Week grid: Only shows Sat (today) ✓ 12329 12330**Sunday → Monday transition**: 12331- Today (Sun): Shows in Today section ✓ 12332- Tomorrow (Mon): Shows in Tomorrow section ✓ 12333- Week grid: Shows both Sun and Mon ✓ 12334 12335**Perfect! Tomorrow section now always works!** 12336 12337## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 12338 12339### Corrected Week Options 12340- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 12341- **Changed:** Default is **Sunday** (US/Canada standard) 12342- **Fixed:** Day names array for Sunday start: S M T W T F S 12343 12344### Correct Week Start Options 12345 12346**Sunday Start** (Default): 12347- Grid shows: **S M T W T F S** 12348- Week: Sunday → Saturday 12349- US/Canada standard 12350- Most common worldwide 12351 12352**Monday Start**: 12353- Grid shows: **M T W T F S S** 12354- Week: Monday → Sunday 12355- ISO 8601 standard 12356- Common in Europe 12357 12358### Technical Changes 12359 12360**All References Updated**: 12361```php 12362// Changed from 'saturday' to 'sunday' in: 12363- Admin validation 12364- Week calculation logic 12365- Day names array 12366- Default value 12367- Comments 12368``` 12369 12370**Sunday Calculation** (when today is Saturday): 12371```php 12372$today = date('w'); // 0=Sun, 6=Sat 12373if ($today == 0) { 12374 $weekStart = date('Y-m-d'); // Today! 12375} else { 12376 // Go back $today days to last Sunday 12377 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 12378} 12379``` 12380 12381**Examples**: 12382- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 12383- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 12384 12385**Sorry for the confusion - it's Sunday not Saturday!** 12386 12387## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 12388 12389### Critical Fix 12390- **Fixed:** Week calculation broken when today is Saturday 12391- **Fixed:** Events not showing in Today/Important sections 12392- **Fixed:** Week grid event bars missing 12393- **Changed:** Default week start is Saturday (matches main calendar) 12394 12395### Technical Details 12396 12397**The Bug**: 12398```php 12399// BROKEN (v4.2.0): 12400$weekStart = date('Y-m-d', strtotime('saturday this week')); 12401// When TODAY is Saturday, this is ambiguous and fails! 12402 12403// FIXED (v4.2.1): 12404$today = date('w'); // 0 (Sun) to 6 (Sat) 12405if ($today == 6) { 12406 $weekStart = date('Y-m-d'); // Today! 12407} else { 12408 $daysBack = ($today == 0) ? 1 : ($today + 1); 12409 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 12410} 12411$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 12412``` 12413 12414**Why It Failed**: 12415- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 12416- PHP may interpret it as "next Saturday" or fail 12417- Result: Week range was wrong, events filtered out 12418 12419**The Fix**: 12420- Explicit calculation using day-of-week math 12421- Saturday (day 6): weekStart = today 12422- Sunday (day 0): weekStart = yesterday 12423- Monday-Friday: calculate days back to last Saturday 12424 12425**Result**: Works reliably every day of the week! 12426 12427**Default Changed**: Saturday start (was Monday in 4.2.0) 12428- Matches main calendar behavior 12429- Users can still switch to Monday in settings 12430 12431## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 12432 12433### ✨ New Feature 12434- **Added:** Week start day selector in Themes tab 12435- **Added:** Choose between Monday (ISO standard) or Saturday week start 12436- **Added:** Week grid and all events now respect the selected start day 12437- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 12438 12439### Week Start Options 12440 12441**Monday Start** (Default): 12442- Grid shows: M T W T F S S 12443- Week runs: Monday → Sunday 12444- ISO 8601 standard 12445- Common in Europe, most of world 12446 12447**Saturday Start**: 12448- Grid shows: S S M T W T F 12449- Week runs: Saturday → Friday 12450- Common in Middle East 12451- Sabbath-observant communities 12452 12453### Technical Details 12454 12455**Configuration**: 12456```php 12457// Saved in: data/meta/calendar_week_start.txt 12458// Values: 'monday' or 'saturday' 12459 12460// Week calculation: 12461if ($weekStartDay === 'saturday') { 12462 $weekStart = date('Y-m-d', strtotime('saturday this week')); 12463 $weekEnd = date('Y-m-d', strtotime('friday next week')); 12464} else { 12465 $weekStart = date('Y-m-d', strtotime('monday this week')); 12466 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 12467} 12468``` 12469 12470**Day Names Array**: 12471```php 12472// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 12473// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 12474``` 12475 12476**What Changes**: 12477- Week grid day letters 12478- Week grid date sequence 12479- Today/Tomorrow/Important event date ranges 12480- Week event grouping 12481 12482**What Stays Same**: 12483- All themes still work 12484- Event data unchanged 12485- Main calendar unaffected 12486 12487### How to Change: 12488 124891. Admin → Calendar → Themes tab 124902. Under "Week Start Day" section 124913. Select Monday or Saturday 124924. Click "Save Settings" 124935. Refresh sidebar to see changes 12494 12495**Perfect for international users or religious observances!** 12496 12497## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 12498 12499### ️ Calendar Improvements 12500- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 12501- **Changed:** Event section backgrounds much lighter (almost white) 12502- **Changed:** Individual event backgrounds lighter and more readable 12503- **Changed:** Event borders now theme-colored 12504 12505### Technical Details 12506 12507**Week Start Change**: 12508```php 12509// Before: 12510$weekStart = date('Y-m-d', strtotime('monday this week')); 12511$weekEnd = date('Y-m-d', strtotime('sunday this week')); 12512$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 12513 12514// After: 12515$weekStart = date('Y-m-d', strtotime('sunday this week')); 12516$weekEnd = date('Y-m-d', strtotime('saturday this week')); 12517$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 12518``` 12519 12520**Background Colors**: 12521```php 12522// Section backgrounds (Today, Tomorrow, Important): 12523Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 12524Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 12525Professional: rgba(255, 255, 255, 0.95) // Almost white! 12526 12527// Individual event backgrounds: 12528Matrix: rgba(255, 255, 255, 0.03) // Subtle 12529Purple: rgba(255, 255, 255, 0.05) // Light 12530Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 12531``` 12532 12533**Event Borders**: 12534```php 12535Matrix: rgba(0, 204, 7, 0.2) // Green 12536Purple: rgba(155, 89, 182, 0.2) // Purple 12537Professional: rgba(74, 144, 226, 0.2) // Blue 12538``` 12539 12540### Visual Result: 12541 12542**Before**: Dark backgrounds made text hard to read 12543**After**: Light backgrounds make events pop and text very readable 12544 12545**Week Grid**: 12546``` 12547Before: [M][T][W][T][F][S][S] 12548After: [S][M][T][W][T][F][S] ← Now matches main calendar! 12549``` 12550 12551## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 12552 12553### Final Theme Polish 12554- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 12555- **Fixed:** Event times now use theme bright color 12556- **Fixed:** Event dates use theme dim color 12557- **Fixed:** Task checkboxes use theme bright color 12558- **Fixed:** Event color bars use theme-appropriate shadows 12559- **Fixed:** No text shadows on Professional theme 12560 12561### Technical Details 12562 12563**Event Text Colors**: 12564```php 12565// Matrix: 12566- Title: #00cc07 (green) 12567- Time: #00dd00 (bright green) 12568- Date: #00aa00 (dim green) 12569- Text shadow: 0 0 3px (glow) 12570 12571// Purple: 12572- Title: #b19cd9 (lavender) 12573- Time: #d4a5ff (bright purple) 12574- Date: #8e7ab8 (dim purple) 12575- Text shadow: 0 0 3px (glow) 12576 12577// Professional: 12578- Title: #2c3e50 (dark grey) 12579- Time: #4a90e2 (blue) 12580- Date: #7f8c8d (grey) 12581- Text shadow: none (clean) 12582``` 12583 12584**Color Bar Shadows**: 12585```php 12586// Matrix & Purple: Glow effect 12587box-shadow: 0 0 3px [event-color]; 12588 12589// Professional: Subtle shadow 12590box-shadow: 0 1px 2px rgba(0,0,0,0.2); 12591``` 12592 12593### What's Now Fully Themed: 12594 12595✅ Sidebar background & border 12596✅ Header (clock box) background, border, text 12597✅ Week grid background, borders, cells 12598✅ Week grid day letters & numbers 12599✅ Week grid event bars & "+N more" text 12600✅ Add Event button background & text 12601✅ Today/Tomorrow/Important event titles 12602✅ Event times 12603✅ Event dates (Important section) 12604✅ Task checkboxes 12605✅ Event color bars 12606✅ All text shadows (glow vs none) 12607 12608**Every single element now respects the theme!** 12609 12610## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 12611 12612### Theme Improvements 12613- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 12614- **Fixed:** Add Event button now uses theme colors 12615- **Fixed:** Clock box border now matches theme 12616- **Fixed:** All text shadows respect theme (no glow on professional) 12617- **Fixed:** Event bars use theme-appropriate shadows 12618 12619### Technical Details 12620 12621**Week Grid Theming**: 12622```php 12623// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 12624// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 12625// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 12626``` 12627 12628**Add Event Button**: 12629```php 12630// Matrix: Dark green (#006400) with bright green text 12631// Purple: Purple (#7d3c98) with lavender text 12632// Professional: Blue (#3498db) with white text 12633``` 12634 12635**Text Shadows**: 12636```php 12637// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 12638// Professional: No glow (clean look) 12639``` 12640 12641**CSS Overrides**: 12642```css 12643/* Purple theme */ 12644.sidebar-purple .eventlist-today-header { 12645 border-color: #9b59b6; 12646 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 12647} 12648 12649/* Professional theme */ 12650.sidebar-professional .eventlist-today-header { 12651 border-color: #4a90e2; 12652 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 12653} 12654``` 12655 12656### What Changed Per Theme: 12657 12658**Purple Dream**: 12659- Week grid: Purple borders and dark purple background 12660- Add Event: Purple button with lavender text 12661- Clock box: Purple border with purple glow 12662- Event bars: Purple glow instead of green 12663- All text: Purple/lavender shades 12664 12665**Professional Blue**: 12666- Week grid: Blue borders and light grey background 12667- Add Event: Blue button with white text 12668- Clock box: Blue border with subtle shadow (no glow) 12669- Event bars: Subtle shadows (no glow) 12670- All text: Dark grey and blue shades 12671 12672**Matrix Edition**: Unchanged (still perfect green theme!) 12673 12674## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 12675 12676### ✨ New Features 12677- **Added:** Themes tab in admin for sidebar widget theming 12678- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 12679- **Added:** Theme selector with live previews 12680- **Added:** Theme persistence across page loads 12681 12682### Available Themes 12683 12684**Matrix Edition** (Default): 12685- Dark background (#242424) 12686- Green accents (#00cc07) 12687- Neon glow effects 12688- Original Matrix styling 12689 12690**Purple Dream**: 12691- Dark purple background (#2a2030) 12692- Purple/violet accents (#9b59b6) 12693- Elegant purple glow 12694- Rich purple color scheme 12695 12696**Professional Blue**: 12697- Light grey background (#f5f7fa) 12698- Blue accents (#4a90e2) 12699- Clean professional look 12700- Subtle shadows instead of glow 12701 12702### Bug Fix 12703- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 12704- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 12705 12706### Technical Details 12707 12708**Theme System**: 12709```php 12710// Saved in: data/meta/calendar_theme.txt 12711// Applied dynamically in syntax.php 12712$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 12713$styles = $this->getSidebarThemeStyles($theme); 12714 12715// Styles include: 12716- bg, border, shadow 12717- header_bg, header_border, header_shadow 12718- text_primary, text_bright, text_dim 12719- grid_bg, grid_border 12720- cell_bg, cell_today_bg 12721``` 12722 12723**Theme Changes**: 12724- Header background gradient 12725- Border colors 12726- Text colors 12727- Shadow/glow effects 12728- Grid colors 12729 12730**How to Change**: 127311. Admin → Calendar → Themes tab 127322. Select desired theme 127333. Click "Save Theme" 127344. Refresh page to see changes 12735 12736### Notes 12737- Themes only affect sidebar widget appearance 12738- Main calendar view unchanged 12739- Theme setting stored in `data/meta/calendar_theme.txt` 12740- Safe to switch themes - no data affected 12741 12742## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 12743 12744### Bug Fixes 12745- **Fixed:** Events now sort chronologically by time (was using string comparison) 12746- **Fixed:** Tooltip positioning using JavaScript like system tooltips 12747- **Fixed:** All-day events appear first, then events in time order 12748 12749### Technical Details 12750 12751**Event Sorting Fix**: 12752```php 12753// BROKEN (v4.0.9): 12754return strcmp($aTime, $bTime); 12755// String comparison: "10:00" < "8:00" because "1" < "8" 12756// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 12757 12758// FIXED (v4.1.0): 12759$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 12760$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 12761return $aMinutes - $bMinutes; 12762// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 12763``` 12764 12765**Example Before Fix**: 12766``` 12767 Weekend Ticket Duty (all-day) 127688:00 AM START TICKETS 1276910:00 AM Soul Winning ← Wrong! 127709:45 AM Coffee ← Should be before 10:00 AM 12771``` 12772 12773**Example After Fix**: 12774``` 12775 Weekend Ticket Duty (all-day) 127768:00 AM START TICKETS 127779:45 AM Coffee ← Correct! 1277810:00 AM Soul Winning 12779``` 12780 12781**Tooltip Positioning**: 12782- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 12783- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 12784- Positioned on `mouseenter` event 12785- Matches system tooltip implementation (no cutoff) 12786 12787**JavaScript Implementation**: 12788```javascript 12789element.addEventListener("mouseenter", function() { 12790 const rect = element.getBoundingClientRect(); 12791 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 12792 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 12793}); 12794``` 12795 12796**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 12797 12798## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 12799 12800### UI Improvements 12801- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 12802- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 12803- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 12804 12805### Technical Details 12806 12807**Sidebar Overflow Fix**: 12808```php 12809// Before (line 2005): 12810style="...overflow:hidden..." // ← Blocked tooltips! 12811 12812// After: 12813style="...overflow:visible..." // ← Tooltips extend beyond! 12814``` 12815 12816**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 12817 12818**Main Calendar Tooltip Size**: 12819```css 12820/* Before: */ 12821.conflict-tooltip { 12822 border: 2px solid #ff9800; 12823 border-radius: 6px; 12824 padding: 8px 12px; 12825 font-size: 12px; 12826 min-width: 200px; 12827 max-width: 350px; 12828} 12829 12830/* After: */ 12831.conflict-tooltip { 12832 border: 1px solid #ff9800; /* Thinner */ 12833 border-radius: 3px; /* Smaller */ 12834 padding: 4px 8px; /* Less padding */ 12835 font-size: 10px; /* Smaller header */ 12836 min-width: 120px; /* Narrower */ 12837 max-width: 200px; /* Narrower */ 12838} 12839 12840.conflict-tooltip-body { 12841 padding: 6px 8px; /* Was 10px 12px */ 12842 font-size: 9px; /* Was 11px */ 12843 line-height: 1.4; /* Was 1.6 */ 12844} 12845 12846.conflict-item { 12847 padding: 2px 0; /* Was 4px */ 12848 font-size: 9px; /* Added smaller font */ 12849} 12850``` 12851 12852**Result**: 12853- Main calendar tooltip ~50% smaller 12854- Sidebar tooltips now extend beyond borders 12855- Both tooltips compact and readable 12856 12857## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 12858 12859### Bug Fix 12860- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 12861- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 12862 12863### Technical Details 12864 12865**The Problem**: 12866```php 12867// Before (v4.0.7): 12868$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 12869 12870// Displayed as: 12871"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 12872``` 12873 12874**The Fix**: 12875```php 12876// After (v4.0.8): 12877$conflictTooltip = "Conflicts with: "; // HTML entity for newline 12878 12879// Displays as: 12880Conflicts with: 12881• Event 1 12882• Event 2 12883``` 12884 12885**Why ` ` Works**: 12886- HTML entity for line feed character 12887- Works in data attributes 12888- CSS `white-space: pre-line` preserves the newlines 12889- Renders as actual line breaks in tooltip 12890 12891**Applied to**: 12892- PHP rendering (sidebar Today/Tomorrow/Important) 12893- JavaScript rendering (clicked day events) 12894 12895## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 12896 12897### UI Improvements 12898- **Changed:** Tooltip size reduced significantly (much more compact) 12899- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 12900- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 12901- **Changed:** Narrower width (120-200px vs 200-300px) 12902 12903### Technical Details 12904 12905**Tooltip Size Reduction**: 12906```css 12907/* Before (v4.0.6): 12908padding: 6px 10px; 12909font-size: 11px; 12910min-width: 200px; 12911max-width: 300px; 12912 12913/* After (v4.0.7): */ 12914padding: 3px 6px; 12915font-size: 9px; 12916min-width: 120px; 12917max-width: 200px; 12918``` 12919 12920**Overflow Fix**: 12921```css 12922/* Allow tooltip to extend beyond sidebar */ 12923.sidebar-widget, 12924.sidebar-matrix { 12925 overflow: visible !important; 12926} 12927 12928/* Position tooltip outside */ 12929[data-tooltip]:before { 12930 bottom: 120%; /* Further above */ 12931 right: -10px; /* Can extend beyond edge */ 12932 z-index: 10000; /* Always on top */ 12933} 12934``` 12935 12936**Visual Result**: 12937- Tooltip is ~40% smaller 12938- Extends beyond sidebar border if needed 12939- Still readable, just more compact 12940- Better for small screens 12941 12942## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 12943 12944### Critical Fix 12945- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 12946- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 12947- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 12948- **Fixed:** Now matches what you see in main calendar view 12949 12950### ✨ UI Improvement 12951- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 12952- **Added:** Custom CSS tooltip with data-tooltip attribute 12953- **Improved:** Better tooltip positioning - doesn't overflow screen edges 12954 12955### Technical Details 12956 12957**The Problem - Field Name Mismatch**: 12958```php 12959// Main calendar (line 697): 12960$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 12961 12962// Sidebar (before fix): 12963$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 12964``` 12965 12966**The Problem - Duration Logic**: 12967```php 12968// Main calendar (line 697): 12969$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 12970 ? $evt1['endTime'] 12971 : $evt1['time']; // ← Uses START time (zero duration) 12972 12973// Sidebar (before fix): 12974$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 12975``` 12976 12977**The Fix**: 12978```php 12979// Now checks BOTH field names: 12980if (isset($event['end_time']) && $event['end_time'] !== '') { 12981 $endTime = $event['end_time']; 12982} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 12983 $endTime = $event['endTime']; 12984} else { 12985 $endTime = $startTime; // ← Matches main calendar! 12986} 12987``` 12988 12989**Tooltip Positioning**: 12990- Uses `data-tooltip` attribute instead of `title` 12991- CSS positions tooltip ABOVE badge (`bottom: 100%`) 12992- Aligns to RIGHT edge (`right: 0`) 12993- Arrow points down to badge 12994- Black background with white text 12995- Max width 300px 12996 12997### Example 12998 12999**6:00 PM Evening Service** (no end time): 13000- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 13001- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 13002 13003**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 13004- Zero-duration events at 6:00 PM don't overlap with anything 13005- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 13006 13007**Tooltip appears**: 13008``` 13009 ┌────────────────────┐ 13010 │ Conflicts with: │ 13011 │ • Super Bowl │ 13012 │ (3:30 PM-7:00 PM)│ 13013 └─────────┬──────────┘ 13014 ▼ 13015 ⚠ 13016``` 13017 13018## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 13019 13020### Bug Fix 13021- **Fixed:** Events without end_time now properly get 1-hour default duration 13022- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 13023- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 13024 13025### Technical Details 13026 13027**The Problem**: 13028```php 13029// Before (broken): 13030$endTime = isset($event['end_time']) ? $event['end_time'] : default; 13031 13032// If end_time exists but is empty string "": 13033isset($event['end_time']) = TRUE 13034$endTime = "" // ← Empty string, not default! 13035``` 13036 13037**The Fix**: 13038```php 13039// After (fixed): 13040$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 13041 ? $event['end_time'] 13042 : $this->addHoursToTime($startTime, 1); 13043 13044// Now empty string gets the default 1-hour duration 13045``` 13046 13047**Why This Matters**: 13048Events 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. 13049 13050**Example**: 13051``` 13052Super Bowl: 3:30 PM - 7:00 PM 13053Evening Service: 6:00 PM - ??? (should be 7:00 PM) 13054 13055If end_time = "" (empty string): 13056 Old code: Uses "" → conflict detection fails 13057 New code: Uses 7:00 PM → conflict detected ✓ 13058``` 13059 13060### Testing 13061If you're still not seeing the conflict on the 6:00 PM service: 130621. Check if the event has `end_time` set in the JSON 130632. Clear cache (Admin → Manage Events → Clear Cache) 130643. The conflict should now appear 13065 13066## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 13067 13068### ✨ Feature Added 13069- **Added:** Hover over ⚠ badge to see which events are conflicting 13070- **Added:** Tooltip shows conflicting event titles and times 13071- **Added:** Works in both sidebar sections and clicked day events 13072 13073### Technical Details 13074 13075**Conflict Tracking Enhanced**: 13076```php 13077// Now tracks WHICH events conflict: 13078$event['conflictingWith'] = [ 13079 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 13080 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 13081]; 13082``` 13083 13084**Tooltip Format**: 13085``` 13086Conflicts with: 13087• Meeting (10:00 AM-11:00 AM) 13088• Call (10:30 AM-11:30 PM) 13089``` 13090 13091**Where It Works**: 13092- ✅ Today section (sidebar) 13093- ✅ Tomorrow section (sidebar) 13094- ✅ Important Events section (sidebar) 13095- ✅ Clicked day events (week grid) 13096 13097**Cursor**: Changes to `help` cursor on hover to indicate tooltip 13098 13099### Note on Multi-Day Events 13100The 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. 13101 13102## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 13103 13104### Bug Fixes 13105- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 13106- **Fixed:** Important Events now shows events even if they're today or tomorrow 13107- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 13108 13109### Technical Details 13110 13111**Conflict Badge Issue**: 13112```php 13113// BROKEN (line 2511): 13114$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 13115// ↑ Checking 'conflicts' (plural) 13116 13117// But detectTimeConflicts() sets: 13118$event['conflict'] = true/false; 13119// ↑ Setting 'conflict' (singular) 13120 13121// FIXED: 13122$hasConflict = isset($event['conflict']) && $event['conflict']; 13123``` 13124 13125**Result**: Badge now shows for ALL conflicting events in sidebar sections 13126 13127**Important Events Logic Issue**: 13128```php 13129// BROKEN: 13130if ($dateKey === $todayStr) { 13131 $todayEvents[] = ...; 13132} elseif ($dateKey === $tomorrowStr) { 13133 $tomorrowEvents[] = ...; 13134} else { // ← Only checked if NOT today/tomorrow! 13135 if ($isImportant) { 13136 $importantEvents[] = ...; 13137 } 13138} 13139 13140// FIXED: 13141if ($dateKey === $todayStr) { 13142 $todayEvents[] = ...; 13143} 13144if ($dateKey === $tomorrowStr) { 13145 $tomorrowEvents[] = ...; 13146} 13147// ↑ Changed to separate 'if' statements 13148if ($isImportant && $dateKey in this week) { 13149 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 13150} 13151``` 13152 13153**Result**: Important namespace events now show in Important section even if they're today or tomorrow 13154 13155### Conflict Badge Display 13156- Simplified to just ⚠ icon (no count) 13157- Orange color (#ff9800) 13158- 10px font size 13159- Hover shows "Time conflict detected" 13160 13161## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 13162 13163### Bug Fix 13164- **Fixed:** Important Events section now displays all events correctly 13165- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 13166- **Fixed:** Conflict detection no longer causes events to disappear from Important section 13167 13168### Technical Details 13169 13170**The Problem**: 13171- `detectTimeConflicts()` returned early if only 1 event on a day 13172- Returned original array without adding 'conflict' field 13173- This inconsistency caused issues in event categorization 13174 13175**The Solution**: 13176```php 13177// Before (broken): 13178if (empty($dayEvents) || count($dayEvents) < 2) { 13179 return $dayEvents; // No 'conflict' field added! 13180} 13181 13182// After (fixed): 13183if (count($dayEvents) === 1) { 13184 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 13185} 13186``` 13187 13188**Result**: 13189- All events now have 'conflict' field consistently 13190- Single events: conflict = false 13191- Multiple events: conflict = true/false based on overlap 13192- Important Events section displays correctly 13193 13194## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 13195 13196### Bug Fixes 13197- **Fixed:** Conflict badge (⚠) now displays in clicked day events 13198- **Fixed:** Recurring events edit now updates time and end_time correctly 13199- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 13200 13201### ✨ Features Added 13202- **Added:** Time conflict detection for overlapping events 13203- **Added:** detectTimeConflicts() function checks all events on same day 13204- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 13205- **Added:** Events now have 'conflict' flag set automatically 13206 13207### UI Changes 13208- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 13209- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 13210- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 13211 13212### Technical Details 13213 13214**Conflict Detection**: 13215```php 13216// Automatically detects overlapping events on same day 13217// Sets 'conflict' flag to true if event overlaps with another 13218$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 13219``` 13220 13221**Logic**: 13222- All-day events never conflict (no time set) 13223- Timed events check for overlap with other timed events 13224- Overlap = start1 < end2 AND start2 < end1 13225- Default duration is 60 minutes if no end_time 13226 13227**Recurring Events Fix**: 13228- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 13229- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 13230- Now edits actually save and update the events 13231 13232**Week View Bars**: 13233- Shows 4 colored bars instead of 3 13234- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 13235 13236## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 13237 13238**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 13239 13240### Major Features 13241 13242#### Sidebar Widget 13243- **Week Grid**: Interactive 7-day calendar with click-to-view events 13244- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 13245- **Live Clock**: Updates every second with date display 13246- **Real-time Weather**: Geolocation-based temperature with icon 13247- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 13248- **Add Event Button**: Dark green bar opens full event creation dialog 13249- **Matrix Theme**: Green glow effects throughout 13250 13251#### Event Management 13252- **Single Color Bars**: Clean 3px bars showing event's assigned color 13253- **All-Day Events First**: Then sorted chronologically by time 13254- **Conflict Detection**: Orange ⚠ badge on overlapping events 13255- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 13256- **HTML Rendering**: Pre-rendered for JavaScript display 13257- **Click-to-View**: Click week grid days to expand event details 13258 13259#### Admin Interface 13260- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 13261- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 13262- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 13263 13264#### Outlook Sync 13265- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 13266- **Category Mapping**: Map colors to Outlook categories 13267- **Conflict Resolution**: Time conflict detection 13268- **Import/Export Config**: Encrypted configuration files 13269 13270### Design 13271- **Matrix Theme**: Authentic green glow aesthetic 13272- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 13273- **Color Scheme**: 13274 - Today: Orange #ff9800 13275 - Tomorrow: Green #4caf50 13276 - Important: Purple #9b59b6 13277 - Add Event: Dark green #006400 13278 - System bars: Green/Purple/Orange 13279 13280### Technical Highlights 13281- **Zero-margin Design**: Perfect flush alignment throughout 13282- **Flexbox Layout**: Modern, responsive structure 13283- **AJAX Operations**: No page reloads needed 13284- **Smart Sorting**: All-day events first, then chronological 13285- **Tooltip System**: Detailed stats on hover (working correctly) 13286- **Event Dialog**: Full form with drag support 13287- **Cache Management**: One-click cache clearing 13288 13289### Breaking Changes from v3.x 13290- Removed dual color bars (now single event color bar only) 13291- Add Event button moved to between header and week grid 13292- All-day events now appear FIRST (not last) 13293- Update Plugin tab is now the default admin tab 13294 13295### Bug Fixes (v3.10.x → v4.0.0) 13296- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 13297- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 13298- ✅ Fixed weather display (added updateWeather function) 13299- ✅ Fixed HTML rendering in events (title_html/description_html fields) 13300- ✅ Fixed Add Event dialog (null check for calendar element) 13301- ✅ Fixed text positioning in Add Event button 13302- ✅ Fixed spacing throughout sidebar widget 13303 13304### Complete Feature List 13305- Full calendar view (month grid) 13306- Sidebar widget (week view) 13307- Event panel (standalone) 13308- Event list (date ranges) 13309- Namespace support 13310- Color coding 13311- Time conflict detection 13312- DokuWiki syntax in events 13313- Outlook synchronization 13314- System monitoring 13315- Weather display 13316- Live clock 13317- Admin interface 13318- Cache management 13319- Draggable dialogs 13320- AJAX save/edit/delete 13321- Import/export config 13322 13323### Usage 13324 13325**Sidebar Widget**: 13326``` 13327{{calendar sidebar}} 13328{{calendar sidebar namespace=team}} 13329``` 13330 13331**Full Calendar**: 13332``` 13333{{calendar}} 13334{{calendar year=2026 month=6 namespace=team}} 13335``` 13336 13337**Event Panel**: 13338``` 13339{{eventpanel}} 13340``` 13341 13342**Event List**: 13343``` 13344{{eventlist daterange=2026-01-01:2026-01-31}} 13345``` 13346 13347### Stats 13348- **40+ versions** developed during v3.x iterations 13349- **3.10.0 → 3.11.4**: Polish and refinement 13350- **4.0.0**: Production-ready Matrix Edition 13351 13352### Credits 13353Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 13354 13355--- 13356 13357## Previous Versions (v3.11.4 and earlier) 13358 13359## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 13360- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 13361- **Improved:** Small breathing room between system stats bars and Add Event button 13362- **Visual:** Better spacing for cleaner appearance 13363 13364### CSS Change: 13365**eventlist-today-header**: 13366- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 13367 13368### Visual Result: 13369``` 13370│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 13371│ │ ← 2px space (restored) 13372├───────────────────────┤ 13373│ + ADD EVENT │ ← Add Event bar 13374├───────────────────────┤ 13375``` 13376 13377**Before (v3.11.3)**: No space, bars directly touch Add Event button 13378**After (v3.11.4)**: 2px breathing room for better visual hierarchy 13379 13380## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 13381- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 13382- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 13383- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 13384- **Changed:** Line-height reduced from 12px to 10px for better text centering 13385- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 13386 13387### JavaScript Fix: 13388**Problem**: Line 1084-1085 in calendar-main.js 13389```javascript 13390const calendar = document.getElementById(calId); 13391const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 13392``` 13393 13394**Solution**: Added null check 13395```javascript 13396const calendar = document.getElementById(calId); 13397const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 13398``` 13399 13400**Why This Happened**: 13401- Regular calendar has element with id=calId 13402- Sidebar widget doesn't have this element (different structure) 13403- Code tried to read .dataset on null, causing error 13404 13405### Text Position Fix: 13406**Before**: 13407- line-height: 12px 13408- vertical-align: middle 13409- Text slightly low 13410 13411**After**: 13412- line-height: 10px 13413- position: relative; top: -1px 13414- Text perfectly centered 13415 13416### What Works Now: 13417✅ Click "+ ADD EVENT" in sidebar → Dialog opens 13418✅ No console errors 13419✅ Text properly centered vertically 13420✅ Form pre-filled with today's date 13421✅ Save works correctly 13422 13423## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 13424- **Added:** Event dialog to sidebar widget (same as regular calendar) 13425- **Changed:** Add Event button now opens proper event form dialog 13426- **Added:** renderEventDialog() called in renderSidebarWidget() 13427- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 13428- **Improved:** Can now add events directly from sidebar widget 13429 13430### Add Event Button Behavior: 13431**Before (v3.11.1)**: Showed alert with instructions 13432**After (v3.11.2)**: Opens full event creation dialog 13433 13434**Dialog Features**: 13435- Date field (defaults to today) 13436- Title field (required) 13437- Time field (optional) 13438- End time field (optional) 13439- Color picker 13440- Category field 13441- Description field 13442- Save and Cancel buttons 13443- Draggable dialog 13444 13445### Technical Changes: 13446- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 13447- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 13448- Dialog uses same structure as regular calendar 13449- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 13450 13451### User Flow: 134521. User clicks "+ ADD EVENT" green bar 134532. Event dialog opens with today's date pre-filled 134543. User fills in event details 134554. User clicks Save 134565. Event saved via AJAX 134576. Dialog closes 134587. Sidebar refreshes to show new event 13459 13460## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 13461- **Fixed:** Removed bottom padding from header (was 2px, now 0) 13462- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 13463- **Fixed:** Add Event bar now flush against header with zero gap 13464- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 13465- **Improved:** Alert provides clear instructions on how to add events 13466 13467### CSS Changes: 13468**eventlist-today-header**: 13469- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 13470 13471**eventlist-stats-container**: 13472- `margin-top: 2px` → `margin: 0` (removed all margins) 13473 13474### Add Event Button Behavior: 13475**Before**: Clicked → Navigated to Admin → Manage Events tab 13476**After**: Clicked → Shows alert with instructions 13477 13478**Alert Message**: 13479``` 13480To add an event, go to: 13481Admin → Calendar Management → Manage Events tab 13482or use the full calendar view {{calendar}} 13483``` 13484 13485### Visual Result: 13486``` 13487│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 13488├────────────────────────┤ 13489│ + ADD EVENT │ ← Perfectly flush! 13490├────────────────────────┤ 13491``` 13492 13493No gaps, perfectly aligned! 13494 13495## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 13496- **Moved:** Add Event bar back to original position (between header and week grid) 13497- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 13498- **Changed:** Letter spacing reduced from 0.5px to 0.4px 13499- **Fixed:** Text now fully visible without being cut off 13500- **Final:** Optimal position and size determined 13501 13502### Final Layout: 13503``` 13504┌─────────────────────────────┐ 13505│ Clock | Weather | Stats │ ← Header 13506├─────────────────────────────┤ 13507│ + ADD EVENT │ ← Bar (back here, smaller text) 13508├─────────────────────────────┤ 13509│ M T W T F S S │ ← Week Grid 13510│ 3 4 5 6 7 8 9 │ 13511├─────────────────────────────┤ 13512│ Today │ ← Event sections 13513└─────────────────────────────┘ 13514``` 13515 13516### Text Size Changes: 13517**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 13518**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 13519 13520### Why This Position: 13521- Separates header from calendar 13522- Natural action point after viewing stats 13523- Users see stats → decide to add event → view calendar 13524- Consistent with original design intent 13525 13526## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 13527- **Moved:** Add Event bar repositioned from between header/grid to below week grid 13528- **Improved:** Better visual flow - header → stats → grid → add button → events 13529- **Changed:** Add Event bar now acts as separator between calendar and event sections 13530 13531### New Layout: 13532``` 13533┌─────────────────────────────┐ 13534│ Clock | Weather | Stats │ ← Header 13535├─────────────────────────────┤ 13536│ M T W T F S S │ ← Week Grid 13537│ 3 4 5 6 7 8 9 │ 13538├─────────────────────────────┤ 13539│ + ADD EVENT │ ← Add bar (moved here!) 13540├─────────────────────────────┤ 13541│ Today │ ← Event sections 13542│ Tomorrow │ 13543│ Important Events │ 13544└─────────────────────────────┘ 13545``` 13546 13547### Visual Flow: 13548**Before (v3.10.8)**: 135491. Header (clock, weather, stats) 135502. **+ ADD EVENT** bar 135513. Week grid 135524. Event sections 13553 13554**After (v3.10.9)**: 135551. Header (clock, weather, stats) 135562. Week grid (calendar days) 135573. **+ ADD EVENT** bar 135584. Event sections 13559 13560### Benefits: 13561- Natural reading flow: View calendar → Add event → See events 13562- Add button positioned between calendar and event list 13563- Acts as visual separator 13564- More logical action placement 13565 13566## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 13567- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 13568- **Changed:** Events now display with single 3px color bar (event's assigned color only) 13569- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 13570- **Simplified:** Cleaner visual with one color bar instead of two 13571- **Improved:** More space for event content without extra bar 13572 13573### Visual Changes: 13574 13575**Before (v3.10.7)** - Dual color bars: 13576``` 13577├─ [Orange][Green] Event Title 13578├─ [Blue][Purple] Event Title 13579``` 13580 13581**After (v3.10.8)** - Single color bar: 13582``` 13583├─ [Green] Event Title ← Only event color! 13584├─ [Purple] Event Title ← Only event color! 13585``` 13586 13587### Add Bar Changes: 13588- Added `margin:0` to eliminate gaps 13589- Now flush against header (no space above) 13590- Now flush against week grid (no space below) 13591- Perfect seamless connection 13592 13593### Technical Changes: 13594**renderSidebarEvent()**: 13595- Removed section color bar (4px) 13596- Kept only event color bar (3px) 13597 13598**showDayEvents() JavaScript**: 13599- Removed section color bar (4px blue) 13600- Kept only event color bar (3px) 13601 13602**Add Event bar**: 13603- Added `margin:0` inline style 13604- Removed all top/bottom margins 13605 13606## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 13607- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 13608- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 13609- **Changed:** Add Event bar color from orange to dark green (#006400) 13610- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 13611- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 13612- **Changed:** Add Event bar font size increased from 7px to 9px 13613- **Changed:** Add Event bar letter spacing increased to 0.5px 13614- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 13615 13616### Color Bar Fix Details: 13617**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 13618**Solution**: Applied same fix as clicked day events: 13619- Changed parent div: `align-items:start` → `align-items:stretch` 13620- Added `min-height:20px` to parent 13621- Changed bars: `height:100%` → `align-self:stretch` 13622- Bars now properly fill vertical space in ALL sections 13623 13624### Add Event Bar Changes: 13625**Before**: 13626- Background: Orange (#ff9800) 13627- Text: Black (#000) 13628- Height: 6px (text cut off) 13629- Font: 7px 13630 13631**After**: 13632- Background: Dark green (#006400) 13633- Text: Bright green (#00ff00) with green glow 13634- Height: 12px (text fully visible) 13635- Font: 9px 13636- Hover: Darker green (#004d00) 13637- Matrix-themed green aesthetic 13638 13639## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 13640- **Fixed:** Event color bars now display correctly in clicked day events 13641- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 13642- **Added:** Conflict badge (⚠) appears on right side of conflicting events 13643- **Updated:** Complete README.md rewrite with full Matrix theme documentation 13644- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 13645- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 13646- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 13647 13648### Color Bar Fix: 13649**Problem**: Bars had `height:100%` but parent had no explicit height 13650**Solution**: 13651- Changed to `align-self:stretch` on bars 13652- Parent uses `align-items:stretch` 13653- Added `min-height:20px` to parent 13654- Bars now properly fill vertical space 13655 13656### Sorting Change: 13657**Before**: Timed events first → All-day events last 13658**After**: All-day events FIRST → Timed events chronologically 13659 13660**Example**: 13661``` 13662Monday, Feb 5 13663├─ All Day - Project Deadline ← All-day first 13664├─ 8:00 AM - Morning Standup ← Earliest time 13665├─ 10:30 AM - Coffee with Bob 13666└─ 2:00 PM - Team Meeting ← Latest time 13667``` 13668 13669### Conflict Badge: 13670- Orange warning triangle (⚠) on right side 13671- 10px font size 13672- Only appears if `event.conflict` is true 13673- Title attribute shows "Time conflict detected" 13674- Small and unobtrusive 13675 13676### README Update: 13677- Complete rewrite with Matrix theme focus 13678- Full usage instructions for all features 13679- Admin interface documentation 13680- Outlook sync setup guide 13681- System monitoring details 13682- Troubleshooting section 13683- Color scheme reference 13684- File structure documentation 13685- Performance tips 13686- Security notes 13687- Quick start examples 13688 13689## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 13690- **Added:** Events now sorted by time when clicking week grid days 13691- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 13692- **Improved:** Events with times appear first, sorted chronologically 13693- **Improved:** All-day events appear after timed events 13694- **Changed:** Add Event bar font size reduced to 7px (from 10px) 13695- **Changed:** Add Event bar now has 0 padding and fixed 6px height 13696 13697### Sorting Logic: 13698- Events with times sorted by time (earliest first) 13699- All-day events (no time) appear at the end 13700- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 13701- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 13702 13703### Add Event Bar Changes: 13704- **Height**: 6px (was ~12px with padding) 13705- **Padding**: 0 (was 4px top/bottom) 13706- **Font Size**: 7px (was 10px) 13707- **Letter Spacing**: 0.3px (was 0.5px) 13708- **Line Height**: 6px to match height 13709- **Vertical Align**: Middle for text centering 13710 13711## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 13712- **Added:** Thin orange "Add Event" bar between header and week grid 13713- **Added:** Quick access to event creation from sidebar widget 13714- **Styled:** Sleek design with hover effects and glow 13715- **Interactive:** Clicks navigate to Manage Events tab in admin 13716- **Improved:** User workflow for adding events from sidebar 13717 13718### Visual Design: 13719- Orange background (#ff9800) matching Today section color 13720- 4px top/bottom padding for thin, sleek appearance 13721- Black text with white text-shadow for visibility 13722- Hover effect: Darkens to #ff7700 with enhanced glow 13723- Orange glow effect (box-shadow) matching Matrix theme 13724- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 13725 13726### Technical Changes: 13727- Added between header close and renderWeekGrid() call 13728- Inline onclick handler navigates to admin manage tab 13729- Inline onmouseover/onmouseout for hover effects 13730- Smooth 0.2s transition on all style changes 13731 13732## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 13733- **Changed:** Update Plugin tab is now the default tab when opening admin 13734- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 13735- **Improved:** Clear Cache button now larger and more prominent with helpful description 13736- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 13737- **Removed:** Debug console.log statements from day event display 13738- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 13739 13740### UI Changes: 13741- Update Plugin tab opens by default (was Config/Outlook Sync tab) 13742- Clear Cache button prominently displayed at top of Update Plugin tab 13743- Orange ️ button (10px 20px padding) with confirmation dialog 13744- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 13745- Success/error messages display on Update Plugin tab after cache clear 13746- Tab navigation reordered to put Update first 13747 13748### Technical Changes: 13749- Default tab changed from 'config' to 'update' in html() method 13750- Tab navigation HTML reordered to show Update Plugin tab first 13751- clearCache() method now redirects with 'update' tab parameter 13752- Removed Clear Cache button from renderConfigTab() 13753- Added Clear Cache button to renderUpdateTab() with message display 13754 13755## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 13756- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 13757- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 13758- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 13759- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 13760 13761### Technical Changes: 13762- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 13763- Events added to weekEvents now include pre-rendered HTML versions 13764- title_html and description_html fields populated before json_encode() 13765- JavaScript now receives properly formatted HTML content 13766 13767## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 13768- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 13769- **Fixed:** HTML event handlers now call correctly sanitized function names 13770- **Fixed:** Weather temperature now updates correctly in sidebar widget 13771- **Added:** Weather update function to sidebar widget JavaScript 13772- **Added:** "Clear Cache" button in admin panel for easy cache refresh 13773- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 13774- **Improved:** All tooltip functions now work correctly on system status bars 13775 13776### Technical Changes: 13777- Changed tooltip function names to use $jsCalId instead of $calId 13778- Changed HTML onmouseover/onmouseout to use $jsCalId 13779- Added updateWeather() function to sidebar widget 13780- Added getWeatherIcon() function to sidebar widget 13781- Added clearCache() method in admin.php 13782- Added recursiveDelete() helper method in admin.php 13783- Admin UI now has ️ Clear Cache button alongside Export/Import 13784 13785## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 13786- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 13787- **Fixed:** Event links and formatting not displaying in clicked day events 13788- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 13789- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 13790- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 13791- **Improved:** All JavaScript variable names now use valid syntax 13792- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 13793 13794### Technical Changes: 13795- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 13796- JavaScript variables now use underscores instead of dashes 13797- Event HTML rendering preserves DokuWiki formatting 13798- Fixed "showTooltip_sidebar is not defined" errors 13799- Fixed "showDayEvents_cal is not defined" errors 13800 13801## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 13802- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 13803- **Fixed:** Functions now defined BEFORE HTML that uses them 13804- **Changed:** Consolidated all JavaScript into single comprehensive script block 13805- **Removed:** ~290 lines of duplicate JavaScript code 13806- **Added:** Shared state management with `sharedState_[calId]` object 13807- **Improved:** System tooltip functions now work correctly 13808- **Improved:** Week grid click events now work correctly 13809 13810### Technical Changes: 13811- Moved all JavaScript to beginning of widget (before HTML) 13812- Removed duplicate script blocks 13813- Unified tooltip and stats functions 13814- Shared latestStats and cpuHistory state 13815- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 13816 13817## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 13818- **Added:** Dual color bars on events (section color + event color) 13819- **Added:** Click week grid days to view events (replaced hover tooltips) 13820- **Added:** Expandable section below week grid for selected day events 13821- **Added:** Blue theme for selected day section 13822- **Changed:** Week grid days now clickable instead of tooltips 13823- **Changed:** Section bar: 4px wide (left) 13824- **Changed:** Event bar: 3px wide (right) 13825- **Increased:** Gap between color bars from 3px to 6px 13826- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 13827 13828### Visual Changes: 13829- Each event shows TWO color bars side-by-side 13830- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 13831- Right bar (3px): Individual event's assigned color 13832- Click any day in week grid to expand event list 13833- X button to close selected day events 13834 13835## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 13836- **Increased:** Event color bar width from 2px to 3px 13837- **Increased:** Gap between section and event bars from 3px to 6px 13838- **Improved:** Event color bars now more visible alongside section bars 13839- **Note:** Dual color bar system already in place from v3.9.6 13840 13841## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 13842- **Changed:** Date in Important Events moved below event name (was above) 13843- **Changed:** Section headers now 9px font size (was 10px) 13844- **Changed:** Section headers now normal case (was ALL CAPS) 13845- **Changed:** Letter spacing reduced from 0.8px to 0.3px 13846- **Improved:** More natural reading flow with date below event name 13847- **Improved:** Cleaner, more subtle section headers 13848 13849### Header Changes: 13850- "TODAY" → "Today" 13851- "TOMORROW" → "Tomorrow" 13852- "IMPORTANT EVENTS" → "Important Events" 13853 13854## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 13855- **Redesigned:** Complete overhaul of `sidebar` parameter 13856- **Added:** Compact week-at-a-glance itinerary view (200px wide) 13857- **Added:** Live clock widget at top of sidebar 13858- **Added:** 7-cell week grid showing event bars 13859- **Added:** Today section with orange header and left border 13860- **Added:** Tomorrow section with green header and left border 13861- **Added:** Important Events section with purple header and left border 13862- **Added:** Admin setting to configure important namespaces 13863- **Added:** Time conflict badges in sidebar events 13864- **Added:** Task checkboxes in sidebar events 13865- **Changed:** Sidebar now optimized for narrow spaces (200px) 13866- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 13867 13868### New Features: 13869- Clock updates every second showing current time 13870- Week grid shows Mon-Sun with colored event bars 13871- Today/Tomorrow sections show full event details 13872- Important events highlighted in purple (configurable namespaces) 13873- All badges (conflict, time, etc.) shown in compact format 13874- Automatic time conflict detection 13875 13876## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 13877- **Removed:** 16 unused/debug/backup files 13878- **Removed:** 69 console.log() debug statements 13879- **Removed:** 3 orphaned object literals from console.log removal 13880- **Removed:** Temporary comments and markers 13881- **Fixed:** JavaScript syntax errors from cleanup 13882- **Improved:** Code quality and maintainability 13883- **Improved:** Reduced plugin size by removing unnecessary files 13884- **Status:** Production-ready, fully cleaned codebase 13885 13886### Files Removed: 13887- style.css.backup, script.js.backup 13888- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 13889- debug_events.php, debug_html.php, cleanup_events.php 13890- fix_corrupted_json.php, fix_wildcard_namespaces.php 13891- find_outlook_duplicates.php, update_namespace.php 13892- validate_calendar_json.php, admin.js 13893- test_date_field.html 13894 13895## Version 3.7.5 (2026-02-05) 13896- **Fixed:** PHP syntax error (duplicate foreach loop removed) 13897- **Fixed:** Time variable handling in grace period logic 13898 13899## Version 3.7.4 (2026-02-05) 13900- **Added:** 15-minute grace period for timed events 13901- **Changed:** Events with times now stay visible for 15 minutes after their start time 13902- **Changed:** Prevents events from immediately disappearing when they start 13903- **Improved:** Better user experience for ongoing events 13904- **Fixed:** Events from earlier today now properly handled with grace period 13905 13906## Version 3.7.3 (2026-02-05) 13907- **Changed:** Complete redesign of cleanup section for compact, sleek layout 13908- **Changed:** Radio buttons now in single row at top 13909- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 13910- **Changed:** Inline controls - no more grid layout or wrapper boxes 13911- **Changed:** Namespace filter now compact single-line input 13912- **Changed:** Smaller buttons and tighter spacing throughout 13913- **Improved:** More professional, space-efficient design 13914 13915## Version 3.7.2 (2026-02-04) 13916- **Fixed:** Strange boxes under cleanup options - now properly hidden 13917- **Changed:** Unified color scheme across all admin sections 13918- **Changed:** Green (#00cc07) - Primary actions and main theme 13919- **Changed:** Orange (#ff9800) - Warnings and cleanup features 13920- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 13921- **Improved:** Consistent visual design throughout admin interface 13922 13923## Version 3.7.1 (2026-02-04) 13924- **Fixed:** Cleanup section background changed from orange to white 13925- **Fixed:** Event cleanup now properly scans all calendar directories 13926- **Added:** Debug info display when preview finds no events 13927- **Improved:** Better directory scanning logic matching other features 13928 13929## Version 3.7.0 (2026-02-04) 13930- **Added:** Event cleanup feature in Events Manager 13931- **Added:** Delete old events by age (months/years old) 13932- **Added:** Delete events by status (completed tasks, past events) 13933- **Added:** Delete events by date range 13934- **Added:** Namespace filter for targeted cleanup 13935- **Added:** Preview function to see what will be deleted 13936- **Added:** Automatic backup creation before cleanup 13937- **Changed:** Reduced changelog viewer height to 100px (was 400px) 13938 13939## Version 3.6.3 (2026-02-04) 13940- **Fixed:** Conflict tooltips now work properly after navigating between months 13941- **Added:** Changelog display in Update Plugin tab 13942- **Added:** CHANGELOG.md file with version history 13943- **Improved:** Changelog shows last 10 versions with color-coded change types 13944- **Fixed:** Removed debug console.log statements 13945 13946## Version 3.6.2 (2026-02-04) 13947- **Fixed:** Month title now updates correctly when navigating between months 13948- **Changed:** All eventpanel header elements reduced by 10% for more compact design 13949- **Changed:** Reduced header height from 78px to 70px 13950 13951## Version 3.6.1 (2026-02-04) 13952- **Changed:** Complete redesign of eventpanel header with practical two-row layout 13953- **Fixed:** Improved layout for narrow widths (~500px) 13954- **Changed:** Simplified color scheme (removed purple gradient) 13955 13956## Version 3.6.0 (2026-02-04) 13957- **Changed:** Redesigned eventpanel header with gradient background 13958- **Changed:** Consolidated multiple header rows into compact single-row design 13959 13960## Version 3.5.1 (2026-02-04) 13961- **Changed:** Moved event search bar into header row next to + Add button 13962- **Improved:** More compact UI with search integrated into header 13963 13964## Version 3.5.0 (2026-02-04) 13965- **Added:** Event search functionality in sidebar and eventpanel 13966- **Added:** Real-time filtering as you type 13967- **Added:** Clear button (✕) appears when searching 13968- **Added:** "No results" message when search returns nothing 13969 13970## Version 3.4.7 (2026-02-04) 13971- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 13972- **Fixed:** Removed debug logging from console 13973- **Changed:** Updated export version number to match plugin version 13974 13975## Version 3.4.6 (2026-02-04) 13976- **Added:** Debug logging to diagnose conflict detection issues 13977- **Development:** Extensive console logging for troubleshooting 13978 13979## Version 3.4.5 (2026-02-04) 13980- **Added:** Debug logging to showDayPopup and conflict detection 13981- **Development:** Added logging to trace conflict detection flow 13982 13983## Version 3.4.4 (2026-02-04) 13984- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 13985- **Fixed:** Conflict tooltips now appear on hover 13986- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 13987- **Added:** Conflict badges in both future and past events sections 13988 13989## Version 3.4.3 (2026-02-04) 13990- **Added:** Custom styled conflict tooltips with hover functionality 13991- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 13992- **Improved:** Beautiful tooltip design with orange header and clean formatting 13993 13994## Version 3.4.2 (2026-02-04) 13995- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 13996 13997## Version 3.4.1 (2026-02-04) 13998- **Fixed:** End time field now properly saves to database 13999- **Fixed:** End time dropdown now filters to show only valid times after start time 14000- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 14001- **Improved:** End time auto-suggests +1 hour when start time selected 14002 14003## Version 3.4.0 (2026-02-04) 14004- **Added:** End time support for events (start and end times) 14005- **Added:** Automatic time conflict detection 14006- **Added:** Conflict warning badges (⚠️) on events with overlapping times 14007- **Added:** Conflict tooltips showing which events conflict 14008- **Added:** Visual conflict indicators with pulse animation 14009- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 14010 14011## Version 3.3.77 (2026-02-04) 14012- **Fixed:** Namespace badge onclick handlers restored after clearing filter 14013- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 14014 14015## Version 3.3.76 (2026-02-04) 14016- **Fixed:** Namespace badges now clickable after clearing namespace filter 14017 14018## Version 3.3.75 (2026-02-04) 14019- **Fixed:** Form resubmission warnings eliminated 14020- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 14021- **Changed:** All admin redirects now use absolute URLs 14022 14023## Version 3.3.74 (2026-02-04) 14024- **Fixed:** Clearing namespace filter now restores original namespace instead of default 14025- **Added:** data-original-namespace attribute to preserve initial namespace setting 14026- **Improved:** Console logging for namespace filter debugging 14027 14028## Version 3.3.73 (2026-02-03) 14029- **Added:** Dynamic namespace filtering banner with clear button 14030- **Fixed:** JavaScript function accessibility issues 14031- **Fixed:** Namespace badge click handlers in event lists 14032- **Improved:** Persistent namespace filtering across views 14033 14034## Earlier Versions 14035See previous transcripts for complete history through v3.3.73, including: 14036- Recurring events with Outlook sync 14037- Multi-namespace support 14038- Event categories and mapping 14039- Backup/restore functionality 14040- System statistics bar 14041- Namespace selector with fuzzy search 14042- Events Manager with import/export 14043- And much more... 14044