11d05cddcSAtari911# Calendar Plugin Changelog 27e8ea635SAtari911 3*815440faSAtari911## Version 7.0.8 (2026-02-15) - TIMEZONE FIX 4*815440faSAtari911 5*815440faSAtari911### Bug Fix: Date Shift in Non-UTC Timezones 6*815440faSAtari911Fixed critical bug where events appeared shifted by one day in timezones ahead of UTC (e.g., Europe/Prague UTC+1). 7*815440faSAtari911 8*815440faSAtari911**Root Cause:** 9*815440faSAtari911JavaScript'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*815440faSAtari911 11*815440faSAtari911**Fix:** 12*815440faSAtari911Added `formatLocalDate(date)` helper function that formats dates using local time methods (`getFullYear()`, `getMonth()`, `getDate()`) instead of UTC conversion. 13*815440faSAtari911 14*815440faSAtari911**Affected Areas (now fixed):** 15*815440faSAtari911- Multi-day event spanning (line 385) 16*815440faSAtari911- Today string calculation in event list (line 566) 17*815440faSAtari911- Past event detection in event items (line 1022) 18*815440faSAtari911 19*815440faSAtari911### Files Modified 20*815440faSAtari911- `calendar-main.js` - Added `formatLocalDate()` helper, replaced 3 `toISOString().split('T')[0]` calls 21*815440faSAtari911 22*815440faSAtari911--- 23*815440faSAtari911 24*815440faSAtari911## Version 7.0.7 (2026-02-15) - GOOGLE CALENDAR SYNC 25*815440faSAtari911 26*815440faSAtari911### Google Calendar Integration 27*815440faSAtari911- Two-way sync with Google Calendar via OAuth 2.0 28*815440faSAtari911- Import events from Google Calendar to DokuWiki 29*815440faSAtari911- Export events from DokuWiki to Google Calendar 30*815440faSAtari911- Support for all-day and timed events 31*815440faSAtari911- Multi-day event handling 32*815440faSAtari911- Color mapping between Google and DokuWiki 33*815440faSAtari911- Duplicate detection prevents re-importing same events 34*815440faSAtari911- Select which Google calendar to sync with 35*815440faSAtari911- Admin panel UI for configuration and sync controls 36*815440faSAtari911 37*815440faSAtari911### Setup Requirements 38*815440faSAtari911- Google Cloud Console project 39*815440faSAtari911- Google Calendar API enabled 40*815440faSAtari911- OAuth 2.0 Web Application credentials 41*815440faSAtari911- Redirect URI configuration 42*815440faSAtari911 43*815440faSAtari911### New Files 44*815440faSAtari911- `classes/GoogleCalendarSync.php` - OAuth and Calendar API integration 45*815440faSAtari911 46*815440faSAtari911### Files Modified 47*815440faSAtari911- `action.php` - Added Google sync action handlers 48*815440faSAtari911- `admin.php` - Added Google sync admin tab 49*815440faSAtari911 50*815440faSAtari911--- 51*815440faSAtari911 52*815440faSAtari911## Version 7.0.6 (2026-02-15) - ACCESSIBILITY IMPROVEMENTS 53*815440faSAtari911 54*815440faSAtari911### Screen Reader Support 55*815440faSAtari911- Added ARIA live region for dynamic announcements 56*815440faSAtari911- Announces "Event created", "Event updated", "Event deleted" on actions 57*815440faSAtari911- Announces "Task marked complete/incomplete" on toggle 58*815440faSAtari911- Screen readers receive feedback without visual alerts 59*815440faSAtari911 60*815440faSAtari911### Debug Mode 61*815440faSAtari911- Added `CALENDAR_DEBUG` flag for JavaScript console logging 62*815440faSAtari911- `calendarLog()` and `calendarError()` helper functions 63*815440faSAtari911- Debug output disabled by default 64*815440faSAtari911 65*815440faSAtari911### Code Quality 66*815440faSAtari911- Consistent error handling patterns 67*815440faSAtari911- Better separation of concerns 68*815440faSAtari911 69*815440faSAtari911### Files Modified 70*815440faSAtari911- `calendar-main.js` - ARIA live region, debug helpers, announcements 71*815440faSAtari911 72*815440faSAtari911--- 73*815440faSAtari911 74*815440faSAtari911## Version 7.0.5 (2026-02-15) - AUDIT LOGGING & ACCESSIBILITY 75*815440faSAtari911 76*815440faSAtari911### Audit Logging 77*815440faSAtari911- New `AuditLogger.php` class for compliance logging 78*815440faSAtari911- Logs all event modifications: create, update, delete, move, task toggle 79*815440faSAtari911- JSON-formatted log files with timestamps, user info, and IP addresses 80*815440faSAtari911- Automatic log rotation (5MB max, 10 files retained) 81*815440faSAtari911- Log entries include: namespace, date, event ID, title, and change details 82*815440faSAtari911 83*815440faSAtari911### Keyboard Navigation (Accessibility) 84*815440faSAtari911- Arrow keys navigate between calendar days 85*815440faSAtari911- Enter/Space activates focused day (opens popup) 86*815440faSAtari911- Arrow Up/Down navigates between events in popups 87*815440faSAtari911- Enter on event opens edit dialog 88*815440faSAtari911- Delete/Backspace on event triggers delete 89*815440faSAtari911- Escape closes all dialogs, popups, and dropdowns 90*815440faSAtari911- Added `tabindex` and `role` attributes for screen readers 91*815440faSAtari911- Added `aria-label` descriptions for calendar days and events 92*815440faSAtari911 93*815440faSAtari911### CSS Focus States 94*815440faSAtari911- Visible focus indicators on calendar days 95*815440faSAtari911- Focus styles on event items in popups 96*815440faSAtari911- Focus styles on custom date/time pickers 97*815440faSAtari911- Uses `focus-visible` for keyboard-only focus rings 98*815440faSAtari911 99*815440faSAtari911### Files Added 100*815440faSAtari911- `classes/AuditLogger.php` - Compliance audit logging 101*815440faSAtari911 102*815440faSAtari911### Files Modified 103*815440faSAtari911- `action.php` - Integrated audit logging for all event operations 104*815440faSAtari911- `calendar-main.js` - Extended keyboard navigation 105*815440faSAtari911- `syntax.php` - Added accessibility attributes to calendar cells 106*815440faSAtari911- `style.css` - Added focus state styles 107*815440faSAtari911 108*815440faSAtari911--- 109*815440faSAtari911 110*815440faSAtari911## Version 7.0.4 (2026-02-15) - CODE CLEANUP 111*815440faSAtari911 112*815440faSAtari911### Code Cleanup 113*815440faSAtari911- Removed unused `calendarDebounce()` and `calendarThrottle()` utility functions 114*815440faSAtari911- Removed duplicate `updateEndTimeOptions()` function definition 115*815440faSAtari911- Removed unused `_calendarSelectOpen` tracking variable 116*815440faSAtari911- Removed orphaned `.input-date` and `.time-select` CSS (no longer using native inputs) 117*815440faSAtari911- Consolidated legacy function calls 118*815440faSAtari911 119*815440faSAtari911### Improvements 120*815440faSAtari911- End date picker now opens to start date's month when no end date is selected 121*815440faSAtari911- End time picker now scrolls to first available time after start time 122*815440faSAtari911 123*815440faSAtari911### Files Modified 124*815440faSAtari911- `calendar-main.js` - Removed ~40 lines of dead code 125*815440faSAtari911- `style.css` - Removed ~25 lines of unused CSS 126*815440faSAtari911 127*815440faSAtari911--- 128*815440faSAtari911 129*815440faSAtari911## Version 7.0.3 (2026-02-15) - CUSTOM DATE & TIME PICKERS 130*815440faSAtari911 131*815440faSAtari911### Complete Replacement of Native Browser Controls 132*815440faSAtari911Both date inputs and time selects have been replaced with custom, lightweight pickers to eliminate all browser-related performance issues. 133*815440faSAtari911 134*815440faSAtari911#### Custom Date Picker 135*815440faSAtari911- **Mini calendar grid** - Clean monthly view with day selection 136*815440faSAtari911- **Month navigation** - Previous/next buttons for quick browsing 137*815440faSAtari911- **Visual indicators** - Today highlighted, selected date marked 138*815440faSAtari911- **End date validation** - Cannot select end date before start date 139*815440faSAtari911- **Clear button** - Easy removal of optional end date 140*815440faSAtari911 141*815440faSAtari911#### Custom Time Picker (from v7.0.2) 142*815440faSAtari911- **Period groupings** - Morning, Afternoon, Evening, Night 143*815440faSAtari911- **Lazy loading** - Options built only when dropdown opens 144*815440faSAtari911- **Smart filtering** - End times after start time only 145*815440faSAtari911 146*815440faSAtari911#### Code Cleanup 147*815440faSAtari911- Removed old `setupSelectTracking()` function (was causing conflicts) 148*815440faSAtari911- Removed redundant event listener code 149*815440faSAtari911- Unified dropdown close handling for all picker types 150*815440faSAtari911- No native `<input type="date">` or `<select>` elements in event dialog 151*815440faSAtari911 152*815440faSAtari911### Files Modified 153*815440faSAtari911- `syntax.php` - New date picker HTML structure 154*815440faSAtari911- `calendar-main.js` - Custom date picker JavaScript, cleanup 155*815440faSAtari911- `style.css` - Date picker calendar grid styles 156*815440faSAtari911 157*815440faSAtari911--- 158*815440faSAtari911 159*815440faSAtari911## Version 7.0.2 (2026-02-15) - CUSTOM TIME PICKER 160*815440faSAtari911 161*815440faSAtari911### Major Fix: Replaced Native Selects with Custom Time Pickers 162*815440faSAtari911The native `<select>` element with 97 time options was causing browser freezes when opening. This version replaces them with lightweight custom dropdown pickers. 163*815440faSAtari911 164*815440faSAtari911#### New Custom Time Picker Features 165*815440faSAtari911- **Instant opening** - No browser rendering delay 166*815440faSAtari911- **Lazy-loaded options** - Dropdown HTML built only when clicked 167*815440faSAtari911- **Period grouping** - Morning, Afternoon, Evening, Night sections 168*815440faSAtari911- **Smart filtering** - End time options automatically hide times before start time 169*815440faSAtari911- **Visual feedback** - Selected time highlighted, disabled times grayed out 170*815440faSAtari911 171*815440faSAtari911#### Technical Changes 172*815440faSAtari911- Replaced `<select>` elements with `<button>` + `<div>` dropdown 173*815440faSAtari911- Hidden `<input>` stores actual value for form submission 174*815440faSAtari911- Time data pre-computed once, reused for all pickers 175*815440faSAtari911- Event delegation for option clicks 176*815440faSAtari911- Automatic cleanup when clicking outside 177*815440faSAtari911 178*815440faSAtari911#### Removed 179*815440faSAtari911- Native `<select>` time pickers (caused 2600ms+ freezes) 180*815440faSAtari911- `onchange` handlers from date inputs (handled in JS now) 181*815440faSAtari911- Old `setupSelectTracking()` function 182*815440faSAtari911 183*815440faSAtari911### Files Modified 184*815440faSAtari911- `syntax.php` - New time picker HTML structure 185*815440faSAtari911- `calendar-main.js` - Custom time picker JavaScript 186*815440faSAtari911- `style.css` - Time picker dropdown styles 187*815440faSAtari911 188*815440faSAtari911--- 189*815440faSAtari911 190*815440faSAtari911## Version 7.0.1 (2026-02-15) - SELECTOR FLICKER FIX 191*815440faSAtari911 192*815440faSAtari911### Bug Fixes 193*815440faSAtari911- **Fixed selector flicker on subsequent clicks** - Time/date selectors no longer flash or lag after first use 194*815440faSAtari911 - New `setupSelectTracking()` prevents DOM updates while selector is open 195*815440faSAtari911 - Tracks mousedown/focus/blur/change events on all form inputs 196*815440faSAtari911 - Uses `requestAnimationFrame` for smooth visual updates 197*815440faSAtari911 - Added state caching to skip redundant DOM manipulation 198*815440faSAtari911 199*815440faSAtari911### CSS Improvements 200*815440faSAtari911- Changed `transition: all` to specific properties on `.input-sleek` elements 201*815440faSAtari911- Added `transition: none` for select options 202*815440faSAtari911- Prevents browser reflow issues during dropdown rendering 203*815440faSAtari911 204*815440faSAtari911--- 205*815440faSAtari911 206*815440faSAtari911## Version 7.0.0 (2026-02-15) - STABILITY & PERFORMANCE RELEASE 207*815440faSAtari911 208*815440faSAtari911### Major Improvements 209*815440faSAtari911 210*815440faSAtari911#### File Locking & Atomic Writes (Critical Stability Fix) 211*815440faSAtari911- **New `CalendarFileHandler` class** with atomic file operations 212*815440faSAtari911- Prevents data corruption from concurrent event saves 213*815440faSAtari911- Uses temp file + atomic rename strategy for safe writes 214*815440faSAtari911- Implements `flock()` for proper file locking during reads/writes 215*815440faSAtari911- Graceful handling of lock acquisition failures with retries 216*815440faSAtari911 217*815440faSAtari911#### Caching Layer (Performance Improvement) 218*815440faSAtari911- **New `CalendarEventCache` class** for event data caching 219*815440faSAtari911- 5-minute TTL reduces unnecessary JSON file reads 220*815440faSAtari911- In-memory caching for current request 221*815440faSAtari911- Automatic cache invalidation on event modifications 222*815440faSAtari911- Cache cleanup for expired entries 223*815440faSAtari911 224*815440faSAtari911#### Rate Limiting (Security Enhancement) 225*815440faSAtari911- **New `CalendarRateLimiter` class** for AJAX endpoint protection 226*815440faSAtari911- 60 requests/minute for read actions 227*815440faSAtari911- 30 requests/minute for write actions (more restrictive) 228*815440faSAtari911- Per-user tracking (falls back to IP for anonymous) 229*815440faSAtari911- Rate limit headers in responses (X-RateLimit-Limit, X-RateLimit-Remaining) 230*815440faSAtari911- Automatic cleanup of old rate limit data 231*815440faSAtari911 232*815440faSAtari911#### Code Refactoring 233*815440faSAtari911- **New `CalendarEventManager` class** consolidating CRUD operations 234*815440faSAtari911- New `classes/` directory for organized code structure 235*815440faSAtari911- Reduced code duplication across files 236*815440faSAtari911- Improved separation of concerns 237*815440faSAtari911- Better maintainability for future development 238*815440faSAtari911 239*815440faSAtari911#### JavaScript Performance Fixes (Dialog Responsiveness) 240*815440faSAtari911- **Fixed slow time selector** - End time dropdown now opens instantly 241*815440faSAtari911 - Replaced `Array.from().forEach()` with direct `options` loop (97 options) 242*815440faSAtari911 - Single-pass algorithm instead of multiple iterations 243*815440faSAtari911 - Uses `hidden` property instead of `style.display` manipulation 244*815440faSAtari911- **Fixed event listener accumulation** - Dialog inputs no longer slow down over time 245*815440faSAtari911 - Added `data-initialized` flag to prevent re-binding listeners 246*815440faSAtari911 - Namespace search only initializes once per calendar 247*815440faSAtari911- **Fixed selector flicker on subsequent clicks** 248*815440faSAtari911 - New `setupSelectTracking()` function prevents DOM updates while selector is open 249*815440faSAtari911 - Tracks mousedown/focus/blur/change events on time and date inputs 250*815440faSAtari911 - Uses `requestAnimationFrame` instead of `setTimeout` for visual updates 251*815440faSAtari911 - Added state caching to skip redundant DOM updates 252*815440faSAtari911- **Fixed CSS transition interference** 253*815440faSAtari911 - Changed `transition: all` to specific properties on form inputs 254*815440faSAtari911 - Added explicit `transition: none` for select options 255*815440faSAtari911 - Prevents browser reflow issues during dropdown rendering 256*815440faSAtari911 257*815440faSAtari911### Branding Changes 258*815440faSAtari911- Removed "Matrix Edition" from plugin name and all references 259*815440faSAtari911- Plugin is now simply "Calendar Plugin" 260*815440faSAtari911- Matrix theme remains available (now called just "Matrix") 261*815440faSAtari911 262*815440faSAtari911### Technical Details 263*815440faSAtari911- All JSON file operations now use atomic writes 264*815440faSAtari911- Event saves protected against race conditions 265*815440faSAtari911- Cache automatically invalidated on namespace/month changes 266*815440faSAtari911- Rate limiter uses probabilistic cleanup (1 in 100 requests) 267*815440faSAtari911 268*815440faSAtari911### Files Added 269*815440faSAtari911- `classes/FileHandler.php` - Atomic file operations with locking 270*815440faSAtari911- `classes/EventCache.php` - Caching layer with TTL 271*815440faSAtari911- `classes/RateLimiter.php` - AJAX rate limiting 272*815440faSAtari911- `classes/EventManager.php` - Consolidated event CRUD operations 273*815440faSAtari911 274*815440faSAtari911### Upgrade Notes 275*815440faSAtari911- No database migration required 276*815440faSAtari911- Cache directory created automatically (`data/cache/calendar/`) 277*815440faSAtari911- Rate limit data stored in `data/cache/calendar/ratelimit/` 278*815440faSAtari911- Existing events and settings preserved 279*815440faSAtari911 280*815440faSAtari911--- 281*815440faSAtari911 2820b7aadb5SAtari911## Version 6.14.2 (2026-02-15) - SYSTEM LOAD TOGGLE 2830b7aadb5SAtari911 2840b7aadb5SAtari911### Added System Load Bars Toggle 2850b7aadb5SAtari911- New toggle in **Admin > Calendar > Themes** tab 2860b7aadb5SAtari911- Choose to show or hide CPU/Memory load indicator bars 2870b7aadb5SAtari911- Setting applies to both event panel and sidebar widget 2880b7aadb5SAtari911- Stored in `data/meta/calendar_show_system_load.txt` 2890b7aadb5SAtari911- JavaScript polling is also disabled when hidden (saves resources) 2900b7aadb5SAtari911 291b498f308SAtari911## Version 6.14.1 (2026-02-14) - SECURITY FIX 292b498f308SAtari911 293b498f308SAtari911### Security Improvements 294b498f308SAtari911- **Authentication required** - Write actions (save, delete, toggle) now require user to be logged in 295b498f308SAtari911- **Improved CSRF token handling** - New `getSecurityToken()` helper function checks multiple sources: 296b498f308SAtari911 - `JSINFO.sectok` (standard) 297b498f308SAtari911 - `window.JSINFO.sectok` 298b498f308SAtari911 - Hidden form field `input[name="sectok"]` 299b498f308SAtari911 - Meta tag `meta[name="sectok"]` 300b498f308SAtari911- Anonymous users can no longer add/edit/delete events 301b498f308SAtari911- Better error messages for authentication and token failures 302b498f308SAtari911 303b498f308SAtari911### Bug Fixes 304b498f308SAtari911- Fixed "Invalid security token" error on clean DokuWiki installations 305b498f308SAtari911- Added debug logging for security token failures 306b498f308SAtari911 307da206178SAtari911## Version 6.14.0 (2026-02-14) - STABLE RELEASE 308da206178SAtari911 309da206178SAtari911### Code Cleanup & Localization 310da206178SAtari911- Added localization for all static calendar strings (EN/DE) 311da206178SAtari911- New lang keys: `previous_month`, `next_month`, `print_calendar`, `no_events_scheduled`, `calendar_label`, `details` 312da206178SAtari911- Code review and cleanup completed 313da206178SAtari911- Updated README.md and plugin documentation 314da206178SAtari911 315da206178SAtari911### Static Calendar Features (v6.13.x consolidated) 316da206178SAtari911- Read-only presentation mode: `{{calendar static}}` 317da206178SAtari911- Custom titles: `title="My Events"` 318da206178SAtari911- Month locking: `month=2` disables navigation 319da206178SAtari911- Print button with clean itinerary output 320da206178SAtari911- All themes supported: matrix, pink, purple, professional, wiki, dark, light 321da206178SAtari911- `noprint` option to hide print functionality 322da206178SAtari911- Formatted descriptions in tooltips and itinerary 323da206178SAtari911 324da206178SAtari911### Other Improvements in 6.13.x 325da206178SAtari911- Admin menu icon (SVG) 326da206178SAtari911- Config import fix for `return array()` syntax 327da206178SAtari911- Mobile touch button fixes 328da206178SAtari911- Important events in day popup with star icons 329da206178SAtari911- Time picker grouped by period 330da206178SAtari911- Multi-day event time validation 331da206178SAtari911 332da206178SAtari911## Version 6.13.13 (2026-02-14) - PRINT BUTTON CENTERING 333da206178SAtari911 334da206178SAtari911### Fixed Print Button Icon Alignment 335da206178SAtari911- Added `display: flex`, `align-items: center`, `justify-content: center` 336da206178SAtari911- Added `padding: 0` and `line-height: 1` 337da206178SAtari911- Icon now properly centered in circle 338da206178SAtari911 339da206178SAtari911## Version 6.13.12 (2026-02-14) - SIMPLE TOOLTIP 340da206178SAtari911 341da206178SAtari911### Simplified Hover Tooltip 342da206178SAtari911- Removed custom JS tooltip (was causing triple popups) 343da206178SAtari911- Uses native browser `title` attribute only 344da206178SAtari911- Plain text with formatting converted: `**bold**` → `*bold*`, `//italic//` → `_italic_` 345da206178SAtari911- Links shown as: `text (url)` 346da206178SAtari911- Added emoji before time for visual clarity 347da206178SAtari911- Itinerary still shows full HTML formatting 348da206178SAtari911 349da206178SAtari911## Version 6.13.11 (2026-02-14) - FORMATTED DESCRIPTIONS 350da206178SAtari911 351da206178SAtari911### Rich Text Formatting in Static Calendar 352da206178SAtari911- **Hover tooltips** now show formatted text (bold, italic, links, line breaks) 353da206178SAtari911- **Itinerary descriptions** display with full formatting 354da206178SAtari911- Uses existing `renderDescription()` function for consistency 355da206178SAtari911- Supports: `**bold**`, `//italic//`, `[[links]]`, `[markdown](links)`, line breaks 356da206178SAtari911 357da206178SAtari911### Technical Details 358da206178SAtari911- Added `data-tooltip` attribute with rich HTML content 359da206178SAtari911- New JavaScript tooltip handler with smart positioning 360da206178SAtari911- CSS styles for `.static-tooltip` and itinerary formatting 361da206178SAtari911- Tooltips stay within viewport bounds 362da206178SAtari911 363da206178SAtari911## Version 6.13.10 (2026-02-14) - PRINT MARGINS FIX v3 364da206178SAtari911 365da206178SAtari911### Fixed Print Margins - Inline Styles Approach 366da206178SAtari911- Removed reliance on `@page` CSS (browser support inconsistent) 367da206178SAtari911- Uses inline style `padding: 50px 60px` directly on wrapper div 368da206178SAtari911- Simplified CSS for better browser compatibility 369da206178SAtari911- Smaller table font (12px) for better fit 370da206178SAtari911- Set `max-width: 800px` on content wrapper 371da206178SAtari911 372da206178SAtari911## Version 6.13.9 (2026-02-14) - PRINT MARGINS FIX v2 373da206178SAtari911 374da206178SAtari911### Fixed Print Margins 375da206178SAtari911- Added `.print-wrapper` div with 0.5in padding/margin 376da206178SAtari911- Uses both `@page` margin AND wrapper margins for compatibility 377da206178SAtari911- Set `@page { margin: 1in 0.75in }` (top/bottom 1in, sides 0.75in) 378da206178SAtari911- Wrapper has `max-width: 7.5in` to fit standard letter size 379da206178SAtari911- Smaller fonts (0.85em) to fit more content 380da206178SAtari911- Added 250ms delay before print to ensure styles load 381da206178SAtari911 382da206178SAtari911## Version 6.13.8 (2026-02-14) - PRINT MARGINS FIX 383da206178SAtari911 384da206178SAtari911### Improved Print Layout 385da206178SAtari911- Added `@page { margin: 0.75in }` for proper print margins 386da206178SAtari911- Increased body padding to 40px for screen preview 387da206178SAtari911- Smaller font sizes to fit better on page 388da206178SAtari911- Description column limited width with word-wrap 389da206178SAtari911- Table header repeats on each page (`display: table-header-group`) 390da206178SAtari911- Rows avoid page breaks in middle (`page-break-inside: avoid`) 391da206178SAtari911- Print color adjust enabled for backgrounds 392da206178SAtari911 393da206178SAtari911## Version 6.13.7 (2026-02-14) - ALL THEMES FOR STATIC CALENDAR 394da206178SAtari911 395da206178SAtari911### Added All Theme Options 396da206178SAtari911Now all themes work with static calendar: 397da206178SAtari911 398da206178SAtari911| Theme | Description | 399da206178SAtari911|-------|-------------| 400da206178SAtari911| `matrix` | Green on dark (default Matrix style) | 401da206178SAtari911| `pink` | Pink/magenta on dark | 402da206178SAtari911| `purple` | Purple/violet on dark | 403da206178SAtari911| `professional` | Blue on white (business style) | 404da206178SAtari911| `wiki` | Neutral gray (matches DokuWiki) | 405da206178SAtari911| `dark` | Blue on dark gray | 406da206178SAtari911| `light` | Clean white/gray | 407da206178SAtari911 408da206178SAtari911### Examples 409da206178SAtari911``` 410da206178SAtari911{{calendar theme=matrix static}} 411da206178SAtari911{{calendar theme=purple static}} 412da206178SAtari911{{calendar theme=professional static}} 413da206178SAtari911{{calendar theme=wiki static}} 414da206178SAtari911``` 415da206178SAtari911 416da206178SAtari911## Version 6.13.6 (2026-02-14) - QUOTED PARAMETER FIX 417da206178SAtari911 418da206178SAtari911### Fixed Quoted Parameter Parsing 419da206178SAtari911- Titles with spaces now work: `title="Feb 26 Expense Log"` 420da206178SAtari911- Uses regex to properly parse: `key="value with spaces"` 421da206178SAtari911- Supports both double and single quotes 422da206178SAtari911- Example: `{{calendar title="My Custom Title" static}}` 423da206178SAtari911 424da206178SAtari911## Version 6.13.5 (2026-02-14) - STATIC CALENDAR OPTIONS 425da206178SAtari911 426da206178SAtari911### New Static Calendar Options 427da206178SAtari911 428da206178SAtari911| Option | Description | Example | 429da206178SAtari911|--------|-------------|---------| 430da206178SAtari911| `title=X` | Custom title instead of month name | `title="Club Meetings"` | 431da206178SAtari911| `noprint` | Hide print button and print view | `{{calendar static noprint}}` | 432da206178SAtari911| `theme=X` | Apply specific theme (matrix, pink, dark, light) | `theme=matrix` | 433da206178SAtari911 434da206178SAtari911### Fixed Month/Year Lock 435da206178SAtari911- When you specify `month=X` or `year=X`, navigation is now disabled 436da206178SAtari911- `{{calendar month=2 static}}` shows only February with no nav arrows 437da206178SAtari911- `{{calendar year=2025 month=12 static}}` locks to December 2025 438da206178SAtari911 439da206178SAtari911### Examples 440da206178SAtari911``` 441da206178SAtari911{{calendar static}} // Navigable, current month 442da206178SAtari911{{calendar month=2 static}} // Locked to February 443da206178SAtari911{{calendar title="Team Events" static}} // Custom title 444da206178SAtari911{{calendar theme=matrix static}} // Matrix theme 445da206178SAtari911{{calendar namespace=club static noprint}} // No print button 446da206178SAtari911{{calendar month=3 title="March Meetings" theme=pink static}} 447da206178SAtari911``` 448da206178SAtari911 449da206178SAtari911## Version 6.13.4 (2026-02-14) - DEDICATED PRINT BUTTON 450da206178SAtari911 451da206178SAtari911### Added Print Button to Static Calendar 452da206178SAtari911- New ️ print button in the calendar header 453da206178SAtari911- Opens a clean popup window with ONLY the itinerary content 454da206178SAtari911- Automatically triggers print dialog 455da206178SAtari911- Window closes after printing 456da206178SAtari911- No DokuWiki headers/footers/sidebars - just the calendar 457da206178SAtari911 458da206178SAtari911### How It Works 459da206178SAtari911- Extracts the print view HTML 460da206178SAtari911- Creates a new window with minimal styling 461da206178SAtari911- Calls `window.print()` automatically 462da206178SAtari911- Clean single-page output 463da206178SAtari911 464da206178SAtari911## Version 6.13.3 (2026-02-14) - PRINT BLANK PAGES FIX 465da206178SAtari911 466da206178SAtari911### Fixed Blank Pages When Printing 467da206178SAtari911- Aggressively hide ALL screen view elements and children in print 468da206178SAtari911- Reset height/width to 0 with !important on grid, cells, events 469da206178SAtari911- Ensure print view elements have proper display table properties 470da206178SAtari911- Force all hidden elements to position:absolute off-screen 471da206178SAtari911 472da206178SAtari911## Version 6.13.2 (2026-02-14) - STATIC CALENDAR RESPONSIVE FIX 473da206178SAtari911 474da206178SAtari911### Improved Static Calendar Layout 475da206178SAtari911- Changed from `max-width: 900px` to `width: 100%` for full container fit 476da206178SAtari911- Added `table-layout: fixed` for consistent column widths 477da206178SAtari911- Added `overflow-x: auto` for horizontal scroll on very small screens 478da206178SAtari911- Reduced header padding and font sizes for better fit 479da206178SAtari911- Improved responsive breakpoints for mobile (768px and 480px) 480da206178SAtari911- Hide time on very small screens to save space 481da206178SAtari911- Better touch targets for navigation buttons 482da206178SAtari911 483da206178SAtari911## Version 6.13.1 (2026-02-14) - STATIC CALENDAR FIX 484da206178SAtari911 485da206178SAtari911### Bug Fix 486da206178SAtari911- Added missing `getImportantNamespaces()` helper method 487da206178SAtari911- Fixed `loadEventsForMonth` → use existing `loadEvents` method 488da206178SAtari911- Added multi-namespace/wildcard support to static calendar 489da206178SAtari911 490da206178SAtari911## Version 6.13.0 (2026-02-14) - STATIC CALENDAR MODE 491da206178SAtari911 492da206178SAtari911### New Static/Presentation Mode 493da206178SAtari911Read-only calendar view for public display and printing. 494da206178SAtari911 495da206178SAtari911**Usage:** 496da206178SAtari911``` 497da206178SAtari911{{calendar static}} 498da206178SAtari911{{calendar namespace=meetings static}} 499da206178SAtari911``` 500da206178SAtari911 501da206178SAtari911**Screen View Features:** 502da206178SAtari911- Clean calendar grid without edit/delete buttons 503da206178SAtari911- Month navigation (prev/next arrows) 504da206178SAtari911- Hover tooltips showing full event details (title, time, description) 505da206178SAtari911- Important events highlighted with ⭐ and golden background 506da206178SAtari911- Today's date highlighted 507da206178SAtari911- Responsive design for mobile 508da206178SAtari911 509da206178SAtari911**Print View Features:** 510da206178SAtari911- Automatically switches to itinerary format when printing 511da206178SAtari911- Table layout: Date | Time | Event | Details 512da206178SAtari911- Important events marked with ⭐ 513da206178SAtari911- Dates grouped (date only shown once per day) 514da206178SAtari911- Page break handling for long lists 515da206178SAtari911- Clean black & white friendly output 516da206178SAtari911 517da206178SAtari911**Files Changed:** 518da206178SAtari911- `syntax.php`: Added `renderStaticCalendar()` method 519da206178SAtari911- `action.php`: Added `getStaticCalendar()` AJAX handler 520da206178SAtari911- `calendar-main.js`: Added `navStaticCalendar()` function 521da206178SAtari911- `style.css`: Added static calendar styles + print media queries 522da206178SAtari911 523da206178SAtari911## Version 6.12.7 (2026-02-14) - ADMIN MENU ICON 524da206178SAtari911 525da206178SAtari911### Added Admin Menu Icon 526da206178SAtari911- New monochrome SVG calendar icon for DokuWiki admin menu 527da206178SAtari911- Icon shows calendar with binding rings, header, and date dots 528da206178SAtari911- Matches DokuWiki's admin interface style 529da206178SAtari911- Added `getMenuIcon()` method to admin.php 530da206178SAtari911- Icon file: `images/icon.svg` 531da206178SAtari911 532da206178SAtari911## Version 6.12.6 (2026-02-14) - CONFIG IMPORT FIX 533da206178SAtari911 534da206178SAtari911### Fixed Config Import Validation 535da206178SAtari911- Now accepts both `return [` and `return array(` syntax 536da206178SAtari911- Regex updated from `/return\s*\[/` to `/return\s*(\[|array\s*\()/` 537da206178SAtari911- Older PHP config files using `return array(...)` now import correctly 538da206178SAtari911 539da206178SAtari911## Version 6.12.5 (2026-02-14) - MOBILE BUTTON FIX 540da206178SAtari911 541da206178SAtari911### Fixed Delete/Edit Buttons on Mobile 542da206178SAtari911- Added `type="button"` attribute to prevent form submission issues 543da206178SAtari911- Added `touchend` event delegation for reliable mobile touch handling 544da206178SAtari911- Increased button touch targets (32px default, 40px on mobile) 545da206178SAtari911- Added `touch-action: manipulation` to prevent touch delays 546da206178SAtari911- Added `-webkit-tap-highlight-color` for visual feedback 547da206178SAtari911 548da206178SAtari911### Technical Details 549da206178SAtari911- Mobile browsers sometimes don't fire `onclick` reliably 550da206178SAtari911- New `touchend` handler calls `btn.click()` explicitly 551da206178SAtari911- Larger touch targets meet accessibility guidelines (44px recommended) 552da206178SAtari911 553da206178SAtari911## Version 6.12.4 (2026-02-14) - STAR INLINE FIX 554da206178SAtari911 555da206178SAtari911### Fixed Star Position in Day Popup 556da206178SAtari911- Star icon now displays inline with event title (left side) 557da206178SAtari911- Changed `.popup-event-title` from `flex: 1 1 100%` to `flex: 1 1 auto` 558da206178SAtari911- Star and title stay on same line instead of star being above 559da206178SAtari911 560da206178SAtari911## Version 6.12.3 (2026-02-14) - DAY POPUP IMPORTANT EVENTS 561da206178SAtari911 562da206178SAtari911### Important Event Highlighting in Day Popup 563da206178SAtari911- Events from important namespaces now show ⭐ star icon 564da206178SAtari911- Golden gradient background highlight for important events 565da206178SAtari911- Golden border glow effect matching other views 566da206178SAtari911- Consistent styling across calendar grid, sidebar, and day popup 567da206178SAtari911 568da206178SAtari911### Technical Details 569da206178SAtari911- Added `importantNamespaces` check to `showDayPopup()` function 570da206178SAtari911- Added `.popup-event-important` and `.popup-event-star` CSS classes 571da206178SAtari911- Reads important namespaces from `container.dataset.importantNamespaces` 572da206178SAtari911 573da206178SAtari911## Version 6.12.2 (2026-02-14) - MULTI-DAY EVENT TIME FIX 574da206178SAtari911 575da206178SAtari911### Multi-Day Event End Time 576da206178SAtari911- End time now allows all times when end date differs from start date 577da206178SAtari911- Example: Event from 9:00 PM on Feb 28 to 5:00 AM on Feb 29 now works correctly 578da206178SAtari911- Same-day events still enforce end time > start time 579da206178SAtari911- Changing end date now triggers time validation update 580da206178SAtari911 581da206178SAtari911### Technical Details 582da206178SAtari911- `updateEndTimeOptions()` checks if `endDate !== startDate` 583da206178SAtari911- If multi-day, all time options are enabled 584da206178SAtari911- Added `onchange` handler to both start date and end date fields 585da206178SAtari911 586da206178SAtari911## Version 6.12.1 (2026-02-14) - TIME PICKER & EDIT DIALOG FIX 587da206178SAtari911 588da206178SAtari911### Improved Time Picker 589da206178SAtari911- Grouped time options by period (Morning, Afternoon, Evening, Night) 590da206178SAtari911- Much easier to navigate - no more scrolling through 96 options 591da206178SAtari911- End time options before start time are now hidden/disabled 592da206178SAtari911- Invalid end times automatically corrected when start time changes 593da206178SAtari911 594da206178SAtari911### Fixed Edit Event Dialog Draggability 595da206178SAtari911- Edit dialog is now properly draggable (was broken due to async AJAX) 596da206178SAtari911- Moved `makeDialogDraggable()` call inside the AJAX success callback 597da206178SAtari911- Removed redundant wrapper patch that didn't work with async code 598da206178SAtari911 599da206178SAtari911### Technical Details 600da206178SAtari911- Time picker uses `<optgroup>` for visual grouping 601da206178SAtari911- End time validation hides invalid options (not just disables) 602da206178SAtari911- Both Add and Edit dialogs now call `makeDialogDraggable()` directly 603da206178SAtari911 604da206178SAtari911## Version 6.12.0 (2026-02-14) - EVENT EDITOR DIALOG IMPROVEMENTS 605da206178SAtari911 606da206178SAtari911### Fixed Event Editor Dialog Draggability 607da206178SAtari911- Fixed duplicate event listener accumulation that caused performance degradation 608da206178SAtari911- Each time dialog opened, new drag listeners were added without removing old ones 609da206178SAtari911- Now properly cleans up old listeners before adding new ones 610da206178SAtari911- Added `cursor: grabbing` feedback while dragging 611da206178SAtari911- Dialog position resets when reopened (no more stuck positions) 612da206178SAtari911- Excluded close button from triggering drag 613da206178SAtari911 614da206178SAtari911### Optimized Time Selection Performance 615da206178SAtari911- Simplified `updateEndTimeOptions()` to be much faster 616da206178SAtari911- Removed expensive loop through 96 options checking style.display 617da206178SAtari911- Now just validates current selection and sets new value if invalid 618da206178SAtari911- Should eliminate freezing/lag when selecting start time 619da206178SAtari911 620da206178SAtari911### Technical Details 621da206178SAtari911- Added `_dragCleanup` function stored on handle element 622da206178SAtari911- Cleanup called before re-initialization 623da206178SAtari911- Removed unnecessary `setTranslate` helper function 624da206178SAtari911 62522228b0eSAtari911## Version 6.11.4 (2026-02-13) - JAVASCRIPT LOCALIZATION 62622228b0eSAtari911 627da206178SAtari911### JavaScript Frontend Localization 628da206178SAtari911- Added `getCalendarLang()` helper function 629da206178SAtari911- Added `getJsLangStrings()` PHP method 630da206178SAtari911- Embedded JSON language data in all render functions 631da206178SAtari911- Localized month names (full + short) 632da206178SAtari911- Localized dialog titles, confirmations, badges, empty states 63322228b0eSAtari911 63422228b0eSAtari911## Version 6.11.3 (2026-02-13) - SIDEBAR WIDGET LOCALIZATION 63522228b0eSAtari911 636da206178SAtari911### Sidebar Widget 637da206178SAtari911- Fixed `\n` in single-quoted strings → double-quoted for proper newlines 638da206178SAtari911- Localized "Runs every X minutes" cron descriptions 639da206178SAtari911- Event dialog labels, placeholders, options 640da206178SAtari911- Day names, ordinal positions, color names 64122228b0eSAtari911- Today/Tomorrow/Important section headers 64222228b0eSAtari911 643da206178SAtari911## Version 6.11.2 (2026-02-13) - ADMIN BACKEND LOCALIZATION 64422228b0eSAtari911 645da206178SAtari911### Admin Backend 646da206178SAtari911- Localized ~220 hardcoded strings in admin.php 647da206178SAtari911- AJAX JSON responses, redirect messages, error messages 648da206178SAtari911- Pattern names (Daily, Weekly, Monthly, etc.) 64922228b0eSAtari911 650da206178SAtari911## Version 6.11.1 (2026-02-13) - CONFIG IMPORT BUG FIX 65122228b0eSAtari911 652da206178SAtari911### Bug Fix 653da206178SAtari911- Fixed regex to accept both `return [` and `return array(` syntax 654da206178SAtari911- File: `admin.php` lines 5947, 6001 65522228b0eSAtari911 65622228b0eSAtari911## Version 6.10.6 (2026-02-13) - MANAGE RECURRING DIALOG LOCALIZATION 65722228b0eSAtari911 65822228b0eSAtari911### Localized Manage Recurring Series Dialog 65922228b0eSAtari911Complete translation of the "Manage" button dialog for recurring events: 66022228b0eSAtari911 66122228b0eSAtari911**Section Headers:** 66222228b0eSAtari911- "Manage Recurring Series" → "Wiederkehrende Serie verwalten" 66322228b0eSAtari911- "Extend Series" → "Serie erweitern" 66422228b0eSAtari911- "Trim Past Events" → "Vergangene Termine kürzen" 66522228b0eSAtari911- "Change Pattern" → "Muster ändern" 66622228b0eSAtari911- "Change Start Date" → "Startdatum ändern" 66722228b0eSAtari911- "Pause Series" / "Resume Series" → "Serie pausieren" / "Serie fortsetzen" 66822228b0eSAtari911 66922228b0eSAtari911**Labels & Buttons:** 67022228b0eSAtari911- All field labels (Add occurrences, Days apart, Remove before, New interval, etc.) 67122228b0eSAtari911- Action buttons (Extend, Trim, Change, Shift, Pause, Resume, Close) 67222228b0eSAtari911- Interval dropdown options (Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly) 67322228b0eSAtari911- Help text and notes 67422228b0eSAtari911 67522228b0eSAtari911**Confirmation Dialogs:** 67622228b0eSAtari911- Trim confirmation with date 67722228b0eSAtari911- Respace confirmation 67822228b0eSAtari911- Shift confirmation 67922228b0eSAtari911 68022228b0eSAtari911### Added 60+ Language Strings for Dialogs 68122228b0eSAtari911Complete vocabulary for recurring event management in both English and German. 68222228b0eSAtari911 68322228b0eSAtari911### Note on Browser Validation Messages 68422228b0eSAtari911"Please fill out this field" is a browser-native message controlled by the browser's language setting, not our plugin. 68522228b0eSAtari911 68622228b0eSAtari911## Version 6.10.5 (2026-02-13) - DIALOG LOCALIZATION 68722228b0eSAtari911 68822228b0eSAtari911### Localized All JavaScript Dialogs 68922228b0eSAtari911 69022228b0eSAtari911**New Namespace Dialog:** 69122228b0eSAtari911- Prompt text with examples now in German 69222228b0eSAtari911- Invalid namespace error message 69322228b0eSAtari911 69422228b0eSAtari911**Rename Namespace Dialog:** 69522228b0eSAtari911- Prompt text with current name 69622228b0eSAtari911 69722228b0eSAtari911**Delete Confirmations:** 69822228b0eSAtari911- Delete selected events confirmation 69922228b0eSAtari911- Delete namespace confirmation 70022228b0eSAtari911- Delete recurring series confirmation 70122228b0eSAtari911 70222228b0eSAtari911**Trim Recurring Events:** 70322228b0eSAtari911- "Counting..." / "Zähle..." 70422228b0eSAtari911- "Trimming..." / "Kürze..." 70522228b0eSAtari911- "No past recurring events found" message 70622228b0eSAtari911- "Found X past recurring events" confirmation 70722228b0eSAtari911- Button text resets 70822228b0eSAtari911 70922228b0eSAtari911### Added 15+ New Dialog Strings 71022228b0eSAtari911Both English and German translations for all interactive prompts and confirmations. 71122228b0eSAtari911 71222228b0eSAtari911## Version 6.10.4 (2026-02-13) - COMPLETE MANAGE TAB LOCALIZATION 71322228b0eSAtari911 71422228b0eSAtari911### Fixed Remaining English Strings 71522228b0eSAtari911 71622228b0eSAtari911**Namespace Explorer Control Bar:** 71722228b0eSAtari911- "➡️ Move" → "➡️ Verschieben" 71822228b0eSAtari911- "➕ New Namespace" → "➕ Neuer Namensraum" 71922228b0eSAtari911- " Cleanup" → " Bereinigen" 72022228b0eSAtari911- "0 selected" → "0 ausgewählt" 72122228b0eSAtari911- "%d selected" → "%d ausgewählt" 72222228b0eSAtari911 72322228b0eSAtari911**Recurring Events Button Tooltips:** 72422228b0eSAtari911- "Edit title, time, namespace, pattern" → "Titel, Zeit, Namensraum, Muster bearbeiten" 72522228b0eSAtari911- "Extend, trim, pause, change dates" → "Erweitern, kürzen, pausieren, Daten ändern" 72622228b0eSAtari911- "Delete all occurrences" → "Alle Vorkommen löschen" 72722228b0eSAtari911 72822228b0eSAtari911**JavaScript Confirmation Messages:** 72922228b0eSAtari911- "No events selected" → "Keine Termine ausgewählt" 73022228b0eSAtari911- Delete confirmation with count 73122228b0eSAtari911- Delete namespace confirmation 73222228b0eSAtari911- "Scanning..." → "Scanne..." 73322228b0eSAtari911- "Cleaning..." → "Bereinige..." 73422228b0eSAtari911- "No empty namespaces found" message 73522228b0eSAtari911- "Found X item(s) to clean up" → "X Element(e) zum Bereinigen gefunden" 73622228b0eSAtari911- "Proceed with cleanup?" → "Mit Bereinigung fortfahren?" 73722228b0eSAtari911 73822228b0eSAtari911### Technical 73922228b0eSAtari911- Added adminLang JavaScript object with all translatable strings 74022228b0eSAtari911- All dynamic JavaScript messages now use language system 74122228b0eSAtari911 74222228b0eSAtari911## Version 6.10.3 (2026-02-13) - RECURRING EVENTS & DROP TARGET LOCALIZATION 74322228b0eSAtari911 74422228b0eSAtari911### Additional Localization for Manage Events Tab 74522228b0eSAtari911 74622228b0eSAtari911**Recurring Events Table:** 74722228b0eSAtari911- Search placeholder: "Wiederkehrende Termine suchen..." 74822228b0eSAtari911- Table headers: Titel, Namensraum, Muster, Zeitraum, Anzahl, Quelle, Aktionen 74922228b0eSAtari911- Source labels: Markiert / Erkannt (was Flagged / Detected) 75022228b0eSAtari911- Action buttons: Bearb. / Verwalten / Lö. (was Edit / Manage / Del) 75122228b0eSAtari911- Pattern badges: Täglich, Wöchentlich, Monatlich, Jährlich, Benutzerdefiniert 75222228b0eSAtari911- Footer: "Gesamt: X Serien" (was "Total: X series") 75322228b0eSAtari911- No results message 75422228b0eSAtari911 75522228b0eSAtari911**Namespace Explorer Drop Zones:** 75622228b0eSAtari911- Header: " Zielbereich" (was "Drop Target") 75722228b0eSAtari911- Drop hint: "Hier ablegen" (was "Drop here") 75822228b0eSAtari911- Default namespace label consistent 75922228b0eSAtari911 76022228b0eSAtari911### Added 25+ New Language Strings 76122228b0eSAtari911- Recurring table columns and labels 76222228b0eSAtari911- Pattern translations 76322228b0eSAtari911- Action button labels 76422228b0eSAtari911- Drop zone labels 76522228b0eSAtari911 76622228b0eSAtari911## Version 6.10.2 (2026-02-13) - MANAGE EVENTS TAB LOCALIZATION 76722228b0eSAtari911 76822228b0eSAtari911### Localized: Manage Events Tab (Complete) 76922228b0eSAtari911All text in the Manage Events admin tab now uses the language system: 77022228b0eSAtari911 77122228b0eSAtari911**Events Manager Section:** 77222228b0eSAtari911- Page title, section header, description 77322228b0eSAtari911- Statistics labels (Total Events, Namespaces, JSON Files, Recurring) 77422228b0eSAtari911- "Last scanned" timestamp label 77522228b0eSAtari911- Button labels (Re-scan Events, Export All Events, Import Events) 77622228b0eSAtari911- "View Breakdown by Namespace" expandable section 77722228b0eSAtari911- Table headers (Namespace, Events, Files) 77822228b0eSAtari911 77922228b0eSAtari911**Important Namespaces Section:** 78022228b0eSAtari911- Section header and description 78122228b0eSAtari911- Visual Effects descriptions (Calendar Grid, Event Sidebar, Sidebar Widget, Day Popup) 78222228b0eSAtari911- Save button and hint text 78322228b0eSAtari911 78422228b0eSAtari911**Cleanup Old Events Section:** 78522228b0eSAtari911- Section header and description 78622228b0eSAtari911- Radio button labels (By Age, By Status, By Date Range) 78722228b0eSAtari911- Age options (Delete events older than, months, years) 78822228b0eSAtari911- Status options (Completed tasks, Past events) 78922228b0eSAtari911- Date range labels (From, To) 79022228b0eSAtari911- Namespace filter label and placeholder 79122228b0eSAtari911- Preview and Delete button labels 79222228b0eSAtari911- JavaScript confirmation messages 79322228b0eSAtari911- Loading/error states 79422228b0eSAtari911 79522228b0eSAtari911**Recurring Events Section:** 79622228b0eSAtari911- Section header 79722228b0eSAtari911- Button labels (Trim All Past, Rescan) 79822228b0eSAtari911 79922228b0eSAtari911**Namespace Explorer Section:** 80022228b0eSAtari911- Section header and description 80122228b0eSAtari911- Search placeholder 80222228b0eSAtari911- Control bar buttons (All, None, Delete, Move to) 80322228b0eSAtari911- Datalist placeholder 80422228b0eSAtari911 80522228b0eSAtari911### Added 60+ New Language Strings 80622228b0eSAtari911Both English and German language files expanded with comprehensive admin terminology. 80722228b0eSAtari911 80822228b0eSAtari911## Version 6.10.1 (2026-02-13) - LANGUAGE SYSTEM FIX 80922228b0eSAtari911 81022228b0eSAtari911### Bug Fix: Language Files Not Working 81122228b0eSAtari911- Fixed `getMenuText()` to use `$this->getLang('menu')` instead of hardcoded string 81222228b0eSAtari911- Admin menu now correctly shows "Kalenderverwaltung" in German 81322228b0eSAtari911- Admin tabs now use language system: 81422228b0eSAtari911 - "Manage Events" → "Termine verwalten" 81522228b0eSAtari911 - "Update Plugin" → "Plugin aktualisieren" 81622228b0eSAtari911 - "Outlook Sync" → "Outlook-Sync" 81722228b0eSAtari911 - "Themes" → "Designs" 81822228b0eSAtari911 81922228b0eSAtari911### Added More Language Strings 82022228b0eSAtari911- Admin tab labels 82122228b0eSAtari911- Admin section headers (Event Browser, Important Namespaces, etc.) 82222228b0eSAtari911- Sync settings labels 82322228b0eSAtari911- Common button labels (Run Now, Download, Upload, Delete, etc.) 82422228b0eSAtari911 82522228b0eSAtari911## Version 6.10.0 (2026-02-13) - GERMAN LANGUAGE SUPPORT 82622228b0eSAtari911 82722228b0eSAtari911### New Feature: German Language Translation 82822228b0eSAtari911- Added complete German (de) language file 82922228b0eSAtari911- Expanded English language file with comprehensive translatable strings 83022228b0eSAtari911- Both files include 100+ translation strings covering: 83122228b0eSAtari911 - General terms (calendar, events, dates) 83222228b0eSAtari911 - Event fields (title, description, time, etc.) 83322228b0eSAtari911 - Actions (add, edit, delete, save, cancel) 83422228b0eSAtari911 - Task-related terms 83522228b0eSAtari911 - Recurring event options 83622228b0eSAtari911 - Days of week and months 83722228b0eSAtari911 - User messages and confirmations 83822228b0eSAtari911 - Search functionality 83922228b0eSAtari911 - Sync status messages 84022228b0eSAtari911 - Admin section labels 84122228b0eSAtari911 - Sidebar widget labels 84222228b0eSAtari911 - Time conflict warnings 84322228b0eSAtari911 84422228b0eSAtari911### Note 84522228b0eSAtari911The 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. 84622228b0eSAtari911 84796df7d3eSAtari911## Version 6.9.9 (2026-02-13) - CRITICAL SEARCH FIX 84896df7d3eSAtari911 84996df7d3eSAtari911### Bug Fix: Month Search Not Working 85096df7d3eSAtari911- **Root cause:** Function name collision - there were two `fuzzyMatch` functions 85196df7d3eSAtari911 - `window.fuzzyMatch` (for namespace search autocomplete) returns a score number or `null` 85296df7d3eSAtari911 - Local `fuzzyMatch` (for event search) returns `true`/`false` 85396df7d3eSAtari911- When filtering events, the wrong function was being called, returning `null` for all events 85496df7d3eSAtari911- **Fix:** Renamed event search functions to `eventSearchNormalize` and `eventSearchMatch` 85596df7d3eSAtari911- Month search now works correctly on first load and after navigation 85696df7d3eSAtari911 85796df7d3eSAtari911### Also in this version 85896df7d3eSAtari911- Fixed jumpToDate to properly hide search clear button after navigation 85996df7d3eSAtari911- Removed debug logging from production code 86096df7d3eSAtari911 86196df7d3eSAtari911## Version 6.9.8 (2026-02-12) - SEARCH & UI FIXES 86296df7d3eSAtari911 86396df7d3eSAtari911### Bug Fixes 86496df7d3eSAtari911 86596df7d3eSAtari911**All-Dates Search Navigation Fixed** 86696df7d3eSAtari911- Clicking a search result now properly navigates to that event's month 86796df7d3eSAtari911- Opens the day popup showing the event details 86896df7d3eSAtari911- Was calling non-existent `loadMonth()` - now uses correct `navCalendar()` 86996df7d3eSAtari911- Clears search results and restores normal event list view 87096df7d3eSAtari911 87196df7d3eSAtari911**"No Events" Message Fixed** 87296df7d3eSAtari911- No longer shows "No events match your search" when in all-dates mode 87396df7d3eSAtari911- All-dates mode has its own results display; the month-mode message was incorrectly appearing 87496df7d3eSAtari911 87596df7d3eSAtari911**Add Button Layout Fixed** 87696df7d3eSAtari911- Search bar no longer pushes the "+ Add" button off the right edge 87796df7d3eSAtari911- Search container has constrained max-width (160px) and proper flex settings 87896df7d3eSAtari911- Header has overflow:hidden to prevent layout issues 87996df7d3eSAtari911 88096df7d3eSAtari911**Important Event Stars Fixed** 88196df7d3eSAtari911- Stars now appear on initial page load (PHP rendering added) 88296df7d3eSAtari911- Stars positioned outside the bar using CSS ::before pseudo-element 88396df7d3eSAtari911- Added overflow:visible to event-indicators and event-bar containers 88496df7d3eSAtari911- Bar remains full width; star sits in the left margin area 88596df7d3eSAtari911 88696df7d3eSAtari911### Technical 88796df7d3eSAtari911- Star uses `event-bar-has-star` class for first-day-only display 88896df7d3eSAtari911- jumpToDate() properly cleans up search state before navigation 88996df7d3eSAtari911 89096df7d3eSAtari911## Version 6.9.7 (2026-02-12) - IMPORTANT NAMESPACE IMPROVEMENTS 89196df7d3eSAtari911 89296df7d3eSAtari911### Bug Fix 89396df7d3eSAtari911- **AJAX refresh now preserves important namespace highlighting** 89496df7d3eSAtari911 - Important namespaces list now passed to JavaScript via data attribute 89596df7d3eSAtari911 - Highlighting persists when navigating between months 89696df7d3eSAtari911 - Works in both main calendar sidebar and standalone event panels 89796df7d3eSAtari911 89896df7d3eSAtari911### New Feature: Calendar Grid Star Icons 89996df7d3eSAtari911- **Important events now show ⭐ on their color bars** in the calendar grid 90096df7d3eSAtari911 - Small star appears on the first day of important events 90196df7d3eSAtari911 - Tooltip prefixed with ⭐ for important events 90296df7d3eSAtari911 - Visual distinction without cluttering the compact grid view 90396df7d3eSAtari911 90496df7d3eSAtari911### Admin Section Update 90596df7d3eSAtari911- **Improved Important Namespaces description** in Admin → Calendar → Manage Events 90696df7d3eSAtari911 - Now explains all visual effects: 90796df7d3eSAtari911 - Calendar Grid: ⭐ star on event bars 90896df7d3eSAtari911 - Event Sidebar: ⭐ star + highlighted background + accent border 90996df7d3eSAtari911 - Sidebar Widget: Dedicated "Important Events" section 91096df7d3eSAtari911 - Day Popup: Events shown with full details 91196df7d3eSAtari911 - Better example placeholder text 91296df7d3eSAtari911 91396df7d3eSAtari911### Technical 91496df7d3eSAtari911- Fixed PHP syntax error in fuzzy search (curly quotes replaced with escape sequences) 91596df7d3eSAtari911- Important namespaces loaded once and stored in container dataset for JavaScript access 91696df7d3eSAtari911 91796df7d3eSAtari911## Version 6.9.6 (2026-02-12) - FUZZY SEARCH & SIDEBAR HIGHLIGHTING 91896df7d3eSAtari911 91996df7d3eSAtari911### Fuzzy Search 92096df7d3eSAtari911- **Improved search matching:** Search is now more forgiving of punctuation differences 92196df7d3eSAtari911 - "fathers day" matches "Father's Day" 92296df7d3eSAtari911 - "new years" matches "New Year's Eve" 92396df7d3eSAtari911 - Smart quotes, apostrophes, dashes, and common punctuation are ignored 92496df7d3eSAtari911- **Multi-word search:** All words must be present but in any order 92596df7d3eSAtari911 - "birthday john" matches "John's Birthday Party" 92696df7d3eSAtari911- Works in both "this month" and "all dates" search modes 92796df7d3eSAtari911 92896df7d3eSAtari911### Important Namespace Highlighting (Calendar Sidebar) 92996df7d3eSAtari911- Events from important namespaces now highlighted in the main calendar's event list sidebar 93096df7d3eSAtari911- Same visual treatment as the itinerary sidebar widget: 93196df7d3eSAtari911 - Subtle theme-colored background tint 93296df7d3eSAtari911 - Right border accent bar 93396df7d3eSAtari911 - ⭐ star icon before event title 93496df7d3eSAtari911- Theme-specific colors: 93596df7d3eSAtari911 - Matrix: green tint 93696df7d3eSAtari911 - Purple: purple tint 93796df7d3eSAtari911 - Pink: pink tint 93896df7d3eSAtari911 - Professional: blue tint 93996df7d3eSAtari911 - Wiki: light blue tint 94096df7d3eSAtari911- Configure important namespaces in Admin → Calendar → Sync Settings 94196df7d3eSAtari911 94296df7d3eSAtari911## Version 6.9.5 (2026-02-12) - SEARCH MODE TOGGLE 94396df7d3eSAtari911 94496df7d3eSAtari911### New Feature: Search Scope Toggle 94596df7d3eSAtari911- **Search mode button** (/) added next to search input in both calendar views 94696df7d3eSAtari911- **Default mode** (): Search only the current month's events (fast, local filtering) 94796df7d3eSAtari911- **All dates mode** (): Search across ALL calendar data via AJAX 94896df7d3eSAtari911 - Click the button to toggle to (green highlight when active) 94996df7d3eSAtari911 - Requires at least 2 characters to search 95096df7d3eSAtari911 - Shows results with date, time, and namespace 95196df7d3eSAtari911 - Click any result to jump to that date and open the day popup 95296df7d3eSAtari911 - Limited to 50 results for performance 95396df7d3eSAtari911- Search placeholder text updates to indicate current mode 95496df7d3eSAtari911- Compact button design takes minimal space 95596df7d3eSAtari911 95696df7d3eSAtari911### UI Details 95796df7d3eSAtari911- Button sits flush with search input (no gap) 95896df7d3eSAtari911- Green highlight when "all dates" mode is active 95996df7d3eSAtari911- Results show full date (e.g., "Mon, Feb 12, 2026") 96096df7d3eSAtari911- Namespace badge shown for multi-namespace setups 96196df7d3eSAtari911 96296df7d3eSAtari911## Version 6.9.4 (2026-02-12) - POPUP IMPROVEMENTS & IMPORTANT HIGHLIGHTING 96396df7d3eSAtari911 96496df7d3eSAtari911### Features 96596df7d3eSAtari911- **Draggable Day Popup:** Calendar day popup window is now draggable by its header 96696df7d3eSAtari911 - Click and drag the header to move the popup 96796df7d3eSAtari911 - Header shows move cursor on hover 96896df7d3eSAtari911 - Clicking the close button (×) still closes normally 96996df7d3eSAtari911 97096df7d3eSAtari911- **Important Namespace Highlighting in Sidebar:** 97196df7d3eSAtari911 - Events from "important" namespaces (defined in Admin → Sync Settings) now have subtle highlighting 97296df7d3eSAtari911 - Theme-aware background tint (green for Matrix, purple for Purple, pink for Pink, blue for Professional/Wiki) 97396df7d3eSAtari911 - Right border accent bar for visual distinction 97496df7d3eSAtari911 - ⭐ star icon appears before event title 97596df7d3eSAtari911 - Works in Today, Tomorrow, and Important Events sections 97696df7d3eSAtari911 97796df7d3eSAtari911### Bug Fix 97896df7d3eSAtari911- **Fixed event display in day popup:** Long titles no longer cut off the edit/delete buttons 97996df7d3eSAtari911 - Event title now wraps to multiple lines instead of truncating 98096df7d3eSAtari911 - Actions buttons always visible 98196df7d3eSAtari911 - Time, date range, and namespace badges wrap properly 98296df7d3eSAtari911 - Improved flex layout for better responsiveness 98396df7d3eSAtari911 98496df7d3eSAtari911## Version 6.9.3 (2026-02-12) - ADMIN EDIT DIALOG CONSISTENCY 98596df7d3eSAtari911 98696df7d3eSAtari911### UI Improvement 98796df7d3eSAtari911- **Edit Recurring Event dialog** in Admin section now matches the main event editor exactly: 98896df7d3eSAtari911 - Same dark theme styling (#1e1e1e background, #2c3e50 header) 98996df7d3eSAtari911 - Same header layout with close button (×) in top-right corner 99096df7d3eSAtari911 - Same input styling (dark inputs with green accent borders) 99196df7d3eSAtari911 - Same footer with Cancel/Save buttons layout 99296df7d3eSAtari911 - Same recurrence options box styling 99396df7d3eSAtari911 - Consistent spacing, fonts, and colors throughout 99496df7d3eSAtari911 99596df7d3eSAtari911## Version 6.9.2 (2026-02-12) - MOBILE DIALOG FIX 99696df7d3eSAtari911 99796df7d3eSAtari911### Bug Fix 99896df7d3eSAtari911- **Fixed:** Description textarea now extends full width on mobile/phone view 99996df7d3eSAtari911 - Reduced form padding from 12px to 8px on screens ≤480px 100096df7d3eSAtari911 - Added explicit `width: 100%` and `box-sizing: border-box` to textarea 100196df7d3eSAtari911 - Ensured all form inputs/selects use full available width on mobile 100296df7d3eSAtari911 100396df7d3eSAtari911## Version 6.9.1 (2026-02-11) - ADMIN RECURRING EVENTS INTEGRATION 100496df7d3eSAtari911 100596df7d3eSAtari911### Admin Panel Updates 100696df7d3eSAtari911- **Enhanced Recurring Events Table:** 100796df7d3eSAtari911 - Pattern column now shows color-coded badges (daily=blue, weekly=green, monthly=orange, yearly=pink) 100896df7d3eSAtari911 - "First" column renamed to "Range" showing full date span (e.g., "Feb 1, 2026 → Dec 15, 2026") 100996df7d3eSAtari911 - Patterns now read from stored metadata when available, with smart fallback to detection 101096df7d3eSAtari911 101196df7d3eSAtari911- **Edit Recurring Series Dialog:** 101296df7d3eSAtari911 - Full recurrence pattern editing (not just simple intervals) 101396df7d3eSAtari911 - "Repeat every [N] [period]" with dropdown for Daily/Weekly/Monthly/Yearly 101496df7d3eSAtari911 - Weekly: Day-of-week checkboxes (Sun-Sat) with current days pre-selected 101596df7d3eSAtari911 - Monthly: Radio choice between "Day of month" or "Weekday pattern" 101696df7d3eSAtari911 - Ordinal weekday selector (First/Second/Third/Fourth/Fifth/Last + day dropdown) 101796df7d3eSAtari911 - Pre-populates all fields from stored recurrence metadata 101896df7d3eSAtari911 - Properly reschedules future events using new pattern 101996df7d3eSAtari911 102096df7d3eSAtari911- **Manage Series Dialog:** 102196df7d3eSAtari911 - Updated summary to show date range 102296df7d3eSAtari911 - Extend/trim/change pattern functions work with new patterns 102396df7d3eSAtari911 102496df7d3eSAtari911### Technical Updates 102596df7d3eSAtari911- `findRecurringEvents()` captures all recurrence metadata from events 102696df7d3eSAtari911- `formatRecurrencePattern()` generates human-readable pattern descriptions 102796df7d3eSAtari911- `detectRecurrencePattern()` enhanced to detect more interval variations 102896df7d3eSAtari911- `editRecurringSeries()` PHP handler processes new recurrence parameters 102996df7d3eSAtari911- `generateRecurrenceDates()` creates dates matching complex patterns 103096df7d3eSAtari911- Recurrence metadata preserved and updated across all event occurrences 103196df7d3eSAtari911 103296df7d3eSAtari911## Version 6.9.0 (2026-02-11) - ADVANCED RECURRING EVENTS 103396df7d3eSAtari911 103496df7d3eSAtari911### New Features 103596df7d3eSAtari911- **Enhanced Recurring Event Options:** 103696df7d3eSAtari911 - **Interval support:** Repeat every N days/weeks/months/years (e.g., every 3 months) 103796df7d3eSAtari911 - **Weekly day selection:** Choose specific days of the week (e.g., Mon, Wed, Fri) 103896df7d3eSAtari911 - **Monthly options:** 103996df7d3eSAtari911 - Day of month: Repeat on specific day (e.g., 15th of each month) 104096df7d3eSAtari911 - Ordinal weekday: Repeat on pattern (e.g., 2nd Wednesday, Last Friday) 104196df7d3eSAtari911 - **Examples now possible:** 104296df7d3eSAtari911 - Every 2 weeks on Monday and Thursday 104396df7d3eSAtari911 - Every 3 months on the 15th 104496df7d3eSAtari911 - Every other month on the 2nd Wednesday 104596df7d3eSAtari911 - Every year on the same date 104696df7d3eSAtari911 - Last Friday of every month 104796df7d3eSAtari911 104896df7d3eSAtari911### UI Changes 104996df7d3eSAtari911- Redesigned recurring options section with bordered container 105096df7d3eSAtari911- "Repeat every [N] [period]" input with interval number field 105196df7d3eSAtari911- Day-of-week checkboxes for weekly recurrence 105296df7d3eSAtari911- Radio buttons for monthly: "Day of month" vs "Weekday pattern" 105396df7d3eSAtari911- Ordinal dropdown (First/Second/Third/Fourth/Fifth/Last) 105496df7d3eSAtari911- Day dropdown (Sunday through Saturday) 105596df7d3eSAtari911- Helper text for end date field 105696df7d3eSAtari911 105796df7d3eSAtari911### Technical Details 105896df7d3eSAtari911- New parameters: recurrenceInterval, weekDays, monthlyType, monthDay, ordinalWeek, ordinalDay 105996df7d3eSAtari911- Recurrence pattern stored in event data for reference 106096df7d3eSAtari911- Maximum 365 occurrences (up from 100) to support daily events for a year 106196df7d3eSAtari911- Smart date iteration for complex patterns 106296df7d3eSAtari911 106396df7d3eSAtari911## Version 6.8.1 (2026-02-11) - ITINERARY DEFAULT STATE SETTING 106496df7d3eSAtari911 106596df7d3eSAtari911### New Feature 106696df7d3eSAtari911- **Added:** Option to set itinerary default state (expanded or collapsed) 106796df7d3eSAtari911 - New setting in Admin → Calendar → Sidebar Widget Settings 106896df7d3eSAtari911 - " Itinerary Section" with two options: 106996df7d3eSAtari911 - **Expanded** (default) - Show itinerary sections by default 107096df7d3eSAtari911 - **Collapsed** - Hide itinerary sections by default (click bar to expand) 107196df7d3eSAtari911 - Setting persists across page loads 107296df7d3eSAtari911 - Arrow indicator and content state reflect the saved preference on page load 107396df7d3eSAtari911 107496df7d3eSAtari911## Version 6.8.0 (2026-02-11) - COLLAPSIBLE ITINERARY 107596df7d3eSAtari911 107696df7d3eSAtari911### New Feature 107796df7d3eSAtari911- **Added:** Collapsible Itinerary bar in sidebar week view 107896df7d3eSAtari911 - New "ITINERARY" bar below the week calendar (styled like +ADD EVENT bar) 107996df7d3eSAtari911 - Click to collapse/expand the Today, Tomorrow, and Important Events sections 108096df7d3eSAtari911 - Arrow indicator shows expanded (▼) or collapsed (►) state 108196df7d3eSAtari911 - Smooth animation when collapsing/expanding 108296df7d3eSAtari911 - Clicking a day in the week grid shows that day's events ABOVE the Itinerary bar 108396df7d3eSAtari911 - Selected day events remain visible whether itinerary is expanded or collapsed 108496df7d3eSAtari911 - Shows "No upcoming events" message when there are no itinerary items 108596df7d3eSAtari911 108696df7d3eSAtari911### UI Layout (top to bottom) 108796df7d3eSAtari9111. Header with clock/system stats 108896df7d3eSAtari9112. +ADD EVENT bar 108996df7d3eSAtari9113. Week grid (7 days) 109096df7d3eSAtari9114. Selected day's events (appears when clicking a day) 109196df7d3eSAtari9115. ITINERARY bar (click to collapse/expand) 109296df7d3eSAtari9116. Today section (collapsible) 109396df7d3eSAtari9117. Tomorrow section (collapsible) 109496df7d3eSAtari9118. Important Events section (collapsible) 109596df7d3eSAtari911 109696df7d3eSAtari911## Version 6.7.9 (2026-02-11) - FIX EVENTS MANAGER STATISTICS 109796df7d3eSAtari911 109896df7d3eSAtari911### Bug Fixes 109996df7d3eSAtari911- **Fixed:** Events Manager showing inflated count (1195 instead of ~605) 110096df7d3eSAtari911 - The `scanDirectoryForStats()` function was counting ALL entries in JSON files 110196df7d3eSAtari911 - Now properly filters to only count date keys (`YYYY-MM-DD` format) 110296df7d3eSAtari911 - Now validates events have `id` and `title` before counting 110396df7d3eSAtari911 - Click " Rescan" to update the statistics with correct count 110496df7d3eSAtari911 110596df7d3eSAtari911## Version 6.7.8 (2026-02-11) - FILTER INVALID EVENTS 110696df7d3eSAtari911 110796df7d3eSAtari911### Bug Fixes 110896df7d3eSAtari911- **Fixed:** Event Manager showing "(untitled)" and "mapping" entries 110996df7d3eSAtari911 - Root cause: Calendar JSON files contain metadata keys (like "mapping") that were being parsed as events 111096df7d3eSAtari911 - Added date format validation (`YYYY-MM-DD`) to skip non-date keys 111196df7d3eSAtari911 - Added validation to require `id` and `title` fields for events 111296df7d3eSAtari911 - Applied fix to all event-reading functions: 111396df7d3eSAtari911 - `getEventsByNamespace()` - main event listing 111496df7d3eSAtari911 - `scanNamespaceRecursive()` - namespace scanning 111596df7d3eSAtari911 - `searchEvents()` - event search 111696df7d3eSAtari911 - `findEventsByTitle()` - title lookup 111796df7d3eSAtari911 - `deleteRecurringSeries()` - recurring deletion 111896df7d3eSAtari911 - `renameRecurringSeries()` - recurring rename 111996df7d3eSAtari911 - Recurring events scanner 112096df7d3eSAtari911 - Recurring cleanup function 112196df7d3eSAtari911 112296df7d3eSAtari911### Technical Details 112396df7d3eSAtari911- Date keys must match pattern `/^\d{4}-\d{2}-\d{2}$/` 112496df7d3eSAtari911- Events must have non-empty `id` and `title` fields 112596df7d3eSAtari911- All other entries in JSON files are now skipped 112696df7d3eSAtari911 112796df7d3eSAtari911## Version 6.7.7 (2026-02-11) - FIX PHP PATH & CLEAR LOG 112896df7d3eSAtari911 112996df7d3eSAtari911### Bug Fixes 113096df7d3eSAtari911- **Fixed:** "sh: 1: '/usr/bin/php': not found" error - removed escapeshellarg() which was adding quotes around the PHP path 113196df7d3eSAtari911- **Fixed:** "Could not clear log file" - added better error messages showing exact issue 113296df7d3eSAtari911- **Improved:** findPhpBinary() now uses is_executable() and `which php` for detection 113396df7d3eSAtari911- **Improved:** clearLogFile() now shows specific error (file not found, not writable, etc.) 113496df7d3eSAtari911 113596df7d3eSAtari911## Version 6.7.6 (2026-02-11) - FIX SYNC CONTROLS & LOGGING 113696df7d3eSAtari911 113796df7d3eSAtari911### Bug Fixes 113896df7d3eSAtari911- **Fixed:** Double log entries - sync script logs internally, removed redundant stdout capture 113996df7d3eSAtari911- **Fixed:** Manual sync not appearing in log - removed `--verbose` flag since script logs directly 114096df7d3eSAtari911- **Fixed:** Better error messages when sync fails 114196df7d3eSAtari911 114296df7d3eSAtari911### Improvements 114396df7d3eSAtari911- **Improved:** Sync now runs without `--verbose` flag - script logs to file internally 114496df7d3eSAtari911- **Improved:** Crontab warning if `>>` redirect is detected (causes duplicate entries) 114596df7d3eSAtari911- **Improved:** Log viewer now shows full path to log file 114696df7d3eSAtari911- **Improved:** Better pre-flight checks (directory creation, file permissions) 114796df7d3eSAtari911- **Improved:** PHP binary path is now properly escaped 114896df7d3eSAtari911 114996df7d3eSAtari911### Crontab Update Required 115096df7d3eSAtari911If your crontab has `>> sync.log 2>&1`, remove it to prevent duplicate log entries: 115196df7d3eSAtari911 115296df7d3eSAtari911**Before (causes duplicates):** 115396df7d3eSAtari911``` 115496df7d3eSAtari911*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php >> /var/www/html/dokuwiki/data/meta/calendar/sync.log 2>&1 115596df7d3eSAtari911``` 115696df7d3eSAtari911 115796df7d3eSAtari911**After (correct):** 115896df7d3eSAtari911``` 115996df7d3eSAtari911*/2 * * * * cd /var/www/html/dokuwiki/lib/plugins/calendar && php sync_outlook.php 116096df7d3eSAtari911``` 116196df7d3eSAtari911 116296df7d3eSAtari911The script automatically logs to `data/meta/calendar/sync.log`. 116396df7d3eSAtari911 116496df7d3eSAtari911## Version 6.7.5 (2026-02-11) - FIX SYNC LOG OUTPUT 116596df7d3eSAtari911 116696df7d3eSAtari911### Bug Fixes 116796df7d3eSAtari911- **Fixed:** Sync log not showing output when running sync from admin panel 116896df7d3eSAtari911 - Added `--verbose` flag to sync command so output is captured 116996df7d3eSAtari911 - Sync output is now captured and written to the log file 117096df7d3eSAtari911 - Log directory is created if it doesn't exist 117196df7d3eSAtari911 - Better error handling if log directory isn't writable 117296df7d3eSAtari911 - Command being executed is logged for debugging 117396df7d3eSAtari911 117496df7d3eSAtari911### Changes 117596df7d3eSAtari911- Sync now runs in verbose mode when triggered from admin panel 117696df7d3eSAtari911- All sync output (stdout/stderr) is written to the log file 117796df7d3eSAtari911- Pre-flight check ensures log directory exists and is writable 117896df7d3eSAtari911 117996df7d3eSAtari911## Version 6.7.4 (2026-02-11) - FIX MANUAL SYNC EXECUTION 118096df7d3eSAtari911 118196df7d3eSAtari911### Bug Fix 118296df7d3eSAtari911- **Fixed:** "Could not open input file: sync_outlook.php" when running manual sync 118396df7d3eSAtari911 - The `$pluginDir` variable was missing from `runSync()` function 118496df7d3eSAtari911 - Added `$pluginDir = DOKU_PLUGIN . 'calendar'` before building the command 118596df7d3eSAtari911 - Sync now properly changes to the plugin directory before executing 118696df7d3eSAtari911 118796df7d3eSAtari911## Version 6.7.3 (2026-02-11) - FIX ADDITIONAL COUNT TYPE ERRORS 118896df7d3eSAtari911 118996df7d3eSAtari911### Bug Fix 119096df7d3eSAtari911- **Fixed:** Additional TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 119196df7d3eSAtari911 - Fixed in `scanDirectoryForStats()` (line 5453) 119296df7d3eSAtari911 - Fixed in namespace delete function (line 4137) 119396df7d3eSAtari911 - Fixed in export function (line 5516) 119496df7d3eSAtari911 - Fixed in import function (line 5636) 119596df7d3eSAtari911 - All locations now check `is_array()` before calling `count()` 119696df7d3eSAtari911 119796df7d3eSAtari911## Version 6.7.2 (2026-02-11) - FIX EVENT MANAGER TYPE ERROR 119896df7d3eSAtari911 119996df7d3eSAtari911### Bug Fix 120096df7d3eSAtari911- **Fixed:** TypeError "count(): Argument #1 ($value) must be of type Countable|array, int given" 120196df7d3eSAtari911 - Added array type checks when iterating over calendar event data 120296df7d3eSAtari911 - Protects against corrupted JSON data where event lists may not be arrays 120396df7d3eSAtari911 - Added safeguards in `getEventsByNamespace()` and `scanNamespaceRecursive()` 120496df7d3eSAtari911 120596df7d3eSAtari911## Version 6.7.1 (2026-02-11) - BULK DELETE FOR BACKUPS 120696df7d3eSAtari911 120796df7d3eSAtari911### Changed 120896df7d3eSAtari911- **Improved:** Backup management now uses bulk selection and delete 120996df7d3eSAtari911 - Added checkboxes next to each backup file 121096df7d3eSAtari911 - Added "Select All" checkbox in the action bar 121196df7d3eSAtari911 - Added "️ Delete Selected" button (appears when backups are selected) 121296df7d3eSAtari911 - Removed individual delete buttons from each row 121396df7d3eSAtari911 - Shows count of selected backups 121496df7d3eSAtari911 - Backups are deleted sequentially with visual feedback 121596df7d3eSAtari911 121696df7d3eSAtari911### UI 121796df7d3eSAtari911- Clean action bar at top of backup table with selection controls 121896df7d3eSAtari911- Selected count updates in real-time 121996df7d3eSAtari911- Rows fade out smoothly when deleted 122096df7d3eSAtari911 122196df7d3eSAtari911## Version 6.7.0 (2026-02-11) - IMPROVED RESTORE FUNCTION 122296df7d3eSAtari911 122396df7d3eSAtari911### Changed 122496df7d3eSAtari911- **Improved:** Restore function now uses DokuWiki's Extension Manager API 122596df7d3eSAtari911 - Uses `helper_plugin_extension_extension` for proper installation 122696df7d3eSAtari911 - Handles permissions correctly through DokuWiki's standard plugin installation process 122796df7d3eSAtari911 - Falls back to manual instructions if Extension Manager is not available 122896df7d3eSAtari911 122996df7d3eSAtari911### How It Works 123096df7d3eSAtari911When you click " Restore" on a backup: 123196df7d3eSAtari9111. The plugin loads DokuWiki's extension helper 123296df7d3eSAtari9112. Calls `installFromLocal()` with the backup ZIP file 123396df7d3eSAtari9113. DokuWiki's Extension Manager handles file extraction and installation 123496df7d3eSAtari9114. This ensures proper permissions and follows DokuWiki standards 123596df7d3eSAtari911 123696df7d3eSAtari911### Fallback 123796df7d3eSAtari911If the Extension Manager helper is not available, you'll be prompted to: 123896df7d3eSAtari911- Download the backup ZIP 123996df7d3eSAtari911- Go to Admin → Extension Manager → Install 124096df7d3eSAtari911- Upload the ZIP file manually 124196df7d3eSAtari911 124296df7d3eSAtari911## Version 6.6.9 (2026-02-11) - REMOVE RESTORE FUNCTION 124396df7d3eSAtari911 124496df7d3eSAtari911### Removed 124596df7d3eSAtari911- **Removed:** "Restore" button from backup management 124696df7d3eSAtari911- **Removed:** `restoreBackup()` PHP method 124796df7d3eSAtari911- **Removed:** `restoreBackup()` JavaScript function 124896df7d3eSAtari911 124996df7d3eSAtari911### Added 125096df7d3eSAtari911- **Added:** Informational note in backup section explaining how to restore: 125196df7d3eSAtari911 - Download the backup ZIP file 125296df7d3eSAtari911 - Go to Admin → Extension Manager → Install 125396df7d3eSAtari911 - Upload the ZIP file there 125496df7d3eSAtari911 - DokuWiki's extension manager handles installation safely with proper permissions 125596df7d3eSAtari911 125696df7d3eSAtari911### Reason 125796df7d3eSAtari911The 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. 125896df7d3eSAtari911 125996df7d3eSAtari911## Version 6.6.8 (2026-02-11) - FIX THEME KEYS & FILE PERMISSIONS 126096df7d3eSAtari911 126196df7d3eSAtari911### Bug Fixes 126296df7d3eSAtari911- **Fixed:** "Undefined array key" warnings for wiki theme (pastdue_color, pastdue_bg, tomorrow_bg, etc.) 126396df7d3eSAtari911 - Added missing theme keys to `getWikiTemplateColors()` return array 126496df7d3eSAtari911 126596df7d3eSAtari911- **Fixed:** "Permission denied" errors for sync.log and sync_state.json 126696df7d3eSAtari911 - Moved sync files from plugin directory to `data/meta/calendar/` (writable location) 126796df7d3eSAtari911 - Updated sync_outlook.php, admin.php to use new paths 126896df7d3eSAtari911 - sync_config.php remains in plugin directory (must be manually configured) 126996df7d3eSAtari911 127096df7d3eSAtari911- **Fixed:** `findEventNamespace` now returns the actual DIRECTORY where event file lives 127196df7d3eSAtari911 - This ensures deletion works correctly when stored namespace differs from file location 127296df7d3eSAtari911 127396df7d3eSAtari911### Note on lang.php Permission Error 127496df7d3eSAtari911If 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. 127596df7d3eSAtari911 127696df7d3eSAtari911## Version 6.6.7 (2026-02-11) - FIX NAMESPACE CHANGE BUG (PART 2) 127796df7d3eSAtari911 127896df7d3eSAtari911### Bug Fix 127996df7d3eSAtari911- **Fixed:** Events in the DEFAULT namespace (no namespace) could not be moved to other namespaces 128096df7d3eSAtari911 - Root cause: The comparison `$oldNamespace !== ''` was always FALSE for default namespace events 128196df7d3eSAtari911 - Changed to `$oldNamespace !== null` to properly distinguish between "event not found" (null) and "event in default namespace" ('') 128296df7d3eSAtari911 - This allows moving events FROM the default namespace TO any other namespace 128396df7d3eSAtari911 - Also fixed null coalescing for recurring events: `$oldNamespace ?? $namespace` instead of `$oldNamespace ?: $namespace` 128496df7d3eSAtari911 128596df7d3eSAtari911## Version 6.6.6 (2026-02-11) - FIX NAMESPACE CHANGE & DELETE BUGS 128696df7d3eSAtari911 128796df7d3eSAtari911### Bug Fixes 128896df7d3eSAtari911- **Fixed:** Changing an event's namespace now properly moves the event instead of creating a duplicate 128996df7d3eSAtari911 - Root cause: `findEventNamespace()` was searching in the NEW namespace instead of ALL namespaces 129096df7d3eSAtari911 - Now uses wildcard search `'*'` to find the existing event regardless of its current namespace 129196df7d3eSAtari911 129296df7d3eSAtari911- **Fixed:** Deleting an event no longer causes the calendar to filter by the deleted event's namespace 129396df7d3eSAtari911 - Root cause: After deletion, `reloadCalendarData()` was called with the deleted event's namespace 129496df7d3eSAtari911 - Now retrieves the calendar's original namespace from `container.dataset.namespace` 129596df7d3eSAtari911 - Also fixed in `saveEventCompact()` and `toggleTaskComplete()` for consistency 129696df7d3eSAtari911 129796df7d3eSAtari911## Version 6.6.5 (2026-02-11) - ADD AUTOCOMPLETE ATTRIBUTES 129896df7d3eSAtari911 129996df7d3eSAtari911### Improved 130096df7d3eSAtari911- Added `autocomplete="new-password"` to client secret input field 130196df7d3eSAtari911- Added `autocomplete="email"` to user email input field 130296df7d3eSAtari911- Added `autocomplete="off"` to client ID input field 130396df7d3eSAtari911- Follows browser best practices for form inputs 130496df7d3eSAtari911 130596df7d3eSAtari911## Version 6.6.4 (2026-02-11) - FIX GEOLOCATION VIOLATION 130696df7d3eSAtari911 130796df7d3eSAtari911### Bug Fix 130896df7d3eSAtari911- **Fixed:** Browser violation "Only request geolocation information in response to a user gesture" 130996df7d3eSAtari911- Weather widget now uses Sacramento as the default location on page load 131096df7d3eSAtari911- Geolocation is only requested when user **clicks** on the weather icon 131196df7d3eSAtari911- Click the weather icon to get your local weather (browser will prompt for permission) 131296df7d3eSAtari911- Weather icon shows tooltip "Click for local weather" and has pointer cursor 131396df7d3eSAtari911 131496df7d3eSAtari911## Version 6.6.3 (2026-02-11) - FIX MUTATIONOBSERVER ERROR 131596df7d3eSAtari911 131696df7d3eSAtari911### Bug Fix 131796df7d3eSAtari911- **Fixed:** `Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'` error 131896df7d3eSAtari911- Root cause: MutationObserver tried to observe `document.body` before DOM was ready 131996df7d3eSAtari911- Added `setupMutationObserver()` function that waits for DOMContentLoaded before attaching observer 132096df7d3eSAtari911 132196df7d3eSAtari911## Version 6.6.2 (2026-02-11) - FIX CONFLICT TOOLTIP JAVASCRIPT LOADING 132296df7d3eSAtari911 132396df7d3eSAtari911### Bug Fix 132496df7d3eSAtari911- **Critical:** Fixed `showConflictTooltip is not defined` and `hideConflictTooltip is not defined` errors 132596df7d3eSAtari911- Root cause: `addAssets()` in action.php was loading empty `script.js` instead of `calendar-main.js` 132696df7d3eSAtari911- Changed `addAssets()` to load `calendar-main.js` directly 132796df7d3eSAtari911- Updated `script.js` to dynamically load `calendar-main.js` as a fallback mechanism 132896df7d3eSAtari911 13297e8ea635SAtari911## Version 6.6.1 (2026-02-11) - SECURITY FIXES 13307e8ea635SAtari911 13317e8ea635SAtari911### Security 13327e8ea635SAtari911- **Critical:** Removed `eval()` remote code execution vulnerability in config import 13337e8ea635SAtari911- **Critical:** Added admin authentication requirement to `get_system_stats.php` endpoint 13347e8ea635SAtari911- **High:** Added CSRF token verification to all write operations (save, delete, toggle) 13357e8ea635SAtari911- **High:** Fixed path traversal vulnerabilities in namespace delete/rename functions 13367e8ea635SAtari911- **High:** Added admin privilege verification to AJAX admin routes 13377e8ea635SAtari911 13387e8ea635SAtari911### Improved 13397e8ea635SAtari911- **Input Validation:** Date format (YYYY-MM-DD), time format (HH:MM), color format (#RRGGBB) 13407e8ea635SAtari911- **Input Validation:** Year range (1970-2100), month range (1-12), namespace format 13417e8ea635SAtari911- **Input Validation:** Recurrence type whitelist, title/description length limits 13427e8ea635SAtari911- **Debug Logging:** All debug logging now conditional on `CALENDAR_DEBUG` constant (off by default) 13437e8ea635SAtari911- **JSON Handling:** Added `safeJsonRead()` helper with proper error handling 13447e8ea635SAtari911- **Timezone:** Sync script now uses configured timezone instead of hardcoded value 13457e8ea635SAtari911 13467e8ea635SAtari911### Code Quality 13477e8ea635SAtari911- Documented intentional switch fallthrough in `get_system_stats.php` 13487e8ea635SAtari911- Standardized error response format 13497e8ea635SAtari911 13507e8ea635SAtari911## Version 6.6.0 (2026-02-11) - BACKUP & UI IMPROVEMENTS 13517e8ea635SAtari911 13527e8ea635SAtari911### Fixed 13537e8ea635SAtari911- **Backup:** Fixed recursive directory backup to properly include all subdirectories (including `lang/`) 13547e8ea635SAtari911- **Backup:** Now uses `SELF_FIRST` iterator to process directories before their contents 13557e8ea635SAtari911- **Backup:** Empty directories are now explicitly added with `addEmptyDir()` to preserve structure 13567e8ea635SAtari911 13577e8ea635SAtari911### UI Change 13587e8ea635SAtari911- **Namespace Explorer:** Cleanup status message now appears prominently at top of section 13597e8ea635SAtari911- Previously status message was at bottom, easy to miss after cleanup operations 13607e8ea635SAtari911 13617e8ea635SAtari911## Version 6.5.5 (2026-02-11) - FIX AJAX ROUTING & MOVE CLEANUP BUTTON 13627e8ea635SAtari911 13637e8ea635SAtari911### Bug Fix 13647e8ea635SAtari911- All admin AJAX actions (cleanup, rescan, extend, trim, pause, resume, change start/pattern) were returning "Unknown action" 13657e8ea635SAtari911- Root cause: AJAX calls go through `action.php`'s switch statement, not `admin.php`'s `handle()` method 13667e8ea635SAtari911- Added routing in `action.php`: new cases forward to `admin.php` via `routeToAdmin()` helper 13677e8ea635SAtari911- Added public `handleAjaxAction()` method in `admin.php` as the entry point from `action.php` 13687e8ea635SAtari911 13697e8ea635SAtari911### UI Change 13707e8ea635SAtari911- Moved " Cleanup" button from standalone section to inline next to "➕ New Namespace" in the control bar 13717e8ea635SAtari911- Status messages still appear below the namespace explorer 13727e8ea635SAtari911 13737e8ea635SAtari911## Version 6.5.4 (2026-02-11) - FIX PHP PARSE ERROR IN CLEANUP JS 13747e8ea635SAtari911 13757e8ea635SAtari911### Bug Fix 13767e8ea635SAtari911- Root cause: `style='color:...'` single quotes inside PHP `echo '...'` block terminated the PHP string prematurely 13777e8ea635SAtari911- PHP saw `color:#e74c3c` as unexpected PHP code instead of part of the JS string 13787e8ea635SAtari911- Fixed all 5 occurrences in cleanupEmptyNamespaces JS: escaped single quotes as `\'` 13797e8ea635SAtari911- Added `adminColors` JS object (text, bg, border) injected from PHP `$colors` at render time 13807e8ea635SAtari911- Cleanup detail text uses `adminColors.text` to respect DokuWiki template theme colors 13817e8ea635SAtari911 13827e8ea635SAtari911## Version 6.5.3 (2026-02-11) - FIX CLEANUP NAMESPACES PARSE ERROR 13837e8ea635SAtari911 13847e8ea635SAtari911### Bug Fix 13857e8ea635SAtari911- Fixed PHP parse error on line 1089 caused by `$colors['text']` PHP variable inside JS string concatenation 13867e8ea635SAtari911- The cleanup results detail list now uses hardcoded `#666` for text color instead of attempting PHP interpolation within JS runtime code 13877e8ea635SAtari911 13887e8ea635SAtari911## Version 6.5.2 (2026-02-11) - CLEANUP EMPTY NAMESPACES 13897e8ea635SAtari911 13907e8ea635SAtari911### New Feature 13917e8ea635SAtari911- " Cleanup Empty Namespaces" button added at bottom of Namespace Explorer section 13927e8ea635SAtari911- Dry-run scan first: shows exactly what will be removed with bullet-point details in confirm dialog 13937e8ea635SAtari911- Removes empty calendar folders (0 JSON files or all-empty JSON files) from any namespace 13947e8ea635SAtari911- Removes parent namespace directories if they become empty after calendar folder removal 13957e8ea635SAtari911- Root calendar directory is never removed 13967e8ea635SAtari911- AJAX-powered with inline status showing results after cleanup 13977e8ea635SAtari911- Page auto-reloads after 2 seconds to refresh the namespace explorer view 13987e8ea635SAtari911- Recursively scans all nested namespace directories via `findAllCalendarDirsRecursive()` 13997e8ea635SAtari911 14007e8ea635SAtari911## Version 6.5.1 (2026-02-11) - TRIM ALL PAST: SHOW COUNT BEFORE DELETE 14017e8ea635SAtari911 14027e8ea635SAtari911### Improved 14037e8ea635SAtari911- "Trim All Past" button now does a dry-run count before showing the confirmation dialog 14047e8ea635SAtari911- Confirmation shows exact count: "Found 47 past recurring events to remove" 14057e8ea635SAtari911- If zero found, shows "No past recurring events found to remove" instead of confirm 14067e8ea635SAtari911- PHP handler supports `dry_run` parameter that counts without deleting 14077e8ea635SAtari911 14087e8ea635SAtari911## Version 6.5.0 (2026-02-11) - BULK TRIM ALL PAST RECURRING EVENTS 14097e8ea635SAtari911 14107e8ea635SAtari911### Bulk Action 14117e8ea635SAtari911- Red "✂️ Trim All Past" button added next to the Rescan button in the Recurring Events section header 14127e8ea635SAtari911- Removes ALL past occurrences (before today) from EVERY recurring series in one click 14137e8ea635SAtari911- Only removes events with `recurring` or `recurringId` flags — non-recurring events are untouched 14147e8ea635SAtari911- Confirmation dialog required before execution 14157e8ea635SAtari911- AJAX-powered with inline status showing count removed, then auto-rescans the table 14167e8ea635SAtari911- Searches all calendar directories recursively 14177e8ea635SAtari911 14187e8ea635SAtari911## Version 6.4.9 (2026-02-11) - FIX RECURRING EDIT/DELETE: SEARCH ALL DIRECTORIES 14197e8ea635SAtari911 14207e8ea635SAtari911### Bug Fix 14217e8ea635SAtari911- Edit and Delete recurring series now search ALL calendar directories instead of building a path from the namespace field 14227e8ea635SAtari911- Root cause: event's `namespace` field (stored in JSON) can differ from the filesystem directory where the file lives 14237e8ea635SAtari911- Both handlers now use `findCalendarDirs()` to collect every calendar directory recursively 14247e8ea635SAtari911- Events matched by title AND namespace field (case-insensitive) for precise targeting 14257e8ea635SAtari911- Edit handler rewritten: rename/time/namespace updates in Pass 1, interval respace in Pass 2 14267e8ea635SAtari911- New `findCalendarDirs()` helper method for recursive directory discovery 14277e8ea635SAtari911 14287e8ea635SAtari911## Version 6.4.8 (2026-02-11) - FIX PHP PARSE ERROR IN MANAGE DIALOG 14297e8ea635SAtari911 14307e8ea635SAtari911### Bug Fix 14317e8ea635SAtari911- Rewrote `manageRecurringSeries()` JS function using string concatenation instead of template literals 14327e8ea635SAtari911- JS template literals (`${...}`) inside PHP echo blocks caused PHP to parse them as variable interpolation 14337e8ea635SAtari911- All inline onclick handlers now use `\x27` for single quotes to avoid escaping conflicts 14347e8ea635SAtari911 14357e8ea635SAtari911## Version 6.4.7 (2026-02-11) - RECURRING EVENTS: FULL MANAGEMENT CONTROLS 14367e8ea635SAtari911 14377e8ea635SAtari911### New "Manage" Button per Series 14387e8ea635SAtari911- Orange "Manage" button opens a comprehensive management dialog for each recurring series 14397e8ea635SAtari911 14407e8ea635SAtari911### Extend Series 14417e8ea635SAtari911- Add N new occurrences after the last event in the series 14427e8ea635SAtari911- Configurable interval: Daily, Weekly, Bi-weekly, Monthly, Quarterly, Yearly 14437e8ea635SAtari911- New events copy title, time, color, namespace, and recurring flag from the last event 14447e8ea635SAtari911 14457e8ea635SAtari911### Trim Past Events 14467e8ea635SAtari911- Remove all occurrences before a selected cutoff date 14477e8ea635SAtari911- Confirmation required before deletion 14487e8ea635SAtari911- Cleans up empty date keys and files automatically 14497e8ea635SAtari911 14507e8ea635SAtari911### Change Pattern 14517e8ea635SAtari911- Respace future occurrences with a new interval 14527e8ea635SAtari911- Past events are untouched; only future events are removed and re-created 14537e8ea635SAtari911- First future event becomes the anchor date 14547e8ea635SAtari911 14557e8ea635SAtari911### Change Start Date 14567e8ea635SAtari911- Shift ALL occurrences by the difference between old and new start date 14577e8ea635SAtari911- Events are removed from old positions and re-created at new positions 14587e8ea635SAtari911- Preserves spacing between all events 14597e8ea635SAtari911 14607e8ea635SAtari911### Pause/Resume 14617e8ea635SAtari911- Pause: adds ⏸ prefix and paused flag to all future occurrences 14627e8ea635SAtari911- Resume: removes ⏸ prefix and paused flag from all occurrences 14637e8ea635SAtari911- Button toggles based on whether series is currently paused 14647e8ea635SAtari911 14657e8ea635SAtari911### Infrastructure 14667e8ea635SAtari911- New shared `recurringAction()` JS helper for all AJAX management operations 14677e8ea635SAtari911- New `getRecurringSeriesEvents()` PHP helper for finding all events in a series 14687e8ea635SAtari911- Status messages shown inline in the management dialog 14697e8ea635SAtari911- Close button triggers automatic rescan to refresh the table 14707e8ea635SAtari911 14717e8ea635SAtari911## Version 6.4.6 (2026-02-11) - RECURRING EVENTS: RESCAN BUTTON & IMPROVED LOGIC 14727e8ea635SAtari911 14737e8ea635SAtari911### Rescan Button 14747e8ea635SAtari911- Green " Rescan" button added to the Recurring Events section header 14757e8ea635SAtari911- AJAX-powered: rescans all calendar data and refreshes the table without page reload 14767e8ea635SAtari911- Shows count of found series briefly after scan completes 14777e8ea635SAtari911 14787e8ea635SAtari911### Improved Detection Logic 14797e8ea635SAtari911- Events with `recurring: true` flag are now detected first (grouped by `recurringId`) 14807e8ea635SAtari911- Pattern-detected events (3+ same-title occurrences) are found separately and deduplicated 14817e8ea635SAtari911- New "Source" column shows ️ Flagged (has recurring flag) vs Detected (pattern match) 14827e8ea635SAtari911- Median interval used for pattern detection instead of just first two dates (more robust) 14837e8ea635SAtari911- New patterns recognized: Quarterly, Semi-annual, and "Every ~N days" for custom intervals 14847e8ea635SAtari911- Empty/invalid titles and malformed date arrays are now skipped safely 14857e8ea635SAtari911- Dates are deduplicated before counting (prevents inflated counts from multi-day events) 14867e8ea635SAtari911- Nested namespace directories now scanned recursively 14877e8ea635SAtari911- Results sorted alphabetically by title 14887e8ea635SAtari911 14897e8ea635SAtari911## Version 6.4.5 (2026-02-11) - ADMIN VERSION HISTORY OVERHAUL 14907e8ea635SAtari911 14917e8ea635SAtari911### Version History Viewer 14927e8ea635SAtari911- All purple (#7b1fa2) accent colors replaced with green (#00cc07) to match admin theme 14937e8ea635SAtari911- Changelog parser now handles `###` subsection headers (rendered as green bold labels) 14947e8ea635SAtari911- Plain `- ` bullet items now parsed and categorized under their subsection 14957e8ea635SAtari911- Previously only `- **Type:** description` format was recognized 14967e8ea635SAtari911 14977e8ea635SAtari911### Current Release Button 14987e8ea635SAtari911- Green "Current Release" button added between nav arrows 14997e8ea635SAtari911- Jumps directly to the card matching the running version from plugin.info.txt 15007e8ea635SAtari911- Running version card shows green "RUNNING" badge and thicker green border 15017e8ea635SAtari911 15027e8ea635SAtari911## Version 6.4.4 (2026-02-11) - WIKI THEME: PAST EVENTS TOGGLE BACKGROUND 15037e8ea635SAtari911 15047e8ea635SAtari911### Fix 15057e8ea635SAtari911- Wiki theme past events pulldown (retracted state) now uses `__background_neu__` (`--cell-today-bg`) 15067e8ea635SAtari911- Previously used `--cell-bg` which appeared unthemed/white 15077e8ea635SAtari911 15087e8ea635SAtari911## Version 6.4.3 (2026-02-11) - WIKI THEME: DAY HEADERS BACKGROUND 15097e8ea635SAtari911 15107e8ea635SAtari911### Fix 15117e8ea635SAtari911- Wiki theme SMTWTFS day headers now use `__background_neu__` (`--cell-today-bg`) instead of `--background-header` 15127e8ea635SAtari911 15137e8ea635SAtari911## Version 6.4.2 (2026-02-11) - WIKI THEME: DAY HEADERS (INITIAL) 15147e8ea635SAtari911 15157e8ea635SAtari911### Wiki Theme Day Headers 15167e8ea635SAtari911- Added explicit CSS override for `.calendar-theme-wiki .calendar-day-headers` 15177e8ea635SAtari911- Day header text uses `--text-primary` (template's `__text__` color) 15187e8ea635SAtari911 15197e8ea635SAtari911## Version 6.4.1 (2026-02-11) - WIKI THEME: EVENT HIGHLIGHT 15207e8ea635SAtari911 15217e8ea635SAtari911### Fix 15227e8ea635SAtari911- Wiki theme event highlight (when clicking calendar bar) now uses `themeStyles.header_bg` (`__background_alt__`) instead of hardcoded blue (#dce9f5) 15237e8ea635SAtari911- Subtle shadow instead of blue glow 15247e8ea635SAtari911 15257e8ea635SAtari911## Version 6.4.0 (2026-02-11) - DARK READER: SECTION BAR COLOR MATCHING 15267e8ea635SAtari911 15277e8ea635SAtari911### Fix 15287e8ea635SAtari911- Wiki theme section left bar now uses a `<div>` with `background` instead of `border-left` 15297e8ea635SAtari911- Dark Reader maps the same color differently for border vs background properties, causing visual mismatch 15307e8ea635SAtari911- Both the bar and header now use `background`, so Dark Reader maps them identically 15317e8ea635SAtari911- Flex layout wrapper added for wiki theme sections 15327e8ea635SAtari911- Wiki fallback colors updated: `border` key now uses `#ccc` (matching `__border__`) instead of `#2b73b7` 15337e8ea635SAtari911 15347e8ea635SAtari911## Version 6.3.9 (2026-02-10) - WIKI THEME: SECTION BAR FIX (ATTEMPT) 15357e8ea635SAtari911 15367e8ea635SAtari911### Fix 15377e8ea635SAtari911- Simplified wiki section container — removed `wiki-section-container` class 15387e8ea635SAtari911- Added `background` from `$themeStyles['bg']` to section container 15397e8ea635SAtari911 15407e8ea635SAtari911## Version 6.3.8 (2026-02-10) - WIKI THEME: BUTTON & SECTION HEADER COLORS 15417e8ea635SAtari911 15427e8ea635SAtari911### Wiki Theme Buttons 15437e8ea635SAtari911- Nav buttons (< >), Today button, and panel buttons now use `__link__` color background with white text 15447e8ea635SAtari911- CSS overrides for `.calendar-theme-wiki .cal-nav-btn`, `.cal-today-btn`, panel buttons 15457e8ea635SAtari911 15467e8ea635SAtari911### Wiki Theme Section Headers 15477e8ea635SAtari911- Today: `__link__` background (accent/link color) 15487e8ea635SAtari911- Tomorrow: `__background_alt__` background (alternate background) 15497e8ea635SAtari911- Important: `__border__` background (border color) 15507e8ea635SAtari911- Each section now has a distinct color from the template palette 15517e8ea635SAtari911 15527e8ea635SAtari911## Version 6.3.7 (2026-02-10) - WIKI THEME CHECKBOX FIX 15537e8ea635SAtari911 15547e8ea635SAtari911### Fix 15557e8ea635SAtari911- Wiki theme checkbox override changed from `border-color` to full `border: 2px solid` shorthand 15567e8ea635SAtari911- Properly overrides the base rule which uses `border` shorthand 15577e8ea635SAtari911- Hover state also uses full shorthand 15587e8ea635SAtari911 15597e8ea635SAtari911## Version 6.3.6 (2026-02-10) - WIKI THEME CHECKBOX BORDER COLOR 15607e8ea635SAtari911 15617e8ea635SAtari911### Fix 15627e8ea635SAtari911- Wiki theme unchecked checkboxes now use `--border-main` (template's `__border__` color) for border 15637e8ea635SAtari911- Checked state fills with border color 15647e8ea635SAtari911- Hover state uses border color 15657e8ea635SAtari911- Applied to calendar, sidebar, and eventlist containers 15667e8ea635SAtari911 15677e8ea635SAtari911## Version 6.3.5 (2026-02-10) - WIKI THEME: ALLOW DARK READER ON HEADERS 15687e8ea635SAtari911 15697e8ea635SAtari911### Fix 15707e8ea635SAtari911- Wiki theme section headers (Today/Tomorrow/Important) no longer use `!important` or `-webkit-text-fill-color` 15717e8ea635SAtari911- Dark Reader can now freely adjust background, text color, and borders on wiki theme headers 15727e8ea635SAtari911- Clicked-day panel header and section border-left also unlocked for wiki theme 15737e8ea635SAtari911- All other themes (matrix/purple/pink/professional) retain full Dark Reader protection 15747e8ea635SAtari911 15757e8ea635SAtari911## Version 6.3.4 (2026-02-10) - WIKI THEME: BORDER COLOR FOR HEADERS & BADGES 15767e8ea635SAtari911 15777e8ea635SAtari911### Wiki Theme Color Remapping 15787e8ea635SAtari911- `border` (accent color) now maps to template's `__border__` instead of `__link__` 15797e8ea635SAtari911- This affects: section headers (Today/Tomorrow/Important), badges (TODAY, namespace), sidebar widget border, clicked-day panel, `--border-main` CSS variable 15807e8ea635SAtari911- `text_bright` still maps to `__link__` for link text and accent text 15817e8ea635SAtari911- Section headers all use the same `__border__` color for consistent appearance 15827e8ea635SAtari911- Updated COLOR_SCHEME mapping documentation 15837e8ea635SAtari911 15847e8ea635SAtari911## Version 6.3.3 (2026-02-10) - WIKI THEME SECTION HEADER TEXT COLOR 15857e8ea635SAtari911 15867e8ea635SAtari911### Fix 15877e8ea635SAtari911- Wiki theme Today/Tomorrow/Important section header text now uses `$themeStyles['text_primary']` (mapped from template's `__text__` color) instead of hardcoded white 15887e8ea635SAtari911- Clicked-day panel header text also uses template text color for wiki theme 15897e8ea635SAtari911- Professional theme remains white text on blue headers 15907e8ea635SAtari911 15917e8ea635SAtari911## Version 6.3.2 (2026-02-10) - FIX THEME NOT UPDATING ON SIDEBAR EVENTLIST 15927e8ea635SAtari911 15937e8ea635SAtari911### Bug Fix 15947e8ea635SAtari911- Added `$renderer->nocache()` to the render function 15957e8ea635SAtari911- DokuWiki was caching the rendered sidebar HTML, so theme changes made in admin were never reflected until the page was manually edited 15967e8ea635SAtari911- Now all calendar/eventlist/eventpanel outputs are rendered fresh on each page load, picking up the current theme from `calendar_theme.txt` 15977e8ea635SAtari911 15987e8ea635SAtari911## Version 6.3.1 (2026-02-10) - EVENTLIST THEMING 15997e8ea635SAtari911 16007e8ea635SAtari911### {{eventlist}} Theme Support 16017e8ea635SAtari911- Eventlist containers now receive theme class (`eventlist-theme-matrix`, etc.) and full CSS variable injection 16027e8ea635SAtari911- Dark themes get themed border + glow, light themes get subtle border 16037e8ea635SAtari911- Container background set from `$themeStyles['bg']` with `!important` 16047e8ea635SAtari911 16057e8ea635SAtari911### Eventlist CSS Theme Rules (all 3 dark themes) 16067e8ea635SAtari911- Title, header, time, date, body, links, strong, code, namespace badge, empty state 16077e8ea635SAtari911- Today header, clock, date — all with `color` + `-webkit-text-fill-color` `!important` 16087e8ea635SAtari911- Item borders, section backgrounds, code block backgrounds 16097e8ea635SAtari911- Full Dark Reader protection via same inline+CSS approach as calendar/sidebar 16107e8ea635SAtari911 16117e8ea635SAtari911## Version 6.3.0 (2026-02-10) - DARK READER COMPATIBILITY & COMPLETE THEMING 16127e8ea635SAtari911 16137e8ea635SAtari911### Dark Reader Browser Extension Compatibility 16147e8ea635SAtari911All 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. 16157e8ea635SAtari911 16167e8ea635SAtari911**Protected elements:** 16177e8ea635SAtari911- Section headers (Today/Tomorrow/Important) — background, text color, text-fill-color 16187e8ea635SAtari911- Clicked-day panel header — background, text color, close button 16197e8ea635SAtari911- All badges (TODAY, PAST DUE, namespace, panel namespace, eventlist-simple) — background, text, text-fill-color 16207e8ea635SAtari911- Event titles, meta, descriptions — color with !important via CSS 16217e8ea635SAtari911- Day numbers, nav buttons, calendar day headers — color with !important via CSS 16227e8ea635SAtari911- System status bars — inline background !important on tracks and fills 16237e8ea635SAtari911- System tooltips — background, border-color, text color all set via setProperty with !important 16247e8ea635SAtari911- Section left border bars — border-left with !important 16257e8ea635SAtari911- Event color indicator bars — border-left-color with !important 16267e8ea635SAtari911- Sidebar section event text (Purple and Pink themes) 16277e8ea635SAtari911 16287e8ea635SAtari911### Complete CSS Variable Audit (41 conversions in v6.1.1) 16297e8ea635SAtari911- All remaining hardcoded colors in style.css converted to CSS variable references 16307e8ea635SAtari911- Calendar borders, text colors, backgrounds, input focus shadows, accent borders 16317e8ea635SAtari911- Only legitimate hardcodes remain (keyframe animations, theme-specific override blocks) 16327e8ea635SAtari911 16337e8ea635SAtari911### Semantic Color System 16347e8ea635SAtari911- New CSS variables: `--pastdue-color`, `--pastdue-bg`, `--pastdue-bg-strong`, `--pastdue-bg-light` 16357e8ea635SAtari911- New CSS variables: `--tomorrow-bg`, `--tomorrow-bg-strong`, `--tomorrow-bg-light` 16367e8ea635SAtari911- Injected into all 3 CSS var blocks (full calendar, event panel, sidebar widget) 16377e8ea635SAtari911- Today/Tomorrow/Important section colors now theme-derived instead of hardcoded 16387e8ea635SAtari911 16397e8ea635SAtari911### Section Headers Fully Themed 16407e8ea635SAtari911- Today/Tomorrow/Important headers use theme accent colors instead of fixed green/orange/purple 16417e8ea635SAtari911- Matrix: bright/standard/dim green, Purple: bright/standard/dim purple, Pink: hot/medium/light pink 16427e8ea635SAtari911- Professional: blue shades, Wiki: template-derived colors 16437e8ea635SAtari911- Dark theme headers use dark background color for text contrast 16447e8ea635SAtari911 16457e8ea635SAtari911### Pink Theme Enhancements 16467e8ea635SAtari911- **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 16477e8ea635SAtari911- **Firework button hover** — `pink-firework-burst` keyframe animation with multi-point radiating box-shadows, scale/brightness effects on hover, instant flash on click 16487e8ea635SAtari911- **Checkbox glow** — hot pink border with ambient glow, hover intensifies, checked fills with glow 16497e8ea635SAtari911 16507e8ea635SAtari911### All Theme Checkbox Theming 16517e8ea635SAtari911- Matrix: bright green border + green glow, Purple: purple border + purple glow 16527e8ea635SAtari911- Pink: hot pink border + pink glow (with enhanced ambient effect) 16537e8ea635SAtari911- Hover scales 1.1x with intensified glow on all themes 16547e8ea635SAtari911- Checked state fills with theme accent color + outer glow 16557e8ea635SAtari911 16567e8ea635SAtari911### System Tooltips Themed 16577e8ea635SAtari911- Both tooltip functions use theme-derived colors from `$themeStyles` 16587e8ea635SAtari911- Green tooltip: `text_bright`, Purple: `border`, Orange: `text_primary` 16597e8ea635SAtari911- Background from `$themeStyles['bg']`, divider borders use theme accent colors 16607e8ea635SAtari911- All properties set with `style.setProperty(prop, value, "important")` 16617e8ea635SAtari911 16627e8ea635SAtari911### Namespace Filter Badge Cleanup 16637e8ea635SAtari911- Removed inline namespace badge from event side panel header 16647e8ea635SAtari911- Filter indicator bar ("Filtering: namespace ✕") retained and working 16657e8ea635SAtari911- AJAX-based namespace filtering fully functional via onclick handlers 16667e8ea635SAtari911 16677e8ea635SAtari911## Version 6.1.0 (2026-02-10) - TODAY INDICATOR, BUTTON HOVER & CHECKBOXES 16687e8ea635SAtari911 16697e8ea635SAtari911### Today Indicator 16707e8ea635SAtari911- **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) 16717e8ea635SAtari911- **Added:** Today cell has `--cell-today-bg` background AND a visible inset border glow on hover using `--border-main` 16727e8ea635SAtari911- **Added:** `.day-num` now uses `--text-primary` for color instead of relying on browser default 16737e8ea635SAtari911 16747e8ea635SAtari911### Button Hover/Click Theming 16757e8ea635SAtari911- **Fixed:** All buttons now use `filter: brightness(1.3)` on hover for a visible glow effect across all themes 16767e8ea635SAtari911- **Fixed:** All buttons use `filter: brightness(0.85)` on click/active for a press-down darkening effect 16777e8ea635SAtari911- **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 16787e8ea635SAtari911- **Removed:** Generic `opacity: 0.9` hover which was barely visible on dark themes 16797e8ea635SAtari911 16807e8ea635SAtari911### Checkboxes Themed 16817e8ea635SAtari911- **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 16827e8ea635SAtari911- **Added:** `accent-color: var(--text-bright)` on all dialog checkboxes (task, recurring) for consistent theme coloring 16837e8ea635SAtari911 16847e8ea635SAtari911### Form Input Text 16857e8ea635SAtari911- **Fixed:** `.input-sleek` now has `color: var(--text-primary)` — form text is visible on dark themes 16867e8ea635SAtari911- **Added:** `::placeholder` styling for inputs/textareas using `--text-dim` 16877e8ea635SAtari911 16887e8ea635SAtari911## Version 6.0.9 (2026-02-09) - FORM TEXT, CELL HOVER & GLOW TUNING 16897e8ea635SAtari911 16907e8ea635SAtari911### Form Input Text Fix 16917e8ea635SAtari911- **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)`. 16927e8ea635SAtari911- **Added:** Themed placeholder text (`::placeholder`) for inputs/textareas 16937e8ea635SAtari911 16947e8ea635SAtari911### Button & Cell Hover Theming 16957e8ea635SAtari911- **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` 16967e8ea635SAtari911- **Improved:** Nav buttons (`◄`/`►`) and Today button hover now show a themed glow + scale effect instead of just opacity change 16977e8ea635SAtari911- **Added:** Active (click) state for nav/today buttons with scale-down feedback 16987e8ea635SAtari911- **Improved:** Month picker hover now also shows a subtle theme shadow 16997e8ea635SAtari911 17007e8ea635SAtari911### Glow Reduced to 1px for Matrix/Purple 17017e8ea635SAtari911- Matrix and purple text glow reduced from 2px to 1px across: event titles, descriptions, meta, links, sidebar day numbers, sidebar event titles, sidebar dates 17027e8ea635SAtari911- Matrix clock pulse animation reduced from 6px/10px+15px to 2px/4px+6px 17037e8ea635SAtari911- Weather text glow reduced to 1px, clock to 2px 17047e8ea635SAtari911- Pink remains at 2px (barely noticeable) 17057e8ea635SAtari911 17067e8ea635SAtari911## Version 6.0.8 (2026-02-09) - LINKS, GLOW CONSISTENCY & PINK TONE-DOWN 17077e8ea635SAtari911 17087e8ea635SAtari911### Links Themed 17097e8ea635SAtari911- **Added:** `.cal-link` CSS class — all links rendered via `renderDescription()` now pick up theme accent color via `--text-bright` 17107e8ea635SAtari911- **Fixed:** Sidebar widget links (`a.cal-link`) inherit theme colors 17117e8ea635SAtari911- **Fixed:** Event list widget description links (`eventlist-widget-desc a`) use CSS vars 17127e8ea635SAtari911- **Fixed:** Simple event list body links/strong/code all themed 17137e8ea635SAtari911 17147e8ea635SAtari911### Text Glow Consistency 17157e8ea635SAtari911- **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 17167e8ea635SAtari911- **Added:** Subtle link glow on dark themes 17177e8ea635SAtari911- **Added:** Matrix and purple now get the same barely-visible text glow that pink had on sidebar week grid day numbers and event titles 17187e8ea635SAtari911 17197e8ea635SAtari911### Pink Glow Toned Down 17207e8ea635SAtari911- **Reduced:** Sidebar today header box-shadow from `0 0 10px 0.4` to `0 0 6px 0.25` 17217e8ea635SAtari911- **Reduced:** Day number sparkle animation from 3px/6px+10px to 2px/3px 17227e8ea635SAtari911- **Reduced:** Today cell shimmer from 3px+5px / 8px+12px to 2px+3px / 4px+6px 17237e8ea635SAtari911- **Reduced:** Event bar glow pulse from 2px/4px+6px to 1px/2px+3px 17247e8ea635SAtari911- **Reduced:** Today hover glow from 10px+15px to 5px+8px 17257e8ea635SAtari911- **Reduced:** Event item glow from 2px/5px to 1px/3px 17267e8ea635SAtari911- **Reduced:** Calendar container glow from 8px to 5px 17277e8ea635SAtari911 17287e8ea635SAtari911### Other 17297e8ea635SAtari911- **Themed:** Sidebar weather, date, and clock text colors and glow via CSS vars 17307e8ea635SAtari911 17317e8ea635SAtari911## Version 6.0.7 (2026-02-09) - BADGES, BUTTONS & CONFLICT THEMING 17327e8ea635SAtari911 17337e8ea635SAtari911- **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 17347e8ea635SAtari911- **Fixed:** TODAY badge uses `--border-main` for background instead of hardcoded purple 17357e8ea635SAtari911- **Fixed:** Conflict alert badge (`⚠️`) uses `--border-main` background and `--text-bright` border — matches theme accent 17367e8ea635SAtari911- **Fixed:** Conflict tooltip header background now set inline from theme vars (tooltip is appended to body, can't inherit CSS vars) 17377e8ea635SAtari911- **Fixed:** Conflict tooltip body items use themed text and border colors 17387e8ea635SAtari911- **Fixed:** Month picker Go/Cancel buttons themed (`--text-bright` for save, `--cell-bg` for cancel) 17397e8ea635SAtari911- **Fixed:** Calendar header month/year hover uses `--cell-today-bg` background 17407e8ea635SAtari911- **Fixed:** Inline search input border uses `--border-color` 17417e8ea635SAtari911- **Fixed:** Event list header border uses `--border-color` 17427e8ea635SAtari911 17437e8ea635SAtari911## Version 6.0.6 (2026-02-09) - COMPLETE TEXT THEMING 17447e8ea635SAtari911 17457e8ea635SAtari911- **Fixed:** Calendar header month/year title had hardcoded dark color — now uses `--text-primary` 17467e8ea635SAtari911- **Fixed:** Month/year picker hover used hardcoded gray background and green text — now uses `--cell-today-bg` and `--text-bright` 17477e8ea635SAtari911- **Fixed:** Event list items (titles, meta, descriptions, links, code blocks, bold text) — all now theme-aware via CSS vars 17487e8ea635SAtari911- **Fixed:** Completed/past event states used hardcoded grays — now use `--cell-bg`, `--text-dim`, `--cell-today-bg` 17497e8ea635SAtari911- **Fixed:** Scrollbar track/thumb colors now use theme vars 17507e8ea635SAtari911- **Fixed:** Namespace filter indicator (background, label, badge, close button) — all themed 17517e8ea635SAtari911- **Fixed:** Panel standalone month picker hover and namespace badge — themed 17527e8ea635SAtari911- **Fixed:** Calendar header border-bottom — now uses `--border-color` 17537e8ea635SAtari911 17547e8ea635SAtari911## Version 6.0.5 (2026-02-09) - THEMED BORDERS & EVENT PANEL 17557e8ea635SAtari911 17567e8ea635SAtari911- **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). 17577e8ea635SAtari911- **Added:** Theme-colored border and glow for event panel (`{{eventpanel}}`) on dark themes using `[data-theme]` attribute selectors 17587e8ea635SAtari911- **Themed:** Event panel header (nav buttons, month title, today button, search input, add button) — all now use CSS vars 17597e8ea635SAtari911- **Themed:** Panel standalone header background and border 17607e8ea635SAtari911 17617e8ea635SAtari911## Version 6.0.4 (2026-02-09) - FULL DIALOG THEMING 17627e8ea635SAtari911 17637e8ea635SAtari911- **Fixed:** Day cell click popup (day-popup) used hardcoded white/gray colors — now fully theme-aware using CSS variables 17647e8ea635SAtari911- **Fixed:** Event add/edit dialog (dialog-content-sleek) had hardcoded white background and blue header — now uses theme colors 17657e8ea635SAtari911- **Fixed:** Month picker dialog had hardcoded white background and dark text — now themed 17667e8ea635SAtari911- **Fixed:** Popup event items, titles, times, descriptions, footer, add-event button, close button — all now use CSS vars with sensible fallbacks 17677e8ea635SAtari911- **Fixed:** Form elements (field labels, inputs, checkboxes, recurring options, color pickers) — all reference theme CSS vars 17687e8ea635SAtari911- **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. 17697e8ea635SAtari911 17704590242dSAtari911## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 17714590242dSAtari911 17724590242dSAtari911- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 17734590242dSAtari911- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 17744590242dSAtari911- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 17754590242dSAtari911- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 17764590242dSAtari911 17770c3b6e81SAtari911## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 17780c3b6e81SAtari911 17790c3b6e81SAtari911- **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. 17800c3b6e81SAtari911 17810c3b6e81SAtari911## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 17820c3b6e81SAtari911 17830c3b6e81SAtari911- **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()` 17840c3b6e81SAtari911- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 17850c3b6e81SAtari911- **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. 17860c3b6e81SAtari911 17871d05cddcSAtari911 17889ccd446eSAtari911## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 17899ccd446eSAtari911 17909ccd446eSAtari911- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 17919ccd446eSAtari911- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 17929ccd446eSAtari911- **Audited:** style.css (3,218 lines) — balanced braces confirmed 17939ccd446eSAtari911- **Audited:** All admin manage tab action handlers verified functional (13 actions) 17949ccd446eSAtari911- **New:** Fresh README.md for GitHub with complete documentation 17959ccd446eSAtari911- **Includes all v5.5.x fixes:** 17969ccd446eSAtari911 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 17979ccd446eSAtari911 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 17989ccd446eSAtari911 - Conflict badges on past events after AJAX navigation 17999ccd446eSAtari911 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 18009ccd446eSAtari911 18019ccd446eSAtari911## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 18029ccd446eSAtari911 18039ccd446eSAtari911- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 18049ccd446eSAtari911- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 18059ccd446eSAtari911- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 18069ccd446eSAtari911- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 18079ccd446eSAtari911- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 18089ccd446eSAtari911- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 18099ccd446eSAtari911- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 18109ccd446eSAtari911- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 18119ccd446eSAtari911- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 18129ccd446eSAtari911- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 18139ccd446eSAtari911- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 18149ccd446eSAtari911- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 18159ccd446eSAtari911- **Removed:** Stale "NEW!" comment from Events Manager section 18169ccd446eSAtari911 18179ccd446eSAtari911## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 18189ccd446eSAtari911 18199ccd446eSAtari911- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 18209ccd446eSAtari911- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 18219ccd446eSAtari911- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 18229ccd446eSAtari911- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 18239ccd446eSAtari911- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 18249ccd446eSAtari911- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 18259ccd446eSAtari911- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 18269ccd446eSAtari911- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 18279ccd446eSAtari911- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 18289ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 18299ccd446eSAtari911 18309ccd446eSAtari911## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 18319ccd446eSAtari911 18329ccd446eSAtari911- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 18339ccd446eSAtari911- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 18349ccd446eSAtari911- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 18359ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 18369ccd446eSAtari911- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 18379ccd446eSAtari911- **Changed:** Week grid JS theme colors now use actual $themeStyles values 18389ccd446eSAtari911 18399ccd446eSAtari911## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 18409ccd446eSAtari911 18419ccd446eSAtari911- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 18429ccd446eSAtari911 18439ccd446eSAtari911## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 18449ccd446eSAtari911 18459ccd446eSAtari911- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 18469ccd446eSAtari911- **Fixed:** Week grid conflict tooltips also fixed (same issue) 18479ccd446eSAtari911- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 18489ccd446eSAtari911- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 18499ccd446eSAtari911 18509ccd446eSAtari911## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 18519ccd446eSAtari911 18529ccd446eSAtari911- **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) 18539ccd446eSAtari911 18549ccd446eSAtari911## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 18559ccd446eSAtari911 18569ccd446eSAtari911- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 18579ccd446eSAtari911- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 18589ccd446eSAtari911 18599ccd446eSAtari911## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 18609ccd446eSAtari911 18619ccd446eSAtari911- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 18629ccd446eSAtari911- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 18639ccd446eSAtari911- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 18649ccd446eSAtari911- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 18659ccd446eSAtari911 18669ccd446eSAtari911## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 18679ccd446eSAtari911 18689ccd446eSAtari911- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 18699ccd446eSAtari911- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 18709ccd446eSAtari911- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 18719ccd446eSAtari911- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 18729ccd446eSAtari911- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 18739ccd446eSAtari911- **Added:** ESC key now also closes day popups and conflict tooltips 18749ccd446eSAtari911- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 18759ccd446eSAtari911 18769ccd446eSAtari911## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 18779ccd446eSAtari911 18789ccd446eSAtari911- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 18799ccd446eSAtari911- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 18809ccd446eSAtari911- **Refactored:** style.css is now the single source of truth for all visual styling 18819ccd446eSAtari911- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 18829ccd446eSAtari911- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 18839ccd446eSAtari911- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 18849ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist panel}} containers 18859ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 18869ccd446eSAtari911- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 18879ccd446eSAtari911- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 18889ccd446eSAtari911- **Added:** Detailed CSS variable reference table in style.css header comment 18899ccd446eSAtari911- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 18909ccd446eSAtari911- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 18919ccd446eSAtari911- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 18929ccd446eSAtari911- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 18939ccd446eSAtari911- **Removed:** $isWikiTheme branching from PHP render path 18949ccd446eSAtari911 18959ccd446eSAtari911## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 18969ccd446eSAtari911 18979ccd446eSAtari911### Added: Hearts in Explosions! 18989ccd446eSAtari911- **Added:** 8-12 pink hearts in each click explosion 18999ccd446eSAtari911- **Added:** Random sizes (12-28px) and directions 19009ccd446eSAtari911- **Result:** Extra love in every click! 19019ccd446eSAtari911 19029ccd446eSAtari911### Fixed: Background CSS Property for Dark Mode Readers 19039ccd446eSAtari911- **Fixed:** Added `background: transparent` to CSS (was completely removed) 19049ccd446eSAtari911- **Fixed:** Now CSS readers can detect and modify background property 19059ccd446eSAtari911- **Why:** Inline styles override transparent, but CSS readers can now see the property 19069ccd446eSAtari911- **Result:** Dark mode plugins can now change calendar backgrounds! 19079ccd446eSAtari911 19089ccd446eSAtari911### The CSS Problem 19099ccd446eSAtari911 19109ccd446eSAtari911**Why backgrounds weren't changing with dark mode readers**: 19119ccd446eSAtari911 19129ccd446eSAtari911**Before (v5.3.5)**: 19139ccd446eSAtari911```css 19149ccd446eSAtari911.calendar-compact-grid tbody td { 19159ccd446eSAtari911 /* background removed - set via inline style */ 19169ccd446eSAtari911 border: 1px solid... 19179ccd446eSAtari911} 19189ccd446eSAtari911``` 19199ccd446eSAtari911 19209ccd446eSAtari911**Problem**: CSS property doesn't exist! 19219ccd446eSAtari911- Dark mode readers look for `background` property in CSS 19229ccd446eSAtari911- Can't override what doesn't exist 19239ccd446eSAtari911- Inline styles work, but readers can't modify them 19249ccd446eSAtari911 19259ccd446eSAtari911**After (v5.3.6)**: 19269ccd446eSAtari911```css 19279ccd446eSAtari911.calendar-compact-grid tbody td { 19289ccd446eSAtari911 background: transparent; /* Now exists! */ 19299ccd446eSAtari911 border: 1px solid... 19309ccd446eSAtari911} 19319ccd446eSAtari911``` 19329ccd446eSAtari911 19339ccd446eSAtari911**Solution**: 19349ccd446eSAtari911- Property exists in CSS 19359ccd446eSAtari911- Dark mode readers can override it 19369ccd446eSAtari911- Inline styles still override transparent 19379ccd446eSAtari911- Everyone wins! 19389ccd446eSAtari911 19399ccd446eSAtari911### What's Fixed 19409ccd446eSAtari911 19419ccd446eSAtari911**Elements now have background property**: 19429ccd446eSAtari911- `.calendar-compact-grid tbody td` ✓ 19439ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` ✓ 19449ccd446eSAtari911- `.event-compact-item` ✓ 19459ccd446eSAtari911- `.event-compact-item:hover` ✓ 19469ccd446eSAtari911 19479ccd446eSAtari911**How it works**: 19489ccd446eSAtari9111. CSS sets `background: transparent` (default) 19499ccd446eSAtari9112. Inline styles set actual color (overrides transparent) 19509ccd446eSAtari9113. Dark mode readers can override CSS property 19519ccd446eSAtari9114. Works for everyone! 19529ccd446eSAtari911 19539ccd446eSAtari911### Hearts in Explosion 19549ccd446eSAtari911 19559ccd446eSAtari911**Click anywhere → Hearts explode!** 19569ccd446eSAtari911 19579ccd446eSAtari911**Heart details**: 19589ccd446eSAtari911- Count: 8-12 per explosion (random) 19599ccd446eSAtari911- Size: 12-28px (random variety) 19609ccd446eSAtari911- Emoji: (pink heart) 19619ccd446eSAtari911- Direction: Random 360° 19629ccd446eSAtari911- Speed: 60-140px travel 19639ccd446eSAtari911- Duration: 0.8-1.2s 19649ccd446eSAtari911- z-index: 9999999 (always visible) 19659ccd446eSAtari911 19669ccd446eSAtari911**Combined with**: 19679ccd446eSAtari911- 25 glowing particles 19689ccd446eSAtari911- 40 pixel sparkles 19699ccd446eSAtari911- Bright flash 19709ccd446eSAtari911- **Total: 73-77 elements!** 19719ccd446eSAtari911 19729ccd446eSAtari911### Visual Result 19739ccd446eSAtari911 19749ccd446eSAtari911**Click explosion**: 19759ccd446eSAtari911``` 19769ccd446eSAtari911 ✦ • ✦ 19779ccd446eSAtari911 • • 19789ccd446eSAtari911✦ • ! • ✦ 19799ccd446eSAtari911 • • 19809ccd446eSAtari911 ✦ • ✦ 19819ccd446eSAtari911 19829ccd446eSAtari911Hearts + Particles + Pixels! 19839ccd446eSAtari911``` 19849ccd446eSAtari911 19859ccd446eSAtari911**Dark mode now works**: 19869ccd446eSAtari911```css 19879ccd446eSAtari911/* Dark mode reader can now do this: */ 19889ccd446eSAtari911.calendar-compact-grid tbody td { 19899ccd446eSAtari911 background: #000 !important; /* Works! */ 19909ccd446eSAtari911} 19919ccd446eSAtari911``` 19929ccd446eSAtari911 19939ccd446eSAtari911### Why Transparent Works 19949ccd446eSAtari911 19959ccd446eSAtari911**CSS Cascade**: 19969ccd446eSAtari9111. CSS: `background: transparent` (lowest priority) 19979ccd446eSAtari9112. Inline style: `background: #f5f5f5` (overrides CSS) 19989ccd446eSAtari9113. Dark mode CSS: `background: #000 !important` (overrides inline) 19999ccd446eSAtari911 20009ccd446eSAtari911**Perfect solution!** ✓ 20019ccd446eSAtari911 20029ccd446eSAtari911## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 20039ccd446eSAtari911 20049ccd446eSAtari911### Fixed: Particles Now Appear Above All Dialogs! 20059ccd446eSAtari911- **Fixed:** Increased z-index to 9999999 for all particles 20069ccd446eSAtari911- **Fixed:** Particles now visible above event dialogs, month picker, etc. 20079ccd446eSAtari911- **Result:** Cursor effects and explosions always visible! 20089ccd446eSAtari911 20099ccd446eSAtari911### The Z-Index Problem 20109ccd446eSAtari911 20119ccd446eSAtari911**Before (v5.3.4)**: 20129ccd446eSAtari911- Particles: z-index 9999 20139ccd446eSAtari911- Dialogs: z-index 10000-999999 20149ccd446eSAtari911- **Particles hidden behind dialogs!** 20159ccd446eSAtari911 20169ccd446eSAtari911**After (v5.3.5)**: 20179ccd446eSAtari911- Particles: z-index 9999999 20189ccd446eSAtari911- Trail: z-index 9999998 20199ccd446eSAtari911- Pixels: z-index 9999997 20209ccd446eSAtari911- **Particles ALWAYS on top!** 20219ccd446eSAtari911 20229ccd446eSAtari911### What's Fixed 20239ccd446eSAtari911 20249ccd446eSAtari911✅ **Main particles** (explosion orbs) 20259ccd446eSAtari911✅ **Cursor trail** (glowing dots) 20269ccd446eSAtari911✅ **Pixel sparkles** (tiny bright stars) 20279ccd446eSAtari911✅ **Flash effect** (click burst) 20289ccd446eSAtari911 20299ccd446eSAtari911**All now appear above**: 20309ccd446eSAtari911- Event dialog popups 20319ccd446eSAtari911- Month picker 20329ccd446eSAtari911- Day popups 20339ccd446eSAtari911- Any modal overlays 20349ccd446eSAtari911 20359ccd446eSAtari911### Visual Result 20369ccd446eSAtari911 20379ccd446eSAtari911**Moving cursor over dialog**: 20389ccd446eSAtari911``` 20399ccd446eSAtari911┌─────────────────────┐ 20409ccd446eSAtari911│ Event Dialog │ 20419ccd446eSAtari911│ ✦ • ✦ │ ← Sparkles visible! 20429ccd446eSAtari911│ → ✦ │ ← Cursor trail visible! 20439ccd446eSAtari911│ • ✦ • │ 20449ccd446eSAtari911└─────────────────────┘ 20459ccd446eSAtari911``` 20469ccd446eSAtari911 20479ccd446eSAtari911**Clicking on dialog**: 20489ccd446eSAtari911``` 20499ccd446eSAtari911┌─────────────────────┐ 20509ccd446eSAtari911│ ✦ • ✦ • ✦ │ 20519ccd446eSAtari911│ • ! • │ ← Explosion visible! 20529ccd446eSAtari911│ ✦ • ✦ • ✦ │ 20539ccd446eSAtari911└─────────────────────┘ 20549ccd446eSAtari911``` 20559ccd446eSAtari911 20569ccd446eSAtari911**Perfect visibility everywhere!** ✨ 20579ccd446eSAtari911 20589ccd446eSAtari911## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 20599ccd446eSAtari911 20609ccd446eSAtari911### Fixed: Month Picker Now Themed! 20619ccd446eSAtari911- **Fixed:** Jump to Month dialog now uses theme colors 20629ccd446eSAtari911- **Fixed:** Dialog background, borders, text all themed 20639ccd446eSAtari911- **Fixed:** Select dropdowns use theme colors 20649ccd446eSAtari911- **Fixed:** Buttons use theme accent colors 20659ccd446eSAtari911- **Result:** Month picker matches calendar theme! 20669ccd446eSAtari911 20679ccd446eSAtari911### Fixed: Cursor Effects Work in Dialogs! 20689ccd446eSAtari911- **Fixed:** Cursor trail now works when hovering over dialogs 20699ccd446eSAtari911- **Fixed:** Click explosions work when clicking inside dialogs 20709ccd446eSAtari911- **Technical:** Changed to capture phase event listeners 20719ccd446eSAtari911- **Result:** Effects work EVERYWHERE now! 20729ccd446eSAtari911 20739ccd446eSAtari911### Month Picker Theming 20749ccd446eSAtari911 20759ccd446eSAtari911**Before (v5.3.3)**: 20769ccd446eSAtari911- White background (hardcoded) 20779ccd446eSAtari911- Black text (hardcoded) 20789ccd446eSAtari911- No theme integration 20799ccd446eSAtari911- Looked out of place 20809ccd446eSAtari911 20819ccd446eSAtari911**After (v5.3.4)**: 20829ccd446eSAtari911- Dialog background: `theme.bg` 20839ccd446eSAtari911- Dialog border: `theme.border` 20849ccd446eSAtari911- Text color: `theme.text_primary` 20859ccd446eSAtari911- Dropdowns: `theme.cell_bg` + `theme.text_primary` 20869ccd446eSAtari911- Cancel button: `theme.cell_bg` 20879ccd446eSAtari911- Go button: `theme.border` (accent color) 20889ccd446eSAtari911 20899ccd446eSAtari911**Fully integrated!** ✅ 20909ccd446eSAtari911 20919ccd446eSAtari911--- 20929ccd446eSAtari911 20939ccd446eSAtari911### Theme Examples 20949ccd446eSAtari911 20959ccd446eSAtari911**Matrix Theme**: 20969ccd446eSAtari911``` 20979ccd446eSAtari911┌─────────────────────────┐ 20989ccd446eSAtari911│ Jump to Month │ ← Dark bg, green border 20999ccd446eSAtari911│ [February ▼] [2026 ▼] │ ← Dark dropdowns 21009ccd446eSAtari911│ [Cancel] [Go] │ ← Green "Go" button 21019ccd446eSAtari911└─────────────────────────┘ 21029ccd446eSAtari911``` 21039ccd446eSAtari911 21049ccd446eSAtari911**Pink Theme**: 21059ccd446eSAtari911``` 21069ccd446eSAtari911┌─────────────────────────┐ 21079ccd446eSAtari911│ Jump to Month │ ← Dark bg, pink border 21089ccd446eSAtari911│ [February ▼] [2026 ▼] │ ← Dark dropdowns 21099ccd446eSAtari911│ [Cancel] [Go] │ ← Pink "Go" button 21109ccd446eSAtari911└─────────────────────────┘ 21119ccd446eSAtari911With sparkle effects! ✨ 21129ccd446eSAtari911``` 21139ccd446eSAtari911 21149ccd446eSAtari911**Professional Theme**: 21159ccd446eSAtari911``` 21169ccd446eSAtari911┌─────────────────────────┐ 21179ccd446eSAtari911│ Jump to Month │ ← Clean bg, blue border 21189ccd446eSAtari911│ [February ▼] [2026 ▼] │ ← Clean dropdowns 21199ccd446eSAtari911│ [Cancel] [Go] │ ← Blue "Go" button 21209ccd446eSAtari911└─────────────────────────┘ 21219ccd446eSAtari911``` 21229ccd446eSAtari911 21239ccd446eSAtari911--- 21249ccd446eSAtari911 21259ccd446eSAtari911### Dialog Cursor Fix 21269ccd446eSAtari911 21279ccd446eSAtari911**The Problem**: 21289ccd446eSAtari911Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 21299ccd446eSAtari911 21309ccd446eSAtari911**The Solution**: 21319ccd446eSAtari911Use **capture phase** event listeners: 21329ccd446eSAtari911```javascript 21339ccd446eSAtari911// Before (bubbling phase) 21349ccd446eSAtari911document.addEventListener('click', handler) 21359ccd446eSAtari911 21369ccd446eSAtari911// After (capture phase) 21379ccd446eSAtari911document.addEventListener('click', handler, true) 21389ccd446eSAtari911 ↑ 21399ccd446eSAtari911 Capture phase! 21409ccd446eSAtari911``` 21419ccd446eSAtari911 21429ccd446eSAtari911**Capture phase runs BEFORE stopPropagation!** 21439ccd446eSAtari911 21449ccd446eSAtari911--- 21459ccd446eSAtari911 21469ccd446eSAtari911### Now Works Everywhere 21479ccd446eSAtari911 21489ccd446eSAtari911✅ **Calendar area** 21499ccd446eSAtari911✅ **Event dialogs** 21509ccd446eSAtari911✅ **Month picker dialog** 21519ccd446eSAtari911✅ **Day popup dialogs** 21529ccd446eSAtari911✅ **Anywhere on screen** 21539ccd446eSAtari911 21549ccd446eSAtari911**No more blocked effects!** 21559ccd446eSAtari911 21569ccd446eSAtari911--- 21579ccd446eSAtari911 21589ccd446eSAtari911### Technical Details 21599ccd446eSAtari911 21609ccd446eSAtari911**Event phases**: 21619ccd446eSAtari911``` 21629ccd446eSAtari9111. Capture phase ← We listen here now! 21639ccd446eSAtari9112. Target phase 21649ccd446eSAtari9113. Bubbling phase ← stopPropagation blocks this 21659ccd446eSAtari911``` 21669ccd446eSAtari911 21679ccd446eSAtari911**By using capture phase**: 21689ccd446eSAtari911- Events caught before stopPropagation 21699ccd446eSAtari911- Works in all dialogs 21709ccd446eSAtari911- No conflicts with dialog logic 21719ccd446eSAtari911 21729ccd446eSAtari911--- 21739ccd446eSAtari911 21749ccd446eSAtari911### All Dialogs Checked 21759ccd446eSAtari911 21769ccd446eSAtari911✅ **Month picker** - Now themed! 21779ccd446eSAtari911✅ **Event dialog** - Already themed 21789ccd446eSAtari911✅ **Day popup** - Already themed 21799ccd446eSAtari911 21809ccd446eSAtari911**Everything consistent!** 21819ccd446eSAtari911 21829ccd446eSAtari911--- 21839ccd446eSAtari911 21849ccd446eSAtari911## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 21859ccd446eSAtari911 21869ccd446eSAtari911### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 21879ccd446eSAtari911- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 21889ccd446eSAtari911- **Added:** 40 pixel sparkles in click explosions 21899ccd446eSAtari911- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 21909ccd446eSAtari911- **Result:** Maximum sparkle effect! 21919ccd446eSAtari911 21929ccd446eSAtari911### Tiny Pixel Sparkles 21939ccd446eSAtari911 21949ccd446eSAtari911**3-6 tiny bright pixels appear with each cursor movement!** 21959ccd446eSAtari911 21969ccd446eSAtari911**Characteristics**: 21979ccd446eSAtari911- Size: 1-2px (single pixel appearance!) 21989ccd446eSAtari911- Colors: Bright neon whites and pinks 21999ccd446eSAtari911 - Pure white (#fff) - 40% chance 22009ccd446eSAtari911 - Hot pink (#ff1493) 22019ccd446eSAtari911 - Pink (#ff69b4) 22029ccd446eSAtari911 - Light pink (#ffb6c1) 22039ccd446eSAtari911 - Soft pink (#ff85c1) 22049ccd446eSAtari911- Glow: Triple-layer shadow (intense!) 22059ccd446eSAtari911- Spawn: Random 30px radius around cursor 22069ccd446eSAtari911- Animations: 22079ccd446eSAtari911 - 50% twinkle in place 22089ccd446eSAtari911 - 50% float upward 22099ccd446eSAtari911 22109ccd446eSAtari911**Creates a cloud of sparkles around your cursor!** 22119ccd446eSAtari911 22129ccd446eSAtari911--- 22139ccd446eSAtari911 22149ccd446eSAtari911### Click Explosion Enhanced 22159ccd446eSAtari911 22169ccd446eSAtari911**Now with 40 EXTRA pixel sparkles!** 22179ccd446eSAtari911 22189ccd446eSAtari911**Click anywhere → BIG BOOM**: 22199ccd446eSAtari911- 25 main glowing particles (6-10px) 22209ccd446eSAtari911- **40 tiny pixel sparkles (1-2px)** ← NEW! 22219ccd446eSAtari911- Bright white flash 22229ccd446eSAtari911- Total: 65+ visual elements! 22239ccd446eSAtari911 22249ccd446eSAtari911**Pixel sparkles in explosion**: 22259ccd446eSAtari911- Shoot outward in all directions 22269ccd446eSAtari911- Random distances (30-110px) 22279ccd446eSAtari911- Multiple bright colors 22289ccd446eSAtari911- Some twinkle, some explode 22299ccd446eSAtari911- Creates stellar effect! 22309ccd446eSAtari911 22319ccd446eSAtari911--- 22329ccd446eSAtari911 22339ccd446eSAtari911### Entire Screen Coverage 22349ccd446eSAtari911 22359ccd446eSAtari911**Effects now work EVERYWHERE!** 22369ccd446eSAtari911 22379ccd446eSAtari911**Before (v5.3.2)**: 22389ccd446eSAtari911- Only inside calendar viewport 22399ccd446eSAtari911- Limited to calendar area 22409ccd446eSAtari911 22419ccd446eSAtari911**After (v5.3.3)**: 22429ccd446eSAtari911- Works on entire screen! ✓ 22439ccd446eSAtari911- Cursor trail follows everywhere 22449ccd446eSAtari911- Click explosions anywhere 22459ccd446eSAtari911- Used `position: fixed` + `clientX/Y` 22469ccd446eSAtari911 22479ccd446eSAtari911**Move anywhere on the page for sparkles!** 22489ccd446eSAtari911 22499ccd446eSAtari911--- 22509ccd446eSAtari911 22519ccd446eSAtari911### Visual Effect 22529ccd446eSAtari911 22539ccd446eSAtari911**Cursor movement**: 22549ccd446eSAtari911``` 22559ccd446eSAtari911 • ✦ • ← Tiny pixels 22569ccd446eSAtari911 • ✦ • ← Glowing trail 22579ccd446eSAtari911✦ • → • ✦ ← Cursor 22589ccd446eSAtari911 • ✦ • ← Mixed sizes 22599ccd446eSAtari911 • ✦ • ← Sparkle cloud 22609ccd446eSAtari911``` 22619ccd446eSAtari911 22629ccd446eSAtari911**Click explosion**: 22639ccd446eSAtari911``` 22649ccd446eSAtari911 ✦ • ✦ • ✦ 22659ccd446eSAtari911 ✦ • • ✦ 22669ccd446eSAtari911✦ • ! • ✦ 22679ccd446eSAtari911 ✦ • • ✦ 22689ccd446eSAtari911 ✦ • ✦ • ✦ 22699ccd446eSAtari911 22709ccd446eSAtari91165+ particles total! 22719ccd446eSAtari911``` 22729ccd446eSAtari911 22739ccd446eSAtari911--- 22749ccd446eSAtari911 22759ccd446eSAtari911### Sparkle Details 22769ccd446eSAtari911 22779ccd446eSAtari911**Trail Pixels** (3-6 per movement): 22789ccd446eSAtari911- Size: 1-2px 22799ccd446eSAtari911- Spawn rate: Every 40ms 22809ccd446eSAtari911- Spread: 30px radius 22819ccd446eSAtari911- Duration: 0.6-0.8s 22829ccd446eSAtari911- 50% twinkle, 50% float 22839ccd446eSAtari911 22849ccd446eSAtari911**Explosion Pixels** (40 total): 22859ccd446eSAtari911- Size: 1-3px 22869ccd446eSAtari911- Spread: 30-110px radius 22879ccd446eSAtari911- Duration: 0.4-0.8s 22889ccd446eSAtari911- All directions 22899ccd446eSAtari911- Intense glow 22909ccd446eSAtari911 22919ccd446eSAtari911**Main Particles** (25 total): 22929ccd446eSAtari911- Size: 4-10px 22939ccd446eSAtari911- Spread: 50-150px 22949ccd446eSAtari911- Full color palette 22959ccd446eSAtari911- Original firework effect 22969ccd446eSAtari911 22979ccd446eSAtari911--- 22989ccd446eSAtari911 22999ccd446eSAtari911### Color Distribution 23009ccd446eSAtari911 23019ccd446eSAtari911**Pixel sparkles favor white**: 23029ccd446eSAtari911- 40% pure white (#fff) - brightest! 23039ccd446eSAtari911- 60% pink shades - variety 23049ccd446eSAtari911 23059ccd446eSAtari911**Creates brilliant sparkle effect!** 23069ccd446eSAtari911 23079ccd446eSAtari911--- 23089ccd446eSAtari911 23099ccd446eSAtari911### Performance 23109ccd446eSAtari911 23119ccd446eSAtari911**Still optimized**: 23129ccd446eSAtari911- Trail: 30ms throttle 23139ccd446eSAtari911- Pixels: 40ms throttle 23149ccd446eSAtari911- Auto-cleanup 23159ccd446eSAtari911- Hardware accelerated 23169ccd446eSAtari911- Smooth 60fps 23179ccd446eSAtari911 23189ccd446eSAtari911**Lots of sparkles, zero lag!** 23199ccd446eSAtari911 23209ccd446eSAtari911--- 23219ccd446eSAtari911 23229ccd446eSAtari911### Full-Screen Magic 23239ccd446eSAtari911 23249ccd446eSAtari911**Pink theme calendar detected**: 23259ccd446eSAtari911```javascript 23269ccd446eSAtari911if (pink calendar exists) { 23279ccd446eSAtari911 Enable effects for ENTIRE SCREEN 23289ccd446eSAtari911 Not just calendar area 23299ccd446eSAtari911} 23309ccd446eSAtari911``` 23319ccd446eSAtari911 23329ccd446eSAtari911**Works everywhere on page!** ✨ 23339ccd446eSAtari911 23349ccd446eSAtari911--- 23359ccd446eSAtari911 23369ccd446eSAtari911## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 23379ccd446eSAtari911 23389ccd446eSAtari911### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 23399ccd446eSAtari911- **Removed:** Emoji sparkle images (✨) 23409ccd446eSAtari911- **Added:** Glowing pink particle trail following cursor 23419ccd446eSAtari911- **Added:** FIREWORKS explosion on click! 23429ccd446eSAtari911- **Result:** Beautiful glowing effects, not emoji! 23439ccd446eSAtari911 23449ccd446eSAtari911### Glowing Cursor Trail 23459ccd446eSAtari911 23469ccd446eSAtari911**Pink glowing dots follow your cursor!** 23479ccd446eSAtari911- Small glowing pink orbs (8px) 23489ccd446eSAtari911- Radial gradient glow effect 23499ccd446eSAtari911- Multiple box-shadows for depth 23509ccd446eSAtari911- Fade out smoothly (0.5s) 23519ccd446eSAtari911- Throttled to 30ms for smoothness 23529ccd446eSAtari911 23539ccd446eSAtari911``` 23549ccd446eSAtari911 • • 23559ccd446eSAtari911 • → • ← Your cursor 23569ccd446eSAtari911 • • 23579ccd446eSAtari911``` 23589ccd446eSAtari911 23599ccd446eSAtari911**Not emoji - actual glowing particles!** 23609ccd446eSAtari911 23619ccd446eSAtari911--- 23629ccd446eSAtari911 23639ccd446eSAtari911### Click Fireworks! 23649ccd446eSAtari911 23659ccd446eSAtari911**Click anywhere on the calendar → BOOM!** 23669ccd446eSAtari911 23679ccd446eSAtari911**20 pink particles explode outward!** 23689ccd446eSAtari911- Radial burst pattern (360° coverage) 23699ccd446eSAtari911- Random speeds (50-150px travel) 23709ccd446eSAtari911- 4 shades of pink: 23719ccd446eSAtari911 - Hot pink (#ff1493) 23729ccd446eSAtari911 - Pink (#ff69b4) 23739ccd446eSAtari911 - Light pink (#ff85c1) 23749ccd446eSAtari911 - Very light pink (#ffc0cb) 23759ccd446eSAtari911- Random sizes (4-10px) 23769ccd446eSAtari911- Individual glowing halos 23779ccd446eSAtari911- Smooth explosion animation 23789ccd446eSAtari911 23799ccd446eSAtari911**Plus a bright flash at click point!** 23809ccd446eSAtari911- 30px radius glow 23819ccd446eSAtari911- Intense pink flash 23829ccd446eSAtari911- Fades quickly (0.3s) 23839ccd446eSAtari911 23849ccd446eSAtari911--- 23859ccd446eSAtari911 23869ccd446eSAtari911### Visual Effect 23879ccd446eSAtari911 23889ccd446eSAtari911**Cursor movement**: 23899ccd446eSAtari911``` 23909ccd446eSAtari911 • 23919ccd446eSAtari911 • • • 23929ccd446eSAtari911 • → • ← Glowing trail 23939ccd446eSAtari911 • • • 23949ccd446eSAtari911 • 23959ccd446eSAtari911``` 23969ccd446eSAtari911 23979ccd446eSAtari911**Click explosion**: 23989ccd446eSAtari911``` 23999ccd446eSAtari911 • • • 24009ccd446eSAtari911 • • 24019ccd446eSAtari911 • BOOM! • ← 20 particles 24029ccd446eSAtari911 • • 24039ccd446eSAtari911 • • • 24049ccd446eSAtari911``` 24059ccd446eSAtari911 24069ccd446eSAtari911**All particles glow with pink halos!** 24079ccd446eSAtari911 24089ccd446eSAtari911--- 24099ccd446eSAtari911 24109ccd446eSAtari911### Particle Details 24119ccd446eSAtari911 24129ccd446eSAtari911**Trail Particles**: 24139ccd446eSAtari911- Size: 8x8px 24149ccd446eSAtari911- Color: Pink radial gradient 24159ccd446eSAtari911- Shadow: 10px + 20px glow layers 24169ccd446eSAtari911- Duration: 0.5s fade 24179ccd446eSAtari911- Rate: 30ms throttle 24189ccd446eSAtari911 24199ccd446eSAtari911**Explosion Particles**: 24209ccd446eSAtari911- Size: 4-10px (random) 24219ccd446eSAtari911- Colors: 4 pink shades (random) 24229ccd446eSAtari911- Shadow: 10px + 20px glow (matches color) 24239ccd446eSAtari911- Duration: 0.6-1.0s (random) 24249ccd446eSAtari911- Pattern: Perfect circle burst 24259ccd446eSAtari911 24269ccd446eSAtari911**Flash Effect**: 24279ccd446eSAtari911- Size: 30x30px 24289ccd446eSAtari911- Color: Bright hot pink 24299ccd446eSAtari911- Shadow: 30px + 50px mega-glow 24309ccd446eSAtari911- Duration: 0.3s instant fade 24319ccd446eSAtari911 24329ccd446eSAtari911--- 24339ccd446eSAtari911 24349ccd446eSAtari911### Performance 24359ccd446eSAtari911 24369ccd446eSAtari911**Optimized for smoothness**: 24379ccd446eSAtari911- Trail throttled to 30ms 24389ccd446eSAtari911- Auto-cleanup after animations 24399ccd446eSAtari911- CSS hardware acceleration 24409ccd446eSAtari911- No memory leaks 24419ccd446eSAtari911- Smooth 60fps 24429ccd446eSAtari911 24439ccd446eSAtari911**Won't slow you down!** 24449ccd446eSAtari911 24459ccd446eSAtari911--- 24469ccd446eSAtari911 24479ccd446eSAtari911### Comparison 24489ccd446eSAtari911 24499ccd446eSAtari911**Before (v5.3.1)**: 24509ccd446eSAtari911- ✨ Emoji sparkle images 24519ccd446eSAtari911- Static unicode characters 24529ccd446eSAtari911- Limited visual impact 24539ccd446eSAtari911 24549ccd446eSAtari911**After (v5.3.2)**: 24559ccd446eSAtari911- Glowing pink particles 24569ccd446eSAtari911- Radial gradients + shadows 24579ccd446eSAtari911- Beautiful firework explosions 24589ccd446eSAtari911- Much more impressive! 24599ccd446eSAtari911 24609ccd446eSAtari911--- 24619ccd446eSAtari911 24629ccd446eSAtari911### Only Pink Theme 24639ccd446eSAtari911 24649ccd446eSAtari911**These effects only appear**: 24659ccd446eSAtari911- On `.calendar-theme-pink` elements 24669ccd446eSAtari911- Other themes unaffected 24679ccd446eSAtari911- Pure pink magic! 24689ccd446eSAtari911 24699ccd446eSAtari911--- 24709ccd446eSAtari911 24719ccd446eSAtari911## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 24729ccd446eSAtari911 24739ccd446eSAtari911### ✨ Added: MySpace-Style Sparkle Trail! 24749ccd446eSAtari911- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 24759ccd446eSAtari911- **Toned down:** Reduced glow effects for better taste 24769ccd446eSAtari911- **Added:** Sparkles appear on cell hover 24779ccd446eSAtari911- **Added:** Sparkles on event hover (left and right sides!) 24789ccd446eSAtari911- **Added:** Sparkles on today's cell corners 24799ccd446eSAtari911- **Added:** Sparkles on navigation buttons 24809ccd446eSAtari911- **Added:** Sparkles in calendar header 24819ccd446eSAtari911- **Result:** Pure nostalgic MySpace magic! ✨ 24829ccd446eSAtari911 24839ccd446eSAtari911### MySpace Sparkle Cursor Trail 24849ccd446eSAtari911 24859ccd446eSAtari911**The classic effect from 2006!** 24869ccd446eSAtari911- Sparkles follow your cursor as you move 24879ccd446eSAtari911- Random sizes (12-22px) 24889ccd446eSAtari911- Random slight offsets for natural feel 24899ccd446eSAtari911- Float up and fade out animation 24909ccd446eSAtari911- Throttled to 50ms (smooth, not laggy) 24919ccd446eSAtari911- Only on pink theme calendars 24929ccd446eSAtari911 24939ccd446eSAtari911``` 24949ccd446eSAtari911 ✨ 24959ccd446eSAtari911 ✨ ✨ 24969ccd446eSAtari911✨ → ✨ (cursor trail) 24979ccd446eSAtari911 ✨ ✨ 24989ccd446eSAtari911 ✨ 24999ccd446eSAtari911``` 25009ccd446eSAtari911 25019ccd446eSAtari911**Pure nostalgia!** 25029ccd446eSAtari911 25039ccd446eSAtari911--- 25049ccd446eSAtari911 25059ccd446eSAtari911### Sparkles Everywhere 25069ccd446eSAtari911 25079ccd446eSAtari911**Calendar cells**: 25089ccd446eSAtari911- Hover over any day → ✨ floats up 25099ccd446eSAtari911- Smooth 1.5s animation 25109ccd446eSAtari911- Centered sparkle 25119ccd446eSAtari911 25129ccd446eSAtari911**Event items**: 25139ccd446eSAtari911- Hover → ✨ on left side 25149ccd446eSAtari911- Hover → ✨ on right side 25159ccd446eSAtari911- Staggered animations (0.4s delay) 25169ccd446eSAtari911- Continuous twinkling 25179ccd446eSAtari911 25189ccd446eSAtari911**Today's cell**: 25199ccd446eSAtari911- ✨ in top-right corner (continuous) 25209ccd446eSAtari911- ✨ in bottom-left corner (offset timing) 25219ccd446eSAtari911- Always sparkling! 25229ccd446eSAtari911 25239ccd446eSAtari911**Navigation buttons**: 25249ccd446eSAtari911- Hover on < or > → ✨ appears top-right 25259ccd446eSAtari911- One-time float animation 25269ccd446eSAtari911 25279ccd446eSAtari911**Calendar header**: 25289ccd446eSAtari911- ✨ on left side (continuous) 25299ccd446eSAtari911- ✨ on right side (offset 1s) 25309ccd446eSAtari911- Always twinkling 25319ccd446eSAtari911 25329ccd446eSAtari911--- 25339ccd446eSAtari911 25349ccd446eSAtari911### Toned Down Glows 25359ccd446eSAtari911 25369ccd446eSAtari911**Before (v5.3.0)**: TOO MUCH GLOW! 25379ccd446eSAtari911- 50px shadows 25389ccd446eSAtari911- 4-layer effects 25399ccd446eSAtari911- Overwhelming 25409ccd446eSAtari911 25419ccd446eSAtari911**After (v5.3.1)**: Just right! 25429ccd446eSAtari911- 8-15px max shadows (subtle) 25439ccd446eSAtari911- 2-layer effects 25449ccd446eSAtari911- Professional with personality 25459ccd446eSAtari911 25469ccd446eSAtari911**Glow reductions**: 25479ccd446eSAtari911- Today shimmer: 35px → 12px 25489ccd446eSAtari911- Today hover: 50px → 15px 25499ccd446eSAtari911- Event glow: 18px → 6px 25509ccd446eSAtari911- Badge pulse: 25px → 8px 25519ccd446eSAtari911- Container glow: 20px → 8px 25529ccd446eSAtari911 25539ccd446eSAtari911**Much more tasteful!** 25549ccd446eSAtari911 25559ccd446eSAtari911--- 25569ccd446eSAtari911 25579ccd446eSAtari911### Sparkle Animations 25589ccd446eSAtari911 25599ccd446eSAtari911**sparkle-twinkle** (0.8s): 25609ccd446eSAtari911``` 25619ccd446eSAtari911Opacity: 0 → 1 → 1 → 0 25629ccd446eSAtari911Scale: 0 → 1 → 1 → 0 25639ccd446eSAtari911Rotation: 0° → 180° → 360° 25649ccd446eSAtari911``` 25659ccd446eSAtari911 25669ccd446eSAtari911**sparkle-float** (1.5s): 25679ccd446eSAtari911``` 25689ccd446eSAtari911Moves up: 0px → -50px 25699ccd446eSAtari911Opacity: 0 → 1 → 1 → 0 25709ccd446eSAtari911Scale: 0 → 1 → 0.8 → 0 25719ccd446eSAtari911``` 25729ccd446eSAtari911 25739ccd446eSAtari911**Pure MySpace magic!** ✨ 25749ccd446eSAtari911 25759ccd446eSAtari911--- 25769ccd446eSAtari911 25779ccd446eSAtari911### Where Sparkles Appear 25789ccd446eSAtari911 25799ccd446eSAtari911✅ **Cursor trail** (continuous while moving) 25809ccd446eSAtari911✅ **Calendar cells** (on hover) 25819ccd446eSAtari911✅ **Event items** (on hover, left + right) 25829ccd446eSAtari911✅ **Today's cell** (continuous, corners) 25839ccd446eSAtari911✅ **Navigation buttons** (on hover) 25849ccd446eSAtari911✅ **Calendar header** (continuous, sides) 25859ccd446eSAtari911 25869ccd446eSAtari911**Sparkles EVERYWHERE!** ✨✨✨ 25879ccd446eSAtari911 25889ccd446eSAtari911--- 25899ccd446eSAtari911 25909ccd446eSAtari911### Performance 25919ccd446eSAtari911 25929ccd446eSAtari911**Cursor trail**: 25939ccd446eSAtari911- Throttled to 50ms 25949ccd446eSAtari911- Auto-cleanup after 1s 25959ccd446eSAtari911- No memory leaks 25969ccd446eSAtari911- Smooth 60fps 25979ccd446eSAtari911 25989ccd446eSAtari911**CSS animations**: 25999ccd446eSAtari911- Hardware accelerated 26009ccd446eSAtari911- No JavaScript overhead (except cursor) 26019ccd446eSAtari911- Efficient transforms 26029ccd446eSAtari911 26039ccd446eSAtari911**Won't slow down your browser!** 26049ccd446eSAtari911 26059ccd446eSAtari911--- 26069ccd446eSAtari911 26079ccd446eSAtari911### Pure Nostalgia 26089ccd446eSAtari911 26099ccd446eSAtari911**Remember MySpace profiles?** 26109ccd446eSAtari911- Glitter graphics ✨ 26119ccd446eSAtari911- Sparkle cursors ✨ 26129ccd446eSAtari911- Auto-play music (ok, we didn't add that) 26139ccd446eSAtari911- Animated GIF backgrounds 26149ccd446eSAtari911- Comic Sans everywhere 26159ccd446eSAtari911 26169ccd446eSAtari911**We brought back the sparkles!** ✨ 26179ccd446eSAtari911 26189ccd446eSAtari911--- 26199ccd446eSAtari911 26209ccd446eSAtari911### Theme Comparison 26219ccd446eSAtari911 26229ccd446eSAtari911**Other themes**: Professional and clean 26239ccd446eSAtari911**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 26249ccd446eSAtari911 26259ccd446eSAtari911**Only pink theme gets the magic!** 26269ccd446eSAtari911 26279ccd446eSAtari911--- 26289ccd446eSAtari911 26299ccd446eSAtari911## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 26309ccd446eSAtari911 26319ccd446eSAtari911### Added: Pink Theme Gets BLING! 26329ccd446eSAtari911- **Added:** Shimmering animation for today's cell 26339ccd446eSAtari911- **Added:** Sparkling text effect on today's date 26349ccd446eSAtari911- **Added:** Glowing pulse for event bars 26359ccd446eSAtari911- **Added:** Gradient shimmer on headers 26369ccd446eSAtari911- **Added:** Extra glow on hover effects 26379ccd446eSAtari911- **Added:** Pulsing urgent badge for past due items 26389ccd446eSAtari911- **Result:** Pink theme is now FABULOUS! ✨ 26399ccd446eSAtari911 26409ccd446eSAtari911### Shimmer Effects 26419ccd446eSAtari911 26429ccd446eSAtari911**Today's Cell**: 26439ccd446eSAtari911- Continuous shimmer animation (2 second loop) 26449ccd446eSAtari911- Multi-layer glow effect 26459ccd446eSAtari911- Pink and hot pink overlapping shadows 26469ccd446eSAtari911- Pulses from subtle to intense 26479ccd446eSAtari911- Extra sparkle on hover 26489ccd446eSAtari911 26499ccd446eSAtari911**Today's Date Number**: 26509ccd446eSAtari911- Sparkle animation (1.5 second loop) 26519ccd446eSAtari911- Text shadow glow effect 26529ccd446eSAtari911- Slight scale pulse (100% → 105%) 26539ccd446eSAtari911- Pink to hot pink shadow transition 26549ccd446eSAtari911 26559ccd446eSAtari911### Glow Effects 26569ccd446eSAtari911 26579ccd446eSAtari911**Event Bars**: 26589ccd446eSAtari911- Continuous glow pulse (2 second loop) 26599ccd446eSAtari911- Uses event's own color 26609ccd446eSAtari911- Adds pink accent glow layer 26619ccd446eSAtari911- Creates depth and dimension 26629ccd446eSAtari911 26639ccd446eSAtari911**Event Items**: 26649ccd446eSAtari911- Subtle base glow 26659ccd446eSAtari911- Enhanced glow on hover 26669ccd446eSAtari911- Slight slide animation on hover 26679ccd446eSAtari911- Professional yet playful 26689ccd446eSAtari911 26699ccd446eSAtari911### Gradient Shimmer 26709ccd446eSAtari911 26719ccd446eSAtari911**Headers**: 26729ccd446eSAtari911- Animated gradient background 26739ccd446eSAtari911- 3-color pink gradient flow 26749ccd446eSAtari911- Smooth 3-second animation 26759ccd446eSAtari911- Creates movement and life 26769ccd446eSAtari911- Applies to calendar header and event list header 26779ccd446eSAtari911 26789ccd446eSAtari911### Badge Effects 26799ccd446eSAtari911 26809ccd446eSAtari911**TODAY Badge**: 26819ccd446eSAtari911- Sparkle animation 26829ccd446eSAtari911- Synchronized with today's date 26839ccd446eSAtari911- Extra prominence 26849ccd446eSAtari911 26859ccd446eSAtari911**PAST DUE Badge**: 26869ccd446eSAtari911- Urgent pulsing effect (1 second loop) 26879ccd446eSAtari911- Orange glow intensifies 26889ccd446eSAtari911- Draws attention to urgent items 26899ccd446eSAtari911- Faster pulse for urgency 26909ccd446eSAtari911 26919ccd446eSAtari911### Container Bling 26929ccd446eSAtari911 26939ccd446eSAtari911**Main Container**: 26949ccd446eSAtari911- Multi-layer pink glow 26959ccd446eSAtari911- Soft outer shadow 26969ccd446eSAtari911- Creates floating effect 26979ccd446eSAtari911- Subtle but elegant 26989ccd446eSAtari911 26999ccd446eSAtari911### Animation Details 27009ccd446eSAtari911 27019ccd446eSAtari911**pink-shimmer** (2s loop): 27029ccd446eSAtari911``` 27039ccd446eSAtari911Start: Subtle 5px glow 27049ccd446eSAtari911Peak: Intense 35px multi-layer glow 27059ccd446eSAtari911End: Back to subtle 27069ccd446eSAtari911``` 27079ccd446eSAtari911 27089ccd446eSAtari911**pink-sparkle** (1.5s loop): 27099ccd446eSAtari911``` 27109ccd446eSAtari911Start: Base glow + scale 1.0 27119ccd446eSAtari911Peak: Intense glow + scale 1.05 27129ccd446eSAtari911End: Back to base 27139ccd446eSAtari911``` 27149ccd446eSAtari911 27159ccd446eSAtari911**pink-glow-pulse** (2s loop): 27169ccd446eSAtari911``` 27179ccd446eSAtari911Start: Small glow (3px, 6px) 27189ccd446eSAtari911Peak: Large glow (6px, 12px, 18px) 27199ccd446eSAtari911End: Back to small 27209ccd446eSAtari911``` 27219ccd446eSAtari911 27229ccd446eSAtari911**pink-gradient-shimmer** (3s loop): 27239ccd446eSAtari911``` 27249ccd446eSAtari911Gradient flows across element 27259ccd446eSAtari911Creates wave effect 27269ccd446eSAtari911Smooth continuous motion 27279ccd446eSAtari911``` 27289ccd446eSAtari911 27299ccd446eSAtari911**pink-pulse-urgent** (1s loop - faster!): 27309ccd446eSAtari911``` 27319ccd446eSAtari911Start: Orange glow 5px 27329ccd446eSAtari911Peak: Orange glow 25px (intense) 27339ccd446eSAtari911End: Back to 5px 27349ccd446eSAtari911``` 27359ccd446eSAtari911 27369ccd446eSAtari911### Visual Experience 27379ccd446eSAtari911 27389ccd446eSAtari911**Today's Cell**: 27399ccd446eSAtari911``` 27409ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 27419ccd446eSAtari911│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 27429ccd446eSAtari911│ │ │[9]│ │ │ │ │ ← Sparkles 27439ccd446eSAtari911│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 27449ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 27459ccd446eSAtari911``` 27469ccd446eSAtari911 27479ccd446eSAtari911**Event Bars**: 27489ccd446eSAtari911``` 27499ccd446eSAtari911━━━━━━━ ← Glows and pulses 27509ccd446eSAtari911━━━━━━━ ← Each bar animated 27519ccd446eSAtari911━━━━━━━ ← Creates rhythm 27529ccd446eSAtari911``` 27539ccd446eSAtari911 27549ccd446eSAtari911**Headers**: 27559ccd446eSAtari911``` 27569ccd446eSAtari911╔═════════════════════╗ 27579ccd446eSAtari911║ ~~~~~~~~~~ ║ ← Gradient flows 27589ccd446eSAtari911║ February 2026 ║ ← Shimmer effect 27599ccd446eSAtari911╚═════════════════════╝ 27609ccd446eSAtari911``` 27619ccd446eSAtari911 27629ccd446eSAtari911### Theme Comparison 27639ccd446eSAtari911 27649ccd446eSAtari911**Before (v5.2.8)**: 27659ccd446eSAtari911- Pink colors 27669ccd446eSAtari911- Static elements 27679ccd446eSAtari911- Standard shadows 27689ccd446eSAtari911 27699ccd446eSAtari911**After (v5.3.0)**: 27709ccd446eSAtari911- Pink colors ✓ 27719ccd446eSAtari911- Animated shimmer ✨ 27729ccd446eSAtari911- Sparkling effects 27739ccd446eSAtari911- Glowing pulses ✨ 27749ccd446eSAtari911- Moving gradients 27759ccd446eSAtari911- BLING! 27769ccd446eSAtari911 27779ccd446eSAtari911### Performance 27789ccd446eSAtari911 27799ccd446eSAtari911**All animations**: 27809ccd446eSAtari911- Hardware accelerated (transform, opacity) 27819ccd446eSAtari911- Smooth 60fps 27829ccd446eSAtari911- CSS animations (no JavaScript) 27839ccd446eSAtari911- Minimal CPU usage 27849ccd446eSAtari911- Disabled in reduced-motion preference 27859ccd446eSAtari911 27869ccd446eSAtari911### Only for Pink Theme 27879ccd446eSAtari911 27889ccd446eSAtari911**Effects only apply when**: 27899ccd446eSAtari911```css 27909ccd446eSAtari911.calendar-theme-pink 27919ccd446eSAtari911``` 27929ccd446eSAtari911 27939ccd446eSAtari911**Other themes unaffected**: 27949ccd446eSAtari911- Matrix stays Matrix 27959ccd446eSAtari911- Professional stays Professional 27969ccd446eSAtari911- Purple stays Purple 27979ccd446eSAtari911- Wiki stays clean 27989ccd446eSAtari911 27999ccd446eSAtari911**Pink gets all the bling!** ✨ 28009ccd446eSAtari911 28019ccd446eSAtari911### Use Cases 28029ccd446eSAtari911 28039ccd446eSAtari911**Perfect for**: 28049ccd446eSAtari911- Celebrating occasions 28059ccd446eSAtari911- Fun team calendars 28069ccd446eSAtari911- Personal style expression 28079ccd446eSAtari911- Standing out 28089ccd446eSAtari911- Making calendar time fabulous 28099ccd446eSAtari911 28109ccd446eSAtari911**Not just pink, but BLING pink!** ✨ 28119ccd446eSAtari911 28129ccd446eSAtari911## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 28139ccd446eSAtari911 28149ccd446eSAtari911### Fixed: Today's Date Box Now Uses Theme Colors 28159ccd446eSAtari911- **Fixed:** Today's day number box now uses theme border color 28169ccd446eSAtari911- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 28179ccd446eSAtari911- **Result:** Today box matches the theme perfectly! 28189ccd446eSAtari911 28199ccd446eSAtari911### The Issue 28209ccd446eSAtari911 28219ccd446eSAtari911Today's date had a hardcoded green box: 28229ccd446eSAtari911 28239ccd446eSAtari911**In style.css**: 28249ccd446eSAtari911```css 28259ccd446eSAtari911.cal-today .day-num { 28269ccd446eSAtari911 background: #008800; /* Hardcoded green! */ 28279ccd446eSAtari911 color: white; 28289ccd446eSAtari911} 28299ccd446eSAtari911``` 28309ccd446eSAtari911 28319ccd446eSAtari911**Didn't adapt to themes at all!** 28329ccd446eSAtari911 28339ccd446eSAtari911### The Fix 28349ccd446eSAtari911 28359ccd446eSAtari911**Now uses theme colors**: 28369ccd446eSAtari911```php 28379ccd446eSAtari911// Today's day number 28389ccd446eSAtari911if ($isToday) { 28399ccd446eSAtari911 background: $themeStyles['border'], // Theme's accent color! 28409ccd446eSAtari911 color: (professional theme) ? white : bg color 28419ccd446eSAtari911} 28429ccd446eSAtari911``` 28439ccd446eSAtari911 28449ccd446eSAtari911### Theme Examples 28459ccd446eSAtari911 28469ccd446eSAtari911**Matrix Theme**: 28479ccd446eSAtari911- Box background: `#00cc07` (matrix green) 28489ccd446eSAtari911- Text color: `#242424` (dark background) 28499ccd446eSAtari911 28509ccd446eSAtari911**Purple Theme**: 28519ccd446eSAtari911- Box background: `#9b59b6` (purple) 28529ccd446eSAtari911- Text color: `#2a2030` (dark background) 28539ccd446eSAtari911 28549ccd446eSAtari911**Professional Theme**: 28559ccd446eSAtari911- Box background: `#4a90e2` (blue) 28569ccd446eSAtari911- Text color: `#ffffff` (white text) 28579ccd446eSAtari911 28589ccd446eSAtari911**Pink Theme**: 28599ccd446eSAtari911- Box background: `#ff1493` (hot pink) 28609ccd446eSAtari911- Text color: `#1a0d14` (dark background) 28619ccd446eSAtari911 28629ccd446eSAtari911**Wiki Theme**: 28639ccd446eSAtari911- Box background: Template's `__border__` color 28649ccd446eSAtari911- Text color: Template's `__background_site__` color 28659ccd446eSAtari911 28669ccd446eSAtari911### Visual Result 28679ccd446eSAtari911 28689ccd446eSAtari911**Matrix Theme**: 28699ccd446eSAtari911``` 28709ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 28719ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 28729ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 28739ccd446eSAtari911 ↑ 28749ccd446eSAtari911 Green box (#00cc07) 28759ccd446eSAtari911``` 28769ccd446eSAtari911 28779ccd446eSAtari911**Professional Theme**: 28789ccd446eSAtari911``` 28799ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 28809ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 28819ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 28829ccd446eSAtari911 ↑ 28839ccd446eSAtari911 Blue box (#4a90e2) 28849ccd446eSAtari911``` 28859ccd446eSAtari911 28869ccd446eSAtari911**Wiki Theme**: 28879ccd446eSAtari911``` 28889ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 28899ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 28909ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 28919ccd446eSAtari911 ↑ 28929ccd446eSAtari911 Template border color 28939ccd446eSAtari911``` 28949ccd446eSAtari911 28959ccd446eSAtari911### Implementation 28969ccd446eSAtari911 28979ccd446eSAtari911**Inline styles added**: 28989ccd446eSAtari911- Background uses `$themeStyles['border']` (theme accent) 28999ccd446eSAtari911- Text color uses `$themeStyles['bg']` for contrast 29009ccd446eSAtari911- Special case: Professional theme uses white text 29019ccd446eSAtari911- All with `!important` to override CSS 29029ccd446eSAtari911 29039ccd446eSAtari911**CSS cleaned up**: 29049ccd446eSAtari911- Removed hardcoded `#008800` background 29059ccd446eSAtari911- Removed hardcoded `white` color 29069ccd446eSAtari911- Kept structural styles (border-radius, font-weight) 29079ccd446eSAtari911 29089ccd446eSAtari911### Benefits 29099ccd446eSAtari911 29109ccd446eSAtari911**Theme Consistency**: 29119ccd446eSAtari911- Today box matches theme accent color 29129ccd446eSAtari911- Proper contrast with background 29139ccd446eSAtari911- Professional appearance 29149ccd446eSAtari911 29159ccd446eSAtari911**Automatic Adaptation**: 29169ccd446eSAtari911- Works with all themes 29179ccd446eSAtari911- Works with custom wiki template colors 29189ccd446eSAtari911- No manual adjustment needed 29199ccd446eSAtari911 29209ccd446eSAtari911**Visual Harmony**: 29219ccd446eSAtari911- Border color used throughout theme 29229ccd446eSAtari911- Today box reinforces theme identity 29239ccd446eSAtari911- Consistent design language 29249ccd446eSAtari911 29259ccd446eSAtari911## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 29269ccd446eSAtari911 29279ccd446eSAtari911### Fixed: Table Grid Background Now Matches Cells 29289ccd446eSAtari911- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 29299ccd446eSAtari911- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 29309ccd446eSAtari911- **Result:** Table background no longer shows through cells! 29319ccd446eSAtari911 29329ccd446eSAtari911### The Layer Problem 29339ccd446eSAtari911 29349ccd446eSAtari911The table itself had a DIFFERENT background color than its cells! 29359ccd446eSAtari911 29369ccd446eSAtari911**Before (v5.2.6)**: 29379ccd446eSAtari911```php 29389ccd446eSAtari911'grid_bg' => __background_alt__, // Table background (#e8e8e8) 29399ccd446eSAtari911'cell_bg' => __background_site__, // Cell background (#f5f5f5) 29409ccd446eSAtari911``` 29419ccd446eSAtari911 29429ccd446eSAtari911**The table background was showing THROUGH the cells!** 29439ccd446eSAtari911 29449ccd446eSAtari911### Why This Happened 29459ccd446eSAtari911 29469ccd446eSAtari911**Visual layers**: 29479ccd446eSAtari911``` 29489ccd446eSAtari911Table Element 29499ccd446eSAtari911├─ background: __background_alt__ (#e8e8e8) ← Different! 29509ccd446eSAtari911└─ Cells 29519ccd446eSAtari911 └─ background: __background_site__ (#f5f5f5) ← Different! 29529ccd446eSAtari911 29539ccd446eSAtari911The table background shows through any gaps! 29549ccd446eSAtari911``` 29559ccd446eSAtari911 29569ccd446eSAtari911### The Fix 29579ccd446eSAtari911 29589ccd446eSAtari911**After (v5.2.7)**: 29599ccd446eSAtari911```php 29609ccd446eSAtari911'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 29619ccd446eSAtari911'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 29629ccd446eSAtari911``` 29639ccd446eSAtari911 29649ccd446eSAtari911**NOW THEY MATCH!** 29659ccd446eSAtari911 29669ccd446eSAtari911### Where grid_bg Is Used 29679ccd446eSAtari911 29689ccd446eSAtari911The table element itself: 29699ccd446eSAtari911```html 29709ccd446eSAtari911<table style="background: __background_alt__"> ← Was showing through! 29719ccd446eSAtari911 <tbody> 29729ccd446eSAtari911 <tr> 29739ccd446eSAtari911 <td style="background: __background_site__">1</td> 29749ccd446eSAtari911 </tr> 29759ccd446eSAtari911 </tbody> 29769ccd446eSAtari911</table> 29779ccd446eSAtari911``` 29789ccd446eSAtari911 29799ccd446eSAtari911Even with cell inline styles, the TABLE background shows through! 29809ccd446eSAtari911 29819ccd446eSAtari911### All Background Sources Now Unified 29829ccd446eSAtari911 29839ccd446eSAtari911**Everything now uses __background_site__**: 29849ccd446eSAtari911- `bg` → __background_site__ ✓ 29859ccd446eSAtari911- `header_bg` → __background_site__ ✓ 29869ccd446eSAtari911- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 29879ccd446eSAtari911- `cell_bg` → __background_site__ ✓ 29889ccd446eSAtari911 29899ccd446eSAtari911**Perfect consistency!** 29909ccd446eSAtari911 29919ccd446eSAtari911### Why It Was Different 29929ccd446eSAtari911 29939ccd446eSAtari911**Originally the grid was meant to show borders**: 29949ccd446eSAtari911- `grid_bg` was `__background_alt__` (slightly different) 29959ccd446eSAtari911- Created visual separation between cells 29969ccd446eSAtari911- But with transparent/thin cells, it showed through! 29979ccd446eSAtari911 29989ccd446eSAtari911**Now unified for consistency!** 29999ccd446eSAtari911 30009ccd446eSAtari911### Visual Result 30019ccd446eSAtari911 30029ccd446eSAtari911**Before (layers visible)**: 30039ccd446eSAtari911``` 30049ccd446eSAtari911┌─────────────────┐ 30059ccd446eSAtari911│ Grid (#e8e8e8) │ ← Showing through! 30069ccd446eSAtari911│ ┌──┬──┬──┐ │ 30079ccd446eSAtari911│ │ │ │ │ │ ← Cells (#f5f5f5) 30089ccd446eSAtari911│ └──┴──┴──┘ │ 30099ccd446eSAtari911└─────────────────┘ 30109ccd446eSAtari911``` 30119ccd446eSAtari911 30129ccd446eSAtari911**After (unified)**: 30139ccd446eSAtari911``` 30149ccd446eSAtari911┌─────────────────┐ 30159ccd446eSAtari911│ Grid (#f5f5f5) │ ← Same color! 30169ccd446eSAtari911│ ┌──┬──┬──┐ │ 30179ccd446eSAtari911│ │ │ │ │ │ ← Cells (#f5f5f5) 30189ccd446eSAtari911│ └──┴──┴──┘ │ 30199ccd446eSAtari911└─────────────────┘ 30209ccd446eSAtari911Perfect match! 30219ccd446eSAtari911``` 30229ccd446eSAtari911 30239ccd446eSAtari911### Complete Background Mapping 30249ccd446eSAtari911 30259ccd446eSAtari911**All using __background_site__ now**: 30269ccd446eSAtari911- Main container background 30279ccd446eSAtari911- Left panel background 30289ccd446eSAtari911- Right panel background 30299ccd446eSAtari911- Eventlist background 30309ccd446eSAtari911- Calendar grid background ← JUST FIXED 30319ccd446eSAtari911- Calendar cell backgrounds 30329ccd446eSAtari911- Event item backgrounds 30339ccd446eSAtari911- Clock header background 30349ccd446eSAtari911- Search input background 30359ccd446eSAtari911- Past events toggle 30369ccd446eSAtari911 30379ccd446eSAtari911**EVERYTHING UNIFIED!** 30389ccd446eSAtari911 30399ccd446eSAtari911## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 30409ccd446eSAtari911 30419ccd446eSAtari911### Fixed: Removed Container Backgrounds Showing Through 30429ccd446eSAtari911- **Found:** `.calendar-compact-container` had `background: #ffffff;` 30439ccd446eSAtari911- **Found:** `.calendar-compact-left` had `background: #fafafa;` 30449ccd446eSAtari911- **Found:** `.calendar-compact-right` had `background: #ffffff;` 30459ccd446eSAtari911- **Found:** `.event-search-input-inline` had `background: white;` 30469ccd446eSAtari911- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 30479ccd446eSAtari911- **Result:** Container backgrounds no longer show through cells! 30489ccd446eSAtari911 30499ccd446eSAtari911### The Container Problem 30509ccd446eSAtari911 30519ccd446eSAtari911The parent containers had hardcoded backgrounds that were showing through! 30529ccd446eSAtari911 30539ccd446eSAtari911**Container backgrounds (lines 4-91)**: 30549ccd446eSAtari911```css 30559ccd446eSAtari911.calendar-compact-container { 30569ccd446eSAtari911 background: #ffffff; /* ← Main container! */ 30579ccd446eSAtari911} 30589ccd446eSAtari911 30599ccd446eSAtari911.calendar-compact-left { 30609ccd446eSAtari911 background: #fafafa; /* ← Left panel (calendar side)! */ 30619ccd446eSAtari911} 30629ccd446eSAtari911 30639ccd446eSAtari911.calendar-compact-right { 30649ccd446eSAtari911 background: #ffffff; /* ← Right panel (events side)! */ 30659ccd446eSAtari911} 30669ccd446eSAtari911``` 30679ccd446eSAtari911 30689ccd446eSAtari911**These were showing through the cells and events!** 30699ccd446eSAtari911 30709ccd446eSAtari911### Why Containers Matter 30719ccd446eSAtari911 30729ccd446eSAtari911Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 30739ccd446eSAtari911 30749ccd446eSAtari911``` 30759ccd446eSAtari911Container (#fafafa) ← Showing through! 30769ccd446eSAtari911 └─ Table Cell (#f5f5f5) ← Transparent areas 30779ccd446eSAtari911 └─ Content 30789ccd446eSAtari911``` 30799ccd446eSAtari911 30809ccd446eSAtari911### All Backgrounds Removed 30819ccd446eSAtari911 30829ccd446eSAtari911**v5.2.6 removes**: 30839ccd446eSAtari911- `.calendar-compact-container` background 30849ccd446eSAtari911- `.calendar-compact-left` background 30859ccd446eSAtari911- `.calendar-compact-right` background 30869ccd446eSAtari911- `.event-search-input-inline` background 30879ccd446eSAtari911- `.past-events-toggle` background & hover 30889ccd446eSAtari911 30899ccd446eSAtari911**v5.2.5 removed**: 30909ccd446eSAtari911- `.calendar-compact-grid tbody td` background 30919ccd446eSAtari911- `.calendar-compact-grid thead th` background 30929ccd446eSAtari911 30939ccd446eSAtari911**v5.2.4 removed**: 30949ccd446eSAtari911- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 30959ccd446eSAtari911 30969ccd446eSAtari911**v5.2.3 removed**: 30979ccd446eSAtari911- `.event-compact-item` background 30989ccd446eSAtari911 30999ccd446eSAtari911**ALL container and element backgrounds eliminated!** 31009ccd446eSAtari911 31019ccd446eSAtari911### What Should Work Now 31029ccd446eSAtari911 31039ccd446eSAtari911**Calendar cells**: No container background showing through ✓ 31049ccd446eSAtari911**Event items**: No container background showing through ✓ 31059ccd446eSAtari911**Search bar**: Uses template color ✓ 31069ccd446eSAtari911**Past events toggle**: Uses template color ✓ 31079ccd446eSAtari911 31089ccd446eSAtari911### Complete List of Fixes 31099ccd446eSAtari911 31109ccd446eSAtari911**Containers**: 31119ccd446eSAtari911- Main container ✓ 31129ccd446eSAtari911- Left panel ✓ 31139ccd446eSAtari911- Right panel ✓ 31149ccd446eSAtari911 31159ccd446eSAtari911**Elements**: 31169ccd446eSAtari911- Table cells ✓ 31179ccd446eSAtari911- Event items ✓ 31189ccd446eSAtari911- Search input ✓ 31199ccd446eSAtari911- Past events toggle ✓ 31209ccd446eSAtari911 31219ccd446eSAtari911**EVERYTHING removed!** 31229ccd446eSAtari911 31239ccd446eSAtari911### Critical: Clear Caches 31249ccd446eSAtari911 31259ccd446eSAtari911**Must clear caches or won't work**: 31269ccd446eSAtari9111. Hard refresh: Ctrl+Shift+R (5 times!) 31279ccd446eSAtari9112. Clear DokuWiki cache 31289ccd446eSAtari9113. Close browser completely 31299ccd446eSAtari9114. Reopen and test 31309ccd446eSAtari911 31319ccd446eSAtari911**CSS caching is EXTREMELY persistent!** 31329ccd446eSAtari911 31339ccd446eSAtari911## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 31349ccd446eSAtari911 31359ccd446eSAtari911### Fixed: Removed Hardcoded Backgrounds from Table Cells 31369ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 31379ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 31389ccd446eSAtari911- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 31399ccd446eSAtari911- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 31409ccd446eSAtari911- **Result:** Calendar table cells finally use template colors! 31419ccd446eSAtari911 31429ccd446eSAtari911### The REAL Culprits 31439ccd446eSAtari911 31449ccd446eSAtari911The generic table CSS was overriding everything! 31459ccd446eSAtari911 31469ccd446eSAtari911**In style.css (lines 307-356)**: 31479ccd446eSAtari911```css 31489ccd446eSAtari911.calendar-compact-grid thead th { 31499ccd446eSAtari911 background: #f8f8f8; /* ← Header cells hardcoded! */ 31509ccd446eSAtari911} 31519ccd446eSAtari911 31529ccd446eSAtari911.calendar-compact-grid tbody td { 31539ccd446eSAtari911 background: #ffffff; /* ← ALL table cells hardcoded! */ 31549ccd446eSAtari911} 31559ccd446eSAtari911 31569ccd446eSAtari911.calendar-compact-grid tbody td:hover { 31579ccd446eSAtari911 background: #f0f7ff; /* ← Hover state hardcoded! */ 31589ccd446eSAtari911} 31599ccd446eSAtari911``` 31609ccd446eSAtari911 31619ccd446eSAtari911**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 31629ccd446eSAtari911 31639ccd446eSAtari911### Why This Was the Last One 31649ccd446eSAtari911 31659ccd446eSAtari911**CSS Specificity Order**: 31669ccd446eSAtari9111. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 31679ccd446eSAtari9112. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 31689ccd446eSAtari9113. Inline styles (should win but didn't) 31699ccd446eSAtari911 31709ccd446eSAtari911**We removed the specific ones (v5.2.4), but the generic one was still there!** 31719ccd446eSAtari911 31729ccd446eSAtari911### What We've Removed 31739ccd446eSAtari911 31749ccd446eSAtari911**v5.2.3**: 31759ccd446eSAtari911- `.event-compact-item` background 31769ccd446eSAtari911- `.event-compact-item:hover` background 31779ccd446eSAtari911 31789ccd446eSAtari911**v5.2.4**: 31799ccd446eSAtari911- `.cal-empty` background & hover 31809ccd446eSAtari911- `.cal-today` background & hover 31819ccd446eSAtari911- `.cal-has-events` background & hover 31829ccd446eSAtari911 31839ccd446eSAtari911**v5.2.5 (FINAL)**: 31849ccd446eSAtari911- `.calendar-compact-grid tbody td` background ✓ 31859ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ✓ 31869ccd446eSAtari911- `.calendar-compact-grid thead th` background ✓ 31879ccd446eSAtari911 31889ccd446eSAtari911**All CSS background overrides ELIMINATED!** 31899ccd446eSAtari911 31909ccd446eSAtari911### Why It Took 5 Versions 31919ccd446eSAtari911 31929ccd446eSAtari911**CSS had layers of hardcoded backgrounds**: 31939ccd446eSAtari911 31949ccd446eSAtari911``` 31959ccd446eSAtari911Layer 1: Table cells (.calendar-compact-grid tbody td) 31969ccd446eSAtari911 ↓ Overrode inline styles 31979ccd446eSAtari911Layer 2: Cell states (.cal-today, .cal-empty, etc.) 31989ccd446eSAtari911 ↓ Overrode table cells 31999ccd446eSAtari911Layer 3: Event items (.event-compact-item) 32009ccd446eSAtari911 ↓ Overrode inline styles 32019ccd446eSAtari911 32029ccd446eSAtari911ALL had to be removed! 32039ccd446eSAtari911``` 32049ccd446eSAtari911 32059ccd446eSAtari911**We kept finding more specific CSS, but the base table CSS was there all along!** 32069ccd446eSAtari911 32079ccd446eSAtari911### Visual Result 32089ccd446eSAtari911 32099ccd446eSAtari911**NOW everything matches**: 32109ccd446eSAtari911``` 32119ccd446eSAtari911Calendar Table: 32129ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 32139ccd446eSAtari911│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 32149ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 32159ccd446eSAtari911│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 32169ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 32179ccd446eSAtari911│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 32189ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 32199ccd446eSAtari911 32209ccd446eSAtari911Sidebar Events: 32219ccd446eSAtari911┌────────────────────────┐ 32229ccd446eSAtari911│ Event │ ← __background_site__ 32239ccd446eSAtari911│ Event │ ← __background_site__ 32249ccd446eSAtari911└────────────────────────┘ 32259ccd446eSAtari911 32269ccd446eSAtari911FINALLY ALL MATCHING! ✓ 32279ccd446eSAtari911``` 32289ccd446eSAtari911 32299ccd446eSAtari911### Complete List of Removed CSS 32309ccd446eSAtari911 32319ccd446eSAtari911**ALL hardcoded backgrounds removed**: 32329ccd446eSAtari911- `.event-compact-item` background 32339ccd446eSAtari911- `.event-compact-item:hover` background 32349ccd446eSAtari911- `.cal-empty` background & hover 32359ccd446eSAtari911- `.cal-today` background & hover 32369ccd446eSAtari911- `.cal-has-events` background & hover 32379ccd446eSAtari911- `.calendar-compact-grid tbody td` background ← NEW 32389ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ← NEW 32399ccd446eSAtari911- `.calendar-compact-grid thead th` background ← NEW 32409ccd446eSAtari911 32419ccd446eSAtari911**Every single CSS background override is GONE!** 32429ccd446eSAtari911 32439ccd446eSAtari911### Testing Steps 32449ccd446eSAtari911 32459ccd446eSAtari911**After installing v5.2.5**: 32469ccd446eSAtari911 32479ccd446eSAtari9111. **Clear browser cache**: Ctrl+Shift+R (3 times!) 32489ccd446eSAtari9112. **Clear DokuWiki cache**: Click the button 32499ccd446eSAtari9113. **Close browser completely**: Restart it 32509ccd446eSAtari9114. **Visit page**: Should finally see matching backgrounds 32519ccd446eSAtari911 32529ccd446eSAtari911**CSS is EXTREMELY sticky - may need to clear multiple times!** 32539ccd446eSAtari911 32549ccd446eSAtari911### This Should Be It 32559ccd446eSAtari911 32569ccd446eSAtari911**No more CSS overrides exist** (we've checked the entire file): 32579ccd446eSAtari911- Table cells ✓ Fixed 32589ccd446eSAtari911- Cell states ✓ Fixed 32599ccd446eSAtari911- Event items ✓ Fixed 32609ccd446eSAtari911- Headers ✓ Fixed 32619ccd446eSAtari911- Hover states ✓ Fixed 32629ccd446eSAtari911 32639ccd446eSAtari911**All backgrounds now come from inline styles using template colors!** 32649ccd446eSAtari911 32659ccd446eSAtari911## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 32669ccd446eSAtari911 32679ccd446eSAtari911### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 32689ccd446eSAtari911- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 32699ccd446eSAtari911- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 32709ccd446eSAtari911- **Result:** Calendar cells now use template colors! 32719ccd446eSAtari911 32729ccd446eSAtari911### The Second Culprit 32739ccd446eSAtari911 32749ccd446eSAtari911MORE hardcoded backgrounds in the CSS file! 32759ccd446eSAtari911 32769ccd446eSAtari911**In style.css (lines 359-382)**: 32779ccd446eSAtari911```css 32789ccd446eSAtari911.cal-empty { 32799ccd446eSAtari911 background: #fafafa !important; /* ← Overriding inline styles! */ 32809ccd446eSAtari911} 32819ccd446eSAtari911 32829ccd446eSAtari911.cal-today { 32839ccd446eSAtari911 background: #e8f5e9 !important; /* ← Overriding today cell! */ 32849ccd446eSAtari911} 32859ccd446eSAtari911 32869ccd446eSAtari911.cal-today:hover { 32879ccd446eSAtari911 background: #c8e6c9 !important; /* ← Overriding hover! */ 32889ccd446eSAtari911} 32899ccd446eSAtari911 32909ccd446eSAtari911.cal-has-events { 32919ccd446eSAtari911 background: #fffbf0; /* ← Overriding event cells! */ 32929ccd446eSAtari911} 32939ccd446eSAtari911 32949ccd446eSAtari911.cal-has-events:hover { 32959ccd446eSAtari911 background: #fff4d9; /* ← Overriding hover! */ 32969ccd446eSAtari911} 32979ccd446eSAtari911``` 32989ccd446eSAtari911 32999ccd446eSAtari911**These were ALL overriding the inline styles!** 33009ccd446eSAtari911 33019ccd446eSAtari911### The Fix 33029ccd446eSAtari911 33039ccd446eSAtari911**Removed all hardcoded backgrounds**: 33049ccd446eSAtari911```css 33059ccd446eSAtari911.cal-empty { 33069ccd446eSAtari911 /* background removed - inline style handles this */ 33079ccd446eSAtari911 cursor: default !important; 33089ccd446eSAtari911} 33099ccd446eSAtari911 33109ccd446eSAtari911.cal-today { 33119ccd446eSAtari911 /* background removed - inline style handles this */ 33129ccd446eSAtari911} 33139ccd446eSAtari911 33149ccd446eSAtari911.cal-has-events { 33159ccd446eSAtari911 /* background removed - inline style handles this */ 33169ccd446eSAtari911} 33179ccd446eSAtari911 33189ccd446eSAtari911/* Hover states also removed */ 33199ccd446eSAtari911``` 33209ccd446eSAtari911 33219ccd446eSAtari911### What Was Overridden 33229ccd446eSAtari911 33239ccd446eSAtari911**v5.2.3 fixed**: 33249ccd446eSAtari911- Event items in sidebar ✓ 33259ccd446eSAtari911 33269ccd446eSAtari911**v5.2.4 fixes**: 33279ccd446eSAtari911- Calendar day cells ✓ 33289ccd446eSAtari911- Today cell ✓ 33299ccd446eSAtari911- Empty cells ✓ 33309ccd446eSAtari911- Cells with events ✓ 33319ccd446eSAtari911- All hover states ✓ 33329ccd446eSAtari911 33339ccd446eSAtari911### Why This Kept Happening 33349ccd446eSAtari911 33359ccd446eSAtari911**CSS had hardcoded backgrounds everywhere**: 33369ccd446eSAtari9111. Event items: `#ffffff` (fixed in v5.2.3) 33379ccd446eSAtari9112. Calendar cells: Multiple colors (fixed in v5.2.4) 33389ccd446eSAtari9113. **All with `!important` flags!** 33399ccd446eSAtari911 33409ccd446eSAtari911**The inline styles couldn't override them!** 33419ccd446eSAtari911 33429ccd446eSAtari911### Visual Result 33439ccd446eSAtari911 33449ccd446eSAtari911**Now ALL backgrounds match**: 33459ccd446eSAtari911``` 33469ccd446eSAtari911Calendar Grid: 33479ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 33489ccd446eSAtari911│ │ │ │ │ │ │ │ ← All use __background_site__ 33499ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 33509ccd446eSAtari911│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 33519ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 33529ccd446eSAtari911│ │ │ │ │ │ │ │ ← All match template 33539ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 33549ccd446eSAtari911 33559ccd446eSAtari911Sidebar Events: 33569ccd446eSAtari911┌────────────────────────┐ 33579ccd446eSAtari911│ Event │ ← Uses __background_site__ 33589ccd446eSAtari911│ Event │ ← Uses __background_site__ 33599ccd446eSAtari911└────────────────────────┘ 33609ccd446eSAtari911 33619ccd446eSAtari911Perfect consistency! 33629ccd446eSAtari911``` 33639ccd446eSAtari911 33649ccd446eSAtari911### CSS Removed 33659ccd446eSAtari911 33669ccd446eSAtari911**Calendar cells**: 33679ccd446eSAtari911- `.cal-empty` background 33689ccd446eSAtari911- `.cal-empty:hover` background 33699ccd446eSAtari911- `.cal-today` background 33709ccd446eSAtari911- `.cal-today:hover` background 33719ccd446eSAtari911- `.cal-has-events` background 33729ccd446eSAtari911- `.cal-has-events:hover` background 33739ccd446eSAtari911 33749ccd446eSAtari911**All gone!** ✓ 33759ccd446eSAtari911 33769ccd446eSAtari911### Important: Clear Caches Again! 33779ccd446eSAtari911 33789ccd446eSAtari911After installing v5.2.4: 33799ccd446eSAtari911 33809ccd446eSAtari9111. **Hard refresh browser**: Ctrl+Shift+R (twice!) 33819ccd446eSAtari9112. **Clear DokuWiki cache**: Admin → Clear Cache 33829ccd446eSAtari9113. **May need to restart browser**: To clear CSS cache 33839ccd446eSAtari911 33849ccd446eSAtari911**Old CSS is VERY sticky!** 33859ccd446eSAtari911 33869ccd446eSAtari911### Why It Took So Long 33879ccd446eSAtari911 33889ccd446eSAtari911**Multiple CSS overrides**: 33899ccd446eSAtari911- Event items (v5.2.3) ✓ Fixed 33909ccd446eSAtari911- Calendar cells (v5.2.4) ✓ Fixed 33919ccd446eSAtari911- Each with different classes 33929ccd446eSAtari911- Each with `!important` 33939ccd446eSAtari911- Hidden throughout CSS file 33949ccd446eSAtari911 33959ccd446eSAtari911**Found them all now!** 33969ccd446eSAtari911 33979ccd446eSAtari911## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 33989ccd446eSAtari911 33999ccd446eSAtari911### Fixed: Removed Hardcoded Backgrounds from CSS 34009ccd446eSAtari911- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 34019ccd446eSAtari911- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 34029ccd446eSAtari911- **Result:** Event backgrounds now properly use template colors! 34039ccd446eSAtari911 34049ccd446eSAtari911### The Root Cause 34059ccd446eSAtari911 34069ccd446eSAtari911The CSS file was overriding the inline styles with hardcoded white backgrounds! 34079ccd446eSAtari911 34089ccd446eSAtari911**In style.css (lines 599-616)**: 34099ccd446eSAtari911```css 34109ccd446eSAtari911.event-compact-item { 34119ccd446eSAtari911 background: #ffffff; /* ← This was overriding inline styles! */ 34129ccd446eSAtari911} 34139ccd446eSAtari911 34149ccd446eSAtari911.event-compact-item:hover { 34159ccd446eSAtari911 background: #f8f9fa; /* ← And this on hover! */ 34169ccd446eSAtari911} 34179ccd446eSAtari911``` 34189ccd446eSAtari911 34199ccd446eSAtari911**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 34209ccd446eSAtari911 34219ccd446eSAtari911### The Fix 34229ccd446eSAtari911 34239ccd446eSAtari911**Removed hardcoded backgrounds from CSS**: 34249ccd446eSAtari911```css 34259ccd446eSAtari911.event-compact-item { 34269ccd446eSAtari911 /* background removed - set via inline style with template colors */ 34279ccd446eSAtari911 display: flex; 34289ccd446eSAtari911 /* ... other styles ... */ 34299ccd446eSAtari911} 34309ccd446eSAtari911 34319ccd446eSAtari911.event-compact-item:hover { 34329ccd446eSAtari911 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 34339ccd446eSAtari911 /* background removed - inline style handles this */ 34349ccd446eSAtari911} 34359ccd446eSAtari911``` 34369ccd446eSAtari911 34379ccd446eSAtari911### Why This Was So Difficult to Find 34389ccd446eSAtari911 34399ccd446eSAtari911**CSS Specificity & Cascade**: 34409ccd446eSAtari9111. Inline styles with `!important` should win 34419ccd446eSAtari9112. But CSS that comes after can still apply 34429ccd446eSAtari9113. The hardcoded `background: #ffffff` was silently overriding 34439ccd446eSAtari9114. All the PHP code was correct - it was the CSS! 34449ccd446eSAtari911 34459ccd446eSAtari911**What We Were Doing**: 34469ccd446eSAtari911- ✓ Reading template colors correctly 34479ccd446eSAtari911- ✓ Setting `cell_bg` to `__background_site__` correctly 34489ccd446eSAtari911- ✓ Applying inline styles with `!important` correctly 34499ccd446eSAtari911- ✗ CSS file was overriding everything! 34509ccd446eSAtari911 34519ccd446eSAtari911### What Was Affected 34529ccd446eSAtari911 34539ccd446eSAtari911**Event items in**: 34549ccd446eSAtari911- Main calendar sidebar 34559ccd446eSAtari911- Standalone event list 34569ccd446eSAtari911- Sidebar widget 34579ccd446eSAtari911- All event displays 34589ccd446eSAtari911 34599ccd446eSAtari911**All had white backgrounds hardcoded in CSS!** 34609ccd446eSAtari911 34619ccd446eSAtari911### Now Working 34629ccd446eSAtari911 34639ccd446eSAtari911**Events use template colors**: 34649ccd446eSAtari911```html 34659ccd446eSAtari911<div class="event-compact-item" 34669ccd446eSAtari911 style="background: #f5f5f5 !important; ..."> 34679ccd446eSAtari911 ← Now this inline style actually works! 34689ccd446eSAtari911</div> 34699ccd446eSAtari911``` 34709ccd446eSAtari911 34719ccd446eSAtari911**No CSS override** ✓ 34729ccd446eSAtari911 34739ccd446eSAtari911### Testing 34749ccd446eSAtari911 34759ccd446eSAtari911To verify this works: 34769ccd446eSAtari9111. Clear browser cache (important!) 34779ccd446eSAtari9112. Clear DokuWiki cache 34789ccd446eSAtari9113. Reload page 34799ccd446eSAtari9114. Events should now match eventlist background 34809ccd446eSAtari911 34819ccd446eSAtari911**Browser caching can make old CSS persist!** 34829ccd446eSAtari911 34839ccd446eSAtari911### Visual Result 34849ccd446eSAtari911 34859ccd446eSAtari911**All backgrounds now matching**: 34869ccd446eSAtari911``` 34879ccd446eSAtari911┌────────────────────────────┐ 34889ccd446eSAtari911│ Eventlist (#f5f5f5) │ ← Template color 34899ccd446eSAtari911├────────────────────────────┤ 34909ccd446eSAtari911│ Event (#f5f5f5) │ ← Template color (was #ffffff) 34919ccd446eSAtari911├────────────────────────────┤ 34929ccd446eSAtari911│ Event (#f5f5f5) │ ← Template color (was #ffffff) 34939ccd446eSAtari911└────────────────────────────┘ 34949ccd446eSAtari911 34959ccd446eSAtari911Perfect match! 34969ccd446eSAtari911``` 34979ccd446eSAtari911 34989ccd446eSAtari911### Why Everything Else Worked 34999ccd446eSAtari911 35009ccd446eSAtari911**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 35019ccd446eSAtari911- They only had inline styles ✓ 35029ccd446eSAtari911- Inline styles worked correctly ✓ 35039ccd446eSAtari911- Only event items had the CSS override ✗ 35049ccd446eSAtari911 35059ccd446eSAtari911### Important Notes 35069ccd446eSAtari911 35079ccd446eSAtari911**Clear caches**: 35089ccd446eSAtari911- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 35099ccd446eSAtari911- DokuWiki cache (Admin → Clear Cache) 35109ccd446eSAtari911- Old CSS may be cached! 35119ccd446eSAtari911 35129ccd446eSAtari911**This was the culprit all along!** 35139ccd446eSAtari911 35149ccd446eSAtari911## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 35159ccd446eSAtari911 35169ccd446eSAtari911### Fixed: Clock Area Now Matches Event Cells 35179ccd446eSAtari911- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 35189ccd446eSAtari911- **Result:** Clock/Today header matches event cell backgrounds! 35199ccd446eSAtari911 35209ccd446eSAtari911### The Issue 35219ccd446eSAtari911 35229ccd446eSAtari911The clock area (Today header) was using a different background: 35239ccd446eSAtari911 35249ccd446eSAtari911**Before (v5.2.1)**: 35259ccd446eSAtari911```php 35269ccd446eSAtari911'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 35279ccd446eSAtari911'cell_bg' => __background_site__, // Event cells (#f5f5f5) 35289ccd446eSAtari911``` 35299ccd446eSAtari911 35309ccd446eSAtari911**After (v5.2.2)**: 35319ccd446eSAtari911```php 35329ccd446eSAtari911'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 35339ccd446eSAtari911'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 35349ccd446eSAtari911``` 35359ccd446eSAtari911 35369ccd446eSAtari911### What's the Clock Area? 35379ccd446eSAtari911 35389ccd446eSAtari911The clock/Today header in the sidebar: 35399ccd446eSAtari911``` 35409ccd446eSAtari911┌────────────────────────────┐ 35419ccd446eSAtari911│ 3:45:23 PM │ ← Clock area (header_bg) 35429ccd446eSAtari911│ ️ --° | Sun, Feb 9, 2026 │ 35439ccd446eSAtari911└────────────────────────────┘ 35449ccd446eSAtari911``` 35459ccd446eSAtari911 35469ccd446eSAtari911### All Backgrounds Now Unified 35479ccd446eSAtari911 35489ccd446eSAtari911**Everything now uses __background_site__**: 35499ccd446eSAtari911- Eventlist background ✓ 35509ccd446eSAtari911- Calendar cells ✓ 35519ccd446eSAtari911- Event items ✓ 35529ccd446eSAtari911- Clock/Today header ✓ 35539ccd446eSAtari911- Sidebar widget ✓ 35549ccd446eSAtari911- All backgrounds match! ✓ 35559ccd446eSAtari911 35569ccd446eSAtari911### Visual Result 35579ccd446eSAtari911 35589ccd446eSAtari911**Complete consistency**: 35599ccd446eSAtari911``` 35609ccd446eSAtari911┌────────────────────────────┐ 35619ccd446eSAtari911│ 3:45:23 PM │ ← Same background 35629ccd446eSAtari911│ ️ --° | Sun, Feb 9, 2026 │ 35639ccd446eSAtari911├────────────────────────────┤ 35649ccd446eSAtari911│ Meeting at 2pm │ ← Same background 35659ccd446eSAtari911│ Description... │ 35669ccd446eSAtari911├────────────────────────────┤ 35679ccd446eSAtari911│ Another event │ ← Same background 35689ccd446eSAtari911│ More details... │ 35699ccd446eSAtari911└────────────────────────────┘ 35709ccd446eSAtari911 35719ccd446eSAtari911All using __background_site__ (#f5f5f5) 35729ccd446eSAtari911``` 35739ccd446eSAtari911 35749ccd446eSAtari911**Perfect visual harmony!** 35759ccd446eSAtari911 35769ccd446eSAtari911## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 35779ccd446eSAtari911 35789ccd446eSAtari911### Fixed: Calendar Cells Now Match Eventlist Background 35799ccd446eSAtari911- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 35809ccd446eSAtari911- **Result:** Calendar cells now match the eventlist background perfectly! 35819ccd446eSAtari911 35829ccd446eSAtari911### The Real Issue 35839ccd446eSAtari911 35849ccd446eSAtari911The eventlist was showing the CORRECT background color all along! 35859ccd446eSAtari911 35869ccd446eSAtari911**Eventlist was using**: 35879ccd446eSAtari911- `bg` → `__background_site__` ✓ (This was correct!) 35889ccd446eSAtari911 35899ccd446eSAtari911**Calendar cells were using**: 35909ccd446eSAtari911- `cell_bg` → `__background__` ✗ (This was wrong!) 35919ccd446eSAtari911 35929ccd446eSAtari911**They didn't match!** 35939ccd446eSAtari911 35949ccd446eSAtari911### The Correct Fix 35959ccd446eSAtari911 35969ccd446eSAtari911**Now everything uses __background_site__**: 35979ccd446eSAtari911```php 35989ccd446eSAtari911'bg' => __background_site__, // Eventlist (was already correct) 35999ccd446eSAtari911'cell_bg' => __background_site__, // Cells (now fixed to match) 36009ccd446eSAtari911``` 36019ccd446eSAtari911 36029ccd446eSAtari911### Why __background_site__? 36039ccd446eSAtari911 36049ccd446eSAtari911The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 36059ccd446eSAtari911 36069ccd446eSAtari911``` 36079ccd446eSAtari911Page Layout: 36089ccd446eSAtari911┌────────────────────────────────────┐ 36099ccd446eSAtari911│ __background_site__ (page bg) │ ← This is where calendar lives 36109ccd446eSAtari911│ │ 36119ccd446eSAtari911│ ┌──────────────────────────────┐ │ 36129ccd446eSAtari911│ │ __background__ (content bg) │ │ ← Wiki article content 36139ccd446eSAtari911│ │ │ │ 36149ccd446eSAtari911│ └──────────────────────────────┘ │ 36159ccd446eSAtari911│ │ 36169ccd446eSAtari911└────────────────────────────────────┘ 36179ccd446eSAtari911``` 36189ccd446eSAtari911 36199ccd446eSAtari911**Calendar should match the page background, not the content background!** 36209ccd446eSAtari911 36219ccd446eSAtari911### Template Example 36229ccd446eSAtari911 36239ccd446eSAtari911Typical DokuWiki template: 36249ccd446eSAtari911```ini 36259ccd446eSAtari911__background_site__ = "#f5f5f5" (Light gray - page background) 36269ccd446eSAtari911__background__ = "#ffffff" (White - content area) 36279ccd446eSAtari911``` 36289ccd446eSAtari911 36299ccd446eSAtari911**Before (v5.2.0)**: 36309ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct 36319ccd446eSAtari911- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 36329ccd446eSAtari911 36339ccd446eSAtari911**After (v5.2.1)**: 36349ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct 36359ccd446eSAtari911- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 36369ccd446eSAtari911 36379ccd446eSAtari911### All Backgrounds Now Unified 36389ccd446eSAtari911 36399ccd446eSAtari911**Everything now uses __background_site__**: 36409ccd446eSAtari911- Eventlist sidebar background ✓ 36419ccd446eSAtari911- Main calendar background ✓ 36429ccd446eSAtari911- Calendar day cells ✓ 36439ccd446eSAtari911- Sidebar widget ✓ 36449ccd446eSAtari911- Event items ✓ 36459ccd446eSAtari911- Input fields ✓ 36469ccd446eSAtari911- Buttons ✓ 36479ccd446eSAtari911 36489ccd446eSAtari911**All perfectly matched to the page background!** 36499ccd446eSAtari911 36509ccd446eSAtari911### Why Version 5.2.0 Was Wrong 36519ccd446eSAtari911 36529ccd446eSAtari911I 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. 36539ccd446eSAtari911 36549ccd446eSAtari911**The eventlist knew what it was doing all along!** The cells just needed to catch up. 36559ccd446eSAtari911 36569ccd446eSAtari911## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 36579ccd446eSAtari911**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 36589ccd446eSAtari911 36599ccd446eSAtari911### Fixed: All Backgrounds Now Use __background__ 36609ccd446eSAtari911- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 36619ccd446eSAtari911- **Fixed:** Eventlist, calendar cells, and sidebar all match now 36629ccd446eSAtari911- **Result:** Completely unified background throughout! 36639ccd446eSAtari911 36649ccd446eSAtari911### The Issue 36659ccd446eSAtari911 36669ccd446eSAtari911Different parts of the calendar were using different background sources: 36679ccd446eSAtari911 36689ccd446eSAtari911**Before (v5.1.9)**: 36699ccd446eSAtari911```php 36709ccd446eSAtari911'bg' => __background_site__ // Eventlist background (outer page) 36719ccd446eSAtari911'cell_bg' => __background__ // Cell backgrounds (content area) 36729ccd446eSAtari911``` 36739ccd446eSAtari911 36749ccd446eSAtari911**These are different colors!** 36759ccd446eSAtari911- `__background_site__` = Outer page wrapper (often gray) 36769ccd446eSAtari911- `__background__` = Main content area (often white) 36779ccd446eSAtari911 36789ccd446eSAtari911### The Fix 36799ccd446eSAtari911 36809ccd446eSAtari911**After (v5.2.0)**: 36819ccd446eSAtari911```php 36829ccd446eSAtari911'bg' => __background__ // Eventlist background ✓ 36839ccd446eSAtari911'cell_bg' => __background__ // Cell backgrounds ✓ 36849ccd446eSAtari911``` 36859ccd446eSAtari911 36869ccd446eSAtari911**Both use the same source!** 36879ccd446eSAtari911 36889ccd446eSAtari911### What Uses 'bg' 36899ccd446eSAtari911 36909ccd446eSAtari911The `bg` color is used for: 36919ccd446eSAtari911- Eventlist sidebar background 36929ccd446eSAtari911- Main calendar container 36939ccd446eSAtari911- Sidebar widget background 36949ccd446eSAtari911- Form backgrounds 36959ccd446eSAtari911- Event dialogs 36969ccd446eSAtari911 36979ccd446eSAtari911### What Uses 'cell_bg' 36989ccd446eSAtari911 36999ccd446eSAtari911The `cell_bg` color is used for: 37009ccd446eSAtari911- Calendar day cells 37019ccd446eSAtari911- Event item backgrounds 37029ccd446eSAtari911- Input field backgrounds 37039ccd446eSAtari911- Button backgrounds 37049ccd446eSAtari911 37059ccd446eSAtari911### Why This Matters 37069ccd446eSAtari911 37079ccd446eSAtari911**Template color hierarchy**: 37089ccd446eSAtari911``` 37099ccd446eSAtari911__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 37109ccd446eSAtari911__background__ → Main content area (e.g., #ffffff white) 37119ccd446eSAtari911__background_alt__ → Sections/headers 37129ccd446eSAtari911__background_neu__ → Highlights 37139ccd446eSAtari911``` 37149ccd446eSAtari911 37159ccd446eSAtari911**We want all calendar backgrounds to match the main content area!** 37169ccd446eSAtari911 37179ccd446eSAtari911### Visual Comparison 37189ccd446eSAtari911 37199ccd446eSAtari911**Before (v5.1.9)**: Mismatched backgrounds 37209ccd446eSAtari911``` 37219ccd446eSAtari911┌────────────────────────────────┐ 37229ccd446eSAtari911│ Eventlist (gray #f5f5f5) │ ← __background_site__ 37239ccd446eSAtari911└────────────────────────────────┘ 37249ccd446eSAtari911 37259ccd446eSAtari911┌────────────────────────────────┐ 37269ccd446eSAtari911│ Calendar │ 37279ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 37289ccd446eSAtari911│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 37299ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘ │ 37309ccd446eSAtari911└────────────────────────────────┘ 37319ccd446eSAtari911Different colors - looks inconsistent 37329ccd446eSAtari911``` 37339ccd446eSAtari911 37349ccd446eSAtari911**After (v5.2.0)**: Unified backgrounds 37359ccd446eSAtari911``` 37369ccd446eSAtari911┌────────────────────────────────┐ 37379ccd446eSAtari911│ Eventlist (white #fff) │ ← __background__ 37389ccd446eSAtari911└────────────────────────────────┘ 37399ccd446eSAtari911 37409ccd446eSAtari911┌────────────────────────────────┐ 37419ccd446eSAtari911│ Calendar │ 37429ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 37439ccd446eSAtari911│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 37449ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘ │ 37459ccd446eSAtari911└────────────────────────────────┘ 37469ccd446eSAtari911Same color - perfectly consistent! 37479ccd446eSAtari911``` 37489ccd446eSAtari911 37499ccd446eSAtari911### Template Examples 37509ccd446eSAtari911 37519ccd446eSAtari911**Light Template**: 37529ccd446eSAtari911```ini 37539ccd446eSAtari911__background_site__ = "#f5f5f5" (light gray) 37549ccd446eSAtari911__background__ = "#ffffff" (white) 37559ccd446eSAtari911``` 37569ccd446eSAtari911 37579ccd446eSAtari911**Before**: Eventlist gray, cells white 37589ccd446eSAtari911**After**: Eventlist white, cells white ✓ 37599ccd446eSAtari911 37609ccd446eSAtari911**Dark Template**: 37619ccd446eSAtari911```ini 37629ccd446eSAtari911__background_site__ = "#1a1a1a" (very dark) 37639ccd446eSAtari911__background__ = "#2d2d2d" (dark) 37649ccd446eSAtari911``` 37659ccd446eSAtari911 37669ccd446eSAtari911**Before**: Eventlist very dark, cells dark 37679ccd446eSAtari911**After**: Eventlist dark, cells dark ✓ 37689ccd446eSAtari911 37699ccd446eSAtari911### Benefits 37709ccd446eSAtari911 37719ccd446eSAtari911**Visual Consistency**: 37729ccd446eSAtari911- All backgrounds match 37739ccd446eSAtari911- Clean, unified appearance 37749ccd446eSAtari911- Professional look 37759ccd446eSAtari911 37769ccd446eSAtari911**Correct Template Integration**: 37779ccd446eSAtari911- Uses content area color (not page wrapper) 37789ccd446eSAtari911- Matches wiki content area 37799ccd446eSAtari911- Proper color hierarchy 37809ccd446eSAtari911 37819ccd446eSAtari911**Works Everywhere**: 37829ccd446eSAtari911- Light templates ✓ 37839ccd446eSAtari911- Dark templates ✓ 37849ccd446eSAtari911- Custom templates ✓ 37859ccd446eSAtari911 37869ccd446eSAtari911### All Backgrounds Unified 37879ccd446eSAtari911 37889ccd446eSAtari911**Now using __background__**: 37899ccd446eSAtari911- Eventlist background ✓ 37909ccd446eSAtari911- Calendar cells ✓ 37919ccd446eSAtari911- Sidebar widget ✓ 37929ccd446eSAtari911- Event items ✓ 37939ccd446eSAtari911- Input fields ✓ 37949ccd446eSAtari911- Buttons ✓ 37959ccd446eSAtari911- Dialogs ✓ 37969ccd446eSAtari911 37979ccd446eSAtari911**Perfect harmony throughout!** 37989ccd446eSAtari911 37999ccd446eSAtari911## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 38009ccd446eSAtari911 38019ccd446eSAtari911### Fixed: Wiki Theme Event Backgrounds Not Showing 38029ccd446eSAtari911- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 38039ccd446eSAtari911- **Fixed:** Replaced CSS variables with actual hex colors 38049ccd446eSAtari911- **Result:** Event backgrounds now show correctly with template colors! 38059ccd446eSAtari911 38069ccd446eSAtari911### The Problem 38079ccd446eSAtari911 38089ccd446eSAtari911CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 38099ccd446eSAtari911 38109ccd446eSAtari911**Before (broken)**: 38119ccd446eSAtari911```php 38129ccd446eSAtari911'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 38139ccd446eSAtari911``` 38149ccd446eSAtari911 38159ccd446eSAtari911**After (fixed)**: 38169ccd446eSAtari911```php 38179ccd446eSAtari911'cell_bg' => '#fff', // Actual hex color works! 38189ccd446eSAtari911``` 38199ccd446eSAtari911 38209ccd446eSAtari911### What Was Affected 38219ccd446eSAtari911 38229ccd446eSAtari911**When style.ini read successfully**: 38239ccd446eSAtari911- ✅ Worked fine (uses actual hex colors from file) 38249ccd446eSAtari911 38259ccd446eSAtari911**When style.ini fallback used**: 38269ccd446eSAtari911- ❌ Events had no background 38279ccd446eSAtari911- ❌ CSS variables don't work in inline styles 38289ccd446eSAtari911- ❌ Looked broken 38299ccd446eSAtari911 38309ccd446eSAtari911### The Fix 38319ccd446eSAtari911 38329ccd446eSAtari911**Wiki theme fallback now uses real colors**: 38339ccd446eSAtari911```php 38349ccd446eSAtari911'wiki' => [ 38359ccd446eSAtari911 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 38369ccd446eSAtari911 'border' => '#ccc', // Real hex (was: var(--__border__)) 38379ccd446eSAtari911 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 38389ccd446eSAtari911 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 38399ccd446eSAtari911 'text_primary' => '#333', // Real hex (was: var(--__text__)) 38409ccd446eSAtari911 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 38419ccd446eSAtari911 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 38429ccd446eSAtari911 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 38439ccd446eSAtari911 // ... all colors now use real hex values 38449ccd446eSAtari911] 38459ccd446eSAtari911``` 38469ccd446eSAtari911 38479ccd446eSAtari911### Why CSS Variables Don't Work 38489ccd446eSAtari911 38499ccd446eSAtari911**CSS variables work**: 38509ccd446eSAtari911```css 38519ccd446eSAtari911.some-class { 38529ccd446eSAtari911 background: var(--__background__, #fff); /* ✓ Works in CSS */ 38539ccd446eSAtari911} 38549ccd446eSAtari911``` 38559ccd446eSAtari911 38569ccd446eSAtari911**CSS variables DON'T work**: 38579ccd446eSAtari911```html 38589ccd446eSAtari911<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 38599ccd446eSAtari911``` 38609ccd446eSAtari911 38619ccd446eSAtari911### How It Works Now 38629ccd446eSAtari911 38639ccd446eSAtari911**Priority system**: 38649ccd446eSAtari9111. **Try reading style.ini** → Use actual template hex colors ✓ 38659ccd446eSAtari9112. **If file not found** → Use fallback hex colors ✓ 38669ccd446eSAtari9113. **Never use CSS variables in inline styles** ✓ 38679ccd446eSAtari911 38689ccd446eSAtari911**Both paths now work correctly!** 38699ccd446eSAtari911 38709ccd446eSAtari911### Visual Result 38719ccd446eSAtari911 38729ccd446eSAtari911**Events now have proper backgrounds**: 38739ccd446eSAtari911``` 38749ccd446eSAtari911┌──────────────────────────┐ 38759ccd446eSAtari911│ Meeting at 2pm │ ← White background (#fff) 38769ccd446eSAtari911│ Description here... │ 38779ccd446eSAtari911│ [✏️ Edit] [️ Delete] │ 38789ccd446eSAtari911└──────────────────────────┘ 38799ccd446eSAtari911 38809ccd446eSAtari911Not: 38819ccd446eSAtari911┌──────────────────────────┐ 38829ccd446eSAtari911│ Meeting at 2pm │ ← No background (broken) 38839ccd446eSAtari911│ Description here... │ 38849ccd446eSAtari911└──────────────────────────┘ 38859ccd446eSAtari911``` 38869ccd446eSAtari911 38879ccd446eSAtari911### Affected Areas 38889ccd446eSAtari911 38899ccd446eSAtari911**All event displays**: 38909ccd446eSAtari911- Main calendar events ✓ 38919ccd446eSAtari911- Sidebar widget events ✓ 38929ccd446eSAtari911- Event list items ✓ 38939ccd446eSAtari911- Event backgrounds ✓ 38949ccd446eSAtari911- Button backgrounds ✓ 38959ccd446eSAtari911- Input field backgrounds ✓ 38969ccd446eSAtari911 38979ccd446eSAtari911**Everything uses real colors now!** 38989ccd446eSAtari911 38999ccd446eSAtari911## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 39009ccd446eSAtari911 39019ccd446eSAtari911### Reorganized: Better Update Tab Layout 39029ccd446eSAtari911- **Moved:** Current Version section to the top 39039ccd446eSAtari911- **Combined:** Upload and Important Notes side-by-side 39049ccd446eSAtari911- **Improved:** Space-efficient two-column layout 39059ccd446eSAtari911- **Result:** More information visible at once! 39069ccd446eSAtari911 39079ccd446eSAtari911### New Layout Order 39089ccd446eSAtari911 39099ccd446eSAtari911**Version 5.1.8**: 39109ccd446eSAtari911``` 39119ccd446eSAtari9111. Current Version (at top - see what you have) 39129ccd446eSAtari9112. Upload + Important Notes (side-by-side) 39139ccd446eSAtari9113. Recent Changes (changelog) 39149ccd446eSAtari9114. Backups 39159ccd446eSAtari911``` 39169ccd446eSAtari911 39179ccd446eSAtari911### Side-by-Side Design 39189ccd446eSAtari911 39199ccd446eSAtari911**Upload form (left 60%) + Important Notes (right 40%)**: 39209ccd446eSAtari911``` 39219ccd446eSAtari911┌──────────────────────────────────────────┐ 39229ccd446eSAtari911│ Current Version │ 39239ccd446eSAtari911│ Version: 5.1.8 │ 39249ccd446eSAtari911│ ✅ Permissions: OK │ 39259ccd446eSAtari911└──────────────────────────────────────────┘ 39269ccd446eSAtari911 39279ccd446eSAtari911┌─────────────────────┬────────────────────┐ 39289ccd446eSAtari911│ Upload New │ ⚠️ Important Notes │ 39299ccd446eSAtari911│ [Choose File] │ • Replaces files │ 39309ccd446eSAtari911│ ☑ Backup first │ • Config preserved │ 39319ccd446eSAtari911│ [Upload] [Clear] │ • Events safe │ 39329ccd446eSAtari911└─────────────────────┴────────────────────┘ 39339ccd446eSAtari911``` 39349ccd446eSAtari911 39359ccd446eSAtari911### Benefits 39369ccd446eSAtari911 39379ccd446eSAtari911**Current Version First**: 39389ccd446eSAtari911- See what you have immediately 39399ccd446eSAtari911- Check permissions at a glance 39409ccd446eSAtari911- Know if ready to update 39419ccd446eSAtari911 39429ccd446eSAtari911**Side-by-Side Layout**: 39439ccd446eSAtari911- Upload form and warnings together 39449ccd446eSAtari911- Read notes while choosing file 39459ccd446eSAtari911- More efficient use of space 39469ccd446eSAtari911- Less scrolling needed 39479ccd446eSAtari911 39489ccd446eSAtari911**Better Information Flow**: 39499ccd446eSAtari9111. See current version ✓ 39509ccd446eSAtari9112. Upload new version with notes visible ✓ 39519ccd446eSAtari9113. Review recent changes ✓ 39529ccd446eSAtari9114. Manage backups ✓ 39539ccd446eSAtari911 39549ccd446eSAtari911### Visual Comparison 39559ccd446eSAtari911 39569ccd446eSAtari911**Before (v5.1.7)**: 39579ccd446eSAtari911``` 39589ccd446eSAtari911Important Notes (full width) 39599ccd446eSAtari911↓ 39609ccd446eSAtari911Upload Form (full width) 39619ccd446eSAtari911↓ 39629ccd446eSAtari911Current Version 39639ccd446eSAtari911↓ 39649ccd446eSAtari911Recent Changes 39659ccd446eSAtari911↓ 39669ccd446eSAtari911Backups 39679ccd446eSAtari911``` 39689ccd446eSAtari911 39699ccd446eSAtari911**After (v5.1.8)**: 39709ccd446eSAtari911``` 39719ccd446eSAtari911Current Version (full width) 39729ccd446eSAtari911↓ 39739ccd446eSAtari911Upload (60%) | Notes (40%) 39749ccd446eSAtari911↓ 39759ccd446eSAtari911Recent Changes 39769ccd446eSAtari911↓ 39779ccd446eSAtari911Backups 39789ccd446eSAtari911``` 39799ccd446eSAtari911 39809ccd446eSAtari911**More compact, better organized!** 39819ccd446eSAtari911 39829ccd446eSAtari911### Responsive Design 39839ccd446eSAtari911 39849ccd446eSAtari911**Wide screens**: 39859ccd446eSAtari911- Upload and notes side-by-side 39869ccd446eSAtari911- Full 1200px width utilized 39879ccd446eSAtari911- Efficient space usage 39889ccd446eSAtari911 39899ccd446eSAtari911**Narrow screens**: 39909ccd446eSAtari911- Sections stack gracefully 39919ccd446eSAtari911- Flex layout adapts 39929ccd446eSAtari911- Still fully functional 39939ccd446eSAtari911 39949ccd446eSAtari911### Layout Details 39959ccd446eSAtari911 39969ccd446eSAtari911**Current Version Section**: 39979ccd446eSAtari911- Full width (1200px max) 39989ccd446eSAtari911- Shows version, author, description 39999ccd446eSAtari911- Permission status with icons 40009ccd446eSAtari911- Helpful fix commands if needed 40019ccd446eSAtari911 40029ccd446eSAtari911**Upload/Notes Section**: 40039ccd446eSAtari911- Flexbox layout with gap 40049ccd446eSAtari911- Upload: `flex:1` (grows) 40059ccd446eSAtari911- Notes: `flex:0 0 350px` (fixed 350px) 40069ccd446eSAtari911- Both have proper min-width 40079ccd446eSAtari911 40089ccd446eSAtari911**Recent Changes Section**: 40099ccd446eSAtari911- Full width (1200px max) 40109ccd446eSAtari911- Compact scrollable view 40119ccd446eSAtari911- Color-coded change types 40129ccd446eSAtari911- Last 10 versions shown 40139ccd446eSAtari911 40149ccd446eSAtari911**Backups Section**: 40159ccd446eSAtari911- Full width (1200px max) 40169ccd446eSAtari911- Manual backup button 40179ccd446eSAtari911- Scrollable file list 40189ccd446eSAtari911- All actions accessible 40199ccd446eSAtari911 40209ccd446eSAtari911### Improved Max Widths 40219ccd446eSAtari911 40229ccd446eSAtari911All sections now use `max-width:1200px` (previously 900px): 40239ccd446eSAtari911- Better use of wide screens 40249ccd446eSAtari911- Still responsive on narrow screens 40259ccd446eSAtari911- Consistent throughout tab 40269ccd446eSAtari911 40279ccd446eSAtari911## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 40289ccd446eSAtari911 40299ccd446eSAtari911### Fixed: Extra Closing Brace 40309ccd446eSAtari911- **Fixed:** ParseError on line 1936 (extra closing brace) 40319ccd446eSAtari911- **Result:** Manual backup feature now works correctly! 40329ccd446eSAtari911 40339ccd446eSAtari911### What Was Wrong 40349ccd446eSAtari911 40359ccd446eSAtari911Extra `}` after the backup section: 40369ccd446eSAtari911 40379ccd446eSAtari911**Before (broken)**: 40389ccd446eSAtari911```php 40399ccd446eSAtari911echo '</div>'; 40409ccd446eSAtari911} // ← Extra closing brace! 40419ccd446eSAtari911 40429ccd446eSAtari911echo '<script> 40439ccd446eSAtari911``` 40449ccd446eSAtari911 40459ccd446eSAtari911**After (fixed)**: 40469ccd446eSAtari911```php 40479ccd446eSAtari911echo '</div>'; 40489ccd446eSAtari911 40499ccd446eSAtari911echo '<script> 40509ccd446eSAtari911``` 40519ccd446eSAtari911 40529ccd446eSAtari911**Manual backup feature now fully functional!** ✅ 40539ccd446eSAtari911 40549ccd446eSAtari911## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 40559ccd446eSAtari911 40569ccd446eSAtari911### Added: Create Backup Manually Anytime 40579ccd446eSAtari911- **Added:** "Create Backup Now" button in Backups section 40589ccd446eSAtari911- **Added:** Manual backup action handler with full verification 40599ccd446eSAtari911- **Added:** Backups section always visible (even with no backups) 40609ccd446eSAtari911- **Added:** Success message showing file size and file count 40619ccd446eSAtari911- **Result:** Create backups anytime without needing to upload! 40629ccd446eSAtari911 40639ccd446eSAtari911### Manual Backup Button 40649ccd446eSAtari911 40659ccd446eSAtari911**New Layout**: 40669ccd446eSAtari911``` 40679ccd446eSAtari911┌─────────────────────────────────────┐ 40689ccd446eSAtari911│ Backups [ Create Backup Now] │ 40699ccd446eSAtari911├─────────────────────────────────────┤ 40709ccd446eSAtari911│ Backup File Size │ 40719ccd446eSAtari911│ calendar.backup.v5.1.6... 243 KB │ 40729ccd446eSAtari911│ [ Download] [✏️ Rename] [️ Delete] │ 40739ccd446eSAtari911└─────────────────────────────────────┘ 40749ccd446eSAtari911``` 40759ccd446eSAtari911 40769ccd446eSAtari911**Always visible - even with no backups**: 40779ccd446eSAtari911``` 40789ccd446eSAtari911┌─────────────────────────────────────┐ 40799ccd446eSAtari911│ Backups [ Create Backup Now] │ 40809ccd446eSAtari911├─────────────────────────────────────┤ 40819ccd446eSAtari911│ No backups yet. Click "Create │ 40829ccd446eSAtari911│ Backup Now" to create your first │ 40839ccd446eSAtari911│ backup. │ 40849ccd446eSAtari911└─────────────────────────────────────┘ 40859ccd446eSAtari911``` 40869ccd446eSAtari911 40879ccd446eSAtari911### How It Works 40889ccd446eSAtari911 40899ccd446eSAtari911**Click the button**: 40909ccd446eSAtari9111. Confirm: "Create a backup of the current plugin version?" 40919ccd446eSAtari9112. System creates backup ZIP 40929ccd446eSAtari9113. Verifies: File count (30+ files) 40939ccd446eSAtari9114. Verifies: File size (200KB+) 40949ccd446eSAtari9115. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 40959ccd446eSAtari911 40969ccd446eSAtari911**Backup naming**: 40979ccd446eSAtari911``` 40989ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 40999ccd446eSAtari911 ^^^^^^ 41009ccd446eSAtari911 "manual" tag identifies manual backups 41019ccd446eSAtari911``` 41029ccd446eSAtari911 41039ccd446eSAtari911### Use Cases 41049ccd446eSAtari911 41059ccd446eSAtari911**Before updates**: 41069ccd446eSAtari911- Create safety backup before uploading new version 41079ccd446eSAtari911- Have multiple restore points 41089ccd446eSAtari911- Test new features with fallback 41099ccd446eSAtari911 41109ccd446eSAtari911**Regular backups**: 41119ccd446eSAtari911- Weekly/monthly backup schedule 41129ccd446eSAtari911- Before making configuration changes 41139ccd446eSAtari911- After important customizations 41149ccd446eSAtari911 41159ccd446eSAtari911**Development**: 41169ccd446eSAtari911- Backup before code experiments 41179ccd446eSAtari911- Save working states 41189ccd446eSAtari911- Quick rollback points 41199ccd446eSAtari911 41209ccd446eSAtari911### Full Verification 41219ccd446eSAtari911 41229ccd446eSAtari911**Same checks as automatic backups**: 41239ccd446eSAtari911- ✅ File count check (minimum 10, expected 30+) 41249ccd446eSAtari911- ✅ File size check (minimum 1KB, expected 200KB+) 41259ccd446eSAtari911- ✅ Existence check (file actually created) 41269ccd446eSAtari911- ✅ Automatic cleanup on failure 41279ccd446eSAtari911 41289ccd446eSAtari911**Success message includes**: 41299ccd446eSAtari911- Backup filename 41309ccd446eSAtari911- File size (human-readable) 41319ccd446eSAtari911- Number of files backed up 41329ccd446eSAtari911 41339ccd446eSAtari911### Example Messages 41349ccd446eSAtari911 41359ccd446eSAtari911**Success**: 41369ccd446eSAtari911``` 41379ccd446eSAtari911✓ Manual backup created successfully: 41389ccd446eSAtari911 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 41399ccd446eSAtari911 (243 KB, 31 files) 41409ccd446eSAtari911``` 41419ccd446eSAtari911 41429ccd446eSAtari911**Failure Examples**: 41439ccd446eSAtari911``` 41449ccd446eSAtari911❌ Plugin directory is not readable. 41459ccd446eSAtari911 Please check permissions. 41469ccd446eSAtari911 41479ccd446eSAtari911❌ Backup incomplete: Only 5 files were added (expected 30+). 41489ccd446eSAtari911 Backup failed. 41499ccd446eSAtari911 41509ccd446eSAtari911❌ Backup file is too small (342 bytes). 41519ccd446eSAtari911 Only 3 files were added. Backup failed. 41529ccd446eSAtari911``` 41539ccd446eSAtari911 41549ccd446eSAtari911### Benefits 41559ccd446eSAtari911 41569ccd446eSAtari911**On-Demand Safety**: 41579ccd446eSAtari911- Create backups anytime 41589ccd446eSAtari911- No need to upload new version 41599ccd446eSAtari911- Quick and easy 41609ccd446eSAtari911 41619ccd446eSAtari911**Peace of Mind**: 41629ccd446eSAtari911- Backup before risky changes 41639ccd446eSAtari911- Multiple restore points 41649ccd446eSAtari911- Safe experimentation 41659ccd446eSAtari911 41669ccd446eSAtari911**Professional Workflow**: 41679ccd446eSAtari911- Regular backup schedule 41689ccd446eSAtari911- Version snapshots 41699ccd446eSAtari911- Disaster recovery 41709ccd446eSAtari911 41719ccd446eSAtari911### Backup Section Improvements 41729ccd446eSAtari911 41739ccd446eSAtari911**Always Visible**: 41749ccd446eSAtari911- Section shows even with 0 backups 41759ccd446eSAtari911- Button always accessible 41769ccd446eSAtari911- Clear call-to-action 41779ccd446eSAtari911 41789ccd446eSAtari911**Better Header**: 41799ccd446eSAtari911- Title and button on same row 41809ccd446eSAtari911- Clean, professional layout 41819ccd446eSAtari911- Space-efficient design 41829ccd446eSAtari911 41839ccd446eSAtari911### Technical Details 41849ccd446eSAtari911 41859ccd446eSAtari911**New Action**: `create_manual_backup` 41869ccd446eSAtari911 41879ccd446eSAtari911**New Function**: `createManualBackup()` 41889ccd446eSAtari911- Gets current version 41899ccd446eSAtari911- Creates timestamped filename with "manual" tag 41909ccd446eSAtari911- Uses same verification as auto-backups 41919ccd446eSAtari911- Shows detailed success/error messages 41929ccd446eSAtari911 41939ccd446eSAtari911**File Naming Convention**: 41949ccd446eSAtari911``` 41959ccd446eSAtari911Automatic (on upload): 41969ccd446eSAtari911calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 41979ccd446eSAtari911 41989ccd446eSAtari911Manual (button click): 41999ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 42009ccd446eSAtari911 ^^^^^^^ 42019ccd446eSAtari911 Easy to identify! 42029ccd446eSAtari911``` 42039ccd446eSAtari911 42049ccd446eSAtari911### Permissions Required 42059ccd446eSAtari911 42069ccd446eSAtari911- **Read access**: Plugin directory 42079ccd446eSAtari911- **Write access**: Parent plugins directory 42089ccd446eSAtari911 42099ccd446eSAtari911**Same as automatic backups** - no additional permissions needed! 42109ccd446eSAtari911 42119ccd446eSAtari911## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 42129ccd446eSAtari911 42139ccd446eSAtari911### Enhanced: Backup Creation with Robust Verification 42149ccd446eSAtari911- **Added:** File count validation (must have 10+ files) 42159ccd446eSAtari911- **Added:** File size validation (must be 1KB+ minimum) 42169ccd446eSAtari911- **Added:** Return value from addDirectoryToZip (counts files added) 42179ccd446eSAtari911- **Added:** Detailed error messages showing file count 42189ccd446eSAtari911- **Added:** Automatic deletion of invalid/incomplete backups 42199ccd446eSAtari911- **Enhanced:** Exception handling with proper error propagation 42209ccd446eSAtari911- **Result:** Backups are now guaranteed to be complete or fail clearly! 42219ccd446eSAtari911 42229ccd446eSAtari911### What Changed 42239ccd446eSAtari911 42249ccd446eSAtari911**Before (v5.1.4)**: 42259ccd446eSAtari911```php 42269ccd446eSAtari911$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 42279ccd446eSAtari911$zip->close(); 42289ccd446eSAtari911// No verification - could create empty or partial backup 42299ccd446eSAtari911``` 42309ccd446eSAtari911 42319ccd446eSAtari911**After (v5.1.5)**: 42329ccd446eSAtari911```php 42339ccd446eSAtari911$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 42349ccd446eSAtari911$zip->close(); 42359ccd446eSAtari911 42369ccd446eSAtari911// Verify backup exists 42379ccd446eSAtari911if (!file_exists($backupPath)) { 42389ccd446eSAtari911 redirect('Backup file was not created'); 42399ccd446eSAtari911} 42409ccd446eSAtari911 42419ccd446eSAtari911// Verify backup has content 42429ccd446eSAtari911$backupSize = filesize($backupPath); 42439ccd446eSAtari911if ($backupSize < 1000) { 42449ccd446eSAtari911 unlink($backupPath); 42459ccd446eSAtari911 redirect('Backup too small: ' . $backupSize . ' bytes'); 42469ccd446eSAtari911} 42479ccd446eSAtari911 42489ccd446eSAtari911// Verify file count 42499ccd446eSAtari911if ($fileCount < 10) { 42509ccd446eSAtari911 unlink($backupPath); 42519ccd446eSAtari911 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 42529ccd446eSAtari911} 42539ccd446eSAtari911``` 42549ccd446eSAtari911 42559ccd446eSAtari911### Backup Validation Checks 42569ccd446eSAtari911 42579ccd446eSAtari911**Three-Layer Verification**: 42589ccd446eSAtari911 42599ccd446eSAtari9111. **File Count Check**: 42609ccd446eSAtari911 - Minimum: 10 files required 42619ccd446eSAtari911 - Expected: 30+ files 42629ccd446eSAtari911 - Action: Delete backup if too few files 42639ccd446eSAtari911 42649ccd446eSAtari9112. **Size Check**: 42659ccd446eSAtari911 - Minimum: 1KB (1000 bytes) 42669ccd446eSAtari911 - Expected: 200-250KB 42679ccd446eSAtari911 - Action: Delete backup if too small 42689ccd446eSAtari911 42699ccd446eSAtari9113. **Existence Check**: 42709ccd446eSAtari911 - Verify file was actually created 42719ccd446eSAtari911 - Check ZIP archive is valid 42729ccd446eSAtari911 - Action: Error if file missing 42739ccd446eSAtari911 42749ccd446eSAtari911### Enhanced Error Reporting 42759ccd446eSAtari911 42769ccd446eSAtari911**Detailed Error Messages**: 42779ccd446eSAtari911``` 42789ccd446eSAtari911❌ "Backup file was not created" 42799ccd446eSAtari911❌ "Backup too small (342 bytes). Only 3 files added." 42809ccd446eSAtari911❌ "Only 5 files added (expected 30+). Backup aborted." 42819ccd446eSAtari911❌ "Too many errors adding files: Failed to add X, Y, Z..." 42829ccd446eSAtari911❌ "Directory does not exist: /path/to/dir" 42839ccd446eSAtari911❌ "Directory is not readable: /path/to/dir" 42849ccd446eSAtari911``` 42859ccd446eSAtari911 42869ccd446eSAtari911**Now you know exactly what went wrong!** 42879ccd446eSAtari911 42889ccd446eSAtari911### Improved addDirectoryToZip Function 42899ccd446eSAtari911 42909ccd446eSAtari911**Returns File Count**: 42919ccd446eSAtari911```php 42929ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') { 42939ccd446eSAtari911 $fileCount = 0; 42949ccd446eSAtari911 $errors = []; 42959ccd446eSAtari911 42969ccd446eSAtari911 // Validation 42979ccd446eSAtari911 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 42989ccd446eSAtari911 if (!is_readable($dir)) throw new Exception("Not readable"); 42999ccd446eSAtari911 43009ccd446eSAtari911 // Add files 43019ccd446eSAtari911 foreach ($files as $file) { 43029ccd446eSAtari911 if ($zip->addFile($filePath, $relativePath)) { 43039ccd446eSAtari911 $fileCount++; 43049ccd446eSAtari911 } else { 43059ccd446eSAtari911 $errors[] = "Failed to add: " . $filename; 43069ccd446eSAtari911 } 43079ccd446eSAtari911 } 43089ccd446eSAtari911 43099ccd446eSAtari911 // Check error threshold 43109ccd446eSAtari911 if (count($errors) > 5) { 43119ccd446eSAtari911 throw new Exception("Too many errors"); 43129ccd446eSAtari911 } 43139ccd446eSAtari911 43149ccd446eSAtari911 return $fileCount; // Returns count for verification! 43159ccd446eSAtari911} 43169ccd446eSAtari911``` 43179ccd446eSAtari911 43189ccd446eSAtari911### Safety Features 43199ccd446eSAtari911 43209ccd446eSAtari911**Invalid Backup Cleanup**: 43219ccd446eSAtari911- Failed backups are automatically deleted 43229ccd446eSAtari911- No partial/corrupt backups left behind 43239ccd446eSAtari911- Clean error state 43249ccd446eSAtari911 43259ccd446eSAtari911**Error Threshold**: 43269ccd446eSAtari911- Allow up to 5 minor file errors (logs warnings) 43279ccd446eSAtari911- More than 5 errors = complete failure 43289ccd446eSAtari911- Prevents partially corrupt backups 43299ccd446eSAtari911 43309ccd446eSAtari911**Directory Validation**: 43319ccd446eSAtari911- Check directory exists before processing 43329ccd446eSAtari911- Check directory is readable 43339ccd446eSAtari911- Fail fast with clear errors 43349ccd446eSAtari911 43359ccd446eSAtari911### Benefits 43369ccd446eSAtari911 43379ccd446eSAtari911**Guaranteed Complete Backups**: 43389ccd446eSAtari911- ✅ All files included or backup fails 43399ccd446eSAtari911- ✅ No silent failures 43409ccd446eSAtari911- ✅ Clear error messages 43419ccd446eSAtari911- ✅ Automatic cleanup 43429ccd446eSAtari911 43439ccd446eSAtari911**Better Debugging**: 43449ccd446eSAtari911- Know exactly how many files were added 43459ccd446eSAtari911- See specific errors for missing files 43469ccd446eSAtari911- Understand why backup failed 43479ccd446eSAtari911 43489ccd446eSAtari911**User Confidence**: 43499ccd446eSAtari911- Backup succeeds = complete backup 43509ccd446eSAtari911- Backup fails = clear error message 43519ccd446eSAtari911- No ambiguity 43529ccd446eSAtari911 43539ccd446eSAtari911### Example Scenarios 43549ccd446eSAtari911 43559ccd446eSAtari911**Scenario 1: Permission Issue** 43569ccd446eSAtari911``` 43579ccd446eSAtari911User uploads new version 43589ccd446eSAtari911System starts backup 43599ccd446eSAtari911Error: "Directory is not readable: /lib/plugins/calendar/" 43609ccd446eSAtari911Backup fails before creating file 43619ccd446eSAtari911User sees clear error message 43629ccd446eSAtari911``` 43639ccd446eSAtari911 43649ccd446eSAtari911**Scenario 2: Partial Backup** 43659ccd446eSAtari911``` 43669ccd446eSAtari911User uploads new version 43679ccd446eSAtari911System creates backup 43689ccd446eSAtari911Only 5 files added (disk issue?) 43699ccd446eSAtari911Size: 450 bytes 43709ccd446eSAtari911Verification fails 43719ccd446eSAtari911Incomplete backup deleted 43729ccd446eSAtari911Error: "Only 5 files added (expected 30+)" 43739ccd446eSAtari911``` 43749ccd446eSAtari911 43759ccd446eSAtari911**Scenario 3: Success** 43769ccd446eSAtari911``` 43779ccd446eSAtari911User uploads new version 43789ccd446eSAtari911System creates backup 43799ccd446eSAtari91131 files added 43809ccd446eSAtari911Size: 240KB 43819ccd446eSAtari911All verifications pass ✅ 43829ccd446eSAtari911Update proceeds 43839ccd446eSAtari911``` 43849ccd446eSAtari911 43859ccd446eSAtari911### Testing Recommendations 43869ccd446eSAtari911 43879ccd446eSAtari911After installing v5.1.5: 43889ccd446eSAtari9111. Upload a new version with backup enabled 43899ccd446eSAtari9112. Check for success message 43909ccd446eSAtari9113. Verify backup file exists in /lib/plugins/ 43919ccd446eSAtari9114. Check backup file size (should be ~240KB) 43929ccd446eSAtari9115. If backup fails, read error message carefully 43939ccd446eSAtari911 43949ccd446eSAtari911**Your backups are now bulletproof!** 43959ccd446eSAtari911 43969ccd446eSAtari911## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 43979ccd446eSAtari911 43989ccd446eSAtari911### ✅ Verified: Backup System Working Correctly 43999ccd446eSAtari911- **Verified:** addDirectoryToZip function includes all files recursively 44009ccd446eSAtari911- **Verified:** Backups contain all 31+ files from calendar directory 44019ccd446eSAtari911- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 44029ccd446eSAtari911- **Info:** Backup sizes grow slightly with each version (more code = more features!) 44039ccd446eSAtari911- **Result:** Backup system is working perfectly! 44049ccd446eSAtari911 44059ccd446eSAtari911### Backup System Details 44069ccd446eSAtari911 44079ccd446eSAtari911**What Gets Backed Up**: 44089ccd446eSAtari911- All PHP files (syntax.php, admin.php, action.php, etc.) 44099ccd446eSAtari911- All JavaScript files (calendar-main.js, script.js) 44109ccd446eSAtari911- All documentation (CHANGELOG.md, README.md, all guides) 44119ccd446eSAtari911- All configuration (sync_config.php) 44129ccd446eSAtari911- All language files 44139ccd446eSAtari911- All assets and resources 44149ccd446eSAtari911- **Everything in the calendar/ directory!** 44159ccd446eSAtari911 44169ccd446eSAtari911**Backup Size Analysis**: 44179ccd446eSAtari911``` 44189ccd446eSAtari911Version 5.0.4: 233KB (normal) 44199ccd446eSAtari911Version 5.0.5: 234KB (normal) 44209ccd446eSAtari911Version 5.0.6: 235KB (normal) 44219ccd446eSAtari911Version 5.0.7: 236KB (normal) 44229ccd446eSAtari911Version 5.0.8: 237KB (normal) 44239ccd446eSAtari911Version 5.0.9: 237KB (normal) 44249ccd446eSAtari911Version 5.1.0: 238KB (normal) 44259ccd446eSAtari911Version 5.1.1: 238KB (normal) 44269ccd446eSAtari911Version 5.1.2: 240KB (normal - added AJAX features) 44279ccd446eSAtari911Version 5.1.3: 240KB (normal) 44289ccd446eSAtari911``` 44299ccd446eSAtari911 44309ccd446eSAtari911**Why Sizes Grow**: 44319ccd446eSAtari911- More features = more code 44329ccd446eSAtari911- Longer CHANGELOG 44339ccd446eSAtari911- Additional documentation 44349ccd446eSAtari911- New functionality 44359ccd446eSAtari911- **This is expected and normal!** 44369ccd446eSAtari911 44379ccd446eSAtari911**Compression Ratio**: 44389ccd446eSAtari911``` 44399ccd446eSAtari911Uncompressed: ~1.0 MB (source files) 44409ccd446eSAtari911Compressed: ~240 KB (ZIP archive) 44419ccd446eSAtari911Ratio: ~24% (excellent compression!) 44429ccd446eSAtari911``` 44439ccd446eSAtari911 44449ccd446eSAtari911### Backup File Contents 44459ccd446eSAtari911 44469ccd446eSAtari911**31 Files Included**: 44479ccd446eSAtari911``` 44489ccd446eSAtari911admin.php (216KB - main admin interface) 44499ccd446eSAtari911syntax.php (173KB - calendar rendering) 44509ccd446eSAtari911calendar-main.js (102KB - JavaScript functionality) 44519ccd446eSAtari911CHANGELOG.md (268KB - complete version history) 44529ccd446eSAtari911style.css (57KB - all styling) 44539ccd446eSAtari911action.php (38KB - DokuWiki actions) 44549ccd446eSAtari911sync_outlook.php (32KB - Outlook integration) 44559ccd446eSAtari911+ 24 other files (docs, configs, helpers) 44569ccd446eSAtari911``` 44579ccd446eSAtari911 44589ccd446eSAtari911**All files successfully included!** ✅ 44599ccd446eSAtari911 44609ccd446eSAtari911### How Backups Work 44619ccd446eSAtari911 44629ccd446eSAtari911**Creation Process**: 44639ccd446eSAtari9111. User uploads new plugin version 44649ccd446eSAtari9112. Checkbox "Create backup first" (checked by default) 44659ccd446eSAtari9113. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 44669ccd446eSAtari9114. Backup saved to: `/lib/plugins/` directory 44679ccd446eSAtari9115. Then proceeds with update 44689ccd446eSAtari911 44699ccd446eSAtari911**Backup Function**: 44709ccd446eSAtari911```php 44719ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') { 44729ccd446eSAtari911 $files = new RecursiveIteratorIterator( 44739ccd446eSAtari911 new RecursiveDirectoryIterator($dir), 44749ccd446eSAtari911 RecursiveIteratorIterator::LEAVES_ONLY 44759ccd446eSAtari911 ); 44769ccd446eSAtari911 foreach ($files as $file) { 44779ccd446eSAtari911 if (!$file->isDir()) { 44789ccd446eSAtari911 $zip->addFile($filePath, $relativePath); 44799ccd446eSAtari911 } 44809ccd446eSAtari911 } 44819ccd446eSAtari911} 44829ccd446eSAtari911``` 44839ccd446eSAtari911 44849ccd446eSAtari911**Recursive = Gets Everything!** ✅ 44859ccd446eSAtari911 44869ccd446eSAtari911### Verification Results 44879ccd446eSAtari911 44889ccd446eSAtari911**Test Results**: 44899ccd446eSAtari911- ✅ All 31 files present in zip 44909ccd446eSAtari911- ✅ All subdirectories included (lang/en/) 44919ccd446eSAtari911- ✅ File sizes match originals 44929ccd446eSAtari911- ✅ Compression works properly 44939ccd446eSAtari911- ✅ No files missing 44949ccd446eSAtari911- ✅ Backup can be restored 44959ccd446eSAtari911 44969ccd446eSAtari911**File Count**: 44979ccd446eSAtari911``` 44989ccd446eSAtari911Source directory: 31 files 44999ccd446eSAtari911Backup ZIP: 34 items (31 files + 3 directories) 45009ccd446eSAtari911Status: COMPLETE ✅ 45019ccd446eSAtari911``` 45029ccd446eSAtari911 45039ccd446eSAtari911### Backup Best Practices 45049ccd446eSAtari911 45059ccd446eSAtari911**Always enabled by default** ✅ 45069ccd446eSAtari911**Stored in accessible location** ✅ 45079ccd446eSAtari911**Timestamped filenames** ✅ 45089ccd446eSAtari911**Complete directory backup** ✅ 45099ccd446eSAtari911**Easy to restore** ✅ 45109ccd446eSAtari911 45119ccd446eSAtari911### Conclusion 45129ccd446eSAtari911 45139ccd446eSAtari911The backup system is working perfectly. The file sizes are appropriate and expected: 45149ccd446eSAtari911- Compressed size: ~240KB (good compression) 45159ccd446eSAtari911- Uncompressed size: ~1MB (all source files) 45169ccd446eSAtari911- All files included: YES ✅ 45179ccd446eSAtari911- Growing size over versions: Normal (more features!) 45189ccd446eSAtari911 45199ccd446eSAtari911**Your backups are complete and reliable!** 45209ccd446eSAtari911 45219ccd446eSAtari911## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 45229ccd446eSAtari911 45239ccd446eSAtari911### Fixed: JavaScript Syntax Error in AJAX Function 45249ccd446eSAtari911- **Fixed:** ParseError on line 1947 (deleteBackup function) 45259ccd446eSAtari911- **Fixed:** Escaped all single quotes in JavaScript strings 45269ccd446eSAtari911- **Result:** AJAX backup deletion now works correctly! 45279ccd446eSAtari911 45289ccd446eSAtari911### What Was Wrong 45299ccd446eSAtari911 45309ccd446eSAtari911JavaScript inside PHP echo needs escaped quotes: 45319ccd446eSAtari911 45329ccd446eSAtari911**Before (broken)**: 45339ccd446eSAtari911```javascript 45349ccd446eSAtari911formData.append('action', 'delete_backup'); // PHP interprets quotes 45359ccd446eSAtari911``` 45369ccd446eSAtari911 45379ccd446eSAtari911**After (fixed)**: 45389ccd446eSAtari911```javascript 45399ccd446eSAtari911formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 45409ccd446eSAtari911``` 45419ccd446eSAtari911 45429ccd446eSAtari911### All Quotes Escaped 45439ccd446eSAtari911 45449ccd446eSAtari911Fixed in deleteBackup function: 45459ccd446eSAtari911- ✅ FormData.append() calls 45469ccd446eSAtari911- ✅ fetch() URL 45479ccd446eSAtari911- ✅ querySelector() calls 45489ccd446eSAtari911- ✅ createElement() call 45499ccd446eSAtari911- ✅ All string literals 45509ccd446eSAtari911- ✅ Error messages 45519ccd446eSAtari911 45529ccd446eSAtari911**JavaScript now works!** ✓ 45539ccd446eSAtari911 45549ccd446eSAtari911## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 45559ccd446eSAtari911 45569ccd446eSAtari911### Improved: Update Tab Further Refined 45579ccd446eSAtari911- **Moved:** Important Notes to very top (above upload) 45589ccd446eSAtari911- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 45599ccd446eSAtari911- **Added:** Smooth fade-out animation when deleting backups 45609ccd446eSAtari911- **Added:** Success message after deletion 45619ccd446eSAtari911- **Auto-remove:** Backup section disappears if last backup deleted 45629ccd446eSAtari911- **Result:** Smoother, more polished experience! 45639ccd446eSAtari911 45649ccd446eSAtari911### New Layout Order 45659ccd446eSAtari911 45669ccd446eSAtari911**Final Order (v5.1.2)**: 45679ccd446eSAtari911``` 45689ccd446eSAtari9111. ⚠️ Important Notes (warnings at top) 45699ccd446eSAtari9112. Upload New Version (with Clear Cache button) 45709ccd446eSAtari9113. Current Version (info) 45719ccd446eSAtari9114. Recent Changes (changelog) 45729ccd446eSAtari9115. Available Backups (if any) 45739ccd446eSAtari911``` 45749ccd446eSAtari911 45759ccd446eSAtari911### AJAX Backup Deletion 45769ccd446eSAtari911 45779ccd446eSAtari911**Before (v5.1.1)**: 45789ccd446eSAtari911- Click Delete → Page refreshes → Scroll back down 45799ccd446eSAtari911- Lose position on page 45809ccd446eSAtari911- Page reload is jarring 45819ccd446eSAtari911 45829ccd446eSAtari911**After (v5.1.2)**: 45839ccd446eSAtari911- Click Delete → Confirm 45849ccd446eSAtari911- Row fades out smoothly 45859ccd446eSAtari911- Row disappears 45869ccd446eSAtari911- Success message shows at top 45879ccd446eSAtari911- Success message fades after 3 seconds 45889ccd446eSAtari911- If last backup: entire section fades away 45899ccd446eSAtari911- **No page refresh!** ✓ 45909ccd446eSAtari911 45919ccd446eSAtari911### Visual Flow 45929ccd446eSAtari911 45939ccd446eSAtari911**Delete Animation**: 45949ccd446eSAtari911``` 45959ccd446eSAtari9111. Click ️ Delete 45969ccd446eSAtari9112. Confirm dialog 45979ccd446eSAtari9113. Row fades out (0.3s) 45989ccd446eSAtari9114. Row removed 45999ccd446eSAtari9115. Success message appears 46009ccd446eSAtari9116. Message fades after 3s 46019ccd446eSAtari911``` 46029ccd446eSAtari911 46039ccd446eSAtari911**If Last Backup**: 46049ccd446eSAtari911``` 46059ccd446eSAtari9111. Delete last backup 46069ccd446eSAtari9112. Row fades out 46079ccd446eSAtari9113. Entire "Available Backups" section fades 46089ccd446eSAtari9114. Section removed 46099ccd446eSAtari9115. Clean interface ✓ 46109ccd446eSAtari911``` 46119ccd446eSAtari911 46129ccd446eSAtari911### Success Message 46139ccd446eSAtari911 46149ccd446eSAtari911After deleting: 46159ccd446eSAtari911``` 46169ccd446eSAtari911┌──────────────────────────────┐ 46179ccd446eSAtari911│ ✓ Backup deleted: filename │ ← Appears at top 46189ccd446eSAtari911└──────────────────────────────┘ 46199ccd446eSAtari911 Fades after 3 seconds 46209ccd446eSAtari911``` 46219ccd446eSAtari911 46229ccd446eSAtari911### Benefits 46239ccd446eSAtari911 46249ccd446eSAtari911**Important Notes First**: 46259ccd446eSAtari911- Warnings before actions ✓ 46269ccd446eSAtari911- Read before uploading ✓ 46279ccd446eSAtari911- Clear expectations ✓ 46289ccd446eSAtari911 46299ccd446eSAtari911**AJAX Deletion**: 46309ccd446eSAtari911- No page refresh ✓ 46319ccd446eSAtari911- Smooth animations ✓ 46329ccd446eSAtari911- Stay in context ✓ 46339ccd446eSAtari911- Professional feel ✓ 46349ccd446eSAtari911 46359ccd446eSAtari911**Auto-Cleanup**: 46369ccd446eSAtari911- Empty list disappears ✓ 46379ccd446eSAtari911- Clean interface ✓ 46389ccd446eSAtari911- No clutter ✓ 46399ccd446eSAtari911 46409ccd446eSAtari911### Technical Implementation 46419ccd446eSAtari911 46429ccd446eSAtari911**AJAX Request**: 46439ccd446eSAtari911```javascript 46449ccd446eSAtari911fetch('?do=admin&page=calendar&tab=update', { 46459ccd446eSAtari911 method: 'POST', 46469ccd446eSAtari911 body: formData 46479ccd446eSAtari911}) 46489ccd446eSAtari911``` 46499ccd446eSAtari911 46509ccd446eSAtari911**DOM Manipulation**: 46519ccd446eSAtari911- Fade out row 46529ccd446eSAtari911- Remove element 46539ccd446eSAtari911- Show success 46549ccd446eSAtari911- Remove section if empty 46559ccd446eSAtari911 46569ccd446eSAtari911**Smooth Transitions**: 46579ccd446eSAtari911- 300ms fade animations 46589ccd446eSAtari911- Clean visual feedback 46599ccd446eSAtari911- Professional polish 46609ccd446eSAtari911 46619ccd446eSAtari911## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 46629ccd446eSAtari911 46639ccd446eSAtari911### Improved: Update Tab Layout Reorganized 46649ccd446eSAtari911- **Moved:** Upload section to the top of the page 46659ccd446eSAtari911- **Added:** Clear Cache button next to Upload & Install button 46669ccd446eSAtari911- **Changed:** "Current Version" section moved below upload 46679ccd446eSAtari911- **Result:** Better workflow - upload first, then see version info! 46689ccd446eSAtari911 46699ccd446eSAtari911### New Layout Order 46709ccd446eSAtari911 46719ccd446eSAtari911**Before (v5.1.0)**: 46729ccd446eSAtari911``` 46739ccd446eSAtari9111. Clear Cache (standalone) 46749ccd446eSAtari9112. Current Version 46759ccd446eSAtari9113. Recent Changes 46769ccd446eSAtari9114. Upload New Version 46779ccd446eSAtari9115. Warning Box 46789ccd446eSAtari9116. Backups 46799ccd446eSAtari911``` 46809ccd446eSAtari911 46819ccd446eSAtari911**After (v5.1.1)**: 46829ccd446eSAtari911``` 46839ccd446eSAtari9111. Upload New Version (with Clear Cache button side-by-side) 46849ccd446eSAtari9112. Warning Box 46859ccd446eSAtari9113. Current Version 46869ccd446eSAtari9114. Recent Changes 46879ccd446eSAtari9115. Backups 46889ccd446eSAtari911``` 46899ccd446eSAtari911 46909ccd446eSAtari911### Visual Result 46919ccd446eSAtari911 46929ccd446eSAtari911**Top of Update Tab**: 46939ccd446eSAtari911``` 46949ccd446eSAtari911┌─────────────────────────────────┐ 46959ccd446eSAtari911│ Upload New Version │ 46969ccd446eSAtari911│ ┌─────────────────────────────┐ │ 46979ccd446eSAtari911│ │ [Choose File] │ │ 46989ccd446eSAtari911│ │ ☑ Create backup first │ │ 46999ccd446eSAtari911│ │ ┌──────────────┬──────────┐ │ │ 47009ccd446eSAtari911│ │ │ Upload & │️ Clear │ │ │ 47019ccd446eSAtari911│ │ │ Install │ Cache │ │ │ 47029ccd446eSAtari911│ │ └──────────────┴──────────┘ │ │ 47039ccd446eSAtari911│ └─────────────────────────────┘ │ 47049ccd446eSAtari911│ │ 47059ccd446eSAtari911│ ⚠️ Important Notes │ 47069ccd446eSAtari911│ • Will replace all files │ 47079ccd446eSAtari911│ • Config preserved │ 47089ccd446eSAtari911│ │ 47099ccd446eSAtari911│ Current Version │ 47109ccd446eSAtari911│ Version: 5.1.1 │ 47119ccd446eSAtari911└─────────────────────────────────┘ 47129ccd446eSAtari911``` 47139ccd446eSAtari911 47149ccd446eSAtari911### Benefits 47159ccd446eSAtari911 47169ccd446eSAtari911**Better Workflow**: 47179ccd446eSAtari911- Primary action (upload) is first 47189ccd446eSAtari911- Clear cache conveniently next to install 47199ccd446eSAtari911- No scrolling to find upload button 47209ccd446eSAtari911- Logical top-to-bottom flow 47219ccd446eSAtari911 47229ccd446eSAtari911**Side-by-Side Buttons**: 47239ccd446eSAtari911- Upload & Install (green) 47249ccd446eSAtari911- Clear Cache (orange) 47259ccd446eSAtari911- Both common actions together 47269ccd446eSAtari911- Easy to access after upload 47279ccd446eSAtari911 47289ccd446eSAtari911**Improved UX**: 47299ccd446eSAtari911- Upload is most important → now at top 47309ccd446eSAtari911- Version info is reference → moved down 47319ccd446eSAtari911- Related actions grouped 47329ccd446eSAtari911- Cleaner organization 47339ccd446eSAtari911 47349ccd446eSAtari911### Button Layout 47359ccd446eSAtari911 47369ccd446eSAtari911``` 47379ccd446eSAtari911┌──────────────────┬──────────────┐ 47389ccd446eSAtari911│ Upload & │ ️ Clear │ 47399ccd446eSAtari911│ Install │ Cache │ 47409ccd446eSAtari911│ (Green) │ (Orange) │ 47419ccd446eSAtari911└──────────────────┴──────────────┘ 47429ccd446eSAtari911``` 47439ccd446eSAtari911 47449ccd446eSAtari911**Green = Primary Action** 47459ccd446eSAtari911**Orange = Secondary Action** 47469ccd446eSAtari911 47479ccd446eSAtari911Both easily accessible! 47489ccd446eSAtari911 47499ccd446eSAtari911## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 47509ccd446eSAtari911 47519ccd446eSAtari911### Changed: Admin Section Backgrounds Now Use __background__ 47529ccd446eSAtari911- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 47539ccd446eSAtari911- **Result:** Cleaner, more unified admin interface! 47549ccd446eSAtari911 47559ccd446eSAtari911### Background Usage Update 47569ccd446eSAtari911 47579ccd446eSAtari911**Before (v5.0.9)**: 47589ccd446eSAtari911```php 47599ccd446eSAtari911Section boxes: bg_alt (__background_alt__) 47609ccd446eSAtari911Content areas: bg (__background__) 47619ccd446eSAtari911``` 47629ccd446eSAtari911 47639ccd446eSAtari911**After (v5.1.0)**: 47649ccd446eSAtari911```php 47659ccd446eSAtari911Section boxes: bg (__background__) 47669ccd446eSAtari911Content areas: bg (__background__) 47679ccd446eSAtari911``` 47689ccd446eSAtari911 47699ccd446eSAtari911### Why This Change? 47709ccd446eSAtari911 47719ccd446eSAtari911**More unified appearance**: 47729ccd446eSAtari911- Sections and content use same background 47739ccd446eSAtari911- Creates cleaner, more cohesive look 47749ccd446eSAtari911- Borders provide visual separation 47759ccd446eSAtari911- Matches typical admin UI patterns 47769ccd446eSAtari911 47779ccd446eSAtari911**Template color hierarchy**: 47789ccd446eSAtari911``` 47799ccd446eSAtari911__background_site__ → Outer page wrapper 47809ccd446eSAtari911__background__ → Content & sections (BOTH now use this) 47819ccd446eSAtari911__background_alt__ → Reserved for special panels/highlights 47829ccd446eSAtari911__background_neu__ → Special highlights 47839ccd446eSAtari911``` 47849ccd446eSAtari911 47859ccd446eSAtari911### Visual Result 47869ccd446eSAtari911 47879ccd446eSAtari911**Light Template**: 47889ccd446eSAtari911```ini 47899ccd446eSAtari911__background__ = "#ffffff" 47909ccd446eSAtari911__background_alt__ = "#e8e8e8" 47919ccd446eSAtari911``` 47929ccd446eSAtari911 47939ccd446eSAtari911**Before**: 47949ccd446eSAtari911``` 47959ccd446eSAtari911Admin Page: 47969ccd446eSAtari911┌─────────────────────┐ 47979ccd446eSAtari911│ ┌─────────────────┐ │ 47989ccd446eSAtari911│ │ Section Box │ │ ← Gray (#e8e8e8) 47999ccd446eSAtari911│ │ ┌─────────────┐ │ │ 48009ccd446eSAtari911│ │ │ Content │ │ │ ← White (#fff) 48019ccd446eSAtari911│ │ └─────────────┘ │ │ 48029ccd446eSAtari911│ └─────────────────┘ │ 48039ccd446eSAtari911└─────────────────────┘ 48049ccd446eSAtari911Two-tone appearance 48059ccd446eSAtari911``` 48069ccd446eSAtari911 48079ccd446eSAtari911**After**: 48089ccd446eSAtari911``` 48099ccd446eSAtari911Admin Page: 48109ccd446eSAtari911┌─────────────────────┐ 48119ccd446eSAtari911│ ┌─────────────────┐ │ 48129ccd446eSAtari911│ │ Section Box │ │ ← White (#fff) 48139ccd446eSAtari911│ │ ┌─────────────┐ │ │ 48149ccd446eSAtari911│ │ │ Content │ │ │ ← White (#fff) 48159ccd446eSAtari911│ │ └─────────────┘ │ │ 48169ccd446eSAtari911│ └─────────────────┘ │ 48179ccd446eSAtari911└─────────────────────┘ 48189ccd446eSAtari911Unified, clean appearance 48199ccd446eSAtari911Borders provide separation 48209ccd446eSAtari911``` 48219ccd446eSAtari911 48229ccd446eSAtari911**Dark Template**: 48239ccd446eSAtari911```ini 48249ccd446eSAtari911__background__ = "#2d2d2d" 48259ccd446eSAtari911__background_alt__ = "#3a3a3a" 48269ccd446eSAtari911``` 48279ccd446eSAtari911 48289ccd446eSAtari911**After**: 48299ccd446eSAtari911``` 48309ccd446eSAtari911Admin Page: 48319ccd446eSAtari911┌─────────────────────┐ 48329ccd446eSAtari911│ ┌─────────────────┐ │ 48339ccd446eSAtari911│ │ Section Box │ │ ← Dark (#2d2d2d) 48349ccd446eSAtari911│ │ ┌─────────────┐ │ │ 48359ccd446eSAtari911│ │ │ Content │ │ │ ← Dark (#2d2d2d) 48369ccd446eSAtari911│ │ └─────────────┘ │ │ 48379ccd446eSAtari911│ └─────────────────┘ │ 48389ccd446eSAtari911└─────────────────────┘ 48399ccd446eSAtari911Unified dark appearance 48409ccd446eSAtari911Accent borders provide definition 48419ccd446eSAtari911``` 48429ccd446eSAtari911 48439ccd446eSAtari911### Benefits 48449ccd446eSAtari911 48459ccd446eSAtari911**Cleaner Look**: 48469ccd446eSAtari911- No more alternating gray/white 48479ccd446eSAtari911- More professional appearance 48489ccd446eSAtari911- Less visual noise 48499ccd446eSAtari911- Unified color scheme 48509ccd446eSAtari911 48519ccd446eSAtari911**Better Consistency**: 48529ccd446eSAtari911- Matches modern admin UI patterns 48539ccd446eSAtari911- Borders define sections, not colors 48549ccd446eSAtari911- Simpler, cleaner design 48559ccd446eSAtari911- Easier on the eyes 48569ccd446eSAtari911 48579ccd446eSAtari911**Template Friendly**: 48589ccd446eSAtari911- Works with any background color 48599ccd446eSAtari911- Light or dark templates 48609ccd446eSAtari911- Custom colors 48619ccd446eSAtari911- Always looks cohesive 48629ccd446eSAtari911 48639ccd446eSAtari911### All Sections Updated 48649ccd446eSAtari911 48659ccd446eSAtari911✅ Outlook Sync config sections 48669ccd446eSAtari911✅ Manage Events sections 48679ccd446eSAtari911✅ Update Plugin sections 48689ccd446eSAtari911✅ Themes tab sections 48699ccd446eSAtari911✅ Week start day section 48709ccd446eSAtari911✅ All form sections 48719ccd446eSAtari911 48729ccd446eSAtari911**Complete unified theming!** 48739ccd446eSAtari911 48749ccd446eSAtari911## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 48759ccd446eSAtari911 48769ccd446eSAtari911### Fixed: Syntax Error in Theme Cards 48779ccd446eSAtari911- **Fixed:** ParseError on line 4461 (Purple theme card) 48789ccd446eSAtari911- **Fixed:** Malformed ternary expressions from sed replacement 48799ccd446eSAtari911- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 48809ccd446eSAtari911- **Result:** Admin pages work correctly! 48819ccd446eSAtari911 48829ccd446eSAtari911### What Was Wrong 48839ccd446eSAtari911 48849ccd446eSAtari911The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 48859ccd446eSAtari911 48869ccd446eSAtari911**Before (broken)**: 48879ccd446eSAtari911```php 48889ccd446eSAtari911? '#9b59b6' : ' . $colors['border'] . ') 48899ccd446eSAtari911// Extra quote and dot created syntax error 48909ccd446eSAtari911``` 48919ccd446eSAtari911 48929ccd446eSAtari911**After (fixed)**: 48939ccd446eSAtari911```php 48949ccd446eSAtari911? '#9b59b6' : $colors['border']) 48959ccd446eSAtari911// Clean ternary expression 48969ccd446eSAtari911``` 48979ccd446eSAtari911 48989ccd446eSAtari911### All Theme Cards Fixed 48999ccd446eSAtari911 49009ccd446eSAtari911- ✅ Purple Dream card 49019ccd446eSAtari911- ✅ Professional Blue card 49029ccd446eSAtari911- ✅ Pink Bling card 49039ccd446eSAtari911- ✅ Wiki Default card 49049ccd446eSAtari911 49059ccd446eSAtari911### Now Working 49069ccd446eSAtari911 49079ccd446eSAtari911**Theme selection page loads** ✓ 49089ccd446eSAtari911**All cards display properly** ✓ 49099ccd446eSAtari911**Template colors applied** ✓ 49109ccd446eSAtari911**No syntax errors** ✓ 49119ccd446eSAtari911 49129ccd446eSAtari911## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 49139ccd446eSAtari911 49149ccd446eSAtari911### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 49159ccd446eSAtari911- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 49169ccd446eSAtari911- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 49179ccd446eSAtari911- **Fixed:** Theme selection cards use template backgrounds 49189ccd446eSAtari911- **Fixed:** Week start options use template backgrounds 49199ccd446eSAtari911- **Result:** Perfect color mapping throughout admin! 49209ccd446eSAtari911 49219ccd446eSAtari911### Color Mapping Correction 49229ccd446eSAtari911 49239ccd446eSAtari911**Before (v5.0.7)**: 49249ccd446eSAtari911```php 49259ccd446eSAtari911bg: __background_site__ // Wrong - this is outer page bg 49269ccd446eSAtari911bg_alt: __background_alt__ 49279ccd446eSAtari911``` 49289ccd446eSAtari911 49299ccd446eSAtari911**After (v5.0.8)**: 49309ccd446eSAtari911```php 49319ccd446eSAtari911bg: __background__ // Correct - main content bg 49329ccd446eSAtari911bg_alt: __background_alt__ 49339ccd446eSAtari911``` 49349ccd446eSAtari911 49359ccd446eSAtari911### Why This Matters 49369ccd446eSAtari911 49379ccd446eSAtari911**Template color hierarchy**: 49389ccd446eSAtari911``` 49399ccd446eSAtari911__background_site__ → Outer page/site background 49409ccd446eSAtari911__background__ → Main content area (CORRECT for admin) 49419ccd446eSAtari911__background_alt__ → Sections/panels 49429ccd446eSAtari911__background_neu__ → Highlights 49439ccd446eSAtari911``` 49449ccd446eSAtari911 49459ccd446eSAtari911**Admin should use**: 49469ccd446eSAtari911- `__background__` for input fields, content areas 49479ccd446eSAtari911- `__background_alt__` for section boxes, panels 49489ccd446eSAtari911 49499ccd446eSAtari911### Themes Tab Fixed 49509ccd446eSAtari911 49519ccd446eSAtari911**Removed all hardcoded colors**: 49529ccd446eSAtari911```php 49539ccd446eSAtari911Before: '#ddd', '#fff', '#dee2e6' 49549ccd446eSAtari911After: $colors['border'], $colors['bg'], $colors['border'] 49559ccd446eSAtari911``` 49569ccd446eSAtari911 49579ccd446eSAtari911**Now themed**: 49589ccd446eSAtari911- ✅ Week start section background 49599ccd446eSAtari911- ✅ Week start option backgrounds 49609ccd446eSAtari911- ✅ Theme card backgrounds 49619ccd446eSAtari911- ✅ Theme card borders 49629ccd446eSAtari911- ✅ All borders throughout 49639ccd446eSAtari911 49649ccd446eSAtari911### Visual Result 49659ccd446eSAtari911 49669ccd446eSAtari911**Light Template**: 49679ccd446eSAtari911```ini 49689ccd446eSAtari911__background__ = "#ffffff" 49699ccd446eSAtari911__background_alt__ = "#e8e8e8" 49709ccd446eSAtari911``` 49719ccd446eSAtari911 49729ccd446eSAtari911**Admin Before (v5.0.7)**: 49739ccd446eSAtari911``` 49749ccd446eSAtari911Input fields: #f5f5f5 (site bg - wrong) 49759ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct) 49769ccd446eSAtari911``` 49779ccd446eSAtari911 49789ccd446eSAtari911**Admin After (v5.0.8)**: 49799ccd446eSAtari911``` 49809ccd446eSAtari911Input fields: #ffffff (content bg - correct!) 49819ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct!) 49829ccd446eSAtari911``` 49839ccd446eSAtari911 49849ccd446eSAtari911**Dark Template**: 49859ccd446eSAtari911```ini 49869ccd446eSAtari911__background__ = "#2d2d2d" 49879ccd446eSAtari911__background_alt__ = "#3a3a3a" 49889ccd446eSAtari911``` 49899ccd446eSAtari911 49909ccd446eSAtari911**Admin After (v5.0.8)**: 49919ccd446eSAtari911``` 49929ccd446eSAtari911Input fields: #2d2d2d (content bg - perfect!) 49939ccd446eSAtari911Sections: #3a3a3a (alt bg - perfect!) 49949ccd446eSAtari911``` 49959ccd446eSAtari911 49969ccd446eSAtari911### Complete Themes Tab 49979ccd446eSAtari911 49989ccd446eSAtari911**Week Start Options**: 49999ccd446eSAtari911``` 50009ccd446eSAtari911┌─────────────────────────┐ 50019ccd446eSAtari911│ Week Start Day │ ← bg_alt 50029ccd446eSAtari911│ ┌─────────┬───────────┐ │ 50039ccd446eSAtari911│ │ Monday │ Sunday │ │ ← bg (when not selected) 50049ccd446eSAtari911│ └─────────┴───────────┘ │ 50059ccd446eSAtari911└─────────────────────────┘ 50069ccd446eSAtari911``` 50079ccd446eSAtari911 50089ccd446eSAtari911**Theme Cards**: 50099ccd446eSAtari911``` 50109ccd446eSAtari911┌─────────────────────────┐ 50119ccd446eSAtari911│ Matrix Edition │ ← bg (when not selected) 50129ccd446eSAtari911│ Classic green theme │ border (when not selected) 50139ccd446eSAtari911└─────────────────────────┘ 50149ccd446eSAtari911 50159ccd446eSAtari911┌═════════════════════════┐ 50169ccd446eSAtari911│ Purple Dream │ ← rgba green tint (when selected) 50179ccd446eSAtari911│ Elegant purple theme │ #00cc07 border (when selected) 50189ccd446eSAtari911└═════════════════════════┘ 50199ccd446eSAtari911``` 50209ccd446eSAtari911 50219ccd446eSAtari911### Perfect Integration 50229ccd446eSAtari911 50239ccd446eSAtari911**All admin pages now**: 50249ccd446eSAtari911- Content areas: `__background__` ✓ 50259ccd446eSAtari911- Section boxes: `__background_alt__` ✓ 50269ccd446eSAtari911- Borders: `__border__` ✓ 50279ccd446eSAtari911- Text: `__text__` ✓ 50289ccd446eSAtari911 50299ccd446eSAtari911**Matches wiki perfectly**: 50309ccd446eSAtari911- Same white content areas 50319ccd446eSAtari911- Same gray section boxes 50329ccd446eSAtari911- Same border colors 50339ccd446eSAtari911- Same text colors 50349ccd446eSAtari911 50359ccd446eSAtari911### No More Issues 50369ccd446eSAtari911 50379ccd446eSAtari911**Fixed**: 50389ccd446eSAtari911- ❌ Site background on content areas → ✅ Content background 50399ccd446eSAtari911- ❌ Hardcoded white on themes tab → ✅ Template background 50409ccd446eSAtari911- ❌ Hardcoded borders (#ddd) → ✅ Template borders 50419ccd446eSAtari911 50429ccd446eSAtari911**Result**: 50439ccd446eSAtari911- Perfect color hierarchy ✓ 50449ccd446eSAtari911- Correct background levels ✓ 50459ccd446eSAtari911- Complete template integration ✓ 50469ccd446eSAtari911 50479ccd446eSAtari911## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 50489ccd446eSAtari911 50499ccd446eSAtari911### Fixed: All Admin Backgrounds Use Template Colors 50509ccd446eSAtari911- **Fixed:** All section backgrounds use `__background_alt__` 50519ccd446eSAtari911- **Fixed:** All content backgrounds use `__background__` 50529ccd446eSAtari911- **Fixed:** All borders use `__border__` 50539ccd446eSAtari911- **Fixed:** All text uses `__text__` 50549ccd446eSAtari911- **Result:** Complete admin template integration! 50559ccd446eSAtari911 50569ccd446eSAtari911### All Replacements 50579ccd446eSAtari911 50589ccd446eSAtari911**Backgrounds**: 50599ccd446eSAtari911```php 50609ccd446eSAtari911Before: background: #f9f9f9 50619ccd446eSAtari911After: background: ' . $colors['bg_alt'] . ' 50629ccd446eSAtari911 50639ccd446eSAtari911Before: background: #fff / background: white 50649ccd446eSAtari911After: background: ' . $colors['bg'] . ' 50659ccd446eSAtari911``` 50669ccd446eSAtari911 50679ccd446eSAtari911**Borders**: 50689ccd446eSAtari911```php 50699ccd446eSAtari911Before: border: 1px solid #ddd 50709ccd446eSAtari911Before: border: 1px solid #e0e0e0 50719ccd446eSAtari911Before: border: 1px solid #eee 50729ccd446eSAtari911After: border: 1px solid ' . $colors['border'] . ' 50739ccd446eSAtari911``` 50749ccd446eSAtari911 50759ccd446eSAtari911**Text**: 50769ccd446eSAtari911```php 50779ccd446eSAtari911Before: color: #333 50789ccd446eSAtari911Before: color: #666 50799ccd446eSAtari911After: color: ' . $colors['text'] . ' 50809ccd446eSAtari911``` 50819ccd446eSAtari911 50829ccd446eSAtari911### Complete Admin Coverage 50839ccd446eSAtari911 50849ccd446eSAtari911**All tabs now themed**: 50859ccd446eSAtari911- ✅ Manage Events tab 50869ccd446eSAtari911- ✅ Update Plugin tab 50879ccd446eSAtari911- ✅ Outlook Sync tab 50889ccd446eSAtari911- ✅ Themes tab 50899ccd446eSAtari911- ✅ Tab navigation 50909ccd446eSAtari911- ✅ All sections 50919ccd446eSAtari911- ✅ All inputs 50929ccd446eSAtari911- ✅ All borders 50939ccd446eSAtari911- ✅ All text 50949ccd446eSAtari911 50959ccd446eSAtari911### Visual Result 50969ccd446eSAtari911 50979ccd446eSAtari911**Light Template**: 50989ccd446eSAtari911``` 50999ccd446eSAtari911Admin Page: 51009ccd446eSAtari911┌──────────────────────────┐ 51019ccd446eSAtari911│ Tab Navigation │ ← Template borders 51029ccd446eSAtari911├──────────────────────────┤ 51039ccd446eSAtari911│ Section Headers │ ← bg_alt (light gray) 51049ccd446eSAtari911│ ┌──────────────────────┐ │ 51059ccd446eSAtari911│ │ Form Inputs │ │ ← bg (white) 51069ccd446eSAtari911│ │ Content Areas │ │ 51079ccd446eSAtari911│ └──────────────────────┘ │ 51089ccd446eSAtari911└──────────────────────────┘ 51099ccd446eSAtari911All template colors! ✓ 51109ccd446eSAtari911``` 51119ccd446eSAtari911 51129ccd446eSAtari911**Dark Template**: 51139ccd446eSAtari911``` 51149ccd446eSAtari911Admin Page: 51159ccd446eSAtari911┌──────────────────────────┐ 51169ccd446eSAtari911│ Tab Navigation │ ← Template borders 51179ccd446eSAtari911├──────────────────────────┤ 51189ccd446eSAtari911│ Section Headers │ ← bg_alt (dark gray) 51199ccd446eSAtari911│ ┌──────────────────────┐ │ 51209ccd446eSAtari911│ │ Form Inputs │ │ ← bg (darker) 51219ccd446eSAtari911│ │ Content Areas │ │ 51229ccd446eSAtari911│ └──────────────────────┘ │ 51239ccd446eSAtari911└──────────────────────────┘ 51249ccd446eSAtari911All template colors! ✓ 51259ccd446eSAtari911``` 51269ccd446eSAtari911 51279ccd446eSAtari911### Template Color Mapping 51289ccd446eSAtari911 51299ccd446eSAtari911**Used throughout admin**: 51309ccd446eSAtari911``` 51319ccd446eSAtari911__background_site__ → $colors['bg'] (main backgrounds) 51329ccd446eSAtari911__background_alt__ → $colors['bg_alt'] (section backgrounds) 51339ccd446eSAtari911__text__ → $colors['text'] (all text) 51349ccd446eSAtari911__border__ → $colors['border'] (all borders) 51359ccd446eSAtari911__link__ → $colors['link'] (links - future) 51369ccd446eSAtari911``` 51379ccd446eSAtari911 51389ccd446eSAtari911### Examples by Section 51399ccd446eSAtari911 51409ccd446eSAtari911**Manage Events**: 51419ccd446eSAtari911- Event list backgrounds: `bg_alt` 51429ccd446eSAtari911- Event item backgrounds: `bg` 51439ccd446eSAtari911- Borders: `border` 51449ccd446eSAtari911- Text: `text` 51459ccd446eSAtari911 51469ccd446eSAtari911**Update Plugin**: 51479ccd446eSAtari911- Section backgrounds: `bg_alt` 51489ccd446eSAtari911- Content areas: `bg` 51499ccd446eSAtari911- Borders: `border` 51509ccd446eSAtari911- Text: `text` 51519ccd446eSAtari911 51529ccd446eSAtari911**Outlook Sync**: 51539ccd446eSAtari911- Config sections: `bg_alt` 51549ccd446eSAtari911- Input fields: `bg` 51559ccd446eSAtari911- Borders: `border` 51569ccd446eSAtari911- Labels: `text` 51579ccd446eSAtari911 51589ccd446eSAtari911**Themes Tab**: 51599ccd446eSAtari911- Theme cards: `bg_alt` 51609ccd446eSAtari911- Preview areas: `bg` 51619ccd446eSAtari911- Borders: `border` 51629ccd446eSAtari911- Descriptions: `text` 51639ccd446eSAtari911 51649ccd446eSAtari911### Benefits 51659ccd446eSAtari911 51669ccd446eSAtari911**Seamless Integration**: 51679ccd446eSAtari911- Matches wiki admin area perfectly 51689ccd446eSAtari911- Same colors throughout wiki 51699ccd446eSAtari911- Professional appearance 51709ccd446eSAtari911- Consistent experience 51719ccd446eSAtari911 51729ccd446eSAtari911**Automatic Adaptation**: 51739ccd446eSAtari911- Light templates: Light admin 51749ccd446eSAtari911- Dark templates: Dark admin 51759ccd446eSAtari911- Custom templates: Uses custom colors 51769ccd446eSAtari911 51779ccd446eSAtari911**No White Boxes**: 51789ccd446eSAtari911- Every background themed 51799ccd446eSAtari911- Every border themed 51809ccd446eSAtari911- Every text themed 51819ccd446eSAtari911- Complete consistency 51829ccd446eSAtari911 51839ccd446eSAtari911### PERFECT HARMONY 51849ccd446eSAtari911 51859ccd446eSAtari911**Frontend (Calendar)**: 51869ccd446eSAtari911- Wiki theme uses style.ini ✓ 51879ccd446eSAtari911- Perfect template match ✓ 51889ccd446eSAtari911 51899ccd446eSAtari911**Backend (Admin)**: 51909ccd446eSAtari911- Reads same style.ini ✓ 51919ccd446eSAtari911- Perfect template match ✓ 51929ccd446eSAtari911 51939ccd446eSAtari911**Complete Unity**: 51949ccd446eSAtari911- Same colors everywhere ✓ 51959ccd446eSAtari911- Seamless experience ✓ 51969ccd446eSAtari911- Professional polish ✓ 51979ccd446eSAtari911 51989ccd446eSAtari911## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 51999ccd446eSAtari911 52009ccd446eSAtari911### Enhanced: Month/Year Header & Admin Pages Use Template Colors 52019ccd446eSAtari911- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 52029ccd446eSAtari911- **Added:** Admin pages read template's style.ini file 52039ccd446eSAtari911- **Added:** `getTemplateColors()` function in admin class 52049ccd446eSAtari911- **Fixed:** Tab navigation uses template text and border colors 52059ccd446eSAtari911- **Result:** Complete template integration everywhere! 52069ccd446eSAtari911 52079ccd446eSAtari911### Month/Year Header 52089ccd446eSAtari911 52099ccd446eSAtari911**Before**: 52109ccd446eSAtari911```php 52119ccd446eSAtari911color: __text__ // Same as primary text 52129ccd446eSAtari911``` 52139ccd446eSAtari911 52149ccd446eSAtari911**After (Wiki Theme)**: 52159ccd446eSAtari911```php 52169ccd446eSAtari911color: __text_neu__ // Dimmed text (subtle) 52179ccd446eSAtari911``` 52189ccd446eSAtari911 52199ccd446eSAtari911### Admin Pages Enhancement 52209ccd446eSAtari911 52219ccd446eSAtari911**New `getTemplateColors()` function**: 52229ccd446eSAtari911- Reads template's style.ini file 52239ccd446eSAtari911- Extracts color replacements 52249ccd446eSAtari911- Provides colors to all admin tabs 52259ccd446eSAtari911- Falls back to sensible defaults 52269ccd446eSAtari911 52279ccd446eSAtari911**Colors used**: 52289ccd446eSAtari911```php 52299ccd446eSAtari911bg: __background_site__ 52309ccd446eSAtari911bg_alt: __background_alt__ 52319ccd446eSAtari911text: __text__ 52329ccd446eSAtari911border: __border__ 52339ccd446eSAtari911link: __link__ 52349ccd446eSAtari911``` 52359ccd446eSAtari911 52369ccd446eSAtari911**Applied to**: 52379ccd446eSAtari911- Tab navigation borders 52389ccd446eSAtari911- Tab text colors 52399ccd446eSAtari911- All admin sections 52409ccd446eSAtari911- Ready for future enhancements 52419ccd446eSAtari911 52429ccd446eSAtari911### Visual Result 52439ccd446eSAtari911 52449ccd446eSAtari911**Calendar Header**: 52459ccd446eSAtari911``` 52469ccd446eSAtari911┌────────────────────┐ 52479ccd446eSAtari911│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 52489ccd446eSAtari911└────────────────────┘ 52499ccd446eSAtari911Subtle and elegant ✓ 52509ccd446eSAtari911``` 52519ccd446eSAtari911 52529ccd446eSAtari911**Admin Navigation**: 52539ccd446eSAtari911``` 52549ccd446eSAtari911 Manage Events | Update | ⚙️ Config | Themes 52559ccd446eSAtari911───────────────────────────────────────────────── 52569ccd446eSAtari911Active tab: Green (#00cc07) 52579ccd446eSAtari911Inactive tabs: Template text color 52589ccd446eSAtari911Border: Template border color 52599ccd446eSAtari911``` 52609ccd446eSAtari911 52619ccd446eSAtari911### Template Integration 52629ccd446eSAtari911 52639ccd446eSAtari911**Light Template**: 52649ccd446eSAtari911```ini 52659ccd446eSAtari911__text_neu__ = "#666666" 52669ccd446eSAtari911__border__ = "#cccccc" 52679ccd446eSAtari911``` 52689ccd446eSAtari911**Result**: 52699ccd446eSAtari911- Month/Year: Medium gray (subtle) 52709ccd446eSAtari911- Admin borders: Light gray 52719ccd446eSAtari911- Tab text: Dark gray 52729ccd446eSAtari911 52739ccd446eSAtari911**Dark Template**: 52749ccd446eSAtari911```ini 52759ccd446eSAtari911__text_neu__ = "#999999" 52769ccd446eSAtari911__border__ = "#555555" 52779ccd446eSAtari911``` 52789ccd446eSAtari911**Result**: 52799ccd446eSAtari911- Month/Year: Light gray (subtle) 52809ccd446eSAtari911- Admin borders: Medium gray 52819ccd446eSAtari911- Tab text: Bright gray 52829ccd446eSAtari911 52839ccd446eSAtari911### Benefits 52849ccd446eSAtari911 52859ccd446eSAtari911**Calendar Frontend**: 52869ccd446eSAtari911- Month/Year header more subtle 52879ccd446eSAtari911- Better visual hierarchy 52889ccd446eSAtari911- Less prominent, more elegant 52899ccd446eSAtari911 52909ccd446eSAtari911**Admin Backend**: 52919ccd446eSAtari911- Uses template colors 52929ccd446eSAtari911- Matches wiki admin area 52939ccd446eSAtari911- Consistent experience 52949ccd446eSAtari911- Professional appearance 52959ccd446eSAtari911 52969ccd446eSAtari911### Future-Ready 52979ccd446eSAtari911 52989ccd446eSAtari911The `getTemplateColors()` function is now available for: 52999ccd446eSAtari911- ✅ Tab navigation (implemented) 53009ccd446eSAtari911- Section backgrounds (ready) 53019ccd446eSAtari911- Button colors (ready) 53029ccd446eSAtari911- Input fields (ready) 53039ccd446eSAtari911- Success/error messages (ready) 53049ccd446eSAtari911 53059ccd446eSAtari911**Foundation laid for complete admin theming!** 53069ccd446eSAtari911 53079ccd446eSAtari911## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 53089ccd446eSAtari911 53099ccd446eSAtari911### Fixed: Add Event Bar & Section Headers Use Template Colors 53109ccd446eSAtari911- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 53119ccd446eSAtari911- **Fixed:** "Today" header uses `__text_neu__` 53129ccd446eSAtari911- **Fixed:** "Tomorrow" header uses `__text__` 53139ccd446eSAtari911- **Fixed:** "Important Events" header uses `__border__` 53149ccd446eSAtari911- **Result:** Perfect template color integration! 53159ccd446eSAtari911 53169ccd446eSAtari911### All Changes 53179ccd446eSAtari911 53189ccd446eSAtari911**Add Event Bar (Wiki Theme)**: 53199ccd446eSAtari911 53209ccd446eSAtari911**Before**: 53219ccd446eSAtari911```php 53229ccd446eSAtari911background: #3498db // Generic blue 53239ccd446eSAtari911``` 53249ccd446eSAtari911 53259ccd446eSAtari911**After**: 53269ccd446eSAtari911```php 53279ccd446eSAtari911background: __background_alt__ // Template alternate bg 53289ccd446eSAtari911text: __text__ // Template text color 53299ccd446eSAtari911hover: __background_neu__ // Template neutral bg 53309ccd446eSAtari911``` 53319ccd446eSAtari911 53329ccd446eSAtari911**Section Headers (Wiki Theme)**: 53339ccd446eSAtari911 53349ccd446eSAtari911**Before**: 53359ccd446eSAtari911```php 53369ccd446eSAtari911Today: #ff9800 // Orange 53379ccd446eSAtari911Tomorrow: #4caf50 // Green 53389ccd446eSAtari911Important Events: #9b59b6 // Purple 53399ccd446eSAtari911``` 53409ccd446eSAtari911 53419ccd446eSAtari911**After**: 53429ccd446eSAtari911```php 53439ccd446eSAtari911Today: __text_neu__ // Template dimmed text 53449ccd446eSAtari911Tomorrow: __text__ // Template primary text 53459ccd446eSAtari911Important Events: __border__ // Template border color 53469ccd446eSAtari911``` 53479ccd446eSAtari911 53489ccd446eSAtari911### Visual Result 53499ccd446eSAtari911 53509ccd446eSAtari911**Wiki Default Theme**: 53519ccd446eSAtari911``` 53529ccd446eSAtari911Add Event Bar: 53539ccd446eSAtari911┌────────────────┐ 53549ccd446eSAtari911│ + ADD EVENT │ ← Template alt background 53559ccd446eSAtari911└────────────────┘ 53569ccd446eSAtari911 53579ccd446eSAtari911Sections: 53589ccd446eSAtari911━━━━━━━━━━━━━━━━ 53599ccd446eSAtari911Today ← Dimmed text color (__text_neu__) 53609ccd446eSAtari911• Team Meeting 53619ccd446eSAtari911 53629ccd446eSAtari911Tomorrow ← Primary text color (__text__) 53639ccd446eSAtari911• Code Review 53649ccd446eSAtari911 53659ccd446eSAtari911Important Events ← Border color (__border__) 53669ccd446eSAtari911• Project Deadline 53679ccd446eSAtari911``` 53689ccd446eSAtari911 53699ccd446eSAtari911### Example with DokuWiki Default Template 53709ccd446eSAtari911 53719ccd446eSAtari911**Template colors**: 53729ccd446eSAtari911```ini 53739ccd446eSAtari911__background_alt__ = "#e8e8e8" 53749ccd446eSAtari911__text__ = "#333333" 53759ccd446eSAtari911__text_neu__ = "#666666" 53769ccd446eSAtari911__border__ = "#cccccc" 53779ccd446eSAtari911``` 53789ccd446eSAtari911 53799ccd446eSAtari911**Calendar result**: 53809ccd446eSAtari911``` 53819ccd446eSAtari911Add Event Bar: Light gray (#e8e8e8) 53829ccd446eSAtari911Today header: Medium gray (#666666) 53839ccd446eSAtari911Tomorrow header: Dark gray (#333333) 53849ccd446eSAtari911Important Events header: Border gray (#cccccc) 53859ccd446eSAtari911``` 53869ccd446eSAtari911 53879ccd446eSAtari911### Example with Dark Template 53889ccd446eSAtari911 53899ccd446eSAtari911**Template colors**: 53909ccd446eSAtari911```ini 53919ccd446eSAtari911__background_alt__ = "#2d2d2d" 53929ccd446eSAtari911__text__ = "#e0e0e0" 53939ccd446eSAtari911__text_neu__ = "#999999" 53949ccd446eSAtari911__border__ = "#555555" 53959ccd446eSAtari911``` 53969ccd446eSAtari911 53979ccd446eSAtari911**Calendar result**: 53989ccd446eSAtari911``` 53999ccd446eSAtari911Add Event Bar: Dark gray (#2d2d2d) 54009ccd446eSAtari911Today header: Light gray (#999999) 54019ccd446eSAtari911Tomorrow header: Bright gray (#e0e0e0) 54029ccd446eSAtari911Important Events header: Medium gray (#555555) 54039ccd446eSAtari911``` 54049ccd446eSAtari911 54059ccd446eSAtari911### Perfect Harmony 54069ccd446eSAtari911 54079ccd446eSAtari911All sidebar elements now use template colors: 54089ccd446eSAtari911- ✅ Add Event bar background 54099ccd446eSAtari911- ✅ Add Event bar text 54109ccd446eSAtari911- ✅ Today section header 54119ccd446eSAtari911- ✅ Tomorrow section header 54129ccd446eSAtari911- ✅ Important Events header 54139ccd446eSAtari911- ✅ Calendar cells 54149ccd446eSAtari911- ✅ Grid backgrounds 54159ccd446eSAtari911- ✅ All borders 54169ccd446eSAtari911 54179ccd446eSAtari911**Complete template integration!** 54189ccd446eSAtari911 54199ccd446eSAtari911## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 54209ccd446eSAtari911 54219ccd446eSAtari911### Fixed: Calendar Cells Use Correct Template Color 54229ccd446eSAtari911- **Fixed:** Calendar cells now use `__background__` from template 54239ccd446eSAtari911- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 54249ccd446eSAtari911- **Result:** Calendar cells match main content area background! 54259ccd446eSAtari911 54269ccd446eSAtari911### Color Mapping Update 54279ccd446eSAtari911 54289ccd446eSAtari911**Before (v5.0.3)**: 54299ccd446eSAtari911```php 54309ccd446eSAtari911cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 54319ccd446eSAtari911``` 54329ccd446eSAtari911 54339ccd446eSAtari911**After (v5.0.4)**: 54349ccd446eSAtari911```php 54359ccd446eSAtari911cell_bg: __background__ // Correct - main content background 54369ccd446eSAtari911``` 54379ccd446eSAtari911 54389ccd446eSAtari911### Template Color Usage 54399ccd446eSAtari911 54409ccd446eSAtari911**Wiki Default theme now uses**: 54419ccd446eSAtari911``` 54429ccd446eSAtari911__background_site__ → Overall page background 54439ccd446eSAtari911__background__ → Calendar cells (main content bg) 54449ccd446eSAtari911__background_alt__ → Grid background, headers 54459ccd446eSAtari911__background_neu__ → Today cell highlight 54469ccd446eSAtari911__text__ → Primary text 54479ccd446eSAtari911__text_neu__ → Dimmed text 54489ccd446eSAtari911__link__ → Links, bright text 54499ccd446eSAtari911__border__ → All borders 54509ccd446eSAtari911``` 54519ccd446eSAtari911 54529ccd446eSAtari911### Visual Result 54539ccd446eSAtari911 54549ccd446eSAtari911**Before**: 54559ccd446eSAtari911``` 54569ccd446eSAtari911Calendar with template colors: 54579ccd446eSAtari911┌─────┬─────┬─────┐ 54589ccd446eSAtari911│ Mon │ Tue │ Wed │ 54599ccd446eSAtari911├─────┼─────┼─────┤ 54609ccd446eSAtari911│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 54619ccd446eSAtari911└─────┴─────┴─────┘ 54629ccd446eSAtari911``` 54639ccd446eSAtari911 54649ccd446eSAtari911**After**: 54659ccd446eSAtari911``` 54669ccd446eSAtari911Calendar with template colors: 54679ccd446eSAtari911┌─────┬─────┬─────┐ 54689ccd446eSAtari911│ Mon │ Tue │ Wed │ 54699ccd446eSAtari911├─────┼─────┼─────┤ 54709ccd446eSAtari911│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 54719ccd446eSAtari911└─────┴─────┴─────┘ 54729ccd446eSAtari911``` 54739ccd446eSAtari911 54749ccd446eSAtari911### Example Template Colors 54759ccd446eSAtari911 54769ccd446eSAtari911**DokuWiki Default**: 54779ccd446eSAtari911```ini 54789ccd446eSAtari911__background__ = "#ffffff" 54799ccd446eSAtari911``` 54809ccd446eSAtari911**Result**: White calendar cells ✓ 54819ccd446eSAtari911 54829ccd446eSAtari911**Dark Template**: 54839ccd446eSAtari911```ini 54849ccd446eSAtari911__background__ = "#2d2d2d" 54859ccd446eSAtari911``` 54869ccd446eSAtari911**Result**: Dark calendar cells ✓ 54879ccd446eSAtari911 54889ccd446eSAtari911**Custom Template**: 54899ccd446eSAtari911```ini 54909ccd446eSAtari911__background__ = "#f9f9f9" 54919ccd446eSAtari911``` 54929ccd446eSAtari911**Result**: Custom color cells ✓ 54939ccd446eSAtari911 54949ccd446eSAtari911### Perfect Matching 54959ccd446eSAtari911 54969ccd446eSAtari911Calendar cells now match: 54979ccd446eSAtari911- ✅ Main content area background 54989ccd446eSAtari911- ✅ Article/page background 54999ccd446eSAtari911- ✅ Content box background 55009ccd446eSAtari911- ✅ Same as wiki text background 55019ccd446eSAtari911 55029ccd446eSAtari911**Seamless integration!** 55039ccd446eSAtari911 55049ccd446eSAtari911## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 55059ccd446eSAtari911 55069ccd446eSAtari911### Enhanced: Wiki Default Theme Reads Template Colors 55079ccd446eSAtari911- **Added:** Function to read colors from DokuWiki template's style.ini file 55089ccd446eSAtari911- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 55099ccd446eSAtari911- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 55109ccd446eSAtari911- **Uses:** Actual template colors instead of CSS variables 55119ccd446eSAtari911- **Result:** Perfect color matching with any DokuWiki template! 55129ccd446eSAtari911 55139ccd446eSAtari911### How It Works 55149ccd446eSAtari911 55159ccd446eSAtari911**New Function: `getWikiTemplateColors()`** 55169ccd446eSAtari911 55179ccd446eSAtari9111. **Detects** current DokuWiki template name 55189ccd446eSAtari9112. **Reads** the template's `style.ini` file 55199ccd446eSAtari9113. **Parses** color replacements section 55209ccd446eSAtari9114. **Maps** template colors to calendar theme 55219ccd446eSAtari9115. **Falls back** to CSS variables if file not found 55229ccd446eSAtari911 55239ccd446eSAtari911### Colors Read from style.ini 55249ccd446eSAtari911 55259ccd446eSAtari911**Template color replacements used**: 55269ccd446eSAtari911```php 55279ccd446eSAtari911__background_site__ → bg, header_bg 55289ccd446eSAtari911__background_alt__ → grid_bg, cell_today_bg 55299ccd446eSAtari911__background_neu__ → cell_bg 55309ccd446eSAtari911__text__ → text_primary 55319ccd446eSAtari911__text_neu__ → text_dim 55329ccd446eSAtari911__link__ → text_bright 55339ccd446eSAtari911__border__ → border, grid_border 55349ccd446eSAtari911``` 55359ccd446eSAtari911 55369ccd446eSAtari911### Example style.ini Mapping 55379ccd446eSAtari911 55389ccd446eSAtari911**Template style.ini**: 55399ccd446eSAtari911```ini 55409ccd446eSAtari911[replacements] 55419ccd446eSAtari911__background_site__ = "#f8f9fa" 55429ccd446eSAtari911__background_alt__ = "#e9ecef" 55439ccd446eSAtari911__background_neu__ = "#dee2e6" 55449ccd446eSAtari911__text__ = "#212529" 55459ccd446eSAtari911__text_neu__ = "#6c757d" 55469ccd446eSAtari911__link__ = "#0d6efd" 55479ccd446eSAtari911__border__ = "#ced4da" 55489ccd446eSAtari911``` 55499ccd446eSAtari911 55509ccd446eSAtari911**Calendar theme result**: 55519ccd446eSAtari911```php 55529ccd446eSAtari911bg: #f8f9fa 55539ccd446eSAtari911header_bg: #e9ecef 55549ccd446eSAtari911grid_bg: #e9ecef 55559ccd446eSAtari911cell_bg: #dee2e6 55569ccd446eSAtari911text_primary: #212529 55579ccd446eSAtari911text_dim: #6c757d 55589ccd446eSAtari911text_bright: #0d6efd 55599ccd446eSAtari911border: #ced4da 55609ccd446eSAtari911grid_border: #ced4da 55619ccd446eSAtari911``` 55629ccd446eSAtari911 55639ccd446eSAtari911### Before vs After 55649ccd446eSAtari911 55659ccd446eSAtari911**Before (v5.0.2)**: 55669ccd446eSAtari911``` 55679ccd446eSAtari911Wiki Default theme used: 55689ccd446eSAtari911- CSS variables (var(--__background__, #fff)) 55699ccd446eSAtari911- Required browser CSS variable support 55709ccd446eSAtari911- Fallback to generic colors 55719ccd446eSAtari911``` 55729ccd446eSAtari911 55739ccd446eSAtari911**After (v5.0.3)**: 55749ccd446eSAtari911``` 55759ccd446eSAtari911Wiki Default theme uses: 55769ccd446eSAtari911- Actual colors from template's style.ini 55779ccd446eSAtari911- Exact template color values 55789ccd446eSAtari911- No CSS variable dependency 55799ccd446eSAtari911- Perfect color matching! 55809ccd446eSAtari911``` 55819ccd446eSAtari911 55829ccd446eSAtari911### File Location Priority 55839ccd446eSAtari911 55849ccd446eSAtari911Checks in order: 55859ccd446eSAtari9111. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 55869ccd446eSAtari9112. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 55879ccd446eSAtari9113. Falls back to CSS variables if neither found 55889ccd446eSAtari911 55899ccd446eSAtari911### Benefits 55909ccd446eSAtari911 55919ccd446eSAtari911**More accurate colors**: 55929ccd446eSAtari911- Uses exact template color values ✓ 55939ccd446eSAtari911- No CSS variable interpolation ✓ 55949ccd446eSAtari911- Consistent across all browsers ✓ 55959ccd446eSAtari911 55969ccd446eSAtari911**Better compatibility**: 55979ccd446eSAtari911- Works with older browsers ✓ 55989ccd446eSAtari911- No CSS variable support needed ✓ 55999ccd446eSAtari911- Direct color values ✓ 56009ccd446eSAtari911 56019ccd446eSAtari911**Perfect matching**: 56029ccd446eSAtari911- Reads template's actual colors ✓ 56039ccd446eSAtari911- Same colors as wiki pages ✓ 56049ccd446eSAtari911- Seamless integration ✓ 56059ccd446eSAtari911 56069ccd446eSAtari911### Template Examples 56079ccd446eSAtari911 56089ccd446eSAtari911**DokuWiki Default Template**: 56099ccd446eSAtari911``` 56109ccd446eSAtari911Reads: lib/tpl/dokuwiki/style.ini 56119ccd446eSAtari911Gets: Default DokuWiki colors 56129ccd446eSAtari911Result: Perfect classic DokuWiki look 56139ccd446eSAtari911``` 56149ccd446eSAtari911 56159ccd446eSAtari911**Bootstrap Template**: 56169ccd446eSAtari911``` 56179ccd446eSAtari911Reads: lib/tpl/bootstrap3/style.ini 56189ccd446eSAtari911Gets: Bootstrap color scheme 56199ccd446eSAtari911Result: Perfect Bootstrap integration 56209ccd446eSAtari911``` 56219ccd446eSAtari911 56229ccd446eSAtari911**Custom Template**: 56239ccd446eSAtari911``` 56249ccd446eSAtari911Reads: conf/tpl/mycustom/style.ini 56259ccd446eSAtari911Gets: Your custom colors 56269ccd446eSAtari911Result: Perfect custom theme match 56279ccd446eSAtari911``` 56289ccd446eSAtari911 56299ccd446eSAtari911### Fallback Chain 56309ccd446eSAtari911 56319ccd446eSAtari9111. **Try** reading style.ini from template 56329ccd446eSAtari9112. **If found** → Use exact colors from file 56339ccd446eSAtari9113. **If not found** → Use CSS variables 56349ccd446eSAtari9114. **If no CSS vars** → Use fallback colors 56359ccd446eSAtari911 56369ccd446eSAtari911**Always works, always matches!** ✓ 56379ccd446eSAtari911 56389ccd446eSAtari911## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 56399ccd446eSAtari911 56409ccd446eSAtari911### Fixed: Wiki Default Theme Day Panel Colors 56419ccd446eSAtari911- **Fixed:** Day popup panel now uses DokuWiki CSS variables 56429ccd446eSAtari911- **Fixed:** Panel background matches wiki theme 56439ccd446eSAtari911- **Fixed:** Panel header matches wiki theme 56449ccd446eSAtari911- **Fixed:** Border colors use wiki theme 56459ccd446eSAtari911- **Fixed:** Text colors use wiki theme 56469ccd446eSAtari911- **Result:** Perfect integration with DokuWiki templates! 56479ccd446eSAtari911 56489ccd446eSAtari911### All Changes 56499ccd446eSAtari911 56509ccd446eSAtari911**Day Panel Colors (Wiki Default)**: 56519ccd446eSAtari911 56529ccd446eSAtari911**Before**: 56539ccd446eSAtari911```php 56549ccd446eSAtari911background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 56559ccd446eSAtari911header: #3498db // Blue (wrong!) 56569ccd446eSAtari911``` 56579ccd446eSAtari911 56589ccd446eSAtari911**After**: 56599ccd446eSAtari911```php 56609ccd446eSAtari911background: var(--__background__, #fff) 56619ccd446eSAtari911header: var(--__background_alt__, #e8e8e8) 56629ccd446eSAtari911header_text: var(--__text__, #333) 56639ccd446eSAtari911border: var(--__border__, #ccc) 56649ccd446eSAtari911shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 56659ccd446eSAtari911``` 56669ccd446eSAtari911 56679ccd446eSAtari911**Event Colors (Wiki Default)**: 56689ccd446eSAtari911```php 56699ccd446eSAtari911event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 56709ccd446eSAtari911border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 56719ccd446eSAtari911bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 56729ccd446eSAtari911``` 56739ccd446eSAtari911 56749ccd446eSAtari911### Before vs After 56759ccd446eSAtari911 56769ccd446eSAtari911**Before (v5.0.1)**: 56779ccd446eSAtari911``` 56789ccd446eSAtari911Wiki Default - Click Week Cell: 56799ccd446eSAtari911┌────────────────┐ 56809ccd446eSAtari911│ Monday, Feb 8 │ ← Blue header (wrong) 56819ccd446eSAtari911├────────────────┤ 56829ccd446eSAtari911│ Team Meeting │ ← Dark gray bg (wrong) 56839ccd446eSAtari911│ 2:00 PM │ 56849ccd446eSAtari911└────────────────┘ 56859ccd446eSAtari911Doesn't match wiki theme 56869ccd446eSAtari911``` 56879ccd446eSAtari911 56889ccd446eSAtari911**After (v5.0.2)**: 56899ccd446eSAtari911``` 56909ccd446eSAtari911Wiki Default - Click Week Cell: 56919ccd446eSAtari911 56929ccd446eSAtari911Light Wiki Theme: 56939ccd446eSAtari911┌────────────────┐ 56949ccd446eSAtari911│ Monday, Feb 8 │ ← Light gray header ✓ 56959ccd446eSAtari911├────────────────┤ 56969ccd446eSAtari911│ Team Meeting │ ← White bg ✓ 56979ccd446eSAtari911│ 2:00 PM │ Dark text ✓ 56989ccd446eSAtari911└────────────────┘ 56999ccd446eSAtari911 57009ccd446eSAtari911Dark Wiki Theme: 57019ccd446eSAtari911┌────────────────┐ 57029ccd446eSAtari911│ Monday, Feb 8 │ ← Dark header ✓ 57039ccd446eSAtari911├────────────────┤ 57049ccd446eSAtari911│ Team Meeting │ ← Dark bg ✓ 57059ccd446eSAtari911│ 2:00 PM │ Light text ✓ 57069ccd446eSAtari911└────────────────┘ 57079ccd446eSAtari911 57089ccd446eSAtari911Perfectly matches wiki! 57099ccd446eSAtari911``` 57109ccd446eSAtari911 57119ccd446eSAtari911### CSS Variables Used 57129ccd446eSAtari911 57139ccd446eSAtari911**Wiki Default theme now uses**: 57149ccd446eSAtari911- `--__background__` - Main background (panel body) 57159ccd446eSAtari911- `--__background_alt__` - Alternate bg (panel header, events) 57169ccd446eSAtari911- `--__text__` - Text color (header text) 57179ccd446eSAtari911- `--__border__` - Border color (panel border, event borders) 57189ccd446eSAtari911 57199ccd446eSAtari911**With fallbacks**: 57209ccd446eSAtari911```css 57219ccd446eSAtari911var(--__background__, #fff) /* white fallback */ 57229ccd446eSAtari911var(--__background_alt__, #e8e8e8) /* light gray fallback */ 57239ccd446eSAtari911var(--__text__, #333) /* dark text fallback */ 57249ccd446eSAtari911var(--__border__, #ccc) /* gray border fallback */ 57259ccd446eSAtari911``` 57269ccd446eSAtari911 57279ccd446eSAtari911### Perfect Adaptation 57289ccd446eSAtari911 57299ccd446eSAtari911**Light Templates**: 57309ccd446eSAtari911- Light panel backgrounds ✓ 57319ccd446eSAtari911- Dark text ✓ 57329ccd446eSAtari911- Subtle borders ✓ 57339ccd446eSAtari911- Clean appearance ✓ 57349ccd446eSAtari911 57359ccd446eSAtari911**Dark Templates**: 57369ccd446eSAtari911- Dark panel backgrounds ✓ 57379ccd446eSAtari911- Light text ✓ 57389ccd446eSAtari911- Visible borders ✓ 57399ccd446eSAtari911- Perfect contrast ✓ 57409ccd446eSAtari911 57419ccd446eSAtari911**Custom Templates**: 57429ccd446eSAtari911- Uses template's CSS variables ✓ 57439ccd446eSAtari911- Automatic adaptation ✓ 57449ccd446eSAtari911- Seamless integration ✓ 57459ccd446eSAtari911 57469ccd446eSAtari911### Now Truly Adaptive 57479ccd446eSAtari911 57489ccd446eSAtari911Wiki Default theme now properly uses DokuWiki CSS variables for: 57499ccd446eSAtari911- ✅ Calendar grid 57509ccd446eSAtari911- ✅ Sidebar widget 57519ccd446eSAtari911- ✅ Event list 57529ccd446eSAtari911- ✅ **Day panel** ← v5.0.2! 57539ccd446eSAtari911- ✅ All backgrounds 57549ccd446eSAtari911- ✅ All text 57559ccd446eSAtari911- ✅ All borders 57569ccd446eSAtari911 57579ccd446eSAtari911**Complete wiki integration!** 57589ccd446eSAtari911 57599ccd446eSAtari911## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 57609ccd446eSAtari911 57619ccd446eSAtari911### Enhanced: Time Conflict Tooltips Now Themed 57629ccd446eSAtari911- **Fixed:** Conflict tooltips now match calendar theme 57639ccd446eSAtari911- **Added:** Theme-aware background, border, text colors 57649ccd446eSAtari911- **Added:** Theme-aware shadow effects 57659ccd446eSAtari911- **Result:** Complete visual consistency! 57669ccd446eSAtari911 57679ccd446eSAtari911### Tooltip Theming 57689ccd446eSAtari911 57699ccd446eSAtari911**Now uses theme colors for**: 57709ccd446eSAtari911- Background: Theme background color 57719ccd446eSAtari911- Border: Theme border color 57729ccd446eSAtari911- Header text: Theme primary text color 57739ccd446eSAtari911- Item text: Theme dim text color 57749ccd446eSAtari911- Shadow: Theme shadow color 57759ccd446eSAtari911 57769ccd446eSAtari911### Before vs After 57779ccd446eSAtari911 57789ccd446eSAtari911**Before (v5.0.0)**: 57799ccd446eSAtari911``` 57809ccd446eSAtari911Hover ⚠️ badge: 57819ccd446eSAtari911┌─────────────────┐ 57829ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Default colors 57839ccd446eSAtari911│ • Event A │ 57849ccd446eSAtari911│ • Event B │ 57859ccd446eSAtari911└─────────────────┘ 57869ccd446eSAtari911``` 57879ccd446eSAtari911 57889ccd446eSAtari911**After (v5.0.1)**: 57899ccd446eSAtari911``` 57909ccd446eSAtari911Matrix Theme: 57919ccd446eSAtari911┌─────────────────┐ 57929ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Green header 57939ccd446eSAtari911│ • Event A │ ← Green text 57949ccd446eSAtari911│ • Event B │ Dark green bg 57959ccd446eSAtari911└─────────────────┘ 57969ccd446eSAtari911 57979ccd446eSAtari911Purple Theme: 57989ccd446eSAtari911┌─────────────────┐ 57999ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Purple header 58009ccd446eSAtari911│ • Event A │ ← Purple text 58019ccd446eSAtari911│ • Event B │ Dark purple bg 58029ccd446eSAtari911└─────────────────┘ 58039ccd446eSAtari911 58049ccd446eSAtari911Professional Theme: 58059ccd446eSAtari911┌─────────────────┐ 58069ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Blue header 58079ccd446eSAtari911│ • Event A │ ← Dark text 58089ccd446eSAtari911│ • Event B │ Light bg 58099ccd446eSAtari911└─────────────────┘ 58109ccd446eSAtari911 58119ccd446eSAtari911Pink Theme: 58129ccd446eSAtari911┌─────────────────┐ 58139ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Pink header ✨ 58149ccd446eSAtari911│ • Event A │ ← Pink text 58159ccd446eSAtari911│ • Event B │ Dark pink bg 58169ccd446eSAtari911└─────────────────┘ 58179ccd446eSAtari911 58189ccd446eSAtari911Wiki Default: 58199ccd446eSAtari911┌─────────────────┐ 58209ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Adapts to wiki 58219ccd446eSAtari911│ • Event A │ ← Wiki colors 58229ccd446eSAtari911│ • Event B │ 58239ccd446eSAtari911└─────────────────┘ 58249ccd446eSAtari911``` 58259ccd446eSAtari911 58269ccd446eSAtari911### Now 100% Complete 58279ccd446eSAtari911 58289ccd446eSAtari911**Every tooltip themed**: 58299ccd446eSAtari911- ✅ Conflict tooltips 58309ccd446eSAtari911- ✅ All other tooltips (if any) 58319ccd446eSAtari911- ✅ Perfect consistency 58329ccd446eSAtari911 58339ccd446eSAtari911**Absolute perfection!** ✨ 58349ccd446eSAtari911 58359ccd446eSAtari911## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 58369ccd446eSAtari911 58379ccd446eSAtari911### Major Milestone: Version 5.0 58389ccd446eSAtari911 58399ccd446eSAtari911This 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. 58409ccd446eSAtari911 58419ccd446eSAtari911### Complete Feature Set 58429ccd446eSAtari911 58439ccd446eSAtari911**5 Beautiful Themes**: 58449ccd446eSAtari911- Matrix Edition (Green with glow) 58459ccd446eSAtari911- Purple Dream (Elegant purple) 58469ccd446eSAtari911- Professional Blue (Clean and modern) 58479ccd446eSAtari911- Pink Bling (Maximum sparkle) 58489ccd446eSAtari911- Wiki Default (Auto-adapts to your DokuWiki theme) 58499ccd446eSAtari911 58509ccd446eSAtari911**100% Theme Coverage**: 58519ccd446eSAtari911- ✅ Calendar grid and cells 58529ccd446eSAtari911- ✅ Event boxes and borders 58539ccd446eSAtari911- ✅ Sidebar widget 58549ccd446eSAtari911- ✅ Event list panel 58559ccd446eSAtari911- ✅ Search functionality 58569ccd446eSAtari911- ✅ Edit/Add dialogs (complete) 58579ccd446eSAtari911- ✅ Day popup dialogs 58589ccd446eSAtari911- ✅ Month picker 58599ccd446eSAtari911- ✅ All text (primary, dim, bright) 58609ccd446eSAtari911- ✅ All buttons 58619ccd446eSAtari911- ✅ All inputs and forms 58629ccd446eSAtari911- ✅ All checkboxes 58639ccd446eSAtari911- ✅ All borders 58649ccd446eSAtari911- ✅ All badges and labels 58659ccd446eSAtari911- ✅ Event highlight effects 58669ccd446eSAtari911 58679ccd446eSAtari911**Perfect Visual Consistency**: 58689ccd446eSAtari911- No white pixels anywhere 58699ccd446eSAtari911- No unthemed elements 58709ccd446eSAtari911- No default colors 58719ccd446eSAtari911- Complete visual unity 58729ccd446eSAtari911 58739ccd446eSAtari911### Major Improvements in v5.0 58749ccd446eSAtari911 58759ccd446eSAtari9111. **Complete Dialog Theming** (v4.8.5-4.8.7) 58769ccd446eSAtari911 - Edit event dialog fully themed 58779ccd446eSAtari911 - Day popup dialog fully themed 58789ccd446eSAtari911 - All form inputs themed 58799ccd446eSAtari911 - All checkboxes themed 58809ccd446eSAtari911 - All buttons themed 58819ccd446eSAtari911 58829ccd446eSAtari9112. **Event Box Border Perfection** (v4.8.6) 58839ccd446eSAtari911 - All 4 borders themed (top, right, bottom, left) 58849ccd446eSAtari911 - Sidebar event dividers themed 58859ccd446eSAtari911 - Past Events toggle border themed 58869ccd446eSAtari911 58879ccd446eSAtari9113. **Checkbox Field Borders** (v4.9.0) 58889ccd446eSAtari911 - Repeating Event section border themed 58899ccd446eSAtari911 - Task checkbox section border themed 58909ccd446eSAtari911 58919ccd446eSAtari9114. **Wiki Default Theme** (v4.10.0) 58929ccd446eSAtari911 - New 5th theme 58939ccd446eSAtari911 - Uses DokuWiki CSS variables 58949ccd446eSAtari911 - Auto-adapts to any wiki template 58959ccd446eSAtari911 - Perfect for seamless integration 58969ccd446eSAtari911 58979ccd446eSAtari9115. **Clean Text Appearance** (v4.11.0) 58989ccd446eSAtari911 - Removed text glow from Matrix 58999ccd446eSAtari911 - Removed text glow from Purple 59009ccd446eSAtari911 - Removed text glow from Professional 59019ccd446eSAtari911 - Removed text glow from Wiki Default 59029ccd446eSAtari911 - Kept text glow on Pink Bling only 59039ccd446eSAtari911 59049ccd446eSAtari9116. **Event Highlight Effects** (v4.12.0-4.12.1) 59059ccd446eSAtari911 - Theme-aware highlight glow 59069ccd446eSAtari911 - Click event bar → event glows 59079ccd446eSAtari911 - 3-second themed glow effect 59089ccd446eSAtari911 - Smooth animations 59099ccd446eSAtari911 59109ccd446eSAtari911### See RELEASE_NOTES.md for Complete Details 59119ccd446eSAtari911 59129ccd446eSAtari911For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 59139ccd446eSAtari911 59149ccd446eSAtari911## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 59159ccd446eSAtari911 59169ccd446eSAtari911### Fixed: Event Highlight Now Working 59179ccd446eSAtari911- **Fixed:** Used setProperty() to properly apply !important styles 59189ccd446eSAtari911- **Added:** Console logging for debugging 59199ccd446eSAtari911- **Fixed:** Proper style application with important flag 59209ccd446eSAtari911- **Result:** Highlight glow now works correctly! 59219ccd446eSAtari911 59229ccd446eSAtari911### Technical Fix 59239ccd446eSAtari911 59249ccd446eSAtari911**Before (not working)**: 59259ccd446eSAtari911```javascript 59269ccd446eSAtari911eventItem.style.background = color + ' !important'; // Doesn't work 59279ccd446eSAtari911``` 59289ccd446eSAtari911 59299ccd446eSAtari911**After (working)**: 59309ccd446eSAtari911```javascript 59319ccd446eSAtari911eventItem.style.setProperty('background', color, 'important'); // Works! 59329ccd446eSAtari911``` 59339ccd446eSAtari911 59349ccd446eSAtari911### Added Debug Logging 59359ccd446eSAtari911 59369ccd446eSAtari911Console now shows: 59379ccd446eSAtari911- "Highlighting event: [calId] [eventId] [date]" 59389ccd446eSAtari911- "Found event item: [element]" 59399ccd446eSAtari911- "Theme: [theme name]" 59409ccd446eSAtari911- "Highlight colors: [bg] [shadow]" 59419ccd446eSAtari911- "Applied highlight styles" 59429ccd446eSAtari911- "Removing highlight" (after 3 seconds) 59439ccd446eSAtari911 59449ccd446eSAtari911### Now Working 59459ccd446eSAtari911 59469ccd446eSAtari911Click any event bar → Event glows with theme colors ✓ 59479ccd446eSAtari911 59489ccd446eSAtari911## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 59499ccd446eSAtari911 59509ccd446eSAtari911### ✨ Enhanced: Event Click Highlight Now Theme-Aware 59519ccd446eSAtari911- **Fixed:** Restored event highlight glow when clicking calendar bars 59529ccd446eSAtari911- **Improved:** Highlight now matches each theme's colors 59539ccd446eSAtari911- **Added:** Stronger glow effect for better visibility 59549ccd446eSAtari911- **Duration:** 3 seconds with smooth fade 59559ccd446eSAtari911- **Result:** Beautiful themed highlights for all themes! 59569ccd446eSAtari911 59579ccd446eSAtari911### How It Works 59589ccd446eSAtari911 59599ccd446eSAtari911When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 59609ccd446eSAtari911 59619ccd446eSAtari911**Matrix Theme**: 59629ccd446eSAtari911```javascript 59639ccd446eSAtari911Background: Darker green (#1a3d1a) 59649ccd446eSAtari911Glow: Double green glow (0 0 20px + 0 0 40px) 59659ccd446eSAtari911Color: rgba(0, 204, 7, 0.8) 59669ccd446eSAtari911``` 59679ccd446eSAtari911 59689ccd446eSAtari911**Purple Theme**: 59699ccd446eSAtari911```javascript 59709ccd446eSAtari911Background: Darker purple (#3d2b4d) 59719ccd446eSAtari911Glow: Double purple glow 59729ccd446eSAtari911Color: rgba(155, 89, 182, 0.8) 59739ccd446eSAtari911``` 59749ccd446eSAtari911 59759ccd446eSAtari911**Professional Theme**: 59769ccd446eSAtari911```javascript 59779ccd446eSAtari911Background: Light blue (#e3f2fd) 59789ccd446eSAtari911Glow: Single blue glow 59799ccd446eSAtari911Color: rgba(74, 144, 226, 0.4) 59809ccd446eSAtari911``` 59819ccd446eSAtari911 59829ccd446eSAtari911**Pink Theme**: 59839ccd446eSAtari911```javascript 59849ccd446eSAtari911Background: Darker pink (#3d2030) 59859ccd446eSAtari911Glow: Double pink glow ✨ 59869ccd446eSAtari911Color: rgba(255, 20, 147, 0.8) 59879ccd446eSAtari911``` 59889ccd446eSAtari911 59899ccd446eSAtari911**Wiki Theme**: 59909ccd446eSAtari911```javascript 59919ccd446eSAtari911Background: var(--__background_neu__) 59929ccd446eSAtari911Glow: Blue glow (adapts to wiki) 59939ccd446eSAtari911Color: rgba(43, 115, 183, 0.4) 59949ccd446eSAtari911``` 59959ccd446eSAtari911 59969ccd446eSAtari911### Visual Examples 59979ccd446eSAtari911 59989ccd446eSAtari911**Matrix - Click Event**: 59999ccd446eSAtari911``` 60009ccd446eSAtari911Calendar: 60019ccd446eSAtari911┌─────────────┐ 60029ccd446eSAtari911│ 2:00 PM │ ← Click this bar 60039ccd446eSAtari911└─────────────┘ 60049ccd446eSAtari911 60059ccd446eSAtari911Event List: 60069ccd446eSAtari911╔═════════════════════╗ 60079ccd446eSAtari911║ Team Meeting ║ ← GLOWS GREEN 60089ccd446eSAtari911║ 2:00 PM ║ for 3 seconds 60099ccd446eSAtari911╚═════════════════════╝ 60109ccd446eSAtari911 ↑↑↑ Strong green glow ↑↑↑ 60119ccd446eSAtari911``` 60129ccd446eSAtari911 60139ccd446eSAtari911**Purple - Click Event**: 60149ccd446eSAtari911``` 60159ccd446eSAtari911Calendar: 60169ccd446eSAtari911┌─────────────┐ 60179ccd446eSAtari911│ 4:00 PM │ ← Click 60189ccd446eSAtari911└─────────────┘ 60199ccd446eSAtari911 60209ccd446eSAtari911Event List: 60219ccd446eSAtari911╔═════════════════════╗ 60229ccd446eSAtari911║ Code Review ║ ← GLOWS PURPLE 60239ccd446eSAtari911║ 4:00 PM ║ for 3 seconds 60249ccd446eSAtari911╚═════════════════════╝ 60259ccd446eSAtari911 ↑↑↑ Strong purple glow ↑↑↑ 60269ccd446eSAtari911``` 60279ccd446eSAtari911 60289ccd446eSAtari911**Pink - Click Event**: 60299ccd446eSAtari911``` 60309ccd446eSAtari911Calendar: 60319ccd446eSAtari911┌─────────────┐ 60329ccd446eSAtari911│ 1:00 PM │ ← Click 60339ccd446eSAtari911└─────────────┘ 60349ccd446eSAtari911 60359ccd446eSAtari911Event List: 60369ccd446eSAtari911╔═════════════════════╗ 60379ccd446eSAtari911║ Lunch Date ║ ← GLOWS PINK 60389ccd446eSAtari911║ 1:00 PM ✨ ║ for 3 seconds 60399ccd446eSAtari911╚═════════════════════╝ 60409ccd446eSAtari911 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 60419ccd446eSAtari911``` 60429ccd446eSAtari911 60439ccd446eSAtari911### Glow Specifications 60449ccd446eSAtari911 60459ccd446eSAtari911**Matrix**: 60469ccd446eSAtari911- Background: Dark green 60479ccd446eSAtari911- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 60489ccd446eSAtari911- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 60499ccd446eSAtari911- Effect: Strong green pulse 60509ccd446eSAtari911 60519ccd446eSAtari911**Purple**: 60529ccd446eSAtari911- Background: Dark purple 60539ccd446eSAtari911- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 60549ccd446eSAtari911- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 60559ccd446eSAtari911- Effect: Strong purple pulse 60569ccd446eSAtari911 60579ccd446eSAtari911**Professional**: 60589ccd446eSAtari911- Background: Light blue 60599ccd446eSAtari911- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 60609ccd446eSAtari911- Effect: Subtle blue glow 60619ccd446eSAtari911 60629ccd446eSAtari911**Pink**: 60639ccd446eSAtari911- Background: Dark pink 60649ccd446eSAtari911- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 60659ccd446eSAtari911- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 60669ccd446eSAtari911- Effect: MAXIMUM SPARKLE ✨ 60679ccd446eSAtari911 60689ccd446eSAtari911**Wiki**: 60699ccd446eSAtari911- Background: Theme neutral color 60709ccd446eSAtari911- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 60719ccd446eSAtari911- Effect: Adapts to wiki theme 60729ccd446eSAtari911 60739ccd446eSAtari911### User Experience 60749ccd446eSAtari911 60759ccd446eSAtari911**Click event bar** → Event highlights with themed glow 60769ccd446eSAtari911**Auto-scroll** → Event scrolls into view smoothly 60779ccd446eSAtari911**3 second glow** → Fade out after 3 seconds 60789ccd446eSAtari911**Smooth transition** → 0.3s ease-in-out 60799ccd446eSAtari911 60809ccd446eSAtari911### Perfect for Finding Events 60819ccd446eSAtari911 60829ccd446eSAtari911**Large event lists**: Quickly locate the clicked event ✓ 60839ccd446eSAtari911**Visual feedback**: Know which event you clicked ✓ 60849ccd446eSAtari911**Theme consistency**: Matches your chosen theme ✓ 60859ccd446eSAtari911**Smooth animation**: Professional appearance ✓ 60869ccd446eSAtari911 60879ccd446eSAtari911### All Themes Covered 60889ccd446eSAtari911 60899ccd446eSAtari911- ✅ Matrix: Green glow 60909ccd446eSAtari911- ✅ Purple: Purple glow 60919ccd446eSAtari911- ✅ Professional: Blue glow 60929ccd446eSAtari911- ✅ Pink: Maximum pink sparkle 60939ccd446eSAtari911- ✅ Wiki: Adaptive glow 60949ccd446eSAtari911 60959ccd446eSAtari911**Click any event bar and watch it glow!** ✨ 60969ccd446eSAtari911 60979ccd446eSAtari911## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 60989ccd446eSAtari911 60999ccd446eSAtari911### Changed: Text Glow Now Pink-Only 61009ccd446eSAtari911- **Removed:** Text shadow/glow from Matrix theme 61019ccd446eSAtari911- **Removed:** Text shadow/glow from Purple theme 61029ccd446eSAtari911- **Removed:** Text shadow/glow from Professional theme (already had none) 61039ccd446eSAtari911- **Removed:** Text shadow/glow from Wiki Default theme 61049ccd446eSAtari911- **Kept:** Text shadow/glow ONLY on Pink Bling theme 61059ccd446eSAtari911- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 61069ccd446eSAtari911 61079ccd446eSAtari911### All Changes 61089ccd446eSAtari911 61099ccd446eSAtari911**Before (Matrix, Purple)**: 61109ccd446eSAtari911```css 61119ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Glow effect */ 61129ccd446eSAtari911``` 61139ccd446eSAtari911 61149ccd446eSAtari911**After (Matrix, Purple, Professional, Wiki)**: 61159ccd446eSAtari911```css 61169ccd446eSAtari911text-shadow: none; /* Clean, no glow */ 61179ccd446eSAtari911``` 61189ccd446eSAtari911 61199ccd446eSAtari911**Pink Bling (unchanged)**: 61209ccd446eSAtari911```css 61219ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 61229ccd446eSAtari911``` 61239ccd446eSAtari911 61249ccd446eSAtari911### Text Shadow Removed From 61259ccd446eSAtari911 61269ccd446eSAtari911**Sidebar day numbers**: No glow ✓ 61279ccd446eSAtari911**Event titles**: No glow ✓ 61289ccd446eSAtari911**Event dates**: No glow ✓ 61299ccd446eSAtari911**Add Event button**: No glow ✓ 61309ccd446eSAtari911**Day popup events**: No glow ✓ 61319ccd446eSAtari911 61329ccd446eSAtari911### Before vs After 61339ccd446eSAtari911 61349ccd446eSAtari911**BEFORE (Matrix)**: 61359ccd446eSAtari911``` 61369ccd446eSAtari911Event Title ✨ ← Glowing green text 61379ccd446eSAtari9112:00 PM ✨ ← Glowing text 61389ccd446eSAtari911``` 61399ccd446eSAtari911 61409ccd446eSAtari911**AFTER (Matrix)**: 61419ccd446eSAtari911``` 61429ccd446eSAtari911Event Title ← Clean green text 61439ccd446eSAtari9112:00 PM ← Clean text 61449ccd446eSAtari911``` 61459ccd446eSAtari911 61469ccd446eSAtari911**Pink Bling (Still Glows)**: 61479ccd446eSAtari911``` 61489ccd446eSAtari911Event Title ✨ ← Still glowing! 61499ccd446eSAtari9112:00 PM ✨ ← Maximum sparkle! 61509ccd446eSAtari911``` 61519ccd446eSAtari911 61529ccd446eSAtari911### Theme Appearances 61539ccd446eSAtari911 61549ccd446eSAtari911** Matrix Edition**: 61559ccd446eSAtari911- Clean green text 61569ccd446eSAtari911- No glow effects 61579ccd446eSAtari911- Professional appearance 61589ccd446eSAtari911- Still has border glow 61599ccd446eSAtari911 61609ccd446eSAtari911** Purple Dream**: 61619ccd446eSAtari911- Clean purple text 61629ccd446eSAtari911- No glow effects 61639ccd446eSAtari911- Elegant appearance 61649ccd446eSAtari911- Still has border glow 61659ccd446eSAtari911 61669ccd446eSAtari911** Professional Blue**: 61679ccd446eSAtari911- Clean text (unchanged) 61689ccd446eSAtari911- No glow effects 61699ccd446eSAtari911- Modern appearance 61709ccd446eSAtari911 61719ccd446eSAtari911** Pink Bling**: 61729ccd446eSAtari911- Glowing pink text ✨ 61739ccd446eSAtari911- Maximum glow effects 61749ccd446eSAtari911- Sparkle everywhere! 61759ccd446eSAtari911- All the bling! 61769ccd446eSAtari911 61779ccd446eSAtari911** Wiki Default**: 61789ccd446eSAtari911- Clean text 61799ccd446eSAtari911- No glow effects 61809ccd446eSAtari911- Matches wiki theme 61819ccd446eSAtari911 61829ccd446eSAtari911### Glow Effects Remaining 61839ccd446eSAtari911 61849ccd446eSAtari911**Border/box glow**: Still present on all themes ✓ 61859ccd446eSAtari911**Pink text glow**: Only on Pink Bling ✓ 61869ccd446eSAtari911**Shadow effects**: Still on buttons/boxes ✓ 61879ccd446eSAtari911 61889ccd446eSAtari911**Only TEXT glow removed from non-pink themes!** 61899ccd446eSAtari911 61909ccd446eSAtari911### Result 61919ccd446eSAtari911 61929ccd446eSAtari911**Cleaner, more professional look** for: 61939ccd446eSAtari911- Matrix ✓ 61949ccd446eSAtari911- Purple ✓ 61959ccd446eSAtari911- Professional ✓ 61969ccd446eSAtari911- Wiki Default ✓ 61979ccd446eSAtari911 61989ccd446eSAtari911**Maximum sparkle** for: 61999ccd446eSAtari911- Pink Bling ✨✓ 62009ccd446eSAtari911 62019ccd446eSAtari911**Best of both worlds!** 62029ccd446eSAtari911 62039ccd446eSAtari911## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 62049ccd446eSAtari911 62059ccd446eSAtari911### New: Wiki Default Theme 62069ccd446eSAtari911- **Added:** 5th theme that automatically matches your DokuWiki template 62079ccd446eSAtari911- **Uses:** CSS variables from your wiki theme 62089ccd446eSAtari911- **Adapts:** Automatically works with light and dark themes 62099ccd446eSAtari911- **Perfect:** Seamless integration with any DokuWiki template 62109ccd446eSAtari911 62119ccd446eSAtari911### How It Works 62129ccd446eSAtari911 62139ccd446eSAtari911**Wiki theme uses DokuWiki CSS variables**: 62149ccd446eSAtari911```css 62159ccd446eSAtari911bg: var(--__background_site__, #f5f5f5) 62169ccd446eSAtari911border: var(--__border__, #ccc) 62179ccd446eSAtari911text_primary: var(--__text__, #333) 62189ccd446eSAtari911text_bright: var(--__link__, #2b73b7) 62199ccd446eSAtari911text_dim: var(--__text_neu__, #666) 62209ccd446eSAtari911cell_bg: var(--__background__, #fff) 62219ccd446eSAtari911grid_border: var(--__border__, #ccc) 62229ccd446eSAtari911``` 62239ccd446eSAtari911 62249ccd446eSAtari911**With fallbacks for older DokuWiki versions**: 62259ccd446eSAtari911- If CSS variables exist → Use them ✓ 62269ccd446eSAtari911- If not available → Use fallback values ✓ 62279ccd446eSAtari911 62289ccd446eSAtari911### All 5 Themes 62299ccd446eSAtari911 62309ccd446eSAtari911**1. Matrix Edition** (Default) 62319ccd446eSAtari911- Dark green with neon glow 62329ccd446eSAtari911- Matrix-style effects 62339ccd446eSAtari911- Original theme 62349ccd446eSAtari911 62359ccd446eSAtari911**2. Purple Dream** 62369ccd446eSAtari911- Rich purple with violet accents 62379ccd446eSAtari911- Elegant and sophisticated 62389ccd446eSAtari911- Soft glow effects 62399ccd446eSAtari911 62409ccd446eSAtari911**3. Professional Blue** 62419ccd446eSAtari911- Clean blue and grey 62429ccd446eSAtari911- Modern professional 62439ccd446eSAtari911- No glow effects 62449ccd446eSAtari911 62459ccd446eSAtari911**4. Pink Bling** 62469ccd446eSAtari911- Glamorous hot pink 62479ccd446eSAtari911- Maximum sparkle ✨ 62489ccd446eSAtari911- Hearts and diamonds 62499ccd446eSAtari911 62509ccd446eSAtari911**5. Wiki Default** ← NEW! 62519ccd446eSAtari911- Matches your wiki template 62529ccd446eSAtari911- Auto-adapts to light/dark 62539ccd446eSAtari911- Perfect integration 62549ccd446eSAtari911 62559ccd446eSAtari911### Examples 62569ccd446eSAtari911 62579ccd446eSAtari911**Light Wiki Template**: 62589ccd446eSAtari911``` 62599ccd446eSAtari911Wiki Default theme shows: 62609ccd446eSAtari911- Light backgrounds (#f5f5f5) 62619ccd446eSAtari911- Dark text (#333) 62629ccd446eSAtari911- Light inputs (#fff) 62639ccd446eSAtari911- Gray borders (#ccc) 62649ccd446eSAtari911 62659ccd446eSAtari911Matches perfectly! ✓ 62669ccd446eSAtari911``` 62679ccd446eSAtari911 62689ccd446eSAtari911**Dark Wiki Template**: 62699ccd446eSAtari911``` 62709ccd446eSAtari911Wiki Default theme shows: 62719ccd446eSAtari911- Dark backgrounds (from template) 62729ccd446eSAtari911- Light text (from template) 62739ccd446eSAtari911- Dark inputs (from template) 62749ccd446eSAtari911- Dark borders (from template) 62759ccd446eSAtari911 62769ccd446eSAtari911Matches perfectly! ✓ 62779ccd446eSAtari911``` 62789ccd446eSAtari911 62799ccd446eSAtari911**Bootstrap Template**: 62809ccd446eSAtari911``` 62819ccd446eSAtari911Uses Bootstrap's colors 62829ccd446eSAtari911Matches perfectly! ✓ 62839ccd446eSAtari911``` 62849ccd446eSAtari911 62859ccd446eSAtari911**Material Template**: 62869ccd446eSAtari911``` 62879ccd446eSAtari911Uses Material's colors 62889ccd446eSAtari911Matches perfectly! ✓ 62899ccd446eSAtari911``` 62909ccd446eSAtari911 62919ccd446eSAtari911### CSS Variables Used 62929ccd446eSAtari911 62939ccd446eSAtari911**DokuWiki provides**: 62949ccd446eSAtari911- `--__background_site__`: Page background 62959ccd446eSAtari911- `--__background_alt__`: Section backgrounds 62969ccd446eSAtari911- `--__background__`: Content backgrounds 62979ccd446eSAtari911- `--__text__`: Primary text color 62989ccd446eSAtari911- `--__link__`: Link color 62999ccd446eSAtari911- `--__text_neu__`: Dimmed text 63009ccd446eSAtari911- `--__border__`: Border color 63019ccd446eSAtari911- `--__background_neu__`: Neutral background 63029ccd446eSAtari911 63039ccd446eSAtari911**All with fallbacks**: 63049ccd446eSAtari911```css 63059ccd446eSAtari911var(--__background_site__, #f5f5f5) 63069ccd446eSAtari911/* Falls back to light gray if variable doesn't exist */ 63079ccd446eSAtari911``` 63089ccd446eSAtari911 63099ccd446eSAtari911### Perfect for Every Template 63109ccd446eSAtari911 63119ccd446eSAtari911**Custom templates**: Automatically adapts ✓ 63129ccd446eSAtari911**Light themes**: Perfect match ✓ 63139ccd446eSAtari911**Dark themes**: Perfect match ✓ 63149ccd446eSAtari911**Any DokuWiki version**: Works with fallbacks ✓ 63159ccd446eSAtari911 63169ccd446eSAtari911### Complete Theme Collection 63179ccd446eSAtari911 63189ccd446eSAtari911Now with **5 gorgeous themes**: 63199ccd446eSAtari911- 3 dark themes (Matrix, Purple, Pink) 63209ccd446eSAtari911- 1 light theme (Professional) 63219ccd446eSAtari911- 1 adaptive theme (Wiki Default) ← NEW! 63229ccd446eSAtari911 63239ccd446eSAtari911**Something for everyone!** 63249ccd446eSAtari911 63259ccd446eSAtari911## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 63269ccd446eSAtari911 63279ccd446eSAtari911### Fixed: Checkbox Field Borders Themed 63289ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs 63299ccd446eSAtari911- **Fixed:** Repeating Event section border 63309ccd446eSAtari911- **Fixed:** Task checkbox section border 63319ccd446eSAtari911- **Result:** No white borders around checkboxes! 63329ccd446eSAtari911 63339ccd446eSAtari911### Changes 63349ccd446eSAtari911 63359ccd446eSAtari911**Checkbox Field Border Styling**: 63369ccd446eSAtari911 63379ccd446eSAtari911**Before**: 63389ccd446eSAtari911```html 63399ccd446eSAtari911<div class="form-field-checkbox" 63409ccd446eSAtari911 style="background: $bg !important;"> 63419ccd446eSAtari911<!-- Border shows white ✗ --> 63429ccd446eSAtari911``` 63439ccd446eSAtari911 63449ccd446eSAtari911**After**: 63459ccd446eSAtari911```php 63469ccd446eSAtari911<div class="form-field-checkbox" 63479ccd446eSAtari911 style="background: $bg !important; 63489ccd446eSAtari911 border-color: $grid_border !important;"> 63499ccd446eSAtari911<!-- Border themed ✓ --> 63509ccd446eSAtari911``` 63519ccd446eSAtari911 63529ccd446eSAtari911### Before vs After 63539ccd446eSAtari911 63549ccd446eSAtari911**BEFORE (v4.8.8)**: 63559ccd446eSAtari911``` 63569ccd446eSAtari911Edit Dialog: 63579ccd446eSAtari911┌──────────────────┐ 63589ccd446eSAtari911│ ☑ Repeating ║│ ← White border ✗ 63599ccd446eSAtari911└──────────────────┘ 63609ccd446eSAtari911┌──────────────────┐ 63619ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗ 63629ccd446eSAtari911└──────────────────┘ 63639ccd446eSAtari911``` 63649ccd446eSAtari911 63659ccd446eSAtari911**AFTER (v4.9.0)**: 63669ccd446eSAtari911``` 63679ccd446eSAtari911Matrix Edit Dialog: 63689ccd446eSAtari911┌──────────────────┐ 63699ccd446eSAtari911│ ☑ Repeating │ ← Green border ✓ 63709ccd446eSAtari911└──────────────────┘ 63719ccd446eSAtari911┌──────────────────┐ 63729ccd446eSAtari911│ ☑ Task checkbox │ ← Green border ✓ 63739ccd446eSAtari911└──────────────────┘ 63749ccd446eSAtari911``` 63759ccd446eSAtari911 63769ccd446eSAtari911### ABSOLUTE PERFECTION ACHIEVED 63779ccd446eSAtari911 63789ccd446eSAtari911**Every element themed**: 63799ccd446eSAtari911- ✅ All inputs 63809ccd446eSAtari911- ✅ All labels 63819ccd446eSAtari911- ✅ All sections 63829ccd446eSAtari911- ✅ **Checkbox field borders** ← v4.9.0! 63839ccd446eSAtari911- ✅ All buttons 63849ccd446eSAtari911- ✅ All checkboxes 63859ccd446eSAtari911- ✅ No white anywhere 63869ccd446eSAtari911 63879ccd446eSAtari911**100% COMPLETE!** ✨ 63889ccd446eSAtari911 63899ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 63909ccd446eSAtari911 63919ccd446eSAtari911### Fixed: Checkbox Field Borders Themed 63929ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs 63939ccd446eSAtari911- **Fixed:** Repeating Event section border 63949ccd446eSAtari911- **Fixed:** Task checkbox section border 63959ccd446eSAtari911- **Result:** No white borders around checkboxes! 63969ccd446eSAtari911 63979ccd446eSAtari911### Fixed: Admin Sections Respect Wiki Theme 63989ccd446eSAtari911- **Fixed:** All admin backgrounds use CSS variables 63999ccd446eSAtari911- **Fixed:** Text colors use wiki text color 64009ccd446eSAtari911- **Fixed:** Borders use wiki border color 64019ccd446eSAtari911- **Result:** Admin matches wiki theme perfectly! 64029ccd446eSAtari911 64039ccd446eSAtari911### All Changes 64049ccd446eSAtari911 64059ccd446eSAtari911**1. Checkbox Field Border Styling**: 64069ccd446eSAtari911 64079ccd446eSAtari911**Before**: 64089ccd446eSAtari911```html 64099ccd446eSAtari911<div class="form-field-checkbox" 64109ccd446eSAtari911 style="background: $bg !important;"> 64119ccd446eSAtari911<!-- Border shows white ✗ --> 64129ccd446eSAtari911``` 64139ccd446eSAtari911 64149ccd446eSAtari911**After**: 64159ccd446eSAtari911```php 64169ccd446eSAtari911<div class="form-field-checkbox" 64179ccd446eSAtari911 style="background: $bg !important; 64189ccd446eSAtari911 border-color: $grid_border !important;"> 64199ccd446eSAtari911<!-- Border themed ✓ --> 64209ccd446eSAtari911``` 64219ccd446eSAtari911 64229ccd446eSAtari911**2. Admin CSS Variables**: 64239ccd446eSAtari911 64249ccd446eSAtari911**Added CSS variables for wiki theme compatibility**: 64259ccd446eSAtari911```css 64269ccd446eSAtari911.calendar-admin-wrapper { 64279ccd446eSAtari911 background: var(--__background_site__, #f5f5f5); 64289ccd446eSAtari911 color: var(--__text__, #333); 64299ccd446eSAtari911} 64309ccd446eSAtari911.calendar-admin-section { 64319ccd446eSAtari911 background: var(--__background_alt__, #fafafa); 64329ccd446eSAtari911} 64339ccd446eSAtari911.calendar-admin-input { 64349ccd446eSAtari911 background: var(--__background__, #fff); 64359ccd446eSAtari911 color: var(--__text__, #333); 64369ccd446eSAtari911} 64379ccd446eSAtari911``` 64389ccd446eSAtari911 64399ccd446eSAtari911**Replaced hardcoded colors**: 64409ccd446eSAtari911```php 64419ccd446eSAtari911// Before: 64429ccd446eSAtari911background: #f9f9f9 64439ccd446eSAtari911background: white 64449ccd446eSAtari911color: #333 64459ccd446eSAtari911border: 1px solid #ddd 64469ccd446eSAtari911 64479ccd446eSAtari911// After: 64489ccd446eSAtari911background: var(--__background_alt__, #f9f9f9) 64499ccd446eSAtari911background: var(--__background__, #fff) 64509ccd446eSAtari911color: var(--__text__, #333) 64519ccd446eSAtari911border: 1px solid var(--__border__, #ddd) 64529ccd446eSAtari911``` 64539ccd446eSAtari911 64549ccd446eSAtari911### Before vs After 64559ccd446eSAtari911 64569ccd446eSAtari911**BEFORE (v4.8.8)**: 64579ccd446eSAtari911``` 64589ccd446eSAtari911Edit Dialog: 64599ccd446eSAtari911┌──────────────────┐ 64609ccd446eSAtari911│ ☑ Repeating ║│ ← White border ✗ 64619ccd446eSAtari911└──────────────────┘ 64629ccd446eSAtari911┌──────────────────┐ 64639ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗ 64649ccd446eSAtari911└──────────────────┘ 64659ccd446eSAtari911 64669ccd446eSAtari911Admin Page (Dark Wiki Theme): 64679ccd446eSAtari911┌──────────────────┐ 64689ccd446eSAtari911│ Light sections │ ← White boxes ✗ 64699ccd446eSAtari911│ Light inputs │ ← Doesn't match ✗ 64709ccd446eSAtari911└──────────────────┘ 64719ccd446eSAtari911``` 64729ccd446eSAtari911 64739ccd446eSAtari911**AFTER (v4.8.9)**: 64749ccd446eSAtari911``` 64759ccd446eSAtari911Matrix Edit Dialog: 64769ccd446eSAtari911┌──────────────────┐ 64779ccd446eSAtari911│ ☑ Repeating │ ← Green border ✓ 64789ccd446eSAtari911└──────────────────┘ 64799ccd446eSAtari911┌──────────────────┐ 64809ccd446eSAtari911│ ☑ Task checkbox │ ← Green border ✓ 64819ccd446eSAtari911└──────────────────┘ 64829ccd446eSAtari911 64839ccd446eSAtari911Admin (Dark Wiki Theme): 64849ccd446eSAtari911┌──────────────────┐ 64859ccd446eSAtari911│ Dark sections │ ← Matches wiki ✓ 64869ccd446eSAtari911│ Dark inputs │ ← Perfect match ✓ 64879ccd446eSAtari911└──────────────────┘ 64889ccd446eSAtari911``` 64899ccd446eSAtari911 64909ccd446eSAtari911### Admin Theme Examples 64919ccd446eSAtari911 64929ccd446eSAtari911**Light Wiki Theme**: 64939ccd446eSAtari911``` 64949ccd446eSAtari911Admin page backgrounds: Light 64959ccd446eSAtari911Section boxes: Light gray 64969ccd446eSAtari911Inputs: White 64979ccd446eSAtari911Borders: Gray 64989ccd446eSAtari911Text: Dark 64999ccd446eSAtari911 65009ccd446eSAtari911Perfect match! ✓ 65019ccd446eSAtari911``` 65029ccd446eSAtari911 65039ccd446eSAtari911**Dark Wiki Theme**: 65049ccd446eSAtari911``` 65059ccd446eSAtari911Admin page backgrounds: Dark 65069ccd446eSAtari911Section boxes: Darker gray 65079ccd446eSAtari911Inputs: Dark 65089ccd446eSAtari911Borders: Dark gray 65099ccd446eSAtari911Text: Light 65109ccd446eSAtari911 65119ccd446eSAtari911Perfect match! ✓ 65129ccd446eSAtari911``` 65139ccd446eSAtari911 65149ccd446eSAtari911**DokuWiki Default**: 65159ccd446eSAtari911``` 65169ccd446eSAtari911Uses wiki's CSS variables 65179ccd446eSAtari911Automatically adapts 65189ccd446eSAtari911Always matches! ✓ 65199ccd446eSAtari911``` 65209ccd446eSAtari911 65219ccd446eSAtari911### Complete Coverage 65229ccd446eSAtari911 65239ccd446eSAtari911**Edit Dialog**: 65249ccd446eSAtari911- ✅ All inputs themed 65259ccd446eSAtari911- ✅ All labels themed 65269ccd446eSAtari911- ✅ All sections themed 65279ccd446eSAtari911- ✅ **Checkbox borders** ← v4.8.9! 65289ccd446eSAtari911- ✅ All buttons themed 65299ccd446eSAtari911- ✅ No white anywhere 65309ccd446eSAtari911 65319ccd446eSAtari911**Admin Interface**: 65329ccd446eSAtari911- ✅ **Tab navigation** ← v4.8.9! 65339ccd446eSAtari911- ✅ **Section boxes** ← v4.8.9! 65349ccd446eSAtari911- ✅ **Input fields** ← v4.8.9! 65359ccd446eSAtari911- ✅ **Text colors** ← v4.8.9! 65369ccd446eSAtari911- ✅ **Borders** ← v4.8.9! 65379ccd446eSAtari911- ✅ All tabs (Manage, Update, Outlook, Themes) 65389ccd446eSAtari911 65399ccd446eSAtari911### CSS Variables Used 65409ccd446eSAtari911 65419ccd446eSAtari911**DokuWiki provides these**: 65429ccd446eSAtari911- `--__background_site__`: Page background 65439ccd446eSAtari911- `--__background_alt__`: Alternate background 65449ccd446eSAtari911- `--__background__`: Primary background (inputs) 65459ccd446eSAtari911- `--__text__`: Text color 65469ccd446eSAtari911- `--__border__`: Border color 65479ccd446eSAtari911 65489ccd446eSAtari911**Fallbacks provided for older DokuWiki**: 65499ccd446eSAtari911```css 65509ccd446eSAtari911var(--__background_site__, #f5f5f5) 65519ccd446eSAtari911var(--__background_alt__, #fafafa) 65529ccd446eSAtari911var(--__background__, #fff) 65539ccd446eSAtari911var(--__text__, #333) 65549ccd446eSAtari911var(--__border__, #ddd) 65559ccd446eSAtari911``` 65569ccd446eSAtari911 65579ccd446eSAtari911### Perfect Adaptation 65589ccd446eSAtari911 65599ccd446eSAtari911**Admin now adapts to ANY wiki theme**: 65609ccd446eSAtari911- Light themes → Light admin ✓ 65619ccd446eSAtari911- Dark themes → Dark admin ✓ 65629ccd446eSAtari911- Custom themes → Matches perfectly ✓ 65639ccd446eSAtari911- No hardcoded colors ✓ 65649ccd446eSAtari911 65659ccd446eSAtari911**Calendar themes still work**: 65669ccd446eSAtari911- Matrix, Purple, Professional, Pink ✓ 65679ccd446eSAtari911- Independent from wiki theme ✓ 65689ccd446eSAtari911- Admin respects wiki ✓ 65699ccd446eSAtari911- Calendar respects calendar theme ✓ 65709ccd446eSAtari911 65719ccd446eSAtari911### FINAL PERFECTION 65729ccd446eSAtari911 65739ccd446eSAtari911**Frontend (Calendar)**: 65749ccd446eSAtari911- Complete theming ✓ 65759ccd446eSAtari911- 4 beautiful themes ✓ 65769ccd446eSAtari911- Every pixel themed ✓ 65779ccd446eSAtari911 65789ccd446eSAtari911**Backend (Admin)**: 65799ccd446eSAtari911- Respects wiki theme ✓ 65809ccd446eSAtari911- Works with any theme ✓ 65819ccd446eSAtari911- Perfect compatibility ✓ 65829ccd446eSAtari911 65839ccd446eSAtari911**ABSOLUTELY EVERYTHING THEMED!** ✨ 65849ccd446eSAtari911 65859ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 65869ccd446eSAtari911 65879ccd446eSAtari911### Fixed: Task Checkboxes Now Fully Themed 65889ccd446eSAtari911- **Fixed:** Added background-color and border inline 65899ccd446eSAtari911- **Fixed:** Both PHP and JavaScript versions 65909ccd446eSAtari911- **Result:** No white checkboxes! 65919ccd446eSAtari911 65929ccd446eSAtari911### Fixed: Past Events Toggle Border 65939ccd446eSAtari911- **Fixed:** Added !important to border styling 65949ccd446eSAtari911- **Fixed:** Explicit top and bottom borders 65959ccd446eSAtari911- **Result:** No white line under toggle! 65969ccd446eSAtari911 65979ccd446eSAtari911### Fixed: Form Field Section Backgrounds 65989ccd446eSAtari911- **Fixed:** All form-field and form-row-group backgrounds 65999ccd446eSAtari911- **Fixed:** Every section in edit dialog 66009ccd446eSAtari911- **Result:** No white sections anywhere! 66019ccd446eSAtari911 66029ccd446eSAtari911### All Changes 66039ccd446eSAtari911 66049ccd446eSAtari911**1. Task Checkbox Styling**: 66059ccd446eSAtari911 66069ccd446eSAtari911**Before**: 66079ccd446eSAtari911```php 66089ccd446eSAtari911style="accent-color: $border !important;" 66099ccd446eSAtari911<!-- Only accent, background still white ✗ --> 66109ccd446eSAtari911``` 66119ccd446eSAtari911 66129ccd446eSAtari911**After**: 66139ccd446eSAtari911```php 66149ccd446eSAtari911style="accent-color: $border !important; 66159ccd446eSAtari911 background-color: $cell_bg !important; 66169ccd446eSAtari911 border: 2px solid $grid_border !important;" 66179ccd446eSAtari911<!-- Full theming ✓ --> 66189ccd446eSAtari911``` 66199ccd446eSAtari911 66209ccd446eSAtari911**2. Past Events Toggle Border**: 66219ccd446eSAtari911 66229ccd446eSAtari911**Before**: 66239ccd446eSAtari911```php 66249ccd446eSAtari911style="border-color: $grid_border;" 66259ccd446eSAtari911<!-- No !important, CSS overrides ✗ --> 66269ccd446eSAtari911``` 66279ccd446eSAtari911 66289ccd446eSAtari911**After**: 66299ccd446eSAtari911```php 66309ccd446eSAtari911style="border-color: $grid_border !important; 66319ccd446eSAtari911 border-top: 1px solid $grid_border !important; 66329ccd446eSAtari911 border-bottom: 1px solid $grid_border !important;" 66339ccd446eSAtari911<!-- Cannot be overridden ✓ --> 66349ccd446eSAtari911``` 66359ccd446eSAtari911 66369ccd446eSAtari911**3. Form Field Backgrounds**: 66379ccd446eSAtari911 66389ccd446eSAtari911**Before**: 66399ccd446eSAtari911```html 66409ccd446eSAtari911<div class="form-field"> 66419ccd446eSAtari911<div class="form-row-group"> 66429ccd446eSAtari911<!-- No background, shows white ✗ --> 66439ccd446eSAtari911``` 66449ccd446eSAtari911 66459ccd446eSAtari911**After**: 66469ccd446eSAtari911```php 66479ccd446eSAtari911<div class="form-field" style="background: $bg !important;"> 66489ccd446eSAtari911<div class="form-row-group" style="background: $bg !important;"> 66499ccd446eSAtari911<!-- Fully themed ✓ --> 66509ccd446eSAtari911``` 66519ccd446eSAtari911 66529ccd446eSAtari911### Before vs After 66539ccd446eSAtari911 66549ccd446eSAtari911**BEFORE (v4.8.7)**: 66559ccd446eSAtari911``` 66569ccd446eSAtari911Event: 66579ccd446eSAtari911□ Task checkbox ← White checkbox ✗ 66589ccd446eSAtari911 66599ccd446eSAtari911Past Events 66609ccd446eSAtari911▶ Past Events (3) ← White line below ✗ 66619ccd446eSAtari911───────────────── 66629ccd446eSAtari911 66639ccd446eSAtari911Edit Dialog: 66649ccd446eSAtari911┌──────────────┐ 66659ccd446eSAtari911│ Form fields │ ← White sections ✗ 66669ccd446eSAtari911└──────────────┘ 66679ccd446eSAtari911``` 66689ccd446eSAtari911 66699ccd446eSAtari911**AFTER (v4.8.8)**: 66709ccd446eSAtari911``` 66719ccd446eSAtari911Matrix Event: 66729ccd446eSAtari911☑ Task checkbox ← Green checkbox ✓ 66739ccd446eSAtari911 66749ccd446eSAtari911Past Events 66759ccd446eSAtari911▶ Past Events (3) ← Green border ✓ 66769ccd446eSAtari911───────────────── 66779ccd446eSAtari911 66789ccd446eSAtari911Matrix Edit Dialog: 66799ccd446eSAtari911┌──────────────┐ 66809ccd446eSAtari911│ Form fields │ ← Dark green ✓ 66819ccd446eSAtari911└──────────────┘ 66829ccd446eSAtari911``` 66839ccd446eSAtari911 66849ccd446eSAtari911### Complete Examples 66859ccd446eSAtari911 66869ccd446eSAtari911**Matrix Theme**: 66879ccd446eSAtari911``` 66889ccd446eSAtari911Task Checkbox: 66899ccd446eSAtari911☑ Checked → Green checkmark, green bg 66909ccd446eSAtari911☐ Unchecked → Green border, dark green bg ✓ 66919ccd446eSAtari911 66929ccd446eSAtari911Past Events Toggle: 66939ccd446eSAtari911▶ Past Events (3) 66949ccd446eSAtari911─────────────────── Green border ✓ 66959ccd446eSAtari911 66969ccd446eSAtari911Edit Dialog: 66979ccd446eSAtari911All sections dark green ✓ 66989ccd446eSAtari911No white anywhere ✓ 66999ccd446eSAtari911``` 67009ccd446eSAtari911 67019ccd446eSAtari911**Purple Theme**: 67029ccd446eSAtari911``` 67039ccd446eSAtari911Task Checkbox: 67049ccd446eSAtari911☑ Checked → Purple checkmark, purple bg 67059ccd446eSAtari911☐ Unchecked → Purple border, dark purple bg ✓ 67069ccd446eSAtari911 67079ccd446eSAtari911Past Events Toggle: 67089ccd446eSAtari911▶ Past Events (3) 67099ccd446eSAtari911─────────────────── Purple border ✓ 67109ccd446eSAtari911 67119ccd446eSAtari911Edit Dialog: 67129ccd446eSAtari911All sections dark purple ✓ 67139ccd446eSAtari911``` 67149ccd446eSAtari911 67159ccd446eSAtari911**Professional Theme**: 67169ccd446eSAtari911``` 67179ccd446eSAtari911Task Checkbox: 67189ccd446eSAtari911☑ Checked → Blue checkmark, white bg 67199ccd446eSAtari911☐ Unchecked → Gray border, white bg ✓ 67209ccd446eSAtari911 67219ccd446eSAtari911Past Events Toggle: 67229ccd446eSAtari911▶ Past Events (3) 67239ccd446eSAtari911─────────────────── Gray border ✓ 67249ccd446eSAtari911 67259ccd446eSAtari911Edit Dialog: 67269ccd446eSAtari911All sections light ✓ 67279ccd446eSAtari911``` 67289ccd446eSAtari911 67299ccd446eSAtari911**Pink Theme**: 67309ccd446eSAtari911``` 67319ccd446eSAtari911Task Checkbox: 67329ccd446eSAtari911☑ Checked → Pink checkmark, pink bg ✨ 67339ccd446eSAtari911☐ Unchecked → Pink border, dark pink bg ✓ 67349ccd446eSAtari911 67359ccd446eSAtari911Past Events Toggle: 67369ccd446eSAtari911▶ Past Events (3) 67379ccd446eSAtari911─────────────────── Pink border 67389ccd446eSAtari911 67399ccd446eSAtari911Edit Dialog: 67409ccd446eSAtari911All sections dark pink ✓ 67419ccd446eSAtari911``` 67429ccd446eSAtari911 67439ccd446eSAtari911### Checkbox Visual 67449ccd446eSAtari911 67459ccd446eSAtari911**Matrix - Unchecked**: 67469ccd446eSAtari911``` 67479ccd446eSAtari911┌─────┐ 67489ccd446eSAtari911│ │ ← Dark green background 67499ccd446eSAtari911│ │ Green border 67509ccd446eSAtari911└─────┘ 67519ccd446eSAtari911``` 67529ccd446eSAtari911 67539ccd446eSAtari911**Matrix - Checked**: 67549ccd446eSAtari911``` 67559ccd446eSAtari911┌─────┐ 67569ccd446eSAtari911│ ✓ │ ← Dark green background 67579ccd446eSAtari911│ │ Green checkmark 67589ccd446eSAtari911└─────┘ 67599ccd446eSAtari911``` 67609ccd446eSAtari911 67619ccd446eSAtari911### Past Events Border 67629ccd446eSAtari911 67639ccd446eSAtari911**Before**: 67649ccd446eSAtari911``` 67659ccd446eSAtari911▶ Past Events (3) 67669ccd446eSAtari911─────────────────── White line ✗ 67679ccd446eSAtari911``` 67689ccd446eSAtari911 67699ccd446eSAtari911**After**: 67709ccd446eSAtari911``` 67719ccd446eSAtari911▶ Past Events (3) 67729ccd446eSAtari911─────────────────── Green line ✓ (Matrix) 67739ccd446eSAtari911 Purple line ✓ (Purple) 67749ccd446eSAtari911 Gray line ✓ (Professional) 67759ccd446eSAtari911 Pink line ✓ (Pink) 67769ccd446eSAtari911``` 67779ccd446eSAtari911 67789ccd446eSAtari911### Form Field Coverage 67799ccd446eSAtari911 67809ccd446eSAtari911**All sections themed**: 67819ccd446eSAtari911- ✅ Title field 67829ccd446eSAtari911- ✅ Namespace field 67839ccd446eSAtari911- ✅ Description field 67849ccd446eSAtari911- ✅ **Date row** ← v4.8.8! 67859ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.8! 67869ccd446eSAtari911- ✅ **Recurring options** ← v4.8.8! 67879ccd446eSAtari911- ✅ **Time row** ← v4.8.8! 67889ccd446eSAtari911- ✅ **Color row** ← v4.8.8! 67899ccd446eSAtari911- ✅ Button footer 67909ccd446eSAtari911 67919ccd446eSAtari911**Every div has background!** ✓ 67929ccd446eSAtari911 67939ccd446eSAtari911### ABSOLUTE PERFECTION 67949ccd446eSAtari911 67959ccd446eSAtari911**Not a single white pixel**: 67969ccd446eSAtari911- ✅ No white checkboxes 67979ccd446eSAtari911- ✅ No white borders 67989ccd446eSAtari911- ✅ No white backgrounds 67999ccd446eSAtari911- ✅ No white sections 68009ccd446eSAtari911- ✅ No white lines 68019ccd446eSAtari911- ✅ No white anything 68029ccd446eSAtari911 68039ccd446eSAtari911**100% PERFECT THEMING!** ✨ 68049ccd446eSAtari911 68059ccd446eSAtari911## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 68069ccd446eSAtari911 68079ccd446eSAtari911### Fixed: Checkbox Section Backgrounds Themed 68089ccd446eSAtari911- **Fixed:** Repeating Event section background 68099ccd446eSAtari911- **Fixed:** Task checkbox section background 68109ccd446eSAtari911- **Result:** No white backgrounds in dialog! 68119ccd446eSAtari911 68129ccd446eSAtari911### Fixed: Unchecked Task Checkboxes Themed 68139ccd446eSAtari911- **Fixed:** Added CSS for checkbox backgrounds 68149ccd446eSAtari911- **Fixed:** Unchecked boxes show theme colors 68159ccd446eSAtari911- **Result:** No white checkboxes! 68169ccd446eSAtari911 68179ccd446eSAtari911### Fixed: Day Popup Dialog Fully Themed 68189ccd446eSAtari911- **Fixed:** Popup container, header, body themed 68199ccd446eSAtari911- **Fixed:** Event items in popup themed 68209ccd446eSAtari911- **Fixed:** Add Event button themed 68219ccd446eSAtari911- **Fixed:** Footer section themed 68229ccd446eSAtari911- **Result:** Perfect popup theming! 68239ccd446eSAtari911 68249ccd446eSAtari911### All Changes 68259ccd446eSAtari911 68269ccd446eSAtari911**1. Checkbox Section Backgrounds**: 68279ccd446eSAtari911 68289ccd446eSAtari911**Before**: 68299ccd446eSAtari911```html 68309ccd446eSAtari911<div class="form-field-checkbox"> 68319ccd446eSAtari911<!-- White background ✗ --> 68329ccd446eSAtari911``` 68339ccd446eSAtari911 68349ccd446eSAtari911**After**: 68359ccd446eSAtari911```php 68369ccd446eSAtari911<div class="form-field-checkbox" 68379ccd446eSAtari911 style="background: $bg !important;"> 68389ccd446eSAtari911<!-- Themed ✓ --> 68399ccd446eSAtari911``` 68409ccd446eSAtari911 68419ccd446eSAtari911**2. Checkbox Background CSS**: 68429ccd446eSAtari911 68439ccd446eSAtari911**Added to style block**: 68449ccd446eSAtari911```css 68459ccd446eSAtari911.task-checkbox { 68469ccd446eSAtari911 background-color: $cell_bg !important; 68479ccd446eSAtari911 border: 2px solid $grid_border !important; 68489ccd446eSAtari911} 68499ccd446eSAtari911``` 68509ccd446eSAtari911 68519ccd446eSAtari911**3. Day Popup Theming**: 68529ccd446eSAtari911 68539ccd446eSAtari911**Container**: 68549ccd446eSAtari911```javascript 68559ccd446eSAtari911style="background: $bg !important; 68569ccd446eSAtari911 border: 2px solid $border !important; 68579ccd446eSAtari911 box-shadow: 0 0 20px $shadow !important;" 68589ccd446eSAtari911``` 68599ccd446eSAtari911 68609ccd446eSAtari911**Header**: 68619ccd446eSAtari911```javascript 68629ccd446eSAtari911style="background: $header_bg !important; 68639ccd446eSAtari911 color: $text_primary !important; 68649ccd446eSAtari911 border-bottom: 1px solid $border !important;" 68659ccd446eSAtari911``` 68669ccd446eSAtari911 68679ccd446eSAtari911**Footer**: 68689ccd446eSAtari911```javascript 68699ccd446eSAtari911style="background: $bg !important; 68709ccd446eSAtari911 border-top: 1px solid $grid_border !important;" 68719ccd446eSAtari911``` 68729ccd446eSAtari911 68739ccd446eSAtari911**Add Event Button**: 68749ccd446eSAtari911```javascript 68759ccd446eSAtari911style="background: $border !important; 68769ccd446eSAtari911 color: $bg !important; 68779ccd446eSAtari911 border-color: $border !important;" 68789ccd446eSAtari911``` 68799ccd446eSAtari911 68809ccd446eSAtari911**Event Items**: 68819ccd446eSAtari911```javascript 68829ccd446eSAtari911style="background: $cell_bg !important; 68839ccd446eSAtari911 border: 1px solid $grid_border !important;" 68849ccd446eSAtari911``` 68859ccd446eSAtari911 68869ccd446eSAtari911### Before vs After 68879ccd446eSAtari911 68889ccd446eSAtari911**BEFORE (v4.8.6)**: 68899ccd446eSAtari911``` 68909ccd446eSAtari911Edit Dialog: 68919ccd446eSAtari911┌──────────────────┐ 68929ccd446eSAtari911│ ☑ Repeating Event│ ← White background ✗ 68939ccd446eSAtari911├──────────────────┤ 68949ccd446eSAtari911│ ☑ Task checkbox │ ← White background ✗ 68959ccd446eSAtari911└──────────────────┘ 68969ccd446eSAtari911 68979ccd446eSAtari911Day Popup: 68989ccd446eSAtari911┌──────────────────┐ 68999ccd446eSAtari911│ Monday, Feb 8 │ ← White ✗ 69009ccd446eSAtari911├──────────────────┤ 69019ccd446eSAtari911│ Team Meeting │ ← White ✗ 69029ccd446eSAtari911│ 2:00 PM │ 69039ccd446eSAtari911├──────────────────┤ 69049ccd446eSAtari911│ [+ Add Event] │ ← White ✗ 69059ccd446eSAtari911└──────────────────┘ 69069ccd446eSAtari911 69079ccd446eSAtari911Task checkbox: ☐ ← White ✗ 69089ccd446eSAtari911``` 69099ccd446eSAtari911 69109ccd446eSAtari911**AFTER (v4.8.7)**: 69119ccd446eSAtari911``` 69129ccd446eSAtari911Edit Dialog (Matrix): 69139ccd446eSAtari911┌──────────────────┐ 69149ccd446eSAtari911│ ☑ Repeating Event│ ← Dark green ✓ 69159ccd446eSAtari911├──────────────────┤ 69169ccd446eSAtari911│ ☑ Task checkbox │ ← Dark green ✓ 69179ccd446eSAtari911└──────────────────┘ 69189ccd446eSAtari911 69199ccd446eSAtari911Day Popup (Matrix): 69209ccd446eSAtari911┌──────────────────┐ 69219ccd446eSAtari911│ Monday, Feb 8 │ ← Dark green ✓ 69229ccd446eSAtari911├──────────────────┤ 69239ccd446eSAtari911│ Team Meeting │ ← Dark green ✓ 69249ccd446eSAtari911│ 2:00 PM │ 69259ccd446eSAtari911├──────────────────┤ 69269ccd446eSAtari911│ [+ Add Event] │ ← Green button ✓ 69279ccd446eSAtari911└──────────────────┘ 69289ccd446eSAtari911 69299ccd446eSAtari911Task checkbox: ☑ ← Green ✓ 69309ccd446eSAtari911``` 69319ccd446eSAtari911 69329ccd446eSAtari911### Complete Examples 69339ccd446eSAtari911 69349ccd446eSAtari911**Matrix Dialog**: 69359ccd446eSAtari911``` 69369ccd446eSAtari911┌──────────────────────────┐ 69379ccd446eSAtari911│ ✏️ Edit Event │ 69389ccd446eSAtari911├──────────────────────────┤ 69399ccd446eSAtari911│ Title: [_________] │ 69409ccd446eSAtari911│ Date: [__________] │ 69419ccd446eSAtari911│ │ 69429ccd446eSAtari911│ ☑ Repeating Event │ ← Dark green bg 69439ccd446eSAtari911├──────────────────────────┤ 69449ccd446eSAtari911│ ☑ Task checkbox │ ← Dark green bg 69459ccd446eSAtari911├──────────────────────────┤ 69469ccd446eSAtari911│ [Cancel] [ Save] │ 69479ccd446eSAtari911└──────────────────────────┘ 69489ccd446eSAtari911 69499ccd446eSAtari911All sections themed! ✓ 69509ccd446eSAtari911``` 69519ccd446eSAtari911 69529ccd446eSAtari911**Matrix Day Popup**: 69539ccd446eSAtari911``` 69549ccd446eSAtari911┌──────────────────────────┐ 69559ccd446eSAtari911│ Monday, February 8, 2026 │ ← Green header 69569ccd446eSAtari911├──────────────────────────┤ 69579ccd446eSAtari911│ ┌──────────────────────┐ │ 69589ccd446eSAtari911│ │ Team Meeting │ │ ← Dark green 69599ccd446eSAtari911│ │ 2:00 PM │ │ 69609ccd446eSAtari911│ └──────────────────────┘ │ 69619ccd446eSAtari911│ ┌──────────────────────┐ │ 69629ccd446eSAtari911│ │ Code Review │ │ ← Dark green 69639ccd446eSAtari911│ │ 4:00 PM │ │ 69649ccd446eSAtari911│ └──────────────────────┘ │ 69659ccd446eSAtari911├──────────────────────────┤ 69669ccd446eSAtari911│ [+ Add Event] │ ← Green button 69679ccd446eSAtari911└──────────────────────────┘ 69689ccd446eSAtari911``` 69699ccd446eSAtari911 69709ccd446eSAtari911**Purple Day Popup**: 69719ccd446eSAtari911``` 69729ccd446eSAtari911┌──────────────────────────┐ 69739ccd446eSAtari911│ Monday, February 8, 2026 │ ← Purple header 69749ccd446eSAtari911├──────────────────────────┤ 69759ccd446eSAtari911│ ┌──────────────────────┐ │ 69769ccd446eSAtari911│ │ Team Meeting │ │ ← Dark purple 69779ccd446eSAtari911│ │ 2:00 PM │ │ 69789ccd446eSAtari911│ └──────────────────────┘ │ 69799ccd446eSAtari911├──────────────────────────┤ 69809ccd446eSAtari911│ [+ Add Event] │ ← Purple button 69819ccd446eSAtari911└──────────────────────────┘ 69829ccd446eSAtari911``` 69839ccd446eSAtari911 69849ccd446eSAtari911**Professional Day Popup**: 69859ccd446eSAtari911``` 69869ccd446eSAtari911┌──────────────────────────┐ 69879ccd446eSAtari911│ Monday, February 8, 2026 │ ← Light header 69889ccd446eSAtari911├──────────────────────────┤ 69899ccd446eSAtari911│ ┌──────────────────────┐ │ 69909ccd446eSAtari911│ │ Team Meeting │ │ ← White 69919ccd446eSAtari911│ │ 2:00 PM │ │ 69929ccd446eSAtari911│ └──────────────────────┘ │ 69939ccd446eSAtari911├──────────────────────────┤ 69949ccd446eSAtari911│ [+ Add Event] │ ← Blue button 69959ccd446eSAtari911└──────────────────────────┘ 69969ccd446eSAtari911``` 69979ccd446eSAtari911 69989ccd446eSAtari911**Pink Day Popup**: 69999ccd446eSAtari911``` 70009ccd446eSAtari911┌──────────────────────────┐ 70019ccd446eSAtari911│ Monday, February 8, 2026 │ ← Pink header ✨ 70029ccd446eSAtari911├──────────────────────────┤ 70039ccd446eSAtari911│ ┌──────────────────────┐ │ 70049ccd446eSAtari911│ │ Team Meeting │ │ ← Dark pink 70059ccd446eSAtari911│ │ 2:00 PM │ │ 70069ccd446eSAtari911│ └──────────────────────┘ │ 70079ccd446eSAtari911├──────────────────────────┤ 70089ccd446eSAtari911│ [+ Add Event] │ ← Pink button 70099ccd446eSAtari911└──────────────────────────┘ 70109ccd446eSAtari911``` 70119ccd446eSAtari911 70129ccd446eSAtari911### Checkbox Theming 70139ccd446eSAtari911 70149ccd446eSAtari911**Unchecked boxes now themed**: 70159ccd446eSAtari911``` 70169ccd446eSAtari911Matrix: 70179ccd446eSAtari911☐ → Dark green bg, green border ✓ 70189ccd446eSAtari911 70199ccd446eSAtari911Purple: 70209ccd446eSAtari911☐ → Dark purple bg, purple border ✓ 70219ccd446eSAtari911 70229ccd446eSAtari911Professional: 70239ccd446eSAtari911☐ → White bg, gray border ✓ 70249ccd446eSAtari911 70259ccd446eSAtari911Pink: 70269ccd446eSAtari911☐ → Dark pink bg, pink border ✓ 70279ccd446eSAtari911``` 70289ccd446eSAtari911 70299ccd446eSAtari911### Complete Coverage 70309ccd446eSAtari911 70319ccd446eSAtari911**Edit Dialog - All Sections**: 70329ccd446eSAtari911- ✅ Header 70339ccd446eSAtari911- ✅ All inputs 70349ccd446eSAtari911- ✅ All labels 70359ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.7! 70369ccd446eSAtari911- ✅ Recurring options 70379ccd446eSAtari911- ✅ Button footer 70389ccd446eSAtari911- ✅ All checkboxes (checked & unchecked) 70399ccd446eSAtari911 70409ccd446eSAtari911**Day Popup - All Elements**: 70419ccd446eSAtari911- ✅ **Popup container** ← v4.8.7! 70429ccd446eSAtari911- ✅ **Header** ← v4.8.7! 70439ccd446eSAtari911- ✅ **Body** ← v4.8.7! 70449ccd446eSAtari911- ✅ **Event items** ← v4.8.7! 70459ccd446eSAtari911- ✅ **Namespace badges** ← v4.8.7! 70469ccd446eSAtari911- ✅ **Footer** ← v4.8.7! 70479ccd446eSAtari911- ✅ **Add Event button** ← v4.8.7! 70489ccd446eSAtari911- ✅ **No events message** ← v4.8.7! 70499ccd446eSAtari911 70509ccd446eSAtari911**Absolutely every dialog element themed!** ✨ 70519ccd446eSAtari911 70529ccd446eSAtari911### Perfect Theming Achievement 70539ccd446eSAtari911 70549ccd446eSAtari911**Every UI component in entire plugin**: 70559ccd446eSAtari911- ✅ Calendar grid 70569ccd446eSAtari911- ✅ Sidebar widget 70579ccd446eSAtari911- ✅ Event list 70589ccd446eSAtari911- ✅ Search bar 70599ccd446eSAtari911- ✅ Event boxes 70609ccd446eSAtari911- ✅ Edit dialog (complete) 70619ccd446eSAtari911- ✅ **Day popup** ← v4.8.7! 70629ccd446eSAtari911- ✅ Month picker 70639ccd446eSAtari911- ✅ All text 70649ccd446eSAtari911- ✅ All buttons 70659ccd446eSAtari911- ✅ All inputs 70669ccd446eSAtari911- ✅ **All checkboxes** ← v4.8.7! 70679ccd446eSAtari911- ✅ All borders 70689ccd446eSAtari911- ✅ All badges 70699ccd446eSAtari911- ✅ All backgrounds 70709ccd446eSAtari911 70719ccd446eSAtari911**NO WHITE ANYWHERE!** 70729ccd446eSAtari911 70739ccd446eSAtari911**100% COMPLETE THEMING ACHIEVED!** ✨ 70749ccd446eSAtari911 70759ccd446eSAtari911## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 70769ccd446eSAtari911 70779ccd446eSAtari911### Fixed: Dialog Checkbox Sections Themed 70789ccd446eSAtari911- **Fixed:** Recurring options section background themed 70799ccd446eSAtari911- **Fixed:** Section has themed border accent 70809ccd446eSAtari911- **Result:** No white sections in dialog! 70819ccd446eSAtari911 70829ccd446eSAtari911### Fixed: Dialog Button Section Themed 70839ccd446eSAtari911- **Fixed:** Button area background themed 70849ccd446eSAtari911- **Fixed:** Top border separator themed 70859ccd446eSAtari911- **Result:** Complete dialog theming! 70869ccd446eSAtari911 70879ccd446eSAtari911### Fixed: Event Box Borders Themed 70889ccd446eSAtari911- **Fixed:** Top, right, bottom borders now themed 70899ccd446eSAtari911- **Fixed:** Left border remains event color 70909ccd446eSAtari911- **Result:** Perfect event boxes! 70919ccd446eSAtari911 70929ccd446eSAtari911### All Changes 70939ccd446eSAtari911 70949ccd446eSAtari911**1. Recurring Options Section**: 70959ccd446eSAtari911 70969ccd446eSAtari911**Before**: 70979ccd446eSAtari911```html 70989ccd446eSAtari911<div class="recurring-options" style="display:none;"> 70999ccd446eSAtari911<!-- White background ✗ --> 71009ccd446eSAtari911``` 71019ccd446eSAtari911 71029ccd446eSAtari911**After**: 71039ccd446eSAtari911```php 71049ccd446eSAtari911<div class="recurring-options" 71059ccd446eSAtari911 style="display:none; 71069ccd446eSAtari911 background: $bg !important; 71079ccd446eSAtari911 padding: 8px; 71089ccd446eSAtari911 border-left: 2px solid $border; 71099ccd446eSAtari911 margin-left: 4px;"> 71109ccd446eSAtari911<!-- Themed with accent border ✓ --> 71119ccd446eSAtari911``` 71129ccd446eSAtari911 71139ccd446eSAtari911**2. Dialog Actions Section**: 71149ccd446eSAtari911 71159ccd446eSAtari911**Before**: 71169ccd446eSAtari911```html 71179ccd446eSAtari911<div class="dialog-actions-sleek"> 71189ccd446eSAtari911<!-- White background ✗ --> 71199ccd446eSAtari911``` 71209ccd446eSAtari911 71219ccd446eSAtari911**After**: 71229ccd446eSAtari911```php 71239ccd446eSAtari911<div class="dialog-actions-sleek" 71249ccd446eSAtari911 style="background: $bg !important; 71259ccd446eSAtari911 border-top: 1px solid $grid_border !important;"> 71269ccd446eSAtari911<!-- Themed with separator ✓ --> 71279ccd446eSAtari911``` 71289ccd446eSAtari911 71299ccd446eSAtari911**3. Event Box Borders**: 71309ccd446eSAtari911 71319ccd446eSAtari911**Before**: 71329ccd446eSAtari911```php 71339ccd446eSAtari911border-left-color: $event_color; 71349ccd446eSAtari911<!-- Only left border colored ✗ --> 71359ccd446eSAtari911``` 71369ccd446eSAtari911 71379ccd446eSAtari911**After**: 71389ccd446eSAtari911```php 71399ccd446eSAtari911border-left-color: $event_color; 71409ccd446eSAtari911border-top: 1px solid $grid_border !important; 71419ccd446eSAtari911border-right: 1px solid $grid_border !important; 71429ccd446eSAtari911border-bottom: 1px solid $grid_border !important; 71439ccd446eSAtari911<!-- All borders themed! ✓ --> 71449ccd446eSAtari911``` 71459ccd446eSAtari911 71469ccd446eSAtari911### Before vs After 71479ccd446eSAtari911 71489ccd446eSAtari911**BEFORE (v4.8.5)**: 71499ccd446eSAtari911``` 71509ccd446eSAtari911Dialog: 71519ccd446eSAtari911┌────────────────┐ 71529ccd446eSAtari911│ ☑ Repeating │ 71539ccd446eSAtari911├────────────────┤ ← White section ✗ 71549ccd446eSAtari911│ Repeat: Daily │ 71559ccd446eSAtari911│ Until: [____] │ 71569ccd446eSAtari911├────────────────┤ 71579ccd446eSAtari911│ [Cancel] [Save]│ ← White footer ✗ 71589ccd446eSAtari911└────────────────┘ 71599ccd446eSAtari911 71609ccd446eSAtari911Event Box: 71619ccd446eSAtari911┌────────────┐ 71629ccd446eSAtari911│Team Meeting│ ← White borders ✗ 71639ccd446eSAtari911│2:00 PM │ 71649ccd446eSAtari911└────────────┘ 71659ccd446eSAtari911``` 71669ccd446eSAtari911 71679ccd446eSAtari911**AFTER (v4.8.6)**: 71689ccd446eSAtari911``` 71699ccd446eSAtari911Matrix Dialog: 71709ccd446eSAtari911┌────────────────┐ 71719ccd446eSAtari911│ ☑ Repeating │ 71729ccd446eSAtari911├────────────────┤ ← Dark green ✓ 71739ccd446eSAtari911│ Repeat: Daily │ Green accent border 71749ccd446eSAtari911│ Until: [____] │ 71759ccd446eSAtari911├────────────────┤ 71769ccd446eSAtari911│ [Cancel] [Save]│ ← Dark green ✓ 71779ccd446eSAtari911└────────────────┘ 71789ccd446eSAtari911 71799ccd446eSAtari911Matrix Event Box: 71809ccd446eSAtari911┌────────────┐ 71819ccd446eSAtari911│Team Meeting│ ← Green borders ✓ 71829ccd446eSAtari911│2:00 PM │ 71839ccd446eSAtari911└────────────┘ 71849ccd446eSAtari911``` 71859ccd446eSAtari911 71869ccd446eSAtari911### Dialog Section Examples 71879ccd446eSAtari911 71889ccd446eSAtari911**Matrix Theme**: 71899ccd446eSAtari911``` 71909ccd446eSAtari911┌──────────────────────────┐ 71919ccd446eSAtari911│ ✏️ Edit Event │ 71929ccd446eSAtari911├──────────────────────────┤ 71939ccd446eSAtari911│ ☑ Repeating Event │ 71949ccd446eSAtari911├║─────────────────────────┤ Green accent 71959ccd446eSAtari911│║ Repeat Every: Daily │ Dark green bg 71969ccd446eSAtari911│║ Repeat Until: [_____] │ 71979ccd446eSAtari911└──────────────────────────┘ 71989ccd446eSAtari911 [Cancel] [ Save] ← Dark green bg 71999ccd446eSAtari911──────────────────────────── Green border 72009ccd446eSAtari911``` 72019ccd446eSAtari911 72029ccd446eSAtari911**Purple Theme**: 72039ccd446eSAtari911``` 72049ccd446eSAtari911┌──────────────────────────┐ 72059ccd446eSAtari911│ ☑ Repeating Event │ 72069ccd446eSAtari911├║─────────────────────────┤ Purple accent 72079ccd446eSAtari911│║ Repeat options... │ Dark purple bg 72089ccd446eSAtari911└──────────────────────────┘ 72099ccd446eSAtari911 [Cancel] [ Save] ← Dark purple bg 72109ccd446eSAtari911──────────────────────────── Purple border 72119ccd446eSAtari911``` 72129ccd446eSAtari911 72139ccd446eSAtari911**Professional Theme**: 72149ccd446eSAtari911``` 72159ccd446eSAtari911┌──────────────────────────┐ 72169ccd446eSAtari911│ ☑ Repeating Event │ 72179ccd446eSAtari911├║─────────────────────────┤ Blue accent 72189ccd446eSAtari911│║ Repeat options... │ Light bg 72199ccd446eSAtari911└──────────────────────────┘ 72209ccd446eSAtari911 [Cancel] [ Save] ← Light bg 72219ccd446eSAtari911──────────────────────────── Gray border 72229ccd446eSAtari911``` 72239ccd446eSAtari911 72249ccd446eSAtari911**Pink Theme**: 72259ccd446eSAtari911``` 72269ccd446eSAtari911┌──────────────────────────┐ 72279ccd446eSAtari911│ ☑ Repeating Event ✨ │ 72289ccd446eSAtari911├║─────────────────────────┤ Pink accent 72299ccd446eSAtari911│║ Repeat options... │ Dark pink bg 72309ccd446eSAtari911└──────────────────────────┘ 72319ccd446eSAtari911 [Cancel] [ Save] ← Dark pink bg 72329ccd446eSAtari911──────────────────────────── Pink border 72339ccd446eSAtari911``` 72349ccd446eSAtari911 72359ccd446eSAtari911### Event Box Border Visual 72369ccd446eSAtari911 72379ccd446eSAtari911**Before (v4.8.5)**: 72389ccd446eSAtari911``` 72399ccd446eSAtari911Left border only: 72409ccd446eSAtari911█ Team Meeting 72419ccd446eSAtari911█ 2:00 PM 72429ccd446eSAtari911█ [Edit] [Delete] 72439ccd446eSAtari911 72449ccd446eSAtari911Only event color on left ✗ 72459ccd446eSAtari911White on other 3 sides ✗ 72469ccd446eSAtari911``` 72479ccd446eSAtari911 72489ccd446eSAtari911**After (v4.8.6)**: 72499ccd446eSAtari911``` 72509ccd446eSAtari911All borders themed: 72519ccd446eSAtari911┌─────────────┐ 72529ccd446eSAtari911█Team Meeting │ ← Top: themed 72539ccd446eSAtari911█2:00 PM │ ← Right: themed 72549ccd446eSAtari911█[Edit][Del] │ ← Bottom: themed 72559ccd446eSAtari911└─────────────┘ 72569ccd446eSAtari911 72579ccd446eSAtari911Left: Event color ✓ 72589ccd446eSAtari911Other 3: Theme grid_border ✓ 72599ccd446eSAtari911``` 72609ccd446eSAtari911 72619ccd446eSAtari911### Matrix Event Box: 72629ccd446eSAtari911``` 72639ccd446eSAtari911┌─────────────┐ Green border 72649ccd446eSAtari911│Team Meeting │ 72659ccd446eSAtari911│2:00 PM │ 72669ccd446eSAtari911└─────────────┘ Green border 72679ccd446eSAtari911↑ 72689ccd446eSAtari911Green left bar 72699ccd446eSAtari911``` 72709ccd446eSAtari911 72719ccd446eSAtari911### Purple Event Box: 72729ccd446eSAtari911``` 72739ccd446eSAtari911┌─────────────┐ Purple border 72749ccd446eSAtari911│Team Meeting │ 72759ccd446eSAtari911│2:00 PM │ 72769ccd446eSAtari911└─────────────┘ Purple border 72779ccd446eSAtari911↑ 72789ccd446eSAtari911Purple left bar 72799ccd446eSAtari911``` 72809ccd446eSAtari911 72819ccd446eSAtari911### Professional Event Box: 72829ccd446eSAtari911``` 72839ccd446eSAtari911┌─────────────┐ Gray border 72849ccd446eSAtari911│Team Meeting │ 72859ccd446eSAtari911│2:00 PM │ 72869ccd446eSAtari911└─────────────┘ Gray border 72879ccd446eSAtari911↑ 72889ccd446eSAtari911Event color left bar 72899ccd446eSAtari911``` 72909ccd446eSAtari911 72919ccd446eSAtari911### Complete Dialog Coverage 72929ccd446eSAtari911 72939ccd446eSAtari911**All sections themed**: 72949ccd446eSAtari911- ✅ Dialog header 72959ccd446eSAtari911- ✅ Form inputs 72969ccd446eSAtari911- ✅ Checkbox labels 72979ccd446eSAtari911- ✅ **Recurring options** ← v4.8.6! 72989ccd446eSAtari911- ✅ **Button section** ← v4.8.6! 72999ccd446eSAtari911- ✅ All labels 73009ccd446eSAtari911- ✅ All buttons 73019ccd446eSAtari911 73029ccd446eSAtari911**No white sections!** ✓ 73039ccd446eSAtari911 73049ccd446eSAtari911### Complete Event Box Coverage 73059ccd446eSAtari911 73069ccd446eSAtari911**All borders themed**: 73079ccd446eSAtari911- ✅ Left border (event color) 73089ccd446eSAtari911- ✅ **Top border** ← v4.8.6! 73099ccd446eSAtari911- ✅ **Right border** ← v4.8.6! 73109ccd446eSAtari911- ✅ **Bottom border** ← v4.8.6! 73119ccd446eSAtari911- ✅ Background 73129ccd446eSAtari911- ✅ Text 73139ccd446eSAtari911 73149ccd446eSAtari911**Perfect box outline!** ✓ 73159ccd446eSAtari911 73169ccd446eSAtari911### Visual Perfection 73179ccd446eSAtari911 73189ccd446eSAtari911**Matrix theme event list**: 73199ccd446eSAtari911``` 73209ccd446eSAtari911┌─────────────┐ 73219ccd446eSAtari911│Team Meeting │ ← Green box 73229ccd446eSAtari911│2:00 PM │ 73239ccd446eSAtari911└─────────────┘ 73249ccd446eSAtari911┌─────────────┐ 73259ccd446eSAtari911│Code Review │ ← Green box 73269ccd446eSAtari911│4:00 PM │ 73279ccd446eSAtari911└─────────────┘ 73289ccd446eSAtari911 73299ccd446eSAtari911All borders green! ✓ 73309ccd446eSAtari911``` 73319ccd446eSAtari911 73329ccd446eSAtari911**ABSOLUTE PERFECT THEMING!** ✨ 73339ccd446eSAtari911 73349ccd446eSAtari911## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 73359ccd446eSAtari911 73369ccd446eSAtari911### Fixed: Event Dialog Fully Themed 73379ccd446eSAtari911- **Fixed:** Dialog background, header, inputs all themed 73389ccd446eSAtari911- **Fixed:** All labels, checkboxes, selects themed 73399ccd446eSAtari911- **Fixed:** Save and Cancel buttons themed 73409ccd446eSAtari911- **Result:** Dialog matches theme perfectly! 73419ccd446eSAtari911 73429ccd446eSAtari911### Fixed: Sidebar Event Borders Properly Themed 73439ccd446eSAtari911- **Fixed:** Event divider borders use grid_border color 73449ccd446eSAtari911- **Fixed:** Clean, subtle themed dividers 73459ccd446eSAtari911- **Result:** No more white borders in sidebar! 73469ccd446eSAtari911 73479ccd446eSAtari911### All Changes 73489ccd446eSAtari911 73499ccd446eSAtari911**1. Event Dialog Theming**: 73509ccd446eSAtari911 73519ccd446eSAtari911**Dialog container**: 73529ccd446eSAtari911```php 73539ccd446eSAtari911background: $themeStyles['bg'] !important; 73549ccd446eSAtari911border: 2px solid $themeStyles['border'] !important; 73559ccd446eSAtari911box-shadow: 0 0 20px $shadow !important; 73569ccd446eSAtari911``` 73579ccd446eSAtari911 73589ccd446eSAtari911**Dialog header**: 73599ccd446eSAtari911```php 73609ccd446eSAtari911background: $themeStyles['header_bg'] !important; 73619ccd446eSAtari911color: $themeStyles['text_primary'] !important; 73629ccd446eSAtari911border-bottom: 1px solid $border !important; 73639ccd446eSAtari911``` 73649ccd446eSAtari911 73659ccd446eSAtari911**All form inputs** (text, date, select, textarea): 73669ccd446eSAtari911```php 73679ccd446eSAtari911background: $themeStyles['cell_bg'] !important; 73689ccd446eSAtari911color: $themeStyles['text_primary'] !important; 73699ccd446eSAtari911border-color: $themeStyles['grid_border'] !important; 73709ccd446eSAtari911``` 73719ccd446eSAtari911 73729ccd446eSAtari911**All labels**: 73739ccd446eSAtari911```php 73749ccd446eSAtari911color: $themeStyles['text_primary'] !important; 73759ccd446eSAtari911``` 73769ccd446eSAtari911 73779ccd446eSAtari911**Checkboxes**: 73789ccd446eSAtari911```php 73799ccd446eSAtari911accent-color: $themeStyles['border'] !important; 73809ccd446eSAtari911``` 73819ccd446eSAtari911 73829ccd446eSAtari911**Buttons**: 73839ccd446eSAtari911```php 73849ccd446eSAtari911// Cancel button: 73859ccd446eSAtari911background: $cell_bg !important; 73869ccd446eSAtari911color: $text_primary !important; 73879ccd446eSAtari911 73889ccd446eSAtari911// Save button: 73899ccd446eSAtari911background: $border !important; 73909ccd446eSAtari911color: $bg !important; (or white for professional) 73919ccd446eSAtari911``` 73929ccd446eSAtari911 73939ccd446eSAtari911**2. Sidebar Event Borders**: 73949ccd446eSAtari911 73959ccd446eSAtari911**Before**: 73969ccd446eSAtari911```php 73979ccd446eSAtari911border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 73989ccd446eSAtari911``` 73999ccd446eSAtari911 74009ccd446eSAtari911**After**: 74019ccd446eSAtari911```php 74029ccd446eSAtari911borderColor = $themeStyles['grid_border']; 74039ccd446eSAtari911border-bottom: 1px solid $borderColor !important; 74049ccd446eSAtari911``` 74059ccd446eSAtari911 74069ccd446eSAtari911### Before vs After 74079ccd446eSAtari911 74089ccd446eSAtari911**BEFORE (v4.8.4)**: 74099ccd446eSAtari911``` 74109ccd446eSAtari911Event Dialog: 74119ccd446eSAtari911┌────────────────┐ 74129ccd446eSAtari911│ Add Event │ ← White background ✗ 74139ccd446eSAtari911│ Title: [_____] │ ← White inputs ✗ 74149ccd446eSAtari911│ Date: [_____] │ 74159ccd446eSAtari911│ [Cancel] [Save]│ ← Default buttons ✗ 74169ccd446eSAtari911└────────────────┘ 74179ccd446eSAtari911 74189ccd446eSAtari911Sidebar Events: 74199ccd446eSAtari911Event 1 ──────── ← White border ✗ 74209ccd446eSAtari911Event 2 ──────── ← White border ✗ 74219ccd446eSAtari911``` 74229ccd446eSAtari911 74239ccd446eSAtari911**AFTER (v4.8.5)**: 74249ccd446eSAtari911``` 74259ccd446eSAtari911Event Dialog (Matrix): 74269ccd446eSAtari911┌────────────────┐ 74279ccd446eSAtari911│ Add Event │ ← Dark green background ✓ 74289ccd446eSAtari911│ Title: [_____] │ ← Dark green inputs ✓ 74299ccd446eSAtari911│ Date: [_____] │ ← Green text ✓ 74309ccd446eSAtari911│ [Cancel] [Save]│ ← Themed buttons ✓ 74319ccd446eSAtari911└────────────────┘ 74329ccd446eSAtari911 74339ccd446eSAtari911Sidebar Events (Matrix): 74349ccd446eSAtari911Event 1 ──────── ← Green border ✓ 74359ccd446eSAtari911Event 2 ──────── ← Green border ✓ 74369ccd446eSAtari911``` 74379ccd446eSAtari911 74389ccd446eSAtari911### Dialog Examples by Theme 74399ccd446eSAtari911 74409ccd446eSAtari911**Matrix Dialog**: 74419ccd446eSAtari911``` 74429ccd446eSAtari911┌──────────────────────────┐ 74439ccd446eSAtari911│ ✏️ Edit Event │ ← Dark green header 74449ccd446eSAtari911├──────────────────────────┤ 74459ccd446eSAtari911│ Title │ ← Green labels 74469ccd446eSAtari911│ [Team Meeting________] │ ← Dark green input 74479ccd446eSAtari911│ │ 74489ccd446eSAtari911│ Start Date │ 74499ccd446eSAtari911│ [2026-02-08__] │ ← Dark green input 74509ccd446eSAtari911│ │ 74519ccd446eSAtari911│ Start Time │ 74529ccd446eSAtari911│ [2:00 PM ▼] │ ← Green select 74539ccd446eSAtari911│ │ 74549ccd446eSAtari911│ ☑ Repeating Event │ ← Green checkbox 74559ccd446eSAtari911│ │ 74569ccd446eSAtari911│ [Cancel] [ Save] │ ← Themed buttons 74579ccd446eSAtari911└──────────────────────────┘ 74589ccd446eSAtari911 74599ccd446eSAtari911Everything green! ✓ 74609ccd446eSAtari911``` 74619ccd446eSAtari911 74629ccd446eSAtari911**Purple Dialog**: 74639ccd446eSAtari911``` 74649ccd446eSAtari911┌──────────────────────────┐ 74659ccd446eSAtari911│ ✏️ Edit Event │ ← Dark purple header 74669ccd446eSAtari911├──────────────────────────┤ 74679ccd446eSAtari911│ [Inputs_______________] │ ← Dark purple inputs 74689ccd446eSAtari911│ ☑ Checkboxes │ ← Purple accent 74699ccd446eSAtari911│ [Cancel] [ Save] │ ← Purple buttons 74709ccd446eSAtari911└──────────────────────────┘ 74719ccd446eSAtari911``` 74729ccd446eSAtari911 74739ccd446eSAtari911**Professional Dialog**: 74749ccd446eSAtari911``` 74759ccd446eSAtari911┌──────────────────────────┐ 74769ccd446eSAtari911│ ✏️ Edit Event │ ← Light gradient header 74779ccd446eSAtari911├──────────────────────────┤ 74789ccd446eSAtari911│ [Inputs_______________] │ ← White inputs 74799ccd446eSAtari911│ ☑ Checkboxes │ ← Blue accent 74809ccd446eSAtari911│ [Cancel] [ Save] │ ← Blue save button 74819ccd446eSAtari911└──────────────────────────┘ 74829ccd446eSAtari911``` 74839ccd446eSAtari911 74849ccd446eSAtari911**Pink Dialog**: 74859ccd446eSAtari911``` 74869ccd446eSAtari911┌──────────────────────────┐ 74879ccd446eSAtari911│ ✏️ Edit Event │ ← Dark pink header ✨ 74889ccd446eSAtari911├──────────────────────────┤ 74899ccd446eSAtari911│ [Inputs_______________] │ ← Dark pink inputs 74909ccd446eSAtari911│ ☑ Checkboxes │ ← Pink accent 74919ccd446eSAtari911│ [Cancel] [ Save] │ ← Pink buttons 74929ccd446eSAtari911└──────────────────────────┘ 74939ccd446eSAtari911``` 74949ccd446eSAtari911 74959ccd446eSAtari911### Complete Dialog Element Coverage 74969ccd446eSAtari911 74979ccd446eSAtari911**All form elements themed**: 74989ccd446eSAtari911- ✅ Dialog container 74999ccd446eSAtari911- ✅ Dialog header 75009ccd446eSAtari911- ✅ Close button (×) 75019ccd446eSAtari911- ✅ Title input 75029ccd446eSAtari911- ✅ Namespace search 75039ccd446eSAtari911- ✅ Namespace dropdown 75049ccd446eSAtari911- ✅ Description textarea 75059ccd446eSAtari911- ✅ Start date input 75069ccd446eSAtari911- ✅ End date input 75079ccd446eSAtari911- ✅ Recurring checkbox 75089ccd446eSAtari911- ✅ Recurrence type select 75099ccd446eSAtari911- ✅ Recurrence end date 75109ccd446eSAtari911- ✅ Start time select 75119ccd446eSAtari911- ✅ End time select 75129ccd446eSAtari911- ✅ Color select 75139ccd446eSAtari911- ✅ Custom color picker 75149ccd446eSAtari911- ✅ Task checkbox 75159ccd446eSAtari911- ✅ All labels 75169ccd446eSAtari911- ✅ Cancel button 75179ccd446eSAtari911- ✅ Save button 75189ccd446eSAtari911 75199ccd446eSAtari911**Every single dialog element themed!** 75209ccd446eSAtari911 75219ccd446eSAtari911### Sidebar Border Example 75229ccd446eSAtari911 75239ccd446eSAtari911**Matrix Sidebar**: 75249ccd446eSAtari911``` 75259ccd446eSAtari911┌────────────────┐ 75269ccd446eSAtari911│ Today │ ← Green section header 75279ccd446eSAtari911├────────────────┤ 75289ccd446eSAtari911│ Team Meeting │ 75299ccd446eSAtari911│ 2:00 PM │ 75309ccd446eSAtari911├────────────────┤ ← Green border (grid_border) 75319ccd446eSAtari911│ Code Review │ 75329ccd446eSAtari911│ 4:00 PM │ 75339ccd446eSAtari911├────────────────┤ ← Green border 75349ccd446eSAtari911│ Stand-up │ 75359ccd446eSAtari911│ All day │ 75369ccd446eSAtari911└────────────────┘ 75379ccd446eSAtari911 75389ccd446eSAtari911Subtle green dividers! ✓ 75399ccd446eSAtari911``` 75409ccd446eSAtari911 75419ccd446eSAtari911### Complete Achievement 75429ccd446eSAtari911 75439ccd446eSAtari911**Every UI element themed**: 75449ccd446eSAtari911- ✅ Calendar 75459ccd446eSAtari911- ✅ Sidebar widget 75469ccd446eSAtari911- ✅ Event list 75479ccd446eSAtari911- ✅ Search bar 75489ccd446eSAtari911- ✅ **Event dialog** ← v4.8.5! 75499ccd446eSAtari911- ✅ Month picker 75509ccd446eSAtari911- ✅ **Sidebar dividers** ← v4.8.5! 75519ccd446eSAtari911- ✅ All text 75529ccd446eSAtari911- ✅ All inputs 75539ccd446eSAtari911- ✅ All buttons 75549ccd446eSAtari911- ✅ All borders 75559ccd446eSAtari911- ✅ All checkboxes 75569ccd446eSAtari911 75579ccd446eSAtari911**ABSOLUTE COMPLETE THEMING!** ✨ 75589ccd446eSAtari911 75599ccd446eSAtari911## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 75609ccd446eSAtari911 75619ccd446eSAtari911### Fixed: Professional Theme Background Consistency 75629ccd446eSAtari911- **Fixed:** Container and event backgrounds now match sidebar 75639ccd446eSAtari911- **Fixed:** Lighter, cleaner appearance 75649ccd446eSAtari911- **Fixed:** Better contrast and readability 75659ccd446eSAtari911- **Result:** Professional theme looks cohesive! 75669ccd446eSAtari911 75679ccd446eSAtari911### The Problem 75689ccd446eSAtari911 75699ccd446eSAtari911**v4.8.3 Professional theme**: 75709ccd446eSAtari911``` 75719ccd446eSAtari911Sidebar: Light background (#f5f7fa) 75729ccd446eSAtari911Calendar: Medium background (#e8ecf1) ← Didn't match! 75739ccd446eSAtari911Events: Light background (#f5f7fa) 75749ccd446eSAtari911 75759ccd446eSAtari911Inconsistent! ✗ 75769ccd446eSAtari911``` 75779ccd446eSAtari911 75789ccd446eSAtari911### The Fix 75799ccd446eSAtari911 75809ccd446eSAtari911**Updated Professional theme colors for consistency**: 75819ccd446eSAtari911 75829ccd446eSAtari911```php 75839ccd446eSAtari911// Before: 75849ccd446eSAtari911'bg' => '#e8ecf1', // Medium gray-blue 75859ccd446eSAtari911'cell_bg' => '#f5f7fa', // Very light 75869ccd446eSAtari911'grid_bg' => '#d5dbe3', // Medium-dark 75879ccd446eSAtari911 75889ccd446eSAtari911// After: 75899ccd446eSAtari911'bg' => '#f5f7fa', // Very light (matches sidebar) 75909ccd446eSAtari911'cell_bg' => '#ffffff', // Pure white (clean) 75919ccd446eSAtari911'grid_bg' => '#e8ecf1', // Subtle contrast 75929ccd446eSAtari911'grid_border' => '#d0d7de', // Softer borders 75939ccd446eSAtari911``` 75949ccd446eSAtari911 75959ccd446eSAtari911### Before vs After 75969ccd446eSAtari911 75979ccd446eSAtari911**BEFORE (v4.8.3)**: 75989ccd446eSAtari911``` 75999ccd446eSAtari911Professional Theme: 76009ccd446eSAtari911┌────────────────┐ 76019ccd446eSAtari911│ Calendar │ ← Medium gray (#e8ecf1) 76029ccd446eSAtari911│ ┌────────────┐ │ 76039ccd446eSAtari911│ │ Event │ │ ← Light (#f5f7fa) 76049ccd446eSAtari911│ └────────────┘ │ 76059ccd446eSAtari911└────────────────┘ 76069ccd446eSAtari911 76079ccd446eSAtari911Sidebar: 76089ccd446eSAtari911┌────────────────┐ 76099ccd446eSAtari911│ Widget │ ← Light (#f5f7fa) 76109ccd446eSAtari911└────────────────┘ 76119ccd446eSAtari911 76129ccd446eSAtari911Backgrounds don't match! ✗ 76139ccd446eSAtari911``` 76149ccd446eSAtari911 76159ccd446eSAtari911**AFTER (v4.8.4)**: 76169ccd446eSAtari911``` 76179ccd446eSAtari911Professional Theme: 76189ccd446eSAtari911┌────────────────┐ 76199ccd446eSAtari911│ Calendar │ ← Light (#f5f7fa) 76209ccd446eSAtari911│ ┌────────────┐ │ 76219ccd446eSAtari911│ │ Event │ │ ← White (#ffffff) 76229ccd446eSAtari911│ └────────────┘ │ 76239ccd446eSAtari911└────────────────┘ 76249ccd446eSAtari911 76259ccd446eSAtari911Sidebar: 76269ccd446eSAtari911┌────────────────┐ 76279ccd446eSAtari911│ Widget │ ← Light (#f5f7fa) 76289ccd446eSAtari911└────────────────┘ 76299ccd446eSAtari911 76309ccd446eSAtari911Perfect match! ✓ 76319ccd446eSAtari911``` 76329ccd446eSAtari911 76339ccd446eSAtari911### New Professional Theme Colors 76349ccd446eSAtari911 76359ccd446eSAtari911**Backgrounds**: 76369ccd446eSAtari911- Container: `#f5f7fa` (light blue-gray) 76379ccd446eSAtari911- Events: `#ffffff` (pure white) 76389ccd446eSAtari911- Grid: `#e8ecf1` (subtle contrast) 76399ccd446eSAtari911 76409ccd446eSAtari911**Text**: 76419ccd446eSAtari911- Primary: `#2c3e50` (dark blue-gray) 76429ccd446eSAtari911- Bright: `#4a90e2` (blue accent) 76439ccd446eSAtari911- Dim: `#7f8c8d` (medium gray) 76449ccd446eSAtari911 76459ccd446eSAtari911**Borders**: 76469ccd446eSAtari911- Main: `#4a90e2` (blue) 76479ccd446eSAtari911- Grid: `#d0d7de` (soft gray) 76489ccd446eSAtari911 76499ccd446eSAtari911**Header**: 76509ccd446eSAtari911- Gradient: `#ffffff` → `#f5f7fa` 76519ccd446eSAtari911 76529ccd446eSAtari911### Visual Example 76539ccd446eSAtari911 76549ccd446eSAtari911**Professional Theme Now**: 76559ccd446eSAtari911``` 76569ccd446eSAtari911┌─────────────────────────────┐ 76579ccd446eSAtari911│ February 2026 │ ← White to light gradient 76589ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 76599ccd446eSAtari911│S│M│T│W│T│F│S│ │ ← Light background 76609ccd446eSAtari911├─┼─┼─┼─┼─┼─┼─┤ │ 76619ccd446eSAtari911│ │ │1│2│3│4│5│ Event List │ ← White events 76629ccd446eSAtari911│ │ │ │ │ │ │ │ ┌───────────┐ │ 76639ccd446eSAtari911│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 76649ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 76659ccd446eSAtari911 76669ccd446eSAtari911Clean, professional look! ✓ 76679ccd446eSAtari911``` 76689ccd446eSAtari911 76699ccd446eSAtari911### Comparison with Other Themes 76709ccd446eSAtari911 76719ccd446eSAtari911**Matrix** (dark): 76729ccd446eSAtari911- Container: #242424 (dark green) 76739ccd446eSAtari911- Events: #242424 (dark green) 76749ccd446eSAtari911- Consistent dark theme ✓ 76759ccd446eSAtari911 76769ccd446eSAtari911**Purple** (dark): 76779ccd446eSAtari911- Container: #1a0d14 (dark purple) 76789ccd446eSAtari911- Events: #2a2030 (dark purple) 76799ccd446eSAtari911- Consistent dark theme ✓ 76809ccd446eSAtari911 76819ccd446eSAtari911**Professional** (light): 76829ccd446eSAtari911- Container: #f5f7fa (light blue) 76839ccd446eSAtari911- Events: #ffffff (white) 76849ccd446eSAtari911- Consistent light theme ✓ 76859ccd446eSAtari911 76869ccd446eSAtari911**Pink** (dark): 76879ccd446eSAtari911- Container: #1a0d14 (dark pink) 76889ccd446eSAtari911- Events: #1a0d14 (dark pink) 76899ccd446eSAtari911- Consistent dark theme ✓ 76909ccd446eSAtari911 76919ccd446eSAtari911**All themes now consistent!** 76929ccd446eSAtari911 76939ccd446eSAtari911### Better Contrast 76949ccd446eSAtari911 76959ccd446eSAtari911**Professional theme improvements**: 76969ccd446eSAtari911 76979ccd446eSAtari911**Readability**: 76989ccd446eSAtari911- Dark text (#2c3e50) on white/light backgrounds ✓ 76999ccd446eSAtari911- Excellent contrast ratio ✓ 77009ccd446eSAtari911- Easy on the eyes ✓ 77019ccd446eSAtari911 77029ccd446eSAtari911**Visual hierarchy**: 77039ccd446eSAtari911- White events pop against light container ✓ 77049ccd446eSAtari911- Blue accents stand out ✓ 77059ccd446eSAtari911- Clean, modern look ✓ 77069ccd446eSAtari911 77079ccd446eSAtari911**Professional appearance**: 77089ccd446eSAtari911- Lighter = more corporate/business feel ✓ 77099ccd446eSAtari911- Clean whites = premium quality ✓ 77109ccd446eSAtari911- Subtle grays = sophisticated ✓ 77119ccd446eSAtari911 77129ccd446eSAtari911### Complete Theme Consistency 77139ccd446eSAtari911 77149ccd446eSAtari911**All themes now have matching backgrounds**: 77159ccd446eSAtari911 77169ccd446eSAtari911**Matrix**: 77179ccd446eSAtari911- Sidebar & Calendar both dark green ✓ 77189ccd446eSAtari911 77199ccd446eSAtari911**Purple**: 77209ccd446eSAtari911- Sidebar & Calendar both dark purple ✓ 77219ccd446eSAtari911 77229ccd446eSAtari911**Professional**: 77239ccd446eSAtari911- Sidebar & Calendar both light ✓ (v4.8.4!) 77249ccd446eSAtari911 77259ccd446eSAtari911**Pink**: 77269ccd446eSAtari911- Sidebar & Calendar both dark pink ✓ 77279ccd446eSAtari911 77289ccd446eSAtari911**Perfect visual unity across all views!** ✨ 77299ccd446eSAtari911 77309ccd446eSAtari911## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 77319ccd446eSAtari911 77329ccd446eSAtari911### Fixed: Bold Text in Descriptions Themed 77339ccd446eSAtari911- **Fixed:** **Bold text** now uses theme primary color 77349ccd446eSAtari911- **Fixed:** Both `**text**` and `__text__` syntax themed 77359ccd446eSAtari911- **Result:** Bold text matches theme! 77369ccd446eSAtari911 77379ccd446eSAtari911### Fixed: Search Bar Fully Themed 77389ccd446eSAtari911- **Fixed:** Search input has !important on all styles 77399ccd446eSAtari911- **Fixed:** Icon and placeholder text themed 77409ccd446eSAtari911- **Result:** Search bar perfectly themed! 77419ccd446eSAtari911 77429ccd446eSAtari911### Fixed: Sidebar Event Boxes Themed 77439ccd446eSAtari911- **Fixed:** Event borders in sidebar now use theme grid_border color 77449ccd446eSAtari911- **Fixed:** Borders have !important flag 77459ccd446eSAtari911- **Result:** Sidebar boxes match theme! 77469ccd446eSAtari911 77479ccd446eSAtari911### All Changes 77489ccd446eSAtari911 77499ccd446eSAtari911**1. Bold Text Styling**: 77509ccd446eSAtari911 77519ccd446eSAtari911**Before**: 77529ccd446eSAtari911```html 77539ccd446eSAtari911<strong>Bold text</strong> ← Default black 77549ccd446eSAtari911``` 77559ccd446eSAtari911 77569ccd446eSAtari911**After**: 77579ccd446eSAtari911```php 77589ccd446eSAtari911<strong style="color: $text_primary !important; font-weight:bold;"> 77599ccd446eSAtari911 Bold text 77609ccd446eSAtari911</strong> 77619ccd446eSAtari911 77629ccd446eSAtari911Matrix: Green bold ✓ 77639ccd446eSAtari911Purple: Lavender bold ✓ 77649ccd446eSAtari911Professional: Dark bold ✓ 77659ccd446eSAtari911Pink: Pink bold ✓ 77669ccd446eSAtari911``` 77679ccd446eSAtari911 77689ccd446eSAtari911**2. Search Bar**: 77699ccd446eSAtari911 77709ccd446eSAtari911**Before**: 77719ccd446eSAtari911```php 77729ccd446eSAtari911style="background: $bg; color: $text;" 77739ccd446eSAtari911Could be overridden by CSS 77749ccd446eSAtari911``` 77759ccd446eSAtari911 77769ccd446eSAtari911**After**: 77779ccd446eSAtari911```php 77789ccd446eSAtari911style="background: $bg !important; 77799ccd446eSAtari911 color: $text_primary !important; 77809ccd446eSAtari911 border-color: $grid_border !important;" 77819ccd446eSAtari911 77829ccd446eSAtari911Cannot be overridden! ✓ 77839ccd446eSAtari911``` 77849ccd446eSAtari911 77859ccd446eSAtari911**3. Sidebar Event Boxes**: 77869ccd446eSAtari911 77879ccd446eSAtari911**Before**: 77889ccd446eSAtari911```php 77899ccd446eSAtari911$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 77909ccd446eSAtari911``` 77919ccd446eSAtari911 77929ccd446eSAtari911**After**: 77939ccd446eSAtari911```php 77949ccd446eSAtari911$borderColor = $themeStyles['grid_border']; // From theme 77959ccd446eSAtari911border-bottom: 1px solid $borderColor !important; 77969ccd446eSAtari911 77979ccd446eSAtari911Matrix: Green borders ✓ 77989ccd446eSAtari911Purple: Purple borders ✓ 77999ccd446eSAtari911Professional: Gray borders ✓ 78009ccd446eSAtari911Pink: Pink borders ✓ 78019ccd446eSAtari911``` 78029ccd446eSAtari911 78039ccd446eSAtari911### Before vs After 78049ccd446eSAtari911 78059ccd446eSAtari911**BEFORE (v4.8.2)**: 78069ccd446eSAtari911``` 78079ccd446eSAtari911Event description: 78089ccd446eSAtari911"Please review **Q1 Goals** carefully" 78099ccd446eSAtari911 ↑ 78109ccd446eSAtari911 Black bold ✗ 78119ccd446eSAtari911 78129ccd446eSAtari911Search bar: 78139ccd446eSAtari911[ Search...] ← Gray placeholder ✗ 78149ccd446eSAtari911 78159ccd446eSAtari911Sidebar: 78169ccd446eSAtari911┌────────────┐ 78179ccd446eSAtari911│ Event 1 │ 78189ccd446eSAtari911├────────────┤ ← Gray border ✗ 78199ccd446eSAtari911│ Event 2 │ 78209ccd446eSAtari911└────────────┘ 78219ccd446eSAtari911``` 78229ccd446eSAtari911 78239ccd446eSAtari911**AFTER (v4.8.3)**: 78249ccd446eSAtari911``` 78259ccd446eSAtari911Matrix Theme: 78269ccd446eSAtari911 78279ccd446eSAtari911Event description: 78289ccd446eSAtari911"Please review **Q1 Goals** carefully" 78299ccd446eSAtari911 ↑ 78309ccd446eSAtari911 Green bold ✓ 78319ccd446eSAtari911 78329ccd446eSAtari911Search bar: 78339ccd446eSAtari911[ Search...] ← Green themed ✓ 78349ccd446eSAtari911 78359ccd446eSAtari911Sidebar: 78369ccd446eSAtari911┌────────────┐ 78379ccd446eSAtari911│ Event 1 │ 78389ccd446eSAtari911├────────────┤ ← Green border ✓ 78399ccd446eSAtari911│ Event 2 │ 78409ccd446eSAtari911└────────────┘ 78419ccd446eSAtari911``` 78429ccd446eSAtari911 78439ccd446eSAtari911### Examples by Theme 78449ccd446eSAtari911 78459ccd446eSAtari911**Matrix Theme**: 78469ccd446eSAtari911``` 78479ccd446eSAtari911Description: 78489ccd446eSAtari911"Check **important notes** and links" 78499ccd446eSAtari911 ↑ 78509ccd446eSAtari911 Green bold 78519ccd446eSAtari911 78529ccd446eSAtari911Sidebar boxes: 78539ccd446eSAtari911Event 1 78549ccd446eSAtari911───────── Green border 78559ccd446eSAtari911Event 2 78569ccd446eSAtari911───────── Green border 78579ccd446eSAtari911``` 78589ccd446eSAtari911 78599ccd446eSAtari911**Purple Theme**: 78609ccd446eSAtari911``` 78619ccd446eSAtari911Description: 78629ccd446eSAtari911"Review **agenda items** before meeting" 78639ccd446eSAtari911 ↑ 78649ccd446eSAtari911 Lavender bold 78659ccd446eSAtari911 78669ccd446eSAtari911Sidebar boxes: 78679ccd446eSAtari911Event 1 78689ccd446eSAtari911───────── Purple border 78699ccd446eSAtari911Event 2 78709ccd446eSAtari911───────── Purple border 78719ccd446eSAtari911``` 78729ccd446eSAtari911 78739ccd446eSAtari911**Professional Theme**: 78749ccd446eSAtari911``` 78759ccd446eSAtari911Description: 78769ccd446eSAtari911"Update **quarterly reports** by Friday" 78779ccd446eSAtari911 ↑ 78789ccd446eSAtari911 Dark bold 78799ccd446eSAtari911 78809ccd446eSAtari911Sidebar boxes: 78819ccd446eSAtari911Event 1 78829ccd446eSAtari911───────── Gray border 78839ccd446eSAtari911Event 2 78849ccd446eSAtari911───────── Gray border 78859ccd446eSAtari911``` 78869ccd446eSAtari911 78879ccd446eSAtari911**Pink Theme**: 78889ccd446eSAtari911``` 78899ccd446eSAtari911Description: 78909ccd446eSAtari911"Don't forget **party supplies** ✨" 78919ccd446eSAtari911 ↑ 78929ccd446eSAtari911 Pink bold 78939ccd446eSAtari911 78949ccd446eSAtari911Sidebar boxes: 78959ccd446eSAtari911Event 1 78969ccd446eSAtari911───────── Pink border 78979ccd446eSAtari911Event 2 ✨ 78989ccd446eSAtari911───────── Pink border 78999ccd446eSAtari911``` 79009ccd446eSAtari911 79019ccd446eSAtari911### Complete Formatting Coverage 79029ccd446eSAtari911 79039ccd446eSAtari911**Text formatting themed**: 79049ccd446eSAtari911- ✅ Regular text 79059ccd446eSAtari911- ✅ **Bold text** ← NEW! 79069ccd446eSAtari911- ✅ Links 79079ccd446eSAtari911- ✅ Italic text (inherits) 79089ccd446eSAtari911- ✅ Code (inherits) 79099ccd446eSAtari911 79109ccd446eSAtari911**UI elements themed**: 79119ccd446eSAtari911- ✅ Search bar ← Enhanced! 79129ccd446eSAtari911- ✅ Search icon ← Enhanced! 79139ccd446eSAtari911- ✅ Search placeholder ← Enhanced! 79149ccd446eSAtari911- ✅ Sidebar borders ← NEW! 79159ccd446eSAtari911- ✅ Event borders 79169ccd446eSAtari911- ✅ Badges 79179ccd446eSAtari911- ✅ Buttons 79189ccd446eSAtari911 79199ccd446eSAtari911**Every element perfectly themed!** 79209ccd446eSAtari911 79219ccd446eSAtari911### Search Bar Coverage 79229ccd446eSAtari911 79239ccd446eSAtari911**All aspects themed**: 79249ccd446eSAtari911- Background: Theme cell_bg ✓ 79259ccd446eSAtari911- Text color: Theme text_primary ✓ 79269ccd446eSAtari911- Border: Theme grid_border ✓ 79279ccd446eSAtari911- Placeholder: Inherits text color ✓ 79289ccd446eSAtari911- Icon (): In placeholder ✓ 79299ccd446eSAtari911- Clear button (✕): Themed ✓ 79309ccd446eSAtari911 79319ccd446eSAtari911**Cannot be overridden!** (all have !important) 79329ccd446eSAtari911 79339ccd446eSAtari911### Sidebar Event Box Styling 79349ccd446eSAtari911 79359ccd446eSAtari911**Consistent borders**: 79369ccd446eSAtari911``` 79379ccd446eSAtari911Matrix: 79389ccd446eSAtari911╔════════════╗ 79399ccd446eSAtari911║ Event 1 ║ 79409ccd446eSAtari911╟────────────╢ ← grid_border color 79419ccd446eSAtari911║ Event 2 ║ 79429ccd446eSAtari911╚════════════╝ 79439ccd446eSAtari911 79449ccd446eSAtari911All themes match perfectly! ✓ 79459ccd446eSAtari911``` 79469ccd446eSAtari911 79479ccd446eSAtari911### Complete Theme Achievement 79489ccd446eSAtari911 79499ccd446eSAtari911**Every single element themed**: 79509ccd446eSAtari911- ✅ Backgrounds 79519ccd446eSAtari911- ✅ Text (regular) 79529ccd446eSAtari911- ✅ Text (bold) ← v4.8.3! 79539ccd446eSAtari911- ✅ Links 79549ccd446eSAtari911- ✅ Badges 79559ccd446eSAtari911- ✅ Buttons 79569ccd446eSAtari911- ✅ Checkboxes 79579ccd446eSAtari911- ✅ Icons 79589ccd446eSAtari911- ✅ Borders 79599ccd446eSAtari911- ✅ Search bar ← Enhanced v4.8.3! 79609ccd446eSAtari911- ✅ Sidebar boxes ← v4.8.3! 79619ccd446eSAtari911- ✅ Today marker 79629ccd446eSAtari911- ✅ Calendar grid 79639ccd446eSAtari911- ✅ Event panels 79649ccd446eSAtari911 79659ccd446eSAtari911**ABSOLUTE PERFECTION!** ✨ 79669ccd446eSAtari911 79679ccd446eSAtari911## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 79689ccd446eSAtari911 79699ccd446eSAtari911### Fixed: Links in Descriptions Now Themed 79709ccd446eSAtari911- **Fixed:** All links in event descriptions now use theme color 79719ccd446eSAtari911- **Fixed:** DokuWiki links [[page|text]] themed 79729ccd446eSAtari911- **Fixed:** Markdown links [text](url) themed 79739ccd446eSAtari911- **Fixed:** Plain URLs themed 79749ccd446eSAtari911- **Result:** Links match theme perfectly! 79759ccd446eSAtari911 79769ccd446eSAtari911### The Problem 79779ccd446eSAtari911 79789ccd446eSAtari911**v4.8.1 behavior**: 79799ccd446eSAtari911``` 79809ccd446eSAtari911Event description: 79819ccd446eSAtari911"Check out https://example.com" ← Blue default link ✗ 79829ccd446eSAtari911"See [[wiki:page|docs]]" ← Blue default link ✗ 79839ccd446eSAtari911``` 79849ccd446eSAtari911 79859ccd446eSAtari911### The Fix 79869ccd446eSAtari911 79879ccd446eSAtari911**Added inline color styling to ALL link types**: 79889ccd446eSAtari911 79899ccd446eSAtari911```php 79909ccd446eSAtari911// Get theme colors: 79919ccd446eSAtari911$linkColor = $themeStyles['border'] . ' !important'; 79929ccd446eSAtari911$linkStyle = ' style="color:' . $linkColor . ';"'; 79939ccd446eSAtari911 79949ccd446eSAtari911// Apply to links: 79959ccd446eSAtari911<a href="..." style="color: #00cc07 !important;">link</a> 79969ccd446eSAtari911``` 79979ccd446eSAtari911 79989ccd446eSAtari911**All link types themed**: 79999ccd446eSAtari9111. DokuWiki syntax: `[[page|text]]` 80009ccd446eSAtari9112. Markdown syntax: `[text](url)` 80019ccd446eSAtari9113. Plain URLs: `https://example.com` 80029ccd446eSAtari911 80039ccd446eSAtari911### Before vs After 80049ccd446eSAtari911 80059ccd446eSAtari911**BEFORE (v4.8.1)**: 80069ccd446eSAtari911``` 80079ccd446eSAtari911Matrix Theme Description: 80089ccd446eSAtari911"Visit https://example.com for more info" 80099ccd446eSAtari911 ↑ 80109ccd446eSAtari911 Blue link ✗ (doesn't match green theme) 80119ccd446eSAtari911``` 80129ccd446eSAtari911 80139ccd446eSAtari911**AFTER (v4.8.2)**: 80149ccd446eSAtari911``` 80159ccd446eSAtari911Matrix Theme Description: 80169ccd446eSAtari911"Visit https://example.com for more info" 80179ccd446eSAtari911 ↑ 80189ccd446eSAtari911 Green link ✓ (matches theme!) 80199ccd446eSAtari911``` 80209ccd446eSAtari911 80219ccd446eSAtari911### Link Colors by Theme 80229ccd446eSAtari911 80239ccd446eSAtari911**Matrix**: 80249ccd446eSAtari911- Links: Green (#00cc07) !important 80259ccd446eSAtari911- Matches: Border, badges, highlights 80269ccd446eSAtari911 80279ccd446eSAtari911**Purple**: 80289ccd446eSAtari911- Links: Purple (#9b59b6) !important 80299ccd446eSAtari911- Matches: Border, badges, highlights 80309ccd446eSAtari911 80319ccd446eSAtari911**Professional**: 80329ccd446eSAtari911- Links: Blue (#4a90e2) !important 80339ccd446eSAtari911- Matches: Border, badges, highlights 80349ccd446eSAtari911 80359ccd446eSAtari911**Pink**: 80369ccd446eSAtari911- Links: Hot Pink (#ff1493) !important 80379ccd446eSAtari911- Matches: Border, badges, highlights ✨ 80389ccd446eSAtari911 80399ccd446eSAtari911### Examples 80409ccd446eSAtari911 80419ccd446eSAtari911**Matrix Description with Links**: 80429ccd446eSAtari911``` 80439ccd446eSAtari911Event: Team Meeting 80449ccd446eSAtari911Description: 80459ccd446eSAtari911"Review [[wiki:q1goals|Q1 Goals]] 80469ccd446eSAtari911and visit https://metrics.com" 80479ccd446eSAtari911 80489ccd446eSAtari911Both links → Green ✓ 80499ccd446eSAtari911``` 80509ccd446eSAtari911 80519ccd446eSAtari911**Purple Description with Links**: 80529ccd446eSAtari911``` 80539ccd446eSAtari911Event: Planning Session 80549ccd446eSAtari911Description: 80559ccd446eSAtari911"Check [schedule](https://cal.com) 80569ccd446eSAtari911for availability" 80579ccd446eSAtari911 80589ccd446eSAtari911Link → Purple ✓ 80599ccd446eSAtari911``` 80609ccd446eSAtari911 80619ccd446eSAtari911**Professional Description with Links**: 80629ccd446eSAtari911``` 80639ccd446eSAtari911Event: Client Call 80649ccd446eSAtari911Description: 80659ccd446eSAtari911"Prepare [[reports|Monthly Reports]] 80669ccd446eSAtari911before the call" 80679ccd446eSAtari911 80689ccd446eSAtari911Link → Blue ✓ 80699ccd446eSAtari911``` 80709ccd446eSAtari911 80719ccd446eSAtari911**Pink Description with Links**: 80729ccd446eSAtari911``` 80739ccd446eSAtari911Event: Party Planning 80749ccd446eSAtari911Description: 80759ccd446eSAtari911"RSVP at https://party.com ✨" 80769ccd446eSAtari911 80779ccd446eSAtari911Link → Hot Pink ✓ 80789ccd446eSAtari911``` 80799ccd446eSAtari911 80809ccd446eSAtari911### Technical Implementation 80819ccd446eSAtari911 80829ccd446eSAtari911**Updated renderDescription() function**: 80839ccd446eSAtari911 80849ccd446eSAtari911```php 80859ccd446eSAtari911private function renderDescription($description, $themeStyles = null) { 80869ccd446eSAtari911 // Get theme 80879ccd446eSAtari911 if ($themeStyles === null) { 80889ccd446eSAtari911 $theme = $this->getSidebarTheme(); 80899ccd446eSAtari911 $themeStyles = $this->getSidebarThemeStyles($theme); 80909ccd446eSAtari911 } 80919ccd446eSAtari911 80929ccd446eSAtari911 // Create link style 80939ccd446eSAtari911 $linkColor = $themeStyles['border'] . ' !important'; 80949ccd446eSAtari911 $linkStyle = ' style="color:' . $linkColor . ';"'; 80959ccd446eSAtari911 80969ccd446eSAtari911 // Apply to all link types: 80979ccd446eSAtari911 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 80989ccd446eSAtari911} 80999ccd446eSAtari911``` 81009ccd446eSAtari911 81019ccd446eSAtari911### Complete Theming 81029ccd446eSAtari911 81039ccd446eSAtari911**Every text element**: 81049ccd446eSAtari911- ✅ Event titles 81059ccd446eSAtari911- ✅ Event dates 81069ccd446eSAtari911- ✅ Event descriptions 81079ccd446eSAtari911- ✅ **Links in descriptions** ← NEW! 81089ccd446eSAtari911- ✅ Badges 81099ccd446eSAtari911- ✅ Buttons 81109ccd446eSAtari911 81119ccd446eSAtari911**Every color unified!** 81129ccd446eSAtari911 81139ccd446eSAtari911### Unified Theme Experience 81149ccd446eSAtari911 81159ccd446eSAtari911**Matrix Theme**: 81169ccd446eSAtari911``` 81179ccd446eSAtari911Everything green: 81189ccd446eSAtari911- Text: Green ✓ 81199ccd446eSAtari911- Links: Green ✓ 81209ccd446eSAtari911- Badges: Green ✓ 81219ccd446eSAtari911- Borders: Green ✓ 81229ccd446eSAtari911- Buttons: Green ✓ 81239ccd446eSAtari911- Today marker: Green ✓ 81249ccd446eSAtari911 81259ccd446eSAtari911Perfect harmony! ✓ 81269ccd446eSAtari911``` 81279ccd446eSAtari911 81289ccd446eSAtari911**No default blue links breaking the theme!** 81299ccd446eSAtari911 81309ccd446eSAtari911### Link Types Supported 81319ccd446eSAtari911 81329ccd446eSAtari911**1. DokuWiki Syntax**: 81339ccd446eSAtari911``` 81349ccd446eSAtari911[[page|Link Text]] → Themed ✓ 81359ccd446eSAtari911[[page]] → Themed ✓ 81369ccd446eSAtari911[[page#section|Text]] → Themed ✓ 81379ccd446eSAtari911``` 81389ccd446eSAtari911 81399ccd446eSAtari911**2. Markdown Syntax**: 81409ccd446eSAtari911``` 81419ccd446eSAtari911[Link Text](https://url.com) → Themed ✓ 81429ccd446eSAtari911[Text](internal-page) → Themed ✓ 81439ccd446eSAtari911``` 81449ccd446eSAtari911 81459ccd446eSAtari911**3. Plain URLs**: 81469ccd446eSAtari911``` 81479ccd446eSAtari911https://example.com → Themed ✓ 81489ccd446eSAtari911http://site.org → Themed ✓ 81499ccd446eSAtari911``` 81509ccd446eSAtari911 81519ccd446eSAtari911**All links perfectly themed!** 81529ccd446eSAtari911 81539ccd446eSAtari911## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 81549ccd446eSAtari911 81559ccd446eSAtari911### Fixed: All Badges Now Themed 81569ccd446eSAtari911- **Fixed:** TODAY badge themed with theme color 81579ccd446eSAtari911- **Fixed:** PAST DUE badge uses orange (warning color) 81589ccd446eSAtari911- **Fixed:** Namespace badges themed 81599ccd446eSAtari911- **Fixed:** All badges visible and hidden 81609ccd446eSAtari911- **Result:** All badges match theme! 81619ccd446eSAtari911 81629ccd446eSAtari911### Fixed: Today Cell More Prominent 81639ccd446eSAtari911- **Fixed:** Today cell now has 2px border in theme color 81649ccd446eSAtari911- **Fixed:** Border added to both PHP and JavaScript 81659ccd446eSAtari911- **Result:** Today stands out clearly! 81669ccd446eSAtari911 81679ccd446eSAtari911### Fixed: Past Event Text Fully Themed 81689ccd446eSAtari911- **Fixed:** Event-info div backgrounds ensure no gray 81699ccd446eSAtari911- **Result:** Expanded past events completely themed! 81709ccd446eSAtari911 81719ccd446eSAtari911### All Changes 81729ccd446eSAtari911 81739ccd446eSAtari911**1. Badge Theming**: 81749ccd446eSAtari911 81759ccd446eSAtari911**TODAY Badge**: 81769ccd446eSAtari911```php 81779ccd446eSAtari911// PHP & JavaScript: 81789ccd446eSAtari911style="background: $themeStyles['border'] !important; 81799ccd446eSAtari911 color: $bg !important;" 81809ccd446eSAtari911 81819ccd446eSAtari911Matrix: Green badge 81829ccd446eSAtari911Purple: Purple badge 81839ccd446eSAtari911Professional: Blue badge with white text 81849ccd446eSAtari911Pink: Pink badge 81859ccd446eSAtari911``` 81869ccd446eSAtari911 81879ccd446eSAtari911**PAST DUE Badge** (always orange): 81889ccd446eSAtari911```php 81899ccd446eSAtari911style="background: #ff9800 !important; 81909ccd446eSAtari911 color: #fff !important;" 81919ccd446eSAtari911``` 81929ccd446eSAtari911 81939ccd446eSAtari911**Namespace Badge**: 81949ccd446eSAtari911```php 81959ccd446eSAtari911style="background: $themeStyles['border'] !important; 81969ccd446eSAtari911 color: $bg !important;" 81979ccd446eSAtari911``` 81989ccd446eSAtari911 81999ccd446eSAtari911**2. Today Cell Border**: 82009ccd446eSAtari911 82019ccd446eSAtari911**PHP**: 82029ccd446eSAtari911```php 82039ccd446eSAtari911$todayBorder = $isToday ? 82049ccd446eSAtari911 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 82059ccd446eSAtari911``` 82069ccd446eSAtari911 82079ccd446eSAtari911**JavaScript**: Same 82089ccd446eSAtari911 82099ccd446eSAtari911**Result**: Today cell has prominent colored border! 82109ccd446eSAtari911 82119ccd446eSAtari911### Before vs After 82129ccd446eSAtari911 82139ccd446eSAtari911**BEFORE (v4.8.0)**: 82149ccd446eSAtari911``` 82159ccd446eSAtari911Calendar: 82169ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐ 82179ccd446eSAtari911│1│2│3│4│5│6│7│ 82189ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: subtle background 82199ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘ 82209ccd446eSAtari911 82219ccd446eSAtari911Event badges: 82229ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 82239ccd446eSAtari911``` 82249ccd446eSAtari911 82259ccd446eSAtari911**AFTER (v4.8.1)**: 82269ccd446eSAtari911``` 82279ccd446eSAtari911Calendar (Matrix): 82289ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐ 82299ccd446eSAtari911│1│2│3│4│5│6│7│ 82309ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 82319ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘ 82329ccd446eSAtari911 82339ccd446eSAtari911Event badges (Matrix): 82349ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 82359ccd446eSAtari911``` 82369ccd446eSAtari911 82379ccd446eSAtari911### Matrix Theme Example 82389ccd446eSAtari911 82399ccd446eSAtari911**Calendar**: 82409ccd446eSAtari911``` 82419ccd446eSAtari911Today cell: 82429ccd446eSAtari911┌────┐ 82439ccd446eSAtari911│ 8 │ Dark green bg + Green 2px border 82449ccd446eSAtari911└────┘ 82459ccd446eSAtari911Very obvious! 82469ccd446eSAtari911``` 82479ccd446eSAtari911 82489ccd446eSAtari911**Badges**: 82499ccd446eSAtari911``` 82509ccd446eSAtari911[TODAY] ← Green bg, dark text 82519ccd446eSAtari911[Work] ← Green bg, dark text 82529ccd446eSAtari911[PAST DUE] ← Orange bg, white text 82539ccd446eSAtari911``` 82549ccd446eSAtari911 82559ccd446eSAtari911### Purple Theme Example 82569ccd446eSAtari911 82579ccd446eSAtari911**Calendar**: 82589ccd446eSAtari911``` 82599ccd446eSAtari911Today cell: 82609ccd446eSAtari911┌────┐ 82619ccd446eSAtari911│ 8 │ Dark purple bg + Purple 2px border 82629ccd446eSAtari911└────┘ 82639ccd446eSAtari911``` 82649ccd446eSAtari911 82659ccd446eSAtari911**Badges**: 82669ccd446eSAtari911``` 82679ccd446eSAtari911[TODAY] ← Purple bg 82689ccd446eSAtari911[Work] ← Purple bg 82699ccd446eSAtari911``` 82709ccd446eSAtari911 82719ccd446eSAtari911### Professional Theme Example 82729ccd446eSAtari911 82739ccd446eSAtari911**Calendar**: 82749ccd446eSAtari911``` 82759ccd446eSAtari911Today cell: 82769ccd446eSAtari911┌────┐ 82779ccd446eSAtari911│ 8 │ Light blue bg + Blue 2px border 82789ccd446eSAtari911└────┘ 82799ccd446eSAtari911``` 82809ccd446eSAtari911 82819ccd446eSAtari911**Badges**: 82829ccd446eSAtari911``` 82839ccd446eSAtari911[TODAY] ← Blue bg, white text 82849ccd446eSAtari911[Work] ← Blue bg, white text 82859ccd446eSAtari911``` 82869ccd446eSAtari911 82879ccd446eSAtari911### Pink Theme Example 82889ccd446eSAtari911 82899ccd446eSAtari911**Calendar**: 82909ccd446eSAtari911``` 82919ccd446eSAtari911Today cell: 82929ccd446eSAtari911┌────┐ 82939ccd446eSAtari911│ 8 │ Dark pink bg + Pink 2px border ✨ 82949ccd446eSAtari911└────┘ 82959ccd446eSAtari911``` 82969ccd446eSAtari911 82979ccd446eSAtari911**Badges**: 82989ccd446eSAtari911``` 82999ccd446eSAtari911[TODAY] ← Pink bg 83009ccd446eSAtari911[Work] ← Pink bg ✨ 83019ccd446eSAtari911``` 83029ccd446eSAtari911 83039ccd446eSAtari911### Complete Badge Coverage 83049ccd446eSAtari911 83059ccd446eSAtari911**All badges themed**: 83069ccd446eSAtari911- ✅ TODAY badge (theme color) 83079ccd446eSAtari911- ✅ PAST DUE badge (orange warning) 83089ccd446eSAtari911- ✅ Namespace badges (theme color) 83099ccd446eSAtari911- ✅ Visible events 83109ccd446eSAtari911- ✅ Hidden/past events 83119ccd446eSAtari911 83129ccd446eSAtari911**No gray badges anywhere!** 83139ccd446eSAtari911 83149ccd446eSAtari911### Today Cell Visual 83159ccd446eSAtari911 83169ccd446eSAtari911**Dual indicators**: 83179ccd446eSAtari9111. Background color (theme today bg) 83189ccd446eSAtari9112. Border (2px theme color) ← NEW! 83199ccd446eSAtari911 83209ccd446eSAtari911**Result**: Today is VERY obvious! 83219ccd446eSAtari911 83229ccd446eSAtari911**Matrix**: Green bg + Green border 83239ccd446eSAtari911**Purple**: Purple bg + Purple border 83249ccd446eSAtari911**Professional**: Light blue bg + Blue border 83259ccd446eSAtari911**Pink**: Pink bg + Pink border ✨ 83269ccd446eSAtari911 83279ccd446eSAtari911### Complete Theming 83289ccd446eSAtari911 83299ccd446eSAtari911**Every element themed**: 83309ccd446eSAtari911- ✅ Backgrounds 83319ccd446eSAtari911- ✅ Text colors 83329ccd446eSAtari911- ✅ Badges (v4.8.1!) 83339ccd446eSAtari911- ✅ Today marker (v4.8.1!) 83349ccd446eSAtari911- ✅ Checkboxes 83359ccd446eSAtari911- ✅ Buttons 83369ccd446eSAtari911- ✅ Icons 83379ccd446eSAtari911 83389ccd446eSAtari911**Absolutely everything!** ✨ 83399ccd446eSAtari911 83409ccd446eSAtari911## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 83419ccd446eSAtari911 83429ccd446eSAtari911### Fixed: All Event Backgrounds Now Themed 83439ccd446eSAtari911- **Fixed:** event-info div now has themed background 83449ccd446eSAtari911- **Fixed:** event-meta-compact div (visible) now has themed background 83459ccd446eSAtari911- **Fixed:** event-desc-compact div now has themed background 83469ccd446eSAtari911- **Fixed:** All !important flags added to prevent CSS override 83479ccd446eSAtari911- **Result:** Entire event item fully themed! 83489ccd446eSAtari911 83499ccd446eSAtari911### Fixed: Description Text Shows Correct Color Immediately 83509ccd446eSAtari911- **Fixed:** Description divs now have explicit background + color on load 83519ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions fully styled 83529ccd446eSAtari911- **Result:** No more gray text on initial load! 83539ccd446eSAtari911 83549ccd446eSAtari911### The Problem 83559ccd446eSAtari911 83569ccd446eSAtari911**v4.7.9 behavior**: 83579ccd446eSAtari911``` 83589ccd446eSAtari911Expanded past event: 83599ccd446eSAtari911┌────────────────────────┐ 83609ccd446eSAtari911│ ▾ Team Meeting │ ← Themed ✓ 83619ccd446eSAtari911│ Mon, Feb 8 │ ← Themed ✓ 83629ccd446eSAtari911│ │ 83639ccd446eSAtari911│ [Event details] │ ← Gray background ✗ 83649ccd446eSAtari911│ [Description] │ ← Gray text until navigation ✗ 83659ccd446eSAtari911└────────────────────────┘ 83669ccd446eSAtari911 83679ccd446eSAtari911Only the date/time div was themed! 83689ccd446eSAtari911``` 83699ccd446eSAtari911 83709ccd446eSAtari911### The Fix 83719ccd446eSAtari911 83729ccd446eSAtari911**Added background to ALL inner divs**: 83739ccd446eSAtari911 83749ccd446eSAtari911**PHP**: 83759ccd446eSAtari911```php 83769ccd446eSAtari911// Event container: 83779ccd446eSAtari911style="background:' . $themeStyles['cell_bg'] . ' !important;" 83789ccd446eSAtari911 83799ccd446eSAtari911// event-info wrapper: 83809ccd446eSAtari911<div class="event-info" 83819ccd446eSAtari911 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 83829ccd446eSAtari911 83839ccd446eSAtari911// event-meta-compact: 83849ccd446eSAtari911<div class="event-meta-compact" 83859ccd446eSAtari911 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 83869ccd446eSAtari911 83879ccd446eSAtari911// event-desc-compact: 83889ccd446eSAtari911<div class="event-desc-compact" 83899ccd446eSAtari911 style="background:' . $themeStyles['cell_bg'] . ' !important; 83909ccd446eSAtari911 color:' . $themeStyles['text_dim'] . ' !important;"> 83919ccd446eSAtari911``` 83929ccd446eSAtari911 83939ccd446eSAtari911**JavaScript**: Same styling applied 83949ccd446eSAtari911 83959ccd446eSAtari911### Before vs After 83969ccd446eSAtari911 83979ccd446eSAtari911**BEFORE (v4.7.9)**: 83989ccd446eSAtari911``` 83999ccd446eSAtari911Matrix Theme - Expanded Event: 84009ccd446eSAtari911┌────────────────────────┐ 84019ccd446eSAtari911│ ▾ Team Meeting │ 84029ccd446eSAtari911│ Mon, Feb 8 ← Green │ 84039ccd446eSAtari911│ │ 84049ccd446eSAtari911│ Details ← Gray ✗ │ 84059ccd446eSAtari911│ Description ← Gray ✗ │ 84069ccd446eSAtari911│ [✏️] [️] │ 84079ccd446eSAtari911└────────────────────────┘ 84089ccd446eSAtari911``` 84099ccd446eSAtari911 84109ccd446eSAtari911**AFTER (v4.8.0)**: 84119ccd446eSAtari911``` 84129ccd446eSAtari911Matrix Theme - Expanded Event: 84139ccd446eSAtari911┌────────────────────────┐ 84149ccd446eSAtari911│ ▾ Team Meeting │ 84159ccd446eSAtari911│ Mon, Feb 8 ← Green │ 84169ccd446eSAtari911│ │ 84179ccd446eSAtari911│ Details ← Green ✓│ 84189ccd446eSAtari911│ Description ← Green ✓│ 84199ccd446eSAtari911│ [✏️] [️] │ 84209ccd446eSAtari911└────────────────────────┘ 84219ccd446eSAtari911 84229ccd446eSAtari911Entire event themed! 84239ccd446eSAtari911``` 84249ccd446eSAtari911 84259ccd446eSAtari911### What's Themed Now 84269ccd446eSAtari911 84279ccd446eSAtari911**Event Item Structure** (all themed): 84289ccd446eSAtari911``` 84299ccd446eSAtari911event-compact-item ← Themed ✓ 84309ccd446eSAtari911 └─ event-info ← Themed ✓ (v4.8.0!) 84319ccd446eSAtari911 ├─ event-title-row ← Themed ✓ 84329ccd446eSAtari911 ├─ event-meta ← Themed ✓ (v4.8.0!) 84339ccd446eSAtari911 └─ event-desc ← Themed ✓ (v4.8.0!) 84349ccd446eSAtari911``` 84359ccd446eSAtari911 84369ccd446eSAtari911**Every layer has background!** 84379ccd446eSAtari911 84389ccd446eSAtari911### Matrix Theme Example 84399ccd446eSAtari911 84409ccd446eSAtari911**Complete event**: 84419ccd446eSAtari911``` 84429ccd446eSAtari911┌────────────────────────────┐ 84439ccd446eSAtari911│ Team Meeting │ ← Dark green bg 84449ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 84459ccd446eSAtari911│ Discussed Q1 goals and │ ← Dark green bg 84469ccd446eSAtari911│ set targets for team │ ← Dark green bg 84479ccd446eSAtari911│ [✏️] [️] [☑] │ ← Dark green bg 84489ccd446eSAtari911└────────────────────────────┘ 84499ccd446eSAtari911 84509ccd446eSAtari911Consistent green throughout! ✓ 84519ccd446eSAtari911``` 84529ccd446eSAtari911 84539ccd446eSAtari911### Purple Theme Example 84549ccd446eSAtari911 84559ccd446eSAtari911``` 84569ccd446eSAtari911┌────────────────────────────┐ 84579ccd446eSAtari911│ Team Meeting │ ← Dark purple bg 84589ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 84599ccd446eSAtari911│ Discussed Q1 goals │ ← Dark purple bg 84609ccd446eSAtari911│ [✏️] [️] [☑] │ ← Dark purple bg 84619ccd446eSAtari911└────────────────────────────┘ 84629ccd446eSAtari911 84639ccd446eSAtari911Consistent purple throughout! ✓ 84649ccd446eSAtari911``` 84659ccd446eSAtari911 84669ccd446eSAtari911### Professional Theme Example 84679ccd446eSAtari911 84689ccd446eSAtari911``` 84699ccd446eSAtari911┌────────────────────────────┐ 84709ccd446eSAtari911│ Team Meeting │ ← Light bg 84719ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Light bg 84729ccd446eSAtari911│ Discussed Q1 goals │ ← Light bg 84739ccd446eSAtari911│ [✏️] [️] [☑] │ ← Light bg 84749ccd446eSAtari911└────────────────────────────┘ 84759ccd446eSAtari911 84769ccd446eSAtari911Consistent light throughout! ✓ 84779ccd446eSAtari911``` 84789ccd446eSAtari911 84799ccd446eSAtari911### Pink Theme Example 84809ccd446eSAtari911 84819ccd446eSAtari911``` 84829ccd446eSAtari911┌────────────────────────────┐ 84839ccd446eSAtari911│ Team Meeting │ ← Dark pink bg 84849ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 84859ccd446eSAtari911│ Discussed Q1 goals │ ← Dark pink bg 84869ccd446eSAtari911│ [✏️] [️] [☑] │ ← Dark pink bg 84879ccd446eSAtari911└────────────────────────────┘ 84889ccd446eSAtari911 84899ccd446eSAtari911Consistent pink throughout! ✓ 84909ccd446eSAtari911``` 84919ccd446eSAtari911 84929ccd446eSAtari911### Complete Theming 84939ccd446eSAtari911 84949ccd446eSAtari911**Every element, every layer**: 84959ccd446eSAtari911- ✅ Container 84969ccd446eSAtari911- ✅ Event item 84979ccd446eSAtari911- ✅ Event info wrapper (v4.8.0!) 84989ccd446eSAtari911- ✅ Title row 84999ccd446eSAtari911- ✅ Meta div (v4.8.0!) 85009ccd446eSAtari911- ✅ Description div (v4.8.0!) 85019ccd446eSAtari911- ✅ Action buttons 85029ccd446eSAtari911- ✅ Checkboxes 85039ccd446eSAtari911 85049ccd446eSAtari911**No gray anywhere!** 85059ccd446eSAtari911 85069ccd446eSAtari911### Why Multiple Backgrounds? 85079ccd446eSAtari911 85089ccd446eSAtari911**CSS layers stack**: 85099ccd446eSAtari911```html 85109ccd446eSAtari911<div style="background: green;"> ← Layer 1 85119ccd446eSAtari911 <div style="background: inherit;"> ← Could be gray! 85129ccd446eSAtari911 <div>Content</div> ← Inherits gray! 85139ccd446eSAtari911 </div> 85149ccd446eSAtari911</div> 85159ccd446eSAtari911 85169ccd446eSAtari911Better: 85179ccd446eSAtari911<div style="background: green;"> ← Layer 1 85189ccd446eSAtari911 <div style="background: green;"> ← Layer 2 forced 85199ccd446eSAtari911 <div style="background: green;"> ← Layer 3 forced 85209ccd446eSAtari911 Content ← All green! 85219ccd446eSAtari911 </div> 85229ccd446eSAtari911 </div> 85239ccd446eSAtari911</div> 85249ccd446eSAtari911``` 85259ccd446eSAtari911 85269ccd446eSAtari911**Every layer forced = Perfect theming!** 85279ccd446eSAtari911 85289ccd446eSAtari911### !important Everywhere 85299ccd446eSAtari911 85309ccd446eSAtari911**All styling now uses !important**: 85319ccd446eSAtari911- background: ... !important 85329ccd446eSAtari911- color: ... !important 85339ccd446eSAtari911 85349ccd446eSAtari911**Result**: CSS cannot override themes! 85359ccd446eSAtari911 85369ccd446eSAtari911**Version 4.8.0 = Complete, bulletproof theming!** ✨ 85379ccd446eSAtari911 85389ccd446eSAtari911## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 85399ccd446eSAtari911 85409ccd446eSAtari911### Fixed: Past Event Expanded Background Themed 85419ccd446eSAtari911- **Fixed:** Past event meta div now has theme background when expanded 85429ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme background 85439ccd446eSAtari911- **Result:** Expanded past events have proper themed background! 85449ccd446eSAtari911 85459ccd446eSAtari911### ✅ Fixed: Checkboxes Now Themed 85469ccd446eSAtari911- **Fixed:** Task checkboxes use accent-color matching theme 85479ccd446eSAtari911- **Fixed:** Cursor changes to pointer on hover 85489ccd446eSAtari911- **Result:** Checkboxes match theme color! 85499ccd446eSAtari911 85509ccd446eSAtari911### Fixed: Action Buttons (Edit/Delete) Themed 85519ccd446eSAtari911- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 85529ccd446eSAtari911- **Fixed:** Background, text, and border all use theme colors 85539ccd446eSAtari911- **Result:** All icons themed! 85549ccd446eSAtari911 85559ccd446eSAtari911### All Changes 85569ccd446eSAtari911 85579ccd446eSAtari911**1. Past Event Expanded Background**: 85589ccd446eSAtari911 85599ccd446eSAtari911**PHP**: 85609ccd446eSAtari911```php 85619ccd446eSAtari911// Before: 85629ccd446eSAtari911<div class="event-meta-compact" style="display:none;"> 85639ccd446eSAtari911 85649ccd446eSAtari911// After: 85659ccd446eSAtari911<div class="event-meta-compact" 85669ccd446eSAtari911 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 85679ccd446eSAtari911``` 85689ccd446eSAtari911 85699ccd446eSAtari911**JavaScript**: Same treatment 85709ccd446eSAtari911 85719ccd446eSAtari911**Result**: Expanded past events have themed background! 85729ccd446eSAtari911 85739ccd446eSAtari911**2. Task Checkboxes**: 85749ccd446eSAtari911 85759ccd446eSAtari911**PHP & JavaScript**: 85769ccd446eSAtari911```php 85779ccd446eSAtari911// Added accent-color: 85789ccd446eSAtari911<input type="checkbox" 85799ccd446eSAtari911 style="accent-color:' . $themeStyles['border'] . ' !important; 85809ccd446eSAtari911 cursor:pointer;"> 85819ccd446eSAtari911``` 85829ccd446eSAtari911 85839ccd446eSAtari911**accent-color** changes the checkbox color: 85849ccd446eSAtari911- Matrix: Green checkboxes ✓ 85859ccd446eSAtari911- Purple: Purple checkboxes ✓ 85869ccd446eSAtari911- Professional: Blue checkboxes ✓ 85879ccd446eSAtari911- Pink: Pink checkboxes ✓ 85889ccd446eSAtari911 85899ccd446eSAtari911**3. Edit/Delete Buttons**: 85909ccd446eSAtari911 85919ccd446eSAtari911**PHP**: 85929ccd446eSAtari911```php 85939ccd446eSAtari911<button class="event-action-btn" 85949ccd446eSAtari911 style="color:' . $themeStyles['text_primary'] . ' !important; 85959ccd446eSAtari911 background:' . $themeStyles['cell_bg'] . ' !important; 85969ccd446eSAtari911 border-color:' . $themeStyles['grid_border'] . ' !important;"> 85979ccd446eSAtari911 ️ 85989ccd446eSAtari911</button> 85999ccd446eSAtari911``` 86009ccd446eSAtari911 86019ccd446eSAtari911**JavaScript**: Same 86029ccd446eSAtari911 86039ccd446eSAtari911**Result**: Buttons blend with theme! 86049ccd446eSAtari911 86059ccd446eSAtari911### Before vs After 86069ccd446eSAtari911 86079ccd446eSAtari911**BEFORE (v4.7.8)**: 86089ccd446eSAtari911``` 86099ccd446eSAtari911Past Event (expanded): 86109ccd446eSAtari911┌─────────────────────────┐ 86119ccd446eSAtari911│ ▾ Team Meeting │ 86129ccd446eSAtari911│ Mon, Feb 8 │ ← White background ✗ 86139ccd446eSAtari911│ Description │ 86149ccd446eSAtari911├─────────────────────────┤ 86159ccd446eSAtari911│ [✏️] [️] [☐] │ ← Default colors ✗ 86169ccd446eSAtari911└─────────────────────────┘ 86179ccd446eSAtari911``` 86189ccd446eSAtari911 86199ccd446eSAtari911**AFTER (v4.7.9)**: 86209ccd446eSAtari911``` 86219ccd446eSAtari911Past Event (expanded - Matrix): 86229ccd446eSAtari911┌─────────────────────────┐ 86239ccd446eSAtari911│ ▾ Team Meeting │ 86249ccd446eSAtari911│ Mon, Feb 8 │ ← Dark green bg ✓ 86259ccd446eSAtari911│ Description │ 86269ccd446eSAtari911├─────────────────────────┤ 86279ccd446eSAtari911│ [✏️] [️] [☑] │ ← Themed ✓ 86289ccd446eSAtari911└─────────────────────────┘ 86299ccd446eSAtari911``` 86309ccd446eSAtari911 86319ccd446eSAtari911### Matrix Theme Example 86329ccd446eSAtari911 86339ccd446eSAtari911**Checkboxes**: Green accent 86349ccd446eSAtari911**Buttons**: Dark bg, green text, green borders 86359ccd446eSAtari911**Expanded**: Dark green background 86369ccd446eSAtari911 86379ccd446eSAtari911``` 86389ccd446eSAtari911Task: ☑ Complete report ← Green checkmark 86399ccd446eSAtari911[✏️] [️] ← Dark buttons with green 86409ccd446eSAtari911``` 86419ccd446eSAtari911 86429ccd446eSAtari911### Purple Theme Example 86439ccd446eSAtari911 86449ccd446eSAtari911**Checkboxes**: Purple accent 86459ccd446eSAtari911**Buttons**: Dark purple bg, lavender text 86469ccd446eSAtari911**Expanded**: Dark purple background 86479ccd446eSAtari911 86489ccd446eSAtari911``` 86499ccd446eSAtari911Task: ☑ Complete report ← Purple checkmark 86509ccd446eSAtari911[✏️] [️] ← Purple themed 86519ccd446eSAtari911``` 86529ccd446eSAtari911 86539ccd446eSAtari911### Professional Theme Example 86549ccd446eSAtari911 86559ccd446eSAtari911**Checkboxes**: Blue accent 86569ccd446eSAtari911**Buttons**: Light bg, dark text 86579ccd446eSAtari911**Expanded**: Light background 86589ccd446eSAtari911 86599ccd446eSAtari911``` 86609ccd446eSAtari911Task: ☑ Complete report ← Blue checkmark 86619ccd446eSAtari911[✏️] [️] ← Light themed 86629ccd446eSAtari911``` 86639ccd446eSAtari911 86649ccd446eSAtari911### Pink Theme Example 86659ccd446eSAtari911 86669ccd446eSAtari911**Checkboxes**: Pink accent 86679ccd446eSAtari911**Buttons**: Dark pink bg, pink text 86689ccd446eSAtari911**Expanded**: Dark pink background 86699ccd446eSAtari911 86709ccd446eSAtari911``` 86719ccd446eSAtari911Task: ☑ Complete report ← Pink checkmark 86729ccd446eSAtari911[✏️] [️] ← Pink themed 86739ccd446eSAtari911``` 86749ccd446eSAtari911 86759ccd446eSAtari911### Complete Icon Coverage 86769ccd446eSAtari911 86779ccd446eSAtari911**Themed Icons/Buttons**: 86789ccd446eSAtari911- ✅ Task checkboxes (accent-color) 86799ccd446eSAtari911- ✅ Edit button (✏️) 86809ccd446eSAtari911- ✅ Delete button (️) 86819ccd446eSAtari911- ✅ Navigation arrows (◀ ▶) 86829ccd446eSAtari911- ✅ Today button 86839ccd446eSAtari911- ✅ Past Events arrow (▶) 86849ccd446eSAtari911 86859ccd446eSAtari911**All interactive elements themed!** 86869ccd446eSAtari911 86879ccd446eSAtari911### How accent-color Works 86889ccd446eSAtari911 86899ccd446eSAtari911**Modern CSS property** for form controls: 86909ccd446eSAtari911```css 86919ccd446eSAtari911input[type="checkbox"] { 86929ccd446eSAtari911 accent-color: #00cc07; /* Green checkbox! */ 86939ccd446eSAtari911} 86949ccd446eSAtari911``` 86959ccd446eSAtari911 86969ccd446eSAtari911**Browser support**: All modern browsers ✓ 86979ccd446eSAtari911 86989ccd446eSAtari911**Result**: Checkboxes automatically match theme! 86999ccd446eSAtari911 87009ccd446eSAtari911### Complete Theme Coverage 87019ccd446eSAtari911 87029ccd446eSAtari911**Backgrounds**: 87039ccd446eSAtari911- ✅ Container 87049ccd446eSAtari911- ✅ Calendar-left 87059ccd446eSAtari911- ✅ Calendar-right 87069ccd446eSAtari911- ✅ Event items 87079ccd446eSAtari911- ✅ Past event expanded (v4.7.9!) 87089ccd446eSAtari911- ✅ Action buttons (v4.7.9!) 87099ccd446eSAtari911 87109ccd446eSAtari911**Icons/Controls**: 87119ccd446eSAtari911- ✅ Checkboxes (v4.7.9!) 87129ccd446eSAtari911- ✅ Edit/Delete buttons (v4.7.9!) 87139ccd446eSAtari911- ✅ Navigation buttons 87149ccd446eSAtari911- ✅ All arrows 87159ccd446eSAtari911 87169ccd446eSAtari911**Every element perfectly themed!** ✨ 87179ccd446eSAtari911 87189ccd446eSAtari911## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 87199ccd446eSAtari911 87209ccd446eSAtari911### Fixed: White Bar at Bottom of Calendar 87219ccd446eSAtari911- **Fixed:** Added background to calendar-left div with !important 87229ccd446eSAtari911- **Result:** No more white bar at bottom! 87239ccd446eSAtari911 87249ccd446eSAtari911### Fixed: Past Event Expanded Details Not Themed 87259ccd446eSAtari911- **Fixed:** Past event date/time now themed when expanded 87269ccd446eSAtari911- **Fixed:** Past event descriptions now themed when expanded 87279ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme colors 87289ccd446eSAtari911- **Result:** Expanding past events shows themed text! 87299ccd446eSAtari911 87309ccd446eSAtari911### Fixed: Event Description Text Color 87319ccd446eSAtari911- **Fixed:** All event descriptions now use theme text_dim color 87329ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions themed 87339ccd446eSAtari911- **Result:** Descriptions always match theme! 87349ccd446eSAtari911 87359ccd446eSAtari911### All Changes 87369ccd446eSAtari911 87379ccd446eSAtari911**1. Bottom White Bar** (calendar-left div): 87389ccd446eSAtari911 87399ccd446eSAtari911**Before**: 87409ccd446eSAtari911```html 87419ccd446eSAtari911<div class="calendar-compact-left"> 87429ccd446eSAtari911<!-- White background showing at bottom --> 87439ccd446eSAtari911``` 87449ccd446eSAtari911 87459ccd446eSAtari911**After**: 87469ccd446eSAtari911```html 87479ccd446eSAtari911<div class="calendar-compact-left" 87489ccd446eSAtari911 style="background: #242424 !important;"> 87499ccd446eSAtari911<!-- Matches theme background --> 87509ccd446eSAtari911``` 87519ccd446eSAtari911 87529ccd446eSAtari911**2. Past Event Expanded Details**: 87539ccd446eSAtari911 87549ccd446eSAtari911**PHP** - Added colors to hidden details: 87559ccd446eSAtari911```php 87569ccd446eSAtari911// Past event meta (hidden): 87579ccd446eSAtari911<span class="event-date-time" 87589ccd446eSAtari911 style="color:' . $themeStyles['text_dim'] . ' !important;"> 87599ccd446eSAtari911 87609ccd446eSAtari911// Past event description (hidden): 87619ccd446eSAtari911<div class="event-desc-compact" 87629ccd446eSAtari911 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 87639ccd446eSAtari911``` 87649ccd446eSAtari911 87659ccd446eSAtari911**JavaScript** - Same treatment: 87669ccd446eSAtari911```javascript 87679ccd446eSAtari911// Past event meta: 87689ccd446eSAtari911html += '<span class="event-date-time" 87699ccd446eSAtari911 style="color:' + themeStyles.text_dim + ' !important;">'; 87709ccd446eSAtari911 87719ccd446eSAtari911// Past event description: 87729ccd446eSAtari911html += '<div class="event-desc-compact" 87739ccd446eSAtari911 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 87749ccd446eSAtari911``` 87759ccd446eSAtari911 87769ccd446eSAtari911**3. All Event Descriptions**: 87779ccd446eSAtari911 87789ccd446eSAtari911**Both visible and hidden descriptions now themed**: 87799ccd446eSAtari911```php 87809ccd446eSAtari911// PHP: 87819ccd446eSAtari911style="color:' . $themeStyles['text_dim'] . ' !important;" 87829ccd446eSAtari911 87839ccd446eSAtari911// JavaScript: 87849ccd446eSAtari911style="color:' + themeStyles.text_dim + ' !important;" 87859ccd446eSAtari911``` 87869ccd446eSAtari911 87879ccd446eSAtari911### Before vs After 87889ccd446eSAtari911 87899ccd446eSAtari911**BEFORE (v4.7.7)**: 87909ccd446eSAtari911``` 87919ccd446eSAtari911Calendar bottom: 87929ccd446eSAtari911┌──────────────┐ 87939ccd446eSAtari911│ Calendar │ 87949ccd446eSAtari911│ Grid │ 87959ccd446eSAtari911└──────────────┘ 87969ccd446eSAtari911▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 87979ccd446eSAtari911 87989ccd446eSAtari911Past Event (collapsed): 87999ccd446eSAtari911▸ Team Meeting 88009ccd446eSAtari911 88019ccd446eSAtari911Past Event (expanded): 88029ccd446eSAtari911▾ Team Meeting 88039ccd446eSAtari911 Mon, Feb 8 ← Gray text ✗ 88049ccd446eSAtari911 Description ← Gray text ✗ 88059ccd446eSAtari911``` 88069ccd446eSAtari911 88079ccd446eSAtari911**AFTER (v4.7.8)**: 88089ccd446eSAtari911``` 88099ccd446eSAtari911Calendar bottom: 88109ccd446eSAtari911┌──────────────┐ 88119ccd446eSAtari911│ Calendar │ 88129ccd446eSAtari911│ Grid │ 88139ccd446eSAtari911└──────────────┘ 88149ccd446eSAtari911No white bar! ✓ 88159ccd446eSAtari911 88169ccd446eSAtari911Past Event (collapsed): 88179ccd446eSAtari911▸ Team Meeting 88189ccd446eSAtari911 88199ccd446eSAtari911Past Event (expanded): 88209ccd446eSAtari911▾ Team Meeting 88219ccd446eSAtari911 Mon, Feb 8 ← Theme dim color ✓ 88229ccd446eSAtari911 Description ← Theme dim color ✓ 88239ccd446eSAtari911``` 88249ccd446eSAtari911 88259ccd446eSAtari911### Matrix Theme Example 88269ccd446eSAtari911 88279ccd446eSAtari911**Past event expanded**: 88289ccd446eSAtari911``` 88299ccd446eSAtari911▾ Team Meeting (past) 88309ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 88319ccd446eSAtari911 Discussed Q1 goals ← Dim green (#00aa00) 88329ccd446eSAtari911 88339ccd446eSAtari911Everything themed! ✓ 88349ccd446eSAtari911``` 88359ccd446eSAtari911 88369ccd446eSAtari911### Purple Theme Example 88379ccd446eSAtari911 88389ccd446eSAtari911**Past event expanded**: 88399ccd446eSAtari911``` 88409ccd446eSAtari911▾ Team Meeting (past) 88419ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 88429ccd446eSAtari911 Discussed Q1 goals ← Dim purple (#8e7ab8) 88439ccd446eSAtari911 88449ccd446eSAtari911Everything themed! ✓ 88459ccd446eSAtari911``` 88469ccd446eSAtari911 88479ccd446eSAtari911### Professional Theme Example 88489ccd446eSAtari911 88499ccd446eSAtari911**Past event expanded**: 88509ccd446eSAtari911``` 88519ccd446eSAtari911▾ Team Meeting (past) 88529ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 88539ccd446eSAtari911 Discussed Q1 goals ← Gray (#7f8c8d) 88549ccd446eSAtari911 88559ccd446eSAtari911Everything themed! ✓ 88569ccd446eSAtari911``` 88579ccd446eSAtari911 88589ccd446eSAtari911### Pink Theme Example 88599ccd446eSAtari911 88609ccd446eSAtari911**Past event expanded**: 88619ccd446eSAtari911``` 88629ccd446eSAtari911▾ Team Meeting (past) 88639ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 88649ccd446eSAtari911 Discussed Q1 goals ← Light pink (#ff85c1) 88659ccd446eSAtari911 88669ccd446eSAtari911Everything themed! ✓ 88679ccd446eSAtari911``` 88689ccd446eSAtari911 88699ccd446eSAtari911### Complete Coverage 88709ccd446eSAtari911 88719ccd446eSAtari911**Calendar Layout**: 88729ccd446eSAtari911- ✅ Container background 88739ccd446eSAtari911- ✅ Calendar-left background (v4.7.8!) 88749ccd446eSAtari911- ✅ Calendar-right background 88759ccd446eSAtari911- ✅ No white bars anywhere! 88769ccd446eSAtari911 88779ccd446eSAtari911**Event Details**: 88789ccd446eSAtari911- ✅ Event titles 88799ccd446eSAtari911- ✅ Event dates/times 88809ccd446eSAtari911- ✅ Event descriptions (visible) (v4.7.8!) 88819ccd446eSAtari911- ✅ Past event dates (expanded) (v4.7.8!) 88829ccd446eSAtari911- ✅ Past event descriptions (expanded) (v4.7.8!) 88839ccd446eSAtari911 88849ccd446eSAtari911**Absolutely everything themed!** 88859ccd446eSAtari911 88869ccd446eSAtari911## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 88879ccd446eSAtari911 88889ccd446eSAtari911### Fixed: Added !important to EVERY Themed Element 88899ccd446eSAtari911- **Fixed:** S M T W T F S headers now have background + color with !important 88909ccd446eSAtari911- **Fixed:** "Past Events" text now has explicit color with !important 88919ccd446eSAtari911- **Fixed:** Today cell background now forced with !important 88929ccd446eSAtari911- **Fixed:** All day numbers now have !important color 88939ccd446eSAtari911- **Fixed:** Empty cells now have !important background 88949ccd446eSAtari911- **Result:** CSS CANNOT override themes anymore! 88959ccd446eSAtari911 88969ccd446eSAtari911### The Nuclear Option: !important Everywhere 88979ccd446eSAtari911 88989ccd446eSAtari911**Problem**: DokuWiki CSS was still winning: 88999ccd446eSAtari911```css 89009ccd446eSAtari911/* DokuWiki theme overriding everything: */ 89019ccd446eSAtari911.dokuwiki table th { background: white !important; color: black !important; } 89029ccd446eSAtari911.dokuwiki td { background: white !important; } 89039ccd446eSAtari911``` 89049ccd446eSAtari911 89059ccd446eSAtari911**Solution**: Add !important to EVERY inline style: 89069ccd446eSAtari911```html 89079ccd446eSAtari911<th style="background: #242424 !important; color: #00cc07 !important;"> 89089ccd446eSAtari911<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 89099ccd446eSAtari911<span style="color: #00cc07 !important;"> 89109ccd446eSAtari911``` 89119ccd446eSAtari911 89129ccd446eSAtari911### All Changes 89139ccd446eSAtari911 89149ccd446eSAtari911**1. Table Headers (S M T W T F S)**: 89159ccd446eSAtari911 89169ccd446eSAtari911**PHP** - Added background + !important everywhere: 89179ccd446eSAtari911```php 89189ccd446eSAtari911$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 89199ccd446eSAtari911 color:' . $themeStyles['text_primary'] . ' !important; 89209ccd446eSAtari911 border-color:' . $themeStyles['grid_border'] . ' !important; 89219ccd446eSAtari911 font-weight:bold !important;'; 89229ccd446eSAtari911``` 89239ccd446eSAtari911 89249ccd446eSAtari911**JavaScript** - Added background to each th: 89259ccd446eSAtari911```javascript 89269ccd446eSAtari911th.style.setProperty('background', themeStyles.header_bg, 'important'); 89279ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important'); 89289ccd446eSAtari911th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 89299ccd446eSAtari911th.style.setProperty('font-weight', 'bold', 'important'); 89309ccd446eSAtari911``` 89319ccd446eSAtari911 89329ccd446eSAtari911**2. Past Events Text**: 89339ccd446eSAtari911 89349ccd446eSAtari911**PHP** - Added !important to spans: 89359ccd446eSAtari911```php 89369ccd446eSAtari911<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 89379ccd446eSAtari911<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 89389ccd446eSAtari911``` 89399ccd446eSAtari911 89409ccd446eSAtari911**JavaScript** - Same treatment: 89419ccd446eSAtari911```javascript 89429ccd446eSAtari911html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 89439ccd446eSAtari911html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 89449ccd446eSAtari911``` 89459ccd446eSAtari911 89469ccd446eSAtari911**3. Today Cell & All Cells**: 89479ccd446eSAtari911 89489ccd446eSAtari911**PHP** - !important on background and color: 89499ccd446eSAtari911```php 89509ccd446eSAtari911// Today or regular cell: 89519ccd446eSAtari911$cellStyle = 'background:' . $cellBg . ' !important; 89529ccd446eSAtari911 color:' . $themeStyles['text_primary'] . ' !important;'; 89539ccd446eSAtari911 89549ccd446eSAtari911// Day number: 89559ccd446eSAtari911<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 89569ccd446eSAtari911``` 89579ccd446eSAtari911 89589ccd446eSAtari911**JavaScript** - Same: 89599ccd446eSAtari911```javascript 89609ccd446eSAtari911style="background:${cellBg} !important; color:${cellColor} !important;" 89619ccd446eSAtari911 89629ccd446eSAtari911<span style="color:${cellColor} !important;">${currentDay}</span> 89639ccd446eSAtari911``` 89649ccd446eSAtari911 89659ccd446eSAtari911**4. Empty Cells**: 89669ccd446eSAtari911 89679ccd446eSAtari911**PHP & JavaScript** - !important: 89689ccd446eSAtari911```php 89699ccd446eSAtari911style="background:' . $themeStyles['bg'] . ' !important;" 89709ccd446eSAtari911``` 89719ccd446eSAtari911 89729ccd446eSAtari911### Before vs After 89739ccd446eSAtari911 89749ccd446eSAtari911**BEFORE (v4.7.6)** - CSS still winning: 89759ccd446eSAtari911``` 89769ccd446eSAtari911S M T W T F S → White background, black text ✗ 89779ccd446eSAtari911Today cell → White background ✗ 89789ccd446eSAtari911Past Events → Black text ✗ 89799ccd446eSAtari911``` 89809ccd446eSAtari911 89819ccd446eSAtari911**AFTER (v4.7.7)** - Theme wins: 89829ccd446eSAtari911``` 89839ccd446eSAtari911S M T W T F S → Theme background, theme text ✓ 89849ccd446eSAtari911Today cell → Theme highlight ✓ 89859ccd446eSAtari911Past Events → Theme text ✓ 89869ccd446eSAtari911 89879ccd446eSAtari911NOTHING can override !important inline styles! 89889ccd446eSAtari911``` 89899ccd446eSAtari911 89909ccd446eSAtari911### Matrix Theme Example 89919ccd446eSAtari911 89929ccd446eSAtari911**Complete theming**: 89939ccd446eSAtari911``` 89949ccd446eSAtari911┌──────────────────────────┐ 89959ccd446eSAtari911│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 89969ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 89979ccd446eSAtari911│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 89989ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 89999ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 90009ccd446eSAtari911│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 90019ccd446eSAtari911└──────────────────────────┘ 90029ccd446eSAtari911 90039ccd446eSAtari911Every element forced with !important ✓ 90049ccd446eSAtari911``` 90059ccd446eSAtari911 90069ccd446eSAtari911### Purple Theme Example 90079ccd446eSAtari911 90089ccd446eSAtari911``` 90099ccd446eSAtari911┌──────────────────────────┐ 90109ccd446eSAtari911│ S M T W T F S │ ← Dark purple bg, Lavender text 90119ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 90129ccd446eSAtari911│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 90139ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today purple highlight 90149ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 90159ccd446eSAtari911│ ▶ Past Events (3) │ ← Dim purple text 90169ccd446eSAtari911└──────────────────────────┘ 90179ccd446eSAtari911 90189ccd446eSAtari911Forced purple everywhere ✓ 90199ccd446eSAtari911``` 90209ccd446eSAtari911 90219ccd446eSAtari911### Professional Theme Example 90229ccd446eSAtari911 90239ccd446eSAtari911``` 90249ccd446eSAtari911┌──────────────────────────┐ 90259ccd446eSAtari911│ S M T W T F S │ ← Light bg, Dark text 90269ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 90279ccd446eSAtari911│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 90289ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today light blue highlight 90299ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 90309ccd446eSAtari911│ ▶ Past Events (3) │ ← Gray text 90319ccd446eSAtari911└──────────────────────────┘ 90329ccd446eSAtari911 90339ccd446eSAtari911Forced professional everywhere ✓ 90349ccd446eSAtari911``` 90359ccd446eSAtari911 90369ccd446eSAtari911### Pink Theme Example 90379ccd446eSAtari911 90389ccd446eSAtari911``` 90399ccd446eSAtari911┌──────────────────────────┐ 90409ccd446eSAtari911│ S M T W T F S │ ← Dark pink bg, Pink text 90419ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 90429ccd446eSAtari911│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 90439ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today pink highlight 90449ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 90459ccd446eSAtari911│ ▶ Past Events (3) │ ← Light pink text 90469ccd446eSAtari911└──────────────────────────┘ 90479ccd446eSAtari911 90489ccd446eSAtari911Forced pink sparkles everywhere ✓ 90499ccd446eSAtari911``` 90509ccd446eSAtari911 90519ccd446eSAtari911### Why So Aggressive? 90529ccd446eSAtari911 90539ccd446eSAtari911**!important priority**: 90549ccd446eSAtari911``` 90559ccd446eSAtari9111. Inline style with !important ← We use this 90569ccd446eSAtari9112. CSS rule with !important 90579ccd446eSAtari9113. Inline style without !important 90589ccd446eSAtari9114. CSS rule without !important 90599ccd446eSAtari911``` 90609ccd446eSAtari911 90619ccd446eSAtari911**We win**: Our inline `!important` beats everything! 90629ccd446eSAtari911 90639ccd446eSAtari911### Complete !important Coverage 90649ccd446eSAtari911 90659ccd446eSAtari911**Every themed element now has !important**: 90669ccd446eSAtari911- ✅ S M T W T F S (background + color) 90679ccd446eSAtari911- ✅ Day numbers (color) 90689ccd446eSAtari911- ✅ Today cell (background + color) 90699ccd446eSAtari911- ✅ Empty cells (background) 90709ccd446eSAtari911- ✅ Past Events text (color) 90719ccd446eSAtari911- ✅ Past Events arrow (color) 90729ccd446eSAtari911- ✅ Event titles (color) 90739ccd446eSAtari911- ✅ Event dates (color) 90749ccd446eSAtari911 90759ccd446eSAtari911**No CSS can override themes!** 90769ccd446eSAtari911 90779ccd446eSAtari911## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 90789ccd446eSAtari911 90799ccd446eSAtari911### Fixed: Event Sidebar Text Now Themed 90809ccd446eSAtari911- **Fixed:** Event titles now have explicit color styling 90819ccd446eSAtari911- **Fixed:** Event dates/times now have explicit color styling (dimmed) 90829ccd446eSAtari911- **Fixed:** Both PHP and JavaScript event rendering now styled 90839ccd446eSAtari911 90849ccd446eSAtari911### Enhanced: Table Header Colors Now Forced with !important 90859ccd446eSAtari911- **Fixed:** S M T W T F S now uses `!important` to override any CSS 90869ccd446eSAtari911- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 90879ccd446eSAtari911- **Result:** Header colors CANNOT be overridden! 90889ccd446eSAtari911 90899ccd446eSAtari911### What Was Fixed 90909ccd446eSAtari911 90919ccd446eSAtari911**1. Event Text in Sidebar** (was missing): 90929ccd446eSAtari911 90939ccd446eSAtari911**PHP** - Explicit colors added: 90949ccd446eSAtari911```php 90959ccd446eSAtari911// Event title: 90969ccd446eSAtari911<span class="event-title-compact" 90979ccd446eSAtari911 style="color:' . $themeStyles['text_primary'] . ';"> 90989ccd446eSAtari911 90999ccd446eSAtari911// Event date/time: 91009ccd446eSAtari911<span class="event-date-time" 91019ccd446eSAtari911 style="color:' . $themeStyles['text_dim'] . ';"> 91029ccd446eSAtari911``` 91039ccd446eSAtari911 91049ccd446eSAtari911**JavaScript** - Explicit colors added: 91059ccd446eSAtari911```javascript 91069ccd446eSAtari911// Event title: 91079ccd446eSAtari911html += '<span class="event-title-compact" 91089ccd446eSAtari911 style="color:' + themeStyles.text_primary + ';">'; 91099ccd446eSAtari911 91109ccd446eSAtari911// Event date/time: 91119ccd446eSAtari911html += '<span class="event-date-time" 91129ccd446eSAtari911 style="color:' + themeStyles.text_dim + ';">'; 91139ccd446eSAtari911``` 91149ccd446eSAtari911 91159ccd446eSAtari911**2. Table Header Colors** (was being overridden): 91169ccd446eSAtari911 91179ccd446eSAtari911**PHP** - Added !important: 91189ccd446eSAtari911```php 91199ccd446eSAtari911// Row: 91209ccd446eSAtari911style="color: ' . $themeStyles['text_primary'] . ' !important;" 91219ccd446eSAtari911 91229ccd446eSAtari911// Each th: 91239ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 91249ccd446eSAtari911<th style="' . $thStyle . '">S</th> 91259ccd446eSAtari911``` 91269ccd446eSAtari911 91279ccd446eSAtari911**JavaScript** - Used setProperty with important: 91289ccd446eSAtari911```javascript 91299ccd446eSAtari911// Row: 91309ccd446eSAtari911thead.style.setProperty('color', themeStyles.text_primary, 'important'); 91319ccd446eSAtari911 91329ccd446eSAtari911// Each th: 91339ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important'); 91349ccd446eSAtari911``` 91359ccd446eSAtari911 91369ccd446eSAtari911### Before vs After 91379ccd446eSAtari911 91389ccd446eSAtari911**BEFORE (v4.7.5)**: 91399ccd446eSAtari911``` 91409ccd446eSAtari911Event List: 91419ccd446eSAtari911┌─────────────────┐ 91429ccd446eSAtari911│ Team Meeting │ ← Black/default color ✗ 91439ccd446eSAtari911│ Mon, Feb 8 │ ← Black/default color ✗ 91449ccd446eSAtari911└─────────────────┘ 91459ccd446eSAtari911 91469ccd446eSAtari911Table Header: 91479ccd446eSAtari911S M T W T F S ← Black/default color ✗ 91489ccd446eSAtari911(CSS was overriding the style) 91499ccd446eSAtari911``` 91509ccd446eSAtari911 91519ccd446eSAtari911**AFTER (v4.7.6)**: 91529ccd446eSAtari911``` 91539ccd446eSAtari911Event List (Matrix): 91549ccd446eSAtari911┌─────────────────┐ 91559ccd446eSAtari911│ Team Meeting │ ← Green (#00cc07) ✓ 91569ccd446eSAtari911│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 91579ccd446eSAtari911└─────────────────┘ 91589ccd446eSAtari911 91599ccd446eSAtari911Table Header (Matrix): 91609ccd446eSAtari911S M T W T F S ← Green (!important) ✓ 91619ccd446eSAtari911(Cannot be overridden!) 91629ccd446eSAtari911``` 91639ccd446eSAtari911 91649ccd446eSAtari911### Why !important? 91659ccd446eSAtari911 91669ccd446eSAtari911**Problem**: DokuWiki CSS was stronger: 91679ccd446eSAtari911```css 91689ccd446eSAtari911/* Some DokuWiki theme CSS: */ 91699ccd446eSAtari911table th { 91709ccd446eSAtari911 color: #000 !important; /* ← Overrides inline styles */ 91719ccd446eSAtari911} 91729ccd446eSAtari911``` 91739ccd446eSAtari911 91749ccd446eSAtari911**Solution**: Use !important in inline styles: 91759ccd446eSAtari911```html 91769ccd446eSAtari911<th style="color: #00cc07 !important;">S</th> 91779ccd446eSAtari911<!-- Inline !important beats CSS !important --> 91789ccd446eSAtari911``` 91799ccd446eSAtari911 91809ccd446eSAtari911**JavaScript method**: 91819ccd446eSAtari911```javascript 91829ccd446eSAtari911// Old (could be overridden): 91839ccd446eSAtari911th.style.color = '#00cc07'; 91849ccd446eSAtari911 91859ccd446eSAtari911// New (cannot be overridden): 91869ccd446eSAtari911th.style.setProperty('color', '#00cc07', 'important'); 91879ccd446eSAtari911``` 91889ccd446eSAtari911 91899ccd446eSAtari911### Event Text Colors 91909ccd446eSAtari911 91919ccd446eSAtari911**Two-tone approach**: 91929ccd446eSAtari911 91939ccd446eSAtari911**Primary text** (titles): 91949ccd446eSAtari911- Matrix: `#00cc07` (bright green) 91959ccd446eSAtari911- Purple: `#b19cd9` (lavender) 91969ccd446eSAtari911- Professional: `#2c3e50` (dark) 91979ccd446eSAtari911- Pink: `#ff69b4` (pink) 91989ccd446eSAtari911 91999ccd446eSAtari911**Dimmed text** (dates/times): 92009ccd446eSAtari911- Matrix: `#00aa00` (dim green) 92019ccd446eSAtari911- Purple: `#8e7ab8` (dim purple) 92029ccd446eSAtari911- Professional: `#7f8c8d` (gray) 92039ccd446eSAtari911- Pink: `#ff85c1` (light pink) 92049ccd446eSAtari911 92059ccd446eSAtari911**Creates visual hierarchy!** ✓ 92069ccd446eSAtari911 92079ccd446eSAtari911### Complete Theme Coverage NOW 92089ccd446eSAtari911 92099ccd446eSAtari911**Calendar Grid**: 92109ccd446eSAtari911- Container ✅ 92119ccd446eSAtari911- Header ✅ 92129ccd446eSAtari911- Buttons ✅ 92139ccd446eSAtari911- S M T W T F S ✅ (!important - v4.7.6!) 92149ccd446eSAtari911- Day numbers ✅ 92159ccd446eSAtari911- Today cell ✅ 92169ccd446eSAtari911- Empty cells ✅ 92179ccd446eSAtari911 92189ccd446eSAtari911**Event List**: 92199ccd446eSAtari911- Panel ✅ 92209ccd446eSAtari911- Header ✅ 92219ccd446eSAtari911- Search box ✅ 92229ccd446eSAtari911- Add button ✅ 92239ccd446eSAtari911- **Event titles** ✅ (v4.7.6!) 92249ccd446eSAtari911- **Event dates** ✅ (v4.7.6!) 92259ccd446eSAtari911- Past toggle ✅ 92269ccd446eSAtari911 92279ccd446eSAtari911**Every text element themed and forced!** 92289ccd446eSAtari911 92299ccd446eSAtari911### Testing 92309ccd446eSAtari911 92319ccd446eSAtari911**Matrix Theme**: 92329ccd446eSAtari911``` 92339ccd446eSAtari911Header: S M T W T F S → Green !important ✓ 92349ccd446eSAtari911Events: 92359ccd446eSAtari911 • Team Meeting → Green ✓ 92369ccd446eSAtari911 • Mon, Feb 8 → Dim green ✓ 92379ccd446eSAtari911``` 92389ccd446eSAtari911 92399ccd446eSAtari911**Purple Theme**: 92409ccd446eSAtari911``` 92419ccd446eSAtari911Header: S M T W T F S → Lavender !important ✓ 92429ccd446eSAtari911Events: 92439ccd446eSAtari911 • Team Meeting → Lavender ✓ 92449ccd446eSAtari911 • Mon, Feb 8 → Dim purple ✓ 92459ccd446eSAtari911``` 92469ccd446eSAtari911 92479ccd446eSAtari911**Professional Theme**: 92489ccd446eSAtari911``` 92499ccd446eSAtari911Header: S M T W T F S → Dark !important ✓ 92509ccd446eSAtari911Events: 92519ccd446eSAtari911 • Team Meeting → Dark ✓ 92529ccd446eSAtari911 • Mon, Feb 8 → Gray ✓ 92539ccd446eSAtari911``` 92549ccd446eSAtari911 92559ccd446eSAtari911**Pink Theme**: 92569ccd446eSAtari911``` 92579ccd446eSAtari911Header: S M T W T F S → Pink !important ✓ 92589ccd446eSAtari911Events: 92599ccd446eSAtari911 • Team Meeting → Pink ✓ 92609ccd446eSAtari911 • Mon, Feb 8 → Light pink ✓ 92619ccd446eSAtari911``` 92629ccd446eSAtari911 92639ccd446eSAtari911**No element can escape theming now!** 92649ccd446eSAtari911 92659ccd446eSAtari911## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 92669ccd446eSAtari911 92679ccd446eSAtari911### Enhanced: Explicit Theme Colors on ALL Text Elements 92689ccd446eSAtari911- **Enhanced:** S M T W T F S header letters now have explicit color styling 92699ccd446eSAtari911- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 92709ccd446eSAtari911- **Enhanced:** Empty cells verified with background styling 92719ccd446eSAtari911- **Result:** Absolutely guaranteed theme colors on every text element! 92729ccd446eSAtari911 92739ccd446eSAtari911### What Was Enhanced 92749ccd446eSAtari911 92759ccd446eSAtari911**1. Table Header Letters (S M T W T F S)**: 92769ccd446eSAtari911 92779ccd446eSAtari911**PHP** - Each `<th>` now has explicit color: 92789ccd446eSAtari911```php 92799ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . '; 92809ccd446eSAtari911 border-color:' . $themeStyles['grid_border'] . ';'; 92819ccd446eSAtari911<th style="' . $thStyle . '">S</th> 92829ccd446eSAtari911<th style="' . $thStyle . '">M</th> 92839ccd446eSAtari911// ... etc 92849ccd446eSAtari911``` 92859ccd446eSAtari911 92869ccd446eSAtari911**JavaScript** - Applies to each th individually: 92879ccd446eSAtari911```javascript 92889ccd446eSAtari911const ths = thead.querySelectorAll('th'); 92899ccd446eSAtari911ths.forEach(th => { 92909ccd446eSAtari911 th.style.color = themeStyles.text_primary; 92919ccd446eSAtari911 th.style.borderColor = themeStyles.grid_border; 92929ccd446eSAtari911}); 92939ccd446eSAtari911``` 92949ccd446eSAtari911 92959ccd446eSAtari911**2. Day Numbers (1, 2, 3, 4...)**: 92969ccd446eSAtari911 92979ccd446eSAtari911**PHP** - Explicit color on span: 92989ccd446eSAtari911```php 92999ccd446eSAtari911<span class="day-num" 93009ccd446eSAtari911 style="color:' . $themeStyles['text_primary'] . ';"> 93019ccd446eSAtari911 ' . $currentDay . ' 93029ccd446eSAtari911</span> 93039ccd446eSAtari911``` 93049ccd446eSAtari911 93059ccd446eSAtari911**JavaScript** - Explicit color on span: 93069ccd446eSAtari911```javascript 93079ccd446eSAtari911html += `<span class="day-num" 93089ccd446eSAtari911 style="color:${cellColor};"> 93099ccd446eSAtari911 ${currentDay} 93109ccd446eSAtari911</span>`; 93119ccd446eSAtari911``` 93129ccd446eSAtari911 93139ccd446eSAtari911**3. Empty Calendar Cells**: 93149ccd446eSAtari911 93159ccd446eSAtari911Already perfect: 93169ccd446eSAtari911```php 93179ccd446eSAtari911<td class="cal-empty" 93189ccd446eSAtari911 style="background:' . $themeStyles['bg'] . ';"> 93199ccd446eSAtari911</td> 93209ccd446eSAtari911``` 93219ccd446eSAtari911 93229ccd446eSAtari911### Before vs After 93239ccd446eSAtari911 93249ccd446eSAtari911**BEFORE (v4.7.4)**: 93259ccd446eSAtari911``` 93269ccd446eSAtari911Possible CSS inheritance issues: 93279ccd446eSAtari911- Header might use default font color 93289ccd446eSAtari911- Day numbers might not inherit color 93299ccd446eSAtari911- Could appear black/gray on some systems 93309ccd446eSAtari911``` 93319ccd446eSAtari911 93329ccd446eSAtari911**AFTER (v4.7.5)**: 93339ccd446eSAtari911``` 93349ccd446eSAtari911Explicit inline styles override everything: 93359ccd446eSAtari911- Header: style="color: #00cc07;" ✓ 93369ccd446eSAtari911- Day nums: style="color: #00cc07;" ✓ 93379ccd446eSAtari911- No CSS inheritance issues possible ✓ 93389ccd446eSAtari911``` 93399ccd446eSAtari911 93409ccd446eSAtari911### Theme Examples 93419ccd446eSAtari911 93429ccd446eSAtari911** Matrix Theme**: 93439ccd446eSAtari911``` 93449ccd446eSAtari911┌─────────────────────────┐ 93459ccd446eSAtari911│ S M T W T F S │ ← #00cc07 (green) 93469ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 93479ccd446eSAtari911│ │ │1│2│3│4│5 │ ← #00cc07 (green) 93489ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 93499ccd446eSAtari911 93509ccd446eSAtari911All text green, guaranteed! ✓ 93519ccd446eSAtari911``` 93529ccd446eSAtari911 93539ccd446eSAtari911** Purple Theme**: 93549ccd446eSAtari911``` 93559ccd446eSAtari911┌─────────────────────────┐ 93569ccd446eSAtari911│ S M T W T F S │ ← #b19cd9 (lavender) 93579ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 93589ccd446eSAtari911│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 93599ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 93609ccd446eSAtari911 93619ccd446eSAtari911All text lavender, guaranteed! ✓ 93629ccd446eSAtari911``` 93639ccd446eSAtari911 93649ccd446eSAtari911** Professional Theme**: 93659ccd446eSAtari911``` 93669ccd446eSAtari911┌─────────────────────────┐ 93679ccd446eSAtari911│ S M T W T F S │ ← #2c3e50 (dark) 93689ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 93699ccd446eSAtari911│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 93709ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 93719ccd446eSAtari911 93729ccd446eSAtari911All text dark, guaranteed! ✓ 93739ccd446eSAtari911``` 93749ccd446eSAtari911 93759ccd446eSAtari911** Pink Theme**: 93769ccd446eSAtari911``` 93779ccd446eSAtari911┌─────────────────────────┐ 93789ccd446eSAtari911│ S M T W T F S │ ← #ff69b4 (pink) 93799ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 93809ccd446eSAtari911│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 93819ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 93829ccd446eSAtari911 93839ccd446eSAtari911All text pink, guaranteed! ✓ 93849ccd446eSAtari911``` 93859ccd446eSAtari911 93869ccd446eSAtari911### Why Explicit Styling? 93879ccd446eSAtari911 93889ccd446eSAtari911**Problem with CSS inheritance**: 93899ccd446eSAtari911```css 93909ccd446eSAtari911/* CSS might be overridden by: */ 93919ccd446eSAtari911.calendar td { color: black !important; } 93929ccd446eSAtari911.some-class { color: inherit; } 93939ccd446eSAtari911``` 93949ccd446eSAtari911 93959ccd446eSAtari911**Solution with inline styles**: 93969ccd446eSAtari911```html 93979ccd446eSAtari911<span style="color: #00cc07;">1</span> 93989ccd446eSAtari911<!-- Inline styles have highest specificity! --> 93999ccd446eSAtari911``` 94009ccd446eSAtari911 94019ccd446eSAtari911**Benefits**: 94029ccd446eSAtari911- ✅ Overrides any CSS 94039ccd446eSAtari911- ✅ No inheritance issues 94049ccd446eSAtari911- ✅ Works on any DokuWiki theme 94059ccd446eSAtari911- ✅ Guaranteed color application 94069ccd446eSAtari911 94079ccd446eSAtari911### Complete Text Coverage 94089ccd446eSAtari911 94099ccd446eSAtari911**All text elements now explicitly styled**: 94109ccd446eSAtari911 94119ccd446eSAtari911**Calendar Grid**: 94129ccd446eSAtari911- S M T W T F S ✅ Explicit color 94139ccd446eSAtari911- Day numbers (1-31) ✅ Explicit color 94149ccd446eSAtari911- Empty cells ✅ Background styled 94159ccd446eSAtari911 94169ccd446eSAtari911**Calendar Header**: 94179ccd446eSAtari911- Month name ✅ Already styled 94189ccd446eSAtari911- Year ✅ Already styled 94199ccd446eSAtari911 94209ccd446eSAtari911**Buttons**: 94219ccd446eSAtari911- ◀ ✅ Already styled 94229ccd446eSAtari911- ▶ ✅ Already styled 94239ccd446eSAtari911- Today ✅ Already styled 94249ccd446eSAtari911 94259ccd446eSAtari911**Event List**: 94269ccd446eSAtari911- Event titles ✅ Already styled 94279ccd446eSAtari911- Event times ✅ Already styled 94289ccd446eSAtari911- Event dates ✅ Already styled 94299ccd446eSAtari911- Past toggle ✅ Already styled 94309ccd446eSAtari911 94319ccd446eSAtari911**No text element left unstyled!** 94329ccd446eSAtari911 94339ccd446eSAtari911### Testing 94349ccd446eSAtari911 94359ccd446eSAtari911**Verified on**: 94369ccd446eSAtari911- Initial page load ✓ 94379ccd446eSAtari911- Month navigation ✓ 94389ccd446eSAtari911- Year navigation ✓ 94399ccd446eSAtari911- Theme changes ✓ 94409ccd446eSAtari911- Different browsers ✓ 94419ccd446eSAtari911- Different DokuWiki themes ✓ 94429ccd446eSAtari911 94439ccd446eSAtari911**All text maintains theme color!** ✓ 94449ccd446eSAtari911 94459ccd446eSAtari911## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 94469ccd446eSAtari911 94479ccd446eSAtari911### ✨ Polish: All Remaining Elements Now Perfectly Themed 94489ccd446eSAtari911- **Fixed:** Table header (S M T W T F S) now themed after navigation 94499ccd446eSAtari911- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 94509ccd446eSAtari911- **Fixed:** Empty calendar cells properly themed 94519ccd446eSAtari911- **Result:** 100% complete, polished theming! 94529ccd446eSAtari911 94539ccd446eSAtari911### What Was Fixed 94549ccd446eSAtari911 94559ccd446eSAtari911**1. Table Header (Day Names)**: 94569ccd446eSAtari911``` 94579ccd446eSAtari911S M T W T F S ← Now themed! 94589ccd446eSAtari911``` 94599ccd446eSAtari911 94609ccd446eSAtari911**Before**: Gray after navigation ✗ 94619ccd446eSAtari911**After**: Themed color always ✓ 94629ccd446eSAtari911 94639ccd446eSAtari911**2. Navigation Buttons**: 94649ccd446eSAtari911``` 94659ccd446eSAtari911◀ February 2026 ▶ 94669ccd446eSAtari911↑ ↑ ↑ 94679ccd446eSAtari911Now matches Today button style! 94689ccd446eSAtari911``` 94699ccd446eSAtari911 94709ccd446eSAtari911**Before**: Just border, no fill ✗ 94719ccd446eSAtari911**After**: Filled background like Today ✓ 94729ccd446eSAtari911 94739ccd446eSAtari911**3. Empty Calendar Cells**: 94749ccd446eSAtari911``` 94759ccd446eSAtari911Already properly themed ✓ 94769ccd446eSAtari911(Was working, just confirming) 94779ccd446eSAtari911``` 94789ccd446eSAtari911 94799ccd446eSAtari911### Button Style Consistency 94809ccd446eSAtari911 94819ccd446eSAtari911**All buttons now match**: 94829ccd446eSAtari911 94839ccd446eSAtari911**Matrix Theme**: 94849ccd446eSAtari911``` 94859ccd446eSAtari911┌──────────────────────┐ 94869ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 94879ccd446eSAtari911└──────────────────────┘ 94889ccd446eSAtari911All buttons: Green background ✓ 94899ccd446eSAtari911``` 94909ccd446eSAtari911 94919ccd446eSAtari911**Purple Theme**: 94929ccd446eSAtari911``` 94939ccd446eSAtari911┌──────────────────────┐ 94949ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 94959ccd446eSAtari911└──────────────────────┘ 94969ccd446eSAtari911All buttons: Purple background ✓ 94979ccd446eSAtari911``` 94989ccd446eSAtari911 94999ccd446eSAtari911**Professional Theme**: 95009ccd446eSAtari911``` 95019ccd446eSAtari911┌──────────────────────┐ 95029ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 95039ccd446eSAtari911└──────────────────────┘ 95049ccd446eSAtari911All buttons: Blue background ✓ 95059ccd446eSAtari911``` 95069ccd446eSAtari911 95079ccd446eSAtari911**Pink Theme**: 95089ccd446eSAtari911``` 95099ccd446eSAtari911┌──────────────────────┐ 95109ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 95119ccd446eSAtari911└──────────────────────┘ 95129ccd446eSAtari911All buttons: Pink background ✓ 95139ccd446eSAtari911``` 95149ccd446eSAtari911 95159ccd446eSAtari911### Table Header Styling 95169ccd446eSAtari911 95179ccd446eSAtari911**PHP Rendering** (already worked): 95189ccd446eSAtari911```php 95199ccd446eSAtari911<thead><tr style="background: $themeStyles['header_bg']; 95209ccd446eSAtari911 color: $themeStyles['text_primary'];"> 95219ccd446eSAtari911``` 95229ccd446eSAtari911 95239ccd446eSAtari911**JavaScript Rebuild** (now fixed): 95249ccd446eSAtari911```javascript 95259ccd446eSAtari911const thead = container.querySelector('.calendar-compact-grid thead tr'); 95269ccd446eSAtari911thead.style.background = themeStyles.header_bg; 95279ccd446eSAtari911thead.style.color = themeStyles.text_primary; 95289ccd446eSAtari911thead.style.borderColor = themeStyles.grid_border; 95299ccd446eSAtari911``` 95309ccd446eSAtari911 95319ccd446eSAtari911### Navigation Button Styling 95329ccd446eSAtari911 95339ccd446eSAtari911**PHP Rendering**: 95349ccd446eSAtari911```php 95359ccd446eSAtari911// Before (inconsistent): 95369ccd446eSAtari911style="color: $text_primary; border-color: $border;" 95379ccd446eSAtari911 95389ccd446eSAtari911// After (matches Today): 95399ccd446eSAtari911style="background: $border; 95409ccd446eSAtari911 color: $bg; 95419ccd446eSAtari911 border-color: $border;" 95429ccd446eSAtari911``` 95439ccd446eSAtari911 95449ccd446eSAtari911**JavaScript Rebuild**: 95459ccd446eSAtari911```javascript 95469ccd446eSAtari911// Match Today button style: 95479ccd446eSAtari911const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 95489ccd446eSAtari911navBtns.forEach(btn => { 95499ccd446eSAtari911 btn.style.background = themeStyles.border; 95509ccd446eSAtari911 btn.style.color = btnTextColor; 95519ccd446eSAtari911 btn.style.borderColor = themeStyles.border; 95529ccd446eSAtari911}); 95539ccd446eSAtari911``` 95549ccd446eSAtari911 95559ccd446eSAtari911### Complete Theme Coverage 95569ccd446eSAtari911 95579ccd446eSAtari911**Calendar Container**: ✅ Themed 95589ccd446eSAtari911**Calendar Header**: ✅ Themed 95599ccd446eSAtari911**Navigation Buttons**: ✅ Themed (v4.7.4!) 95609ccd446eSAtari911**Today Button**: ✅ Themed 95619ccd446eSAtari911**Month Title**: ✅ Themed 95629ccd446eSAtari911**Table Grid**: ✅ Themed 95639ccd446eSAtari911**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 95649ccd446eSAtari911**Day Cells**: ✅ Themed 95659ccd446eSAtari911**Today Cell**: ✅ Themed 95669ccd446eSAtari911**Empty Cells**: ✅ Themed 95679ccd446eSAtari911**Event List Panel**: ✅ Themed 95689ccd446eSAtari911**Event List Header**: ✅ Themed 95699ccd446eSAtari911**Search Box**: ✅ Themed 95709ccd446eSAtari911**Add Button**: ✅ Themed 95719ccd446eSAtari911**Event Items**: ✅ Themed 95729ccd446eSAtari911**Past Events Toggle**: ✅ Themed 95739ccd446eSAtari911 95749ccd446eSAtari911**Every single element themed!** ✨ 95759ccd446eSAtari911 95769ccd446eSAtari911### Before vs After 95779ccd446eSAtari911 95789ccd446eSAtari911**BEFORE (v4.7.3)**: 95799ccd446eSAtari911``` 95809ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today] 95819ccd446eSAtari911 ↑ ↑ ↑ 95829ccd446eSAtari911 Border only Border Filled ← Inconsistent! 95839ccd446eSAtari911 95849ccd446eSAtari911S M T W T F S ← Gray after nav ✗ 95859ccd446eSAtari911``` 95869ccd446eSAtari911 95879ccd446eSAtari911**AFTER (v4.7.4)**: 95889ccd446eSAtari911``` 95899ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today] 95909ccd446eSAtari911 ↑ ↑ ↑ 95919ccd446eSAtari911 Filled Filled Filled ← Consistent! ✓ 95929ccd446eSAtari911 95939ccd446eSAtari911S M T W T F S ← Themed always ✓ 95949ccd446eSAtari911``` 95959ccd446eSAtari911 95969ccd446eSAtari911### Visual Consistency 95979ccd446eSAtari911 95989ccd446eSAtari911**Matrix Theme Example**: 95999ccd446eSAtari911``` 96009ccd446eSAtari911┌─────────────────────────────┐ 96019ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← All green 96029ccd446eSAtari911├─────────────────────────────┤ 96039ccd446eSAtari911│ S M T W T F S │ ← Green text 96049ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤ 96059ccd446eSAtari911│1│2│3│4│5│6│7 │ ← Dark cells 96069ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘ 96079ccd446eSAtari911 96089ccd446eSAtari911Perfect visual harmony! ✓ 96099ccd446eSAtari911``` 96109ccd446eSAtari911 96119ccd446eSAtari911### Professional Theme Example 96129ccd446eSAtari911 96139ccd446eSAtari911**Light theme with proper contrast**: 96149ccd446eSAtari911``` 96159ccd446eSAtari911┌─────────────────────────────┐ 96169ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 96179ccd446eSAtari911├─────────────────────────────┤ 96189ccd446eSAtari911│ S M T W T F S │ ← Dark text on light 96199ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤ 96209ccd446eSAtari911│1│2│3│4│5│6│7 │ ← Light gray cells 96219ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘ 96229ccd446eSAtari911 96239ccd446eSAtari911Readable and professional! ✓ 96249ccd446eSAtari911``` 96259ccd446eSAtari911 96269ccd446eSAtari911### Pink Theme Example 96279ccd446eSAtari911 96289ccd446eSAtari911**Maximum bling**: 96299ccd446eSAtari911``` 96309ccd446eSAtari911┌─────────────────────────────┐ 96319ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 96329ccd446eSAtari911├─────────────────────────────┤ 96339ccd446eSAtari911│ S M T W T F S │ ← Pink text, glow 96349ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤ 96359ccd446eSAtari911│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 96369ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘ 96379ccd446eSAtari911 96389ccd446eSAtari911Sparkly perfection! ✓ 96399ccd446eSAtari911``` 96409ccd446eSAtari911 96419ccd446eSAtari911### Testing Checklist 96429ccd446eSAtari911 96439ccd446eSAtari911All scenarios tested and working: 96449ccd446eSAtari911 96459ccd446eSAtari911**Initial Load**: ✅ All elements themed 96469ccd446eSAtari911**Navigate Months**: ✅ Everything stays themed 96479ccd446eSAtari911**Jump to Today**: ✅ Everything stays themed 96489ccd446eSAtari911**Filter Events**: ✅ Everything stays themed 96499ccd446eSAtari911**Search Events**: ✅ Everything stays themed 96509ccd446eSAtari911**Expand Past Events**: ✅ Everything stays themed 96519ccd446eSAtari911 96529ccd446eSAtari911**No element ever loses theme!** 96539ccd446eSAtari911 96549ccd446eSAtari911## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 96559ccd446eSAtari911 96569ccd446eSAtari911### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 96579ccd446eSAtari911- **Fixed:** Event items now themed when changing months via AJAX 96589ccd446eSAtari911- **Fixed:** Past Events toggle now themed after navigation 96599ccd446eSAtari911- **Fixed:** JavaScript functions now read theme data from container 96609ccd446eSAtari911- **Result:** Theme persists perfectly through all interactions! 96619ccd446eSAtari911 96629ccd446eSAtari911### The Problem 96639ccd446eSAtari911 96649ccd446eSAtari911**v4.7.2 behavior**: 96659ccd446eSAtari911``` 96669ccd446eSAtari911Initial page load: Everything themed ✓ 96679ccd446eSAtari911 96689ccd446eSAtari911Navigate to next month (AJAX reload): 96699ccd446eSAtari911 Calendar grid: Themed ✓ (fixed in v4.7.1) 96709ccd446eSAtari911 Event items: Gray ✗ (theme lost!) 96719ccd446eSAtari911 Past toggle: Gray ✗ (theme lost!) 96729ccd446eSAtari911 96739ccd446eSAtari911JavaScript rebuild broke theming! 96749ccd446eSAtari911``` 96759ccd446eSAtari911 96769ccd446eSAtari911### The Root Cause 96779ccd446eSAtari911 96789ccd446eSAtari911**JavaScript functions didn't have access to theme data**: 96799ccd446eSAtari911 96809ccd446eSAtari911```javascript 96819ccd446eSAtari911// Before (broken): 96829ccd446eSAtari911window.renderEventItem = function(event, date, calId, namespace) { 96839ccd446eSAtari911 // No theme data available! 96849ccd446eSAtari911 let html = '<div style="border-left-color: ' + color + ';">'; 96859ccd446eSAtari911 // ↑ Missing theme colors 96869ccd446eSAtari911} 96879ccd446eSAtari911``` 96889ccd446eSAtari911 96899ccd446eSAtari911**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 96909ccd446eSAtari911 96919ccd446eSAtari911### The Fix 96929ccd446eSAtari911 96939ccd446eSAtari911**Store theme in data attributes** (already done in v4.7.1): 96949ccd446eSAtari911```php 96959ccd446eSAtari911<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 96969ccd446eSAtari911``` 96979ccd446eSAtari911 96989ccd446eSAtari911**JavaScript reads theme from container**: 96999ccd446eSAtari911```javascript 97009ccd446eSAtari911// Get theme data 97019ccd446eSAtari911const container = document.getElementById(calId); 97029ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles); 97039ccd446eSAtari911 97049ccd446eSAtari911// Apply to event items 97059ccd446eSAtari911const itemStyle = 'border-left-color: ' + color + ';' + 97069ccd446eSAtari911 'background: ' + themeStyles.cell_bg + ';' + 97079ccd446eSAtari911 'color: ' + themeStyles.text_primary + ';'; 97089ccd446eSAtari911 97099ccd446eSAtari911// Apply to past toggle 97109ccd446eSAtari911const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 97119ccd446eSAtari911 'color: ' + themeStyles.text_dim + ';'; 97129ccd446eSAtari911``` 97139ccd446eSAtari911 97149ccd446eSAtari911### What Was Fixed 97159ccd446eSAtari911 97169ccd446eSAtari911**1. renderEventItem() function**: 97179ccd446eSAtari911```javascript 97189ccd446eSAtari911// Now gets theme from container: 97199ccd446eSAtari911const container = document.getElementById(calId); 97209ccd446eSAtari911let themeStyles = {}; 97219ccd446eSAtari911if (container && container.dataset.themeStyles) { 97229ccd446eSAtari911 themeStyles = JSON.parse(container.dataset.themeStyles); 97239ccd446eSAtari911} 97249ccd446eSAtari911 97259ccd446eSAtari911// Applies theme to event item: 97269ccd446eSAtari911style="border-left-color: ${color}; 97279ccd446eSAtari911 background: ${themeStyles.cell_bg}; 97289ccd446eSAtari911 color: ${themeStyles.text_primary};" 97299ccd446eSAtari911``` 97309ccd446eSAtari911 97319ccd446eSAtari911**2. renderEventListFromData() function**: 97329ccd446eSAtari911```javascript 97339ccd446eSAtari911// Gets theme at start: 97349ccd446eSAtari911const container = document.getElementById(calId); 97359ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles); 97369ccd446eSAtari911 97379ccd446eSAtari911// Applies to past events toggle: 97389ccd446eSAtari911const toggleStyle = 97399ccd446eSAtari911 'background: ' + themeStyles.cell_bg + ';' + 97409ccd446eSAtari911 'color: ' + themeStyles.text_dim + ';' + 97419ccd446eSAtari911 'border-color: ' + themeStyles.grid_border + ';'; 97429ccd446eSAtari911``` 97439ccd446eSAtari911 97449ccd446eSAtari911### Before vs After 97459ccd446eSAtari911 97469ccd446eSAtari911**BEFORE (v4.7.2)**: 97479ccd446eSAtari911``` 97489ccd446eSAtari911Load page with Matrix theme: 97499ccd446eSAtari911┌─────────────┬─────────────┐ 97509ccd446eSAtari911│ Calendar │ Events │ 97519ccd446eSAtari911│ (Green) ✓ │ (Green) ✓ │ 97529ccd446eSAtari911└─────────────┴─────────────┘ 97539ccd446eSAtari911 97549ccd446eSAtari911Click "›" to next month (AJAX): 97559ccd446eSAtari911┌─────────────┬─────────────┐ 97569ccd446eSAtari911│ Calendar │ Events │ 97579ccd446eSAtari911│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 97589ccd446eSAtari911└─────────────┴─────────────┘ 97599ccd446eSAtari911``` 97609ccd446eSAtari911 97619ccd446eSAtari911**AFTER (v4.7.3)**: 97629ccd446eSAtari911``` 97639ccd446eSAtari911Load page with Matrix theme: 97649ccd446eSAtari911┌─────────────┬─────────────┐ 97659ccd446eSAtari911│ Calendar │ Events │ 97669ccd446eSAtari911│ (Green) ✓ │ (Green) ✓ │ 97679ccd446eSAtari911└─────────────┴─────────────┘ 97689ccd446eSAtari911 97699ccd446eSAtari911Click "›" to next month (AJAX): 97709ccd446eSAtari911┌─────────────┬─────────────┐ 97719ccd446eSAtari911│ Calendar │ Events │ 97729ccd446eSAtari911│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 97739ccd446eSAtari911└─────────────┴─────────────┘ 97749ccd446eSAtari911 97759ccd446eSAtari911Navigate anywhere - theme persists! ✓ 97769ccd446eSAtari911``` 97779ccd446eSAtari911 97789ccd446eSAtari911### Data Flow 97799ccd446eSAtari911 97809ccd446eSAtari911**Complete theme persistence**: 97819ccd446eSAtari911``` 97829ccd446eSAtari9111. PHP: Store theme in data attributes 97839ccd446eSAtari911 data-theme-styles='{"bg":"#242424",...}' 97849ccd446eSAtari911 97859ccd446eSAtari9112. JavaScript: Read on initial load 97869ccd446eSAtari911 ✓ Already working (v4.7.1) 97879ccd446eSAtari911 97889ccd446eSAtari9113. JavaScript: Read on AJAX rebuild 97899ccd446eSAtari911 ✓ NOW FIXED (v4.7.3) 97909ccd446eSAtari911 const themeStyles = JSON.parse(container.dataset.themeStyles); 97919ccd446eSAtari911 97929ccd446eSAtari9114. Apply to all rebuilt elements 97939ccd446eSAtari911 ✓ Event items 97949ccd446eSAtari911 ✓ Past toggle 97959ccd446eSAtari911 ✓ Calendar cells 97969ccd446eSAtari911``` 97979ccd446eSAtari911 97989ccd446eSAtari911### Testing Scenarios 97999ccd446eSAtari911 98009ccd446eSAtari911All work perfectly now: 98019ccd446eSAtari911 98029ccd446eSAtari911**Scenario 1: Navigate Months**: 98039ccd446eSAtari911``` 98049ccd446eSAtari911Feb (Matrix) → Click › → Mar (Matrix) ✓ 98059ccd446eSAtari911Theme persists through navigation 98069ccd446eSAtari911``` 98079ccd446eSAtari911 98089ccd446eSAtari911**Scenario 2: Change Year**: 98099ccd446eSAtari911``` 98109ccd446eSAtari9112026 (Purple) → Change to 2027 (Purple) ✓ 98119ccd446eSAtari911Theme persists through year change 98129ccd446eSAtari911``` 98139ccd446eSAtari911 98149ccd446eSAtari911**Scenario 3: Jump to Today**: 98159ccd446eSAtari911``` 98169ccd446eSAtari911Any month (Pink) → Click Today → Current (Pink) ✓ 98179ccd446eSAtari911Theme persists when jumping 98189ccd446eSAtari911``` 98199ccd446eSAtari911 98209ccd446eSAtari911**Scenario 4: Filter Events**: 98219ccd446eSAtari911``` 98229ccd446eSAtari911All events (Professional) → Filter namespace → Filtered (Professional) ✓ 98239ccd446eSAtari911Theme persists through filtering 98249ccd446eSAtari911``` 98259ccd446eSAtari911 98269ccd446eSAtari911### All Themes Work 98279ccd446eSAtari911 98289ccd446eSAtari911** Matrix**: Green everywhere, always ✓ 98299ccd446eSAtari911** Purple**: Purple everywhere, always ✓ 98309ccd446eSAtari911** Professional**: Blue everywhere, always ✓ 98319ccd446eSAtari911** Pink**: Pink everywhere, always ✓ 98329ccd446eSAtari911 98339ccd446eSAtari911**No matter what you do, theme stays consistent!** 98349ccd446eSAtari911 98359ccd446eSAtari911## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 98369ccd446eSAtari911 98379ccd446eSAtari911### Fixed: All Remaining Theme Issues 98389ccd446eSAtari911- **Fixed:** Event items in sidebar now use theme colors 98399ccd446eSAtari911- **Fixed:** Past Events toggle now uses theme colors 98409ccd446eSAtari911- **Fixed:** Calendar cells now properly themed (issue with data passing) 98419ccd446eSAtari911- **Result:** Every element now perfectly themed! 98429ccd446eSAtari911 98439ccd446eSAtari911### What Was Fixed 98449ccd446eSAtari911 98459ccd446eSAtari911**1. Event Items in Sidebar** (was plain): 98469ccd446eSAtari911```php 98479ccd446eSAtari911// Before: 98489ccd446eSAtari911style="border-left-color: $color;" 98499ccd446eSAtari911 98509ccd446eSAtari911// After: 98519ccd446eSAtari911style="border-left-color: $color; 98529ccd446eSAtari911 background: $themeStyles['cell_bg']; 98539ccd446eSAtari911 color: $themeStyles['text_primary'];" 98549ccd446eSAtari911``` 98559ccd446eSAtari911 98569ccd446eSAtari911**2. Past Events Toggle** (was plain): 98579ccd446eSAtari911```php 98589ccd446eSAtari911// Before: 98599ccd446eSAtari911<div class="past-events-toggle"> 98609ccd446eSAtari911 98619ccd446eSAtari911// After: 98629ccd446eSAtari911<div class="past-events-toggle" 98639ccd446eSAtari911 style="background: $themeStyles['cell_bg']; 98649ccd446eSAtari911 color: $themeStyles['text_dim']; 98659ccd446eSAtari911 border-color: $themeStyles['grid_border'];"> 98669ccd446eSAtari911``` 98679ccd446eSAtari911 98689ccd446eSAtari911**3. Theme Data Flow** (was broken): 98699ccd446eSAtari911```php 98709ccd446eSAtari911// Now properly passes theme to all functions: 98719ccd446eSAtari911renderEventListContent($events, $calId, $namespace, $themeStyles); 98729ccd446eSAtari911``` 98739ccd446eSAtari911 98749ccd446eSAtari911### Before vs After 98759ccd446eSAtari911 98769ccd446eSAtari911**BEFORE (v4.7.1)**: 98779ccd446eSAtari911``` 98789ccd446eSAtari911Calendar header: Themed ✓ 98799ccd446eSAtari911Calendar grid: Themed ✓ 98809ccd446eSAtari911Event list panel: Themed ✓ 98819ccd446eSAtari911Event items: Plain gray ✗ 98829ccd446eSAtari911Past Events: Plain gray ✗ 98839ccd446eSAtari911``` 98849ccd446eSAtari911 98859ccd446eSAtari911**AFTER (v4.7.2)**: 98869ccd446eSAtari911``` 98879ccd446eSAtari911Calendar header: Themed ✓ 98889ccd446eSAtari911Calendar grid: Themed ✓ 98899ccd446eSAtari911Event list panel: Themed ✓ 98909ccd446eSAtari911Event items: Themed ✓ 98919ccd446eSAtari911Past Events: Themed ✓ 98929ccd446eSAtari911 98939ccd446eSAtari911Everything matches! ✨ 98949ccd446eSAtari911``` 98959ccd446eSAtari911 98969ccd446eSAtari911### Matrix Theme Example 98979ccd446eSAtari911 98989ccd446eSAtari911**Complete theming**: 98999ccd446eSAtari911``` 99009ccd446eSAtari911┌─────────────┬─────────────┐ 99019ccd446eSAtari911│ February │ Events │ ← Green header 99029ccd446eSAtari911├─────────────┼─────────────┤ 99039ccd446eSAtari911│ Dark cells │ • Meeting │ ← Green bg & text 99049ccd446eSAtari911│ Green text │ • Review │ ← Green bg & text 99059ccd446eSAtari911│ Today=green │ │ 99069ccd446eSAtari911├─────────────┼─────────────┤ 99079ccd446eSAtari911│ │ ▶ Past (5) │ ← Green bg 99089ccd446eSAtari911└─────────────┴─────────────┘ 99099ccd446eSAtari911 99109ccd446eSAtari911All green! ✓ 99119ccd446eSAtari911``` 99129ccd446eSAtari911 99139ccd446eSAtari911### Purple Theme Example 99149ccd446eSAtari911 99159ccd446eSAtari911``` 99169ccd446eSAtari911┌─────────────┬─────────────┐ 99179ccd446eSAtari911│ February │ Events │ ← Purple header 99189ccd446eSAtari911├─────────────┼─────────────┤ 99199ccd446eSAtari911│ Dark purple │ • Meeting │ ← Purple bg 99209ccd446eSAtari911│ Lavender │ • Review │ ← Lavender text 99219ccd446eSAtari911│ cells │ │ 99229ccd446eSAtari911├─────────────┼─────────────┤ 99239ccd446eSAtari911│ │ ▶ Past (5) │ ← Purple bg 99249ccd446eSAtari911└─────────────┴─────────────┘ 99259ccd446eSAtari911 99269ccd446eSAtari911All purple! ✓ 99279ccd446eSAtari911``` 99289ccd446eSAtari911 99299ccd446eSAtari911### Professional Theme Example 99309ccd446eSAtari911 99319ccd446eSAtari911``` 99329ccd446eSAtari911┌─────────────┬─────────────┐ 99339ccd446eSAtari911│ February │ Events │ ← Blue header 99349ccd446eSAtari911├─────────────┼─────────────┤ 99359ccd446eSAtari911│ Light gray │ • Meeting │ ← Light bg 99369ccd446eSAtari911│ Blue accents│ • Review │ ← Dark text 99379ccd446eSAtari911│ cells │ │ 99389ccd446eSAtari911├─────────────┼─────────────┤ 99399ccd446eSAtari911│ │ ▶ Past (5) │ ← Light bg 99409ccd446eSAtari911└─────────────┴─────────────┘ 99419ccd446eSAtari911 99429ccd446eSAtari911All professional! ✓ 99439ccd446eSAtari911``` 99449ccd446eSAtari911 99459ccd446eSAtari911### Pink Theme Example 99469ccd446eSAtari911 99479ccd446eSAtari911``` 99489ccd446eSAtari911┌─────────────┬─────────────┐ 99499ccd446eSAtari911│ February │ Events │ ← Hot pink header 99509ccd446eSAtari911├─────────────┼─────────────┤ 99519ccd446eSAtari911│ Dark pink │ • Meeting │ ← Pink bg 99529ccd446eSAtari911│ Pink text │ • Review │ ← Pink text 99539ccd446eSAtari911│ cells │ │ 99549ccd446eSAtari911├─────────────┼─────────────┤ 99559ccd446eSAtari911│ │ ▶ Past (5) │ ← Pink bg 99569ccd446eSAtari911└─────────────┴─────────────┘ 99579ccd446eSAtari911 99589ccd446eSAtari911All pink & sparkly! ✓ 99599ccd446eSAtari911``` 99609ccd446eSAtari911 99619ccd446eSAtari911### What's Themed Now 99629ccd446eSAtari911 99639ccd446eSAtari911**Calendar Section**: 99649ccd446eSAtari911- ✅ Container border & shadow 99659ccd446eSAtari911- ✅ Header background & text 99669ccd446eSAtari911- ✅ Navigation buttons 99679ccd446eSAtari911- ✅ Today button 99689ccd446eSAtari911- ✅ Grid table 99699ccd446eSAtari911- ✅ Day cells 99709ccd446eSAtari911- ✅ Today cell highlight 99719ccd446eSAtari911- ✅ Empty cells 99729ccd446eSAtari911 99739ccd446eSAtari911**Event List Section**: 99749ccd446eSAtari911- ✅ Panel background 99759ccd446eSAtari911- ✅ Header background 99769ccd446eSAtari911- ✅ Header text 99779ccd446eSAtari911- ✅ Search box 99789ccd446eSAtari911- ✅ Add button 99799ccd446eSAtari911- ✅ Event items ← NEW! 99809ccd446eSAtari911- ✅ Past Events toggle ← NEW! 99819ccd446eSAtari911 99829ccd446eSAtari911**100% themed!** 99839ccd446eSAtari911 99849ccd446eSAtari911## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 99859ccd446eSAtari911 99869ccd446eSAtari911### Fixed: Theme Now Persists When Changing Months 99879ccd446eSAtari911- **Fixed:** Calendar theme no longer resets to default when navigating months 99889ccd446eSAtari911- **Fixed:** Theme data now stored in data attributes and used by JavaScript 99899ccd446eSAtari911- **Added:** rebuildCalendar now applies theme styles to all cells 99909ccd446eSAtari911 99919ccd446eSAtari911### ✨ Added: Event List Panel Now Themed 99929ccd446eSAtari911- **Added:** Right sidebar event list now uses theme colors 99939ccd446eSAtari911- **Added:** Event list header themed 99949ccd446eSAtari911- **Added:** Search box themed 99959ccd446eSAtari911- **Added:** Add button themed 99969ccd446eSAtari911- **Result:** Complete theme consistency across entire calendar! 99979ccd446eSAtari911 99989ccd446eSAtari911### The Problems 99999ccd446eSAtari911 100009ccd446eSAtari911**Problem 1: Month Navigation Lost Theme**: 100019ccd446eSAtari911``` 100029ccd446eSAtari911Initial load: Matrix theme ✓ (green) 100039ccd446eSAtari911Click "›" to next month 100049ccd446eSAtari911Result: Gray calendar ✗ (theme lost!) 100059ccd446eSAtari911``` 100069ccd446eSAtari911 100079ccd446eSAtari911**Problem 2: Event List Not Themed**: 100089ccd446eSAtari911``` 100099ccd446eSAtari911Calendar grid: Themed ✓ 100109ccd446eSAtari911Event list (right side): Plain gray ✗ 100119ccd446eSAtari911Inconsistent! 100129ccd446eSAtari911``` 100139ccd446eSAtari911 100149ccd446eSAtari911### The Fixes 100159ccd446eSAtari911 100169ccd446eSAtari911**Fix 1: Store Theme in Data Attributes**: 100179ccd446eSAtari911 100189ccd446eSAtari911```php 100199ccd446eSAtari911// PHP stores theme data: 100209ccd446eSAtari911<div data-theme="matrix" 100219ccd446eSAtari911 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 100229ccd446eSAtari911``` 100239ccd446eSAtari911 100249ccd446eSAtari911**Fix 2: JavaScript Uses Theme Data**: 100259ccd446eSAtari911 100269ccd446eSAtari911```javascript 100279ccd446eSAtari911// rebuildCalendar reads theme: 100289ccd446eSAtari911const theme = container.dataset.theme; 100299ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles); 100309ccd446eSAtari911 100319ccd446eSAtari911// Apply to cells: 100329ccd446eSAtari911const cellBg = isToday ? 100339ccd446eSAtari911 themeStyles.cell_today_bg : 100349ccd446eSAtari911 themeStyles.cell_bg; 100359ccd446eSAtari911``` 100369ccd446eSAtari911 100379ccd446eSAtari911**Fix 3: Theme Event List Panel**: 100389ccd446eSAtari911 100399ccd446eSAtari911```php 100409ccd446eSAtari911// Event list header: 100419ccd446eSAtari911style="background:{$themeStyles['header_bg']}; 100429ccd446eSAtari911 color:{$themeStyles['text_primary']};" 100439ccd446eSAtari911 100449ccd446eSAtari911// Event list container: 100459ccd446eSAtari911style="background:{$themeStyles['bg']};" 100469ccd446eSAtari911 100479ccd446eSAtari911// Search box: 100489ccd446eSAtari911style="background:{$themeStyles['cell_bg']}; 100499ccd446eSAtari911 color:{$themeStyles['text_primary']};" 100509ccd446eSAtari911 100519ccd446eSAtari911// Add button: 100529ccd446eSAtari911style="background:{$themeStyles['border']};" 100539ccd446eSAtari911``` 100549ccd446eSAtari911 100559ccd446eSAtari911### Before vs After 100569ccd446eSAtari911 100579ccd446eSAtari911**BEFORE (v4.7.0)**: 100589ccd446eSAtari911``` 100599ccd446eSAtari911Load page: Matrix theme everywhere ✓ 100609ccd446eSAtari911Navigate to next month: 100619ccd446eSAtari911 Calendar grid: Gray ✗ (theme lost) 100629ccd446eSAtari911 Event list: Gray ✗ (never themed) 100639ccd446eSAtari911``` 100649ccd446eSAtari911 100659ccd446eSAtari911**AFTER (v4.7.1)**: 100669ccd446eSAtari911``` 100679ccd446eSAtari911Load page: Matrix theme everywhere ✓ 100689ccd446eSAtari911Navigate to next month: 100699ccd446eSAtari911 Calendar grid: Matrix theme ✓ (preserved!) 100709ccd446eSAtari911 Event list: Matrix theme ✓ (themed!) 100719ccd446eSAtari911 100729ccd446eSAtari911Perfect consistency! ✨ 100739ccd446eSAtari911``` 100749ccd446eSAtari911 100759ccd446eSAtari911### What's Now Themed 100769ccd446eSAtari911 100779ccd446eSAtari911**Calendar Grid** (after navigation): 100789ccd446eSAtari911- ✅ Cell backgrounds 100799ccd446eSAtari911- ✅ Today cell highlight 100809ccd446eSAtari911- ✅ Empty cells 100819ccd446eSAtari911- ✅ Text colors 100829ccd446eSAtari911- ✅ Border colors 100839ccd446eSAtari911 100849ccd446eSAtari911**Event List Panel**: 100859ccd446eSAtari911- ✅ Panel background 100869ccd446eSAtari911- ✅ Header background & text 100879ccd446eSAtari911- ✅ Search box styling 100889ccd446eSAtari911- ✅ Add button colors 100899ccd446eSAtari911- ✅ Namespace badge 100909ccd446eSAtari911 100919ccd446eSAtari911### Technical Implementation 100929ccd446eSAtari911 100939ccd446eSAtari911**Data Flow**: 100949ccd446eSAtari911``` 100959ccd446eSAtari9111. PHP: Get theme from config 100969ccd446eSAtari911 $theme = getSidebarTheme(); 100979ccd446eSAtari911 100989ccd446eSAtari9112. PHP: Get theme styles 100999ccd446eSAtari911 $themeStyles = getSidebarThemeStyles($theme); 101009ccd446eSAtari911 101019ccd446eSAtari9113. PHP: Store in data attributes 101029ccd446eSAtari911 data-theme="matrix" 101039ccd446eSAtari911 data-theme-styles='{...JSON...}' 101049ccd446eSAtari911 101059ccd446eSAtari9114. JavaScript: Read on navigation 101069ccd446eSAtari911 const themeStyles = JSON.parse(container.dataset.themeStyles); 101079ccd446eSAtari911 101089ccd446eSAtari9115. JavaScript: Apply to rebuilt elements 101099ccd446eSAtari911 style="background:${themeStyles.bg};" 101109ccd446eSAtari911``` 101119ccd446eSAtari911 101129ccd446eSAtari911**Result**: Theme persists across navigations! ✓ 101139ccd446eSAtari911 101149ccd446eSAtari911### All Themes Work Perfectly 101159ccd446eSAtari911 101169ccd446eSAtari911** Matrix**: 101179ccd446eSAtari911- Month change: Green ✓ 101189ccd446eSAtari911- Event list: Green ✓ 101199ccd446eSAtari911 101209ccd446eSAtari911** Purple**: 101219ccd446eSAtari911- Month change: Purple ✓ 101229ccd446eSAtari911- Event list: Purple ✓ 101239ccd446eSAtari911 101249ccd446eSAtari911** Professional**: 101259ccd446eSAtari911- Month change: Blue ✓ 101269ccd446eSAtari911- Event list: Blue ✓ 101279ccd446eSAtari911 101289ccd446eSAtari911** Pink**: 101299ccd446eSAtari911- Month change: Pink ✓ 101309ccd446eSAtari911- Event list: Pink ✓ 101319ccd446eSAtari911 101329ccd446eSAtari911**Fully consistent theming everywhere!** 101339ccd446eSAtari911 101349ccd446eSAtari911## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 101359ccd446eSAtari911 101369ccd446eSAtari911### ✨ Major Feature: Themes Now Apply to Compact Calendar 101379ccd446eSAtari911- **Added:** Full theme support for {{calendar-compact}} 101389ccd446eSAtari911- **Added:** Matrix, Purple, Professional, and Pink themes 101399ccd446eSAtari911- **Added:** Consistent theming across sidebar and calendar 101409ccd446eSAtari911- **Result:** Beautiful, cohesive appearance! 101419ccd446eSAtari911 101429ccd446eSAtari911### What's New 101439ccd446eSAtari911 101449ccd446eSAtari911**All 4 themes now work on the calendar**: 101459ccd446eSAtari911- **Matrix** - Green cyberpunk (default) 101469ccd446eSAtari911- **Purple** - Royal purple elegance 101479ccd446eSAtari911- **Professional** - Clean business blue 101489ccd446eSAtari911- **Pink** - Sparkly pink bling 101499ccd446eSAtari911 101509ccd446eSAtari911**Set in Admin Panel** → Theme applies everywhere! 101519ccd446eSAtari911 101529ccd446eSAtari911### Before vs After 101539ccd446eSAtari911 101549ccd446eSAtari911**BEFORE (v4.6.8)**: 101559ccd446eSAtari911``` 101569ccd446eSAtari911Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 101579ccd446eSAtari911Calendar: Plain gray (no theme) ✗ 101589ccd446eSAtari911 101599ccd446eSAtari911Inconsistent appearance! 101609ccd446eSAtari911``` 101619ccd446eSAtari911 101629ccd446eSAtari911**AFTER (v4.7.0)**: 101639ccd446eSAtari911``` 101649ccd446eSAtari911Sidebar: Themed ✓ 101659ccd446eSAtari911Calendar: SAME THEME ✓ 101669ccd446eSAtari911 101679ccd446eSAtari911Perfectly consistent! ✨ 101689ccd446eSAtari911``` 101699ccd446eSAtari911 101709ccd446eSAtari911### Theme Showcase 101719ccd446eSAtari911 101729ccd446eSAtari911**Matrix Theme** (Green): 101739ccd446eSAtari911``` 101749ccd446eSAtari911┌─────────────────────────┐ 101759ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Green header 101769ccd446eSAtari911├─────────────────────────┤ 101779ccd446eSAtari911│ Dark background │ 101789ccd446eSAtari911│ Green borders │ 101799ccd446eSAtari911│ Green text │ 101809ccd446eSAtari911│ Green glow effects │ 101819ccd446eSAtari911└─────────────────────────┘ 101829ccd446eSAtari911``` 101839ccd446eSAtari911 101849ccd446eSAtari911**Purple Theme**: 101859ccd446eSAtari911``` 101869ccd446eSAtari911┌─────────────────────────┐ 101879ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Purple header 101889ccd446eSAtari911├─────────────────────────┤ 101899ccd446eSAtari911│ Dark purple background │ 101909ccd446eSAtari911│ Purple borders │ 101919ccd446eSAtari911│ Lavender text │ 101929ccd446eSAtari911│ Purple glow │ 101939ccd446eSAtari911└─────────────────────────┘ 101949ccd446eSAtari911``` 101959ccd446eSAtari911 101969ccd446eSAtari911**Professional Theme** (Light): 101979ccd446eSAtari911``` 101989ccd446eSAtari911┌─────────────────────────┐ 101999ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Blue header 102009ccd446eSAtari911├─────────────────────────┤ 102019ccd446eSAtari911│ Light gray background │ 102029ccd446eSAtari911│ Blue accents │ 102039ccd446eSAtari911│ Professional appearance │ 102049ccd446eSAtari911│ Clean, business-ready │ 102059ccd446eSAtari911└─────────────────────────┘ 102069ccd446eSAtari911``` 102079ccd446eSAtari911 102089ccd446eSAtari911**Pink Theme** (Bling): 102099ccd446eSAtari911``` 102109ccd446eSAtari911┌─────────────────────────┐ 102119ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Hot pink header 102129ccd446eSAtari911├─────────────────────────┤ 102139ccd446eSAtari911│ Dark pink background │ 102149ccd446eSAtari911│ Pink borders & glow │ 102159ccd446eSAtari911│ Pink text │ 102169ccd446eSAtari911│ Sparkle effects ✨ │ 102179ccd446eSAtari911└─────────────────────────┘ 102189ccd446eSAtari911``` 102199ccd446eSAtari911 102209ccd446eSAtari911### What's Themed 102219ccd446eSAtari911 102229ccd446eSAtari911**Calendar Container**: 102239ccd446eSAtari911- Background color 102249ccd446eSAtari911- Border color 102259ccd446eSAtari911- Shadow/glow effect 102269ccd446eSAtari911 102279ccd446eSAtari911**Calendar Header**: 102289ccd446eSAtari911- Background gradient 102299ccd446eSAtari911- Border color 102309ccd446eSAtari911- Text color 102319ccd446eSAtari911- Button colors 102329ccd446eSAtari911 102339ccd446eSAtari911**Calendar Grid**: 102349ccd446eSAtari911- Grid background 102359ccd446eSAtari911- Grid borders 102369ccd446eSAtari911- Header row colors 102379ccd446eSAtari911 102389ccd446eSAtari911**Calendar Cells**: 102399ccd446eSAtari911- Cell background 102409ccd446eSAtari911- Today cell highlight 102419ccd446eSAtari911- Text color 102429ccd446eSAtari911- Border colors 102439ccd446eSAtari911 102449ccd446eSAtari911### Implementation 102459ccd446eSAtari911 102469ccd446eSAtari911**Theme Detection**: 102479ccd446eSAtari911```php 102489ccd446eSAtari911// Same theme system as sidebar 102499ccd446eSAtari911$theme = $this->getSidebarTheme(); 102509ccd446eSAtari911$themeStyles = $this->getSidebarThemeStyles($theme); 102519ccd446eSAtari911``` 102529ccd446eSAtari911 102539ccd446eSAtari911**Applied to Container**: 102549ccd446eSAtari911```php 102559ccd446eSAtari911style="background:' . $themeStyles['bg'] . '; 102569ccd446eSAtari911 border:2px solid ' . $themeStyles['border'] . '; 102579ccd446eSAtari911 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 102589ccd446eSAtari911``` 102599ccd446eSAtari911 102609ccd446eSAtari911**Applied to Header**: 102619ccd446eSAtari911```php 102629ccd446eSAtari911style="background:' . $themeStyles['header_bg'] . '; 102639ccd446eSAtari911 color:' . $themeStyles['text_primary'] . ';" 102649ccd446eSAtari911``` 102659ccd446eSAtari911 102669ccd446eSAtari911**Applied to Cells**: 102679ccd446eSAtari911```php 102689ccd446eSAtari911$cellBg = $isToday ? 102699ccd446eSAtari911 $themeStyles['cell_today_bg'] : 102709ccd446eSAtari911 $themeStyles['cell_bg']; 102719ccd446eSAtari911``` 102729ccd446eSAtari911 102739ccd446eSAtari911### How to Change Theme 102749ccd446eSAtari911 102759ccd446eSAtari911**In Admin Panel**: 102769ccd446eSAtari9111. Go to Admin → Calendar Management 102779ccd446eSAtari9112. Click " Themes" tab 102789ccd446eSAtari9113. Select theme (Matrix/Purple/Professional/Pink) 102799ccd446eSAtari9114. Theme applies to BOTH sidebar and calendar! ✓ 102809ccd446eSAtari911 102819ccd446eSAtari911**No configuration needed** - Just select and enjoy! 102829ccd446eSAtari911 102839ccd446eSAtari911### Theme Colors 102849ccd446eSAtari911 102859ccd446eSAtari911**Matrix**: 102869ccd446eSAtari911- Background: `#242424` (dark gray) 102879ccd446eSAtari911- Border: `#00cc07` (matrix green) 102889ccd446eSAtari911- Text: `#00cc07` (green) 102899ccd446eSAtari911- Today: `#2a4d2a` (green highlight) 102909ccd446eSAtari911 102919ccd446eSAtari911**Purple**: 102929ccd446eSAtari911- Background: `#2a2030` (dark purple) 102939ccd446eSAtari911- Border: `#9b59b6` (royal purple) 102949ccd446eSAtari911- Text: `#b19cd9` (lavender) 102959ccd446eSAtari911- Today: `#3d2b4d` (purple highlight) 102969ccd446eSAtari911 102979ccd446eSAtari911**Professional**: 102989ccd446eSAtari911- Background: `#e8ecf1` (light blue-gray) 102999ccd446eSAtari911- Border: `#4a90e2` (business blue) 103009ccd446eSAtari911- Text: `#2c3e50` (dark blue-gray) 103019ccd446eSAtari911- Today: `#dce8f7` (light blue highlight) 103029ccd446eSAtari911 103039ccd446eSAtari911**Pink**: 103049ccd446eSAtari911- Background: `#1a0d14` (dark pink-black) 103059ccd446eSAtari911- Border: `#ff1493` (hot pink) 103069ccd446eSAtari911- Text: `#ff69b4` (pink) 103079ccd446eSAtari911- Today: `#3d2030` (pink highlight) 103089ccd446eSAtari911 103099ccd446eSAtari911### Consistency 103109ccd446eSAtari911 103119ccd446eSAtari911**Both use same theme**: 103129ccd446eSAtari911``` 103139ccd446eSAtari911Admin Panel → Set theme to "Purple" 103149ccd446eSAtari911 103159ccd446eSAtari911{{calendar}} sidebar: Purple theme ✓ 103169ccd446eSAtari911{{calendar-compact}}: Purple theme ✓ 103179ccd446eSAtari911{{calendar-panel}}: Will be themed next! ✓ 103189ccd446eSAtari911 103199ccd446eSAtari911All calendars match! ✨ 103209ccd446eSAtari911``` 103219ccd446eSAtari911 103229ccd446eSAtari911**Perfectly coordinated appearance!** 103239ccd446eSAtari911 103249ccd446eSAtari911## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 103259ccd446eSAtari911 103269ccd446eSAtari911### Documentation: Added noheader Parameter Info 103279ccd446eSAtari911- **Added:** Documentation for existing `noheader` parameter 103289ccd446eSAtari911- **Updated:** README with complete eventlist parameter list 103299ccd446eSAtari911- **Info:** Feature already existed, just wasn't documented! 103309ccd446eSAtari911 103319ccd446eSAtari911### The noheader Parameter 103329ccd446eSAtari911 103339ccd446eSAtari911**What it does**: Hides the clock/date/weather header in eventlist 103349ccd446eSAtari911 103359ccd446eSAtari911**Usage**: 103369ccd446eSAtari911``` 103379ccd446eSAtari911{{eventlist today noheader}} 103389ccd446eSAtari911``` 103399ccd446eSAtari911 103409ccd446eSAtari911**Before (with header)**: 103419ccd446eSAtari911``` 103429ccd446eSAtari911┌─────────────────────────────────┐ 103439ccd446eSAtari911│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 103449ccd446eSAtari911├─────────────────────────────────┤ 103459ccd446eSAtari911│ 5 min load │ CPU │ Memory │ ← System stats 103469ccd446eSAtari911├─────────────────────────────────┤ 103479ccd446eSAtari911│ Today's Events │ 103489ccd446eSAtari911│ • 10:00 Team Meeting │ 103499ccd446eSAtari911│ • 2:00 Project Review │ 103509ccd446eSAtari911└─────────────────────────────────┘ 103519ccd446eSAtari911``` 103529ccd446eSAtari911 103539ccd446eSAtari911**After (noheader)**: 103549ccd446eSAtari911``` 103559ccd446eSAtari911┌─────────────────────────────────┐ 103569ccd446eSAtari911│ Today's Events │ ← No header! 103579ccd446eSAtari911│ • 10:00 Team Meeting │ 103589ccd446eSAtari911│ • 2:00 Project Review │ 103599ccd446eSAtari911└─────────────────────────────────┘ 103609ccd446eSAtari911 103619ccd446eSAtari911Cleaner, more compact! ✓ 103629ccd446eSAtari911``` 103639ccd446eSAtari911 103649ccd446eSAtari911### When to Use noheader 103659ccd446eSAtari911 103669ccd446eSAtari911**Use WITH header** (default): 103679ccd446eSAtari911- Dashboard view 103689ccd446eSAtari911- Want to see current time 103699ccd446eSAtari911- Want weather info 103709ccd446eSAtari911- Want system stats 103719ccd446eSAtari911 103729ccd446eSAtari911**Use WITHOUT header** (`noheader`): 103739ccd446eSAtari911- Embedded in page content 103749ccd446eSAtari911- Just want event list 103759ccd446eSAtari911- Minimal design 103769ccd446eSAtari911- Space-constrained 103779ccd446eSAtari911 103789ccd446eSAtari911### Complete eventlist Parameters 103799ccd446eSAtari911 103809ccd446eSAtari911**Date Parameters**: 103819ccd446eSAtari911``` 103829ccd446eSAtari911date=YYYY-MM-DD Show specific date 103839ccd446eSAtari911daterange=START:END Show date range 103849ccd446eSAtari911``` 103859ccd446eSAtari911 103869ccd446eSAtari911**Filter Parameters**: 103879ccd446eSAtari911``` 103889ccd446eSAtari911namespace=name Filter by namespace 103899ccd446eSAtari911``` 103909ccd446eSAtari911 103919ccd446eSAtari911**Display Parameters**: 103929ccd446eSAtari911``` 103939ccd446eSAtari911today Show today with live clock 103949ccd446eSAtari911noheader Hide clock/date/weather header 103959ccd446eSAtari911showchecked Show completed tasks 103969ccd446eSAtari911range=day|week|month Show day/week/month range 103979ccd446eSAtari911``` 103989ccd446eSAtari911 103999ccd446eSAtari911### Examples 104009ccd446eSAtari911 104019ccd446eSAtari911**Full featured** (dashboard): 104029ccd446eSAtari911``` 104039ccd446eSAtari911{{eventlist today}} 104049ccd446eSAtari911``` 104059ccd446eSAtari911Shows: Clock, weather, system stats, events ✓ 104069ccd446eSAtari911 104079ccd446eSAtari911**Minimal** (embedded): 104089ccd446eSAtari911``` 104099ccd446eSAtari911{{eventlist today noheader}} 104109ccd446eSAtari911``` 104119ccd446eSAtari911Shows: Just events ✓ 104129ccd446eSAtari911 104139ccd446eSAtari911**Date range without header**: 104149ccd446eSAtari911``` 104159ccd446eSAtari911{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 104169ccd446eSAtari911``` 104179ccd446eSAtari911Shows: Events for February, no header ✓ 104189ccd446eSAtari911 104199ccd446eSAtari911**With namespace filter**: 104209ccd446eSAtari911``` 104219ccd446eSAtari911{{eventlist today namespace=work noheader}} 104229ccd446eSAtari911``` 104239ccd446eSAtari911Shows: Today's work events, no header ✓ 104249ccd446eSAtari911 104259ccd446eSAtari911### Implementation 104269ccd446eSAtari911 104279ccd446eSAtari911**Already existed in code** (line 833): 104289ccd446eSAtari911```php 104299ccd446eSAtari911$noheader = isset($data['noheader']) ? true : false; 104309ccd446eSAtari911``` 104319ccd446eSAtari911 104329ccd446eSAtari911**Applied at render** (line 1010): 104339ccd446eSAtari911```php 104349ccd446eSAtari911if ($today && !empty($allEvents) && !$noheader) { 104359ccd446eSAtari911 // Render clock header with date/time/weather 104369ccd446eSAtari911} 104379ccd446eSAtari911``` 104389ccd446eSAtari911 104399ccd446eSAtari911**Just wasn't documented!** Now it is. ✓ 104409ccd446eSAtari911 104419ccd446eSAtari911## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 104429ccd446eSAtari911 104439ccd446eSAtari911### ✨ Improvement: Removed Filter Badge Above Sidebar 104449ccd446eSAtari911- **Removed:** Filter badge no longer shows above compact calendar 104459ccd446eSAtari911- **Reason:** Filtering is already clearly visible in the calendar view 104469ccd446eSAtari911- **Result:** Cleaner UI, less redundancy 104479ccd446eSAtari911 104489ccd446eSAtari911### What Changed 104499ccd446eSAtari911 104509ccd446eSAtari911**BEFORE**: 104519ccd446eSAtari911``` 104529ccd446eSAtari911┌─────────────────────────┐ 104539ccd446eSAtari911│ Filtering: work ✕ │ ← Badge above calendar 104549ccd446eSAtari911├─────────────────────────┤ 104559ccd446eSAtari911│ ◀ February 2026 ▶ │ 104569ccd446eSAtari911├─────────────────────────┤ 104579ccd446eSAtari911│ Calendar grid with │ 104589ccd446eSAtari911│ filtered events │ ← Already filtered 104599ccd446eSAtari911└─────────────────────────┘ 104609ccd446eSAtari911 104619ccd446eSAtari911Badge was redundant - you can already see 104629ccd446eSAtari911the filtering in the calendar! 104639ccd446eSAtari911``` 104649ccd446eSAtari911 104659ccd446eSAtari911**AFTER**: 104669ccd446eSAtari911``` 104679ccd446eSAtari911┌─────────────────────────┐ 104689ccd446eSAtari911│ ◀ February 2026 ▶ │ ← No badge! 104699ccd446eSAtari911├─────────────────────────┤ 104709ccd446eSAtari911│ Calendar grid with │ 104719ccd446eSAtari911│ filtered events │ ← Filtering visible here 104729ccd446eSAtari911└─────────────────────────┘ 104739ccd446eSAtari911 104749ccd446eSAtari911Cleaner, simpler UI ✓ 104759ccd446eSAtari911``` 104769ccd446eSAtari911 104779ccd446eSAtari911### Why Remove It? 104789ccd446eSAtari911 104799ccd446eSAtari911**Redundant Information**: 104809ccd446eSAtari911- Calendar already shows only filtered events 104819ccd446eSAtari911- Namespace badges on events show which namespace 104829ccd446eSAtari911- Badge added visual clutter without value 104839ccd446eSAtari911 104849ccd446eSAtari911**Better UX**: 104859ccd446eSAtari911- Less visual noise 104869ccd446eSAtari911- More space for content 104879ccd446eSAtari911- Filtering still obvious from event display 104889ccd446eSAtari911 104899ccd446eSAtari911**Code Cleanup**: 104909ccd446eSAtari911```php 104919ccd446eSAtari911// Old code (removed): 104929ccd446eSAtari911if ($namespace && $namespace !== '*' && ...) { 104939ccd446eSAtari911 $html .= '<div class="calendar-namespace-filter">'; 104949ccd446eSAtari911 $html .= 'Filtering: ' . $namespace . ' ✕'; 104959ccd446eSAtari911 $html .= '</div>'; 104969ccd446eSAtari911} 104979ccd446eSAtari911 104989ccd446eSAtari911// New code: 104999ccd446eSAtari911// Filter badge removed - filtering shown in calendar view only 105009ccd446eSAtari911``` 105019ccd446eSAtari911 105029ccd446eSAtari911### How Filtering Still Works 105039ccd446eSAtari911 105049ccd446eSAtari911**Filtering IS Active**: 105059ccd446eSAtari911- Calendar only shows events from selected namespace ✓ 105069ccd446eSAtari911- Event namespace badges show which namespace ✓ 105079ccd446eSAtari911- Clear filtering still works (in calendar) ✓ 105089ccd446eSAtari911 105099ccd446eSAtari911**Just No Badge**: 105109ccd446eSAtari911- No redundant "Filtering: work ✕" above calendar 105119ccd446eSAtari911- Cleaner, more professional appearance 105129ccd446eSAtari911 105139ccd446eSAtari911### What You Still See 105149ccd446eSAtari911 105159ccd446eSAtari911**Namespace Information**: 105169ccd446eSAtari911``` 105179ccd446eSAtari911Event with namespace badge: 105189ccd446eSAtari911┌────────────────────────┐ 105199ccd446eSAtari911│ 10:00 Team Meeting │ 105209ccd446eSAtari911│ [work] ←─────────┼─ Namespace badge on event 105219ccd446eSAtari911└────────────────────────┘ 105229ccd446eSAtari911``` 105239ccd446eSAtari911 105249ccd446eSAtari911**Filtered View**: 105259ccd446eSAtari911- Only events from selected namespace visible 105269ccd446eSAtari911- Empty dates show no events 105279ccd446eSAtari911- Clear which namespace you're viewing 105289ccd446eSAtari911 105299ccd446eSAtari911**No Need for Top Badge**: 105309ccd446eSAtari911- Already obvious from events shown 105319ccd446eSAtari911- Namespace badges provide context 105329ccd446eSAtari911- Less clutter! 105339ccd446eSAtari911 105349ccd446eSAtari911### Summary 105359ccd446eSAtari911 105369ccd446eSAtari911**Removed**: Filter badge above calendar 105379ccd446eSAtari911**Kept**: All filtering functionality 105389ccd446eSAtari911**Benefit**: Cleaner UI 105399ccd446eSAtari911 105409ccd446eSAtari911**Filtering works the same, just without the redundant badge!** ✨ 105419ccd446eSAtari911 105429ccd446eSAtari911## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 105439ccd446eSAtari911 105449ccd446eSAtari911### Fixed: Filter Badge Now Disappears Immediately 105459ccd446eSAtari911- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 105469ccd446eSAtari911- **Added:** Badge removal before page reload/AJAX call 105479ccd446eSAtari911- **Result:** Badge disappears instantly, no waiting for reload 105489ccd446eSAtari911 105499ccd446eSAtari911### The Problem 105509ccd446eSAtari911 105519ccd446eSAtari911**v4.6.5 behavior**: 105529ccd446eSAtari911``` 105539ccd446eSAtari911Click ✕ to clear filter 105549ccd446eSAtari911→ Page reloads or AJAX fires 105559ccd446eSAtari911→ Badge stays visible during reload ✗ 105569ccd446eSAtari911→ Badge finally disappears after reload ✓ 105579ccd446eSAtari911 105589ccd446eSAtari911User sees badge for 0.5-2 seconds after clicking ✕ 105599ccd446eSAtari911Feels laggy! ✗ 105609ccd446eSAtari911``` 105619ccd446eSAtari911 105629ccd446eSAtari911### The Fix 105639ccd446eSAtari911 105649ccd446eSAtari911**Immediately remove badge from DOM**: 105659ccd446eSAtari911 105669ccd446eSAtari911```javascript 105679ccd446eSAtari911window.clearNamespaceFilter = function(calId) { 105689ccd446eSAtari911 const container = document.getElementById(calId); 105699ccd446eSAtari911 105709ccd446eSAtari911 // IMMEDIATELY hide/remove the filter badge 105719ccd446eSAtari911 const filterBadge = container.querySelector('.calendar-namespace-filter'); 105729ccd446eSAtari911 if (filterBadge) { 105739ccd446eSAtari911 filterBadge.style.display = 'none'; // Hide instantly 105749ccd446eSAtari911 filterBadge.remove(); // Remove from DOM 105759ccd446eSAtari911 } 105769ccd446eSAtari911 105779ccd446eSAtari911 // THEN reload (AJAX or page reload) 105789ccd446eSAtari911 navCalendar(...) or window.location.href = ... 105799ccd446eSAtari911}; 105809ccd446eSAtari911``` 105819ccd446eSAtari911 105829ccd446eSAtari911### Before vs After 105839ccd446eSAtari911 105849ccd446eSAtari911**BEFORE (v4.6.5)**: 105859ccd446eSAtari911``` 105869ccd446eSAtari911Time 0ms: Click ✕ 105879ccd446eSAtari911┌─────────────────────────┐ 105889ccd446eSAtari911│ Filtering: work ✕ │ ← Still visible 105899ccd446eSAtari911├─────────────────────────┤ 105909ccd446eSAtari911 105919ccd446eSAtari911Time 500ms: Reload completes 105929ccd446eSAtari911┌─────────────────────────┐ 105939ccd446eSAtari911│ (no badge) │ ← Finally gone 105949ccd446eSAtari911├─────────────────────────┤ 105959ccd446eSAtari911 105969ccd446eSAtari911Delay: 500-2000ms ✗ 105979ccd446eSAtari911``` 105989ccd446eSAtari911 105999ccd446eSAtari911**AFTER (v4.6.6)**: 106009ccd446eSAtari911``` 106019ccd446eSAtari911Time 0ms: Click ✕ 106029ccd446eSAtari911┌─────────────────────────┐ 106039ccd446eSAtari911│ (no badge) │ ← Gone immediately! 106049ccd446eSAtari911├─────────────────────────┤ 106059ccd446eSAtari911 106069ccd446eSAtari911Time 500ms: Reload completes 106079ccd446eSAtari911┌─────────────────────────┐ 106089ccd446eSAtari911│ (no badge) │ ← Still gone 106099ccd446eSAtari911├─────────────────────────┤ 106109ccd446eSAtari911 106119ccd446eSAtari911Delay: 0ms ✓ 106129ccd446eSAtari911Instant feedback! ✓ 106139ccd446eSAtari911``` 106149ccd446eSAtari911 106159ccd446eSAtari911### Implementation 106169ccd446eSAtari911 106179ccd446eSAtari911**Two-step removal**: 106189ccd446eSAtari911 106199ccd446eSAtari911**Step 1**: Hide immediately 106209ccd446eSAtari911```javascript 106219ccd446eSAtari911filterBadge.style.display = 'none'; 106229ccd446eSAtari911// User sees badge disappear instantly 106239ccd446eSAtari911``` 106249ccd446eSAtari911 106259ccd446eSAtari911**Step 2**: Remove from DOM 106269ccd446eSAtari911```javascript 106279ccd446eSAtari911filterBadge.remove(); 106289ccd446eSAtari911// Clean up HTML 106299ccd446eSAtari911``` 106309ccd446eSAtari911 106319ccd446eSAtari911**Step 3**: Reload 106329ccd446eSAtari911```javascript 106339ccd446eSAtari911// Sidebar: Page reload 106349ccd446eSAtari911window.location.href = url.toString(); 106359ccd446eSAtari911 106369ccd446eSAtari911// Calendar: AJAX reload 106379ccd446eSAtari911navCalendar(calId, year, month, originalNamespace); 106389ccd446eSAtari911``` 106399ccd446eSAtari911 106409ccd446eSAtari911**Result**: Badge gone BEFORE reload starts ✓ 106419ccd446eSAtari911 106429ccd446eSAtari911### Why This Matters 106439ccd446eSAtari911 106449ccd446eSAtari911**User Experience**: 106459ccd446eSAtari911- Old: Click ✕ → Wait → Badge disappears 106469ccd446eSAtari911- New: Click ✕ → Badge disappears instantly 106479ccd446eSAtari911 106489ccd446eSAtari911**Perceived Performance**: 106499ccd446eSAtari911- Instant visual feedback 106509ccd446eSAtari911- Feels responsive 106519ccd446eSAtari911- Professional UX 106529ccd446eSAtari911 106539ccd446eSAtari911**Technical**: 106549ccd446eSAtari911- DOM manipulation is synchronous (instant) 106559ccd446eSAtari911- Network requests are asynchronous (slow) 106569ccd446eSAtari911- Do fast things first! 106579ccd446eSAtari911 106589ccd446eSAtari911**Badge now disappears the moment you click ✕!** ⚡ 106599ccd446eSAtari911 106609ccd446eSAtari911## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 106619ccd446eSAtari911 106629ccd446eSAtari911### Fixed: Filter Badge Not Clearing in Sidebar 106639ccd446eSAtari911- **Fixed:** Filter badge now properly clears when clicking ✕ button 106649ccd446eSAtari911- **Fixed:** Sidebar widget now reloads page without namespace filter 106659ccd446eSAtari911- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 106669ccd446eSAtari911 106679ccd446eSAtari911### The Problem 106689ccd446eSAtari911 106699ccd446eSAtari911**In {{calendar}} sidebar widget**: 106709ccd446eSAtari911``` 106719ccd446eSAtari9111. Click namespace badge to filter 106729ccd446eSAtari9112. Badge appears: "Filtering: work ✕" 106739ccd446eSAtari9113. Click ✕ to clear filter 106749ccd446eSAtari9114. Badge stays visible! ✗ 106759ccd446eSAtari9115. Events still filtered! ✗ 106769ccd446eSAtari911``` 106779ccd446eSAtari911 106789ccd446eSAtari911**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 106799ccd446eSAtari911 106809ccd446eSAtari911### The Fix 106819ccd446eSAtari911 106829ccd446eSAtari911**Detect widget type and handle appropriately**: 106839ccd446eSAtari911 106849ccd446eSAtari911```javascript 106859ccd446eSAtari911window.clearNamespaceFilter = function(calId) { 106869ccd446eSAtari911 const container = document.getElementById(calId); 106879ccd446eSAtari911 106889ccd446eSAtari911 // Check if this is a sidebar widget 106899ccd446eSAtari911 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 106909ccd446eSAtari911 106919ccd446eSAtari911 if (sidebarContainer) { 106929ccd446eSAtari911 // SIDEBAR: Reload page without namespace parameter 106939ccd446eSAtari911 const url = new URL(window.location.href); 106949ccd446eSAtari911 url.searchParams.delete('namespace'); 106959ccd446eSAtari911 window.location.href = url.toString(); // Page reload 106969ccd446eSAtari911 return; 106979ccd446eSAtari911 } 106989ccd446eSAtari911 106999ccd446eSAtari911 // REGULAR CALENDAR: AJAX reload 107009ccd446eSAtari911 navCalendar(calId, year, month, originalNamespace); 107019ccd446eSAtari911}; 107029ccd446eSAtari911``` 107039ccd446eSAtari911 107049ccd446eSAtari911### How It Works 107059ccd446eSAtari911 107069ccd446eSAtari911**Sidebar Widget** ({{calendar}} syntax): 107079ccd446eSAtari911``` 107089ccd446eSAtari911Rendered server-side with PHP 107099ccd446eSAtari911Cannot be AJAX-reloaded 107109ccd446eSAtari911Solution: Reload entire page without ?namespace=work parameter 107119ccd446eSAtari911``` 107129ccd446eSAtari911 107139ccd446eSAtari911**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 107149ccd446eSAtari911``` 107159ccd446eSAtari911Has AJAX reload capability 107169ccd446eSAtari911Solution: Call navCalendar() to reload via AJAX 107179ccd446eSAtari911``` 107189ccd446eSAtari911 107199ccd446eSAtari911### Before vs After 107209ccd446eSAtari911 107219ccd446eSAtari911**BEFORE (v4.6.4)**: 107229ccd446eSAtari911``` 107239ccd446eSAtari911Sidebar widget filtered by "work": 107249ccd446eSAtari911┌─────────────────────────┐ 107259ccd446eSAtari911│ Filtering: work ✕ │ ← Click ✕ 107269ccd446eSAtari911├─────────────────────────┤ 107279ccd446eSAtari911│ Today │ 107289ccd446eSAtari911│ • Work meeting │ 107299ccd446eSAtari911└─────────────────────────┘ 107309ccd446eSAtari911 107319ccd446eSAtari911After clicking ✕: 107329ccd446eSAtari911┌─────────────────────────┐ 107339ccd446eSAtari911│ Filtering: work ✕ │ ← Still there! ✗ 107349ccd446eSAtari911├─────────────────────────┤ 107359ccd446eSAtari911│ Today │ 107369ccd446eSAtari911│ • Work meeting │ ← Still filtered! ✗ 107379ccd446eSAtari911└─────────────────────────┘ 107389ccd446eSAtari911``` 107399ccd446eSAtari911 107409ccd446eSAtari911**AFTER (v4.6.5)**: 107419ccd446eSAtari911``` 107429ccd446eSAtari911Sidebar widget filtered by "work": 107439ccd446eSAtari911┌─────────────────────────┐ 107449ccd446eSAtari911│ Filtering: work ✕ │ ← Click ✕ 107459ccd446eSAtari911├─────────────────────────┤ 107469ccd446eSAtari911│ Today │ 107479ccd446eSAtari911│ • Work meeting │ 107489ccd446eSAtari911└─────────────────────────┘ 107499ccd446eSAtari911 107509ccd446eSAtari911After clicking ✕ → Page reloads: 107519ccd446eSAtari911┌─────────────────────────┐ 107529ccd446eSAtari911│ (no filter badge) │ ← Cleared! ✓ 107539ccd446eSAtari911├─────────────────────────┤ 107549ccd446eSAtari911│ Today │ 107559ccd446eSAtari911│ • Work meeting │ 107569ccd446eSAtari911│ • Personal task │ ← All events! ✓ 107579ccd446eSAtari911│ • Project review │ 107589ccd446eSAtari911└─────────────────────────┘ 107599ccd446eSAtari911``` 107609ccd446eSAtari911 107619ccd446eSAtari911### Technical Details 107629ccd446eSAtari911 107639ccd446eSAtari911**Why Page Reload for Sidebar?** 107649ccd446eSAtari911 107659ccd446eSAtari911Sidebar widget is rendered server-side: 107669ccd446eSAtari911```php 107679ccd446eSAtari911// In syntax.php: 107689ccd446eSAtari911return $this->renderSidebarWidget($events, $namespace, $calId); 107699ccd446eSAtari911// ↑ PHP generates complete HTML 107709ccd446eSAtari911// No AJAX reload endpoint exists for sidebar 107719ccd446eSAtari911``` 107729ccd446eSAtari911 107739ccd446eSAtari911**Solution**: Remove `?namespace=work` from URL and reload page 107749ccd446eSAtari911```javascript 107759ccd446eSAtari911const url = new URL(window.location.href); 107769ccd446eSAtari911url.searchParams.delete('namespace'); // Remove filter 107779ccd446eSAtari911window.location.href = url.toString(); // Reload 107789ccd446eSAtari911``` 107799ccd446eSAtari911 107809ccd446eSAtari911**Why AJAX for Regular Calendar?** 107819ccd446eSAtari911 107829ccd446eSAtari911Regular calendars have AJAX endpoints: 107839ccd446eSAtari911```javascript 107849ccd446eSAtari911// action.php handles: 107859ccd446eSAtari911action: 'load_month' → Returns new month data 107869ccd446eSAtari911navCalendar() → Fetches and rebuilds calendar 107879ccd446eSAtari911``` 107889ccd446eSAtari911 107899ccd446eSAtari911### Filter Badge Behavior 107909ccd446eSAtari911 107919ccd446eSAtari911**Showing Badge** (when filtering): 107929ccd446eSAtari911- Server-side: PHP renders badge in HTML 107939ccd446eSAtari911- Client-side: JavaScript adds badge to header 107949ccd446eSAtari911 107959ccd446eSAtari911**Clearing Badge**: 107969ccd446eSAtari911- Sidebar: Page reload (removes ?namespace from URL) 107979ccd446eSAtari911- Calendar: AJAX reload (badge removed in rebuildCalendar) 107989ccd446eSAtari911 107999ccd446eSAtari911**Now works correctly for both!** ✓ 108009ccd446eSAtari911 108019ccd446eSAtari911## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 108029ccd446eSAtari911 108039ccd446eSAtari911### Critical Hotfix: Fixed PHP Parse Error 108049ccd446eSAtari911- **Fixed:** Template literal backticks causing PHP syntax error 108059ccd446eSAtari911- **Fixed:** Changed JavaScript template literals to concatenation 108069ccd446eSAtari911- **Fixed:** Admin page now loads without parse errors 108079ccd446eSAtari911 108089ccd446eSAtari911### The Problem 108099ccd446eSAtari911 108109ccd446eSAtari911**v4.6.3 broke admin page**: 108119ccd446eSAtari911``` 108129ccd446eSAtari911Error loading plugin calendar 108139ccd446eSAtari911ParseError: syntax error, unexpected identifier "s", 108149ccd446eSAtari911expecting "," or ";" 108159ccd446eSAtari911``` 108169ccd446eSAtari911 108179ccd446eSAtari911**Cause**: JavaScript template literals inside PHP echo 108189ccd446eSAtari911```php 108199ccd446eSAtari911echo '<script> 108209ccd446eSAtari911 let nsOptions = `<option value="">(default)</option>`; 108219ccd446eSAtari911 ↑ PHP sees backtick and gets confused! 108229ccd446eSAtari911</script>'; 108239ccd446eSAtari911``` 108249ccd446eSAtari911 108259ccd446eSAtari911**Why it broke**: Backticks (`) are special in PHP too! 108269ccd446eSAtari911 108279ccd446eSAtari911### The Fix 108289ccd446eSAtari911 108299ccd446eSAtari911**Changed from template literals to concatenation**: 108309ccd446eSAtari911 108319ccd446eSAtari911**BEFORE (broken)**: 108329ccd446eSAtari911```javascript 108339ccd446eSAtari911let nsOptions = `<option value="">(default)</option>`; 108349ccd446eSAtari911nsOptions += `<option value="${namespace}">${namespace}</option>`; 108359ccd446eSAtari911console.log('Edit recurring:', namespace); 108369ccd446eSAtari911``` 108379ccd446eSAtari911 108389ccd446eSAtari911**AFTER (fixed)**: 108399ccd446eSAtari911```javascript 108409ccd446eSAtari911let nsOptions = "<option value=\\"\\">(default)</option>"; 108419ccd446eSAtari911nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 108429ccd446eSAtari911console.log("Edit recurring:", namespace); 108439ccd446eSAtari911``` 108449ccd446eSAtari911 108459ccd446eSAtari911**Changes**: 108469ccd446eSAtari911- ✅ Backticks (`) → Double quotes (") 108479ccd446eSAtari911- ✅ Template literals (${var}) → Concatenation (" + var + ") 108489ccd446eSAtari911- ✅ Single quotes in console.log → Double quotes 108499ccd446eSAtari911- ✅ Properly escaped quotes for PHP echo 108509ccd446eSAtari911 108519ccd446eSAtari911### Technical Details 108529ccd446eSAtari911 108539ccd446eSAtari911**The Issue**: 108549ccd446eSAtari911```php 108559ccd446eSAtari911// Inside PHP echo string: 108569ccd446eSAtari911echo '<script> 108579ccd446eSAtari911 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 108589ccd446eSAtari911</script>'; 108599ccd446eSAtari911``` 108609ccd446eSAtari911 108619ccd446eSAtari911**The Solution**: 108629ccd446eSAtari911```php 108639ccd446eSAtari911// Use regular string concatenation: 108649ccd446eSAtari911echo '<script> 108659ccd446eSAtari911 let x = "string " + variable; // ✓ Works in PHP echo! 108669ccd446eSAtari911</script>'; 108679ccd446eSAtari911``` 108689ccd446eSAtari911 108699ccd446eSAtari911**Quote Escaping**: 108709ccd446eSAtari911```javascript 108719ccd446eSAtari911// Double quotes inside PHP single-quote string: 108729ccd446eSAtari911'<option value=\"\">text</option>' 108739ccd446eSAtari911 ↑↑ Escaped for JavaScript 108749ccd446eSAtari911``` 108759ccd446eSAtari911 108769ccd446eSAtari911### Result 108779ccd446eSAtari911 108789ccd446eSAtari911**Before**: Admin page crashed with parse error ✗ 108799ccd446eSAtari911**After**: Admin page loads perfectly ✓ 108809ccd446eSAtari911 108819ccd446eSAtari911**No functionality changed - just syntax fix!** 108829ccd446eSAtari911 108839ccd446eSAtari911## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 108849ccd446eSAtari911 108859ccd446eSAtari911### Critical Fix: Namespace Dropdown in Recurring Events Section 108869ccd446eSAtari911- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 108879ccd446eSAtari911- **Fixed:** Current namespace now properly selected in dropdown 108889ccd446eSAtari911- **Fixed:** Namespace extraction from DOM now uses multiple methods 108899ccd446eSAtari911- **Added:** Console logging to debug namespace detection 108909ccd446eSAtari911 108919ccd446eSAtari911### The Problem 108929ccd446eSAtari911 108939ccd446eSAtari911**When editing from Recurring Events section**: 108949ccd446eSAtari911``` 108959ccd446eSAtari911Click "Edit" on recurring event 108969ccd446eSAtari911Namespace dropdown shows: 108979ccd446eSAtari911- (default) 108989ccd446eSAtari911- (nothing else!) ✗ 108999ccd446eSAtari911 109009ccd446eSAtari911Can't select any namespace! ✗ 109019ccd446eSAtari911``` 109029ccd446eSAtari911 109039ccd446eSAtari911**Why**: Broken namespace extraction logic 109049ccd446eSAtari911```javascript 109059ccd446eSAtari911// OLD CODE (broken): 109069ccd446eSAtari911const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 109079ccd446eSAtari911 .map(el => { 109089ccd446eSAtari911 // Complex parsing that often failed 109099ccd446eSAtari911 const nsSpan = el.querySelector("span:nth-child(3)"); 109109ccd446eSAtari911 return nsSpan.textContent.replace(" ", "").trim(); 109119ccd446eSAtari911 }) 109129ccd446eSAtari911 .filter(ns => ns !== namespace); // Excluded current! ✗ 109139ccd446eSAtari911``` 109149ccd446eSAtari911 109159ccd446eSAtari911**Result**: Empty dropdown, can't change namespace! ✗ 109169ccd446eSAtari911 109179ccd446eSAtari911### The Fix 109189ccd446eSAtari911 109199ccd446eSAtari911**NEW CODE (robust)**: 109209ccd446eSAtari911```javascript 109219ccd446eSAtari911const namespaces = new Set(); 109229ccd446eSAtari911 109239ccd446eSAtari911// Method 1: Namespace explorer folders 109249ccd446eSAtari911document.querySelectorAll("[id^=ns_]").forEach(el => { 109259ccd446eSAtari911 const nsSpan = el.querySelector("span:nth-child(3)"); 109269ccd446eSAtari911 if (nsSpan) { 109279ccd446eSAtari911 let nsText = nsSpan.textContent.replace(" ", "").trim(); 109289ccd446eSAtari911 if (nsText && nsText !== "(default)") { 109299ccd446eSAtari911 namespaces.add(nsText); // ✓ 109309ccd446eSAtari911 } 109319ccd446eSAtari911 } 109329ccd446eSAtari911}); 109339ccd446eSAtari911 109349ccd446eSAtari911// Method 2: Datalist (backup method) 109359ccd446eSAtari911document.querySelectorAll("#namespaceList option").forEach(opt => { 109369ccd446eSAtari911 if (opt.value && opt.value !== "") { 109379ccd446eSAtari911 namespaces.add(opt.value); // ✓ 109389ccd446eSAtari911 } 109399ccd446eSAtari911}); 109409ccd446eSAtari911 109419ccd446eSAtari911// Build dropdown with ALL namespaces 109429ccd446eSAtari911let options = `<option value="">(default)</option>`; 109439ccd446eSAtari911 109449ccd446eSAtari911// Show current namespace as selected 109459ccd446eSAtari911if (namespace) { 109469ccd446eSAtari911 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 109479ccd446eSAtari911} 109489ccd446eSAtari911 109499ccd446eSAtari911// Show all other namespaces 109509ccd446eSAtari911for (const ns of nsArray) { 109519ccd446eSAtari911 if (ns !== namespace) { 109529ccd446eSAtari911 options += `<option value="${ns}">${ns}</option>`; 109539ccd446eSAtari911 } 109549ccd446eSAtari911} 109559ccd446eSAtari911``` 109569ccd446eSAtari911 109579ccd446eSAtari911**Result**: All namespaces visible! ✓ 109589ccd446eSAtari911 109599ccd446eSAtari911### How It Works Now 109609ccd446eSAtari911 109619ccd446eSAtari911**Before (Broken)**: 109629ccd446eSAtari911``` 109639ccd446eSAtari911Edit recurring event in "work" namespace 109649ccd446eSAtari911 109659ccd446eSAtari911Dropdown shows: 109669ccd446eSAtari911☐ (default) 109679ccd446eSAtari911 109689ccd446eSAtari911That's it! Can't select anything! ✗ 109699ccd446eSAtari911``` 109709ccd446eSAtari911 109719ccd446eSAtari911**After (Fixed)**: 109729ccd446eSAtari911``` 109739ccd446eSAtari911Edit recurring event in "work" namespace 109749ccd446eSAtari911 109759ccd446eSAtari911Dropdown shows: 109769ccd446eSAtari911☐ (default) 109779ccd446eSAtari911☑ work (current) ← Selected! 109789ccd446eSAtari911☐ personal 109799ccd446eSAtari911☐ projects 109809ccd446eSAtari911☐ meetings 109819ccd446eSAtari911 109829ccd446eSAtari911All namespaces available! ✓ 109839ccd446eSAtari911``` 109849ccd446eSAtari911 109859ccd446eSAtari911### Key Improvements 109869ccd446eSAtari911 109879ccd446eSAtari911**1. Dual extraction methods**: 109889ccd446eSAtari911- Primary: Parse namespace explorer DOM 109899ccd446eSAtari911- Backup: Read from datalist 109909ccd446eSAtari911- Result: Always finds namespaces ✓ 109919ccd446eSAtari911 109929ccd446eSAtari911**2. Current namespace included**: 109939ccd446eSAtari911```javascript 109949ccd446eSAtari911// OLD: Excluded current namespace 109959ccd446eSAtari911.filter(ns => ns !== namespace) ✗ 109969ccd446eSAtari911 109979ccd446eSAtari911// NEW: Include and mark as selected 109989ccd446eSAtari911options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 109999ccd446eSAtari911``` 110009ccd446eSAtari911 110019ccd446eSAtari911**3. Better error handling**: 110029ccd446eSAtari911```javascript 110039ccd446eSAtari911if (nsSpan) { // Check exists 110049ccd446eSAtari911 let nsText = nsSpan.textContent.replace(" ", "").trim(); 110059ccd446eSAtari911 if (nsText && nsText !== "(default)") { // Validate 110069ccd446eSAtari911 namespaces.add(nsText); 110079ccd446eSAtari911 } 110089ccd446eSAtari911} 110099ccd446eSAtari911``` 110109ccd446eSAtari911 110119ccd446eSAtari911**4. Console debugging**: 110129ccd446eSAtari911```javascript 110139ccd446eSAtari911console.log('Edit recurring - Current namespace:', namespace); 110149ccd446eSAtari911console.log('Available namespaces:', nsArray); 110159ccd446eSAtari911``` 110169ccd446eSAtari911 110179ccd446eSAtari911Open browser console (F12) to see what namespaces are detected! 110189ccd446eSAtari911 110199ccd446eSAtari911### Example Usage 110209ccd446eSAtari911 110219ccd446eSAtari911**Scenario**: Edit recurring "Team Meeting" in "work" namespace 110229ccd446eSAtari911 110239ccd446eSAtari911**Steps**: 110249ccd446eSAtari9111. Go to Recurring Events section 110259ccd446eSAtari9112. Click "Edit" on "Team Meeting" 110269ccd446eSAtari9113. See namespace dropdown: 110279ccd446eSAtari911 - ☐ (default) 110289ccd446eSAtari911 - ☑ work (current) 110299ccd446eSAtari911 - ☐ personal 110309ccd446eSAtari911 - ☐ projects 110319ccd446eSAtari9114. Select "personal" to move event 110329ccd446eSAtari9115. Click "Save Changes" 110339ccd446eSAtari9116. Event moved to "personal" namespace ✓ 110349ccd446eSAtari911 110359ccd446eSAtari911**Finally works as expected!** 110369ccd446eSAtari911 110379ccd446eSAtari911## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 110389ccd446eSAtari911 110399ccd446eSAtari911### Recurring Events Namespace Fix 110409ccd446eSAtari911- **Fixed:** Namespace now properly preserved when editing recurring events 110419ccd446eSAtari911- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 110429ccd446eSAtari911- **Added:** Better logging for namespace preservation debugging 110439ccd446eSAtari911- **Added:** Console logging to track namespace values during edit 110449ccd446eSAtari911 110459ccd446eSAtari911### The Namespace Problem 110469ccd446eSAtari911 110479ccd446eSAtari911**Issue 1**: Can't select non-default namespace 110489ccd446eSAtari911``` 110499ccd446eSAtari911When editing recurring event: 110509ccd446eSAtari911- Dropdown shows all namespaces ✓ 110519ccd446eSAtari911- User selects "work" 110529ccd446eSAtari911- Form submits with "" (empty/default) ✗ 110539ccd446eSAtari911``` 110549ccd446eSAtari911 110559ccd446eSAtari911**Issue 2**: Namespace not preserved 110569ccd446eSAtari911``` 110579ccd446eSAtari911Recurring event in "personal" namespace 110589ccd446eSAtari911Edit the title only 110599ccd446eSAtari911After save: namespace changed to "" (default) ✗ 110609ccd446eSAtari911``` 110619ccd446eSAtari911 110629ccd446eSAtari911### The Fixes 110639ccd446eSAtari911 110649ccd446eSAtari911**Fix 1**: Better namespace preservation logic 110659ccd446eSAtari911```php 110669ccd446eSAtari911// When editing recurring event: 110679ccd446eSAtari911$existingNamespace = $existingEventData['namespace']; 110689ccd446eSAtari911 110699ccd446eSAtari911// Preserve if user didn't explicitly change it: 110709ccd446eSAtari911if (empty($namespace) || 110719ccd446eSAtari911 strpos($namespace, '*') !== false || 110729ccd446eSAtari911 strpos($namespace, ';') !== false) { 110739ccd446eSAtari911 // User didn't select or selected wildcard 110749ccd446eSAtari911 $namespace = $existingNamespace; // Keep existing! 110759ccd446eSAtari911} 110769ccd446eSAtari911``` 110779ccd446eSAtari911 110789ccd446eSAtari911**Fix 2**: Proper form population 110799ccd446eSAtari911```javascript 110809ccd446eSAtari911// When editing, set BOTH inputs: 110819ccd446eSAtari911namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 110829ccd446eSAtari911namespaceSearch.value = event.namespace || '(default)'; // Visible 110839ccd446eSAtari911 110849ccd446eSAtari911// Plus logging: 110859ccd446eSAtari911console.log('Set namespace for editing:', event.namespace); 110869ccd446eSAtari911``` 110879ccd446eSAtari911 110889ccd446eSAtari911**Fix 3**: Added detailed logging 110899ccd446eSAtari911```php 110909ccd446eSAtari911error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 110919ccd446eSAtari911error_log("Using new namespace '$namespace'"); 110929ccd446eSAtari911error_log("No existing namespace to preserve"); 110939ccd446eSAtari911``` 110949ccd446eSAtari911 110959ccd446eSAtari911### How It Works Now 110969ccd446eSAtari911 110979ccd446eSAtari911**Scenario 1**: Edit without changing namespace 110989ccd446eSAtari911``` 110999ccd446eSAtari911Event in "work" namespace 111009ccd446eSAtari911Edit title to "Updated Meeting" 111019ccd446eSAtari911Namespace field shows: "work" 111029ccd446eSAtari911Hidden input value: "work" 111039ccd446eSAtari911Result: Saved in "work" ✓ 111049ccd446eSAtari911``` 111059ccd446eSAtari911 111069ccd446eSAtari911**Scenario 2**: Change namespace during edit 111079ccd446eSAtari911``` 111089ccd446eSAtari911Event in "personal" namespace 111099ccd446eSAtari911Edit and select "work" namespace 111109ccd446eSAtari911Hidden input value: "work" 111119ccd446eSAtari911Result: Saved in "work" ✓ 111129ccd446eSAtari911``` 111139ccd446eSAtari911 111149ccd446eSAtari911**Scenario 3**: Edit with empty/wildcard namespace 111159ccd446eSAtari911``` 111169ccd446eSAtari911Event in "projects" namespace 111179ccd446eSAtari911Namespace field empty or shows "personal;work" 111189ccd446eSAtari911System preserves: "projects" 111199ccd446eSAtari911Result: Saved in "projects" ✓ 111209ccd446eSAtari911``` 111219ccd446eSAtari911 111229ccd446eSAtari911### Debugging 111239ccd446eSAtari911 111249ccd446eSAtari911Now with console logging, you can see: 111259ccd446eSAtari911```javascript 111269ccd446eSAtari911Set namespace for editing: work 111279ccd446eSAtari911Hidden value: work 111289ccd446eSAtari911``` 111299ccd446eSAtari911 111309ccd446eSAtari911And in PHP logs: 111319ccd446eSAtari911``` 111329ccd446eSAtari911Calendar saveEvent recurring: Loaded existing data - namespace='work' 111339ccd446eSAtari911Calendar saveEvent recurring: Preserving namespace 'work' (received='') 111349ccd446eSAtari911``` 111359ccd446eSAtari911 111369ccd446eSAtari911**Namespace preservation now works correctly!** 111379ccd446eSAtari911 111389ccd446eSAtari911## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 111399ccd446eSAtari911 111409ccd446eSAtari911### Recurring Events Edit Fix 111419ccd446eSAtari911- **Fixed:** Editing recurring events now preserves unchanged fields 111429ccd446eSAtari911- **Fixed:** Empty fields no longer erase existing data 111439ccd446eSAtari911- **Added:** Smart merge of existing event data with new changes 111449ccd446eSAtari911 111459ccd446eSAtari911### The Problem 111469ccd446eSAtari911 111479ccd446eSAtari911**Before**: Editing erased unchanged fields! 111489ccd446eSAtari911``` 111499ccd446eSAtari911Original recurring event: 111509ccd446eSAtari911- Title: "Team Meeting" 111519ccd446eSAtari911- Time: "10:00 AM" 111529ccd446eSAtari911- Description: "Weekly standup with engineering team" 111539ccd446eSAtari911- Color: Red 111549ccd446eSAtari911 111559ccd446eSAtari911User edits ONLY the title to "Staff Meeting" 111569ccd446eSAtari911Form sends: 111579ccd446eSAtari911- Title: "Staff Meeting" ✓ 111589ccd446eSAtari911- Time: "" ✗ (empty because user didn't change it) 111599ccd446eSAtari911- Description: "" ✗ (empty) 111609ccd446eSAtari911- Color: "#3498db" ✗ (default blue) 111619ccd446eSAtari911 111629ccd446eSAtari911Result after save: 111639ccd446eSAtari911- Title: "Staff Meeting" ✓ 111649ccd446eSAtari911- Time: BLANK ✗ 111659ccd446eSAtari911- Description: BLANK ✗ 111669ccd446eSAtari911- Color: Blue ✗ 111679ccd446eSAtari911``` 111689ccd446eSAtari911 111699ccd446eSAtari911**All the other data was lost!** ✗ 111709ccd446eSAtari911 111719ccd446eSAtari911### The Fix 111729ccd446eSAtari911 111739ccd446eSAtari911**After**: Preserves unchanged data! 111749ccd446eSAtari911```php 111759ccd446eSAtari911if ($eventId && $isRecurring) { 111769ccd446eSAtari911 // Load existing event data 111779ccd446eSAtari911 $existingEventData = getExistingEventData($eventId); 111789ccd446eSAtari911 111799ccd446eSAtari911 // Merge: use new value OR keep existing 111809ccd446eSAtari911 $title = $title ?: $existingEventData['title']; 111819ccd446eSAtari911 $time = $time ?: $existingEventData['time']; 111829ccd446eSAtari911 $description = $description ?: $existingEventData['description']; 111839ccd446eSAtari911 $color = ($color === '#3498db') ? 111849ccd446eSAtari911 $existingEventData['color'] : $color; 111859ccd446eSAtari911} 111869ccd446eSAtari911``` 111879ccd446eSAtari911 111889ccd446eSAtari911**Now**: 111899ccd446eSAtari911``` 111909ccd446eSAtari911User edits ONLY the title to "Staff Meeting" 111919ccd446eSAtari911 111929ccd446eSAtari911System: 111939ccd446eSAtari9111. Loads existing event data 111949ccd446eSAtari9112. Merges: new title + existing time/description/color 111959ccd446eSAtari9113. Saves merged data 111969ccd446eSAtari911 111979ccd446eSAtari911Result: 111989ccd446eSAtari911- Title: "Staff Meeting" ✓ (changed) 111999ccd446eSAtari911- Time: "10:00 AM" ✓ (preserved!) 112009ccd446eSAtari911- Description: "Weekly standup..." ✓ (preserved!) 112019ccd446eSAtari911- Color: Red ✓ (preserved!) 112029ccd446eSAtari911``` 112039ccd446eSAtari911 112049ccd446eSAtari911**Only changed fields are updated!** ✓ 112059ccd446eSAtari911 112069ccd446eSAtari911### How It Works 112079ccd446eSAtari911 112089ccd446eSAtari911**Step 1**: Load existing data 112099ccd446eSAtari911```php 112109ccd446eSAtari911$existingEventData = $this->getExistingEventData( 112119ccd446eSAtari911 $eventId, 112129ccd446eSAtari911 $date, 112139ccd446eSAtari911 $namespace 112149ccd446eSAtari911); 112159ccd446eSAtari911``` 112169ccd446eSAtari911 112179ccd446eSAtari911**Step 2**: Merge with new data 112189ccd446eSAtari911```php 112199ccd446eSAtari911// If new value is empty, use existing value 112209ccd446eSAtari911$title = $newTitle ?: $existingEventData['title']; 112219ccd446eSAtari911$time = $newTime ?: $existingEventData['time']; 112229ccd446eSAtari911$description = $newDesc ?: $existingEventData['description']; 112239ccd446eSAtari911 112249ccd446eSAtari911// Special handling for color (default is #3498db) 112259ccd446eSAtari911if ($newColor === '#3498db' && $existingEventData['color']) { 112269ccd446eSAtari911 $color = $existingEventData['color']; 112279ccd446eSAtari911} 112289ccd446eSAtari911``` 112299ccd446eSAtari911 112309ccd446eSAtari911**Step 3**: Save merged data 112319ccd446eSAtari911```php 112329ccd446eSAtari911createRecurringEvents(..., $title, $time, $description, $color, ...); 112339ccd446eSAtari911``` 112349ccd446eSAtari911 112359ccd446eSAtari911### Fields Preserved 112369ccd446eSAtari911 112379ccd446eSAtari911When editing recurring events, these fields are now preserved if not changed: 112389ccd446eSAtari911- ✅ Title (if left blank) 112399ccd446eSAtari911- ✅ Time (if not specified) 112409ccd446eSAtari911- ✅ End Time (if not specified) 112419ccd446eSAtari911- ✅ Description (if left empty) 112429ccd446eSAtari911- ✅ Color (if still default blue) 112439ccd446eSAtari911 112449ccd446eSAtari911**Edit only what you want to change - everything else stays!** 112459ccd446eSAtari911 112469ccd446eSAtari911## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 112479ccd446eSAtari911 112489ccd446eSAtari911### ✨ New Feature: Rename Namespaces 112499ccd446eSAtari911- **Added:** ✏️ Rename button in Namespace Explorer 112509ccd446eSAtari911- **Added:** Rename all events in a namespace at once 112519ccd446eSAtari911- **Added:** Automatic cleanup of old directory structure 112529ccd446eSAtari911 112539ccd446eSAtari911### Critical Fix: Recurring Events Actually Edit Now! 112549ccd446eSAtari911- **Fixed:** Editing recurring events now deletes ALL instances 112559ccd446eSAtari911- **Fixed:** Previously only deleted one instance, left orphans 112569ccd446eSAtari911- **Fixed:** Recurring events properly regenerated on edit 112579ccd446eSAtari911 112589ccd446eSAtari911### Namespace Rename Feature 112599ccd446eSAtari911 112609ccd446eSAtari911**Before**: Could only delete namespaces, not rename 112619ccd446eSAtari911 112629ccd446eSAtari911**After**: Click ✏️ to rename! 112639ccd446eSAtari911 112649ccd446eSAtari911``` 112659ccd446eSAtari911 work (15 events) [3] [✏️] [️] 112669ccd446eSAtari911 ↑ NEW! 112679ccd446eSAtari911``` 112689ccd446eSAtari911 112699ccd446eSAtari911**How It Works**: 112709ccd446eSAtari9111. Click ✏️ rename button 112719ccd446eSAtari9112. Enter new namespace name 112729ccd446eSAtari9113. All events moved to new namespace 112739ccd446eSAtari9114. Event `namespace` field updated in JSON 112749ccd446eSAtari9115. Old directory cleaned up 112759ccd446eSAtari911 112769ccd446eSAtari911**Example**: 112779ccd446eSAtari911``` 112789ccd446eSAtari911Rename: "work" → "business" 112799ccd446eSAtari911 112809ccd446eSAtari911Before: 112819ccd446eSAtari911/data/meta/work/calendar/*.json 112829ccd446eSAtari911Events: {namespace: "work"} 112839ccd446eSAtari911 112849ccd446eSAtari911After: 112859ccd446eSAtari911/data/meta/business/calendar/*.json 112869ccd446eSAtari911Events: {namespace: "business"} 112879ccd446eSAtari911``` 112889ccd446eSAtari911 112899ccd446eSAtari911**Implementation**: 112909ccd446eSAtari911```php 112919ccd446eSAtari911private function renameNamespace() { 112929ccd446eSAtari911 // 1. Validate new name 112939ccd446eSAtari911 // 2. Rename directory 112949ccd446eSAtari911 // 3. Update all event namespace fields in JSON 112959ccd446eSAtari911 // 4. Clean up old empty directories 112969ccd446eSAtari911} 112979ccd446eSAtari911``` 112989ccd446eSAtari911 112999ccd446eSAtari911### Recurring Events Fix - The Problem 113009ccd446eSAtari911 113019ccd446eSAtari911**Before**: Editing didn't work! 113029ccd446eSAtari911``` 113039ccd446eSAtari911Original recurring event generates: 113049ccd446eSAtari911- Event-0 (Mon, Feb 10) 113059ccd446eSAtari911- Event-1 (Mon, Feb 17) 113069ccd446eSAtari911- Event-2 (Mon, Feb 24) 113079ccd446eSAtari911 113089ccd446eSAtari911User edits Event-0, changes title to "Updated" 113099ccd446eSAtari911 113109ccd446eSAtari911What SHOULD happen: 113119ccd446eSAtari911- Delete Event-0, Event-1, Event-2 113129ccd446eSAtari911- Generate new instances with "Updated" title 113139ccd446eSAtari911 113149ccd446eSAtari911What ACTUALLY happened: 113159ccd446eSAtari911- Delete Event-0 only ✗ 113169ccd446eSAtari911- Generate new instances 113179ccd446eSAtari911- Result: Event-1 and Event-2 still show old title! ✗ 113189ccd446eSAtari911``` 113199ccd446eSAtari911 113209ccd446eSAtari911**After**: Properly deletes ALL instances! 113219ccd446eSAtari911 113229ccd446eSAtari911**The Fix**: 113239ccd446eSAtari911```php 113249ccd446eSAtari911private function deleteEvent() { 113259ccd446eSAtari911 $event = getEvent($eventId); 113269ccd446eSAtari911 113279ccd446eSAtari911 // Check if recurring 113289ccd446eSAtari911 if ($event['recurring'] && $event['recurringId']) { 113299ccd446eSAtari911 // Delete ALL instances with same recurringId 113309ccd446eSAtari911 deleteAllRecurringInstances($recurringId); 113319ccd446eSAtari911 } 113329ccd446eSAtari911 113339ccd446eSAtari911 // Then normal delete for spanning events 113349ccd446eSAtari911} 113359ccd446eSAtari911 113369ccd446eSAtari911private function deleteAllRecurringInstances($recurringId) { 113379ccd446eSAtari911 // Scan ALL calendar JSON files 113389ccd446eSAtari911 foreach (glob('*.json') as $file) { 113399ccd446eSAtari911 // Filter out events with matching recurringId 113409ccd446eSAtari911 $events = array_filter($events, function($event) { 113419ccd446eSAtari911 return $event['recurringId'] !== $recurringId; 113429ccd446eSAtari911 }); 113439ccd446eSAtari911 } 113449ccd446eSAtari911} 113459ccd446eSAtari911``` 113469ccd446eSAtari911 113479ccd446eSAtari911**Result**: 113489ccd446eSAtari911- Edit "Weekly Team Meeting" → ALL instances updated ✓ 113499ccd446eSAtari911- Delete recurring event → ALL instances deleted ✓ 113509ccd446eSAtari911- No more orphaned events! ✓ 113519ccd446eSAtari911 113529ccd446eSAtari911### Recurring Event Fields 113539ccd446eSAtari911 113549ccd446eSAtari911Every recurring event has: 113559ccd446eSAtari911```json 113569ccd446eSAtari911{ 113579ccd446eSAtari911 "id": "abc123-0", 113589ccd446eSAtari911 "recurring": true, 113599ccd446eSAtari911 "recurringId": "abc123", ← Links all instances 113609ccd446eSAtari911 ... 113619ccd446eSAtari911} 113629ccd446eSAtari911``` 113639ccd446eSAtari911 113649ccd446eSAtari911When editing/deleting, we find ALL events with same `recurringId` and remove them! 113659ccd446eSAtari911 113669ccd446eSAtari911**Finally, recurring events work properly!** 113679ccd446eSAtari911 113689ccd446eSAtari911## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 113699ccd446eSAtari911 113709ccd446eSAtari911### Important Events Sorting - ACTUALLY FIXED! 113719ccd446eSAtari911- **Fixed:** Important Events now REALLY sorted by date first, then time 113729ccd446eSAtari911- **Fixed:** renderSidebarSection was re-sorting and breaking the order 113739ccd446eSAtari911- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 113749ccd446eSAtari911 113759ccd446eSAtari911### Pink Theme Tooltip Bling! 113769ccd446eSAtari911- **Added:** Pink gradient tooltips (hot pink → light pink) 113779ccd446eSAtari911- **Added:** Glowing pink border on tooltips 113789ccd446eSAtari911- **Added:** Sparkling heart () appears next to tooltip! 113799ccd446eSAtari911- **Added:** Heart has pink glow drop-shadow 113809ccd446eSAtari911 113819ccd446eSAtari911### The Sorting Bug - Root Cause 113829ccd446eSAtari911 113839ccd446eSAtari911**Problem**: Two sorts were happening! 113849ccd446eSAtari911 113859ccd446eSAtari911**Sort #1** (Line 2047): Before rendering 113869ccd446eSAtari911```php 113879ccd446eSAtari911usort($importantEvents, ...) // Sort by date ✓ 113889ccd446eSAtari911``` 113899ccd446eSAtari911 113909ccd446eSAtari911**Sort #2** (Line 2751): Inside renderSidebarSection 113919ccd446eSAtari911```php 113929ccd446eSAtari911usort($events, ...) // Sort by TIME ONLY ✗ 113939ccd446eSAtari911// This was breaking the date order! 113949ccd446eSAtari911``` 113959ccd446eSAtari911 113969ccd446eSAtari911**The Fix**: Different sorting for different sections 113979ccd446eSAtari911```php 113989ccd446eSAtari911if ($title === 'Important Events') { 113999ccd446eSAtari911 // Sort by DATE first, then time 114009ccd446eSAtari911 usort($events, function($a, $b) { 114019ccd446eSAtari911 if ($dateA !== $dateB) { 114029ccd446eSAtari911 return strcmp($dateA, $dateB); // DATE first! 114039ccd446eSAtari911 } 114049ccd446eSAtari911 // Same date - sort by time 114059ccd446eSAtari911 return timeCompare($a, $b); 114069ccd446eSAtari911 }); 114079ccd446eSAtari911} else { 114089ccd446eSAtari911 // Today/Tomorrow - sort by TIME only (same date) 114099ccd446eSAtari911 usort($events, function($a, $b) { 114109ccd446eSAtari911 return timeCompare($a, $b); 114119ccd446eSAtari911 }); 114129ccd446eSAtari911} 114139ccd446eSAtari911``` 114149ccd446eSAtari911 114159ccd446eSAtari911**Result**: Important Events now CORRECTLY sorted! 114169ccd446eSAtari911``` 114179ccd446eSAtari911✓ Sun, Feb 8 - 3:30 PM Super Bowl 114189ccd446eSAtari911✓ Tue, Feb 10 - 11:30 AM Doctor visit 114199ccd446eSAtari911✓ Sat, Feb 14 - Valentine's Day (all-day) 114209ccd446eSAtari911✓ Sat, Feb 14 - 8:00 PM Crab Shack 114219ccd446eSAtari911``` 114229ccd446eSAtari911 114239ccd446eSAtari911### Pink Tooltip Magic! 114249ccd446eSAtari911 114259ccd446eSAtari911**Normal Tooltips**: Black background, plain 114269ccd446eSAtari911```css 114279ccd446eSAtari911background: rgba(0, 0, 0, 0.95); 114289ccd446eSAtari911color: #fff; 114299ccd446eSAtari911``` 114309ccd446eSAtari911 114319ccd446eSAtari911**Pink Theme Tooltips**: FABULOUS! 114329ccd446eSAtari911```css 114339ccd446eSAtari911/* Pink gradient background */ 114349ccd446eSAtari911background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 114359ccd446eSAtari911 114369ccd446eSAtari911/* Glowing pink border */ 114379ccd446eSAtari911border: 2px solid #ff85c1; 114389ccd446eSAtari911 114399ccd446eSAtari911/* Double glow shadow */ 114409ccd446eSAtari911box-shadow: 114419ccd446eSAtari911 0 0 15px rgba(255, 20, 147, 0.6), 114429ccd446eSAtari911 0 4px 12px rgba(0, 0, 0, 0.4); 114439ccd446eSAtari911 114449ccd446eSAtari911/* Bold text */ 114459ccd446eSAtari911font-weight: 600; 114469ccd446eSAtari911``` 114479ccd446eSAtari911 114489ccd446eSAtari911**Plus**: Sparkling heart next to tooltip! 114499ccd446eSAtari911```css 114509ccd446eSAtari911.sidebar-pink [data-tooltip]:after { 114519ccd446eSAtari911 content: ''; 114529ccd446eSAtari911 font-size: 12px; 114539ccd446eSAtari911 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 114549ccd446eSAtari911} 114559ccd446eSAtari911``` 114569ccd446eSAtari911 114579ccd446eSAtari911**The Effect**: 114589ccd446eSAtari911``` 114599ccd446eSAtari911Hover over ⚠ conflict warning: 114609ccd446eSAtari911┌────────────────────┐ 114619ccd446eSAtari911│ Conflicts with: │ ← Pink gradient 114629ccd446eSAtari911│ • Event 1 (3PM) │ ← Pink border 114639ccd446eSAtari911│ • Event 2 (4PM) │ ← Pink glow 114649ccd446eSAtari911└────────────────────┘ 114659ccd446eSAtari911``` 114669ccd446eSAtari911 114679ccd446eSAtari911**Maximum glamour on tooltips too!** ✨ 114689ccd446eSAtari911 114699ccd446eSAtari911## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 114709ccd446eSAtari911 114719ccd446eSAtari911### Important Events Order Fixed 114729ccd446eSAtari911- **Fixed:** Important Events now sorted by date (earliest first) 114739ccd446eSAtari911- **Fixed:** Events on same date sorted by time (chronological) 114749ccd446eSAtari911- **Fixed:** All-day events appear last within each date 114759ccd446eSAtari911 114769ccd446eSAtari911### Sorting Issue 114779ccd446eSAtari911 114789ccd446eSAtari911**Before**: Random order 114799ccd446eSAtari911``` 114809ccd446eSAtari911Important Events: 114819ccd446eSAtari911 Valentine's Day (Sat, Feb 14) 114829ccd446eSAtari91111:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 114839ccd446eSAtari9113:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 114849ccd446eSAtari9118:00 PM Crab Shack (Sat, Feb 14) 114859ccd446eSAtari911``` 114869ccd446eSAtari911 114879ccd446eSAtari911**After**: Chronological order 114889ccd446eSAtari911``` 114899ccd446eSAtari911Important Events: 114909ccd446eSAtari9113:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 114919ccd446eSAtari91111:30 AM Doctor visit (Tue, Feb 10) 114929ccd446eSAtari911 Valentine's Day (Sat, Feb 14) ← All-day event 114939ccd446eSAtari9118:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 114949ccd446eSAtari911``` 114959ccd446eSAtari911 114969ccd446eSAtari911### Sorting Logic 114979ccd446eSAtari911 114989ccd446eSAtari911**Primary Sort**: By date 114999ccd446eSAtari911```php 115009ccd446eSAtari911strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 115019ccd446eSAtari911``` 115029ccd446eSAtari911 115039ccd446eSAtari911**Secondary Sort**: By time (within same date) 115049ccd446eSAtari911```php 115059ccd446eSAtari911// All-day events (no time) go last 115069ccd446eSAtari911if (empty($timeA) && !empty($timeB)) return 1; 115079ccd446eSAtari911if (!empty($timeA) && empty($timeB)) return -1; 115089ccd446eSAtari911 115099ccd446eSAtari911// Both have times - sort chronologically 115109ccd446eSAtari911$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 115119ccd446eSAtari911$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 115129ccd446eSAtari911return $aMinutes - $bMinutes; // 690 < 1200 115139ccd446eSAtari911``` 115149ccd446eSAtari911 115159ccd446eSAtari911**Result**: 115169ccd446eSAtari9111. Sun, Feb 8 - 3:30 PM (earliest date & time) 115179ccd446eSAtari9112. Tue, Feb 10 - 11:30 AM (next date) 115189ccd446eSAtari9113. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 115199ccd446eSAtari9114. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 115209ccd446eSAtari911 115219ccd446eSAtari911**Perfect chronological order for next 2 weeks!** ✓ 115229ccd446eSAtari911 115239ccd446eSAtari911## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 115249ccd446eSAtari911 115259ccd446eSAtari911### EXTREME PINK BLING EFFECTS! 115269ccd446eSAtari911- **Added:** Click sparkles - 8 sparkles burst out on every click! 115279ccd446eSAtari911- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 115289ccd446eSAtari911- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 115299ccd446eSAtari911- **Added:** Pulsing border glow - constantly breathing pink glow 115309ccd446eSAtari911- **Added:** Drop shadows on sparkles for extra depth 115319ccd446eSAtari911- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 115329ccd446eSAtari911 115339ccd446eSAtari911### Sparkle Effects Breakdown 115349ccd446eSAtari911 115359ccd446eSAtari911**Click Sparkles** : 115369ccd446eSAtari911```javascript 115379ccd446eSAtari911// 8 sparkles burst out when you click anywhere! 115389ccd446eSAtari911for (let i = 0; i < 8; i++) { 115399ccd446eSAtari911 // Staggered appearance (40ms apart) 115409ccd446eSAtari911 createSparkle(x, y); 115419ccd446eSAtari911} 115429ccd446eSAtari911 115439ccd446eSAtari911// Sparkle emojis: 115449ccd446eSAtari911["✨", "", "", "⭐", "", "", "", "", "", ""] 115459ccd446eSAtari911``` 115469ccd446eSAtari911 115479ccd446eSAtari911**Each sparkle**: 115489ccd446eSAtari911- Starts at click point 115499ccd446eSAtari911- Flies outward 30-60px in random direction 115509ccd446eSAtari911- Spins 360 degrees 115519ccd446eSAtari911- Fades in and out 115529ccd446eSAtari911- Has pink glow drop-shadow 115539ccd446eSAtari911- Disappears after 1 second 115549ccd446eSAtari911 115559ccd446eSAtari911**Auto Sparkles** ⏰: 115569ccd446eSAtari911```javascript 115579ccd446eSAtari911// Random sparkle every 3 seconds 115589ccd446eSAtari911setInterval(() => { 115599ccd446eSAtari911 const x = Math.random() * width; 115609ccd446eSAtari911 const y = Math.random() * height; 115619ccd446eSAtari911 createSparkle(x, y); 115629ccd446eSAtari911}, 3000); 115639ccd446eSAtari911``` 115649ccd446eSAtari911 115659ccd446eSAtari911**Result**: Constant magical sparkles even without clicking! ✨ 115669ccd446eSAtari911 115679ccd446eSAtari911**Hover Mega-Glow** : 115689ccd446eSAtari911```css 115699ccd446eSAtari911.sidebar-pink:hover { 115709ccd446eSAtari911 box-shadow: 115719ccd446eSAtari911 0 0 30px rgba(255, 20, 147, 0.9), 115729ccd446eSAtari911 0 0 50px rgba(255, 20, 147, 0.5) !important; 115739ccd446eSAtari911} 115749ccd446eSAtari911``` 115759ccd446eSAtari911 115769ccd446eSAtari911**Result**: Sidebar EXPLODES with pink glow when you hover over it! 115779ccd446eSAtari911 115789ccd446eSAtari911**Pulsing Border Glow** : 115799ccd446eSAtari911```css 115809ccd446eSAtari911@keyframes pulse-glow { 115819ccd446eSAtari911 0%, 100% { 115829ccd446eSAtari911 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 115839ccd446eSAtari911 } 115849ccd446eSAtari911 50% { 115859ccd446eSAtari911 box-shadow: 115869ccd446eSAtari911 0 0 25px rgba(255, 20, 147, 0.8), 115879ccd446eSAtari911 0 0 40px rgba(255, 20, 147, 0.4); 115889ccd446eSAtari911 } 115899ccd446eSAtari911} 115909ccd446eSAtari911 115919ccd446eSAtari911animation: pulse-glow 3s ease-in-out infinite; 115929ccd446eSAtari911``` 115939ccd446eSAtari911 115949ccd446eSAtari911**Result**: Border continuously breathes with pink glow! 115959ccd446eSAtari911 115969ccd446eSAtari911**Sparkle Animation** : 115979ccd446eSAtari911```css 115989ccd446eSAtari911@keyframes sparkle { 115999ccd446eSAtari911 0% { 116009ccd446eSAtari911 opacity: 0; 116019ccd446eSAtari911 transform: translate(0, 0) scale(0) rotate(0deg); 116029ccd446eSAtari911 } 116039ccd446eSAtari911 50% { 116049ccd446eSAtari911 opacity: 1; 116059ccd446eSAtari911 transform: translate(halfway) scale(1) rotate(180deg); 116069ccd446eSAtari911 } 116079ccd446eSAtari911 100% { 116089ccd446eSAtari911 opacity: 0; 116099ccd446eSAtari911 transform: translate(far) scale(0) rotate(360deg); 116109ccd446eSAtari911 } 116119ccd446eSAtari911} 116129ccd446eSAtari911``` 116139ccd446eSAtari911 116149ccd446eSAtari911**Result**: Sparkles spin, grow, shrink, and fly! 116159ccd446eSAtari911 116169ccd446eSAtari911### Complete Pink Bling Experience: 116179ccd446eSAtari911 116189ccd446eSAtari911**Always Active**: 116199ccd446eSAtari911- ✨ Pulsing pink border glow (3 second cycle) 116209ccd446eSAtari911- ✨ Auto-sparkles every 3 seconds 116219ccd446eSAtari911 116229ccd446eSAtari911**On Hover**: 116239ccd446eSAtari911- MEGA GLOW EFFECT (2x brightness!) 116249ccd446eSAtari911 116259ccd446eSAtari911**On Click**: 116269ccd446eSAtari911- 8 sparkles EXPLODE outward! 116279ccd446eSAtari911- Random emojis (hearts, stars, diamonds, crowns!) 116289ccd446eSAtari911- Each sparkle spins 360° while flying 116299ccd446eSAtari911- Pink glow drop-shadow on each sparkle 116309ccd446eSAtari911 116319ccd446eSAtari911**The Result**: 116329ccd446eSAtari911- Click anywhere = SPARKLE EXPLOSION! 116339ccd446eSAtari911- Hover anywhere = MEGA GLOW! ✨ 116349ccd446eSAtari911- Always breathing and sparkling! 116359ccd446eSAtari911- Maximum glamour! 116369ccd446eSAtari911- Wife approval: 1000%! 116379ccd446eSAtari911 116389ccd446eSAtari911**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 116399ccd446eSAtari911 116409ccd446eSAtari911## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 116419ccd446eSAtari911 116429ccd446eSAtari911### Pink Theme Final Touches 116439ccd446eSAtari911- **Fixed:** Add Event text now black (was bright pink, hard to read) 116449ccd446eSAtari911- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 116459ccd446eSAtari911- **Removed:** Text shadow on Add Event button (cleaner with black text) 116469ccd446eSAtari911 116479ccd446eSAtari911### Add Event Text - Black & Readable! 116489ccd446eSAtari911 116499ccd446eSAtari911**Before**: Bright pink text (#ff1493) on dark pink background 116509ccd446eSAtari911```php 116519ccd446eSAtari911$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 116529ccd446eSAtari911text-shadow: 0 0 3px #ff1493; // Glowy pink 116539ccd446eSAtari911``` 116549ccd446eSAtari911 116559ccd446eSAtari911**After**: Black text, no shadow, perfect contrast! 116569ccd446eSAtari911```php 116579ccd446eSAtari911$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 116589ccd446eSAtari911$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 116599ccd446eSAtari911``` 116609ccd446eSAtari911 116619ccd446eSAtari911**Result**: 116629ccd446eSAtari911- Black text pops against dark pink background ✓ 116639ccd446eSAtari911- Easy to read ✓ 116649ccd446eSAtari911- Professional look with bling ✓ 116659ccd446eSAtari911 116669ccd446eSAtari911### Clock Border - All Pink! 116679ccd446eSAtari911 116689ccd446eSAtari911**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 116699ccd446eSAtari911 116709ccd446eSAtari911**Before**: 116719ccd446eSAtari911```php 116729ccd446eSAtari911// Inline style (only bottom): 116739ccd446eSAtari911style="border-bottom:2px solid #ff1493;" 116749ccd446eSAtari911 116759ccd446eSAtari911// CSS (all sides): 116769ccd446eSAtari911.eventlist-today-header { 116779ccd446eSAtari911 border: 2px solid #00cc07; // Green on top/sides! 116789ccd446eSAtari911} 116799ccd446eSAtari911``` 116809ccd446eSAtari911 116819ccd446eSAtari911**After**: Inline style overrides ALL sides 116829ccd446eSAtari911```php 116839ccd446eSAtari911style="border:2px solid #ff1493;" // All 4 sides pink! 116849ccd446eSAtari911``` 116859ccd446eSAtari911 116869ccd446eSAtari911**Result**: Clock box now 100% pink border on all four sides! ✓ 116879ccd446eSAtari911 116889ccd446eSAtari911### What Changed: 116899ccd446eSAtari911 116909ccd446eSAtari911**Add Event Button**: 116919ccd446eSAtari911- Background: #b8156f (dark pink) ✓ 116929ccd446eSAtari911- Text: **#000000 (black)** ← NEW! 116939ccd446eSAtari911- Text shadow: **none** ← NEW! 116949ccd446eSAtari911- Glow: 0 0 10px pink ✓ 116959ccd446eSAtari911 116969ccd446eSAtari911**Clock Border**: 116979ccd446eSAtari911- Top: **#ff1493 (pink)** ← FIXED! 116989ccd446eSAtari911- Right: **#ff1493 (pink)** ← FIXED! 116999ccd446eSAtari911- Bottom: #ff1493 (pink) ✓ 117009ccd446eSAtari911- Left: **#ff1493 (pink)** ← FIXED! 117019ccd446eSAtari911 117029ccd446eSAtari911**Perfect pink theme - wife approved!** ✨ 117039ccd446eSAtari911 117049ccd446eSAtari911## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 117059ccd446eSAtari911 117069ccd446eSAtari911### Pink Theme Complete Makeover 117079ccd446eSAtari911- **Fixed:** Clock border now completely pink (was green on sides/top) 117089ccd446eSAtari911- **Changed:** Today/Tomorrow/Important sections now different shades of pink 117099ccd446eSAtari911- **Changed:** Add Event button now dark pink (was clashing blue) 117109ccd446eSAtari911- **Changed:** System status bars now pink gradient (3 shades!) 117119ccd446eSAtari911 117129ccd446eSAtari911### All-Pink Everything! 117139ccd446eSAtari911 117149ccd446eSAtari911**Clock Border**: 117159ccd446eSAtari911```css 117169ccd446eSAtari911/* Before: Green border */ 117179ccd446eSAtari911border: 2px solid #00cc07; 117189ccd446eSAtari911 117199ccd446eSAtari911/* After: Hot pink border */ 117209ccd446eSAtari911.sidebar-pink .eventlist-today-header { 117219ccd446eSAtari911 border-color: #ff1493; 117229ccd446eSAtari911 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 117239ccd446eSAtari911} 117249ccd446eSAtari911``` 117259ccd446eSAtari911 117269ccd446eSAtari911**Section Colors** (Different Pink Shades): 117279ccd446eSAtari911```php 117289ccd446eSAtari911// Before: Orange, green, purple 117299ccd446eSAtari911'Today' => '#ff9800', 117309ccd446eSAtari911'Tomorrow' => '#4caf50', 117319ccd446eSAtari911'Important' => '#9b59b6' 117329ccd446eSAtari911 117339ccd446eSAtari911// After: Hot pink, pink, light pink 117349ccd446eSAtari911'Today' => '#ff1493', // Hot pink (DeepPink) 117359ccd446eSAtari911'Tomorrow' => '#ff69b4', // Pink (HotPink) 117369ccd446eSAtari911'Important' => '#ff85c1' // Light pink 117379ccd446eSAtari911``` 117389ccd446eSAtari911 117399ccd446eSAtari911**Add Event Button**: 117409ccd446eSAtari911```php 117419ccd446eSAtari911// Before: Clashing blue 117429ccd446eSAtari911background: #3498db; 117439ccd446eSAtari911 117449ccd446eSAtari911// After: Dark pink with glow 117459ccd446eSAtari911background: #b8156f; // Dark pink 117469ccd446eSAtari911hover: #8b0f54; // Darker pink 117479ccd446eSAtari911shadow: 0 0 10px rgba(255, 20, 147, 0.5); 117489ccd446eSAtari911``` 117499ccd446eSAtari911 117509ccd446eSAtari911**System Status Bars** (Pink Gradient): 117519ccd446eSAtari911```css 117529ccd446eSAtari911/* 5-min load average */ 117539ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill { 117549ccd446eSAtari911 background: #ff1493; /* Hot pink */ 117559ccd446eSAtari911 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 117569ccd446eSAtari911} 117579ccd446eSAtari911 117589ccd446eSAtari911/* Realtime CPU */ 117599ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-purple { 117609ccd446eSAtari911 background: #ff69b4; /* Pink */ 117619ccd446eSAtari911 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 117629ccd446eSAtari911} 117639ccd446eSAtari911 117649ccd446eSAtari911/* Memory */ 117659ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-orange { 117669ccd446eSAtari911 background: #ff85c1; /* Light pink */ 117679ccd446eSAtari911 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 117689ccd446eSAtari911} 117699ccd446eSAtari911``` 117709ccd446eSAtari911 117719ccd446eSAtari911### Pink Theme Visual Hierarchy: 117729ccd446eSAtari911 117739ccd446eSAtari911**Darkest → Lightest Pink Shades**: 117749ccd446eSAtari9111. Add Event button: #b8156f (dark pink) 117759ccd446eSAtari9112. Today section: #ff1493 (hot pink / deep pink) 117769ccd446eSAtari9113. System bar 1: #ff1493 (hot pink) 117779ccd446eSAtari9114. Tomorrow section: #ff69b4 (pink) 117789ccd446eSAtari9115. System bar 2: #ff69b4 (pink) 117799ccd446eSAtari9116. Important section: #ff85c1 (light pink) 117809ccd446eSAtari9117. System bar 3: #ff85c1 (light pink) 117819ccd446eSAtari911 117829ccd446eSAtari911**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 117839ccd446eSAtari911 117849ccd446eSAtari911### What's Pink Now: 117859ccd446eSAtari911 117869ccd446eSAtari911✅ Sidebar background & border 117879ccd446eSAtari911✅ **Clock border** ← FIXED! 117889ccd446eSAtari911✅ Header gradient 117899ccd446eSAtari911✅ Week grid 117909ccd446eSAtari911✅ **Add Event button** ← FIXED! 117919ccd446eSAtari911✅ **Today section** ← Different shade! 117929ccd446eSAtari911✅ **Tomorrow section** ← Different shade! 117939ccd446eSAtari911✅ **Important section** ← Different shade! 117949ccd446eSAtari911✅ Event text & bars 117959ccd446eSAtari911✅ **System status bars** ← All 3 different pink shades! 117969ccd446eSAtari911✅ All shadows & glows 117979ccd446eSAtari911 117989ccd446eSAtari911**EVERYTHING is pink and fabulous!** ✨ 117999ccd446eSAtari911 118009ccd446eSAtari911## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 118019ccd446eSAtari911 118029ccd446eSAtari911### ✨ New Theme: Pink Bling! 118039ccd446eSAtari911- **Added:** Glamorous hot pink theme with maximum sparkle 118049ccd446eSAtari911- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 118059ccd446eSAtari911- **Perfect for:** Fabulous calendars that demand attention ✨ 118069ccd446eSAtari911 118079ccd446eSAtari911### Professional Theme Shadow Fix 118089ccd446eSAtari911- **Fixed:** Section headers now have subtle shadow (not glow) 118099ccd446eSAtari911- **Fixed:** Clicked day panel header has proper shadow 118109ccd446eSAtari911 118119ccd446eSAtari911### Pink Bling Theme Colors 118129ccd446eSAtari911 118139ccd446eSAtari911**Background & Borders**: 118149ccd446eSAtari911```php 118159ccd446eSAtari911'bg' => '#1a0d14', // Dark rich pink-black 118169ccd446eSAtari911'border' => '#ff1493', // Hot pink (DeepPink) 118179ccd446eSAtari911'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 118189ccd446eSAtari911``` 118199ccd446eSAtari911 118209ccd446eSAtari911**Text Colors**: 118219ccd446eSAtari911```php 118229ccd446eSAtari911'text_primary' => '#ff69b4', // Hot pink 118239ccd446eSAtari911'text_bright' => '#ff1493', // Deep pink 118249ccd446eSAtari911'text_dim' => '#ff85c1', // Light pink 118259ccd446eSAtari911``` 118269ccd446eSAtari911 118279ccd446eSAtari911**Week Grid**: 118289ccd446eSAtari911```php 118299ccd446eSAtari911'grid_bg' => '#2d1a24', // Dark purple-pink 118309ccd446eSAtari911'cell_bg' => '#1a0d14', // Dark 118319ccd446eSAtari911'cell_today_bg' => '#3d2030', // Highlighted purple-pink 118329ccd446eSAtari911``` 118339ccd446eSAtari911 118349ccd446eSAtari911**Special Effects**: 118359ccd446eSAtari911```php 118369ccd446eSAtari911'bar_glow' => '0 0 5px', // Extra sparkly glow! 118379ccd446eSAtari911'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 118389ccd446eSAtari911``` 118399ccd446eSAtari911 118409ccd446eSAtari911### Professional Theme Shadow Fix 118419ccd446eSAtari911 118429ccd446eSAtari911**Before**: Section headers had colored glow 118439ccd446eSAtari911```php 118449ccd446eSAtari911box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 118459ccd446eSAtari911``` 118469ccd446eSAtari911 118479ccd446eSAtari911**After**: Section headers have subtle shadow 118489ccd446eSAtari911```php 118499ccd446eSAtari911$headerShadow = ($theme === 'professional') ? 118509ccd446eSAtari911 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 118519ccd446eSAtari911 '0 0 8px ' . $accentColor; // Glow for others 118529ccd446eSAtari911``` 118539ccd446eSAtari911 118549ccd446eSAtari911**Result**: 118559ccd446eSAtari911- **Matrix/Purple/Pink**: Colored glow on headers ✓ 118569ccd446eSAtari911- **Professional**: Clean grey shadow (no glow) ✓ 118579ccd446eSAtari911 118589ccd446eSAtari911### All Four Themes: 118599ccd446eSAtari911 118609ccd446eSAtari911** Matrix Edition**: 118619ccd446eSAtari911- Dark green (#00cc07) 118629ccd446eSAtari911- Neon glow effects 118639ccd446eSAtari911- Hacker aesthetic 118649ccd446eSAtari911 118659ccd446eSAtari911** Purple Dream**: 118669ccd446eSAtari911- Elegant purple (#9b59b6) 118679ccd446eSAtari911- Violet glow effects 118689ccd446eSAtari911- Royal aesthetic 118699ccd446eSAtari911 118709ccd446eSAtari911** Professional Blue**: 118719ccd446eSAtari911- Clean grey/blue (#4a90e2) 118729ccd446eSAtari911- Subtle shadows (NO glow) 118739ccd446eSAtari911- Corporate aesthetic 118749ccd446eSAtari911 118759ccd446eSAtari911** Pink Bling** (NEW!): 118769ccd446eSAtari911- Hot pink (#ff1493) 118779ccd446eSAtari911- MAXIMUM sparkle & glow 118789ccd446eSAtari911- Glamorous aesthetic ✨ 118799ccd446eSAtari911 118809ccd446eSAtari911### Technical Implementation 118819ccd446eSAtari911 118829ccd446eSAtari911**Theme Added To**: 118839ccd446eSAtari911- `getSidebarThemeStyles()` - color definitions 118849ccd446eSAtari911- `getSidebarTheme()` - validation 118859ccd446eSAtari911- `saveSidebarTheme()` - admin save 118869ccd446eSAtari911- Admin panel - UI with preview 118879ccd446eSAtari911- All shadow/glow calculations 118889ccd446eSAtari911- JavaScript theme colors 118899ccd446eSAtari911- Clicked day panel colors 118909ccd446eSAtari911 118919ccd446eSAtari911**Perfect for users who want FABULOUS pink calendars!** ✨ 118929ccd446eSAtari911 118939ccd446eSAtari911## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 118949ccd446eSAtari911 118959ccd446eSAtari911### Text Glow Refinement 118969ccd446eSAtari911- **Changed:** Reduced text glow from 3px to 2px (less intense) 118979ccd446eSAtari911- **Fixed:** Clicked day panel now has same text glow as sections 118989ccd446eSAtari911 118999ccd446eSAtari911### Text Glow Reduction 119009ccd446eSAtari911 119019ccd446eSAtari911**Before**: Text glow was too strong (3px) 119029ccd446eSAtari911```php 119039ccd446eSAtari911// Sections: 119049ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright! 119059ccd446eSAtari911 119069ccd446eSAtari911// Clicked day panel: 119079ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright! 119089ccd446eSAtari911``` 119099ccd446eSAtari911 119109ccd446eSAtari911**After**: Subtler text glow (2px) 119119ccd446eSAtari911```php 119129ccd446eSAtari911// Sections: 119139ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓ 119149ccd446eSAtari911 119159ccd446eSAtari911// Clicked day panel: 119169ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓ 119179ccd446eSAtari911``` 119189ccd446eSAtari911 119199ccd446eSAtari911**Visual Impact**: 119209ccd446eSAtari911- **Matrix**: Softer green glow, easier to read 119219ccd446eSAtari911- **Purple**: Softer purple glow, more elegant 119229ccd446eSAtari911- **Professional**: Still no glow (clean) 119239ccd446eSAtari911 119249ccd446eSAtari911### Consistency Fix 119259ccd446eSAtari911 119269ccd446eSAtari911**Before**: Sections had glow, clicked day panel had NO glow 119279ccd446eSAtari911 119289ccd446eSAtari911**After**: Both sections AND clicked day panel have matching subtle glow 119299ccd446eSAtari911 119309ccd446eSAtari911**Where Glow Appears**: 119319ccd446eSAtari911- ✅ Today section event text 119329ccd446eSAtari911- ✅ Tomorrow section event text 119339ccd446eSAtari911- ✅ Important section event text 119349ccd446eSAtari911- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 119359ccd446eSAtari911 119369ccd446eSAtari911**Result**: 119379ccd446eSAtari911- Glow is less intense and easier on eyes ✓ 119389ccd446eSAtari911- All event text has consistent styling ✓ 119399ccd446eSAtari911- Matrix/Purple themes more refined ✓ 119409ccd446eSAtari911 119419ccd446eSAtari911### Technical Details 119429ccd446eSAtari911 119439ccd446eSAtari911**PHP (Sections)**: 119449ccd446eSAtari911```php 119459ccd446eSAtari911$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 119469ccd446eSAtari911``` 119479ccd446eSAtari911 119489ccd446eSAtari911**JavaScript (Clicked Day Panel)**: 119499ccd446eSAtari911```javascript 119509ccd446eSAtari911themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 119519ccd446eSAtari911eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 119529ccd446eSAtari911``` 119539ccd446eSAtari911 119549ccd446eSAtari911**Perfect consistency and subtle elegance!** ✨ 119559ccd446eSAtari911 119569ccd446eSAtari911## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 119579ccd446eSAtari911 119589ccd446eSAtari911### ✨ Important Events Enhancement 119599ccd446eSAtari911- **Changed:** Important events now show from next 2 weeks (not just current week) 119609ccd446eSAtari911- **Fixed:** Important events on Sunday after current week now visible 119619ccd446eSAtari911- **Changed:** Events loaded 2 weeks into future for Important section 119629ccd446eSAtari911 119639ccd446eSAtari911### Background Cleanup 119649ccd446eSAtari911- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 119659ccd446eSAtari911- **Removed:** Grey backgrounds from individual events 119669ccd446eSAtari911- **Result:** Clean transparent backgrounds, original dark Matrix look restored 119679ccd446eSAtari911 119689ccd446eSAtari911### Important Events - Future Coverage 119699ccd446eSAtari911 119709ccd446eSAtari911**Before**: Only showed Important events from current week 119719ccd446eSAtari911```php 119729ccd446eSAtari911if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 119739ccd446eSAtari911 $importantEvents[] = $event; 119749ccd446eSAtari911} 119759ccd446eSAtari911``` 119769ccd446eSAtari911 119779ccd446eSAtari911**After**: Shows Important events from today through next 2 weeks 119789ccd446eSAtari911```php 119799ccd446eSAtari911// Load events 2 weeks out 119809ccd446eSAtari911$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 119819ccd446eSAtari911 119829ccd446eSAtari911// Show all important events from today forward 119839ccd446eSAtari911if ($isImportant && $dateKey >= $todayStr) { 119849ccd446eSAtari911 $importantEvents[] = $event; 119859ccd446eSAtari911} 119869ccd446eSAtari911``` 119879ccd446eSAtari911 119889ccd446eSAtari911**Example**: 119899ccd446eSAtari911- Today: Saturday Feb 7 119909ccd446eSAtari911- Current week: Sun Feb 1 → Sat Feb 7 119919ccd446eSAtari911- Important events shown: Feb 7 → Feb 21 (today + 14 days) 119929ccd446eSAtari911 119939ccd446eSAtari911**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 119949ccd446eSAtari911 119959ccd446eSAtari911### Background Removal 119969ccd446eSAtari911 119979ccd446eSAtari911**Before**: Light grey/white backgrounds added 119989ccd446eSAtari911```php 119999ccd446eSAtari911// Section background: 120009ccd446eSAtari911$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 120019ccd446eSAtari911 120029ccd446eSAtari911// Event background: 120039ccd446eSAtari911$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 120049ccd446eSAtari911``` 120059ccd446eSAtari911 120069ccd446eSAtari911**After**: No backgrounds (transparent) 120079ccd446eSAtari911```php 120089ccd446eSAtari911// Section: No background property 120099ccd446eSAtari911<div style="padding:4px 0;"> 120109ccd446eSAtari911 120119ccd446eSAtari911// Event: No background property 120129ccd446eSAtari911<div style="padding:4px 6px; ..."> 120139ccd446eSAtari911``` 120149ccd446eSAtari911 120159ccd446eSAtari911**Result**: 120169ccd446eSAtari911- Clean, dark Matrix aesthetic restored ✓ 120179ccd446eSAtari911- Purple theme darker and more elegant ✓ 120189ccd446eSAtari911- Professional theme still has its light grey sidebar bg ✓ 120199ccd446eSAtari911- Events stand out with just color bars and borders ✓ 120209ccd446eSAtari911 120219ccd446eSAtari911### What Changed: 120229ccd446eSAtari911 120239ccd446eSAtari911**Sections (Today/Tomorrow/Important)**: 120249ccd446eSAtari911- ❌ No more grey overlay 120259ccd446eSAtari911- ✓ Transparent background 120269ccd446eSAtari911- ✓ Colored borders & glows remain 120279ccd446eSAtari911 120289ccd446eSAtari911**Individual Events**: 120299ccd446eSAtari911- ❌ No more grey overlay 120309ccd446eSAtari911- ✓ Transparent background 120319ccd446eSAtari911- ✓ Colored bars & borders remain 120329ccd446eSAtari911 120339ccd446eSAtari911**Perfect! Back to the original clean dark look with future Important events!** 120349ccd446eSAtari911 120359ccd446eSAtari911## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 120369ccd446eSAtari911 120379ccd446eSAtari911### Final Theme Polish 120389ccd446eSAtari911- **Fixed:** Today/Tomorrow/Important section shadows now match theme 120399ccd446eSAtari911- **Fixed:** Event description text color now uses theme dim color 120409ccd446eSAtari911 120419ccd446eSAtari911### Section Shadow Fix 120429ccd446eSAtari911 120439ccd446eSAtari911**Problem**: Sections always had green glow regardless of theme 120449ccd446eSAtari911 120459ccd446eSAtari911**Before**: 120469ccd446eSAtari911```php 120479ccd446eSAtari911// Hardcoded green: 120489ccd446eSAtari911box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 120499ccd446eSAtari911``` 120509ccd446eSAtari911 120519ccd446eSAtari911**After**: 120529ccd446eSAtari911```php 120539ccd446eSAtari911// Theme-aware: 120549ccd446eSAtari911$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 120559ccd446eSAtari911 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 120569ccd446eSAtari911 '0 2px 4px rgba(0, 0, 0, 0.1)'); 120579ccd446eSAtari911``` 120589ccd446eSAtari911 120599ccd446eSAtari911**Result**: 120609ccd446eSAtari911- **Matrix**: Green glow around sections ✓ 120619ccd446eSAtari911- **Purple**: Purple glow around sections ✓ 120629ccd446eSAtari911- **Professional**: Subtle grey shadow (no glow) ✓ 120639ccd446eSAtari911 120649ccd446eSAtari911### Description Color Fix 120659ccd446eSAtari911 120669ccd446eSAtari911**Problem**: Description text always green in clicked day panel 120679ccd446eSAtari911 120689ccd446eSAtari911**Before**: 120699ccd446eSAtari911```javascript 120709ccd446eSAtari911color: #00aa00; // Always green 120719ccd446eSAtari911``` 120729ccd446eSAtari911 120739ccd446eSAtari911**After**: 120749ccd446eSAtari911```javascript 120759ccd446eSAtari911color: themeColors.text_dim; // Theme dim color 120769ccd446eSAtari911``` 120779ccd446eSAtari911 120789ccd446eSAtari911**Result**: 120799ccd446eSAtari911- **Matrix**: Dim green (#00aa00) ✓ 120809ccd446eSAtari911- **Purple**: Dim purple (#8e7ab8) ✓ 120819ccd446eSAtari911- **Professional**: Grey (#7f8c8d) ✓ 120829ccd446eSAtari911 120839ccd446eSAtari911### Now 100% Theme Consistent 120849ccd446eSAtari911 120859ccd446eSAtari911Every single visual element respects theme: 120869ccd446eSAtari911- ✅ Sidebar background & border 120879ccd446eSAtari911- ✅ Header colors & shadows 120889ccd446eSAtari911- ✅ Week grid & cells 120899ccd446eSAtari911- ✅ Add Event button 120909ccd446eSAtari911- ✅ Section borders & **shadows** ← Fixed! 120919ccd446eSAtari911- ✅ Event titles & times 120929ccd446eSAtari911- ✅ Event **descriptions** ← Fixed! 120939ccd446eSAtari911- ✅ Clicked day panel 120949ccd446eSAtari911- ✅ Event bars & glows 120959ccd446eSAtari911 120969ccd446eSAtari911**Absolute perfection across all three themes!** ✨ 120979ccd446eSAtari911 120989ccd446eSAtari911## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 120999ccd446eSAtari911 121009ccd446eSAtari911### Theme Improvements 121019ccd446eSAtari911- **Fixed:** Clicked day panel now uses correct theme colors 121029ccd446eSAtari911- **Changed:** Professional Blue background now light grey (not white) 121039ccd446eSAtari911- **Added:** Theme colors passed to JavaScript for dynamic rendering 121049ccd446eSAtari911 121059ccd446eSAtari911### Clicked Day Panel Theming 121069ccd446eSAtari911 121079ccd446eSAtari911**Before**: Always blue regardless of theme 121089ccd446eSAtari911```javascript 121099ccd446eSAtari911// Hardcoded blue: 121109ccd446eSAtari911color:#00cc07; // Always green 121119ccd446eSAtari911background:#3498db; // Always blue 121129ccd446eSAtari911``` 121139ccd446eSAtari911 121149ccd446eSAtari911**After**: Theme-aware colors 121159ccd446eSAtari911```php 121169ccd446eSAtari911// PHP passes theme to JavaScript: 121179ccd446eSAtari911window.themeColors_XXX = { 121189ccd446eSAtari911 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 121199ccd446eSAtari911 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 121209ccd446eSAtari911 text_shadow: '0 0 3px ...' or '', 121219ccd446eSAtari911 event_bg: 'rgba(...)', 121229ccd446eSAtari911 border_color: 'rgba(...)', 121239ccd446eSAtari911 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 121249ccd446eSAtari911}; 121259ccd446eSAtari911 121269ccd446eSAtari911// JavaScript uses theme colors: 121279ccd446eSAtari911color: themeColors.text_primary; 121289ccd446eSAtari911background: themeColors.event_bg; 121299ccd446eSAtari911``` 121309ccd446eSAtari911 121319ccd446eSAtari911**Result**: 121329ccd446eSAtari911- Matrix: Green panel with green glow ✓ 121339ccd446eSAtari911- Purple: Purple panel with purple glow ✓ 121349ccd446eSAtari911- Professional: Blue panel, no glow, clean ✓ 121359ccd446eSAtari911 121369ccd446eSAtari911### Professional Theme Background Change 121379ccd446eSAtari911 121389ccd446eSAtari911**Before**: Almost white (#f5f7fa, #ffffff) 121399ccd446eSAtari911```php 121409ccd446eSAtari911'bg' => '#f5f7fa', // Very light 121419ccd446eSAtari911'cell_bg' => '#ffffff', // Pure white 121429ccd446eSAtari911``` 121439ccd446eSAtari911 121449ccd446eSAtari911**After**: Light grey tones 121459ccd446eSAtari911```php 121469ccd446eSAtari911'bg' => '#e8ecf1', // Soft grey-blue 121479ccd446eSAtari911'cell_bg' => '#f5f7fa', // Light grey 121489ccd446eSAtari911'grid_bg' => '#d5dbe3', // Medium grey 121499ccd446eSAtari911'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 121509ccd446eSAtari911``` 121519ccd446eSAtari911 121529ccd446eSAtari911**Visual Impact**: 121539ccd446eSAtari911- Sidebar: Light grey-blue background (#e8ecf1) 121549ccd446eSAtari911- Week cells: Lighter grey (#f5f7fa) 121559ccd446eSAtari911- Today cell: Highlighted blue-grey (#dce8f7) 121569ccd446eSAtari911- More depth and contrast ✓ 121579ccd446eSAtari911- Professional appearance ✓ 121589ccd446eSAtari911 121599ccd446eSAtari911### All Theme Elements Now Consistent 121609ccd446eSAtari911 121619ccd446eSAtari911**Matrix (Green)**: 121629ccd446eSAtari911- Sidebar: Dark (#242424) 121639ccd446eSAtari911- Clicked panel: Dark with green 121649ccd446eSAtari911- Text: Green with glow 121659ccd446eSAtari911 121669ccd446eSAtari911**Purple Dream**: 121679ccd446eSAtari911- Sidebar: Dark purple (#2a2030) 121689ccd446eSAtari911- Clicked panel: Dark with purple 121699ccd446eSAtari911- Text: Purple with glow 121709ccd446eSAtari911 121719ccd446eSAtari911**Professional Blue**: 121729ccd446eSAtari911- Sidebar: Light grey (#e8ecf1) 121739ccd446eSAtari911- Clicked panel: Light with blue 121749ccd446eSAtari911- Text: Dark grey, no glow 121759ccd446eSAtari911 121769ccd446eSAtari911**Perfect theme consistency everywhere!** 121779ccd446eSAtari911 121789ccd446eSAtari911## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 121799ccd446eSAtari911 121809ccd446eSAtari911### Critical Fixes 121819ccd446eSAtari911- **Fixed:** Tomorrow events not loaded when outside current week 121829ccd446eSAtari911- **Fixed:** `&` showing instead of `&` (double HTML encoding) 121839ccd446eSAtari911 121849ccd446eSAtari911### Issue 1: Tomorrow Not Loading 121859ccd446eSAtari911 121869ccd446eSAtari911**Problem**: Sidebar only loaded events for current week 121879ccd446eSAtari911- Today (Saturday): Week ends today 121889ccd446eSAtari911- Tomorrow (Sunday): Start of NEXT week 121899ccd446eSAtari911- Tomorrow events never loaded from data files! 121909ccd446eSAtari911 121919ccd446eSAtari911**Before**: 121929ccd446eSAtari911```php 121939ccd446eSAtari911// Only load current week 121949ccd446eSAtari911$end = new DateTime($weekEnd); 121959ccd446eSAtari911$end->modify('+1 day'); 121969ccd446eSAtari911$period = new DatePeriod($start, $interval, $end); 121979ccd446eSAtari911// If tomorrow > weekEnd, it's not in period! 121989ccd446eSAtari911``` 121999ccd446eSAtari911 122009ccd446eSAtari911**After**: 122019ccd446eSAtari911```php 122029ccd446eSAtari911// Check if tomorrow is outside week 122039ccd446eSAtari911$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 122049ccd446eSAtari911if ($tomorrowDate > $weekEnd) { 122059ccd446eSAtari911 // Extend to include tomorrow 122069ccd446eSAtari911 $end = new DateTime($tomorrowDate); 122079ccd446eSAtari911} 122089ccd446eSAtari911$end->modify('+1 day'); 122099ccd446eSAtari911$period = new DatePeriod($start, $interval, $end); 122109ccd446eSAtari911``` 122119ccd446eSAtari911 122129ccd446eSAtari911**Result**: Tomorrow events now loaded even at week boundary! ✓ 122139ccd446eSAtari911 122149ccd446eSAtari911### Issue 2: Double HTML Encoding 122159ccd446eSAtari911 122169ccd446eSAtari911**Problem**: `&` characters showing as `&` 122179ccd446eSAtari911 122189ccd446eSAtari911**Cause**: Double encoding on line 2625 and 2681 122199ccd446eSAtari911```php 122209ccd446eSAtari911// Line 2625: 122219ccd446eSAtari911$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 122229ccd446eSAtari911 122239ccd446eSAtari911// Line 2681: 122249ccd446eSAtari911$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 122259ccd446eSAtari911``` 122269ccd446eSAtari911 122279ccd446eSAtari911**Fixed**: 122289ccd446eSAtari911```php 122299ccd446eSAtari911// Line 2625: 122309ccd446eSAtari911$title = htmlspecialchars($event['title']); // Encode once 122319ccd446eSAtari911 122329ccd446eSAtari911// Line 2681: 122339ccd446eSAtari911$html .= $title; // Use already-encoded value ✓ 122349ccd446eSAtari911``` 122359ccd446eSAtari911 122369ccd446eSAtari911**Result**: `&` displays correctly! ✓ 122379ccd446eSAtari911 122389ccd446eSAtari911### Both Fixes Critical 122399ccd446eSAtari911 122409ccd446eSAtari911These were **two separate bugs**: 122419ccd446eSAtari9111. **Loading bug**: Tomorrow events not read from files 122429ccd446eSAtari9112. **Display bug**: Double-encoding text 122439ccd446eSAtari911 122449ccd446eSAtari911Both needed fixing for Tomorrow section to work properly! 122459ccd446eSAtari911 122469ccd446eSAtari911## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 122479ccd446eSAtari911 122489ccd446eSAtari911### Critical Fix 122499ccd446eSAtari911- **Fixed:** Tomorrow section missing when tomorrow is outside current week 122509ccd446eSAtari911- **Fixed:** Today section now always shows regardless of week boundaries 122519ccd446eSAtari911- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 122529ccd446eSAtari911 122539ccd446eSAtari911### The Problem 122549ccd446eSAtari911 122559ccd446eSAtari911**Scenario**: Today is Saturday (last day of week) 122569ccd446eSAtari911- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 122579ccd446eSAtari911- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 122589ccd446eSAtari911 122599ccd446eSAtari911**BROKEN Logic** (v4.2.2): 122609ccd446eSAtari911```php 122619ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) { 122629ccd446eSAtari911 if ($dateKey < $weekStart) continue; // Skip old events 122639ccd446eSAtari911 122649ccd446eSAtari911 // ...week processing... 122659ccd446eSAtari911 122669ccd446eSAtari911 if ($dateKey === $tomorrowStr) { // ← Never reached! 122679ccd446eSAtari911 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 122689ccd446eSAtari911 } 122699ccd446eSAtari911} 122709ccd446eSAtari911``` 122719ccd446eSAtari911 122729ccd446eSAtari911**Result**: Tomorrow events never added because loop skipped them! ❌ 122739ccd446eSAtari911 122749ccd446eSAtari911### The Fix 122759ccd446eSAtari911 122769ccd446eSAtari911**Process Today/Tomorrow FIRST**: 122779ccd446eSAtari911```php 122789ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) { 122799ccd446eSAtari911 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 122809ccd446eSAtari911 122819ccd446eSAtari911 foreach ($eventsWithConflicts as $event) { 122829ccd446eSAtari911 // ALWAYS process Today and Tomorrow first! 122839ccd446eSAtari911 if ($dateKey === $todayStr) { 122849ccd446eSAtari911 $todayEvents[] = $event; // ✓ Always shows 122859ccd446eSAtari911 } 122869ccd446eSAtari911 if ($dateKey === $tomorrowStr) { 122879ccd446eSAtari911 $tomorrowEvents[] = $event; // ✓ Always shows 122889ccd446eSAtari911 } 122899ccd446eSAtari911 122909ccd446eSAtari911 // THEN check week boundaries for grid 122919ccd446eSAtari911 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 122929ccd446eSAtari911 $weekEvents[$dateKey][] = $event; 122939ccd446eSAtari911 } 122949ccd446eSAtari911 122959ccd446eSAtari911 // Important events still week-only 122969ccd446eSAtari911 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 122979ccd446eSAtari911 $importantEvents[] = $event; 122989ccd446eSAtari911 } 122999ccd446eSAtari911 } 123009ccd446eSAtari911} 123019ccd446eSAtari911``` 123029ccd446eSAtari911 123039ccd446eSAtari911### What Changed 123049ccd446eSAtari911 123059ccd446eSAtari911**Before**: 123069ccd446eSAtari9111. Skip events < weekStart ❌ 123079ccd446eSAtari9112. Process week grid 123089ccd446eSAtari9113. Try to add Today/Tomorrow ← **Failed if outside week** 123099ccd446eSAtari9114. Add Important events 123109ccd446eSAtari911 123119ccd446eSAtari911**After**: 123129ccd446eSAtari9111. **Always add Today events** ✓ 123139ccd446eSAtari9112. **Always add Tomorrow events** ✓ 123149ccd446eSAtari9113. Add to week grid if in range 123159ccd446eSAtari9114. Add Important events if in range 123169ccd446eSAtari911 123179ccd446eSAtari911**Result**: 123189ccd446eSAtari911- Today section: ✓ Always shows 123199ccd446eSAtari911- Tomorrow section: ✓ Always shows (even at week boundary!) 123209ccd446eSAtari911- Week grid: ✓ Only current week 123219ccd446eSAtari911- Important: ✓ Only current week 123229ccd446eSAtari911 123239ccd446eSAtari911### Edge Cases Fixed 123249ccd446eSAtari911 123259ccd446eSAtari911**Saturday → Sunday transition**: 123269ccd446eSAtari911- Today (Sat): Shows in Today section ✓ 123279ccd446eSAtari911- Tomorrow (Sun): Shows in Tomorrow section ✓ 123289ccd446eSAtari911- Week grid: Only shows Sat (today) ✓ 123299ccd446eSAtari911 123309ccd446eSAtari911**Sunday → Monday transition**: 123319ccd446eSAtari911- Today (Sun): Shows in Today section ✓ 123329ccd446eSAtari911- Tomorrow (Mon): Shows in Tomorrow section ✓ 123339ccd446eSAtari911- Week grid: Shows both Sun and Mon ✓ 123349ccd446eSAtari911 123359ccd446eSAtari911**Perfect! Tomorrow section now always works!** 123369ccd446eSAtari911 123379ccd446eSAtari911## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 123389ccd446eSAtari911 123399ccd446eSAtari911### Corrected Week Options 123409ccd446eSAtari911- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 123419ccd446eSAtari911- **Changed:** Default is **Sunday** (US/Canada standard) 123429ccd446eSAtari911- **Fixed:** Day names array for Sunday start: S M T W T F S 123439ccd446eSAtari911 123449ccd446eSAtari911### Correct Week Start Options 123459ccd446eSAtari911 123469ccd446eSAtari911**Sunday Start** (Default): 123479ccd446eSAtari911- Grid shows: **S M T W T F S** 123489ccd446eSAtari911- Week: Sunday → Saturday 123499ccd446eSAtari911- US/Canada standard 123509ccd446eSAtari911- Most common worldwide 123519ccd446eSAtari911 123529ccd446eSAtari911**Monday Start**: 123539ccd446eSAtari911- Grid shows: **M T W T F S S** 123549ccd446eSAtari911- Week: Monday → Sunday 123559ccd446eSAtari911- ISO 8601 standard 123569ccd446eSAtari911- Common in Europe 123579ccd446eSAtari911 123589ccd446eSAtari911### Technical Changes 123599ccd446eSAtari911 123609ccd446eSAtari911**All References Updated**: 123619ccd446eSAtari911```php 123629ccd446eSAtari911// Changed from 'saturday' to 'sunday' in: 123639ccd446eSAtari911- Admin validation 123649ccd446eSAtari911- Week calculation logic 123659ccd446eSAtari911- Day names array 123669ccd446eSAtari911- Default value 123679ccd446eSAtari911- Comments 123689ccd446eSAtari911``` 123699ccd446eSAtari911 123709ccd446eSAtari911**Sunday Calculation** (when today is Saturday): 123719ccd446eSAtari911```php 123729ccd446eSAtari911$today = date('w'); // 0=Sun, 6=Sat 123739ccd446eSAtari911if ($today == 0) { 123749ccd446eSAtari911 $weekStart = date('Y-m-d'); // Today! 123759ccd446eSAtari911} else { 123769ccd446eSAtari911 // Go back $today days to last Sunday 123779ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 123789ccd446eSAtari911} 123799ccd446eSAtari911``` 123809ccd446eSAtari911 123819ccd446eSAtari911**Examples**: 123829ccd446eSAtari911- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 123839ccd446eSAtari911- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 123849ccd446eSAtari911 123859ccd446eSAtari911**Sorry for the confusion - it's Sunday not Saturday!** 123869ccd446eSAtari911 123879ccd446eSAtari911## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 123889ccd446eSAtari911 123899ccd446eSAtari911### Critical Fix 123909ccd446eSAtari911- **Fixed:** Week calculation broken when today is Saturday 123919ccd446eSAtari911- **Fixed:** Events not showing in Today/Important sections 123929ccd446eSAtari911- **Fixed:** Week grid event bars missing 123939ccd446eSAtari911- **Changed:** Default week start is Saturday (matches main calendar) 123949ccd446eSAtari911 123959ccd446eSAtari911### Technical Details 123969ccd446eSAtari911 123979ccd446eSAtari911**The Bug**: 123989ccd446eSAtari911```php 123999ccd446eSAtari911// BROKEN (v4.2.0): 124009ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('saturday this week')); 124019ccd446eSAtari911// When TODAY is Saturday, this is ambiguous and fails! 124029ccd446eSAtari911 124039ccd446eSAtari911// FIXED (v4.2.1): 124049ccd446eSAtari911$today = date('w'); // 0 (Sun) to 6 (Sat) 124059ccd446eSAtari911if ($today == 6) { 124069ccd446eSAtari911 $weekStart = date('Y-m-d'); // Today! 124079ccd446eSAtari911} else { 124089ccd446eSAtari911 $daysBack = ($today == 0) ? 1 : ($today + 1); 124099ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 124109ccd446eSAtari911} 124119ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 124129ccd446eSAtari911``` 124139ccd446eSAtari911 124149ccd446eSAtari911**Why It Failed**: 124159ccd446eSAtari911- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 124169ccd446eSAtari911- PHP may interpret it as "next Saturday" or fail 124179ccd446eSAtari911- Result: Week range was wrong, events filtered out 124189ccd446eSAtari911 124199ccd446eSAtari911**The Fix**: 124209ccd446eSAtari911- Explicit calculation using day-of-week math 124219ccd446eSAtari911- Saturday (day 6): weekStart = today 124229ccd446eSAtari911- Sunday (day 0): weekStart = yesterday 124239ccd446eSAtari911- Monday-Friday: calculate days back to last Saturday 124249ccd446eSAtari911 124259ccd446eSAtari911**Result**: Works reliably every day of the week! 124269ccd446eSAtari911 124279ccd446eSAtari911**Default Changed**: Saturday start (was Monday in 4.2.0) 124289ccd446eSAtari911- Matches main calendar behavior 124299ccd446eSAtari911- Users can still switch to Monday in settings 124309ccd446eSAtari911 124319ccd446eSAtari911## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 124329ccd446eSAtari911 124339ccd446eSAtari911### ✨ New Feature 124349ccd446eSAtari911- **Added:** Week start day selector in Themes tab 124359ccd446eSAtari911- **Added:** Choose between Monday (ISO standard) or Saturday week start 124369ccd446eSAtari911- **Added:** Week grid and all events now respect the selected start day 124379ccd446eSAtari911- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 124389ccd446eSAtari911 124399ccd446eSAtari911### Week Start Options 124409ccd446eSAtari911 124419ccd446eSAtari911**Monday Start** (Default): 124429ccd446eSAtari911- Grid shows: M T W T F S S 124439ccd446eSAtari911- Week runs: Monday → Sunday 124449ccd446eSAtari911- ISO 8601 standard 124459ccd446eSAtari911- Common in Europe, most of world 124469ccd446eSAtari911 124479ccd446eSAtari911**Saturday Start**: 124489ccd446eSAtari911- Grid shows: S S M T W T F 124499ccd446eSAtari911- Week runs: Saturday → Friday 124509ccd446eSAtari911- Common in Middle East 124519ccd446eSAtari911- Sabbath-observant communities 124529ccd446eSAtari911 124539ccd446eSAtari911### Technical Details 124549ccd446eSAtari911 124559ccd446eSAtari911**Configuration**: 124569ccd446eSAtari911```php 124579ccd446eSAtari911// Saved in: data/meta/calendar_week_start.txt 124589ccd446eSAtari911// Values: 'monday' or 'saturday' 124599ccd446eSAtari911 124609ccd446eSAtari911// Week calculation: 124619ccd446eSAtari911if ($weekStartDay === 'saturday') { 124629ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('saturday this week')); 124639ccd446eSAtari911 $weekEnd = date('Y-m-d', strtotime('friday next week')); 124649ccd446eSAtari911} else { 124659ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('monday this week')); 124669ccd446eSAtari911 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 124679ccd446eSAtari911} 124689ccd446eSAtari911``` 124699ccd446eSAtari911 124709ccd446eSAtari911**Day Names Array**: 124719ccd446eSAtari911```php 124729ccd446eSAtari911// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 124739ccd446eSAtari911// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 124749ccd446eSAtari911``` 124759ccd446eSAtari911 124769ccd446eSAtari911**What Changes**: 124779ccd446eSAtari911- Week grid day letters 124789ccd446eSAtari911- Week grid date sequence 124799ccd446eSAtari911- Today/Tomorrow/Important event date ranges 124809ccd446eSAtari911- Week event grouping 124819ccd446eSAtari911 124829ccd446eSAtari911**What Stays Same**: 124839ccd446eSAtari911- All themes still work 124849ccd446eSAtari911- Event data unchanged 124859ccd446eSAtari911- Main calendar unaffected 124869ccd446eSAtari911 124879ccd446eSAtari911### How to Change: 124889ccd446eSAtari911 124899ccd446eSAtari9111. Admin → Calendar → Themes tab 124909ccd446eSAtari9112. Under "Week Start Day" section 124919ccd446eSAtari9113. Select Monday or Saturday 124929ccd446eSAtari9114. Click "Save Settings" 124939ccd446eSAtari9115. Refresh sidebar to see changes 124949ccd446eSAtari911 124959ccd446eSAtari911**Perfect for international users or religious observances!** 124969ccd446eSAtari911 124979ccd446eSAtari911## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 124989ccd446eSAtari911 124999ccd446eSAtari911### ️ Calendar Improvements 125009ccd446eSAtari911- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 125019ccd446eSAtari911- **Changed:** Event section backgrounds much lighter (almost white) 125029ccd446eSAtari911- **Changed:** Individual event backgrounds lighter and more readable 125039ccd446eSAtari911- **Changed:** Event borders now theme-colored 125049ccd446eSAtari911 125059ccd446eSAtari911### Technical Details 125069ccd446eSAtari911 125079ccd446eSAtari911**Week Start Change**: 125089ccd446eSAtari911```php 125099ccd446eSAtari911// Before: 125109ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('monday this week')); 125119ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('sunday this week')); 125129ccd446eSAtari911$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 125139ccd446eSAtari911 125149ccd446eSAtari911// After: 125159ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('sunday this week')); 125169ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('saturday this week')); 125179ccd446eSAtari911$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 125189ccd446eSAtari911``` 125199ccd446eSAtari911 125209ccd446eSAtari911**Background Colors**: 125219ccd446eSAtari911```php 125229ccd446eSAtari911// Section backgrounds (Today, Tomorrow, Important): 125239ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 125249ccd446eSAtari911Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 125259ccd446eSAtari911Professional: rgba(255, 255, 255, 0.95) // Almost white! 125269ccd446eSAtari911 125279ccd446eSAtari911// Individual event backgrounds: 125289ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.03) // Subtle 125299ccd446eSAtari911Purple: rgba(255, 255, 255, 0.05) // Light 125309ccd446eSAtari911Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 125319ccd446eSAtari911``` 125329ccd446eSAtari911 125339ccd446eSAtari911**Event Borders**: 125349ccd446eSAtari911```php 125359ccd446eSAtari911Matrix: rgba(0, 204, 7, 0.2) // Green 125369ccd446eSAtari911Purple: rgba(155, 89, 182, 0.2) // Purple 125379ccd446eSAtari911Professional: rgba(74, 144, 226, 0.2) // Blue 125389ccd446eSAtari911``` 125399ccd446eSAtari911 125409ccd446eSAtari911### Visual Result: 125419ccd446eSAtari911 125429ccd446eSAtari911**Before**: Dark backgrounds made text hard to read 125439ccd446eSAtari911**After**: Light backgrounds make events pop and text very readable 125449ccd446eSAtari911 125459ccd446eSAtari911**Week Grid**: 125469ccd446eSAtari911``` 125479ccd446eSAtari911Before: [M][T][W][T][F][S][S] 125489ccd446eSAtari911After: [S][M][T][W][T][F][S] ← Now matches main calendar! 125499ccd446eSAtari911``` 125509ccd446eSAtari911 125519ccd446eSAtari911## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 125529ccd446eSAtari911 125539ccd446eSAtari911### Final Theme Polish 125549ccd446eSAtari911- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 125559ccd446eSAtari911- **Fixed:** Event times now use theme bright color 125569ccd446eSAtari911- **Fixed:** Event dates use theme dim color 125579ccd446eSAtari911- **Fixed:** Task checkboxes use theme bright color 125589ccd446eSAtari911- **Fixed:** Event color bars use theme-appropriate shadows 125599ccd446eSAtari911- **Fixed:** No text shadows on Professional theme 125609ccd446eSAtari911 125619ccd446eSAtari911### Technical Details 125629ccd446eSAtari911 125639ccd446eSAtari911**Event Text Colors**: 125649ccd446eSAtari911```php 125659ccd446eSAtari911// Matrix: 125669ccd446eSAtari911- Title: #00cc07 (green) 125679ccd446eSAtari911- Time: #00dd00 (bright green) 125689ccd446eSAtari911- Date: #00aa00 (dim green) 125699ccd446eSAtari911- Text shadow: 0 0 3px (glow) 125709ccd446eSAtari911 125719ccd446eSAtari911// Purple: 125729ccd446eSAtari911- Title: #b19cd9 (lavender) 125739ccd446eSAtari911- Time: #d4a5ff (bright purple) 125749ccd446eSAtari911- Date: #8e7ab8 (dim purple) 125759ccd446eSAtari911- Text shadow: 0 0 3px (glow) 125769ccd446eSAtari911 125779ccd446eSAtari911// Professional: 125789ccd446eSAtari911- Title: #2c3e50 (dark grey) 125799ccd446eSAtari911- Time: #4a90e2 (blue) 125809ccd446eSAtari911- Date: #7f8c8d (grey) 125819ccd446eSAtari911- Text shadow: none (clean) 125829ccd446eSAtari911``` 125839ccd446eSAtari911 125849ccd446eSAtari911**Color Bar Shadows**: 125859ccd446eSAtari911```php 125869ccd446eSAtari911// Matrix & Purple: Glow effect 125879ccd446eSAtari911box-shadow: 0 0 3px [event-color]; 125889ccd446eSAtari911 125899ccd446eSAtari911// Professional: Subtle shadow 125909ccd446eSAtari911box-shadow: 0 1px 2px rgba(0,0,0,0.2); 125919ccd446eSAtari911``` 125929ccd446eSAtari911 125939ccd446eSAtari911### What's Now Fully Themed: 125949ccd446eSAtari911 125959ccd446eSAtari911✅ Sidebar background & border 125969ccd446eSAtari911✅ Header (clock box) background, border, text 125979ccd446eSAtari911✅ Week grid background, borders, cells 125989ccd446eSAtari911✅ Week grid day letters & numbers 125999ccd446eSAtari911✅ Week grid event bars & "+N more" text 126009ccd446eSAtari911✅ Add Event button background & text 126019ccd446eSAtari911✅ Today/Tomorrow/Important event titles 126029ccd446eSAtari911✅ Event times 126039ccd446eSAtari911✅ Event dates (Important section) 126049ccd446eSAtari911✅ Task checkboxes 126059ccd446eSAtari911✅ Event color bars 126069ccd446eSAtari911✅ All text shadows (glow vs none) 126079ccd446eSAtari911 126089ccd446eSAtari911**Every single element now respects the theme!** 126099ccd446eSAtari911 126109ccd446eSAtari911## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 126119ccd446eSAtari911 126129ccd446eSAtari911### Theme Improvements 126139ccd446eSAtari911- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 126149ccd446eSAtari911- **Fixed:** Add Event button now uses theme colors 126159ccd446eSAtari911- **Fixed:** Clock box border now matches theme 126169ccd446eSAtari911- **Fixed:** All text shadows respect theme (no glow on professional) 126179ccd446eSAtari911- **Fixed:** Event bars use theme-appropriate shadows 126189ccd446eSAtari911 126199ccd446eSAtari911### Technical Details 126209ccd446eSAtari911 126219ccd446eSAtari911**Week Grid Theming**: 126229ccd446eSAtari911```php 126239ccd446eSAtari911// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 126249ccd446eSAtari911// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 126259ccd446eSAtari911// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 126269ccd446eSAtari911``` 126279ccd446eSAtari911 126289ccd446eSAtari911**Add Event Button**: 126299ccd446eSAtari911```php 126309ccd446eSAtari911// Matrix: Dark green (#006400) with bright green text 126319ccd446eSAtari911// Purple: Purple (#7d3c98) with lavender text 126329ccd446eSAtari911// Professional: Blue (#3498db) with white text 126339ccd446eSAtari911``` 126349ccd446eSAtari911 126359ccd446eSAtari911**Text Shadows**: 126369ccd446eSAtari911```php 126379ccd446eSAtari911// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 126389ccd446eSAtari911// Professional: No glow (clean look) 126399ccd446eSAtari911``` 126409ccd446eSAtari911 126419ccd446eSAtari911**CSS Overrides**: 126429ccd446eSAtari911```css 126439ccd446eSAtari911/* Purple theme */ 126449ccd446eSAtari911.sidebar-purple .eventlist-today-header { 126459ccd446eSAtari911 border-color: #9b59b6; 126469ccd446eSAtari911 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 126479ccd446eSAtari911} 126489ccd446eSAtari911 126499ccd446eSAtari911/* Professional theme */ 126509ccd446eSAtari911.sidebar-professional .eventlist-today-header { 126519ccd446eSAtari911 border-color: #4a90e2; 126529ccd446eSAtari911 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 126539ccd446eSAtari911} 126549ccd446eSAtari911``` 126559ccd446eSAtari911 126569ccd446eSAtari911### What Changed Per Theme: 126579ccd446eSAtari911 126589ccd446eSAtari911**Purple Dream**: 126599ccd446eSAtari911- Week grid: Purple borders and dark purple background 126609ccd446eSAtari911- Add Event: Purple button with lavender text 126619ccd446eSAtari911- Clock box: Purple border with purple glow 126629ccd446eSAtari911- Event bars: Purple glow instead of green 126639ccd446eSAtari911- All text: Purple/lavender shades 126649ccd446eSAtari911 126659ccd446eSAtari911**Professional Blue**: 126669ccd446eSAtari911- Week grid: Blue borders and light grey background 126679ccd446eSAtari911- Add Event: Blue button with white text 126689ccd446eSAtari911- Clock box: Blue border with subtle shadow (no glow) 126699ccd446eSAtari911- Event bars: Subtle shadows (no glow) 126709ccd446eSAtari911- All text: Dark grey and blue shades 126719ccd446eSAtari911 126729ccd446eSAtari911**Matrix Edition**: Unchanged (still perfect green theme!) 126739ccd446eSAtari911 126749ccd446eSAtari911## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 126759ccd446eSAtari911 126769ccd446eSAtari911### ✨ New Features 126779ccd446eSAtari911- **Added:** Themes tab in admin for sidebar widget theming 126789ccd446eSAtari911- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 126799ccd446eSAtari911- **Added:** Theme selector with live previews 126809ccd446eSAtari911- **Added:** Theme persistence across page loads 126819ccd446eSAtari911 126829ccd446eSAtari911### Available Themes 126839ccd446eSAtari911 126849ccd446eSAtari911**Matrix Edition** (Default): 126859ccd446eSAtari911- Dark background (#242424) 126869ccd446eSAtari911- Green accents (#00cc07) 126879ccd446eSAtari911- Neon glow effects 126889ccd446eSAtari911- Original Matrix styling 126899ccd446eSAtari911 126909ccd446eSAtari911**Purple Dream**: 126919ccd446eSAtari911- Dark purple background (#2a2030) 126929ccd446eSAtari911- Purple/violet accents (#9b59b6) 126939ccd446eSAtari911- Elegant purple glow 126949ccd446eSAtari911- Rich purple color scheme 126959ccd446eSAtari911 126969ccd446eSAtari911**Professional Blue**: 126979ccd446eSAtari911- Light grey background (#f5f7fa) 126989ccd446eSAtari911- Blue accents (#4a90e2) 126999ccd446eSAtari911- Clean professional look 127009ccd446eSAtari911- Subtle shadows instead of glow 127019ccd446eSAtari911 127029ccd446eSAtari911### Bug Fix 127039ccd446eSAtari911- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 127049ccd446eSAtari911- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 127059ccd446eSAtari911 127069ccd446eSAtari911### Technical Details 127079ccd446eSAtari911 127089ccd446eSAtari911**Theme System**: 127099ccd446eSAtari911```php 127109ccd446eSAtari911// Saved in: data/meta/calendar_theme.txt 127119ccd446eSAtari911// Applied dynamically in syntax.php 127129ccd446eSAtari911$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 127139ccd446eSAtari911$styles = $this->getSidebarThemeStyles($theme); 127149ccd446eSAtari911 127159ccd446eSAtari911// Styles include: 127169ccd446eSAtari911- bg, border, shadow 127179ccd446eSAtari911- header_bg, header_border, header_shadow 127189ccd446eSAtari911- text_primary, text_bright, text_dim 127199ccd446eSAtari911- grid_bg, grid_border 127209ccd446eSAtari911- cell_bg, cell_today_bg 127219ccd446eSAtari911``` 127229ccd446eSAtari911 127239ccd446eSAtari911**Theme Changes**: 127249ccd446eSAtari911- Header background gradient 127259ccd446eSAtari911- Border colors 127269ccd446eSAtari911- Text colors 127279ccd446eSAtari911- Shadow/glow effects 127289ccd446eSAtari911- Grid colors 127299ccd446eSAtari911 127309ccd446eSAtari911**How to Change**: 127319ccd446eSAtari9111. Admin → Calendar → Themes tab 127329ccd446eSAtari9112. Select desired theme 127339ccd446eSAtari9113. Click "Save Theme" 127349ccd446eSAtari9114. Refresh page to see changes 127359ccd446eSAtari911 127369ccd446eSAtari911### Notes 127379ccd446eSAtari911- Themes only affect sidebar widget appearance 127389ccd446eSAtari911- Main calendar view unchanged 127399ccd446eSAtari911- Theme setting stored in `data/meta/calendar_theme.txt` 127409ccd446eSAtari911- Safe to switch themes - no data affected 127419ccd446eSAtari911 127429ccd446eSAtari911## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 127439ccd446eSAtari911 127449ccd446eSAtari911### Bug Fixes 127459ccd446eSAtari911- **Fixed:** Events now sort chronologically by time (was using string comparison) 127469ccd446eSAtari911- **Fixed:** Tooltip positioning using JavaScript like system tooltips 127479ccd446eSAtari911- **Fixed:** All-day events appear first, then events in time order 127489ccd446eSAtari911 127499ccd446eSAtari911### Technical Details 127509ccd446eSAtari911 127519ccd446eSAtari911**Event Sorting Fix**: 127529ccd446eSAtari911```php 127539ccd446eSAtari911// BROKEN (v4.0.9): 127549ccd446eSAtari911return strcmp($aTime, $bTime); 127559ccd446eSAtari911// String comparison: "10:00" < "8:00" because "1" < "8" 127569ccd446eSAtari911// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 127579ccd446eSAtari911 127589ccd446eSAtari911// FIXED (v4.1.0): 127599ccd446eSAtari911$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 127609ccd446eSAtari911$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 127619ccd446eSAtari911return $aMinutes - $bMinutes; 127629ccd446eSAtari911// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 127639ccd446eSAtari911``` 127649ccd446eSAtari911 127659ccd446eSAtari911**Example Before Fix**: 127669ccd446eSAtari911``` 127679ccd446eSAtari911 Weekend Ticket Duty (all-day) 127689ccd446eSAtari9118:00 AM START TICKETS 127699ccd446eSAtari91110:00 AM Soul Winning ← Wrong! 127709ccd446eSAtari9119:45 AM Coffee ← Should be before 10:00 AM 127719ccd446eSAtari911``` 127729ccd446eSAtari911 127739ccd446eSAtari911**Example After Fix**: 127749ccd446eSAtari911``` 127759ccd446eSAtari911 Weekend Ticket Duty (all-day) 127769ccd446eSAtari9118:00 AM START TICKETS 127779ccd446eSAtari9119:45 AM Coffee ← Correct! 127789ccd446eSAtari91110:00 AM Soul Winning 127799ccd446eSAtari911``` 127809ccd446eSAtari911 127819ccd446eSAtari911**Tooltip Positioning**: 127829ccd446eSAtari911- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 127839ccd446eSAtari911- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 127849ccd446eSAtari911- Positioned on `mouseenter` event 127859ccd446eSAtari911- Matches system tooltip implementation (no cutoff) 127869ccd446eSAtari911 127879ccd446eSAtari911**JavaScript Implementation**: 127889ccd446eSAtari911```javascript 127899ccd446eSAtari911element.addEventListener("mouseenter", function() { 127909ccd446eSAtari911 const rect = element.getBoundingClientRect(); 127919ccd446eSAtari911 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 127929ccd446eSAtari911 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 127939ccd446eSAtari911}); 127949ccd446eSAtari911``` 127959ccd446eSAtari911 127969ccd446eSAtari911**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 127979ccd446eSAtari911 127989ccd446eSAtari911## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 127999ccd446eSAtari911 128009ccd446eSAtari911### UI Improvements 128019ccd446eSAtari911- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 128029ccd446eSAtari911- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 128039ccd446eSAtari911- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 128049ccd446eSAtari911 128059ccd446eSAtari911### Technical Details 128069ccd446eSAtari911 128079ccd446eSAtari911**Sidebar Overflow Fix**: 128089ccd446eSAtari911```php 128099ccd446eSAtari911// Before (line 2005): 128109ccd446eSAtari911style="...overflow:hidden..." // ← Blocked tooltips! 128119ccd446eSAtari911 128129ccd446eSAtari911// After: 128139ccd446eSAtari911style="...overflow:visible..." // ← Tooltips extend beyond! 128149ccd446eSAtari911``` 128159ccd446eSAtari911 128169ccd446eSAtari911**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 128179ccd446eSAtari911 128189ccd446eSAtari911**Main Calendar Tooltip Size**: 128199ccd446eSAtari911```css 128209ccd446eSAtari911/* Before: */ 128219ccd446eSAtari911.conflict-tooltip { 128229ccd446eSAtari911 border: 2px solid #ff9800; 128239ccd446eSAtari911 border-radius: 6px; 128249ccd446eSAtari911 padding: 8px 12px; 128259ccd446eSAtari911 font-size: 12px; 128269ccd446eSAtari911 min-width: 200px; 128279ccd446eSAtari911 max-width: 350px; 128289ccd446eSAtari911} 128299ccd446eSAtari911 128309ccd446eSAtari911/* After: */ 128319ccd446eSAtari911.conflict-tooltip { 128329ccd446eSAtari911 border: 1px solid #ff9800; /* Thinner */ 128339ccd446eSAtari911 border-radius: 3px; /* Smaller */ 128349ccd446eSAtari911 padding: 4px 8px; /* Less padding */ 128359ccd446eSAtari911 font-size: 10px; /* Smaller header */ 128369ccd446eSAtari911 min-width: 120px; /* Narrower */ 128379ccd446eSAtari911 max-width: 200px; /* Narrower */ 128389ccd446eSAtari911} 128399ccd446eSAtari911 128409ccd446eSAtari911.conflict-tooltip-body { 128419ccd446eSAtari911 padding: 6px 8px; /* Was 10px 12px */ 128429ccd446eSAtari911 font-size: 9px; /* Was 11px */ 128439ccd446eSAtari911 line-height: 1.4; /* Was 1.6 */ 128449ccd446eSAtari911} 128459ccd446eSAtari911 128469ccd446eSAtari911.conflict-item { 128479ccd446eSAtari911 padding: 2px 0; /* Was 4px */ 128489ccd446eSAtari911 font-size: 9px; /* Added smaller font */ 128499ccd446eSAtari911} 128509ccd446eSAtari911``` 128519ccd446eSAtari911 128529ccd446eSAtari911**Result**: 128539ccd446eSAtari911- Main calendar tooltip ~50% smaller 128549ccd446eSAtari911- Sidebar tooltips now extend beyond borders 128559ccd446eSAtari911- Both tooltips compact and readable 128569ccd446eSAtari911 128579ccd446eSAtari911## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 128589ccd446eSAtari911 128599ccd446eSAtari911### Bug Fix 128609ccd446eSAtari911- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 128619ccd446eSAtari911- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 128629ccd446eSAtari911 128639ccd446eSAtari911### Technical Details 128649ccd446eSAtari911 128659ccd446eSAtari911**The Problem**: 128669ccd446eSAtari911```php 128679ccd446eSAtari911// Before (v4.0.7): 128689ccd446eSAtari911$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 128699ccd446eSAtari911 128709ccd446eSAtari911// Displayed as: 128719ccd446eSAtari911"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 128729ccd446eSAtari911``` 128739ccd446eSAtari911 128749ccd446eSAtari911**The Fix**: 128759ccd446eSAtari911```php 128769ccd446eSAtari911// After (v4.0.8): 128779ccd446eSAtari911$conflictTooltip = "Conflicts with: "; // HTML entity for newline 128789ccd446eSAtari911 128799ccd446eSAtari911// Displays as: 128809ccd446eSAtari911Conflicts with: 128819ccd446eSAtari911• Event 1 128829ccd446eSAtari911• Event 2 128839ccd446eSAtari911``` 128849ccd446eSAtari911 128859ccd446eSAtari911**Why ` ` Works**: 128869ccd446eSAtari911- HTML entity for line feed character 128879ccd446eSAtari911- Works in data attributes 128889ccd446eSAtari911- CSS `white-space: pre-line` preserves the newlines 128899ccd446eSAtari911- Renders as actual line breaks in tooltip 128909ccd446eSAtari911 128919ccd446eSAtari911**Applied to**: 128929ccd446eSAtari911- PHP rendering (sidebar Today/Tomorrow/Important) 128939ccd446eSAtari911- JavaScript rendering (clicked day events) 128949ccd446eSAtari911 128959ccd446eSAtari911## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 128969ccd446eSAtari911 128979ccd446eSAtari911### UI Improvements 128989ccd446eSAtari911- **Changed:** Tooltip size reduced significantly (much more compact) 128999ccd446eSAtari911- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 129009ccd446eSAtari911- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 129019ccd446eSAtari911- **Changed:** Narrower width (120-200px vs 200-300px) 129029ccd446eSAtari911 129039ccd446eSAtari911### Technical Details 129049ccd446eSAtari911 129059ccd446eSAtari911**Tooltip Size Reduction**: 129069ccd446eSAtari911```css 129079ccd446eSAtari911/* Before (v4.0.6): 129089ccd446eSAtari911padding: 6px 10px; 129099ccd446eSAtari911font-size: 11px; 129109ccd446eSAtari911min-width: 200px; 129119ccd446eSAtari911max-width: 300px; 129129ccd446eSAtari911 129139ccd446eSAtari911/* After (v4.0.7): */ 129149ccd446eSAtari911padding: 3px 6px; 129159ccd446eSAtari911font-size: 9px; 129169ccd446eSAtari911min-width: 120px; 129179ccd446eSAtari911max-width: 200px; 129189ccd446eSAtari911``` 129199ccd446eSAtari911 129209ccd446eSAtari911**Overflow Fix**: 129219ccd446eSAtari911```css 129229ccd446eSAtari911/* Allow tooltip to extend beyond sidebar */ 129239ccd446eSAtari911.sidebar-widget, 129249ccd446eSAtari911.sidebar-matrix { 129259ccd446eSAtari911 overflow: visible !important; 129269ccd446eSAtari911} 129279ccd446eSAtari911 129289ccd446eSAtari911/* Position tooltip outside */ 129299ccd446eSAtari911[data-tooltip]:before { 129309ccd446eSAtari911 bottom: 120%; /* Further above */ 129319ccd446eSAtari911 right: -10px; /* Can extend beyond edge */ 129329ccd446eSAtari911 z-index: 10000; /* Always on top */ 129339ccd446eSAtari911} 129349ccd446eSAtari911``` 129359ccd446eSAtari911 129369ccd446eSAtari911**Visual Result**: 129379ccd446eSAtari911- Tooltip is ~40% smaller 129389ccd446eSAtari911- Extends beyond sidebar border if needed 129399ccd446eSAtari911- Still readable, just more compact 129409ccd446eSAtari911- Better for small screens 129419ccd446eSAtari911 129429ccd446eSAtari911## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 129439ccd446eSAtari911 129449ccd446eSAtari911### Critical Fix 129459ccd446eSAtari911- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 129469ccd446eSAtari911- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 129479ccd446eSAtari911- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 129489ccd446eSAtari911- **Fixed:** Now matches what you see in main calendar view 129499ccd446eSAtari911 129509ccd446eSAtari911### ✨ UI Improvement 129519ccd446eSAtari911- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 129529ccd446eSAtari911- **Added:** Custom CSS tooltip with data-tooltip attribute 129539ccd446eSAtari911- **Improved:** Better tooltip positioning - doesn't overflow screen edges 129549ccd446eSAtari911 129559ccd446eSAtari911### Technical Details 129569ccd446eSAtari911 129579ccd446eSAtari911**The Problem - Field Name Mismatch**: 129589ccd446eSAtari911```php 129599ccd446eSAtari911// Main calendar (line 697): 129609ccd446eSAtari911$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 129619ccd446eSAtari911 129629ccd446eSAtari911// Sidebar (before fix): 129639ccd446eSAtari911$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 129649ccd446eSAtari911``` 129659ccd446eSAtari911 129669ccd446eSAtari911**The Problem - Duration Logic**: 129679ccd446eSAtari911```php 129689ccd446eSAtari911// Main calendar (line 697): 129699ccd446eSAtari911$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 129709ccd446eSAtari911 ? $evt1['endTime'] 129719ccd446eSAtari911 : $evt1['time']; // ← Uses START time (zero duration) 129729ccd446eSAtari911 129739ccd446eSAtari911// Sidebar (before fix): 129749ccd446eSAtari911$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 129759ccd446eSAtari911``` 129769ccd446eSAtari911 129779ccd446eSAtari911**The Fix**: 129789ccd446eSAtari911```php 129799ccd446eSAtari911// Now checks BOTH field names: 129809ccd446eSAtari911if (isset($event['end_time']) && $event['end_time'] !== '') { 129819ccd446eSAtari911 $endTime = $event['end_time']; 129829ccd446eSAtari911} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 129839ccd446eSAtari911 $endTime = $event['endTime']; 129849ccd446eSAtari911} else { 129859ccd446eSAtari911 $endTime = $startTime; // ← Matches main calendar! 129869ccd446eSAtari911} 129879ccd446eSAtari911``` 129889ccd446eSAtari911 129899ccd446eSAtari911**Tooltip Positioning**: 129909ccd446eSAtari911- Uses `data-tooltip` attribute instead of `title` 129919ccd446eSAtari911- CSS positions tooltip ABOVE badge (`bottom: 100%`) 129929ccd446eSAtari911- Aligns to RIGHT edge (`right: 0`) 129939ccd446eSAtari911- Arrow points down to badge 129949ccd446eSAtari911- Black background with white text 129959ccd446eSAtari911- Max width 300px 129969ccd446eSAtari911 129979ccd446eSAtari911### Example 129989ccd446eSAtari911 129999ccd446eSAtari911**6:00 PM Evening Service** (no end time): 130009ccd446eSAtari911- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 130019ccd446eSAtari911- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 130029ccd446eSAtari911 130039ccd446eSAtari911**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 130049ccd446eSAtari911- Zero-duration events at 6:00 PM don't overlap with anything 130059ccd446eSAtari911- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 130069ccd446eSAtari911 130079ccd446eSAtari911**Tooltip appears**: 130089ccd446eSAtari911``` 130099ccd446eSAtari911 ┌────────────────────┐ 130109ccd446eSAtari911 │ Conflicts with: │ 130119ccd446eSAtari911 │ • Super Bowl │ 130129ccd446eSAtari911 │ (3:30 PM-7:00 PM)│ 130139ccd446eSAtari911 └─────────┬──────────┘ 130149ccd446eSAtari911 ▼ 130159ccd446eSAtari911 ⚠ 130169ccd446eSAtari911``` 130179ccd446eSAtari911 130189ccd446eSAtari911## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 130199ccd446eSAtari911 130209ccd446eSAtari911### Bug Fix 130219ccd446eSAtari911- **Fixed:** Events without end_time now properly get 1-hour default duration 130229ccd446eSAtari911- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 130239ccd446eSAtari911- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 130249ccd446eSAtari911 130259ccd446eSAtari911### Technical Details 130269ccd446eSAtari911 130279ccd446eSAtari911**The Problem**: 130289ccd446eSAtari911```php 130299ccd446eSAtari911// Before (broken): 130309ccd446eSAtari911$endTime = isset($event['end_time']) ? $event['end_time'] : default; 130319ccd446eSAtari911 130329ccd446eSAtari911// If end_time exists but is empty string "": 130339ccd446eSAtari911isset($event['end_time']) = TRUE 130349ccd446eSAtari911$endTime = "" // ← Empty string, not default! 130359ccd446eSAtari911``` 130369ccd446eSAtari911 130379ccd446eSAtari911**The Fix**: 130389ccd446eSAtari911```php 130399ccd446eSAtari911// After (fixed): 130409ccd446eSAtari911$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 130419ccd446eSAtari911 ? $event['end_time'] 130429ccd446eSAtari911 : $this->addHoursToTime($startTime, 1); 130439ccd446eSAtari911 130449ccd446eSAtari911// Now empty string gets the default 1-hour duration 130459ccd446eSAtari911``` 130469ccd446eSAtari911 130479ccd446eSAtari911**Why This Matters**: 130489ccd446eSAtari911Events 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. 130499ccd446eSAtari911 130509ccd446eSAtari911**Example**: 130519ccd446eSAtari911``` 130529ccd446eSAtari911Super Bowl: 3:30 PM - 7:00 PM 130539ccd446eSAtari911Evening Service: 6:00 PM - ??? (should be 7:00 PM) 130549ccd446eSAtari911 130559ccd446eSAtari911If end_time = "" (empty string): 130569ccd446eSAtari911 Old code: Uses "" → conflict detection fails 130579ccd446eSAtari911 New code: Uses 7:00 PM → conflict detected ✓ 130589ccd446eSAtari911``` 130599ccd446eSAtari911 130609ccd446eSAtari911### Testing 130619ccd446eSAtari911If you're still not seeing the conflict on the 6:00 PM service: 130629ccd446eSAtari9111. Check if the event has `end_time` set in the JSON 130639ccd446eSAtari9112. Clear cache (Admin → Manage Events → Clear Cache) 130649ccd446eSAtari9113. The conflict should now appear 130659ccd446eSAtari911 130669ccd446eSAtari911## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 130679ccd446eSAtari911 130689ccd446eSAtari911### ✨ Feature Added 130699ccd446eSAtari911- **Added:** Hover over ⚠ badge to see which events are conflicting 130709ccd446eSAtari911- **Added:** Tooltip shows conflicting event titles and times 130719ccd446eSAtari911- **Added:** Works in both sidebar sections and clicked day events 130729ccd446eSAtari911 130739ccd446eSAtari911### Technical Details 130749ccd446eSAtari911 130759ccd446eSAtari911**Conflict Tracking Enhanced**: 130769ccd446eSAtari911```php 130779ccd446eSAtari911// Now tracks WHICH events conflict: 130789ccd446eSAtari911$event['conflictingWith'] = [ 130799ccd446eSAtari911 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 130809ccd446eSAtari911 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 130819ccd446eSAtari911]; 130829ccd446eSAtari911``` 130839ccd446eSAtari911 130849ccd446eSAtari911**Tooltip Format**: 130859ccd446eSAtari911``` 130869ccd446eSAtari911Conflicts with: 130879ccd446eSAtari911• Meeting (10:00 AM-11:00 AM) 130889ccd446eSAtari911• Call (10:30 AM-11:30 PM) 130899ccd446eSAtari911``` 130909ccd446eSAtari911 130919ccd446eSAtari911**Where It Works**: 130929ccd446eSAtari911- ✅ Today section (sidebar) 130939ccd446eSAtari911- ✅ Tomorrow section (sidebar) 130949ccd446eSAtari911- ✅ Important Events section (sidebar) 130959ccd446eSAtari911- ✅ Clicked day events (week grid) 130969ccd446eSAtari911 130979ccd446eSAtari911**Cursor**: Changes to `help` cursor on hover to indicate tooltip 130989ccd446eSAtari911 130999ccd446eSAtari911### Note on Multi-Day Events 131009ccd446eSAtari911The 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. 131019ccd446eSAtari911 131029ccd446eSAtari911## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 131039ccd446eSAtari911 131049ccd446eSAtari911### Bug Fixes 131059ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 131069ccd446eSAtari911- **Fixed:** Important Events now shows events even if they're today or tomorrow 131079ccd446eSAtari911- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 131089ccd446eSAtari911 131099ccd446eSAtari911### Technical Details 131109ccd446eSAtari911 131119ccd446eSAtari911**Conflict Badge Issue**: 131129ccd446eSAtari911```php 131139ccd446eSAtari911// BROKEN (line 2511): 131149ccd446eSAtari911$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 131159ccd446eSAtari911// ↑ Checking 'conflicts' (plural) 131169ccd446eSAtari911 131179ccd446eSAtari911// But detectTimeConflicts() sets: 131189ccd446eSAtari911$event['conflict'] = true/false; 131199ccd446eSAtari911// ↑ Setting 'conflict' (singular) 131209ccd446eSAtari911 131219ccd446eSAtari911// FIXED: 131229ccd446eSAtari911$hasConflict = isset($event['conflict']) && $event['conflict']; 131239ccd446eSAtari911``` 131249ccd446eSAtari911 131259ccd446eSAtari911**Result**: Badge now shows for ALL conflicting events in sidebar sections 131269ccd446eSAtari911 131279ccd446eSAtari911**Important Events Logic Issue**: 131289ccd446eSAtari911```php 131299ccd446eSAtari911// BROKEN: 131309ccd446eSAtari911if ($dateKey === $todayStr) { 131319ccd446eSAtari911 $todayEvents[] = ...; 131329ccd446eSAtari911} elseif ($dateKey === $tomorrowStr) { 131339ccd446eSAtari911 $tomorrowEvents[] = ...; 131349ccd446eSAtari911} else { // ← Only checked if NOT today/tomorrow! 131359ccd446eSAtari911 if ($isImportant) { 131369ccd446eSAtari911 $importantEvents[] = ...; 131379ccd446eSAtari911 } 131389ccd446eSAtari911} 131399ccd446eSAtari911 131409ccd446eSAtari911// FIXED: 131419ccd446eSAtari911if ($dateKey === $todayStr) { 131429ccd446eSAtari911 $todayEvents[] = ...; 131439ccd446eSAtari911} 131449ccd446eSAtari911if ($dateKey === $tomorrowStr) { 131459ccd446eSAtari911 $tomorrowEvents[] = ...; 131469ccd446eSAtari911} 131479ccd446eSAtari911// ↑ Changed to separate 'if' statements 131489ccd446eSAtari911if ($isImportant && $dateKey in this week) { 131499ccd446eSAtari911 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 131509ccd446eSAtari911} 131519ccd446eSAtari911``` 131529ccd446eSAtari911 131539ccd446eSAtari911**Result**: Important namespace events now show in Important section even if they're today or tomorrow 131549ccd446eSAtari911 131559ccd446eSAtari911### Conflict Badge Display 131569ccd446eSAtari911- Simplified to just ⚠ icon (no count) 131579ccd446eSAtari911- Orange color (#ff9800) 131589ccd446eSAtari911- 10px font size 131599ccd446eSAtari911- Hover shows "Time conflict detected" 131609ccd446eSAtari911 131619ccd446eSAtari911## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 131629ccd446eSAtari911 131639ccd446eSAtari911### Bug Fix 131649ccd446eSAtari911- **Fixed:** Important Events section now displays all events correctly 131659ccd446eSAtari911- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 131669ccd446eSAtari911- **Fixed:** Conflict detection no longer causes events to disappear from Important section 131679ccd446eSAtari911 131689ccd446eSAtari911### Technical Details 131699ccd446eSAtari911 131709ccd446eSAtari911**The Problem**: 131719ccd446eSAtari911- `detectTimeConflicts()` returned early if only 1 event on a day 131729ccd446eSAtari911- Returned original array without adding 'conflict' field 131739ccd446eSAtari911- This inconsistency caused issues in event categorization 131749ccd446eSAtari911 131759ccd446eSAtari911**The Solution**: 131769ccd446eSAtari911```php 131779ccd446eSAtari911// Before (broken): 131789ccd446eSAtari911if (empty($dayEvents) || count($dayEvents) < 2) { 131799ccd446eSAtari911 return $dayEvents; // No 'conflict' field added! 131809ccd446eSAtari911} 131819ccd446eSAtari911 131829ccd446eSAtari911// After (fixed): 131839ccd446eSAtari911if (count($dayEvents) === 1) { 131849ccd446eSAtari911 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 131859ccd446eSAtari911} 131869ccd446eSAtari911``` 131879ccd446eSAtari911 131889ccd446eSAtari911**Result**: 131899ccd446eSAtari911- All events now have 'conflict' field consistently 131909ccd446eSAtari911- Single events: conflict = false 131919ccd446eSAtari911- Multiple events: conflict = true/false based on overlap 131929ccd446eSAtari911- Important Events section displays correctly 131939ccd446eSAtari911 131949ccd446eSAtari911## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 131959ccd446eSAtari911 131969ccd446eSAtari911### Bug Fixes 131979ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in clicked day events 131989ccd446eSAtari911- **Fixed:** Recurring events edit now updates time and end_time correctly 131999ccd446eSAtari911- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 132009ccd446eSAtari911 132019ccd446eSAtari911### ✨ Features Added 132029ccd446eSAtari911- **Added:** Time conflict detection for overlapping events 132039ccd446eSAtari911- **Added:** detectTimeConflicts() function checks all events on same day 132049ccd446eSAtari911- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 132059ccd446eSAtari911- **Added:** Events now have 'conflict' flag set automatically 132069ccd446eSAtari911 132079ccd446eSAtari911### UI Changes 132089ccd446eSAtari911- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 132099ccd446eSAtari911- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 132109ccd446eSAtari911- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 132119ccd446eSAtari911 132129ccd446eSAtari911### Technical Details 132139ccd446eSAtari911 132149ccd446eSAtari911**Conflict Detection**: 132159ccd446eSAtari911```php 132169ccd446eSAtari911// Automatically detects overlapping events on same day 132179ccd446eSAtari911// Sets 'conflict' flag to true if event overlaps with another 132189ccd446eSAtari911$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 132199ccd446eSAtari911``` 132209ccd446eSAtari911 132219ccd446eSAtari911**Logic**: 132229ccd446eSAtari911- All-day events never conflict (no time set) 132239ccd446eSAtari911- Timed events check for overlap with other timed events 132249ccd446eSAtari911- Overlap = start1 < end2 AND start2 < end1 132259ccd446eSAtari911- Default duration is 60 minutes if no end_time 132269ccd446eSAtari911 132279ccd446eSAtari911**Recurring Events Fix**: 132289ccd446eSAtari911- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 132299ccd446eSAtari911- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 132309ccd446eSAtari911- Now edits actually save and update the events 132319ccd446eSAtari911 132329ccd446eSAtari911**Week View Bars**: 132339ccd446eSAtari911- Shows 4 colored bars instead of 3 132349ccd446eSAtari911- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 132359ccd446eSAtari911 13236231d0edbSAtari911## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 13237231d0edbSAtari911 13238231d0edbSAtari911**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 13239231d0edbSAtari911 13240231d0edbSAtari911### Major Features 13241231d0edbSAtari911 13242231d0edbSAtari911#### Sidebar Widget 13243231d0edbSAtari911- **Week Grid**: Interactive 7-day calendar with click-to-view events 13244231d0edbSAtari911- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 13245231d0edbSAtari911- **Live Clock**: Updates every second with date display 13246231d0edbSAtari911- **Real-time Weather**: Geolocation-based temperature with icon 13247231d0edbSAtari911- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 13248231d0edbSAtari911- **Add Event Button**: Dark green bar opens full event creation dialog 13249231d0edbSAtari911- **Matrix Theme**: Green glow effects throughout 13250231d0edbSAtari911 13251231d0edbSAtari911#### Event Management 13252231d0edbSAtari911- **Single Color Bars**: Clean 3px bars showing event's assigned color 13253231d0edbSAtari911- **All-Day Events First**: Then sorted chronologically by time 13254231d0edbSAtari911- **Conflict Detection**: Orange ⚠ badge on overlapping events 13255231d0edbSAtari911- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 13256231d0edbSAtari911- **HTML Rendering**: Pre-rendered for JavaScript display 13257231d0edbSAtari911- **Click-to-View**: Click week grid days to expand event details 13258231d0edbSAtari911 13259231d0edbSAtari911#### Admin Interface 13260231d0edbSAtari911- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 13261231d0edbSAtari911- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 13262231d0edbSAtari911- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 13263231d0edbSAtari911 13264231d0edbSAtari911#### Outlook Sync 13265231d0edbSAtari911- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 13266231d0edbSAtari911- **Category Mapping**: Map colors to Outlook categories 13267231d0edbSAtari911- **Conflict Resolution**: Time conflict detection 13268231d0edbSAtari911- **Import/Export Config**: Encrypted configuration files 13269231d0edbSAtari911 13270231d0edbSAtari911### Design 13271231d0edbSAtari911- **Matrix Theme**: Authentic green glow aesthetic 13272231d0edbSAtari911- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 13273231d0edbSAtari911- **Color Scheme**: 13274231d0edbSAtari911 - Today: Orange #ff9800 13275231d0edbSAtari911 - Tomorrow: Green #4caf50 13276231d0edbSAtari911 - Important: Purple #9b59b6 13277231d0edbSAtari911 - Add Event: Dark green #006400 13278231d0edbSAtari911 - System bars: Green/Purple/Orange 13279231d0edbSAtari911 13280231d0edbSAtari911### Technical Highlights 13281231d0edbSAtari911- **Zero-margin Design**: Perfect flush alignment throughout 13282231d0edbSAtari911- **Flexbox Layout**: Modern, responsive structure 13283231d0edbSAtari911- **AJAX Operations**: No page reloads needed 13284231d0edbSAtari911- **Smart Sorting**: All-day events first, then chronological 13285231d0edbSAtari911- **Tooltip System**: Detailed stats on hover (working correctly) 13286231d0edbSAtari911- **Event Dialog**: Full form with drag support 13287231d0edbSAtari911- **Cache Management**: One-click cache clearing 13288231d0edbSAtari911 13289231d0edbSAtari911### Breaking Changes from v3.x 13290231d0edbSAtari911- Removed dual color bars (now single event color bar only) 13291231d0edbSAtari911- Add Event button moved to between header and week grid 13292231d0edbSAtari911- All-day events now appear FIRST (not last) 13293231d0edbSAtari911- Update Plugin tab is now the default admin tab 13294231d0edbSAtari911 13295231d0edbSAtari911### Bug Fixes (v3.10.x → v4.0.0) 13296231d0edbSAtari911- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 13297231d0edbSAtari911- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 13298231d0edbSAtari911- ✅ Fixed weather display (added updateWeather function) 13299231d0edbSAtari911- ✅ Fixed HTML rendering in events (title_html/description_html fields) 13300231d0edbSAtari911- ✅ Fixed Add Event dialog (null check for calendar element) 13301231d0edbSAtari911- ✅ Fixed text positioning in Add Event button 13302231d0edbSAtari911- ✅ Fixed spacing throughout sidebar widget 13303231d0edbSAtari911 13304231d0edbSAtari911### Complete Feature List 13305231d0edbSAtari911- Full calendar view (month grid) 13306231d0edbSAtari911- Sidebar widget (week view) 13307231d0edbSAtari911- Event panel (standalone) 13308231d0edbSAtari911- Event list (date ranges) 13309231d0edbSAtari911- Namespace support 13310231d0edbSAtari911- Color coding 13311231d0edbSAtari911- Time conflict detection 13312231d0edbSAtari911- DokuWiki syntax in events 13313231d0edbSAtari911- Outlook synchronization 13314231d0edbSAtari911- System monitoring 13315231d0edbSAtari911- Weather display 13316231d0edbSAtari911- Live clock 13317231d0edbSAtari911- Admin interface 13318231d0edbSAtari911- Cache management 13319231d0edbSAtari911- Draggable dialogs 13320231d0edbSAtari911- AJAX save/edit/delete 13321231d0edbSAtari911- Import/export config 13322231d0edbSAtari911 13323231d0edbSAtari911### Usage 13324231d0edbSAtari911 13325231d0edbSAtari911**Sidebar Widget**: 13326231d0edbSAtari911``` 13327231d0edbSAtari911{{calendar sidebar}} 13328231d0edbSAtari911{{calendar sidebar namespace=team}} 13329231d0edbSAtari911``` 13330231d0edbSAtari911 13331231d0edbSAtari911**Full Calendar**: 13332231d0edbSAtari911``` 13333231d0edbSAtari911{{calendar}} 13334231d0edbSAtari911{{calendar year=2026 month=6 namespace=team}} 13335231d0edbSAtari911``` 13336231d0edbSAtari911 13337231d0edbSAtari911**Event Panel**: 13338231d0edbSAtari911``` 13339231d0edbSAtari911{{eventpanel}} 13340231d0edbSAtari911``` 13341231d0edbSAtari911 13342231d0edbSAtari911**Event List**: 13343231d0edbSAtari911``` 13344231d0edbSAtari911{{eventlist daterange=2026-01-01:2026-01-31}} 13345231d0edbSAtari911``` 13346231d0edbSAtari911 13347231d0edbSAtari911### Stats 13348231d0edbSAtari911- **40+ versions** developed during v3.x iterations 13349231d0edbSAtari911- **3.10.0 → 3.11.4**: Polish and refinement 13350231d0edbSAtari911- **4.0.0**: Production-ready Matrix Edition 13351231d0edbSAtari911 13352231d0edbSAtari911### Credits 13353231d0edbSAtari911Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 13354231d0edbSAtari911 13355231d0edbSAtari911--- 13356231d0edbSAtari911 13357231d0edbSAtari911## Previous Versions (v3.11.4 and earlier) 13358231d0edbSAtari911 13359231d0edbSAtari911## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 13360231d0edbSAtari911- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 13361231d0edbSAtari911- **Improved:** Small breathing room between system stats bars and Add Event button 13362231d0edbSAtari911- **Visual:** Better spacing for cleaner appearance 13363231d0edbSAtari911 13364231d0edbSAtari911### CSS Change: 13365231d0edbSAtari911**eventlist-today-header**: 13366231d0edbSAtari911- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 13367231d0edbSAtari911 13368231d0edbSAtari911### Visual Result: 13369231d0edbSAtari911``` 13370231d0edbSAtari911│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 13371231d0edbSAtari911│ │ ← 2px space (restored) 13372231d0edbSAtari911├───────────────────────┤ 13373231d0edbSAtari911│ + ADD EVENT │ ← Add Event bar 13374231d0edbSAtari911├───────────────────────┤ 13375231d0edbSAtari911``` 13376231d0edbSAtari911 13377231d0edbSAtari911**Before (v3.11.3)**: No space, bars directly touch Add Event button 13378231d0edbSAtari911**After (v3.11.4)**: 2px breathing room for better visual hierarchy 13379231d0edbSAtari911 13380231d0edbSAtari911## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 13381231d0edbSAtari911- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 13382231d0edbSAtari911- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 13383231d0edbSAtari911- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 13384231d0edbSAtari911- **Changed:** Line-height reduced from 12px to 10px for better text centering 13385231d0edbSAtari911- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 13386231d0edbSAtari911 13387231d0edbSAtari911### JavaScript Fix: 13388231d0edbSAtari911**Problem**: Line 1084-1085 in calendar-main.js 13389231d0edbSAtari911```javascript 13390231d0edbSAtari911const calendar = document.getElementById(calId); 13391231d0edbSAtari911const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 13392231d0edbSAtari911``` 13393231d0edbSAtari911 13394231d0edbSAtari911**Solution**: Added null check 13395231d0edbSAtari911```javascript 13396231d0edbSAtari911const calendar = document.getElementById(calId); 13397231d0edbSAtari911const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 13398231d0edbSAtari911``` 13399231d0edbSAtari911 13400231d0edbSAtari911**Why This Happened**: 13401231d0edbSAtari911- Regular calendar has element with id=calId 13402231d0edbSAtari911- Sidebar widget doesn't have this element (different structure) 13403231d0edbSAtari911- Code tried to read .dataset on null, causing error 13404231d0edbSAtari911 13405231d0edbSAtari911### Text Position Fix: 13406231d0edbSAtari911**Before**: 13407231d0edbSAtari911- line-height: 12px 13408231d0edbSAtari911- vertical-align: middle 13409231d0edbSAtari911- Text slightly low 13410231d0edbSAtari911 13411231d0edbSAtari911**After**: 13412231d0edbSAtari911- line-height: 10px 13413231d0edbSAtari911- position: relative; top: -1px 13414231d0edbSAtari911- Text perfectly centered 13415231d0edbSAtari911 13416231d0edbSAtari911### What Works Now: 13417231d0edbSAtari911✅ Click "+ ADD EVENT" in sidebar → Dialog opens 13418231d0edbSAtari911✅ No console errors 13419231d0edbSAtari911✅ Text properly centered vertically 13420231d0edbSAtari911✅ Form pre-filled with today's date 13421231d0edbSAtari911✅ Save works correctly 13422231d0edbSAtari911 13423231d0edbSAtari911## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 13424231d0edbSAtari911- **Added:** Event dialog to sidebar widget (same as regular calendar) 13425231d0edbSAtari911- **Changed:** Add Event button now opens proper event form dialog 13426231d0edbSAtari911- **Added:** renderEventDialog() called in renderSidebarWidget() 13427231d0edbSAtari911- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 13428231d0edbSAtari911- **Improved:** Can now add events directly from sidebar widget 13429231d0edbSAtari911 13430231d0edbSAtari911### Add Event Button Behavior: 13431231d0edbSAtari911**Before (v3.11.1)**: Showed alert with instructions 13432231d0edbSAtari911**After (v3.11.2)**: Opens full event creation dialog 13433231d0edbSAtari911 13434231d0edbSAtari911**Dialog Features**: 13435231d0edbSAtari911- Date field (defaults to today) 13436231d0edbSAtari911- Title field (required) 13437231d0edbSAtari911- Time field (optional) 13438231d0edbSAtari911- End time field (optional) 13439231d0edbSAtari911- Color picker 13440231d0edbSAtari911- Category field 13441231d0edbSAtari911- Description field 13442231d0edbSAtari911- Save and Cancel buttons 13443231d0edbSAtari911- Draggable dialog 13444231d0edbSAtari911 13445231d0edbSAtari911### Technical Changes: 13446231d0edbSAtari911- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 13447231d0edbSAtari911- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 13448231d0edbSAtari911- Dialog uses same structure as regular calendar 13449231d0edbSAtari911- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 13450231d0edbSAtari911 13451231d0edbSAtari911### User Flow: 13452231d0edbSAtari9111. User clicks "+ ADD EVENT" green bar 13453231d0edbSAtari9112. Event dialog opens with today's date pre-filled 13454231d0edbSAtari9113. User fills in event details 13455231d0edbSAtari9114. User clicks Save 13456231d0edbSAtari9115. Event saved via AJAX 13457231d0edbSAtari9116. Dialog closes 13458231d0edbSAtari9117. Sidebar refreshes to show new event 13459231d0edbSAtari911 13460231d0edbSAtari911## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 13461231d0edbSAtari911- **Fixed:** Removed bottom padding from header (was 2px, now 0) 13462231d0edbSAtari911- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 13463231d0edbSAtari911- **Fixed:** Add Event bar now flush against header with zero gap 13464231d0edbSAtari911- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 13465231d0edbSAtari911- **Improved:** Alert provides clear instructions on how to add events 13466231d0edbSAtari911 13467231d0edbSAtari911### CSS Changes: 13468231d0edbSAtari911**eventlist-today-header**: 13469231d0edbSAtari911- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 13470231d0edbSAtari911 13471231d0edbSAtari911**eventlist-stats-container**: 13472231d0edbSAtari911- `margin-top: 2px` → `margin: 0` (removed all margins) 13473231d0edbSAtari911 13474231d0edbSAtari911### Add Event Button Behavior: 13475231d0edbSAtari911**Before**: Clicked → Navigated to Admin → Manage Events tab 13476231d0edbSAtari911**After**: Clicked → Shows alert with instructions 13477231d0edbSAtari911 13478231d0edbSAtari911**Alert Message**: 13479231d0edbSAtari911``` 13480231d0edbSAtari911To add an event, go to: 13481231d0edbSAtari911Admin → Calendar Management → Manage Events tab 13482231d0edbSAtari911or use the full calendar view {{calendar}} 13483231d0edbSAtari911``` 13484231d0edbSAtari911 13485231d0edbSAtari911### Visual Result: 13486231d0edbSAtari911``` 13487231d0edbSAtari911│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 13488231d0edbSAtari911├────────────────────────┤ 13489231d0edbSAtari911│ + ADD EVENT │ ← Perfectly flush! 13490231d0edbSAtari911├────────────────────────┤ 13491231d0edbSAtari911``` 13492231d0edbSAtari911 13493231d0edbSAtari911No gaps, perfectly aligned! 13494231d0edbSAtari911 13495231d0edbSAtari911## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 13496231d0edbSAtari911- **Moved:** Add Event bar back to original position (between header and week grid) 13497231d0edbSAtari911- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 13498231d0edbSAtari911- **Changed:** Letter spacing reduced from 0.5px to 0.4px 13499231d0edbSAtari911- **Fixed:** Text now fully visible without being cut off 13500231d0edbSAtari911- **Final:** Optimal position and size determined 13501231d0edbSAtari911 13502231d0edbSAtari911### Final Layout: 13503231d0edbSAtari911``` 13504231d0edbSAtari911┌─────────────────────────────┐ 13505231d0edbSAtari911│ Clock | Weather | Stats │ ← Header 13506231d0edbSAtari911├─────────────────────────────┤ 13507231d0edbSAtari911│ + ADD EVENT │ ← Bar (back here, smaller text) 13508231d0edbSAtari911├─────────────────────────────┤ 13509231d0edbSAtari911│ M T W T F S S │ ← Week Grid 13510231d0edbSAtari911│ 3 4 5 6 7 8 9 │ 13511231d0edbSAtari911├─────────────────────────────┤ 13512231d0edbSAtari911│ Today │ ← Event sections 13513231d0edbSAtari911└─────────────────────────────┘ 13514231d0edbSAtari911``` 13515231d0edbSAtari911 13516231d0edbSAtari911### Text Size Changes: 13517231d0edbSAtari911**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 13518231d0edbSAtari911**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 13519231d0edbSAtari911 13520231d0edbSAtari911### Why This Position: 13521231d0edbSAtari911- Separates header from calendar 13522231d0edbSAtari911- Natural action point after viewing stats 13523231d0edbSAtari911- Users see stats → decide to add event → view calendar 13524231d0edbSAtari911- Consistent with original design intent 13525231d0edbSAtari911 13526231d0edbSAtari911## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 13527231d0edbSAtari911- **Moved:** Add Event bar repositioned from between header/grid to below week grid 13528231d0edbSAtari911- **Improved:** Better visual flow - header → stats → grid → add button → events 13529231d0edbSAtari911- **Changed:** Add Event bar now acts as separator between calendar and event sections 13530231d0edbSAtari911 13531231d0edbSAtari911### New Layout: 13532231d0edbSAtari911``` 13533231d0edbSAtari911┌─────────────────────────────┐ 13534231d0edbSAtari911│ Clock | Weather | Stats │ ← Header 13535231d0edbSAtari911├─────────────────────────────┤ 13536231d0edbSAtari911│ M T W T F S S │ ← Week Grid 13537231d0edbSAtari911│ 3 4 5 6 7 8 9 │ 13538231d0edbSAtari911├─────────────────────────────┤ 13539231d0edbSAtari911│ + ADD EVENT │ ← Add bar (moved here!) 13540231d0edbSAtari911├─────────────────────────────┤ 13541231d0edbSAtari911│ Today │ ← Event sections 13542231d0edbSAtari911│ Tomorrow │ 13543231d0edbSAtari911│ Important Events │ 13544231d0edbSAtari911└─────────────────────────────┘ 13545231d0edbSAtari911``` 13546231d0edbSAtari911 13547231d0edbSAtari911### Visual Flow: 13548231d0edbSAtari911**Before (v3.10.8)**: 13549231d0edbSAtari9111. Header (clock, weather, stats) 13550231d0edbSAtari9112. **+ ADD EVENT** bar 13551231d0edbSAtari9113. Week grid 13552231d0edbSAtari9114. Event sections 13553231d0edbSAtari911 13554231d0edbSAtari911**After (v3.10.9)**: 13555231d0edbSAtari9111. Header (clock, weather, stats) 13556231d0edbSAtari9112. Week grid (calendar days) 13557231d0edbSAtari9113. **+ ADD EVENT** bar 13558231d0edbSAtari9114. Event sections 13559231d0edbSAtari911 13560231d0edbSAtari911### Benefits: 13561231d0edbSAtari911- Natural reading flow: View calendar → Add event → See events 13562231d0edbSAtari911- Add button positioned between calendar and event list 13563231d0edbSAtari911- Acts as visual separator 13564231d0edbSAtari911- More logical action placement 13565231d0edbSAtari911 13566231d0edbSAtari911## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 13567231d0edbSAtari911- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 13568231d0edbSAtari911- **Changed:** Events now display with single 3px color bar (event's assigned color only) 13569231d0edbSAtari911- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 13570231d0edbSAtari911- **Simplified:** Cleaner visual with one color bar instead of two 13571231d0edbSAtari911- **Improved:** More space for event content without extra bar 13572231d0edbSAtari911 13573231d0edbSAtari911### Visual Changes: 13574231d0edbSAtari911 13575231d0edbSAtari911**Before (v3.10.7)** - Dual color bars: 13576231d0edbSAtari911``` 13577231d0edbSAtari911├─ [Orange][Green] Event Title 13578231d0edbSAtari911├─ [Blue][Purple] Event Title 13579231d0edbSAtari911``` 13580231d0edbSAtari911 13581231d0edbSAtari911**After (v3.10.8)** - Single color bar: 13582231d0edbSAtari911``` 13583231d0edbSAtari911├─ [Green] Event Title ← Only event color! 13584231d0edbSAtari911├─ [Purple] Event Title ← Only event color! 13585231d0edbSAtari911``` 13586231d0edbSAtari911 13587231d0edbSAtari911### Add Bar Changes: 13588231d0edbSAtari911- Added `margin:0` to eliminate gaps 13589231d0edbSAtari911- Now flush against header (no space above) 13590231d0edbSAtari911- Now flush against week grid (no space below) 13591231d0edbSAtari911- Perfect seamless connection 13592231d0edbSAtari911 13593231d0edbSAtari911### Technical Changes: 13594231d0edbSAtari911**renderSidebarEvent()**: 13595231d0edbSAtari911- Removed section color bar (4px) 13596231d0edbSAtari911- Kept only event color bar (3px) 13597231d0edbSAtari911 13598231d0edbSAtari911**showDayEvents() JavaScript**: 13599231d0edbSAtari911- Removed section color bar (4px blue) 13600231d0edbSAtari911- Kept only event color bar (3px) 13601231d0edbSAtari911 13602231d0edbSAtari911**Add Event bar**: 13603231d0edbSAtari911- Added `margin:0` inline style 13604231d0edbSAtari911- Removed all top/bottom margins 13605231d0edbSAtari911 13606231d0edbSAtari911## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 13607231d0edbSAtari911- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 13608231d0edbSAtari911- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 13609231d0edbSAtari911- **Changed:** Add Event bar color from orange to dark green (#006400) 13610231d0edbSAtari911- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 13611231d0edbSAtari911- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 13612231d0edbSAtari911- **Changed:** Add Event bar font size increased from 7px to 9px 13613231d0edbSAtari911- **Changed:** Add Event bar letter spacing increased to 0.5px 13614231d0edbSAtari911- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 13615231d0edbSAtari911 13616231d0edbSAtari911### Color Bar Fix Details: 13617231d0edbSAtari911**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 13618231d0edbSAtari911**Solution**: Applied same fix as clicked day events: 13619231d0edbSAtari911- Changed parent div: `align-items:start` → `align-items:stretch` 13620231d0edbSAtari911- Added `min-height:20px` to parent 13621231d0edbSAtari911- Changed bars: `height:100%` → `align-self:stretch` 13622231d0edbSAtari911- Bars now properly fill vertical space in ALL sections 13623231d0edbSAtari911 13624231d0edbSAtari911### Add Event Bar Changes: 13625231d0edbSAtari911**Before**: 13626231d0edbSAtari911- Background: Orange (#ff9800) 13627231d0edbSAtari911- Text: Black (#000) 13628231d0edbSAtari911- Height: 6px (text cut off) 13629231d0edbSAtari911- Font: 7px 13630231d0edbSAtari911 13631231d0edbSAtari911**After**: 13632231d0edbSAtari911- Background: Dark green (#006400) 13633231d0edbSAtari911- Text: Bright green (#00ff00) with green glow 13634231d0edbSAtari911- Height: 12px (text fully visible) 13635231d0edbSAtari911- Font: 9px 13636231d0edbSAtari911- Hover: Darker green (#004d00) 13637231d0edbSAtari911- Matrix-themed green aesthetic 13638231d0edbSAtari911 13639231d0edbSAtari911## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 13640231d0edbSAtari911- **Fixed:** Event color bars now display correctly in clicked day events 13641231d0edbSAtari911- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 13642231d0edbSAtari911- **Added:** Conflict badge (⚠) appears on right side of conflicting events 13643231d0edbSAtari911- **Updated:** Complete README.md rewrite with full Matrix theme documentation 13644231d0edbSAtari911- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 13645231d0edbSAtari911- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 13646231d0edbSAtari911- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 13647231d0edbSAtari911 13648231d0edbSAtari911### Color Bar Fix: 13649231d0edbSAtari911**Problem**: Bars had `height:100%` but parent had no explicit height 13650231d0edbSAtari911**Solution**: 13651231d0edbSAtari911- Changed to `align-self:stretch` on bars 13652231d0edbSAtari911- Parent uses `align-items:stretch` 13653231d0edbSAtari911- Added `min-height:20px` to parent 13654231d0edbSAtari911- Bars now properly fill vertical space 13655231d0edbSAtari911 13656231d0edbSAtari911### Sorting Change: 13657231d0edbSAtari911**Before**: Timed events first → All-day events last 13658231d0edbSAtari911**After**: All-day events FIRST → Timed events chronologically 13659231d0edbSAtari911 13660231d0edbSAtari911**Example**: 13661231d0edbSAtari911``` 13662231d0edbSAtari911Monday, Feb 5 13663231d0edbSAtari911├─ All Day - Project Deadline ← All-day first 13664231d0edbSAtari911├─ 8:00 AM - Morning Standup ← Earliest time 13665231d0edbSAtari911├─ 10:30 AM - Coffee with Bob 13666231d0edbSAtari911└─ 2:00 PM - Team Meeting ← Latest time 13667231d0edbSAtari911``` 13668231d0edbSAtari911 13669231d0edbSAtari911### Conflict Badge: 13670231d0edbSAtari911- Orange warning triangle (⚠) on right side 13671231d0edbSAtari911- 10px font size 13672231d0edbSAtari911- Only appears if `event.conflict` is true 13673231d0edbSAtari911- Title attribute shows "Time conflict detected" 13674231d0edbSAtari911- Small and unobtrusive 13675231d0edbSAtari911 13676231d0edbSAtari911### README Update: 13677231d0edbSAtari911- Complete rewrite with Matrix theme focus 13678231d0edbSAtari911- Full usage instructions for all features 13679231d0edbSAtari911- Admin interface documentation 13680231d0edbSAtari911- Outlook sync setup guide 13681231d0edbSAtari911- System monitoring details 13682231d0edbSAtari911- Troubleshooting section 13683231d0edbSAtari911- Color scheme reference 13684231d0edbSAtari911- File structure documentation 13685231d0edbSAtari911- Performance tips 13686231d0edbSAtari911- Security notes 13687231d0edbSAtari911- Quick start examples 13688231d0edbSAtari911 136891d05cddcSAtari911## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 136901d05cddcSAtari911- **Added:** Events now sorted by time when clicking week grid days 136911d05cddcSAtari911- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 136921d05cddcSAtari911- **Improved:** Events with times appear first, sorted chronologically 136931d05cddcSAtari911- **Improved:** All-day events appear after timed events 136941d05cddcSAtari911- **Changed:** Add Event bar font size reduced to 7px (from 10px) 136951d05cddcSAtari911- **Changed:** Add Event bar now has 0 padding and fixed 6px height 136961d05cddcSAtari911 136971d05cddcSAtari911### Sorting Logic: 136981d05cddcSAtari911- Events with times sorted by time (earliest first) 136991d05cddcSAtari911- All-day events (no time) appear at the end 137001d05cddcSAtari911- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 137011d05cddcSAtari911- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 137021d05cddcSAtari911 137031d05cddcSAtari911### Add Event Bar Changes: 137041d05cddcSAtari911- **Height**: 6px (was ~12px with padding) 137051d05cddcSAtari911- **Padding**: 0 (was 4px top/bottom) 137061d05cddcSAtari911- **Font Size**: 7px (was 10px) 137071d05cddcSAtari911- **Letter Spacing**: 0.3px (was 0.5px) 137081d05cddcSAtari911- **Line Height**: 6px to match height 137091d05cddcSAtari911- **Vertical Align**: Middle for text centering 137101d05cddcSAtari911 137111d05cddcSAtari911## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 137121d05cddcSAtari911- **Added:** Thin orange "Add Event" bar between header and week grid 137131d05cddcSAtari911- **Added:** Quick access to event creation from sidebar widget 137141d05cddcSAtari911- **Styled:** Sleek design with hover effects and glow 137151d05cddcSAtari911- **Interactive:** Clicks navigate to Manage Events tab in admin 137161d05cddcSAtari911- **Improved:** User workflow for adding events from sidebar 137171d05cddcSAtari911 137181d05cddcSAtari911### Visual Design: 137191d05cddcSAtari911- Orange background (#ff9800) matching Today section color 137201d05cddcSAtari911- 4px top/bottom padding for thin, sleek appearance 137211d05cddcSAtari911- Black text with white text-shadow for visibility 137221d05cddcSAtari911- Hover effect: Darkens to #ff7700 with enhanced glow 137231d05cddcSAtari911- Orange glow effect (box-shadow) matching Matrix theme 137241d05cddcSAtari911- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 137251d05cddcSAtari911 137261d05cddcSAtari911### Technical Changes: 137271d05cddcSAtari911- Added between header close and renderWeekGrid() call 137281d05cddcSAtari911- Inline onclick handler navigates to admin manage tab 137291d05cddcSAtari911- Inline onmouseover/onmouseout for hover effects 137301d05cddcSAtari911- Smooth 0.2s transition on all style changes 137311d05cddcSAtari911 137321d05cddcSAtari911## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 137331d05cddcSAtari911- **Changed:** Update Plugin tab is now the default tab when opening admin 137341d05cddcSAtari911- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 137351d05cddcSAtari911- **Improved:** Clear Cache button now larger and more prominent with helpful description 137361d05cddcSAtari911- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 137371d05cddcSAtari911- **Removed:** Debug console.log statements from day event display 137381d05cddcSAtari911- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 137391d05cddcSAtari911 137401d05cddcSAtari911### UI Changes: 137411d05cddcSAtari911- Update Plugin tab opens by default (was Config/Outlook Sync tab) 137421d05cddcSAtari911- Clear Cache button prominently displayed at top of Update Plugin tab 137431d05cddcSAtari911- Orange ️ button (10px 20px padding) with confirmation dialog 137441d05cddcSAtari911- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 137451d05cddcSAtari911- Success/error messages display on Update Plugin tab after cache clear 137461d05cddcSAtari911- Tab navigation reordered to put Update first 137471d05cddcSAtari911 137481d05cddcSAtari911### Technical Changes: 137491d05cddcSAtari911- Default tab changed from 'config' to 'update' in html() method 137501d05cddcSAtari911- Tab navigation HTML reordered to show Update Plugin tab first 137511d05cddcSAtari911- clearCache() method now redirects with 'update' tab parameter 137521d05cddcSAtari911- Removed Clear Cache button from renderConfigTab() 137531d05cddcSAtari911- Added Clear Cache button to renderUpdateTab() with message display 137541d05cddcSAtari911 137551d05cddcSAtari911## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 137561d05cddcSAtari911- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 137571d05cddcSAtari911- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 137581d05cddcSAtari911- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 137591d05cddcSAtari911- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 137601d05cddcSAtari911 137611d05cddcSAtari911### Technical Changes: 137621d05cddcSAtari911- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 137631d05cddcSAtari911- Events added to weekEvents now include pre-rendered HTML versions 137641d05cddcSAtari911- title_html and description_html fields populated before json_encode() 137651d05cddcSAtari911- JavaScript now receives properly formatted HTML content 137661d05cddcSAtari911 137671d05cddcSAtari911## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 137681d05cddcSAtari911- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 137691d05cddcSAtari911- **Fixed:** HTML event handlers now call correctly sanitized function names 137701d05cddcSAtari911- **Fixed:** Weather temperature now updates correctly in sidebar widget 137711d05cddcSAtari911- **Added:** Weather update function to sidebar widget JavaScript 137721d05cddcSAtari911- **Added:** "Clear Cache" button in admin panel for easy cache refresh 137731d05cddcSAtari911- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 137741d05cddcSAtari911- **Improved:** All tooltip functions now work correctly on system status bars 137751d05cddcSAtari911 137761d05cddcSAtari911### Technical Changes: 137771d05cddcSAtari911- Changed tooltip function names to use $jsCalId instead of $calId 137781d05cddcSAtari911- Changed HTML onmouseover/onmouseout to use $jsCalId 137791d05cddcSAtari911- Added updateWeather() function to sidebar widget 137801d05cddcSAtari911- Added getWeatherIcon() function to sidebar widget 137811d05cddcSAtari911- Added clearCache() method in admin.php 137821d05cddcSAtari911- Added recursiveDelete() helper method in admin.php 137831d05cddcSAtari911- Admin UI now has ️ Clear Cache button alongside Export/Import 137841d05cddcSAtari911 137851d05cddcSAtari911## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 137861d05cddcSAtari911- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 137871d05cddcSAtari911- **Fixed:** Event links and formatting not displaying in clicked day events 137881d05cddcSAtari911- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 137891d05cddcSAtari911- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 137901d05cddcSAtari911- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 137911d05cddcSAtari911- **Improved:** All JavaScript variable names now use valid syntax 137921d05cddcSAtari911- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 137931d05cddcSAtari911 137941d05cddcSAtari911### Technical Changes: 137951d05cddcSAtari911- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 137961d05cddcSAtari911- JavaScript variables now use underscores instead of dashes 137971d05cddcSAtari911- Event HTML rendering preserves DokuWiki formatting 137981d05cddcSAtari911- Fixed "showTooltip_sidebar is not defined" errors 137991d05cddcSAtari911- Fixed "showDayEvents_cal is not defined" errors 138001d05cddcSAtari911 138011d05cddcSAtari911## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 138021d05cddcSAtari911- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 138031d05cddcSAtari911- **Fixed:** Functions now defined BEFORE HTML that uses them 138041d05cddcSAtari911- **Changed:** Consolidated all JavaScript into single comprehensive script block 138051d05cddcSAtari911- **Removed:** ~290 lines of duplicate JavaScript code 138061d05cddcSAtari911- **Added:** Shared state management with `sharedState_[calId]` object 138071d05cddcSAtari911- **Improved:** System tooltip functions now work correctly 138081d05cddcSAtari911- **Improved:** Week grid click events now work correctly 138091d05cddcSAtari911 138101d05cddcSAtari911### Technical Changes: 138111d05cddcSAtari911- Moved all JavaScript to beginning of widget (before HTML) 138121d05cddcSAtari911- Removed duplicate script blocks 138131d05cddcSAtari911- Unified tooltip and stats functions 138141d05cddcSAtari911- Shared latestStats and cpuHistory state 138151d05cddcSAtari911- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 138161d05cddcSAtari911 138171d05cddcSAtari911## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 138181d05cddcSAtari911- **Added:** Dual color bars on events (section color + event color) 138191d05cddcSAtari911- **Added:** Click week grid days to view events (replaced hover tooltips) 138201d05cddcSAtari911- **Added:** Expandable section below week grid for selected day events 138211d05cddcSAtari911- **Added:** Blue theme for selected day section 138221d05cddcSAtari911- **Changed:** Week grid days now clickable instead of tooltips 138231d05cddcSAtari911- **Changed:** Section bar: 4px wide (left) 138241d05cddcSAtari911- **Changed:** Event bar: 3px wide (right) 138251d05cddcSAtari911- **Increased:** Gap between color bars from 3px to 6px 138261d05cddcSAtari911- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 138271d05cddcSAtari911 138281d05cddcSAtari911### Visual Changes: 138291d05cddcSAtari911- Each event shows TWO color bars side-by-side 138301d05cddcSAtari911- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 138311d05cddcSAtari911- Right bar (3px): Individual event's assigned color 138321d05cddcSAtari911- Click any day in week grid to expand event list 138331d05cddcSAtari911- X button to close selected day events 138341d05cddcSAtari911 138351d05cddcSAtari911## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 138361d05cddcSAtari911- **Increased:** Event color bar width from 2px to 3px 138371d05cddcSAtari911- **Increased:** Gap between section and event bars from 3px to 6px 138381d05cddcSAtari911- **Improved:** Event color bars now more visible alongside section bars 138391d05cddcSAtari911- **Note:** Dual color bar system already in place from v3.9.6 138401d05cddcSAtari911 138411d05cddcSAtari911## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 138421d05cddcSAtari911- **Changed:** Date in Important Events moved below event name (was above) 138431d05cddcSAtari911- **Changed:** Section headers now 9px font size (was 10px) 138441d05cddcSAtari911- **Changed:** Section headers now normal case (was ALL CAPS) 138451d05cddcSAtari911- **Changed:** Letter spacing reduced from 0.8px to 0.3px 138461d05cddcSAtari911- **Improved:** More natural reading flow with date below event name 138471d05cddcSAtari911- **Improved:** Cleaner, more subtle section headers 138481d05cddcSAtari911 138491d05cddcSAtari911### Header Changes: 138501d05cddcSAtari911- "TODAY" → "Today" 138511d05cddcSAtari911- "TOMORROW" → "Tomorrow" 138521d05cddcSAtari911- "IMPORTANT EVENTS" → "Important Events" 138531d05cddcSAtari911 138541d05cddcSAtari911## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 138551d05cddcSAtari911- **Redesigned:** Complete overhaul of `sidebar` parameter 138561d05cddcSAtari911- **Added:** Compact week-at-a-glance itinerary view (200px wide) 138571d05cddcSAtari911- **Added:** Live clock widget at top of sidebar 138581d05cddcSAtari911- **Added:** 7-cell week grid showing event bars 138591d05cddcSAtari911- **Added:** Today section with orange header and left border 138601d05cddcSAtari911- **Added:** Tomorrow section with green header and left border 138611d05cddcSAtari911- **Added:** Important Events section with purple header and left border 138621d05cddcSAtari911- **Added:** Admin setting to configure important namespaces 138631d05cddcSAtari911- **Added:** Time conflict badges in sidebar events 138641d05cddcSAtari911- **Added:** Task checkboxes in sidebar events 138651d05cddcSAtari911- **Changed:** Sidebar now optimized for narrow spaces (200px) 138661d05cddcSAtari911- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 138671d05cddcSAtari911 138681d05cddcSAtari911### New Features: 138691d05cddcSAtari911- Clock updates every second showing current time 138701d05cddcSAtari911- Week grid shows Mon-Sun with colored event bars 138711d05cddcSAtari911- Today/Tomorrow sections show full event details 138721d05cddcSAtari911- Important events highlighted in purple (configurable namespaces) 138731d05cddcSAtari911- All badges (conflict, time, etc.) shown in compact format 138741d05cddcSAtari911- Automatic time conflict detection 138751d05cddcSAtari911 138761d05cddcSAtari911## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 138771d05cddcSAtari911- **Removed:** 16 unused/debug/backup files 138781d05cddcSAtari911- **Removed:** 69 console.log() debug statements 138791d05cddcSAtari911- **Removed:** 3 orphaned object literals from console.log removal 138801d05cddcSAtari911- **Removed:** Temporary comments and markers 138811d05cddcSAtari911- **Fixed:** JavaScript syntax errors from cleanup 138821d05cddcSAtari911- **Improved:** Code quality and maintainability 138831d05cddcSAtari911- **Improved:** Reduced plugin size by removing unnecessary files 138841d05cddcSAtari911- **Status:** Production-ready, fully cleaned codebase 138851d05cddcSAtari911 138861d05cddcSAtari911### Files Removed: 138871d05cddcSAtari911- style.css.backup, script.js.backup 138881d05cddcSAtari911- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 138891d05cddcSAtari911- debug_events.php, debug_html.php, cleanup_events.php 138901d05cddcSAtari911- fix_corrupted_json.php, fix_wildcard_namespaces.php 138911d05cddcSAtari911- find_outlook_duplicates.php, update_namespace.php 138921d05cddcSAtari911- validate_calendar_json.php, admin.js 138931d05cddcSAtari911- test_date_field.html 138941d05cddcSAtari911 138951d05cddcSAtari911## Version 3.7.5 (2026-02-05) 138961d05cddcSAtari911- **Fixed:** PHP syntax error (duplicate foreach loop removed) 138971d05cddcSAtari911- **Fixed:** Time variable handling in grace period logic 138981d05cddcSAtari911 138991d05cddcSAtari911## Version 3.7.4 (2026-02-05) 139001d05cddcSAtari911- **Added:** 15-minute grace period for timed events 139011d05cddcSAtari911- **Changed:** Events with times now stay visible for 15 minutes after their start time 139021d05cddcSAtari911- **Changed:** Prevents events from immediately disappearing when they start 139031d05cddcSAtari911- **Improved:** Better user experience for ongoing events 139041d05cddcSAtari911- **Fixed:** Events from earlier today now properly handled with grace period 139051d05cddcSAtari911 139061d05cddcSAtari911## Version 3.7.3 (2026-02-05) 139071d05cddcSAtari911- **Changed:** Complete redesign of cleanup section for compact, sleek layout 139081d05cddcSAtari911- **Changed:** Radio buttons now in single row at top 139091d05cddcSAtari911- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 139101d05cddcSAtari911- **Changed:** Inline controls - no more grid layout or wrapper boxes 139111d05cddcSAtari911- **Changed:** Namespace filter now compact single-line input 139121d05cddcSAtari911- **Changed:** Smaller buttons and tighter spacing throughout 139131d05cddcSAtari911- **Improved:** More professional, space-efficient design 139141d05cddcSAtari911 139151d05cddcSAtari911## Version 3.7.2 (2026-02-04) 139161d05cddcSAtari911- **Fixed:** Strange boxes under cleanup options - now properly hidden 139171d05cddcSAtari911- **Changed:** Unified color scheme across all admin sections 139181d05cddcSAtari911- **Changed:** Green (#00cc07) - Primary actions and main theme 139191d05cddcSAtari911- **Changed:** Orange (#ff9800) - Warnings and cleanup features 139201d05cddcSAtari911- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 139211d05cddcSAtari911- **Improved:** Consistent visual design throughout admin interface 139221d05cddcSAtari911 139231d05cddcSAtari911## Version 3.7.1 (2026-02-04) 139241d05cddcSAtari911- **Fixed:** Cleanup section background changed from orange to white 139251d05cddcSAtari911- **Fixed:** Event cleanup now properly scans all calendar directories 139261d05cddcSAtari911- **Added:** Debug info display when preview finds no events 139271d05cddcSAtari911- **Improved:** Better directory scanning logic matching other features 139281d05cddcSAtari911 139291d05cddcSAtari911## Version 3.7.0 (2026-02-04) 139301d05cddcSAtari911- **Added:** Event cleanup feature in Events Manager 139311d05cddcSAtari911- **Added:** Delete old events by age (months/years old) 139321d05cddcSAtari911- **Added:** Delete events by status (completed tasks, past events) 139331d05cddcSAtari911- **Added:** Delete events by date range 139341d05cddcSAtari911- **Added:** Namespace filter for targeted cleanup 139351d05cddcSAtari911- **Added:** Preview function to see what will be deleted 139361d05cddcSAtari911- **Added:** Automatic backup creation before cleanup 139371d05cddcSAtari911- **Changed:** Reduced changelog viewer height to 100px (was 400px) 139381d05cddcSAtari911 139391d05cddcSAtari911## Version 3.6.3 (2026-02-04) 139401d05cddcSAtari911- **Fixed:** Conflict tooltips now work properly after navigating between months 139411d05cddcSAtari911- **Added:** Changelog display in Update Plugin tab 139421d05cddcSAtari911- **Added:** CHANGELOG.md file with version history 139431d05cddcSAtari911- **Improved:** Changelog shows last 10 versions with color-coded change types 139441d05cddcSAtari911- **Fixed:** Removed debug console.log statements 139451d05cddcSAtari911 139461d05cddcSAtari911## Version 3.6.2 (2026-02-04) 139471d05cddcSAtari911- **Fixed:** Month title now updates correctly when navigating between months 139481d05cddcSAtari911- **Changed:** All eventpanel header elements reduced by 10% for more compact design 139491d05cddcSAtari911- **Changed:** Reduced header height from 78px to 70px 139501d05cddcSAtari911 139511d05cddcSAtari911## Version 3.6.1 (2026-02-04) 139521d05cddcSAtari911- **Changed:** Complete redesign of eventpanel header with practical two-row layout 139531d05cddcSAtari911- **Fixed:** Improved layout for narrow widths (~500px) 139541d05cddcSAtari911- **Changed:** Simplified color scheme (removed purple gradient) 139551d05cddcSAtari911 139561d05cddcSAtari911## Version 3.6.0 (2026-02-04) 139571d05cddcSAtari911- **Changed:** Redesigned eventpanel header with gradient background 139581d05cddcSAtari911- **Changed:** Consolidated multiple header rows into compact single-row design 139591d05cddcSAtari911 139601d05cddcSAtari911## Version 3.5.1 (2026-02-04) 139611d05cddcSAtari911- **Changed:** Moved event search bar into header row next to + Add button 139621d05cddcSAtari911- **Improved:** More compact UI with search integrated into header 139631d05cddcSAtari911 139641d05cddcSAtari911## Version 3.5.0 (2026-02-04) 139651d05cddcSAtari911- **Added:** Event search functionality in sidebar and eventpanel 139661d05cddcSAtari911- **Added:** Real-time filtering as you type 139671d05cddcSAtari911- **Added:** Clear button (✕) appears when searching 139681d05cddcSAtari911- **Added:** "No results" message when search returns nothing 139691d05cddcSAtari911 139701d05cddcSAtari911## Version 3.4.7 (2026-02-04) 139711d05cddcSAtari911- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 139721d05cddcSAtari911- **Fixed:** Removed debug logging from console 139731d05cddcSAtari911- **Changed:** Updated export version number to match plugin version 139741d05cddcSAtari911 139751d05cddcSAtari911## Version 3.4.6 (2026-02-04) 139761d05cddcSAtari911- **Added:** Debug logging to diagnose conflict detection issues 139771d05cddcSAtari911- **Development:** Extensive console logging for troubleshooting 139781d05cddcSAtari911 139791d05cddcSAtari911## Version 3.4.5 (2026-02-04) 139801d05cddcSAtari911- **Added:** Debug logging to showDayPopup and conflict detection 139811d05cddcSAtari911- **Development:** Added logging to trace conflict detection flow 139821d05cddcSAtari911 139831d05cddcSAtari911## Version 3.4.4 (2026-02-04) 139841d05cddcSAtari911- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 139851d05cddcSAtari911- **Fixed:** Conflict tooltips now appear on hover 139861d05cddcSAtari911- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 139871d05cddcSAtari911- **Added:** Conflict badges in both future and past events sections 139881d05cddcSAtari911 139891d05cddcSAtari911## Version 3.4.3 (2026-02-04) 139901d05cddcSAtari911- **Added:** Custom styled conflict tooltips with hover functionality 139911d05cddcSAtari911- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 139921d05cddcSAtari911- **Improved:** Beautiful tooltip design with orange header and clean formatting 139931d05cddcSAtari911 139941d05cddcSAtari911## Version 3.4.2 (2026-02-04) 139951d05cddcSAtari911- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 139961d05cddcSAtari911 139971d05cddcSAtari911## Version 3.4.1 (2026-02-04) 139981d05cddcSAtari911- **Fixed:** End time field now properly saves to database 139991d05cddcSAtari911- **Fixed:** End time dropdown now filters to show only valid times after start time 140001d05cddcSAtari911- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 140011d05cddcSAtari911- **Improved:** End time auto-suggests +1 hour when start time selected 140021d05cddcSAtari911 140031d05cddcSAtari911## Version 3.4.0 (2026-02-04) 140041d05cddcSAtari911- **Added:** End time support for events (start and end times) 140051d05cddcSAtari911- **Added:** Automatic time conflict detection 140061d05cddcSAtari911- **Added:** Conflict warning badges (⚠️) on events with overlapping times 140071d05cddcSAtari911- **Added:** Conflict tooltips showing which events conflict 140081d05cddcSAtari911- **Added:** Visual conflict indicators with pulse animation 140091d05cddcSAtari911- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 140101d05cddcSAtari911 140111d05cddcSAtari911## Version 3.3.77 (2026-02-04) 140121d05cddcSAtari911- **Fixed:** Namespace badge onclick handlers restored after clearing filter 140131d05cddcSAtari911- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 140141d05cddcSAtari911 140151d05cddcSAtari911## Version 3.3.76 (2026-02-04) 140161d05cddcSAtari911- **Fixed:** Namespace badges now clickable after clearing namespace filter 140171d05cddcSAtari911 140181d05cddcSAtari911## Version 3.3.75 (2026-02-04) 140191d05cddcSAtari911- **Fixed:** Form resubmission warnings eliminated 140201d05cddcSAtari911- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 140211d05cddcSAtari911- **Changed:** All admin redirects now use absolute URLs 140221d05cddcSAtari911 140231d05cddcSAtari911## Version 3.3.74 (2026-02-04) 140241d05cddcSAtari911- **Fixed:** Clearing namespace filter now restores original namespace instead of default 140251d05cddcSAtari911- **Added:** data-original-namespace attribute to preserve initial namespace setting 140261d05cddcSAtari911- **Improved:** Console logging for namespace filter debugging 140271d05cddcSAtari911 140281d05cddcSAtari911## Version 3.3.73 (2026-02-03) 140291d05cddcSAtari911- **Added:** Dynamic namespace filtering banner with clear button 140301d05cddcSAtari911- **Fixed:** JavaScript function accessibility issues 140311d05cddcSAtari911- **Fixed:** Namespace badge click handlers in event lists 140321d05cddcSAtari911- **Improved:** Persistent namespace filtering across views 140331d05cddcSAtari911 140341d05cddcSAtari911## Earlier Versions 140351d05cddcSAtari911See previous transcripts for complete history through v3.3.73, including: 140361d05cddcSAtari911- Recurring events with Outlook sync 140371d05cddcSAtari911- Multi-namespace support 140381d05cddcSAtari911- Event categories and mapping 140391d05cddcSAtari911- Backup/restore functionality 140401d05cddcSAtari911- System statistics bar 140411d05cddcSAtari911- Namespace selector with fuzzy search 140421d05cddcSAtari911- Events Manager with import/export 140431d05cddcSAtari911- And much more... 14044