11d05cddcSAtari911# Calendar Plugin Changelog 21d05cddcSAtari911 3*9ccd446eSAtari911## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 4*9ccd446eSAtari911 5*9ccd446eSAtari911- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 6*9ccd446eSAtari911- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 7*9ccd446eSAtari911- **Audited:** style.css (3,218 lines) — balanced braces confirmed 8*9ccd446eSAtari911- **Audited:** All admin manage tab action handlers verified functional (13 actions) 9*9ccd446eSAtari911- **New:** Fresh README.md for GitHub with complete documentation 10*9ccd446eSAtari911- **Includes all v5.5.x fixes:** 11*9ccd446eSAtari911 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 12*9ccd446eSAtari911 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 13*9ccd446eSAtari911 - Conflict badges on past events after AJAX navigation 14*9ccd446eSAtari911 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 15*9ccd446eSAtari911 16*9ccd446eSAtari911## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 17*9ccd446eSAtari911 18*9ccd446eSAtari911- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 19*9ccd446eSAtari911- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 20*9ccd446eSAtari911- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 21*9ccd446eSAtari911- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 22*9ccd446eSAtari911- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 23*9ccd446eSAtari911- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 24*9ccd446eSAtari911- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 25*9ccd446eSAtari911- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 26*9ccd446eSAtari911- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 27*9ccd446eSAtari911- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 28*9ccd446eSAtari911- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 29*9ccd446eSAtari911- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 30*9ccd446eSAtari911- **Removed:** Stale "NEW!" comment from Events Manager section 31*9ccd446eSAtari911 32*9ccd446eSAtari911## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 33*9ccd446eSAtari911 34*9ccd446eSAtari911- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 35*9ccd446eSAtari911- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 36*9ccd446eSAtari911- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 37*9ccd446eSAtari911- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 38*9ccd446eSAtari911- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 39*9ccd446eSAtari911- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 40*9ccd446eSAtari911- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 41*9ccd446eSAtari911- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 42*9ccd446eSAtari911- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 43*9ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 44*9ccd446eSAtari911 45*9ccd446eSAtari911## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 46*9ccd446eSAtari911 47*9ccd446eSAtari911- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 48*9ccd446eSAtari911- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 49*9ccd446eSAtari911- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 50*9ccd446eSAtari911- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 51*9ccd446eSAtari911- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 52*9ccd446eSAtari911- **Changed:** Week grid JS theme colors now use actual $themeStyles values 53*9ccd446eSAtari911 54*9ccd446eSAtari911## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 55*9ccd446eSAtari911 56*9ccd446eSAtari911- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 57*9ccd446eSAtari911 58*9ccd446eSAtari911## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 59*9ccd446eSAtari911 60*9ccd446eSAtari911- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 61*9ccd446eSAtari911- **Fixed:** Week grid conflict tooltips also fixed (same issue) 62*9ccd446eSAtari911- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 63*9ccd446eSAtari911- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 64*9ccd446eSAtari911 65*9ccd446eSAtari911## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 66*9ccd446eSAtari911 67*9ccd446eSAtari911- **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) 68*9ccd446eSAtari911 69*9ccd446eSAtari911## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 70*9ccd446eSAtari911 71*9ccd446eSAtari911- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 72*9ccd446eSAtari911- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 73*9ccd446eSAtari911 74*9ccd446eSAtari911## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 75*9ccd446eSAtari911 76*9ccd446eSAtari911- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 77*9ccd446eSAtari911- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 78*9ccd446eSAtari911- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 79*9ccd446eSAtari911- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 80*9ccd446eSAtari911 81*9ccd446eSAtari911## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 82*9ccd446eSAtari911 83*9ccd446eSAtari911- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 84*9ccd446eSAtari911- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 85*9ccd446eSAtari911- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 86*9ccd446eSAtari911- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 87*9ccd446eSAtari911- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 88*9ccd446eSAtari911- **Added:** ESC key now also closes day popups and conflict tooltips 89*9ccd446eSAtari911- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 90*9ccd446eSAtari911 91*9ccd446eSAtari911## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 92*9ccd446eSAtari911 93*9ccd446eSAtari911- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 94*9ccd446eSAtari911- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 95*9ccd446eSAtari911- **Refactored:** style.css is now the single source of truth for all visual styling 96*9ccd446eSAtari911- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 97*9ccd446eSAtari911- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 98*9ccd446eSAtari911- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 99*9ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist panel}} containers 100*9ccd446eSAtari911- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 101*9ccd446eSAtari911- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 102*9ccd446eSAtari911- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 103*9ccd446eSAtari911- **Added:** Detailed CSS variable reference table in style.css header comment 104*9ccd446eSAtari911- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 105*9ccd446eSAtari911- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 106*9ccd446eSAtari911- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 107*9ccd446eSAtari911- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 108*9ccd446eSAtari911- **Removed:** $isWikiTheme branching from PHP render path 109*9ccd446eSAtari911 110*9ccd446eSAtari911## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 111*9ccd446eSAtari911 112*9ccd446eSAtari911### Added: Hearts in Explosions! 113*9ccd446eSAtari911- **Added:** 8-12 pink hearts in each click explosion 114*9ccd446eSAtari911- **Added:** Random sizes (12-28px) and directions 115*9ccd446eSAtari911- **Result:** Extra love in every click! 116*9ccd446eSAtari911 117*9ccd446eSAtari911### Fixed: Background CSS Property for Dark Mode Readers 118*9ccd446eSAtari911- **Fixed:** Added `background: transparent` to CSS (was completely removed) 119*9ccd446eSAtari911- **Fixed:** Now CSS readers can detect and modify background property 120*9ccd446eSAtari911- **Why:** Inline styles override transparent, but CSS readers can now see the property 121*9ccd446eSAtari911- **Result:** Dark mode plugins can now change calendar backgrounds! 122*9ccd446eSAtari911 123*9ccd446eSAtari911### The CSS Problem 124*9ccd446eSAtari911 125*9ccd446eSAtari911**Why backgrounds weren't changing with dark mode readers**: 126*9ccd446eSAtari911 127*9ccd446eSAtari911**Before (v5.3.5)**: 128*9ccd446eSAtari911```css 129*9ccd446eSAtari911.calendar-compact-grid tbody td { 130*9ccd446eSAtari911 /* background removed - set via inline style */ 131*9ccd446eSAtari911 border: 1px solid... 132*9ccd446eSAtari911} 133*9ccd446eSAtari911``` 134*9ccd446eSAtari911 135*9ccd446eSAtari911**Problem**: CSS property doesn't exist! 136*9ccd446eSAtari911- Dark mode readers look for `background` property in CSS 137*9ccd446eSAtari911- Can't override what doesn't exist 138*9ccd446eSAtari911- Inline styles work, but readers can't modify them 139*9ccd446eSAtari911 140*9ccd446eSAtari911**After (v5.3.6)**: 141*9ccd446eSAtari911```css 142*9ccd446eSAtari911.calendar-compact-grid tbody td { 143*9ccd446eSAtari911 background: transparent; /* Now exists! */ 144*9ccd446eSAtari911 border: 1px solid... 145*9ccd446eSAtari911} 146*9ccd446eSAtari911``` 147*9ccd446eSAtari911 148*9ccd446eSAtari911**Solution**: 149*9ccd446eSAtari911- Property exists in CSS 150*9ccd446eSAtari911- Dark mode readers can override it 151*9ccd446eSAtari911- Inline styles still override transparent 152*9ccd446eSAtari911- Everyone wins! 153*9ccd446eSAtari911 154*9ccd446eSAtari911### What's Fixed 155*9ccd446eSAtari911 156*9ccd446eSAtari911**Elements now have background property**: 157*9ccd446eSAtari911- `.calendar-compact-grid tbody td` ✓ 158*9ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` ✓ 159*9ccd446eSAtari911- `.event-compact-item` ✓ 160*9ccd446eSAtari911- `.event-compact-item:hover` ✓ 161*9ccd446eSAtari911 162*9ccd446eSAtari911**How it works**: 163*9ccd446eSAtari9111. CSS sets `background: transparent` (default) 164*9ccd446eSAtari9112. Inline styles set actual color (overrides transparent) 165*9ccd446eSAtari9113. Dark mode readers can override CSS property 166*9ccd446eSAtari9114. Works for everyone! 167*9ccd446eSAtari911 168*9ccd446eSAtari911### Hearts in Explosion 169*9ccd446eSAtari911 170*9ccd446eSAtari911**Click anywhere → Hearts explode!** 171*9ccd446eSAtari911 172*9ccd446eSAtari911**Heart details**: 173*9ccd446eSAtari911- Count: 8-12 per explosion (random) 174*9ccd446eSAtari911- Size: 12-28px (random variety) 175*9ccd446eSAtari911- Emoji: (pink heart) 176*9ccd446eSAtari911- Direction: Random 360° 177*9ccd446eSAtari911- Speed: 60-140px travel 178*9ccd446eSAtari911- Duration: 0.8-1.2s 179*9ccd446eSAtari911- z-index: 9999999 (always visible) 180*9ccd446eSAtari911 181*9ccd446eSAtari911**Combined with**: 182*9ccd446eSAtari911- 25 glowing particles 183*9ccd446eSAtari911- 40 pixel sparkles 184*9ccd446eSAtari911- Bright flash 185*9ccd446eSAtari911- **Total: 73-77 elements!** 186*9ccd446eSAtari911 187*9ccd446eSAtari911### Visual Result 188*9ccd446eSAtari911 189*9ccd446eSAtari911**Click explosion**: 190*9ccd446eSAtari911``` 191*9ccd446eSAtari911 ✦ • ✦ 192*9ccd446eSAtari911 • • 193*9ccd446eSAtari911✦ • ! • ✦ 194*9ccd446eSAtari911 • • 195*9ccd446eSAtari911 ✦ • ✦ 196*9ccd446eSAtari911 197*9ccd446eSAtari911Hearts + Particles + Pixels! 198*9ccd446eSAtari911``` 199*9ccd446eSAtari911 200*9ccd446eSAtari911**Dark mode now works**: 201*9ccd446eSAtari911```css 202*9ccd446eSAtari911/* Dark mode reader can now do this: */ 203*9ccd446eSAtari911.calendar-compact-grid tbody td { 204*9ccd446eSAtari911 background: #000 !important; /* Works! */ 205*9ccd446eSAtari911} 206*9ccd446eSAtari911``` 207*9ccd446eSAtari911 208*9ccd446eSAtari911### Why Transparent Works 209*9ccd446eSAtari911 210*9ccd446eSAtari911**CSS Cascade**: 211*9ccd446eSAtari9111. CSS: `background: transparent` (lowest priority) 212*9ccd446eSAtari9112. Inline style: `background: #f5f5f5` (overrides CSS) 213*9ccd446eSAtari9113. Dark mode CSS: `background: #000 !important` (overrides inline) 214*9ccd446eSAtari911 215*9ccd446eSAtari911**Perfect solution!** ✓ 216*9ccd446eSAtari911 217*9ccd446eSAtari911## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 218*9ccd446eSAtari911 219*9ccd446eSAtari911### Fixed: Particles Now Appear Above All Dialogs! 220*9ccd446eSAtari911- **Fixed:** Increased z-index to 9999999 for all particles 221*9ccd446eSAtari911- **Fixed:** Particles now visible above event dialogs, month picker, etc. 222*9ccd446eSAtari911- **Result:** Cursor effects and explosions always visible! 223*9ccd446eSAtari911 224*9ccd446eSAtari911### The Z-Index Problem 225*9ccd446eSAtari911 226*9ccd446eSAtari911**Before (v5.3.4)**: 227*9ccd446eSAtari911- Particles: z-index 9999 228*9ccd446eSAtari911- Dialogs: z-index 10000-999999 229*9ccd446eSAtari911- **Particles hidden behind dialogs!** 230*9ccd446eSAtari911 231*9ccd446eSAtari911**After (v5.3.5)**: 232*9ccd446eSAtari911- Particles: z-index 9999999 233*9ccd446eSAtari911- Trail: z-index 9999998 234*9ccd446eSAtari911- Pixels: z-index 9999997 235*9ccd446eSAtari911- **Particles ALWAYS on top!** 236*9ccd446eSAtari911 237*9ccd446eSAtari911### What's Fixed 238*9ccd446eSAtari911 239*9ccd446eSAtari911✅ **Main particles** (explosion orbs) 240*9ccd446eSAtari911✅ **Cursor trail** (glowing dots) 241*9ccd446eSAtari911✅ **Pixel sparkles** (tiny bright stars) 242*9ccd446eSAtari911✅ **Flash effect** (click burst) 243*9ccd446eSAtari911 244*9ccd446eSAtari911**All now appear above**: 245*9ccd446eSAtari911- Event dialog popups 246*9ccd446eSAtari911- Month picker 247*9ccd446eSAtari911- Day popups 248*9ccd446eSAtari911- Any modal overlays 249*9ccd446eSAtari911 250*9ccd446eSAtari911### Visual Result 251*9ccd446eSAtari911 252*9ccd446eSAtari911**Moving cursor over dialog**: 253*9ccd446eSAtari911``` 254*9ccd446eSAtari911┌─────────────────────┐ 255*9ccd446eSAtari911│ Event Dialog │ 256*9ccd446eSAtari911│ ✦ • ✦ │ ← Sparkles visible! 257*9ccd446eSAtari911│ → ✦ │ ← Cursor trail visible! 258*9ccd446eSAtari911│ • ✦ • │ 259*9ccd446eSAtari911└─────────────────────┘ 260*9ccd446eSAtari911``` 261*9ccd446eSAtari911 262*9ccd446eSAtari911**Clicking on dialog**: 263*9ccd446eSAtari911``` 264*9ccd446eSAtari911┌─────────────────────┐ 265*9ccd446eSAtari911│ ✦ • ✦ • ✦ │ 266*9ccd446eSAtari911│ • ! • │ ← Explosion visible! 267*9ccd446eSAtari911│ ✦ • ✦ • ✦ │ 268*9ccd446eSAtari911└─────────────────────┘ 269*9ccd446eSAtari911``` 270*9ccd446eSAtari911 271*9ccd446eSAtari911**Perfect visibility everywhere!** ✨ 272*9ccd446eSAtari911 273*9ccd446eSAtari911## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 274*9ccd446eSAtari911 275*9ccd446eSAtari911### Fixed: Month Picker Now Themed! 276*9ccd446eSAtari911- **Fixed:** Jump to Month dialog now uses theme colors 277*9ccd446eSAtari911- **Fixed:** Dialog background, borders, text all themed 278*9ccd446eSAtari911- **Fixed:** Select dropdowns use theme colors 279*9ccd446eSAtari911- **Fixed:** Buttons use theme accent colors 280*9ccd446eSAtari911- **Result:** Month picker matches calendar theme! 281*9ccd446eSAtari911 282*9ccd446eSAtari911### Fixed: Cursor Effects Work in Dialogs! 283*9ccd446eSAtari911- **Fixed:** Cursor trail now works when hovering over dialogs 284*9ccd446eSAtari911- **Fixed:** Click explosions work when clicking inside dialogs 285*9ccd446eSAtari911- **Technical:** Changed to capture phase event listeners 286*9ccd446eSAtari911- **Result:** Effects work EVERYWHERE now! 287*9ccd446eSAtari911 288*9ccd446eSAtari911### Month Picker Theming 289*9ccd446eSAtari911 290*9ccd446eSAtari911**Before (v5.3.3)**: 291*9ccd446eSAtari911- White background (hardcoded) 292*9ccd446eSAtari911- Black text (hardcoded) 293*9ccd446eSAtari911- No theme integration 294*9ccd446eSAtari911- Looked out of place 295*9ccd446eSAtari911 296*9ccd446eSAtari911**After (v5.3.4)**: 297*9ccd446eSAtari911- Dialog background: `theme.bg` 298*9ccd446eSAtari911- Dialog border: `theme.border` 299*9ccd446eSAtari911- Text color: `theme.text_primary` 300*9ccd446eSAtari911- Dropdowns: `theme.cell_bg` + `theme.text_primary` 301*9ccd446eSAtari911- Cancel button: `theme.cell_bg` 302*9ccd446eSAtari911- Go button: `theme.border` (accent color) 303*9ccd446eSAtari911 304*9ccd446eSAtari911**Fully integrated!** ✅ 305*9ccd446eSAtari911 306*9ccd446eSAtari911--- 307*9ccd446eSAtari911 308*9ccd446eSAtari911### Theme Examples 309*9ccd446eSAtari911 310*9ccd446eSAtari911**Matrix Theme**: 311*9ccd446eSAtari911``` 312*9ccd446eSAtari911┌─────────────────────────┐ 313*9ccd446eSAtari911│ Jump to Month │ ← Dark bg, green border 314*9ccd446eSAtari911│ [February ▼] [2026 ▼] │ ← Dark dropdowns 315*9ccd446eSAtari911│ [Cancel] [Go] │ ← Green "Go" button 316*9ccd446eSAtari911└─────────────────────────┘ 317*9ccd446eSAtari911``` 318*9ccd446eSAtari911 319*9ccd446eSAtari911**Pink Theme**: 320*9ccd446eSAtari911``` 321*9ccd446eSAtari911┌─────────────────────────┐ 322*9ccd446eSAtari911│ Jump to Month │ ← Dark bg, pink border 323*9ccd446eSAtari911│ [February ▼] [2026 ▼] │ ← Dark dropdowns 324*9ccd446eSAtari911│ [Cancel] [Go] │ ← Pink "Go" button 325*9ccd446eSAtari911└─────────────────────────┘ 326*9ccd446eSAtari911With sparkle effects! ✨ 327*9ccd446eSAtari911``` 328*9ccd446eSAtari911 329*9ccd446eSAtari911**Professional Theme**: 330*9ccd446eSAtari911``` 331*9ccd446eSAtari911┌─────────────────────────┐ 332*9ccd446eSAtari911│ Jump to Month │ ← Clean bg, blue border 333*9ccd446eSAtari911│ [February ▼] [2026 ▼] │ ← Clean dropdowns 334*9ccd446eSAtari911│ [Cancel] [Go] │ ← Blue "Go" button 335*9ccd446eSAtari911└─────────────────────────┘ 336*9ccd446eSAtari911``` 337*9ccd446eSAtari911 338*9ccd446eSAtari911--- 339*9ccd446eSAtari911 340*9ccd446eSAtari911### Dialog Cursor Fix 341*9ccd446eSAtari911 342*9ccd446eSAtari911**The Problem**: 343*9ccd446eSAtari911Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 344*9ccd446eSAtari911 345*9ccd446eSAtari911**The Solution**: 346*9ccd446eSAtari911Use **capture phase** event listeners: 347*9ccd446eSAtari911```javascript 348*9ccd446eSAtari911// Before (bubbling phase) 349*9ccd446eSAtari911document.addEventListener('click', handler) 350*9ccd446eSAtari911 351*9ccd446eSAtari911// After (capture phase) 352*9ccd446eSAtari911document.addEventListener('click', handler, true) 353*9ccd446eSAtari911 ↑ 354*9ccd446eSAtari911 Capture phase! 355*9ccd446eSAtari911``` 356*9ccd446eSAtari911 357*9ccd446eSAtari911**Capture phase runs BEFORE stopPropagation!** 358*9ccd446eSAtari911 359*9ccd446eSAtari911--- 360*9ccd446eSAtari911 361*9ccd446eSAtari911### Now Works Everywhere 362*9ccd446eSAtari911 363*9ccd446eSAtari911✅ **Calendar area** 364*9ccd446eSAtari911✅ **Event dialogs** 365*9ccd446eSAtari911✅ **Month picker dialog** 366*9ccd446eSAtari911✅ **Day popup dialogs** 367*9ccd446eSAtari911✅ **Anywhere on screen** 368*9ccd446eSAtari911 369*9ccd446eSAtari911**No more blocked effects!** 370*9ccd446eSAtari911 371*9ccd446eSAtari911--- 372*9ccd446eSAtari911 373*9ccd446eSAtari911### Technical Details 374*9ccd446eSAtari911 375*9ccd446eSAtari911**Event phases**: 376*9ccd446eSAtari911``` 377*9ccd446eSAtari9111. Capture phase ← We listen here now! 378*9ccd446eSAtari9112. Target phase 379*9ccd446eSAtari9113. Bubbling phase ← stopPropagation blocks this 380*9ccd446eSAtari911``` 381*9ccd446eSAtari911 382*9ccd446eSAtari911**By using capture phase**: 383*9ccd446eSAtari911- Events caught before stopPropagation 384*9ccd446eSAtari911- Works in all dialogs 385*9ccd446eSAtari911- No conflicts with dialog logic 386*9ccd446eSAtari911 387*9ccd446eSAtari911--- 388*9ccd446eSAtari911 389*9ccd446eSAtari911### All Dialogs Checked 390*9ccd446eSAtari911 391*9ccd446eSAtari911✅ **Month picker** - Now themed! 392*9ccd446eSAtari911✅ **Event dialog** - Already themed 393*9ccd446eSAtari911✅ **Day popup** - Already themed 394*9ccd446eSAtari911 395*9ccd446eSAtari911**Everything consistent!** 396*9ccd446eSAtari911 397*9ccd446eSAtari911--- 398*9ccd446eSAtari911 399*9ccd446eSAtari911## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 400*9ccd446eSAtari911 401*9ccd446eSAtari911### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 402*9ccd446eSAtari911- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 403*9ccd446eSAtari911- **Added:** 40 pixel sparkles in click explosions 404*9ccd446eSAtari911- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 405*9ccd446eSAtari911- **Result:** Maximum sparkle effect! 406*9ccd446eSAtari911 407*9ccd446eSAtari911### Tiny Pixel Sparkles 408*9ccd446eSAtari911 409*9ccd446eSAtari911**3-6 tiny bright pixels appear with each cursor movement!** 410*9ccd446eSAtari911 411*9ccd446eSAtari911**Characteristics**: 412*9ccd446eSAtari911- Size: 1-2px (single pixel appearance!) 413*9ccd446eSAtari911- Colors: Bright neon whites and pinks 414*9ccd446eSAtari911 - Pure white (#fff) - 40% chance 415*9ccd446eSAtari911 - Hot pink (#ff1493) 416*9ccd446eSAtari911 - Pink (#ff69b4) 417*9ccd446eSAtari911 - Light pink (#ffb6c1) 418*9ccd446eSAtari911 - Soft pink (#ff85c1) 419*9ccd446eSAtari911- Glow: Triple-layer shadow (intense!) 420*9ccd446eSAtari911- Spawn: Random 30px radius around cursor 421*9ccd446eSAtari911- Animations: 422*9ccd446eSAtari911 - 50% twinkle in place 423*9ccd446eSAtari911 - 50% float upward 424*9ccd446eSAtari911 425*9ccd446eSAtari911**Creates a cloud of sparkles around your cursor!** 426*9ccd446eSAtari911 427*9ccd446eSAtari911--- 428*9ccd446eSAtari911 429*9ccd446eSAtari911### Click Explosion Enhanced 430*9ccd446eSAtari911 431*9ccd446eSAtari911**Now with 40 EXTRA pixel sparkles!** 432*9ccd446eSAtari911 433*9ccd446eSAtari911**Click anywhere → BIG BOOM**: 434*9ccd446eSAtari911- 25 main glowing particles (6-10px) 435*9ccd446eSAtari911- **40 tiny pixel sparkles (1-2px)** ← NEW! 436*9ccd446eSAtari911- Bright white flash 437*9ccd446eSAtari911- Total: 65+ visual elements! 438*9ccd446eSAtari911 439*9ccd446eSAtari911**Pixel sparkles in explosion**: 440*9ccd446eSAtari911- Shoot outward in all directions 441*9ccd446eSAtari911- Random distances (30-110px) 442*9ccd446eSAtari911- Multiple bright colors 443*9ccd446eSAtari911- Some twinkle, some explode 444*9ccd446eSAtari911- Creates stellar effect! 445*9ccd446eSAtari911 446*9ccd446eSAtari911--- 447*9ccd446eSAtari911 448*9ccd446eSAtari911### Entire Screen Coverage 449*9ccd446eSAtari911 450*9ccd446eSAtari911**Effects now work EVERYWHERE!** 451*9ccd446eSAtari911 452*9ccd446eSAtari911**Before (v5.3.2)**: 453*9ccd446eSAtari911- Only inside calendar viewport 454*9ccd446eSAtari911- Limited to calendar area 455*9ccd446eSAtari911 456*9ccd446eSAtari911**After (v5.3.3)**: 457*9ccd446eSAtari911- Works on entire screen! ✓ 458*9ccd446eSAtari911- Cursor trail follows everywhere 459*9ccd446eSAtari911- Click explosions anywhere 460*9ccd446eSAtari911- Used `position: fixed` + `clientX/Y` 461*9ccd446eSAtari911 462*9ccd446eSAtari911**Move anywhere on the page for sparkles!** 463*9ccd446eSAtari911 464*9ccd446eSAtari911--- 465*9ccd446eSAtari911 466*9ccd446eSAtari911### Visual Effect 467*9ccd446eSAtari911 468*9ccd446eSAtari911**Cursor movement**: 469*9ccd446eSAtari911``` 470*9ccd446eSAtari911 • ✦ • ← Tiny pixels 471*9ccd446eSAtari911 • ✦ • ← Glowing trail 472*9ccd446eSAtari911✦ • → • ✦ ← Cursor 473*9ccd446eSAtari911 • ✦ • ← Mixed sizes 474*9ccd446eSAtari911 • ✦ • ← Sparkle cloud 475*9ccd446eSAtari911``` 476*9ccd446eSAtari911 477*9ccd446eSAtari911**Click explosion**: 478*9ccd446eSAtari911``` 479*9ccd446eSAtari911 ✦ • ✦ • ✦ 480*9ccd446eSAtari911 ✦ • • ✦ 481*9ccd446eSAtari911✦ • ! • ✦ 482*9ccd446eSAtari911 ✦ • • ✦ 483*9ccd446eSAtari911 ✦ • ✦ • ✦ 484*9ccd446eSAtari911 485*9ccd446eSAtari91165+ particles total! 486*9ccd446eSAtari911``` 487*9ccd446eSAtari911 488*9ccd446eSAtari911--- 489*9ccd446eSAtari911 490*9ccd446eSAtari911### Sparkle Details 491*9ccd446eSAtari911 492*9ccd446eSAtari911**Trail Pixels** (3-6 per movement): 493*9ccd446eSAtari911- Size: 1-2px 494*9ccd446eSAtari911- Spawn rate: Every 40ms 495*9ccd446eSAtari911- Spread: 30px radius 496*9ccd446eSAtari911- Duration: 0.6-0.8s 497*9ccd446eSAtari911- 50% twinkle, 50% float 498*9ccd446eSAtari911 499*9ccd446eSAtari911**Explosion Pixels** (40 total): 500*9ccd446eSAtari911- Size: 1-3px 501*9ccd446eSAtari911- Spread: 30-110px radius 502*9ccd446eSAtari911- Duration: 0.4-0.8s 503*9ccd446eSAtari911- All directions 504*9ccd446eSAtari911- Intense glow 505*9ccd446eSAtari911 506*9ccd446eSAtari911**Main Particles** (25 total): 507*9ccd446eSAtari911- Size: 4-10px 508*9ccd446eSAtari911- Spread: 50-150px 509*9ccd446eSAtari911- Full color palette 510*9ccd446eSAtari911- Original firework effect 511*9ccd446eSAtari911 512*9ccd446eSAtari911--- 513*9ccd446eSAtari911 514*9ccd446eSAtari911### Color Distribution 515*9ccd446eSAtari911 516*9ccd446eSAtari911**Pixel sparkles favor white**: 517*9ccd446eSAtari911- 40% pure white (#fff) - brightest! 518*9ccd446eSAtari911- 60% pink shades - variety 519*9ccd446eSAtari911 520*9ccd446eSAtari911**Creates brilliant sparkle effect!** 521*9ccd446eSAtari911 522*9ccd446eSAtari911--- 523*9ccd446eSAtari911 524*9ccd446eSAtari911### Performance 525*9ccd446eSAtari911 526*9ccd446eSAtari911**Still optimized**: 527*9ccd446eSAtari911- Trail: 30ms throttle 528*9ccd446eSAtari911- Pixels: 40ms throttle 529*9ccd446eSAtari911- Auto-cleanup 530*9ccd446eSAtari911- Hardware accelerated 531*9ccd446eSAtari911- Smooth 60fps 532*9ccd446eSAtari911 533*9ccd446eSAtari911**Lots of sparkles, zero lag!** 534*9ccd446eSAtari911 535*9ccd446eSAtari911--- 536*9ccd446eSAtari911 537*9ccd446eSAtari911### Full-Screen Magic 538*9ccd446eSAtari911 539*9ccd446eSAtari911**Pink theme calendar detected**: 540*9ccd446eSAtari911```javascript 541*9ccd446eSAtari911if (pink calendar exists) { 542*9ccd446eSAtari911 Enable effects for ENTIRE SCREEN 543*9ccd446eSAtari911 Not just calendar area 544*9ccd446eSAtari911} 545*9ccd446eSAtari911``` 546*9ccd446eSAtari911 547*9ccd446eSAtari911**Works everywhere on page!** ✨ 548*9ccd446eSAtari911 549*9ccd446eSAtari911--- 550*9ccd446eSAtari911 551*9ccd446eSAtari911## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 552*9ccd446eSAtari911 553*9ccd446eSAtari911### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 554*9ccd446eSAtari911- **Removed:** Emoji sparkle images (✨) 555*9ccd446eSAtari911- **Added:** Glowing pink particle trail following cursor 556*9ccd446eSAtari911- **Added:** FIREWORKS explosion on click! 557*9ccd446eSAtari911- **Result:** Beautiful glowing effects, not emoji! 558*9ccd446eSAtari911 559*9ccd446eSAtari911### Glowing Cursor Trail 560*9ccd446eSAtari911 561*9ccd446eSAtari911**Pink glowing dots follow your cursor!** 562*9ccd446eSAtari911- Small glowing pink orbs (8px) 563*9ccd446eSAtari911- Radial gradient glow effect 564*9ccd446eSAtari911- Multiple box-shadows for depth 565*9ccd446eSAtari911- Fade out smoothly (0.5s) 566*9ccd446eSAtari911- Throttled to 30ms for smoothness 567*9ccd446eSAtari911 568*9ccd446eSAtari911``` 569*9ccd446eSAtari911 • • 570*9ccd446eSAtari911 • → • ← Your cursor 571*9ccd446eSAtari911 • • 572*9ccd446eSAtari911``` 573*9ccd446eSAtari911 574*9ccd446eSAtari911**Not emoji - actual glowing particles!** 575*9ccd446eSAtari911 576*9ccd446eSAtari911--- 577*9ccd446eSAtari911 578*9ccd446eSAtari911### Click Fireworks! 579*9ccd446eSAtari911 580*9ccd446eSAtari911**Click anywhere on the calendar → BOOM!** 581*9ccd446eSAtari911 582*9ccd446eSAtari911**20 pink particles explode outward!** 583*9ccd446eSAtari911- Radial burst pattern (360° coverage) 584*9ccd446eSAtari911- Random speeds (50-150px travel) 585*9ccd446eSAtari911- 4 shades of pink: 586*9ccd446eSAtari911 - Hot pink (#ff1493) 587*9ccd446eSAtari911 - Pink (#ff69b4) 588*9ccd446eSAtari911 - Light pink (#ff85c1) 589*9ccd446eSAtari911 - Very light pink (#ffc0cb) 590*9ccd446eSAtari911- Random sizes (4-10px) 591*9ccd446eSAtari911- Individual glowing halos 592*9ccd446eSAtari911- Smooth explosion animation 593*9ccd446eSAtari911 594*9ccd446eSAtari911**Plus a bright flash at click point!** 595*9ccd446eSAtari911- 30px radius glow 596*9ccd446eSAtari911- Intense pink flash 597*9ccd446eSAtari911- Fades quickly (0.3s) 598*9ccd446eSAtari911 599*9ccd446eSAtari911--- 600*9ccd446eSAtari911 601*9ccd446eSAtari911### Visual Effect 602*9ccd446eSAtari911 603*9ccd446eSAtari911**Cursor movement**: 604*9ccd446eSAtari911``` 605*9ccd446eSAtari911 • 606*9ccd446eSAtari911 • • • 607*9ccd446eSAtari911 • → • ← Glowing trail 608*9ccd446eSAtari911 • • • 609*9ccd446eSAtari911 • 610*9ccd446eSAtari911``` 611*9ccd446eSAtari911 612*9ccd446eSAtari911**Click explosion**: 613*9ccd446eSAtari911``` 614*9ccd446eSAtari911 • • • 615*9ccd446eSAtari911 • • 616*9ccd446eSAtari911 • BOOM! • ← 20 particles 617*9ccd446eSAtari911 • • 618*9ccd446eSAtari911 • • • 619*9ccd446eSAtari911``` 620*9ccd446eSAtari911 621*9ccd446eSAtari911**All particles glow with pink halos!** 622*9ccd446eSAtari911 623*9ccd446eSAtari911--- 624*9ccd446eSAtari911 625*9ccd446eSAtari911### Particle Details 626*9ccd446eSAtari911 627*9ccd446eSAtari911**Trail Particles**: 628*9ccd446eSAtari911- Size: 8x8px 629*9ccd446eSAtari911- Color: Pink radial gradient 630*9ccd446eSAtari911- Shadow: 10px + 20px glow layers 631*9ccd446eSAtari911- Duration: 0.5s fade 632*9ccd446eSAtari911- Rate: 30ms throttle 633*9ccd446eSAtari911 634*9ccd446eSAtari911**Explosion Particles**: 635*9ccd446eSAtari911- Size: 4-10px (random) 636*9ccd446eSAtari911- Colors: 4 pink shades (random) 637*9ccd446eSAtari911- Shadow: 10px + 20px glow (matches color) 638*9ccd446eSAtari911- Duration: 0.6-1.0s (random) 639*9ccd446eSAtari911- Pattern: Perfect circle burst 640*9ccd446eSAtari911 641*9ccd446eSAtari911**Flash Effect**: 642*9ccd446eSAtari911- Size: 30x30px 643*9ccd446eSAtari911- Color: Bright hot pink 644*9ccd446eSAtari911- Shadow: 30px + 50px mega-glow 645*9ccd446eSAtari911- Duration: 0.3s instant fade 646*9ccd446eSAtari911 647*9ccd446eSAtari911--- 648*9ccd446eSAtari911 649*9ccd446eSAtari911### Performance 650*9ccd446eSAtari911 651*9ccd446eSAtari911**Optimized for smoothness**: 652*9ccd446eSAtari911- Trail throttled to 30ms 653*9ccd446eSAtari911- Auto-cleanup after animations 654*9ccd446eSAtari911- CSS hardware acceleration 655*9ccd446eSAtari911- No memory leaks 656*9ccd446eSAtari911- Smooth 60fps 657*9ccd446eSAtari911 658*9ccd446eSAtari911**Won't slow you down!** 659*9ccd446eSAtari911 660*9ccd446eSAtari911--- 661*9ccd446eSAtari911 662*9ccd446eSAtari911### Comparison 663*9ccd446eSAtari911 664*9ccd446eSAtari911**Before (v5.3.1)**: 665*9ccd446eSAtari911- ✨ Emoji sparkle images 666*9ccd446eSAtari911- Static unicode characters 667*9ccd446eSAtari911- Limited visual impact 668*9ccd446eSAtari911 669*9ccd446eSAtari911**After (v5.3.2)**: 670*9ccd446eSAtari911- Glowing pink particles 671*9ccd446eSAtari911- Radial gradients + shadows 672*9ccd446eSAtari911- Beautiful firework explosions 673*9ccd446eSAtari911- Much more impressive! 674*9ccd446eSAtari911 675*9ccd446eSAtari911--- 676*9ccd446eSAtari911 677*9ccd446eSAtari911### Only Pink Theme 678*9ccd446eSAtari911 679*9ccd446eSAtari911**These effects only appear**: 680*9ccd446eSAtari911- On `.calendar-theme-pink` elements 681*9ccd446eSAtari911- Other themes unaffected 682*9ccd446eSAtari911- Pure pink magic! 683*9ccd446eSAtari911 684*9ccd446eSAtari911--- 685*9ccd446eSAtari911 686*9ccd446eSAtari911## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 687*9ccd446eSAtari911 688*9ccd446eSAtari911### ✨ Added: MySpace-Style Sparkle Trail! 689*9ccd446eSAtari911- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 690*9ccd446eSAtari911- **Toned down:** Reduced glow effects for better taste 691*9ccd446eSAtari911- **Added:** Sparkles appear on cell hover 692*9ccd446eSAtari911- **Added:** Sparkles on event hover (left and right sides!) 693*9ccd446eSAtari911- **Added:** Sparkles on today's cell corners 694*9ccd446eSAtari911- **Added:** Sparkles on navigation buttons 695*9ccd446eSAtari911- **Added:** Sparkles in calendar header 696*9ccd446eSAtari911- **Result:** Pure nostalgic MySpace magic! ✨ 697*9ccd446eSAtari911 698*9ccd446eSAtari911### MySpace Sparkle Cursor Trail 699*9ccd446eSAtari911 700*9ccd446eSAtari911**The classic effect from 2006!** 701*9ccd446eSAtari911- Sparkles follow your cursor as you move 702*9ccd446eSAtari911- Random sizes (12-22px) 703*9ccd446eSAtari911- Random slight offsets for natural feel 704*9ccd446eSAtari911- Float up and fade out animation 705*9ccd446eSAtari911- Throttled to 50ms (smooth, not laggy) 706*9ccd446eSAtari911- Only on pink theme calendars 707*9ccd446eSAtari911 708*9ccd446eSAtari911``` 709*9ccd446eSAtari911 ✨ 710*9ccd446eSAtari911 ✨ ✨ 711*9ccd446eSAtari911✨ → ✨ (cursor trail) 712*9ccd446eSAtari911 ✨ ✨ 713*9ccd446eSAtari911 ✨ 714*9ccd446eSAtari911``` 715*9ccd446eSAtari911 716*9ccd446eSAtari911**Pure nostalgia!** 717*9ccd446eSAtari911 718*9ccd446eSAtari911--- 719*9ccd446eSAtari911 720*9ccd446eSAtari911### Sparkles Everywhere 721*9ccd446eSAtari911 722*9ccd446eSAtari911**Calendar cells**: 723*9ccd446eSAtari911- Hover over any day → ✨ floats up 724*9ccd446eSAtari911- Smooth 1.5s animation 725*9ccd446eSAtari911- Centered sparkle 726*9ccd446eSAtari911 727*9ccd446eSAtari911**Event items**: 728*9ccd446eSAtari911- Hover → ✨ on left side 729*9ccd446eSAtari911- Hover → ✨ on right side 730*9ccd446eSAtari911- Staggered animations (0.4s delay) 731*9ccd446eSAtari911- Continuous twinkling 732*9ccd446eSAtari911 733*9ccd446eSAtari911**Today's cell**: 734*9ccd446eSAtari911- ✨ in top-right corner (continuous) 735*9ccd446eSAtari911- ✨ in bottom-left corner (offset timing) 736*9ccd446eSAtari911- Always sparkling! 737*9ccd446eSAtari911 738*9ccd446eSAtari911**Navigation buttons**: 739*9ccd446eSAtari911- Hover on < or > → ✨ appears top-right 740*9ccd446eSAtari911- One-time float animation 741*9ccd446eSAtari911 742*9ccd446eSAtari911**Calendar header**: 743*9ccd446eSAtari911- ✨ on left side (continuous) 744*9ccd446eSAtari911- ✨ on right side (offset 1s) 745*9ccd446eSAtari911- Always twinkling 746*9ccd446eSAtari911 747*9ccd446eSAtari911--- 748*9ccd446eSAtari911 749*9ccd446eSAtari911### Toned Down Glows 750*9ccd446eSAtari911 751*9ccd446eSAtari911**Before (v5.3.0)**: TOO MUCH GLOW! 752*9ccd446eSAtari911- 50px shadows 753*9ccd446eSAtari911- 4-layer effects 754*9ccd446eSAtari911- Overwhelming 755*9ccd446eSAtari911 756*9ccd446eSAtari911**After (v5.3.1)**: Just right! 757*9ccd446eSAtari911- 8-15px max shadows (subtle) 758*9ccd446eSAtari911- 2-layer effects 759*9ccd446eSAtari911- Professional with personality 760*9ccd446eSAtari911 761*9ccd446eSAtari911**Glow reductions**: 762*9ccd446eSAtari911- Today shimmer: 35px → 12px 763*9ccd446eSAtari911- Today hover: 50px → 15px 764*9ccd446eSAtari911- Event glow: 18px → 6px 765*9ccd446eSAtari911- Badge pulse: 25px → 8px 766*9ccd446eSAtari911- Container glow: 20px → 8px 767*9ccd446eSAtari911 768*9ccd446eSAtari911**Much more tasteful!** 769*9ccd446eSAtari911 770*9ccd446eSAtari911--- 771*9ccd446eSAtari911 772*9ccd446eSAtari911### Sparkle Animations 773*9ccd446eSAtari911 774*9ccd446eSAtari911**sparkle-twinkle** (0.8s): 775*9ccd446eSAtari911``` 776*9ccd446eSAtari911Opacity: 0 → 1 → 1 → 0 777*9ccd446eSAtari911Scale: 0 → 1 → 1 → 0 778*9ccd446eSAtari911Rotation: 0° → 180° → 360° 779*9ccd446eSAtari911``` 780*9ccd446eSAtari911 781*9ccd446eSAtari911**sparkle-float** (1.5s): 782*9ccd446eSAtari911``` 783*9ccd446eSAtari911Moves up: 0px → -50px 784*9ccd446eSAtari911Opacity: 0 → 1 → 1 → 0 785*9ccd446eSAtari911Scale: 0 → 1 → 0.8 → 0 786*9ccd446eSAtari911``` 787*9ccd446eSAtari911 788*9ccd446eSAtari911**Pure MySpace magic!** ✨ 789*9ccd446eSAtari911 790*9ccd446eSAtari911--- 791*9ccd446eSAtari911 792*9ccd446eSAtari911### Where Sparkles Appear 793*9ccd446eSAtari911 794*9ccd446eSAtari911✅ **Cursor trail** (continuous while moving) 795*9ccd446eSAtari911✅ **Calendar cells** (on hover) 796*9ccd446eSAtari911✅ **Event items** (on hover, left + right) 797*9ccd446eSAtari911✅ **Today's cell** (continuous, corners) 798*9ccd446eSAtari911✅ **Navigation buttons** (on hover) 799*9ccd446eSAtari911✅ **Calendar header** (continuous, sides) 800*9ccd446eSAtari911 801*9ccd446eSAtari911**Sparkles EVERYWHERE!** ✨✨✨ 802*9ccd446eSAtari911 803*9ccd446eSAtari911--- 804*9ccd446eSAtari911 805*9ccd446eSAtari911### Performance 806*9ccd446eSAtari911 807*9ccd446eSAtari911**Cursor trail**: 808*9ccd446eSAtari911- Throttled to 50ms 809*9ccd446eSAtari911- Auto-cleanup after 1s 810*9ccd446eSAtari911- No memory leaks 811*9ccd446eSAtari911- Smooth 60fps 812*9ccd446eSAtari911 813*9ccd446eSAtari911**CSS animations**: 814*9ccd446eSAtari911- Hardware accelerated 815*9ccd446eSAtari911- No JavaScript overhead (except cursor) 816*9ccd446eSAtari911- Efficient transforms 817*9ccd446eSAtari911 818*9ccd446eSAtari911**Won't slow down your browser!** 819*9ccd446eSAtari911 820*9ccd446eSAtari911--- 821*9ccd446eSAtari911 822*9ccd446eSAtari911### Pure Nostalgia 823*9ccd446eSAtari911 824*9ccd446eSAtari911**Remember MySpace profiles?** 825*9ccd446eSAtari911- Glitter graphics ✨ 826*9ccd446eSAtari911- Sparkle cursors ✨ 827*9ccd446eSAtari911- Auto-play music (ok, we didn't add that) 828*9ccd446eSAtari911- Animated GIF backgrounds 829*9ccd446eSAtari911- Comic Sans everywhere 830*9ccd446eSAtari911 831*9ccd446eSAtari911**We brought back the sparkles!** ✨ 832*9ccd446eSAtari911 833*9ccd446eSAtari911--- 834*9ccd446eSAtari911 835*9ccd446eSAtari911### Theme Comparison 836*9ccd446eSAtari911 837*9ccd446eSAtari911**Other themes**: Professional and clean 838*9ccd446eSAtari911**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 839*9ccd446eSAtari911 840*9ccd446eSAtari911**Only pink theme gets the magic!** 841*9ccd446eSAtari911 842*9ccd446eSAtari911--- 843*9ccd446eSAtari911 844*9ccd446eSAtari911## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 845*9ccd446eSAtari911 846*9ccd446eSAtari911### Added: Pink Theme Gets BLING! 847*9ccd446eSAtari911- **Added:** Shimmering animation for today's cell 848*9ccd446eSAtari911- **Added:** Sparkling text effect on today's date 849*9ccd446eSAtari911- **Added:** Glowing pulse for event bars 850*9ccd446eSAtari911- **Added:** Gradient shimmer on headers 851*9ccd446eSAtari911- **Added:** Extra glow on hover effects 852*9ccd446eSAtari911- **Added:** Pulsing urgent badge for past due items 853*9ccd446eSAtari911- **Result:** Pink theme is now FABULOUS! ✨ 854*9ccd446eSAtari911 855*9ccd446eSAtari911### Shimmer Effects 856*9ccd446eSAtari911 857*9ccd446eSAtari911**Today's Cell**: 858*9ccd446eSAtari911- Continuous shimmer animation (2 second loop) 859*9ccd446eSAtari911- Multi-layer glow effect 860*9ccd446eSAtari911- Pink and hot pink overlapping shadows 861*9ccd446eSAtari911- Pulses from subtle to intense 862*9ccd446eSAtari911- Extra sparkle on hover 863*9ccd446eSAtari911 864*9ccd446eSAtari911**Today's Date Number**: 865*9ccd446eSAtari911- Sparkle animation (1.5 second loop) 866*9ccd446eSAtari911- Text shadow glow effect 867*9ccd446eSAtari911- Slight scale pulse (100% → 105%) 868*9ccd446eSAtari911- Pink to hot pink shadow transition 869*9ccd446eSAtari911 870*9ccd446eSAtari911### Glow Effects 871*9ccd446eSAtari911 872*9ccd446eSAtari911**Event Bars**: 873*9ccd446eSAtari911- Continuous glow pulse (2 second loop) 874*9ccd446eSAtari911- Uses event's own color 875*9ccd446eSAtari911- Adds pink accent glow layer 876*9ccd446eSAtari911- Creates depth and dimension 877*9ccd446eSAtari911 878*9ccd446eSAtari911**Event Items**: 879*9ccd446eSAtari911- Subtle base glow 880*9ccd446eSAtari911- Enhanced glow on hover 881*9ccd446eSAtari911- Slight slide animation on hover 882*9ccd446eSAtari911- Professional yet playful 883*9ccd446eSAtari911 884*9ccd446eSAtari911### Gradient Shimmer 885*9ccd446eSAtari911 886*9ccd446eSAtari911**Headers**: 887*9ccd446eSAtari911- Animated gradient background 888*9ccd446eSAtari911- 3-color pink gradient flow 889*9ccd446eSAtari911- Smooth 3-second animation 890*9ccd446eSAtari911- Creates movement and life 891*9ccd446eSAtari911- Applies to calendar header and event list header 892*9ccd446eSAtari911 893*9ccd446eSAtari911### Badge Effects 894*9ccd446eSAtari911 895*9ccd446eSAtari911**TODAY Badge**: 896*9ccd446eSAtari911- Sparkle animation 897*9ccd446eSAtari911- Synchronized with today's date 898*9ccd446eSAtari911- Extra prominence 899*9ccd446eSAtari911 900*9ccd446eSAtari911**PAST DUE Badge**: 901*9ccd446eSAtari911- Urgent pulsing effect (1 second loop) 902*9ccd446eSAtari911- Orange glow intensifies 903*9ccd446eSAtari911- Draws attention to urgent items 904*9ccd446eSAtari911- Faster pulse for urgency 905*9ccd446eSAtari911 906*9ccd446eSAtari911### Container Bling 907*9ccd446eSAtari911 908*9ccd446eSAtari911**Main Container**: 909*9ccd446eSAtari911- Multi-layer pink glow 910*9ccd446eSAtari911- Soft outer shadow 911*9ccd446eSAtari911- Creates floating effect 912*9ccd446eSAtari911- Subtle but elegant 913*9ccd446eSAtari911 914*9ccd446eSAtari911### Animation Details 915*9ccd446eSAtari911 916*9ccd446eSAtari911**pink-shimmer** (2s loop): 917*9ccd446eSAtari911``` 918*9ccd446eSAtari911Start: Subtle 5px glow 919*9ccd446eSAtari911Peak: Intense 35px multi-layer glow 920*9ccd446eSAtari911End: Back to subtle 921*9ccd446eSAtari911``` 922*9ccd446eSAtari911 923*9ccd446eSAtari911**pink-sparkle** (1.5s loop): 924*9ccd446eSAtari911``` 925*9ccd446eSAtari911Start: Base glow + scale 1.0 926*9ccd446eSAtari911Peak: Intense glow + scale 1.05 927*9ccd446eSAtari911End: Back to base 928*9ccd446eSAtari911``` 929*9ccd446eSAtari911 930*9ccd446eSAtari911**pink-glow-pulse** (2s loop): 931*9ccd446eSAtari911``` 932*9ccd446eSAtari911Start: Small glow (3px, 6px) 933*9ccd446eSAtari911Peak: Large glow (6px, 12px, 18px) 934*9ccd446eSAtari911End: Back to small 935*9ccd446eSAtari911``` 936*9ccd446eSAtari911 937*9ccd446eSAtari911**pink-gradient-shimmer** (3s loop): 938*9ccd446eSAtari911``` 939*9ccd446eSAtari911Gradient flows across element 940*9ccd446eSAtari911Creates wave effect 941*9ccd446eSAtari911Smooth continuous motion 942*9ccd446eSAtari911``` 943*9ccd446eSAtari911 944*9ccd446eSAtari911**pink-pulse-urgent** (1s loop - faster!): 945*9ccd446eSAtari911``` 946*9ccd446eSAtari911Start: Orange glow 5px 947*9ccd446eSAtari911Peak: Orange glow 25px (intense) 948*9ccd446eSAtari911End: Back to 5px 949*9ccd446eSAtari911``` 950*9ccd446eSAtari911 951*9ccd446eSAtari911### Visual Experience 952*9ccd446eSAtari911 953*9ccd446eSAtari911**Today's Cell**: 954*9ccd446eSAtari911``` 955*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 956*9ccd446eSAtari911│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 957*9ccd446eSAtari911│ │ │[9]│ │ │ │ │ ← Sparkles 958*9ccd446eSAtari911│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 959*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 960*9ccd446eSAtari911``` 961*9ccd446eSAtari911 962*9ccd446eSAtari911**Event Bars**: 963*9ccd446eSAtari911``` 964*9ccd446eSAtari911━━━━━━━ ← Glows and pulses 965*9ccd446eSAtari911━━━━━━━ ← Each bar animated 966*9ccd446eSAtari911━━━━━━━ ← Creates rhythm 967*9ccd446eSAtari911``` 968*9ccd446eSAtari911 969*9ccd446eSAtari911**Headers**: 970*9ccd446eSAtari911``` 971*9ccd446eSAtari911╔═════════════════════╗ 972*9ccd446eSAtari911║ ~~~~~~~~~~ ║ ← Gradient flows 973*9ccd446eSAtari911║ February 2026 ║ ← Shimmer effect 974*9ccd446eSAtari911╚═════════════════════╝ 975*9ccd446eSAtari911``` 976*9ccd446eSAtari911 977*9ccd446eSAtari911### Theme Comparison 978*9ccd446eSAtari911 979*9ccd446eSAtari911**Before (v5.2.8)**: 980*9ccd446eSAtari911- Pink colors 981*9ccd446eSAtari911- Static elements 982*9ccd446eSAtari911- Standard shadows 983*9ccd446eSAtari911 984*9ccd446eSAtari911**After (v5.3.0)**: 985*9ccd446eSAtari911- Pink colors ✓ 986*9ccd446eSAtari911- Animated shimmer ✨ 987*9ccd446eSAtari911- Sparkling effects 988*9ccd446eSAtari911- Glowing pulses ✨ 989*9ccd446eSAtari911- Moving gradients 990*9ccd446eSAtari911- BLING! 991*9ccd446eSAtari911 992*9ccd446eSAtari911### Performance 993*9ccd446eSAtari911 994*9ccd446eSAtari911**All animations**: 995*9ccd446eSAtari911- Hardware accelerated (transform, opacity) 996*9ccd446eSAtari911- Smooth 60fps 997*9ccd446eSAtari911- CSS animations (no JavaScript) 998*9ccd446eSAtari911- Minimal CPU usage 999*9ccd446eSAtari911- Disabled in reduced-motion preference 1000*9ccd446eSAtari911 1001*9ccd446eSAtari911### Only for Pink Theme 1002*9ccd446eSAtari911 1003*9ccd446eSAtari911**Effects only apply when**: 1004*9ccd446eSAtari911```css 1005*9ccd446eSAtari911.calendar-theme-pink 1006*9ccd446eSAtari911``` 1007*9ccd446eSAtari911 1008*9ccd446eSAtari911**Other themes unaffected**: 1009*9ccd446eSAtari911- Matrix stays Matrix 1010*9ccd446eSAtari911- Professional stays Professional 1011*9ccd446eSAtari911- Purple stays Purple 1012*9ccd446eSAtari911- Wiki stays clean 1013*9ccd446eSAtari911 1014*9ccd446eSAtari911**Pink gets all the bling!** ✨ 1015*9ccd446eSAtari911 1016*9ccd446eSAtari911### Use Cases 1017*9ccd446eSAtari911 1018*9ccd446eSAtari911**Perfect for**: 1019*9ccd446eSAtari911- Celebrating occasions 1020*9ccd446eSAtari911- Fun team calendars 1021*9ccd446eSAtari911- Personal style expression 1022*9ccd446eSAtari911- Standing out 1023*9ccd446eSAtari911- Making calendar time fabulous 1024*9ccd446eSAtari911 1025*9ccd446eSAtari911**Not just pink, but BLING pink!** ✨ 1026*9ccd446eSAtari911 1027*9ccd446eSAtari911## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 1028*9ccd446eSAtari911 1029*9ccd446eSAtari911### Fixed: Today's Date Box Now Uses Theme Colors 1030*9ccd446eSAtari911- **Fixed:** Today's day number box now uses theme border color 1031*9ccd446eSAtari911- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 1032*9ccd446eSAtari911- **Result:** Today box matches the theme perfectly! 1033*9ccd446eSAtari911 1034*9ccd446eSAtari911### The Issue 1035*9ccd446eSAtari911 1036*9ccd446eSAtari911Today's date had a hardcoded green box: 1037*9ccd446eSAtari911 1038*9ccd446eSAtari911**In style.css**: 1039*9ccd446eSAtari911```css 1040*9ccd446eSAtari911.cal-today .day-num { 1041*9ccd446eSAtari911 background: #008800; /* Hardcoded green! */ 1042*9ccd446eSAtari911 color: white; 1043*9ccd446eSAtari911} 1044*9ccd446eSAtari911``` 1045*9ccd446eSAtari911 1046*9ccd446eSAtari911**Didn't adapt to themes at all!** 1047*9ccd446eSAtari911 1048*9ccd446eSAtari911### The Fix 1049*9ccd446eSAtari911 1050*9ccd446eSAtari911**Now uses theme colors**: 1051*9ccd446eSAtari911```php 1052*9ccd446eSAtari911// Today's day number 1053*9ccd446eSAtari911if ($isToday) { 1054*9ccd446eSAtari911 background: $themeStyles['border'], // Theme's accent color! 1055*9ccd446eSAtari911 color: (professional theme) ? white : bg color 1056*9ccd446eSAtari911} 1057*9ccd446eSAtari911``` 1058*9ccd446eSAtari911 1059*9ccd446eSAtari911### Theme Examples 1060*9ccd446eSAtari911 1061*9ccd446eSAtari911**Matrix Theme**: 1062*9ccd446eSAtari911- Box background: `#00cc07` (matrix green) 1063*9ccd446eSAtari911- Text color: `#242424` (dark background) 1064*9ccd446eSAtari911 1065*9ccd446eSAtari911**Purple Theme**: 1066*9ccd446eSAtari911- Box background: `#9b59b6` (purple) 1067*9ccd446eSAtari911- Text color: `#2a2030` (dark background) 1068*9ccd446eSAtari911 1069*9ccd446eSAtari911**Professional Theme**: 1070*9ccd446eSAtari911- Box background: `#4a90e2` (blue) 1071*9ccd446eSAtari911- Text color: `#ffffff` (white text) 1072*9ccd446eSAtari911 1073*9ccd446eSAtari911**Pink Theme**: 1074*9ccd446eSAtari911- Box background: `#ff1493` (hot pink) 1075*9ccd446eSAtari911- Text color: `#1a0d14` (dark background) 1076*9ccd446eSAtari911 1077*9ccd446eSAtari911**Wiki Theme**: 1078*9ccd446eSAtari911- Box background: Template's `__border__` color 1079*9ccd446eSAtari911- Text color: Template's `__background_site__` color 1080*9ccd446eSAtari911 1081*9ccd446eSAtari911### Visual Result 1082*9ccd446eSAtari911 1083*9ccd446eSAtari911**Matrix Theme**: 1084*9ccd446eSAtari911``` 1085*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 1086*9ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1087*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 1088*9ccd446eSAtari911 ↑ 1089*9ccd446eSAtari911 Green box (#00cc07) 1090*9ccd446eSAtari911``` 1091*9ccd446eSAtari911 1092*9ccd446eSAtari911**Professional Theme**: 1093*9ccd446eSAtari911``` 1094*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 1095*9ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1096*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 1097*9ccd446eSAtari911 ↑ 1098*9ccd446eSAtari911 Blue box (#4a90e2) 1099*9ccd446eSAtari911``` 1100*9ccd446eSAtari911 1101*9ccd446eSAtari911**Wiki Theme**: 1102*9ccd446eSAtari911``` 1103*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 1104*9ccd446eSAtari911│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1105*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 1106*9ccd446eSAtari911 ↑ 1107*9ccd446eSAtari911 Template border color 1108*9ccd446eSAtari911``` 1109*9ccd446eSAtari911 1110*9ccd446eSAtari911### Implementation 1111*9ccd446eSAtari911 1112*9ccd446eSAtari911**Inline styles added**: 1113*9ccd446eSAtari911- Background uses `$themeStyles['border']` (theme accent) 1114*9ccd446eSAtari911- Text color uses `$themeStyles['bg']` for contrast 1115*9ccd446eSAtari911- Special case: Professional theme uses white text 1116*9ccd446eSAtari911- All with `!important` to override CSS 1117*9ccd446eSAtari911 1118*9ccd446eSAtari911**CSS cleaned up**: 1119*9ccd446eSAtari911- Removed hardcoded `#008800` background 1120*9ccd446eSAtari911- Removed hardcoded `white` color 1121*9ccd446eSAtari911- Kept structural styles (border-radius, font-weight) 1122*9ccd446eSAtari911 1123*9ccd446eSAtari911### Benefits 1124*9ccd446eSAtari911 1125*9ccd446eSAtari911**Theme Consistency**: 1126*9ccd446eSAtari911- Today box matches theme accent color 1127*9ccd446eSAtari911- Proper contrast with background 1128*9ccd446eSAtari911- Professional appearance 1129*9ccd446eSAtari911 1130*9ccd446eSAtari911**Automatic Adaptation**: 1131*9ccd446eSAtari911- Works with all themes 1132*9ccd446eSAtari911- Works with custom wiki template colors 1133*9ccd446eSAtari911- No manual adjustment needed 1134*9ccd446eSAtari911 1135*9ccd446eSAtari911**Visual Harmony**: 1136*9ccd446eSAtari911- Border color used throughout theme 1137*9ccd446eSAtari911- Today box reinforces theme identity 1138*9ccd446eSAtari911- Consistent design language 1139*9ccd446eSAtari911 1140*9ccd446eSAtari911## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 1141*9ccd446eSAtari911 1142*9ccd446eSAtari911### Fixed: Table Grid Background Now Matches Cells 1143*9ccd446eSAtari911- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 1144*9ccd446eSAtari911- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 1145*9ccd446eSAtari911- **Result:** Table background no longer shows through cells! 1146*9ccd446eSAtari911 1147*9ccd446eSAtari911### The Layer Problem 1148*9ccd446eSAtari911 1149*9ccd446eSAtari911The table itself had a DIFFERENT background color than its cells! 1150*9ccd446eSAtari911 1151*9ccd446eSAtari911**Before (v5.2.6)**: 1152*9ccd446eSAtari911```php 1153*9ccd446eSAtari911'grid_bg' => __background_alt__, // Table background (#e8e8e8) 1154*9ccd446eSAtari911'cell_bg' => __background_site__, // Cell background (#f5f5f5) 1155*9ccd446eSAtari911``` 1156*9ccd446eSAtari911 1157*9ccd446eSAtari911**The table background was showing THROUGH the cells!** 1158*9ccd446eSAtari911 1159*9ccd446eSAtari911### Why This Happened 1160*9ccd446eSAtari911 1161*9ccd446eSAtari911**Visual layers**: 1162*9ccd446eSAtari911``` 1163*9ccd446eSAtari911Table Element 1164*9ccd446eSAtari911├─ background: __background_alt__ (#e8e8e8) ← Different! 1165*9ccd446eSAtari911└─ Cells 1166*9ccd446eSAtari911 └─ background: __background_site__ (#f5f5f5) ← Different! 1167*9ccd446eSAtari911 1168*9ccd446eSAtari911The table background shows through any gaps! 1169*9ccd446eSAtari911``` 1170*9ccd446eSAtari911 1171*9ccd446eSAtari911### The Fix 1172*9ccd446eSAtari911 1173*9ccd446eSAtari911**After (v5.2.7)**: 1174*9ccd446eSAtari911```php 1175*9ccd446eSAtari911'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 1176*9ccd446eSAtari911'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 1177*9ccd446eSAtari911``` 1178*9ccd446eSAtari911 1179*9ccd446eSAtari911**NOW THEY MATCH!** 1180*9ccd446eSAtari911 1181*9ccd446eSAtari911### Where grid_bg Is Used 1182*9ccd446eSAtari911 1183*9ccd446eSAtari911The table element itself: 1184*9ccd446eSAtari911```html 1185*9ccd446eSAtari911<table style="background: __background_alt__"> ← Was showing through! 1186*9ccd446eSAtari911 <tbody> 1187*9ccd446eSAtari911 <tr> 1188*9ccd446eSAtari911 <td style="background: __background_site__">1</td> 1189*9ccd446eSAtari911 </tr> 1190*9ccd446eSAtari911 </tbody> 1191*9ccd446eSAtari911</table> 1192*9ccd446eSAtari911``` 1193*9ccd446eSAtari911 1194*9ccd446eSAtari911Even with cell inline styles, the TABLE background shows through! 1195*9ccd446eSAtari911 1196*9ccd446eSAtari911### All Background Sources Now Unified 1197*9ccd446eSAtari911 1198*9ccd446eSAtari911**Everything now uses __background_site__**: 1199*9ccd446eSAtari911- `bg` → __background_site__ ✓ 1200*9ccd446eSAtari911- `header_bg` → __background_site__ ✓ 1201*9ccd446eSAtari911- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 1202*9ccd446eSAtari911- `cell_bg` → __background_site__ ✓ 1203*9ccd446eSAtari911 1204*9ccd446eSAtari911**Perfect consistency!** 1205*9ccd446eSAtari911 1206*9ccd446eSAtari911### Why It Was Different 1207*9ccd446eSAtari911 1208*9ccd446eSAtari911**Originally the grid was meant to show borders**: 1209*9ccd446eSAtari911- `grid_bg` was `__background_alt__` (slightly different) 1210*9ccd446eSAtari911- Created visual separation between cells 1211*9ccd446eSAtari911- But with transparent/thin cells, it showed through! 1212*9ccd446eSAtari911 1213*9ccd446eSAtari911**Now unified for consistency!** 1214*9ccd446eSAtari911 1215*9ccd446eSAtari911### Visual Result 1216*9ccd446eSAtari911 1217*9ccd446eSAtari911**Before (layers visible)**: 1218*9ccd446eSAtari911``` 1219*9ccd446eSAtari911┌─────────────────┐ 1220*9ccd446eSAtari911│ Grid (#e8e8e8) │ ← Showing through! 1221*9ccd446eSAtari911│ ┌──┬──┬──┐ │ 1222*9ccd446eSAtari911│ │ │ │ │ │ ← Cells (#f5f5f5) 1223*9ccd446eSAtari911│ └──┴──┴──┘ │ 1224*9ccd446eSAtari911└─────────────────┘ 1225*9ccd446eSAtari911``` 1226*9ccd446eSAtari911 1227*9ccd446eSAtari911**After (unified)**: 1228*9ccd446eSAtari911``` 1229*9ccd446eSAtari911┌─────────────────┐ 1230*9ccd446eSAtari911│ Grid (#f5f5f5) │ ← Same color! 1231*9ccd446eSAtari911│ ┌──┬──┬──┐ │ 1232*9ccd446eSAtari911│ │ │ │ │ │ ← Cells (#f5f5f5) 1233*9ccd446eSAtari911│ └──┴──┴──┘ │ 1234*9ccd446eSAtari911└─────────────────┘ 1235*9ccd446eSAtari911Perfect match! 1236*9ccd446eSAtari911``` 1237*9ccd446eSAtari911 1238*9ccd446eSAtari911### Complete Background Mapping 1239*9ccd446eSAtari911 1240*9ccd446eSAtari911**All using __background_site__ now**: 1241*9ccd446eSAtari911- Main container background 1242*9ccd446eSAtari911- Left panel background 1243*9ccd446eSAtari911- Right panel background 1244*9ccd446eSAtari911- Eventlist background 1245*9ccd446eSAtari911- Calendar grid background ← JUST FIXED 1246*9ccd446eSAtari911- Calendar cell backgrounds 1247*9ccd446eSAtari911- Event item backgrounds 1248*9ccd446eSAtari911- Clock header background 1249*9ccd446eSAtari911- Search input background 1250*9ccd446eSAtari911- Past events toggle 1251*9ccd446eSAtari911 1252*9ccd446eSAtari911**EVERYTHING UNIFIED!** 1253*9ccd446eSAtari911 1254*9ccd446eSAtari911## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 1255*9ccd446eSAtari911 1256*9ccd446eSAtari911### Fixed: Removed Container Backgrounds Showing Through 1257*9ccd446eSAtari911- **Found:** `.calendar-compact-container` had `background: #ffffff;` 1258*9ccd446eSAtari911- **Found:** `.calendar-compact-left` had `background: #fafafa;` 1259*9ccd446eSAtari911- **Found:** `.calendar-compact-right` had `background: #ffffff;` 1260*9ccd446eSAtari911- **Found:** `.event-search-input-inline` had `background: white;` 1261*9ccd446eSAtari911- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 1262*9ccd446eSAtari911- **Result:** Container backgrounds no longer show through cells! 1263*9ccd446eSAtari911 1264*9ccd446eSAtari911### The Container Problem 1265*9ccd446eSAtari911 1266*9ccd446eSAtari911The parent containers had hardcoded backgrounds that were showing through! 1267*9ccd446eSAtari911 1268*9ccd446eSAtari911**Container backgrounds (lines 4-91)**: 1269*9ccd446eSAtari911```css 1270*9ccd446eSAtari911.calendar-compact-container { 1271*9ccd446eSAtari911 background: #ffffff; /* ← Main container! */ 1272*9ccd446eSAtari911} 1273*9ccd446eSAtari911 1274*9ccd446eSAtari911.calendar-compact-left { 1275*9ccd446eSAtari911 background: #fafafa; /* ← Left panel (calendar side)! */ 1276*9ccd446eSAtari911} 1277*9ccd446eSAtari911 1278*9ccd446eSAtari911.calendar-compact-right { 1279*9ccd446eSAtari911 background: #ffffff; /* ← Right panel (events side)! */ 1280*9ccd446eSAtari911} 1281*9ccd446eSAtari911``` 1282*9ccd446eSAtari911 1283*9ccd446eSAtari911**These were showing through the cells and events!** 1284*9ccd446eSAtari911 1285*9ccd446eSAtari911### Why Containers Matter 1286*9ccd446eSAtari911 1287*9ccd446eSAtari911Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 1288*9ccd446eSAtari911 1289*9ccd446eSAtari911``` 1290*9ccd446eSAtari911Container (#fafafa) ← Showing through! 1291*9ccd446eSAtari911 └─ Table Cell (#f5f5f5) ← Transparent areas 1292*9ccd446eSAtari911 └─ Content 1293*9ccd446eSAtari911``` 1294*9ccd446eSAtari911 1295*9ccd446eSAtari911### All Backgrounds Removed 1296*9ccd446eSAtari911 1297*9ccd446eSAtari911**v5.2.6 removes**: 1298*9ccd446eSAtari911- `.calendar-compact-container` background 1299*9ccd446eSAtari911- `.calendar-compact-left` background 1300*9ccd446eSAtari911- `.calendar-compact-right` background 1301*9ccd446eSAtari911- `.event-search-input-inline` background 1302*9ccd446eSAtari911- `.past-events-toggle` background & hover 1303*9ccd446eSAtari911 1304*9ccd446eSAtari911**v5.2.5 removed**: 1305*9ccd446eSAtari911- `.calendar-compact-grid tbody td` background 1306*9ccd446eSAtari911- `.calendar-compact-grid thead th` background 1307*9ccd446eSAtari911 1308*9ccd446eSAtari911**v5.2.4 removed**: 1309*9ccd446eSAtari911- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 1310*9ccd446eSAtari911 1311*9ccd446eSAtari911**v5.2.3 removed**: 1312*9ccd446eSAtari911- `.event-compact-item` background 1313*9ccd446eSAtari911 1314*9ccd446eSAtari911**ALL container and element backgrounds eliminated!** 1315*9ccd446eSAtari911 1316*9ccd446eSAtari911### What Should Work Now 1317*9ccd446eSAtari911 1318*9ccd446eSAtari911**Calendar cells**: No container background showing through ✓ 1319*9ccd446eSAtari911**Event items**: No container background showing through ✓ 1320*9ccd446eSAtari911**Search bar**: Uses template color ✓ 1321*9ccd446eSAtari911**Past events toggle**: Uses template color ✓ 1322*9ccd446eSAtari911 1323*9ccd446eSAtari911### Complete List of Fixes 1324*9ccd446eSAtari911 1325*9ccd446eSAtari911**Containers**: 1326*9ccd446eSAtari911- Main container ✓ 1327*9ccd446eSAtari911- Left panel ✓ 1328*9ccd446eSAtari911- Right panel ✓ 1329*9ccd446eSAtari911 1330*9ccd446eSAtari911**Elements**: 1331*9ccd446eSAtari911- Table cells ✓ 1332*9ccd446eSAtari911- Event items ✓ 1333*9ccd446eSAtari911- Search input ✓ 1334*9ccd446eSAtari911- Past events toggle ✓ 1335*9ccd446eSAtari911 1336*9ccd446eSAtari911**EVERYTHING removed!** 1337*9ccd446eSAtari911 1338*9ccd446eSAtari911### Critical: Clear Caches 1339*9ccd446eSAtari911 1340*9ccd446eSAtari911**Must clear caches or won't work**: 1341*9ccd446eSAtari9111. Hard refresh: Ctrl+Shift+R (5 times!) 1342*9ccd446eSAtari9112. Clear DokuWiki cache 1343*9ccd446eSAtari9113. Close browser completely 1344*9ccd446eSAtari9114. Reopen and test 1345*9ccd446eSAtari911 1346*9ccd446eSAtari911**CSS caching is EXTREMELY persistent!** 1347*9ccd446eSAtari911 1348*9ccd446eSAtari911## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 1349*9ccd446eSAtari911 1350*9ccd446eSAtari911### Fixed: Removed Hardcoded Backgrounds from Table Cells 1351*9ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 1352*9ccd446eSAtari911- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 1353*9ccd446eSAtari911- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 1354*9ccd446eSAtari911- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 1355*9ccd446eSAtari911- **Result:** Calendar table cells finally use template colors! 1356*9ccd446eSAtari911 1357*9ccd446eSAtari911### The REAL Culprits 1358*9ccd446eSAtari911 1359*9ccd446eSAtari911The generic table CSS was overriding everything! 1360*9ccd446eSAtari911 1361*9ccd446eSAtari911**In style.css (lines 307-356)**: 1362*9ccd446eSAtari911```css 1363*9ccd446eSAtari911.calendar-compact-grid thead th { 1364*9ccd446eSAtari911 background: #f8f8f8; /* ← Header cells hardcoded! */ 1365*9ccd446eSAtari911} 1366*9ccd446eSAtari911 1367*9ccd446eSAtari911.calendar-compact-grid tbody td { 1368*9ccd446eSAtari911 background: #ffffff; /* ← ALL table cells hardcoded! */ 1369*9ccd446eSAtari911} 1370*9ccd446eSAtari911 1371*9ccd446eSAtari911.calendar-compact-grid tbody td:hover { 1372*9ccd446eSAtari911 background: #f0f7ff; /* ← Hover state hardcoded! */ 1373*9ccd446eSAtari911} 1374*9ccd446eSAtari911``` 1375*9ccd446eSAtari911 1376*9ccd446eSAtari911**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 1377*9ccd446eSAtari911 1378*9ccd446eSAtari911### Why This Was the Last One 1379*9ccd446eSAtari911 1380*9ccd446eSAtari911**CSS Specificity Order**: 1381*9ccd446eSAtari9111. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 1382*9ccd446eSAtari9112. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 1383*9ccd446eSAtari9113. Inline styles (should win but didn't) 1384*9ccd446eSAtari911 1385*9ccd446eSAtari911**We removed the specific ones (v5.2.4), but the generic one was still there!** 1386*9ccd446eSAtari911 1387*9ccd446eSAtari911### What We've Removed 1388*9ccd446eSAtari911 1389*9ccd446eSAtari911**v5.2.3**: 1390*9ccd446eSAtari911- `.event-compact-item` background 1391*9ccd446eSAtari911- `.event-compact-item:hover` background 1392*9ccd446eSAtari911 1393*9ccd446eSAtari911**v5.2.4**: 1394*9ccd446eSAtari911- `.cal-empty` background & hover 1395*9ccd446eSAtari911- `.cal-today` background & hover 1396*9ccd446eSAtari911- `.cal-has-events` background & hover 1397*9ccd446eSAtari911 1398*9ccd446eSAtari911**v5.2.5 (FINAL)**: 1399*9ccd446eSAtari911- `.calendar-compact-grid tbody td` background ✓ 1400*9ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ✓ 1401*9ccd446eSAtari911- `.calendar-compact-grid thead th` background ✓ 1402*9ccd446eSAtari911 1403*9ccd446eSAtari911**All CSS background overrides ELIMINATED!** 1404*9ccd446eSAtari911 1405*9ccd446eSAtari911### Why It Took 5 Versions 1406*9ccd446eSAtari911 1407*9ccd446eSAtari911**CSS had layers of hardcoded backgrounds**: 1408*9ccd446eSAtari911 1409*9ccd446eSAtari911``` 1410*9ccd446eSAtari911Layer 1: Table cells (.calendar-compact-grid tbody td) 1411*9ccd446eSAtari911 ↓ Overrode inline styles 1412*9ccd446eSAtari911Layer 2: Cell states (.cal-today, .cal-empty, etc.) 1413*9ccd446eSAtari911 ↓ Overrode table cells 1414*9ccd446eSAtari911Layer 3: Event items (.event-compact-item) 1415*9ccd446eSAtari911 ↓ Overrode inline styles 1416*9ccd446eSAtari911 1417*9ccd446eSAtari911ALL had to be removed! 1418*9ccd446eSAtari911``` 1419*9ccd446eSAtari911 1420*9ccd446eSAtari911**We kept finding more specific CSS, but the base table CSS was there all along!** 1421*9ccd446eSAtari911 1422*9ccd446eSAtari911### Visual Result 1423*9ccd446eSAtari911 1424*9ccd446eSAtari911**NOW everything matches**: 1425*9ccd446eSAtari911``` 1426*9ccd446eSAtari911Calendar Table: 1427*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 1428*9ccd446eSAtari911│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 1429*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 1430*9ccd446eSAtari911│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 1431*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 1432*9ccd446eSAtari911│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 1433*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 1434*9ccd446eSAtari911 1435*9ccd446eSAtari911Sidebar Events: 1436*9ccd446eSAtari911┌────────────────────────┐ 1437*9ccd446eSAtari911│ Event │ ← __background_site__ 1438*9ccd446eSAtari911│ Event │ ← __background_site__ 1439*9ccd446eSAtari911└────────────────────────┘ 1440*9ccd446eSAtari911 1441*9ccd446eSAtari911FINALLY ALL MATCHING! ✓ 1442*9ccd446eSAtari911``` 1443*9ccd446eSAtari911 1444*9ccd446eSAtari911### Complete List of Removed CSS 1445*9ccd446eSAtari911 1446*9ccd446eSAtari911**ALL hardcoded backgrounds removed**: 1447*9ccd446eSAtari911- `.event-compact-item` background 1448*9ccd446eSAtari911- `.event-compact-item:hover` background 1449*9ccd446eSAtari911- `.cal-empty` background & hover 1450*9ccd446eSAtari911- `.cal-today` background & hover 1451*9ccd446eSAtari911- `.cal-has-events` background & hover 1452*9ccd446eSAtari911- `.calendar-compact-grid tbody td` background ← NEW 1453*9ccd446eSAtari911- `.calendar-compact-grid tbody td:hover` background ← NEW 1454*9ccd446eSAtari911- `.calendar-compact-grid thead th` background ← NEW 1455*9ccd446eSAtari911 1456*9ccd446eSAtari911**Every single CSS background override is GONE!** 1457*9ccd446eSAtari911 1458*9ccd446eSAtari911### Testing Steps 1459*9ccd446eSAtari911 1460*9ccd446eSAtari911**After installing v5.2.5**: 1461*9ccd446eSAtari911 1462*9ccd446eSAtari9111. **Clear browser cache**: Ctrl+Shift+R (3 times!) 1463*9ccd446eSAtari9112. **Clear DokuWiki cache**: Click the button 1464*9ccd446eSAtari9113. **Close browser completely**: Restart it 1465*9ccd446eSAtari9114. **Visit page**: Should finally see matching backgrounds 1466*9ccd446eSAtari911 1467*9ccd446eSAtari911**CSS is EXTREMELY sticky - may need to clear multiple times!** 1468*9ccd446eSAtari911 1469*9ccd446eSAtari911### This Should Be It 1470*9ccd446eSAtari911 1471*9ccd446eSAtari911**No more CSS overrides exist** (we've checked the entire file): 1472*9ccd446eSAtari911- Table cells ✓ Fixed 1473*9ccd446eSAtari911- Cell states ✓ Fixed 1474*9ccd446eSAtari911- Event items ✓ Fixed 1475*9ccd446eSAtari911- Headers ✓ Fixed 1476*9ccd446eSAtari911- Hover states ✓ Fixed 1477*9ccd446eSAtari911 1478*9ccd446eSAtari911**All backgrounds now come from inline styles using template colors!** 1479*9ccd446eSAtari911 1480*9ccd446eSAtari911## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 1481*9ccd446eSAtari911 1482*9ccd446eSAtari911### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 1483*9ccd446eSAtari911- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 1484*9ccd446eSAtari911- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 1485*9ccd446eSAtari911- **Result:** Calendar cells now use template colors! 1486*9ccd446eSAtari911 1487*9ccd446eSAtari911### The Second Culprit 1488*9ccd446eSAtari911 1489*9ccd446eSAtari911MORE hardcoded backgrounds in the CSS file! 1490*9ccd446eSAtari911 1491*9ccd446eSAtari911**In style.css (lines 359-382)**: 1492*9ccd446eSAtari911```css 1493*9ccd446eSAtari911.cal-empty { 1494*9ccd446eSAtari911 background: #fafafa !important; /* ← Overriding inline styles! */ 1495*9ccd446eSAtari911} 1496*9ccd446eSAtari911 1497*9ccd446eSAtari911.cal-today { 1498*9ccd446eSAtari911 background: #e8f5e9 !important; /* ← Overriding today cell! */ 1499*9ccd446eSAtari911} 1500*9ccd446eSAtari911 1501*9ccd446eSAtari911.cal-today:hover { 1502*9ccd446eSAtari911 background: #c8e6c9 !important; /* ← Overriding hover! */ 1503*9ccd446eSAtari911} 1504*9ccd446eSAtari911 1505*9ccd446eSAtari911.cal-has-events { 1506*9ccd446eSAtari911 background: #fffbf0; /* ← Overriding event cells! */ 1507*9ccd446eSAtari911} 1508*9ccd446eSAtari911 1509*9ccd446eSAtari911.cal-has-events:hover { 1510*9ccd446eSAtari911 background: #fff4d9; /* ← Overriding hover! */ 1511*9ccd446eSAtari911} 1512*9ccd446eSAtari911``` 1513*9ccd446eSAtari911 1514*9ccd446eSAtari911**These were ALL overriding the inline styles!** 1515*9ccd446eSAtari911 1516*9ccd446eSAtari911### The Fix 1517*9ccd446eSAtari911 1518*9ccd446eSAtari911**Removed all hardcoded backgrounds**: 1519*9ccd446eSAtari911```css 1520*9ccd446eSAtari911.cal-empty { 1521*9ccd446eSAtari911 /* background removed - inline style handles this */ 1522*9ccd446eSAtari911 cursor: default !important; 1523*9ccd446eSAtari911} 1524*9ccd446eSAtari911 1525*9ccd446eSAtari911.cal-today { 1526*9ccd446eSAtari911 /* background removed - inline style handles this */ 1527*9ccd446eSAtari911} 1528*9ccd446eSAtari911 1529*9ccd446eSAtari911.cal-has-events { 1530*9ccd446eSAtari911 /* background removed - inline style handles this */ 1531*9ccd446eSAtari911} 1532*9ccd446eSAtari911 1533*9ccd446eSAtari911/* Hover states also removed */ 1534*9ccd446eSAtari911``` 1535*9ccd446eSAtari911 1536*9ccd446eSAtari911### What Was Overridden 1537*9ccd446eSAtari911 1538*9ccd446eSAtari911**v5.2.3 fixed**: 1539*9ccd446eSAtari911- Event items in sidebar ✓ 1540*9ccd446eSAtari911 1541*9ccd446eSAtari911**v5.2.4 fixes**: 1542*9ccd446eSAtari911- Calendar day cells ✓ 1543*9ccd446eSAtari911- Today cell ✓ 1544*9ccd446eSAtari911- Empty cells ✓ 1545*9ccd446eSAtari911- Cells with events ✓ 1546*9ccd446eSAtari911- All hover states ✓ 1547*9ccd446eSAtari911 1548*9ccd446eSAtari911### Why This Kept Happening 1549*9ccd446eSAtari911 1550*9ccd446eSAtari911**CSS had hardcoded backgrounds everywhere**: 1551*9ccd446eSAtari9111. Event items: `#ffffff` (fixed in v5.2.3) 1552*9ccd446eSAtari9112. Calendar cells: Multiple colors (fixed in v5.2.4) 1553*9ccd446eSAtari9113. **All with `!important` flags!** 1554*9ccd446eSAtari911 1555*9ccd446eSAtari911**The inline styles couldn't override them!** 1556*9ccd446eSAtari911 1557*9ccd446eSAtari911### Visual Result 1558*9ccd446eSAtari911 1559*9ccd446eSAtari911**Now ALL backgrounds match**: 1560*9ccd446eSAtari911``` 1561*9ccd446eSAtari911Calendar Grid: 1562*9ccd446eSAtari911┌──┬──┬──┬──┬──┬──┬──┐ 1563*9ccd446eSAtari911│ │ │ │ │ │ │ │ ← All use __background_site__ 1564*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 1565*9ccd446eSAtari911│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 1566*9ccd446eSAtari911├──┼──┼──┼──┼──┼──┼──┤ 1567*9ccd446eSAtari911│ │ │ │ │ │ │ │ ← All match template 1568*9ccd446eSAtari911└──┴──┴──┴──┴──┴──┴──┘ 1569*9ccd446eSAtari911 1570*9ccd446eSAtari911Sidebar Events: 1571*9ccd446eSAtari911┌────────────────────────┐ 1572*9ccd446eSAtari911│ Event │ ← Uses __background_site__ 1573*9ccd446eSAtari911│ Event │ ← Uses __background_site__ 1574*9ccd446eSAtari911└────────────────────────┘ 1575*9ccd446eSAtari911 1576*9ccd446eSAtari911Perfect consistency! 1577*9ccd446eSAtari911``` 1578*9ccd446eSAtari911 1579*9ccd446eSAtari911### CSS Removed 1580*9ccd446eSAtari911 1581*9ccd446eSAtari911**Calendar cells**: 1582*9ccd446eSAtari911- `.cal-empty` background 1583*9ccd446eSAtari911- `.cal-empty:hover` background 1584*9ccd446eSAtari911- `.cal-today` background 1585*9ccd446eSAtari911- `.cal-today:hover` background 1586*9ccd446eSAtari911- `.cal-has-events` background 1587*9ccd446eSAtari911- `.cal-has-events:hover` background 1588*9ccd446eSAtari911 1589*9ccd446eSAtari911**All gone!** ✓ 1590*9ccd446eSAtari911 1591*9ccd446eSAtari911### Important: Clear Caches Again! 1592*9ccd446eSAtari911 1593*9ccd446eSAtari911After installing v5.2.4: 1594*9ccd446eSAtari911 1595*9ccd446eSAtari9111. **Hard refresh browser**: Ctrl+Shift+R (twice!) 1596*9ccd446eSAtari9112. **Clear DokuWiki cache**: Admin → Clear Cache 1597*9ccd446eSAtari9113. **May need to restart browser**: To clear CSS cache 1598*9ccd446eSAtari911 1599*9ccd446eSAtari911**Old CSS is VERY sticky!** 1600*9ccd446eSAtari911 1601*9ccd446eSAtari911### Why It Took So Long 1602*9ccd446eSAtari911 1603*9ccd446eSAtari911**Multiple CSS overrides**: 1604*9ccd446eSAtari911- Event items (v5.2.3) ✓ Fixed 1605*9ccd446eSAtari911- Calendar cells (v5.2.4) ✓ Fixed 1606*9ccd446eSAtari911- Each with different classes 1607*9ccd446eSAtari911- Each with `!important` 1608*9ccd446eSAtari911- Hidden throughout CSS file 1609*9ccd446eSAtari911 1610*9ccd446eSAtari911**Found them all now!** 1611*9ccd446eSAtari911 1612*9ccd446eSAtari911## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 1613*9ccd446eSAtari911 1614*9ccd446eSAtari911### Fixed: Removed Hardcoded Backgrounds from CSS 1615*9ccd446eSAtari911- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 1616*9ccd446eSAtari911- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 1617*9ccd446eSAtari911- **Result:** Event backgrounds now properly use template colors! 1618*9ccd446eSAtari911 1619*9ccd446eSAtari911### The Root Cause 1620*9ccd446eSAtari911 1621*9ccd446eSAtari911The CSS file was overriding the inline styles with hardcoded white backgrounds! 1622*9ccd446eSAtari911 1623*9ccd446eSAtari911**In style.css (lines 599-616)**: 1624*9ccd446eSAtari911```css 1625*9ccd446eSAtari911.event-compact-item { 1626*9ccd446eSAtari911 background: #ffffff; /* ← This was overriding inline styles! */ 1627*9ccd446eSAtari911} 1628*9ccd446eSAtari911 1629*9ccd446eSAtari911.event-compact-item:hover { 1630*9ccd446eSAtari911 background: #f8f9fa; /* ← And this on hover! */ 1631*9ccd446eSAtari911} 1632*9ccd446eSAtari911``` 1633*9ccd446eSAtari911 1634*9ccd446eSAtari911**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 1635*9ccd446eSAtari911 1636*9ccd446eSAtari911### The Fix 1637*9ccd446eSAtari911 1638*9ccd446eSAtari911**Removed hardcoded backgrounds from CSS**: 1639*9ccd446eSAtari911```css 1640*9ccd446eSAtari911.event-compact-item { 1641*9ccd446eSAtari911 /* background removed - set via inline style with template colors */ 1642*9ccd446eSAtari911 display: flex; 1643*9ccd446eSAtari911 /* ... other styles ... */ 1644*9ccd446eSAtari911} 1645*9ccd446eSAtari911 1646*9ccd446eSAtari911.event-compact-item:hover { 1647*9ccd446eSAtari911 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 1648*9ccd446eSAtari911 /* background removed - inline style handles this */ 1649*9ccd446eSAtari911} 1650*9ccd446eSAtari911``` 1651*9ccd446eSAtari911 1652*9ccd446eSAtari911### Why This Was So Difficult to Find 1653*9ccd446eSAtari911 1654*9ccd446eSAtari911**CSS Specificity & Cascade**: 1655*9ccd446eSAtari9111. Inline styles with `!important` should win 1656*9ccd446eSAtari9112. But CSS that comes after can still apply 1657*9ccd446eSAtari9113. The hardcoded `background: #ffffff` was silently overriding 1658*9ccd446eSAtari9114. All the PHP code was correct - it was the CSS! 1659*9ccd446eSAtari911 1660*9ccd446eSAtari911**What We Were Doing**: 1661*9ccd446eSAtari911- ✓ Reading template colors correctly 1662*9ccd446eSAtari911- ✓ Setting `cell_bg` to `__background_site__` correctly 1663*9ccd446eSAtari911- ✓ Applying inline styles with `!important` correctly 1664*9ccd446eSAtari911- ✗ CSS file was overriding everything! 1665*9ccd446eSAtari911 1666*9ccd446eSAtari911### What Was Affected 1667*9ccd446eSAtari911 1668*9ccd446eSAtari911**Event items in**: 1669*9ccd446eSAtari911- Main calendar sidebar 1670*9ccd446eSAtari911- Standalone event list 1671*9ccd446eSAtari911- Sidebar widget 1672*9ccd446eSAtari911- All event displays 1673*9ccd446eSAtari911 1674*9ccd446eSAtari911**All had white backgrounds hardcoded in CSS!** 1675*9ccd446eSAtari911 1676*9ccd446eSAtari911### Now Working 1677*9ccd446eSAtari911 1678*9ccd446eSAtari911**Events use template colors**: 1679*9ccd446eSAtari911```html 1680*9ccd446eSAtari911<div class="event-compact-item" 1681*9ccd446eSAtari911 style="background: #f5f5f5 !important; ..."> 1682*9ccd446eSAtari911 ← Now this inline style actually works! 1683*9ccd446eSAtari911</div> 1684*9ccd446eSAtari911``` 1685*9ccd446eSAtari911 1686*9ccd446eSAtari911**No CSS override** ✓ 1687*9ccd446eSAtari911 1688*9ccd446eSAtari911### Testing 1689*9ccd446eSAtari911 1690*9ccd446eSAtari911To verify this works: 1691*9ccd446eSAtari9111. Clear browser cache (important!) 1692*9ccd446eSAtari9112. Clear DokuWiki cache 1693*9ccd446eSAtari9113. Reload page 1694*9ccd446eSAtari9114. Events should now match eventlist background 1695*9ccd446eSAtari911 1696*9ccd446eSAtari911**Browser caching can make old CSS persist!** 1697*9ccd446eSAtari911 1698*9ccd446eSAtari911### Visual Result 1699*9ccd446eSAtari911 1700*9ccd446eSAtari911**All backgrounds now matching**: 1701*9ccd446eSAtari911``` 1702*9ccd446eSAtari911┌────────────────────────────┐ 1703*9ccd446eSAtari911│ Eventlist (#f5f5f5) │ ← Template color 1704*9ccd446eSAtari911├────────────────────────────┤ 1705*9ccd446eSAtari911│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1706*9ccd446eSAtari911├────────────────────────────┤ 1707*9ccd446eSAtari911│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1708*9ccd446eSAtari911└────────────────────────────┘ 1709*9ccd446eSAtari911 1710*9ccd446eSAtari911Perfect match! 1711*9ccd446eSAtari911``` 1712*9ccd446eSAtari911 1713*9ccd446eSAtari911### Why Everything Else Worked 1714*9ccd446eSAtari911 1715*9ccd446eSAtari911**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 1716*9ccd446eSAtari911- They only had inline styles ✓ 1717*9ccd446eSAtari911- Inline styles worked correctly ✓ 1718*9ccd446eSAtari911- Only event items had the CSS override ✗ 1719*9ccd446eSAtari911 1720*9ccd446eSAtari911### Important Notes 1721*9ccd446eSAtari911 1722*9ccd446eSAtari911**Clear caches**: 1723*9ccd446eSAtari911- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 1724*9ccd446eSAtari911- DokuWiki cache (Admin → Clear Cache) 1725*9ccd446eSAtari911- Old CSS may be cached! 1726*9ccd446eSAtari911 1727*9ccd446eSAtari911**This was the culprit all along!** 1728*9ccd446eSAtari911 1729*9ccd446eSAtari911## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 1730*9ccd446eSAtari911 1731*9ccd446eSAtari911### Fixed: Clock Area Now Matches Event Cells 1732*9ccd446eSAtari911- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 1733*9ccd446eSAtari911- **Result:** Clock/Today header matches event cell backgrounds! 1734*9ccd446eSAtari911 1735*9ccd446eSAtari911### The Issue 1736*9ccd446eSAtari911 1737*9ccd446eSAtari911The clock area (Today header) was using a different background: 1738*9ccd446eSAtari911 1739*9ccd446eSAtari911**Before (v5.2.1)**: 1740*9ccd446eSAtari911```php 1741*9ccd446eSAtari911'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 1742*9ccd446eSAtari911'cell_bg' => __background_site__, // Event cells (#f5f5f5) 1743*9ccd446eSAtari911``` 1744*9ccd446eSAtari911 1745*9ccd446eSAtari911**After (v5.2.2)**: 1746*9ccd446eSAtari911```php 1747*9ccd446eSAtari911'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 1748*9ccd446eSAtari911'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 1749*9ccd446eSAtari911``` 1750*9ccd446eSAtari911 1751*9ccd446eSAtari911### What's the Clock Area? 1752*9ccd446eSAtari911 1753*9ccd446eSAtari911The clock/Today header in the sidebar: 1754*9ccd446eSAtari911``` 1755*9ccd446eSAtari911┌────────────────────────────┐ 1756*9ccd446eSAtari911│ 3:45:23 PM │ ← Clock area (header_bg) 1757*9ccd446eSAtari911│ ️ --° | Sun, Feb 9, 2026 │ 1758*9ccd446eSAtari911└────────────────────────────┘ 1759*9ccd446eSAtari911``` 1760*9ccd446eSAtari911 1761*9ccd446eSAtari911### All Backgrounds Now Unified 1762*9ccd446eSAtari911 1763*9ccd446eSAtari911**Everything now uses __background_site__**: 1764*9ccd446eSAtari911- Eventlist background ✓ 1765*9ccd446eSAtari911- Calendar cells ✓ 1766*9ccd446eSAtari911- Event items ✓ 1767*9ccd446eSAtari911- Clock/Today header ✓ 1768*9ccd446eSAtari911- Sidebar widget ✓ 1769*9ccd446eSAtari911- All backgrounds match! ✓ 1770*9ccd446eSAtari911 1771*9ccd446eSAtari911### Visual Result 1772*9ccd446eSAtari911 1773*9ccd446eSAtari911**Complete consistency**: 1774*9ccd446eSAtari911``` 1775*9ccd446eSAtari911┌────────────────────────────┐ 1776*9ccd446eSAtari911│ 3:45:23 PM │ ← Same background 1777*9ccd446eSAtari911│ ️ --° | Sun, Feb 9, 2026 │ 1778*9ccd446eSAtari911├────────────────────────────┤ 1779*9ccd446eSAtari911│ Meeting at 2pm │ ← Same background 1780*9ccd446eSAtari911│ Description... │ 1781*9ccd446eSAtari911├────────────────────────────┤ 1782*9ccd446eSAtari911│ Another event │ ← Same background 1783*9ccd446eSAtari911│ More details... │ 1784*9ccd446eSAtari911└────────────────────────────┘ 1785*9ccd446eSAtari911 1786*9ccd446eSAtari911All using __background_site__ (#f5f5f5) 1787*9ccd446eSAtari911``` 1788*9ccd446eSAtari911 1789*9ccd446eSAtari911**Perfect visual harmony!** 1790*9ccd446eSAtari911 1791*9ccd446eSAtari911## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 1792*9ccd446eSAtari911 1793*9ccd446eSAtari911### Fixed: Calendar Cells Now Match Eventlist Background 1794*9ccd446eSAtari911- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 1795*9ccd446eSAtari911- **Result:** Calendar cells now match the eventlist background perfectly! 1796*9ccd446eSAtari911 1797*9ccd446eSAtari911### The Real Issue 1798*9ccd446eSAtari911 1799*9ccd446eSAtari911The eventlist was showing the CORRECT background color all along! 1800*9ccd446eSAtari911 1801*9ccd446eSAtari911**Eventlist was using**: 1802*9ccd446eSAtari911- `bg` → `__background_site__` ✓ (This was correct!) 1803*9ccd446eSAtari911 1804*9ccd446eSAtari911**Calendar cells were using**: 1805*9ccd446eSAtari911- `cell_bg` → `__background__` ✗ (This was wrong!) 1806*9ccd446eSAtari911 1807*9ccd446eSAtari911**They didn't match!** 1808*9ccd446eSAtari911 1809*9ccd446eSAtari911### The Correct Fix 1810*9ccd446eSAtari911 1811*9ccd446eSAtari911**Now everything uses __background_site__**: 1812*9ccd446eSAtari911```php 1813*9ccd446eSAtari911'bg' => __background_site__, // Eventlist (was already correct) 1814*9ccd446eSAtari911'cell_bg' => __background_site__, // Cells (now fixed to match) 1815*9ccd446eSAtari911``` 1816*9ccd446eSAtari911 1817*9ccd446eSAtari911### Why __background_site__? 1818*9ccd446eSAtari911 1819*9ccd446eSAtari911The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 1820*9ccd446eSAtari911 1821*9ccd446eSAtari911``` 1822*9ccd446eSAtari911Page Layout: 1823*9ccd446eSAtari911┌────────────────────────────────────┐ 1824*9ccd446eSAtari911│ __background_site__ (page bg) │ ← This is where calendar lives 1825*9ccd446eSAtari911│ │ 1826*9ccd446eSAtari911│ ┌──────────────────────────────┐ │ 1827*9ccd446eSAtari911│ │ __background__ (content bg) │ │ ← Wiki article content 1828*9ccd446eSAtari911│ │ │ │ 1829*9ccd446eSAtari911│ └──────────────────────────────┘ │ 1830*9ccd446eSAtari911│ │ 1831*9ccd446eSAtari911└────────────────────────────────────┘ 1832*9ccd446eSAtari911``` 1833*9ccd446eSAtari911 1834*9ccd446eSAtari911**Calendar should match the page background, not the content background!** 1835*9ccd446eSAtari911 1836*9ccd446eSAtari911### Template Example 1837*9ccd446eSAtari911 1838*9ccd446eSAtari911Typical DokuWiki template: 1839*9ccd446eSAtari911```ini 1840*9ccd446eSAtari911__background_site__ = "#f5f5f5" (Light gray - page background) 1841*9ccd446eSAtari911__background__ = "#ffffff" (White - content area) 1842*9ccd446eSAtari911``` 1843*9ccd446eSAtari911 1844*9ccd446eSAtari911**Before (v5.2.0)**: 1845*9ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1846*9ccd446eSAtari911- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 1847*9ccd446eSAtari911 1848*9ccd446eSAtari911**After (v5.2.1)**: 1849*9ccd446eSAtari911- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1850*9ccd446eSAtari911- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 1851*9ccd446eSAtari911 1852*9ccd446eSAtari911### All Backgrounds Now Unified 1853*9ccd446eSAtari911 1854*9ccd446eSAtari911**Everything now uses __background_site__**: 1855*9ccd446eSAtari911- Eventlist sidebar background ✓ 1856*9ccd446eSAtari911- Main calendar background ✓ 1857*9ccd446eSAtari911- Calendar day cells ✓ 1858*9ccd446eSAtari911- Sidebar widget ✓ 1859*9ccd446eSAtari911- Event items ✓ 1860*9ccd446eSAtari911- Input fields ✓ 1861*9ccd446eSAtari911- Buttons ✓ 1862*9ccd446eSAtari911 1863*9ccd446eSAtari911**All perfectly matched to the page background!** 1864*9ccd446eSAtari911 1865*9ccd446eSAtari911### Why Version 5.2.0 Was Wrong 1866*9ccd446eSAtari911 1867*9ccd446eSAtari911I 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. 1868*9ccd446eSAtari911 1869*9ccd446eSAtari911**The eventlist knew what it was doing all along!** The cells just needed to catch up. 1870*9ccd446eSAtari911 1871*9ccd446eSAtari911## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 1872*9ccd446eSAtari911**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 1873*9ccd446eSAtari911 1874*9ccd446eSAtari911### Fixed: All Backgrounds Now Use __background__ 1875*9ccd446eSAtari911- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 1876*9ccd446eSAtari911- **Fixed:** Eventlist, calendar cells, and sidebar all match now 1877*9ccd446eSAtari911- **Result:** Completely unified background throughout! 1878*9ccd446eSAtari911 1879*9ccd446eSAtari911### The Issue 1880*9ccd446eSAtari911 1881*9ccd446eSAtari911Different parts of the calendar were using different background sources: 1882*9ccd446eSAtari911 1883*9ccd446eSAtari911**Before (v5.1.9)**: 1884*9ccd446eSAtari911```php 1885*9ccd446eSAtari911'bg' => __background_site__ // Eventlist background (outer page) 1886*9ccd446eSAtari911'cell_bg' => __background__ // Cell backgrounds (content area) 1887*9ccd446eSAtari911``` 1888*9ccd446eSAtari911 1889*9ccd446eSAtari911**These are different colors!** 1890*9ccd446eSAtari911- `__background_site__` = Outer page wrapper (often gray) 1891*9ccd446eSAtari911- `__background__` = Main content area (often white) 1892*9ccd446eSAtari911 1893*9ccd446eSAtari911### The Fix 1894*9ccd446eSAtari911 1895*9ccd446eSAtari911**After (v5.2.0)**: 1896*9ccd446eSAtari911```php 1897*9ccd446eSAtari911'bg' => __background__ // Eventlist background ✓ 1898*9ccd446eSAtari911'cell_bg' => __background__ // Cell backgrounds ✓ 1899*9ccd446eSAtari911``` 1900*9ccd446eSAtari911 1901*9ccd446eSAtari911**Both use the same source!** 1902*9ccd446eSAtari911 1903*9ccd446eSAtari911### What Uses 'bg' 1904*9ccd446eSAtari911 1905*9ccd446eSAtari911The `bg` color is used for: 1906*9ccd446eSAtari911- Eventlist sidebar background 1907*9ccd446eSAtari911- Main calendar container 1908*9ccd446eSAtari911- Sidebar widget background 1909*9ccd446eSAtari911- Form backgrounds 1910*9ccd446eSAtari911- Event dialogs 1911*9ccd446eSAtari911 1912*9ccd446eSAtari911### What Uses 'cell_bg' 1913*9ccd446eSAtari911 1914*9ccd446eSAtari911The `cell_bg` color is used for: 1915*9ccd446eSAtari911- Calendar day cells 1916*9ccd446eSAtari911- Event item backgrounds 1917*9ccd446eSAtari911- Input field backgrounds 1918*9ccd446eSAtari911- Button backgrounds 1919*9ccd446eSAtari911 1920*9ccd446eSAtari911### Why This Matters 1921*9ccd446eSAtari911 1922*9ccd446eSAtari911**Template color hierarchy**: 1923*9ccd446eSAtari911``` 1924*9ccd446eSAtari911__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 1925*9ccd446eSAtari911__background__ → Main content area (e.g., #ffffff white) 1926*9ccd446eSAtari911__background_alt__ → Sections/headers 1927*9ccd446eSAtari911__background_neu__ → Highlights 1928*9ccd446eSAtari911``` 1929*9ccd446eSAtari911 1930*9ccd446eSAtari911**We want all calendar backgrounds to match the main content area!** 1931*9ccd446eSAtari911 1932*9ccd446eSAtari911### Visual Comparison 1933*9ccd446eSAtari911 1934*9ccd446eSAtari911**Before (v5.1.9)**: Mismatched backgrounds 1935*9ccd446eSAtari911``` 1936*9ccd446eSAtari911┌────────────────────────────────┐ 1937*9ccd446eSAtari911│ Eventlist (gray #f5f5f5) │ ← __background_site__ 1938*9ccd446eSAtari911└────────────────────────────────┘ 1939*9ccd446eSAtari911 1940*9ccd446eSAtari911┌────────────────────────────────┐ 1941*9ccd446eSAtari911│ Calendar │ 1942*9ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1943*9ccd446eSAtari911│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1944*9ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘ │ 1945*9ccd446eSAtari911└────────────────────────────────┘ 1946*9ccd446eSAtari911Different colors - looks inconsistent 1947*9ccd446eSAtari911``` 1948*9ccd446eSAtari911 1949*9ccd446eSAtari911**After (v5.2.0)**: Unified backgrounds 1950*9ccd446eSAtari911``` 1951*9ccd446eSAtari911┌────────────────────────────────┐ 1952*9ccd446eSAtari911│ Eventlist (white #fff) │ ← __background__ 1953*9ccd446eSAtari911└────────────────────────────────┘ 1954*9ccd446eSAtari911 1955*9ccd446eSAtari911┌────────────────────────────────┐ 1956*9ccd446eSAtari911│ Calendar │ 1957*9ccd446eSAtari911│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1958*9ccd446eSAtari911│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1959*9ccd446eSAtari911│ └──┴──┴──┴──┴──┴──┴──┘ │ 1960*9ccd446eSAtari911└────────────────────────────────┘ 1961*9ccd446eSAtari911Same color - perfectly consistent! 1962*9ccd446eSAtari911``` 1963*9ccd446eSAtari911 1964*9ccd446eSAtari911### Template Examples 1965*9ccd446eSAtari911 1966*9ccd446eSAtari911**Light Template**: 1967*9ccd446eSAtari911```ini 1968*9ccd446eSAtari911__background_site__ = "#f5f5f5" (light gray) 1969*9ccd446eSAtari911__background__ = "#ffffff" (white) 1970*9ccd446eSAtari911``` 1971*9ccd446eSAtari911 1972*9ccd446eSAtari911**Before**: Eventlist gray, cells white 1973*9ccd446eSAtari911**After**: Eventlist white, cells white ✓ 1974*9ccd446eSAtari911 1975*9ccd446eSAtari911**Dark Template**: 1976*9ccd446eSAtari911```ini 1977*9ccd446eSAtari911__background_site__ = "#1a1a1a" (very dark) 1978*9ccd446eSAtari911__background__ = "#2d2d2d" (dark) 1979*9ccd446eSAtari911``` 1980*9ccd446eSAtari911 1981*9ccd446eSAtari911**Before**: Eventlist very dark, cells dark 1982*9ccd446eSAtari911**After**: Eventlist dark, cells dark ✓ 1983*9ccd446eSAtari911 1984*9ccd446eSAtari911### Benefits 1985*9ccd446eSAtari911 1986*9ccd446eSAtari911**Visual Consistency**: 1987*9ccd446eSAtari911- All backgrounds match 1988*9ccd446eSAtari911- Clean, unified appearance 1989*9ccd446eSAtari911- Professional look 1990*9ccd446eSAtari911 1991*9ccd446eSAtari911**Correct Template Integration**: 1992*9ccd446eSAtari911- Uses content area color (not page wrapper) 1993*9ccd446eSAtari911- Matches wiki content area 1994*9ccd446eSAtari911- Proper color hierarchy 1995*9ccd446eSAtari911 1996*9ccd446eSAtari911**Works Everywhere**: 1997*9ccd446eSAtari911- Light templates ✓ 1998*9ccd446eSAtari911- Dark templates ✓ 1999*9ccd446eSAtari911- Custom templates ✓ 2000*9ccd446eSAtari911 2001*9ccd446eSAtari911### All Backgrounds Unified 2002*9ccd446eSAtari911 2003*9ccd446eSAtari911**Now using __background__**: 2004*9ccd446eSAtari911- Eventlist background ✓ 2005*9ccd446eSAtari911- Calendar cells ✓ 2006*9ccd446eSAtari911- Sidebar widget ✓ 2007*9ccd446eSAtari911- Event items ✓ 2008*9ccd446eSAtari911- Input fields ✓ 2009*9ccd446eSAtari911- Buttons ✓ 2010*9ccd446eSAtari911- Dialogs ✓ 2011*9ccd446eSAtari911 2012*9ccd446eSAtari911**Perfect harmony throughout!** 2013*9ccd446eSAtari911 2014*9ccd446eSAtari911## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 2015*9ccd446eSAtari911 2016*9ccd446eSAtari911### Fixed: Wiki Theme Event Backgrounds Not Showing 2017*9ccd446eSAtari911- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 2018*9ccd446eSAtari911- **Fixed:** Replaced CSS variables with actual hex colors 2019*9ccd446eSAtari911- **Result:** Event backgrounds now show correctly with template colors! 2020*9ccd446eSAtari911 2021*9ccd446eSAtari911### The Problem 2022*9ccd446eSAtari911 2023*9ccd446eSAtari911CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 2024*9ccd446eSAtari911 2025*9ccd446eSAtari911**Before (broken)**: 2026*9ccd446eSAtari911```php 2027*9ccd446eSAtari911'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 2028*9ccd446eSAtari911``` 2029*9ccd446eSAtari911 2030*9ccd446eSAtari911**After (fixed)**: 2031*9ccd446eSAtari911```php 2032*9ccd446eSAtari911'cell_bg' => '#fff', // Actual hex color works! 2033*9ccd446eSAtari911``` 2034*9ccd446eSAtari911 2035*9ccd446eSAtari911### What Was Affected 2036*9ccd446eSAtari911 2037*9ccd446eSAtari911**When style.ini read successfully**: 2038*9ccd446eSAtari911- ✅ Worked fine (uses actual hex colors from file) 2039*9ccd446eSAtari911 2040*9ccd446eSAtari911**When style.ini fallback used**: 2041*9ccd446eSAtari911- ❌ Events had no background 2042*9ccd446eSAtari911- ❌ CSS variables don't work in inline styles 2043*9ccd446eSAtari911- ❌ Looked broken 2044*9ccd446eSAtari911 2045*9ccd446eSAtari911### The Fix 2046*9ccd446eSAtari911 2047*9ccd446eSAtari911**Wiki theme fallback now uses real colors**: 2048*9ccd446eSAtari911```php 2049*9ccd446eSAtari911'wiki' => [ 2050*9ccd446eSAtari911 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 2051*9ccd446eSAtari911 'border' => '#ccc', // Real hex (was: var(--__border__)) 2052*9ccd446eSAtari911 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 2053*9ccd446eSAtari911 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 2054*9ccd446eSAtari911 'text_primary' => '#333', // Real hex (was: var(--__text__)) 2055*9ccd446eSAtari911 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 2056*9ccd446eSAtari911 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 2057*9ccd446eSAtari911 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 2058*9ccd446eSAtari911 // ... all colors now use real hex values 2059*9ccd446eSAtari911] 2060*9ccd446eSAtari911``` 2061*9ccd446eSAtari911 2062*9ccd446eSAtari911### Why CSS Variables Don't Work 2063*9ccd446eSAtari911 2064*9ccd446eSAtari911**CSS variables work**: 2065*9ccd446eSAtari911```css 2066*9ccd446eSAtari911.some-class { 2067*9ccd446eSAtari911 background: var(--__background__, #fff); /* ✓ Works in CSS */ 2068*9ccd446eSAtari911} 2069*9ccd446eSAtari911``` 2070*9ccd446eSAtari911 2071*9ccd446eSAtari911**CSS variables DON'T work**: 2072*9ccd446eSAtari911```html 2073*9ccd446eSAtari911<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 2074*9ccd446eSAtari911``` 2075*9ccd446eSAtari911 2076*9ccd446eSAtari911### How It Works Now 2077*9ccd446eSAtari911 2078*9ccd446eSAtari911**Priority system**: 2079*9ccd446eSAtari9111. **Try reading style.ini** → Use actual template hex colors ✓ 2080*9ccd446eSAtari9112. **If file not found** → Use fallback hex colors ✓ 2081*9ccd446eSAtari9113. **Never use CSS variables in inline styles** ✓ 2082*9ccd446eSAtari911 2083*9ccd446eSAtari911**Both paths now work correctly!** 2084*9ccd446eSAtari911 2085*9ccd446eSAtari911### Visual Result 2086*9ccd446eSAtari911 2087*9ccd446eSAtari911**Events now have proper backgrounds**: 2088*9ccd446eSAtari911``` 2089*9ccd446eSAtari911┌──────────────────────────┐ 2090*9ccd446eSAtari911│ Meeting at 2pm │ ← White background (#fff) 2091*9ccd446eSAtari911│ Description here... │ 2092*9ccd446eSAtari911│ [✏️ Edit] [️ Delete] │ 2093*9ccd446eSAtari911└──────────────────────────┘ 2094*9ccd446eSAtari911 2095*9ccd446eSAtari911Not: 2096*9ccd446eSAtari911┌──────────────────────────┐ 2097*9ccd446eSAtari911│ Meeting at 2pm │ ← No background (broken) 2098*9ccd446eSAtari911│ Description here... │ 2099*9ccd446eSAtari911└──────────────────────────┘ 2100*9ccd446eSAtari911``` 2101*9ccd446eSAtari911 2102*9ccd446eSAtari911### Affected Areas 2103*9ccd446eSAtari911 2104*9ccd446eSAtari911**All event displays**: 2105*9ccd446eSAtari911- Main calendar events ✓ 2106*9ccd446eSAtari911- Sidebar widget events ✓ 2107*9ccd446eSAtari911- Event list items ✓ 2108*9ccd446eSAtari911- Event backgrounds ✓ 2109*9ccd446eSAtari911- Button backgrounds ✓ 2110*9ccd446eSAtari911- Input field backgrounds ✓ 2111*9ccd446eSAtari911 2112*9ccd446eSAtari911**Everything uses real colors now!** 2113*9ccd446eSAtari911 2114*9ccd446eSAtari911## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 2115*9ccd446eSAtari911 2116*9ccd446eSAtari911### Reorganized: Better Update Tab Layout 2117*9ccd446eSAtari911- **Moved:** Current Version section to the top 2118*9ccd446eSAtari911- **Combined:** Upload and Important Notes side-by-side 2119*9ccd446eSAtari911- **Improved:** Space-efficient two-column layout 2120*9ccd446eSAtari911- **Result:** More information visible at once! 2121*9ccd446eSAtari911 2122*9ccd446eSAtari911### New Layout Order 2123*9ccd446eSAtari911 2124*9ccd446eSAtari911**Version 5.1.8**: 2125*9ccd446eSAtari911``` 2126*9ccd446eSAtari9111. Current Version (at top - see what you have) 2127*9ccd446eSAtari9112. Upload + Important Notes (side-by-side) 2128*9ccd446eSAtari9113. Recent Changes (changelog) 2129*9ccd446eSAtari9114. Backups 2130*9ccd446eSAtari911``` 2131*9ccd446eSAtari911 2132*9ccd446eSAtari911### Side-by-Side Design 2133*9ccd446eSAtari911 2134*9ccd446eSAtari911**Upload form (left 60%) + Important Notes (right 40%)**: 2135*9ccd446eSAtari911``` 2136*9ccd446eSAtari911┌──────────────────────────────────────────┐ 2137*9ccd446eSAtari911│ Current Version │ 2138*9ccd446eSAtari911│ Version: 5.1.8 │ 2139*9ccd446eSAtari911│ ✅ Permissions: OK │ 2140*9ccd446eSAtari911└──────────────────────────────────────────┘ 2141*9ccd446eSAtari911 2142*9ccd446eSAtari911┌─────────────────────┬────────────────────┐ 2143*9ccd446eSAtari911│ Upload New │ ⚠️ Important Notes │ 2144*9ccd446eSAtari911│ [Choose File] │ • Replaces files │ 2145*9ccd446eSAtari911│ ☑ Backup first │ • Config preserved │ 2146*9ccd446eSAtari911│ [Upload] [Clear] │ • Events safe │ 2147*9ccd446eSAtari911└─────────────────────┴────────────────────┘ 2148*9ccd446eSAtari911``` 2149*9ccd446eSAtari911 2150*9ccd446eSAtari911### Benefits 2151*9ccd446eSAtari911 2152*9ccd446eSAtari911**Current Version First**: 2153*9ccd446eSAtari911- See what you have immediately 2154*9ccd446eSAtari911- Check permissions at a glance 2155*9ccd446eSAtari911- Know if ready to update 2156*9ccd446eSAtari911 2157*9ccd446eSAtari911**Side-by-Side Layout**: 2158*9ccd446eSAtari911- Upload form and warnings together 2159*9ccd446eSAtari911- Read notes while choosing file 2160*9ccd446eSAtari911- More efficient use of space 2161*9ccd446eSAtari911- Less scrolling needed 2162*9ccd446eSAtari911 2163*9ccd446eSAtari911**Better Information Flow**: 2164*9ccd446eSAtari9111. See current version ✓ 2165*9ccd446eSAtari9112. Upload new version with notes visible ✓ 2166*9ccd446eSAtari9113. Review recent changes ✓ 2167*9ccd446eSAtari9114. Manage backups ✓ 2168*9ccd446eSAtari911 2169*9ccd446eSAtari911### Visual Comparison 2170*9ccd446eSAtari911 2171*9ccd446eSAtari911**Before (v5.1.7)**: 2172*9ccd446eSAtari911``` 2173*9ccd446eSAtari911Important Notes (full width) 2174*9ccd446eSAtari911↓ 2175*9ccd446eSAtari911Upload Form (full width) 2176*9ccd446eSAtari911↓ 2177*9ccd446eSAtari911Current Version 2178*9ccd446eSAtari911↓ 2179*9ccd446eSAtari911Recent Changes 2180*9ccd446eSAtari911↓ 2181*9ccd446eSAtari911Backups 2182*9ccd446eSAtari911``` 2183*9ccd446eSAtari911 2184*9ccd446eSAtari911**After (v5.1.8)**: 2185*9ccd446eSAtari911``` 2186*9ccd446eSAtari911Current Version (full width) 2187*9ccd446eSAtari911↓ 2188*9ccd446eSAtari911Upload (60%) | Notes (40%) 2189*9ccd446eSAtari911↓ 2190*9ccd446eSAtari911Recent Changes 2191*9ccd446eSAtari911↓ 2192*9ccd446eSAtari911Backups 2193*9ccd446eSAtari911``` 2194*9ccd446eSAtari911 2195*9ccd446eSAtari911**More compact, better organized!** 2196*9ccd446eSAtari911 2197*9ccd446eSAtari911### Responsive Design 2198*9ccd446eSAtari911 2199*9ccd446eSAtari911**Wide screens**: 2200*9ccd446eSAtari911- Upload and notes side-by-side 2201*9ccd446eSAtari911- Full 1200px width utilized 2202*9ccd446eSAtari911- Efficient space usage 2203*9ccd446eSAtari911 2204*9ccd446eSAtari911**Narrow screens**: 2205*9ccd446eSAtari911- Sections stack gracefully 2206*9ccd446eSAtari911- Flex layout adapts 2207*9ccd446eSAtari911- Still fully functional 2208*9ccd446eSAtari911 2209*9ccd446eSAtari911### Layout Details 2210*9ccd446eSAtari911 2211*9ccd446eSAtari911**Current Version Section**: 2212*9ccd446eSAtari911- Full width (1200px max) 2213*9ccd446eSAtari911- Shows version, author, description 2214*9ccd446eSAtari911- Permission status with icons 2215*9ccd446eSAtari911- Helpful fix commands if needed 2216*9ccd446eSAtari911 2217*9ccd446eSAtari911**Upload/Notes Section**: 2218*9ccd446eSAtari911- Flexbox layout with gap 2219*9ccd446eSAtari911- Upload: `flex:1` (grows) 2220*9ccd446eSAtari911- Notes: `flex:0 0 350px` (fixed 350px) 2221*9ccd446eSAtari911- Both have proper min-width 2222*9ccd446eSAtari911 2223*9ccd446eSAtari911**Recent Changes Section**: 2224*9ccd446eSAtari911- Full width (1200px max) 2225*9ccd446eSAtari911- Compact scrollable view 2226*9ccd446eSAtari911- Color-coded change types 2227*9ccd446eSAtari911- Last 10 versions shown 2228*9ccd446eSAtari911 2229*9ccd446eSAtari911**Backups Section**: 2230*9ccd446eSAtari911- Full width (1200px max) 2231*9ccd446eSAtari911- Manual backup button 2232*9ccd446eSAtari911- Scrollable file list 2233*9ccd446eSAtari911- All actions accessible 2234*9ccd446eSAtari911 2235*9ccd446eSAtari911### Improved Max Widths 2236*9ccd446eSAtari911 2237*9ccd446eSAtari911All sections now use `max-width:1200px` (previously 900px): 2238*9ccd446eSAtari911- Better use of wide screens 2239*9ccd446eSAtari911- Still responsive on narrow screens 2240*9ccd446eSAtari911- Consistent throughout tab 2241*9ccd446eSAtari911 2242*9ccd446eSAtari911## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 2243*9ccd446eSAtari911 2244*9ccd446eSAtari911### Fixed: Extra Closing Brace 2245*9ccd446eSAtari911- **Fixed:** ParseError on line 1936 (extra closing brace) 2246*9ccd446eSAtari911- **Result:** Manual backup feature now works correctly! 2247*9ccd446eSAtari911 2248*9ccd446eSAtari911### What Was Wrong 2249*9ccd446eSAtari911 2250*9ccd446eSAtari911Extra `}` after the backup section: 2251*9ccd446eSAtari911 2252*9ccd446eSAtari911**Before (broken)**: 2253*9ccd446eSAtari911```php 2254*9ccd446eSAtari911echo '</div>'; 2255*9ccd446eSAtari911} // ← Extra closing brace! 2256*9ccd446eSAtari911 2257*9ccd446eSAtari911echo '<script> 2258*9ccd446eSAtari911``` 2259*9ccd446eSAtari911 2260*9ccd446eSAtari911**After (fixed)**: 2261*9ccd446eSAtari911```php 2262*9ccd446eSAtari911echo '</div>'; 2263*9ccd446eSAtari911 2264*9ccd446eSAtari911echo '<script> 2265*9ccd446eSAtari911``` 2266*9ccd446eSAtari911 2267*9ccd446eSAtari911**Manual backup feature now fully functional!** ✅ 2268*9ccd446eSAtari911 2269*9ccd446eSAtari911## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 2270*9ccd446eSAtari911 2271*9ccd446eSAtari911### Added: Create Backup Manually Anytime 2272*9ccd446eSAtari911- **Added:** "Create Backup Now" button in Backups section 2273*9ccd446eSAtari911- **Added:** Manual backup action handler with full verification 2274*9ccd446eSAtari911- **Added:** Backups section always visible (even with no backups) 2275*9ccd446eSAtari911- **Added:** Success message showing file size and file count 2276*9ccd446eSAtari911- **Result:** Create backups anytime without needing to upload! 2277*9ccd446eSAtari911 2278*9ccd446eSAtari911### Manual Backup Button 2279*9ccd446eSAtari911 2280*9ccd446eSAtari911**New Layout**: 2281*9ccd446eSAtari911``` 2282*9ccd446eSAtari911┌─────────────────────────────────────┐ 2283*9ccd446eSAtari911│ Backups [ Create Backup Now] │ 2284*9ccd446eSAtari911├─────────────────────────────────────┤ 2285*9ccd446eSAtari911│ Backup File Size │ 2286*9ccd446eSAtari911│ calendar.backup.v5.1.6... 243 KB │ 2287*9ccd446eSAtari911│ [ Download] [✏️ Rename] [️ Delete] │ 2288*9ccd446eSAtari911└─────────────────────────────────────┘ 2289*9ccd446eSAtari911``` 2290*9ccd446eSAtari911 2291*9ccd446eSAtari911**Always visible - even with no backups**: 2292*9ccd446eSAtari911``` 2293*9ccd446eSAtari911┌─────────────────────────────────────┐ 2294*9ccd446eSAtari911│ Backups [ Create Backup Now] │ 2295*9ccd446eSAtari911├─────────────────────────────────────┤ 2296*9ccd446eSAtari911│ No backups yet. Click "Create │ 2297*9ccd446eSAtari911│ Backup Now" to create your first │ 2298*9ccd446eSAtari911│ backup. │ 2299*9ccd446eSAtari911└─────────────────────────────────────┘ 2300*9ccd446eSAtari911``` 2301*9ccd446eSAtari911 2302*9ccd446eSAtari911### How It Works 2303*9ccd446eSAtari911 2304*9ccd446eSAtari911**Click the button**: 2305*9ccd446eSAtari9111. Confirm: "Create a backup of the current plugin version?" 2306*9ccd446eSAtari9112. System creates backup ZIP 2307*9ccd446eSAtari9113. Verifies: File count (30+ files) 2308*9ccd446eSAtari9114. Verifies: File size (200KB+) 2309*9ccd446eSAtari9115. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 2310*9ccd446eSAtari911 2311*9ccd446eSAtari911**Backup naming**: 2312*9ccd446eSAtari911``` 2313*9ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2314*9ccd446eSAtari911 ^^^^^^ 2315*9ccd446eSAtari911 "manual" tag identifies manual backups 2316*9ccd446eSAtari911``` 2317*9ccd446eSAtari911 2318*9ccd446eSAtari911### Use Cases 2319*9ccd446eSAtari911 2320*9ccd446eSAtari911**Before updates**: 2321*9ccd446eSAtari911- Create safety backup before uploading new version 2322*9ccd446eSAtari911- Have multiple restore points 2323*9ccd446eSAtari911- Test new features with fallback 2324*9ccd446eSAtari911 2325*9ccd446eSAtari911**Regular backups**: 2326*9ccd446eSAtari911- Weekly/monthly backup schedule 2327*9ccd446eSAtari911- Before making configuration changes 2328*9ccd446eSAtari911- After important customizations 2329*9ccd446eSAtari911 2330*9ccd446eSAtari911**Development**: 2331*9ccd446eSAtari911- Backup before code experiments 2332*9ccd446eSAtari911- Save working states 2333*9ccd446eSAtari911- Quick rollback points 2334*9ccd446eSAtari911 2335*9ccd446eSAtari911### Full Verification 2336*9ccd446eSAtari911 2337*9ccd446eSAtari911**Same checks as automatic backups**: 2338*9ccd446eSAtari911- ✅ File count check (minimum 10, expected 30+) 2339*9ccd446eSAtari911- ✅ File size check (minimum 1KB, expected 200KB+) 2340*9ccd446eSAtari911- ✅ Existence check (file actually created) 2341*9ccd446eSAtari911- ✅ Automatic cleanup on failure 2342*9ccd446eSAtari911 2343*9ccd446eSAtari911**Success message includes**: 2344*9ccd446eSAtari911- Backup filename 2345*9ccd446eSAtari911- File size (human-readable) 2346*9ccd446eSAtari911- Number of files backed up 2347*9ccd446eSAtari911 2348*9ccd446eSAtari911### Example Messages 2349*9ccd446eSAtari911 2350*9ccd446eSAtari911**Success**: 2351*9ccd446eSAtari911``` 2352*9ccd446eSAtari911✓ Manual backup created successfully: 2353*9ccd446eSAtari911 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2354*9ccd446eSAtari911 (243 KB, 31 files) 2355*9ccd446eSAtari911``` 2356*9ccd446eSAtari911 2357*9ccd446eSAtari911**Failure Examples**: 2358*9ccd446eSAtari911``` 2359*9ccd446eSAtari911❌ Plugin directory is not readable. 2360*9ccd446eSAtari911 Please check permissions. 2361*9ccd446eSAtari911 2362*9ccd446eSAtari911❌ Backup incomplete: Only 5 files were added (expected 30+). 2363*9ccd446eSAtari911 Backup failed. 2364*9ccd446eSAtari911 2365*9ccd446eSAtari911❌ Backup file is too small (342 bytes). 2366*9ccd446eSAtari911 Only 3 files were added. Backup failed. 2367*9ccd446eSAtari911``` 2368*9ccd446eSAtari911 2369*9ccd446eSAtari911### Benefits 2370*9ccd446eSAtari911 2371*9ccd446eSAtari911**On-Demand Safety**: 2372*9ccd446eSAtari911- Create backups anytime 2373*9ccd446eSAtari911- No need to upload new version 2374*9ccd446eSAtari911- Quick and easy 2375*9ccd446eSAtari911 2376*9ccd446eSAtari911**Peace of Mind**: 2377*9ccd446eSAtari911- Backup before risky changes 2378*9ccd446eSAtari911- Multiple restore points 2379*9ccd446eSAtari911- Safe experimentation 2380*9ccd446eSAtari911 2381*9ccd446eSAtari911**Professional Workflow**: 2382*9ccd446eSAtari911- Regular backup schedule 2383*9ccd446eSAtari911- Version snapshots 2384*9ccd446eSAtari911- Disaster recovery 2385*9ccd446eSAtari911 2386*9ccd446eSAtari911### Backup Section Improvements 2387*9ccd446eSAtari911 2388*9ccd446eSAtari911**Always Visible**: 2389*9ccd446eSAtari911- Section shows even with 0 backups 2390*9ccd446eSAtari911- Button always accessible 2391*9ccd446eSAtari911- Clear call-to-action 2392*9ccd446eSAtari911 2393*9ccd446eSAtari911**Better Header**: 2394*9ccd446eSAtari911- Title and button on same row 2395*9ccd446eSAtari911- Clean, professional layout 2396*9ccd446eSAtari911- Space-efficient design 2397*9ccd446eSAtari911 2398*9ccd446eSAtari911### Technical Details 2399*9ccd446eSAtari911 2400*9ccd446eSAtari911**New Action**: `create_manual_backup` 2401*9ccd446eSAtari911 2402*9ccd446eSAtari911**New Function**: `createManualBackup()` 2403*9ccd446eSAtari911- Gets current version 2404*9ccd446eSAtari911- Creates timestamped filename with "manual" tag 2405*9ccd446eSAtari911- Uses same verification as auto-backups 2406*9ccd446eSAtari911- Shows detailed success/error messages 2407*9ccd446eSAtari911 2408*9ccd446eSAtari911**File Naming Convention**: 2409*9ccd446eSAtari911``` 2410*9ccd446eSAtari911Automatic (on upload): 2411*9ccd446eSAtari911calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 2412*9ccd446eSAtari911 2413*9ccd446eSAtari911Manual (button click): 2414*9ccd446eSAtari911calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2415*9ccd446eSAtari911 ^^^^^^^ 2416*9ccd446eSAtari911 Easy to identify! 2417*9ccd446eSAtari911``` 2418*9ccd446eSAtari911 2419*9ccd446eSAtari911### Permissions Required 2420*9ccd446eSAtari911 2421*9ccd446eSAtari911- **Read access**: Plugin directory 2422*9ccd446eSAtari911- **Write access**: Parent plugins directory 2423*9ccd446eSAtari911 2424*9ccd446eSAtari911**Same as automatic backups** - no additional permissions needed! 2425*9ccd446eSAtari911 2426*9ccd446eSAtari911## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 2427*9ccd446eSAtari911 2428*9ccd446eSAtari911### Enhanced: Backup Creation with Robust Verification 2429*9ccd446eSAtari911- **Added:** File count validation (must have 10+ files) 2430*9ccd446eSAtari911- **Added:** File size validation (must be 1KB+ minimum) 2431*9ccd446eSAtari911- **Added:** Return value from addDirectoryToZip (counts files added) 2432*9ccd446eSAtari911- **Added:** Detailed error messages showing file count 2433*9ccd446eSAtari911- **Added:** Automatic deletion of invalid/incomplete backups 2434*9ccd446eSAtari911- **Enhanced:** Exception handling with proper error propagation 2435*9ccd446eSAtari911- **Result:** Backups are now guaranteed to be complete or fail clearly! 2436*9ccd446eSAtari911 2437*9ccd446eSAtari911### What Changed 2438*9ccd446eSAtari911 2439*9ccd446eSAtari911**Before (v5.1.4)**: 2440*9ccd446eSAtari911```php 2441*9ccd446eSAtari911$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2442*9ccd446eSAtari911$zip->close(); 2443*9ccd446eSAtari911// No verification - could create empty or partial backup 2444*9ccd446eSAtari911``` 2445*9ccd446eSAtari911 2446*9ccd446eSAtari911**After (v5.1.5)**: 2447*9ccd446eSAtari911```php 2448*9ccd446eSAtari911$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2449*9ccd446eSAtari911$zip->close(); 2450*9ccd446eSAtari911 2451*9ccd446eSAtari911// Verify backup exists 2452*9ccd446eSAtari911if (!file_exists($backupPath)) { 2453*9ccd446eSAtari911 redirect('Backup file was not created'); 2454*9ccd446eSAtari911} 2455*9ccd446eSAtari911 2456*9ccd446eSAtari911// Verify backup has content 2457*9ccd446eSAtari911$backupSize = filesize($backupPath); 2458*9ccd446eSAtari911if ($backupSize < 1000) { 2459*9ccd446eSAtari911 unlink($backupPath); 2460*9ccd446eSAtari911 redirect('Backup too small: ' . $backupSize . ' bytes'); 2461*9ccd446eSAtari911} 2462*9ccd446eSAtari911 2463*9ccd446eSAtari911// Verify file count 2464*9ccd446eSAtari911if ($fileCount < 10) { 2465*9ccd446eSAtari911 unlink($backupPath); 2466*9ccd446eSAtari911 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 2467*9ccd446eSAtari911} 2468*9ccd446eSAtari911``` 2469*9ccd446eSAtari911 2470*9ccd446eSAtari911### Backup Validation Checks 2471*9ccd446eSAtari911 2472*9ccd446eSAtari911**Three-Layer Verification**: 2473*9ccd446eSAtari911 2474*9ccd446eSAtari9111. **File Count Check**: 2475*9ccd446eSAtari911 - Minimum: 10 files required 2476*9ccd446eSAtari911 - Expected: 30+ files 2477*9ccd446eSAtari911 - Action: Delete backup if too few files 2478*9ccd446eSAtari911 2479*9ccd446eSAtari9112. **Size Check**: 2480*9ccd446eSAtari911 - Minimum: 1KB (1000 bytes) 2481*9ccd446eSAtari911 - Expected: 200-250KB 2482*9ccd446eSAtari911 - Action: Delete backup if too small 2483*9ccd446eSAtari911 2484*9ccd446eSAtari9113. **Existence Check**: 2485*9ccd446eSAtari911 - Verify file was actually created 2486*9ccd446eSAtari911 - Check ZIP archive is valid 2487*9ccd446eSAtari911 - Action: Error if file missing 2488*9ccd446eSAtari911 2489*9ccd446eSAtari911### Enhanced Error Reporting 2490*9ccd446eSAtari911 2491*9ccd446eSAtari911**Detailed Error Messages**: 2492*9ccd446eSAtari911``` 2493*9ccd446eSAtari911❌ "Backup file was not created" 2494*9ccd446eSAtari911❌ "Backup too small (342 bytes). Only 3 files added." 2495*9ccd446eSAtari911❌ "Only 5 files added (expected 30+). Backup aborted." 2496*9ccd446eSAtari911❌ "Too many errors adding files: Failed to add X, Y, Z..." 2497*9ccd446eSAtari911❌ "Directory does not exist: /path/to/dir" 2498*9ccd446eSAtari911❌ "Directory is not readable: /path/to/dir" 2499*9ccd446eSAtari911``` 2500*9ccd446eSAtari911 2501*9ccd446eSAtari911**Now you know exactly what went wrong!** 2502*9ccd446eSAtari911 2503*9ccd446eSAtari911### Improved addDirectoryToZip Function 2504*9ccd446eSAtari911 2505*9ccd446eSAtari911**Returns File Count**: 2506*9ccd446eSAtari911```php 2507*9ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2508*9ccd446eSAtari911 $fileCount = 0; 2509*9ccd446eSAtari911 $errors = []; 2510*9ccd446eSAtari911 2511*9ccd446eSAtari911 // Validation 2512*9ccd446eSAtari911 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 2513*9ccd446eSAtari911 if (!is_readable($dir)) throw new Exception("Not readable"); 2514*9ccd446eSAtari911 2515*9ccd446eSAtari911 // Add files 2516*9ccd446eSAtari911 foreach ($files as $file) { 2517*9ccd446eSAtari911 if ($zip->addFile($filePath, $relativePath)) { 2518*9ccd446eSAtari911 $fileCount++; 2519*9ccd446eSAtari911 } else { 2520*9ccd446eSAtari911 $errors[] = "Failed to add: " . $filename; 2521*9ccd446eSAtari911 } 2522*9ccd446eSAtari911 } 2523*9ccd446eSAtari911 2524*9ccd446eSAtari911 // Check error threshold 2525*9ccd446eSAtari911 if (count($errors) > 5) { 2526*9ccd446eSAtari911 throw new Exception("Too many errors"); 2527*9ccd446eSAtari911 } 2528*9ccd446eSAtari911 2529*9ccd446eSAtari911 return $fileCount; // Returns count for verification! 2530*9ccd446eSAtari911} 2531*9ccd446eSAtari911``` 2532*9ccd446eSAtari911 2533*9ccd446eSAtari911### Safety Features 2534*9ccd446eSAtari911 2535*9ccd446eSAtari911**Invalid Backup Cleanup**: 2536*9ccd446eSAtari911- Failed backups are automatically deleted 2537*9ccd446eSAtari911- No partial/corrupt backups left behind 2538*9ccd446eSAtari911- Clean error state 2539*9ccd446eSAtari911 2540*9ccd446eSAtari911**Error Threshold**: 2541*9ccd446eSAtari911- Allow up to 5 minor file errors (logs warnings) 2542*9ccd446eSAtari911- More than 5 errors = complete failure 2543*9ccd446eSAtari911- Prevents partially corrupt backups 2544*9ccd446eSAtari911 2545*9ccd446eSAtari911**Directory Validation**: 2546*9ccd446eSAtari911- Check directory exists before processing 2547*9ccd446eSAtari911- Check directory is readable 2548*9ccd446eSAtari911- Fail fast with clear errors 2549*9ccd446eSAtari911 2550*9ccd446eSAtari911### Benefits 2551*9ccd446eSAtari911 2552*9ccd446eSAtari911**Guaranteed Complete Backups**: 2553*9ccd446eSAtari911- ✅ All files included or backup fails 2554*9ccd446eSAtari911- ✅ No silent failures 2555*9ccd446eSAtari911- ✅ Clear error messages 2556*9ccd446eSAtari911- ✅ Automatic cleanup 2557*9ccd446eSAtari911 2558*9ccd446eSAtari911**Better Debugging**: 2559*9ccd446eSAtari911- Know exactly how many files were added 2560*9ccd446eSAtari911- See specific errors for missing files 2561*9ccd446eSAtari911- Understand why backup failed 2562*9ccd446eSAtari911 2563*9ccd446eSAtari911**User Confidence**: 2564*9ccd446eSAtari911- Backup succeeds = complete backup 2565*9ccd446eSAtari911- Backup fails = clear error message 2566*9ccd446eSAtari911- No ambiguity 2567*9ccd446eSAtari911 2568*9ccd446eSAtari911### Example Scenarios 2569*9ccd446eSAtari911 2570*9ccd446eSAtari911**Scenario 1: Permission Issue** 2571*9ccd446eSAtari911``` 2572*9ccd446eSAtari911User uploads new version 2573*9ccd446eSAtari911System starts backup 2574*9ccd446eSAtari911Error: "Directory is not readable: /lib/plugins/calendar/" 2575*9ccd446eSAtari911Backup fails before creating file 2576*9ccd446eSAtari911User sees clear error message 2577*9ccd446eSAtari911``` 2578*9ccd446eSAtari911 2579*9ccd446eSAtari911**Scenario 2: Partial Backup** 2580*9ccd446eSAtari911``` 2581*9ccd446eSAtari911User uploads new version 2582*9ccd446eSAtari911System creates backup 2583*9ccd446eSAtari911Only 5 files added (disk issue?) 2584*9ccd446eSAtari911Size: 450 bytes 2585*9ccd446eSAtari911Verification fails 2586*9ccd446eSAtari911Incomplete backup deleted 2587*9ccd446eSAtari911Error: "Only 5 files added (expected 30+)" 2588*9ccd446eSAtari911``` 2589*9ccd446eSAtari911 2590*9ccd446eSAtari911**Scenario 3: Success** 2591*9ccd446eSAtari911``` 2592*9ccd446eSAtari911User uploads new version 2593*9ccd446eSAtari911System creates backup 2594*9ccd446eSAtari91131 files added 2595*9ccd446eSAtari911Size: 240KB 2596*9ccd446eSAtari911All verifications pass ✅ 2597*9ccd446eSAtari911Update proceeds 2598*9ccd446eSAtari911``` 2599*9ccd446eSAtari911 2600*9ccd446eSAtari911### Testing Recommendations 2601*9ccd446eSAtari911 2602*9ccd446eSAtari911After installing v5.1.5: 2603*9ccd446eSAtari9111. Upload a new version with backup enabled 2604*9ccd446eSAtari9112. Check for success message 2605*9ccd446eSAtari9113. Verify backup file exists in /lib/plugins/ 2606*9ccd446eSAtari9114. Check backup file size (should be ~240KB) 2607*9ccd446eSAtari9115. If backup fails, read error message carefully 2608*9ccd446eSAtari911 2609*9ccd446eSAtari911**Your backups are now bulletproof!** 2610*9ccd446eSAtari911 2611*9ccd446eSAtari911## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 2612*9ccd446eSAtari911 2613*9ccd446eSAtari911### ✅ Verified: Backup System Working Correctly 2614*9ccd446eSAtari911- **Verified:** addDirectoryToZip function includes all files recursively 2615*9ccd446eSAtari911- **Verified:** Backups contain all 31+ files from calendar directory 2616*9ccd446eSAtari911- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 2617*9ccd446eSAtari911- **Info:** Backup sizes grow slightly with each version (more code = more features!) 2618*9ccd446eSAtari911- **Result:** Backup system is working perfectly! 2619*9ccd446eSAtari911 2620*9ccd446eSAtari911### Backup System Details 2621*9ccd446eSAtari911 2622*9ccd446eSAtari911**What Gets Backed Up**: 2623*9ccd446eSAtari911- All PHP files (syntax.php, admin.php, action.php, etc.) 2624*9ccd446eSAtari911- All JavaScript files (calendar-main.js, script.js) 2625*9ccd446eSAtari911- All documentation (CHANGELOG.md, README.md, all guides) 2626*9ccd446eSAtari911- All configuration (sync_config.php) 2627*9ccd446eSAtari911- All language files 2628*9ccd446eSAtari911- All assets and resources 2629*9ccd446eSAtari911- **Everything in the calendar/ directory!** 2630*9ccd446eSAtari911 2631*9ccd446eSAtari911**Backup Size Analysis**: 2632*9ccd446eSAtari911``` 2633*9ccd446eSAtari911Version 5.0.4: 233KB (normal) 2634*9ccd446eSAtari911Version 5.0.5: 234KB (normal) 2635*9ccd446eSAtari911Version 5.0.6: 235KB (normal) 2636*9ccd446eSAtari911Version 5.0.7: 236KB (normal) 2637*9ccd446eSAtari911Version 5.0.8: 237KB (normal) 2638*9ccd446eSAtari911Version 5.0.9: 237KB (normal) 2639*9ccd446eSAtari911Version 5.1.0: 238KB (normal) 2640*9ccd446eSAtari911Version 5.1.1: 238KB (normal) 2641*9ccd446eSAtari911Version 5.1.2: 240KB (normal - added AJAX features) 2642*9ccd446eSAtari911Version 5.1.3: 240KB (normal) 2643*9ccd446eSAtari911``` 2644*9ccd446eSAtari911 2645*9ccd446eSAtari911**Why Sizes Grow**: 2646*9ccd446eSAtari911- More features = more code 2647*9ccd446eSAtari911- Longer CHANGELOG 2648*9ccd446eSAtari911- Additional documentation 2649*9ccd446eSAtari911- New functionality 2650*9ccd446eSAtari911- **This is expected and normal!** 2651*9ccd446eSAtari911 2652*9ccd446eSAtari911**Compression Ratio**: 2653*9ccd446eSAtari911``` 2654*9ccd446eSAtari911Uncompressed: ~1.0 MB (source files) 2655*9ccd446eSAtari911Compressed: ~240 KB (ZIP archive) 2656*9ccd446eSAtari911Ratio: ~24% (excellent compression!) 2657*9ccd446eSAtari911``` 2658*9ccd446eSAtari911 2659*9ccd446eSAtari911### Backup File Contents 2660*9ccd446eSAtari911 2661*9ccd446eSAtari911**31 Files Included**: 2662*9ccd446eSAtari911``` 2663*9ccd446eSAtari911admin.php (216KB - main admin interface) 2664*9ccd446eSAtari911syntax.php (173KB - calendar rendering) 2665*9ccd446eSAtari911calendar-main.js (102KB - JavaScript functionality) 2666*9ccd446eSAtari911CHANGELOG.md (268KB - complete version history) 2667*9ccd446eSAtari911style.css (57KB - all styling) 2668*9ccd446eSAtari911action.php (38KB - DokuWiki actions) 2669*9ccd446eSAtari911sync_outlook.php (32KB - Outlook integration) 2670*9ccd446eSAtari911+ 24 other files (docs, configs, helpers) 2671*9ccd446eSAtari911``` 2672*9ccd446eSAtari911 2673*9ccd446eSAtari911**All files successfully included!** ✅ 2674*9ccd446eSAtari911 2675*9ccd446eSAtari911### How Backups Work 2676*9ccd446eSAtari911 2677*9ccd446eSAtari911**Creation Process**: 2678*9ccd446eSAtari9111. User uploads new plugin version 2679*9ccd446eSAtari9112. Checkbox "Create backup first" (checked by default) 2680*9ccd446eSAtari9113. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 2681*9ccd446eSAtari9114. Backup saved to: `/lib/plugins/` directory 2682*9ccd446eSAtari9115. Then proceeds with update 2683*9ccd446eSAtari911 2684*9ccd446eSAtari911**Backup Function**: 2685*9ccd446eSAtari911```php 2686*9ccd446eSAtari911private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2687*9ccd446eSAtari911 $files = new RecursiveIteratorIterator( 2688*9ccd446eSAtari911 new RecursiveDirectoryIterator($dir), 2689*9ccd446eSAtari911 RecursiveIteratorIterator::LEAVES_ONLY 2690*9ccd446eSAtari911 ); 2691*9ccd446eSAtari911 foreach ($files as $file) { 2692*9ccd446eSAtari911 if (!$file->isDir()) { 2693*9ccd446eSAtari911 $zip->addFile($filePath, $relativePath); 2694*9ccd446eSAtari911 } 2695*9ccd446eSAtari911 } 2696*9ccd446eSAtari911} 2697*9ccd446eSAtari911``` 2698*9ccd446eSAtari911 2699*9ccd446eSAtari911**Recursive = Gets Everything!** ✅ 2700*9ccd446eSAtari911 2701*9ccd446eSAtari911### Verification Results 2702*9ccd446eSAtari911 2703*9ccd446eSAtari911**Test Results**: 2704*9ccd446eSAtari911- ✅ All 31 files present in zip 2705*9ccd446eSAtari911- ✅ All subdirectories included (lang/en/) 2706*9ccd446eSAtari911- ✅ File sizes match originals 2707*9ccd446eSAtari911- ✅ Compression works properly 2708*9ccd446eSAtari911- ✅ No files missing 2709*9ccd446eSAtari911- ✅ Backup can be restored 2710*9ccd446eSAtari911 2711*9ccd446eSAtari911**File Count**: 2712*9ccd446eSAtari911``` 2713*9ccd446eSAtari911Source directory: 31 files 2714*9ccd446eSAtari911Backup ZIP: 34 items (31 files + 3 directories) 2715*9ccd446eSAtari911Status: COMPLETE ✅ 2716*9ccd446eSAtari911``` 2717*9ccd446eSAtari911 2718*9ccd446eSAtari911### Backup Best Practices 2719*9ccd446eSAtari911 2720*9ccd446eSAtari911**Always enabled by default** ✅ 2721*9ccd446eSAtari911**Stored in accessible location** ✅ 2722*9ccd446eSAtari911**Timestamped filenames** ✅ 2723*9ccd446eSAtari911**Complete directory backup** ✅ 2724*9ccd446eSAtari911**Easy to restore** ✅ 2725*9ccd446eSAtari911 2726*9ccd446eSAtari911### Conclusion 2727*9ccd446eSAtari911 2728*9ccd446eSAtari911The backup system is working perfectly. The file sizes are appropriate and expected: 2729*9ccd446eSAtari911- Compressed size: ~240KB (good compression) 2730*9ccd446eSAtari911- Uncompressed size: ~1MB (all source files) 2731*9ccd446eSAtari911- All files included: YES ✅ 2732*9ccd446eSAtari911- Growing size over versions: Normal (more features!) 2733*9ccd446eSAtari911 2734*9ccd446eSAtari911**Your backups are complete and reliable!** 2735*9ccd446eSAtari911 2736*9ccd446eSAtari911## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 2737*9ccd446eSAtari911 2738*9ccd446eSAtari911### Fixed: JavaScript Syntax Error in AJAX Function 2739*9ccd446eSAtari911- **Fixed:** ParseError on line 1947 (deleteBackup function) 2740*9ccd446eSAtari911- **Fixed:** Escaped all single quotes in JavaScript strings 2741*9ccd446eSAtari911- **Result:** AJAX backup deletion now works correctly! 2742*9ccd446eSAtari911 2743*9ccd446eSAtari911### What Was Wrong 2744*9ccd446eSAtari911 2745*9ccd446eSAtari911JavaScript inside PHP echo needs escaped quotes: 2746*9ccd446eSAtari911 2747*9ccd446eSAtari911**Before (broken)**: 2748*9ccd446eSAtari911```javascript 2749*9ccd446eSAtari911formData.append('action', 'delete_backup'); // PHP interprets quotes 2750*9ccd446eSAtari911``` 2751*9ccd446eSAtari911 2752*9ccd446eSAtari911**After (fixed)**: 2753*9ccd446eSAtari911```javascript 2754*9ccd446eSAtari911formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 2755*9ccd446eSAtari911``` 2756*9ccd446eSAtari911 2757*9ccd446eSAtari911### All Quotes Escaped 2758*9ccd446eSAtari911 2759*9ccd446eSAtari911Fixed in deleteBackup function: 2760*9ccd446eSAtari911- ✅ FormData.append() calls 2761*9ccd446eSAtari911- ✅ fetch() URL 2762*9ccd446eSAtari911- ✅ querySelector() calls 2763*9ccd446eSAtari911- ✅ createElement() call 2764*9ccd446eSAtari911- ✅ All string literals 2765*9ccd446eSAtari911- ✅ Error messages 2766*9ccd446eSAtari911 2767*9ccd446eSAtari911**JavaScript now works!** ✓ 2768*9ccd446eSAtari911 2769*9ccd446eSAtari911## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 2770*9ccd446eSAtari911 2771*9ccd446eSAtari911### Improved: Update Tab Further Refined 2772*9ccd446eSAtari911- **Moved:** Important Notes to very top (above upload) 2773*9ccd446eSAtari911- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 2774*9ccd446eSAtari911- **Added:** Smooth fade-out animation when deleting backups 2775*9ccd446eSAtari911- **Added:** Success message after deletion 2776*9ccd446eSAtari911- **Auto-remove:** Backup section disappears if last backup deleted 2777*9ccd446eSAtari911- **Result:** Smoother, more polished experience! 2778*9ccd446eSAtari911 2779*9ccd446eSAtari911### New Layout Order 2780*9ccd446eSAtari911 2781*9ccd446eSAtari911**Final Order (v5.1.2)**: 2782*9ccd446eSAtari911``` 2783*9ccd446eSAtari9111. ⚠️ Important Notes (warnings at top) 2784*9ccd446eSAtari9112. Upload New Version (with Clear Cache button) 2785*9ccd446eSAtari9113. Current Version (info) 2786*9ccd446eSAtari9114. Recent Changes (changelog) 2787*9ccd446eSAtari9115. Available Backups (if any) 2788*9ccd446eSAtari911``` 2789*9ccd446eSAtari911 2790*9ccd446eSAtari911### AJAX Backup Deletion 2791*9ccd446eSAtari911 2792*9ccd446eSAtari911**Before (v5.1.1)**: 2793*9ccd446eSAtari911- Click Delete → Page refreshes → Scroll back down 2794*9ccd446eSAtari911- Lose position on page 2795*9ccd446eSAtari911- Page reload is jarring 2796*9ccd446eSAtari911 2797*9ccd446eSAtari911**After (v5.1.2)**: 2798*9ccd446eSAtari911- Click Delete → Confirm 2799*9ccd446eSAtari911- Row fades out smoothly 2800*9ccd446eSAtari911- Row disappears 2801*9ccd446eSAtari911- Success message shows at top 2802*9ccd446eSAtari911- Success message fades after 3 seconds 2803*9ccd446eSAtari911- If last backup: entire section fades away 2804*9ccd446eSAtari911- **No page refresh!** ✓ 2805*9ccd446eSAtari911 2806*9ccd446eSAtari911### Visual Flow 2807*9ccd446eSAtari911 2808*9ccd446eSAtari911**Delete Animation**: 2809*9ccd446eSAtari911``` 2810*9ccd446eSAtari9111. Click ️ Delete 2811*9ccd446eSAtari9112. Confirm dialog 2812*9ccd446eSAtari9113. Row fades out (0.3s) 2813*9ccd446eSAtari9114. Row removed 2814*9ccd446eSAtari9115. Success message appears 2815*9ccd446eSAtari9116. Message fades after 3s 2816*9ccd446eSAtari911``` 2817*9ccd446eSAtari911 2818*9ccd446eSAtari911**If Last Backup**: 2819*9ccd446eSAtari911``` 2820*9ccd446eSAtari9111. Delete last backup 2821*9ccd446eSAtari9112. Row fades out 2822*9ccd446eSAtari9113. Entire "Available Backups" section fades 2823*9ccd446eSAtari9114. Section removed 2824*9ccd446eSAtari9115. Clean interface ✓ 2825*9ccd446eSAtari911``` 2826*9ccd446eSAtari911 2827*9ccd446eSAtari911### Success Message 2828*9ccd446eSAtari911 2829*9ccd446eSAtari911After deleting: 2830*9ccd446eSAtari911``` 2831*9ccd446eSAtari911┌──────────────────────────────┐ 2832*9ccd446eSAtari911│ ✓ Backup deleted: filename │ ← Appears at top 2833*9ccd446eSAtari911└──────────────────────────────┘ 2834*9ccd446eSAtari911 Fades after 3 seconds 2835*9ccd446eSAtari911``` 2836*9ccd446eSAtari911 2837*9ccd446eSAtari911### Benefits 2838*9ccd446eSAtari911 2839*9ccd446eSAtari911**Important Notes First**: 2840*9ccd446eSAtari911- Warnings before actions ✓ 2841*9ccd446eSAtari911- Read before uploading ✓ 2842*9ccd446eSAtari911- Clear expectations ✓ 2843*9ccd446eSAtari911 2844*9ccd446eSAtari911**AJAX Deletion**: 2845*9ccd446eSAtari911- No page refresh ✓ 2846*9ccd446eSAtari911- Smooth animations ✓ 2847*9ccd446eSAtari911- Stay in context ✓ 2848*9ccd446eSAtari911- Professional feel ✓ 2849*9ccd446eSAtari911 2850*9ccd446eSAtari911**Auto-Cleanup**: 2851*9ccd446eSAtari911- Empty list disappears ✓ 2852*9ccd446eSAtari911- Clean interface ✓ 2853*9ccd446eSAtari911- No clutter ✓ 2854*9ccd446eSAtari911 2855*9ccd446eSAtari911### Technical Implementation 2856*9ccd446eSAtari911 2857*9ccd446eSAtari911**AJAX Request**: 2858*9ccd446eSAtari911```javascript 2859*9ccd446eSAtari911fetch('?do=admin&page=calendar&tab=update', { 2860*9ccd446eSAtari911 method: 'POST', 2861*9ccd446eSAtari911 body: formData 2862*9ccd446eSAtari911}) 2863*9ccd446eSAtari911``` 2864*9ccd446eSAtari911 2865*9ccd446eSAtari911**DOM Manipulation**: 2866*9ccd446eSAtari911- Fade out row 2867*9ccd446eSAtari911- Remove element 2868*9ccd446eSAtari911- Show success 2869*9ccd446eSAtari911- Remove section if empty 2870*9ccd446eSAtari911 2871*9ccd446eSAtari911**Smooth Transitions**: 2872*9ccd446eSAtari911- 300ms fade animations 2873*9ccd446eSAtari911- Clean visual feedback 2874*9ccd446eSAtari911- Professional polish 2875*9ccd446eSAtari911 2876*9ccd446eSAtari911## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 2877*9ccd446eSAtari911 2878*9ccd446eSAtari911### Improved: Update Tab Layout Reorganized 2879*9ccd446eSAtari911- **Moved:** Upload section to the top of the page 2880*9ccd446eSAtari911- **Added:** Clear Cache button next to Upload & Install button 2881*9ccd446eSAtari911- **Changed:** "Current Version" section moved below upload 2882*9ccd446eSAtari911- **Result:** Better workflow - upload first, then see version info! 2883*9ccd446eSAtari911 2884*9ccd446eSAtari911### New Layout Order 2885*9ccd446eSAtari911 2886*9ccd446eSAtari911**Before (v5.1.0)**: 2887*9ccd446eSAtari911``` 2888*9ccd446eSAtari9111. Clear Cache (standalone) 2889*9ccd446eSAtari9112. Current Version 2890*9ccd446eSAtari9113. Recent Changes 2891*9ccd446eSAtari9114. Upload New Version 2892*9ccd446eSAtari9115. Warning Box 2893*9ccd446eSAtari9116. Backups 2894*9ccd446eSAtari911``` 2895*9ccd446eSAtari911 2896*9ccd446eSAtari911**After (v5.1.1)**: 2897*9ccd446eSAtari911``` 2898*9ccd446eSAtari9111. Upload New Version (with Clear Cache button side-by-side) 2899*9ccd446eSAtari9112. Warning Box 2900*9ccd446eSAtari9113. Current Version 2901*9ccd446eSAtari9114. Recent Changes 2902*9ccd446eSAtari9115. Backups 2903*9ccd446eSAtari911``` 2904*9ccd446eSAtari911 2905*9ccd446eSAtari911### Visual Result 2906*9ccd446eSAtari911 2907*9ccd446eSAtari911**Top of Update Tab**: 2908*9ccd446eSAtari911``` 2909*9ccd446eSAtari911┌─────────────────────────────────┐ 2910*9ccd446eSAtari911│ Upload New Version │ 2911*9ccd446eSAtari911│ ┌─────────────────────────────┐ │ 2912*9ccd446eSAtari911│ │ [Choose File] │ │ 2913*9ccd446eSAtari911│ │ ☑ Create backup first │ │ 2914*9ccd446eSAtari911│ │ ┌──────────────┬──────────┐ │ │ 2915*9ccd446eSAtari911│ │ │ Upload & │️ Clear │ │ │ 2916*9ccd446eSAtari911│ │ │ Install │ Cache │ │ │ 2917*9ccd446eSAtari911│ │ └──────────────┴──────────┘ │ │ 2918*9ccd446eSAtari911│ └─────────────────────────────┘ │ 2919*9ccd446eSAtari911│ │ 2920*9ccd446eSAtari911│ ⚠️ Important Notes │ 2921*9ccd446eSAtari911│ • Will replace all files │ 2922*9ccd446eSAtari911│ • Config preserved │ 2923*9ccd446eSAtari911│ │ 2924*9ccd446eSAtari911│ Current Version │ 2925*9ccd446eSAtari911│ Version: 5.1.1 │ 2926*9ccd446eSAtari911└─────────────────────────────────┘ 2927*9ccd446eSAtari911``` 2928*9ccd446eSAtari911 2929*9ccd446eSAtari911### Benefits 2930*9ccd446eSAtari911 2931*9ccd446eSAtari911**Better Workflow**: 2932*9ccd446eSAtari911- Primary action (upload) is first 2933*9ccd446eSAtari911- Clear cache conveniently next to install 2934*9ccd446eSAtari911- No scrolling to find upload button 2935*9ccd446eSAtari911- Logical top-to-bottom flow 2936*9ccd446eSAtari911 2937*9ccd446eSAtari911**Side-by-Side Buttons**: 2938*9ccd446eSAtari911- Upload & Install (green) 2939*9ccd446eSAtari911- Clear Cache (orange) 2940*9ccd446eSAtari911- Both common actions together 2941*9ccd446eSAtari911- Easy to access after upload 2942*9ccd446eSAtari911 2943*9ccd446eSAtari911**Improved UX**: 2944*9ccd446eSAtari911- Upload is most important → now at top 2945*9ccd446eSAtari911- Version info is reference → moved down 2946*9ccd446eSAtari911- Related actions grouped 2947*9ccd446eSAtari911- Cleaner organization 2948*9ccd446eSAtari911 2949*9ccd446eSAtari911### Button Layout 2950*9ccd446eSAtari911 2951*9ccd446eSAtari911``` 2952*9ccd446eSAtari911┌──────────────────┬──────────────┐ 2953*9ccd446eSAtari911│ Upload & │ ️ Clear │ 2954*9ccd446eSAtari911│ Install │ Cache │ 2955*9ccd446eSAtari911│ (Green) │ (Orange) │ 2956*9ccd446eSAtari911└──────────────────┴──────────────┘ 2957*9ccd446eSAtari911``` 2958*9ccd446eSAtari911 2959*9ccd446eSAtari911**Green = Primary Action** 2960*9ccd446eSAtari911**Orange = Secondary Action** 2961*9ccd446eSAtari911 2962*9ccd446eSAtari911Both easily accessible! 2963*9ccd446eSAtari911 2964*9ccd446eSAtari911## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 2965*9ccd446eSAtari911 2966*9ccd446eSAtari911### Changed: Admin Section Backgrounds Now Use __background__ 2967*9ccd446eSAtari911- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 2968*9ccd446eSAtari911- **Result:** Cleaner, more unified admin interface! 2969*9ccd446eSAtari911 2970*9ccd446eSAtari911### Background Usage Update 2971*9ccd446eSAtari911 2972*9ccd446eSAtari911**Before (v5.0.9)**: 2973*9ccd446eSAtari911```php 2974*9ccd446eSAtari911Section boxes: bg_alt (__background_alt__) 2975*9ccd446eSAtari911Content areas: bg (__background__) 2976*9ccd446eSAtari911``` 2977*9ccd446eSAtari911 2978*9ccd446eSAtari911**After (v5.1.0)**: 2979*9ccd446eSAtari911```php 2980*9ccd446eSAtari911Section boxes: bg (__background__) 2981*9ccd446eSAtari911Content areas: bg (__background__) 2982*9ccd446eSAtari911``` 2983*9ccd446eSAtari911 2984*9ccd446eSAtari911### Why This Change? 2985*9ccd446eSAtari911 2986*9ccd446eSAtari911**More unified appearance**: 2987*9ccd446eSAtari911- Sections and content use same background 2988*9ccd446eSAtari911- Creates cleaner, more cohesive look 2989*9ccd446eSAtari911- Borders provide visual separation 2990*9ccd446eSAtari911- Matches typical admin UI patterns 2991*9ccd446eSAtari911 2992*9ccd446eSAtari911**Template color hierarchy**: 2993*9ccd446eSAtari911``` 2994*9ccd446eSAtari911__background_site__ → Outer page wrapper 2995*9ccd446eSAtari911__background__ → Content & sections (BOTH now use this) 2996*9ccd446eSAtari911__background_alt__ → Reserved for special panels/highlights 2997*9ccd446eSAtari911__background_neu__ → Special highlights 2998*9ccd446eSAtari911``` 2999*9ccd446eSAtari911 3000*9ccd446eSAtari911### Visual Result 3001*9ccd446eSAtari911 3002*9ccd446eSAtari911**Light Template**: 3003*9ccd446eSAtari911```ini 3004*9ccd446eSAtari911__background__ = "#ffffff" 3005*9ccd446eSAtari911__background_alt__ = "#e8e8e8" 3006*9ccd446eSAtari911``` 3007*9ccd446eSAtari911 3008*9ccd446eSAtari911**Before**: 3009*9ccd446eSAtari911``` 3010*9ccd446eSAtari911Admin Page: 3011*9ccd446eSAtari911┌─────────────────────┐ 3012*9ccd446eSAtari911│ ┌─────────────────┐ │ 3013*9ccd446eSAtari911│ │ Section Box │ │ ← Gray (#e8e8e8) 3014*9ccd446eSAtari911│ │ ┌─────────────┐ │ │ 3015*9ccd446eSAtari911│ │ │ Content │ │ │ ← White (#fff) 3016*9ccd446eSAtari911│ │ └─────────────┘ │ │ 3017*9ccd446eSAtari911│ └─────────────────┘ │ 3018*9ccd446eSAtari911└─────────────────────┘ 3019*9ccd446eSAtari911Two-tone appearance 3020*9ccd446eSAtari911``` 3021*9ccd446eSAtari911 3022*9ccd446eSAtari911**After**: 3023*9ccd446eSAtari911``` 3024*9ccd446eSAtari911Admin Page: 3025*9ccd446eSAtari911┌─────────────────────┐ 3026*9ccd446eSAtari911│ ┌─────────────────┐ │ 3027*9ccd446eSAtari911│ │ Section Box │ │ ← White (#fff) 3028*9ccd446eSAtari911│ │ ┌─────────────┐ │ │ 3029*9ccd446eSAtari911│ │ │ Content │ │ │ ← White (#fff) 3030*9ccd446eSAtari911│ │ └─────────────┘ │ │ 3031*9ccd446eSAtari911│ └─────────────────┘ │ 3032*9ccd446eSAtari911└─────────────────────┘ 3033*9ccd446eSAtari911Unified, clean appearance 3034*9ccd446eSAtari911Borders provide separation 3035*9ccd446eSAtari911``` 3036*9ccd446eSAtari911 3037*9ccd446eSAtari911**Dark Template**: 3038*9ccd446eSAtari911```ini 3039*9ccd446eSAtari911__background__ = "#2d2d2d" 3040*9ccd446eSAtari911__background_alt__ = "#3a3a3a" 3041*9ccd446eSAtari911``` 3042*9ccd446eSAtari911 3043*9ccd446eSAtari911**After**: 3044*9ccd446eSAtari911``` 3045*9ccd446eSAtari911Admin Page: 3046*9ccd446eSAtari911┌─────────────────────┐ 3047*9ccd446eSAtari911│ ┌─────────────────┐ │ 3048*9ccd446eSAtari911│ │ Section Box │ │ ← Dark (#2d2d2d) 3049*9ccd446eSAtari911│ │ ┌─────────────┐ │ │ 3050*9ccd446eSAtari911│ │ │ Content │ │ │ ← Dark (#2d2d2d) 3051*9ccd446eSAtari911│ │ └─────────────┘ │ │ 3052*9ccd446eSAtari911│ └─────────────────┘ │ 3053*9ccd446eSAtari911└─────────────────────┘ 3054*9ccd446eSAtari911Unified dark appearance 3055*9ccd446eSAtari911Accent borders provide definition 3056*9ccd446eSAtari911``` 3057*9ccd446eSAtari911 3058*9ccd446eSAtari911### Benefits 3059*9ccd446eSAtari911 3060*9ccd446eSAtari911**Cleaner Look**: 3061*9ccd446eSAtari911- No more alternating gray/white 3062*9ccd446eSAtari911- More professional appearance 3063*9ccd446eSAtari911- Less visual noise 3064*9ccd446eSAtari911- Unified color scheme 3065*9ccd446eSAtari911 3066*9ccd446eSAtari911**Better Consistency**: 3067*9ccd446eSAtari911- Matches modern admin UI patterns 3068*9ccd446eSAtari911- Borders define sections, not colors 3069*9ccd446eSAtari911- Simpler, cleaner design 3070*9ccd446eSAtari911- Easier on the eyes 3071*9ccd446eSAtari911 3072*9ccd446eSAtari911**Template Friendly**: 3073*9ccd446eSAtari911- Works with any background color 3074*9ccd446eSAtari911- Light or dark templates 3075*9ccd446eSAtari911- Custom colors 3076*9ccd446eSAtari911- Always looks cohesive 3077*9ccd446eSAtari911 3078*9ccd446eSAtari911### All Sections Updated 3079*9ccd446eSAtari911 3080*9ccd446eSAtari911✅ Outlook Sync config sections 3081*9ccd446eSAtari911✅ Manage Events sections 3082*9ccd446eSAtari911✅ Update Plugin sections 3083*9ccd446eSAtari911✅ Themes tab sections 3084*9ccd446eSAtari911✅ Week start day section 3085*9ccd446eSAtari911✅ All form sections 3086*9ccd446eSAtari911 3087*9ccd446eSAtari911**Complete unified theming!** 3088*9ccd446eSAtari911 3089*9ccd446eSAtari911## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 3090*9ccd446eSAtari911 3091*9ccd446eSAtari911### Fixed: Syntax Error in Theme Cards 3092*9ccd446eSAtari911- **Fixed:** ParseError on line 4461 (Purple theme card) 3093*9ccd446eSAtari911- **Fixed:** Malformed ternary expressions from sed replacement 3094*9ccd446eSAtari911- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 3095*9ccd446eSAtari911- **Result:** Admin pages work correctly! 3096*9ccd446eSAtari911 3097*9ccd446eSAtari911### What Was Wrong 3098*9ccd446eSAtari911 3099*9ccd446eSAtari911The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 3100*9ccd446eSAtari911 3101*9ccd446eSAtari911**Before (broken)**: 3102*9ccd446eSAtari911```php 3103*9ccd446eSAtari911? '#9b59b6' : ' . $colors['border'] . ') 3104*9ccd446eSAtari911// Extra quote and dot created syntax error 3105*9ccd446eSAtari911``` 3106*9ccd446eSAtari911 3107*9ccd446eSAtari911**After (fixed)**: 3108*9ccd446eSAtari911```php 3109*9ccd446eSAtari911? '#9b59b6' : $colors['border']) 3110*9ccd446eSAtari911// Clean ternary expression 3111*9ccd446eSAtari911``` 3112*9ccd446eSAtari911 3113*9ccd446eSAtari911### All Theme Cards Fixed 3114*9ccd446eSAtari911 3115*9ccd446eSAtari911- ✅ Purple Dream card 3116*9ccd446eSAtari911- ✅ Professional Blue card 3117*9ccd446eSAtari911- ✅ Pink Bling card 3118*9ccd446eSAtari911- ✅ Wiki Default card 3119*9ccd446eSAtari911 3120*9ccd446eSAtari911### Now Working 3121*9ccd446eSAtari911 3122*9ccd446eSAtari911**Theme selection page loads** ✓ 3123*9ccd446eSAtari911**All cards display properly** ✓ 3124*9ccd446eSAtari911**Template colors applied** ✓ 3125*9ccd446eSAtari911**No syntax errors** ✓ 3126*9ccd446eSAtari911 3127*9ccd446eSAtari911## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 3128*9ccd446eSAtari911 3129*9ccd446eSAtari911### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 3130*9ccd446eSAtari911- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 3131*9ccd446eSAtari911- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 3132*9ccd446eSAtari911- **Fixed:** Theme selection cards use template backgrounds 3133*9ccd446eSAtari911- **Fixed:** Week start options use template backgrounds 3134*9ccd446eSAtari911- **Result:** Perfect color mapping throughout admin! 3135*9ccd446eSAtari911 3136*9ccd446eSAtari911### Color Mapping Correction 3137*9ccd446eSAtari911 3138*9ccd446eSAtari911**Before (v5.0.7)**: 3139*9ccd446eSAtari911```php 3140*9ccd446eSAtari911bg: __background_site__ // Wrong - this is outer page bg 3141*9ccd446eSAtari911bg_alt: __background_alt__ 3142*9ccd446eSAtari911``` 3143*9ccd446eSAtari911 3144*9ccd446eSAtari911**After (v5.0.8)**: 3145*9ccd446eSAtari911```php 3146*9ccd446eSAtari911bg: __background__ // Correct - main content bg 3147*9ccd446eSAtari911bg_alt: __background_alt__ 3148*9ccd446eSAtari911``` 3149*9ccd446eSAtari911 3150*9ccd446eSAtari911### Why This Matters 3151*9ccd446eSAtari911 3152*9ccd446eSAtari911**Template color hierarchy**: 3153*9ccd446eSAtari911``` 3154*9ccd446eSAtari911__background_site__ → Outer page/site background 3155*9ccd446eSAtari911__background__ → Main content area (CORRECT for admin) 3156*9ccd446eSAtari911__background_alt__ → Sections/panels 3157*9ccd446eSAtari911__background_neu__ → Highlights 3158*9ccd446eSAtari911``` 3159*9ccd446eSAtari911 3160*9ccd446eSAtari911**Admin should use**: 3161*9ccd446eSAtari911- `__background__` for input fields, content areas 3162*9ccd446eSAtari911- `__background_alt__` for section boxes, panels 3163*9ccd446eSAtari911 3164*9ccd446eSAtari911### Themes Tab Fixed 3165*9ccd446eSAtari911 3166*9ccd446eSAtari911**Removed all hardcoded colors**: 3167*9ccd446eSAtari911```php 3168*9ccd446eSAtari911Before: '#ddd', '#fff', '#dee2e6' 3169*9ccd446eSAtari911After: $colors['border'], $colors['bg'], $colors['border'] 3170*9ccd446eSAtari911``` 3171*9ccd446eSAtari911 3172*9ccd446eSAtari911**Now themed**: 3173*9ccd446eSAtari911- ✅ Week start section background 3174*9ccd446eSAtari911- ✅ Week start option backgrounds 3175*9ccd446eSAtari911- ✅ Theme card backgrounds 3176*9ccd446eSAtari911- ✅ Theme card borders 3177*9ccd446eSAtari911- ✅ All borders throughout 3178*9ccd446eSAtari911 3179*9ccd446eSAtari911### Visual Result 3180*9ccd446eSAtari911 3181*9ccd446eSAtari911**Light Template**: 3182*9ccd446eSAtari911```ini 3183*9ccd446eSAtari911__background__ = "#ffffff" 3184*9ccd446eSAtari911__background_alt__ = "#e8e8e8" 3185*9ccd446eSAtari911``` 3186*9ccd446eSAtari911 3187*9ccd446eSAtari911**Admin Before (v5.0.7)**: 3188*9ccd446eSAtari911``` 3189*9ccd446eSAtari911Input fields: #f5f5f5 (site bg - wrong) 3190*9ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct) 3191*9ccd446eSAtari911``` 3192*9ccd446eSAtari911 3193*9ccd446eSAtari911**Admin After (v5.0.8)**: 3194*9ccd446eSAtari911``` 3195*9ccd446eSAtari911Input fields: #ffffff (content bg - correct!) 3196*9ccd446eSAtari911Sections: #e8e8e8 (alt bg - correct!) 3197*9ccd446eSAtari911``` 3198*9ccd446eSAtari911 3199*9ccd446eSAtari911**Dark Template**: 3200*9ccd446eSAtari911```ini 3201*9ccd446eSAtari911__background__ = "#2d2d2d" 3202*9ccd446eSAtari911__background_alt__ = "#3a3a3a" 3203*9ccd446eSAtari911``` 3204*9ccd446eSAtari911 3205*9ccd446eSAtari911**Admin After (v5.0.8)**: 3206*9ccd446eSAtari911``` 3207*9ccd446eSAtari911Input fields: #2d2d2d (content bg - perfect!) 3208*9ccd446eSAtari911Sections: #3a3a3a (alt bg - perfect!) 3209*9ccd446eSAtari911``` 3210*9ccd446eSAtari911 3211*9ccd446eSAtari911### Complete Themes Tab 3212*9ccd446eSAtari911 3213*9ccd446eSAtari911**Week Start Options**: 3214*9ccd446eSAtari911``` 3215*9ccd446eSAtari911┌─────────────────────────┐ 3216*9ccd446eSAtari911│ Week Start Day │ ← bg_alt 3217*9ccd446eSAtari911│ ┌─────────┬───────────┐ │ 3218*9ccd446eSAtari911│ │ Monday │ Sunday │ │ ← bg (when not selected) 3219*9ccd446eSAtari911│ └─────────┴───────────┘ │ 3220*9ccd446eSAtari911└─────────────────────────┘ 3221*9ccd446eSAtari911``` 3222*9ccd446eSAtari911 3223*9ccd446eSAtari911**Theme Cards**: 3224*9ccd446eSAtari911``` 3225*9ccd446eSAtari911┌─────────────────────────┐ 3226*9ccd446eSAtari911│ Matrix Edition │ ← bg (when not selected) 3227*9ccd446eSAtari911│ Classic green theme │ border (when not selected) 3228*9ccd446eSAtari911└─────────────────────────┘ 3229*9ccd446eSAtari911 3230*9ccd446eSAtari911┌═════════════════════════┐ 3231*9ccd446eSAtari911│ Purple Dream │ ← rgba green tint (when selected) 3232*9ccd446eSAtari911│ Elegant purple theme │ #00cc07 border (when selected) 3233*9ccd446eSAtari911└═════════════════════════┘ 3234*9ccd446eSAtari911``` 3235*9ccd446eSAtari911 3236*9ccd446eSAtari911### Perfect Integration 3237*9ccd446eSAtari911 3238*9ccd446eSAtari911**All admin pages now**: 3239*9ccd446eSAtari911- Content areas: `__background__` ✓ 3240*9ccd446eSAtari911- Section boxes: `__background_alt__` ✓ 3241*9ccd446eSAtari911- Borders: `__border__` ✓ 3242*9ccd446eSAtari911- Text: `__text__` ✓ 3243*9ccd446eSAtari911 3244*9ccd446eSAtari911**Matches wiki perfectly**: 3245*9ccd446eSAtari911- Same white content areas 3246*9ccd446eSAtari911- Same gray section boxes 3247*9ccd446eSAtari911- Same border colors 3248*9ccd446eSAtari911- Same text colors 3249*9ccd446eSAtari911 3250*9ccd446eSAtari911### No More Issues 3251*9ccd446eSAtari911 3252*9ccd446eSAtari911**Fixed**: 3253*9ccd446eSAtari911- ❌ Site background on content areas → ✅ Content background 3254*9ccd446eSAtari911- ❌ Hardcoded white on themes tab → ✅ Template background 3255*9ccd446eSAtari911- ❌ Hardcoded borders (#ddd) → ✅ Template borders 3256*9ccd446eSAtari911 3257*9ccd446eSAtari911**Result**: 3258*9ccd446eSAtari911- Perfect color hierarchy ✓ 3259*9ccd446eSAtari911- Correct background levels ✓ 3260*9ccd446eSAtari911- Complete template integration ✓ 3261*9ccd446eSAtari911 3262*9ccd446eSAtari911## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 3263*9ccd446eSAtari911 3264*9ccd446eSAtari911### Fixed: All Admin Backgrounds Use Template Colors 3265*9ccd446eSAtari911- **Fixed:** All section backgrounds use `__background_alt__` 3266*9ccd446eSAtari911- **Fixed:** All content backgrounds use `__background__` 3267*9ccd446eSAtari911- **Fixed:** All borders use `__border__` 3268*9ccd446eSAtari911- **Fixed:** All text uses `__text__` 3269*9ccd446eSAtari911- **Result:** Complete admin template integration! 3270*9ccd446eSAtari911 3271*9ccd446eSAtari911### All Replacements 3272*9ccd446eSAtari911 3273*9ccd446eSAtari911**Backgrounds**: 3274*9ccd446eSAtari911```php 3275*9ccd446eSAtari911Before: background: #f9f9f9 3276*9ccd446eSAtari911After: background: ' . $colors['bg_alt'] . ' 3277*9ccd446eSAtari911 3278*9ccd446eSAtari911Before: background: #fff / background: white 3279*9ccd446eSAtari911After: background: ' . $colors['bg'] . ' 3280*9ccd446eSAtari911``` 3281*9ccd446eSAtari911 3282*9ccd446eSAtari911**Borders**: 3283*9ccd446eSAtari911```php 3284*9ccd446eSAtari911Before: border: 1px solid #ddd 3285*9ccd446eSAtari911Before: border: 1px solid #e0e0e0 3286*9ccd446eSAtari911Before: border: 1px solid #eee 3287*9ccd446eSAtari911After: border: 1px solid ' . $colors['border'] . ' 3288*9ccd446eSAtari911``` 3289*9ccd446eSAtari911 3290*9ccd446eSAtari911**Text**: 3291*9ccd446eSAtari911```php 3292*9ccd446eSAtari911Before: color: #333 3293*9ccd446eSAtari911Before: color: #666 3294*9ccd446eSAtari911After: color: ' . $colors['text'] . ' 3295*9ccd446eSAtari911``` 3296*9ccd446eSAtari911 3297*9ccd446eSAtari911### Complete Admin Coverage 3298*9ccd446eSAtari911 3299*9ccd446eSAtari911**All tabs now themed**: 3300*9ccd446eSAtari911- ✅ Manage Events tab 3301*9ccd446eSAtari911- ✅ Update Plugin tab 3302*9ccd446eSAtari911- ✅ Outlook Sync tab 3303*9ccd446eSAtari911- ✅ Themes tab 3304*9ccd446eSAtari911- ✅ Tab navigation 3305*9ccd446eSAtari911- ✅ All sections 3306*9ccd446eSAtari911- ✅ All inputs 3307*9ccd446eSAtari911- ✅ All borders 3308*9ccd446eSAtari911- ✅ All text 3309*9ccd446eSAtari911 3310*9ccd446eSAtari911### Visual Result 3311*9ccd446eSAtari911 3312*9ccd446eSAtari911**Light Template**: 3313*9ccd446eSAtari911``` 3314*9ccd446eSAtari911Admin Page: 3315*9ccd446eSAtari911┌──────────────────────────┐ 3316*9ccd446eSAtari911│ Tab Navigation │ ← Template borders 3317*9ccd446eSAtari911├──────────────────────────┤ 3318*9ccd446eSAtari911│ Section Headers │ ← bg_alt (light gray) 3319*9ccd446eSAtari911│ ┌──────────────────────┐ │ 3320*9ccd446eSAtari911│ │ Form Inputs │ │ ← bg (white) 3321*9ccd446eSAtari911│ │ Content Areas │ │ 3322*9ccd446eSAtari911│ └──────────────────────┘ │ 3323*9ccd446eSAtari911└──────────────────────────┘ 3324*9ccd446eSAtari911All template colors! ✓ 3325*9ccd446eSAtari911``` 3326*9ccd446eSAtari911 3327*9ccd446eSAtari911**Dark Template**: 3328*9ccd446eSAtari911``` 3329*9ccd446eSAtari911Admin Page: 3330*9ccd446eSAtari911┌──────────────────────────┐ 3331*9ccd446eSAtari911│ Tab Navigation │ ← Template borders 3332*9ccd446eSAtari911├──────────────────────────┤ 3333*9ccd446eSAtari911│ Section Headers │ ← bg_alt (dark gray) 3334*9ccd446eSAtari911│ ┌──────────────────────┐ │ 3335*9ccd446eSAtari911│ │ Form Inputs │ │ ← bg (darker) 3336*9ccd446eSAtari911│ │ Content Areas │ │ 3337*9ccd446eSAtari911│ └──────────────────────┘ │ 3338*9ccd446eSAtari911└──────────────────────────┘ 3339*9ccd446eSAtari911All template colors! ✓ 3340*9ccd446eSAtari911``` 3341*9ccd446eSAtari911 3342*9ccd446eSAtari911### Template Color Mapping 3343*9ccd446eSAtari911 3344*9ccd446eSAtari911**Used throughout admin**: 3345*9ccd446eSAtari911``` 3346*9ccd446eSAtari911__background_site__ → $colors['bg'] (main backgrounds) 3347*9ccd446eSAtari911__background_alt__ → $colors['bg_alt'] (section backgrounds) 3348*9ccd446eSAtari911__text__ → $colors['text'] (all text) 3349*9ccd446eSAtari911__border__ → $colors['border'] (all borders) 3350*9ccd446eSAtari911__link__ → $colors['link'] (links - future) 3351*9ccd446eSAtari911``` 3352*9ccd446eSAtari911 3353*9ccd446eSAtari911### Examples by Section 3354*9ccd446eSAtari911 3355*9ccd446eSAtari911**Manage Events**: 3356*9ccd446eSAtari911- Event list backgrounds: `bg_alt` 3357*9ccd446eSAtari911- Event item backgrounds: `bg` 3358*9ccd446eSAtari911- Borders: `border` 3359*9ccd446eSAtari911- Text: `text` 3360*9ccd446eSAtari911 3361*9ccd446eSAtari911**Update Plugin**: 3362*9ccd446eSAtari911- Section backgrounds: `bg_alt` 3363*9ccd446eSAtari911- Content areas: `bg` 3364*9ccd446eSAtari911- Borders: `border` 3365*9ccd446eSAtari911- Text: `text` 3366*9ccd446eSAtari911 3367*9ccd446eSAtari911**Outlook Sync**: 3368*9ccd446eSAtari911- Config sections: `bg_alt` 3369*9ccd446eSAtari911- Input fields: `bg` 3370*9ccd446eSAtari911- Borders: `border` 3371*9ccd446eSAtari911- Labels: `text` 3372*9ccd446eSAtari911 3373*9ccd446eSAtari911**Themes Tab**: 3374*9ccd446eSAtari911- Theme cards: `bg_alt` 3375*9ccd446eSAtari911- Preview areas: `bg` 3376*9ccd446eSAtari911- Borders: `border` 3377*9ccd446eSAtari911- Descriptions: `text` 3378*9ccd446eSAtari911 3379*9ccd446eSAtari911### Benefits 3380*9ccd446eSAtari911 3381*9ccd446eSAtari911**Seamless Integration**: 3382*9ccd446eSAtari911- Matches wiki admin area perfectly 3383*9ccd446eSAtari911- Same colors throughout wiki 3384*9ccd446eSAtari911- Professional appearance 3385*9ccd446eSAtari911- Consistent experience 3386*9ccd446eSAtari911 3387*9ccd446eSAtari911**Automatic Adaptation**: 3388*9ccd446eSAtari911- Light templates: Light admin 3389*9ccd446eSAtari911- Dark templates: Dark admin 3390*9ccd446eSAtari911- Custom templates: Uses custom colors 3391*9ccd446eSAtari911 3392*9ccd446eSAtari911**No White Boxes**: 3393*9ccd446eSAtari911- Every background themed 3394*9ccd446eSAtari911- Every border themed 3395*9ccd446eSAtari911- Every text themed 3396*9ccd446eSAtari911- Complete consistency 3397*9ccd446eSAtari911 3398*9ccd446eSAtari911### PERFECT HARMONY 3399*9ccd446eSAtari911 3400*9ccd446eSAtari911**Frontend (Calendar)**: 3401*9ccd446eSAtari911- Wiki theme uses style.ini ✓ 3402*9ccd446eSAtari911- Perfect template match ✓ 3403*9ccd446eSAtari911 3404*9ccd446eSAtari911**Backend (Admin)**: 3405*9ccd446eSAtari911- Reads same style.ini ✓ 3406*9ccd446eSAtari911- Perfect template match ✓ 3407*9ccd446eSAtari911 3408*9ccd446eSAtari911**Complete Unity**: 3409*9ccd446eSAtari911- Same colors everywhere ✓ 3410*9ccd446eSAtari911- Seamless experience ✓ 3411*9ccd446eSAtari911- Professional polish ✓ 3412*9ccd446eSAtari911 3413*9ccd446eSAtari911## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 3414*9ccd446eSAtari911 3415*9ccd446eSAtari911### Enhanced: Month/Year Header & Admin Pages Use Template Colors 3416*9ccd446eSAtari911- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 3417*9ccd446eSAtari911- **Added:** Admin pages read template's style.ini file 3418*9ccd446eSAtari911- **Added:** `getTemplateColors()` function in admin class 3419*9ccd446eSAtari911- **Fixed:** Tab navigation uses template text and border colors 3420*9ccd446eSAtari911- **Result:** Complete template integration everywhere! 3421*9ccd446eSAtari911 3422*9ccd446eSAtari911### Month/Year Header 3423*9ccd446eSAtari911 3424*9ccd446eSAtari911**Before**: 3425*9ccd446eSAtari911```php 3426*9ccd446eSAtari911color: __text__ // Same as primary text 3427*9ccd446eSAtari911``` 3428*9ccd446eSAtari911 3429*9ccd446eSAtari911**After (Wiki Theme)**: 3430*9ccd446eSAtari911```php 3431*9ccd446eSAtari911color: __text_neu__ // Dimmed text (subtle) 3432*9ccd446eSAtari911``` 3433*9ccd446eSAtari911 3434*9ccd446eSAtari911### Admin Pages Enhancement 3435*9ccd446eSAtari911 3436*9ccd446eSAtari911**New `getTemplateColors()` function**: 3437*9ccd446eSAtari911- Reads template's style.ini file 3438*9ccd446eSAtari911- Extracts color replacements 3439*9ccd446eSAtari911- Provides colors to all admin tabs 3440*9ccd446eSAtari911- Falls back to sensible defaults 3441*9ccd446eSAtari911 3442*9ccd446eSAtari911**Colors used**: 3443*9ccd446eSAtari911```php 3444*9ccd446eSAtari911bg: __background_site__ 3445*9ccd446eSAtari911bg_alt: __background_alt__ 3446*9ccd446eSAtari911text: __text__ 3447*9ccd446eSAtari911border: __border__ 3448*9ccd446eSAtari911link: __link__ 3449*9ccd446eSAtari911``` 3450*9ccd446eSAtari911 3451*9ccd446eSAtari911**Applied to**: 3452*9ccd446eSAtari911- Tab navigation borders 3453*9ccd446eSAtari911- Tab text colors 3454*9ccd446eSAtari911- All admin sections 3455*9ccd446eSAtari911- Ready for future enhancements 3456*9ccd446eSAtari911 3457*9ccd446eSAtari911### Visual Result 3458*9ccd446eSAtari911 3459*9ccd446eSAtari911**Calendar Header**: 3460*9ccd446eSAtari911``` 3461*9ccd446eSAtari911┌────────────────────┐ 3462*9ccd446eSAtari911│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 3463*9ccd446eSAtari911└────────────────────┘ 3464*9ccd446eSAtari911Subtle and elegant ✓ 3465*9ccd446eSAtari911``` 3466*9ccd446eSAtari911 3467*9ccd446eSAtari911**Admin Navigation**: 3468*9ccd446eSAtari911``` 3469*9ccd446eSAtari911 Manage Events | Update | ⚙️ Config | Themes 3470*9ccd446eSAtari911───────────────────────────────────────────────── 3471*9ccd446eSAtari911Active tab: Green (#00cc07) 3472*9ccd446eSAtari911Inactive tabs: Template text color 3473*9ccd446eSAtari911Border: Template border color 3474*9ccd446eSAtari911``` 3475*9ccd446eSAtari911 3476*9ccd446eSAtari911### Template Integration 3477*9ccd446eSAtari911 3478*9ccd446eSAtari911**Light Template**: 3479*9ccd446eSAtari911```ini 3480*9ccd446eSAtari911__text_neu__ = "#666666" 3481*9ccd446eSAtari911__border__ = "#cccccc" 3482*9ccd446eSAtari911``` 3483*9ccd446eSAtari911**Result**: 3484*9ccd446eSAtari911- Month/Year: Medium gray (subtle) 3485*9ccd446eSAtari911- Admin borders: Light gray 3486*9ccd446eSAtari911- Tab text: Dark gray 3487*9ccd446eSAtari911 3488*9ccd446eSAtari911**Dark Template**: 3489*9ccd446eSAtari911```ini 3490*9ccd446eSAtari911__text_neu__ = "#999999" 3491*9ccd446eSAtari911__border__ = "#555555" 3492*9ccd446eSAtari911``` 3493*9ccd446eSAtari911**Result**: 3494*9ccd446eSAtari911- Month/Year: Light gray (subtle) 3495*9ccd446eSAtari911- Admin borders: Medium gray 3496*9ccd446eSAtari911- Tab text: Bright gray 3497*9ccd446eSAtari911 3498*9ccd446eSAtari911### Benefits 3499*9ccd446eSAtari911 3500*9ccd446eSAtari911**Calendar Frontend**: 3501*9ccd446eSAtari911- Month/Year header more subtle 3502*9ccd446eSAtari911- Better visual hierarchy 3503*9ccd446eSAtari911- Less prominent, more elegant 3504*9ccd446eSAtari911 3505*9ccd446eSAtari911**Admin Backend**: 3506*9ccd446eSAtari911- Uses template colors 3507*9ccd446eSAtari911- Matches wiki admin area 3508*9ccd446eSAtari911- Consistent experience 3509*9ccd446eSAtari911- Professional appearance 3510*9ccd446eSAtari911 3511*9ccd446eSAtari911### Future-Ready 3512*9ccd446eSAtari911 3513*9ccd446eSAtari911The `getTemplateColors()` function is now available for: 3514*9ccd446eSAtari911- ✅ Tab navigation (implemented) 3515*9ccd446eSAtari911- Section backgrounds (ready) 3516*9ccd446eSAtari911- Button colors (ready) 3517*9ccd446eSAtari911- Input fields (ready) 3518*9ccd446eSAtari911- Success/error messages (ready) 3519*9ccd446eSAtari911 3520*9ccd446eSAtari911**Foundation laid for complete admin theming!** 3521*9ccd446eSAtari911 3522*9ccd446eSAtari911## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 3523*9ccd446eSAtari911 3524*9ccd446eSAtari911### Fixed: Add Event Bar & Section Headers Use Template Colors 3525*9ccd446eSAtari911- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 3526*9ccd446eSAtari911- **Fixed:** "Today" header uses `__text_neu__` 3527*9ccd446eSAtari911- **Fixed:** "Tomorrow" header uses `__text__` 3528*9ccd446eSAtari911- **Fixed:** "Important Events" header uses `__border__` 3529*9ccd446eSAtari911- **Result:** Perfect template color integration! 3530*9ccd446eSAtari911 3531*9ccd446eSAtari911### All Changes 3532*9ccd446eSAtari911 3533*9ccd446eSAtari911**Add Event Bar (Wiki Theme)**: 3534*9ccd446eSAtari911 3535*9ccd446eSAtari911**Before**: 3536*9ccd446eSAtari911```php 3537*9ccd446eSAtari911background: #3498db // Generic blue 3538*9ccd446eSAtari911``` 3539*9ccd446eSAtari911 3540*9ccd446eSAtari911**After**: 3541*9ccd446eSAtari911```php 3542*9ccd446eSAtari911background: __background_alt__ // Template alternate bg 3543*9ccd446eSAtari911text: __text__ // Template text color 3544*9ccd446eSAtari911hover: __background_neu__ // Template neutral bg 3545*9ccd446eSAtari911``` 3546*9ccd446eSAtari911 3547*9ccd446eSAtari911**Section Headers (Wiki Theme)**: 3548*9ccd446eSAtari911 3549*9ccd446eSAtari911**Before**: 3550*9ccd446eSAtari911```php 3551*9ccd446eSAtari911Today: #ff9800 // Orange 3552*9ccd446eSAtari911Tomorrow: #4caf50 // Green 3553*9ccd446eSAtari911Important Events: #9b59b6 // Purple 3554*9ccd446eSAtari911``` 3555*9ccd446eSAtari911 3556*9ccd446eSAtari911**After**: 3557*9ccd446eSAtari911```php 3558*9ccd446eSAtari911Today: __text_neu__ // Template dimmed text 3559*9ccd446eSAtari911Tomorrow: __text__ // Template primary text 3560*9ccd446eSAtari911Important Events: __border__ // Template border color 3561*9ccd446eSAtari911``` 3562*9ccd446eSAtari911 3563*9ccd446eSAtari911### Visual Result 3564*9ccd446eSAtari911 3565*9ccd446eSAtari911**Wiki Default Theme**: 3566*9ccd446eSAtari911``` 3567*9ccd446eSAtari911Add Event Bar: 3568*9ccd446eSAtari911┌────────────────┐ 3569*9ccd446eSAtari911│ + ADD EVENT │ ← Template alt background 3570*9ccd446eSAtari911└────────────────┘ 3571*9ccd446eSAtari911 3572*9ccd446eSAtari911Sections: 3573*9ccd446eSAtari911━━━━━━━━━━━━━━━━ 3574*9ccd446eSAtari911Today ← Dimmed text color (__text_neu__) 3575*9ccd446eSAtari911• Team Meeting 3576*9ccd446eSAtari911 3577*9ccd446eSAtari911Tomorrow ← Primary text color (__text__) 3578*9ccd446eSAtari911• Code Review 3579*9ccd446eSAtari911 3580*9ccd446eSAtari911Important Events ← Border color (__border__) 3581*9ccd446eSAtari911• Project Deadline 3582*9ccd446eSAtari911``` 3583*9ccd446eSAtari911 3584*9ccd446eSAtari911### Example with DokuWiki Default Template 3585*9ccd446eSAtari911 3586*9ccd446eSAtari911**Template colors**: 3587*9ccd446eSAtari911```ini 3588*9ccd446eSAtari911__background_alt__ = "#e8e8e8" 3589*9ccd446eSAtari911__text__ = "#333333" 3590*9ccd446eSAtari911__text_neu__ = "#666666" 3591*9ccd446eSAtari911__border__ = "#cccccc" 3592*9ccd446eSAtari911``` 3593*9ccd446eSAtari911 3594*9ccd446eSAtari911**Calendar result**: 3595*9ccd446eSAtari911``` 3596*9ccd446eSAtari911Add Event Bar: Light gray (#e8e8e8) 3597*9ccd446eSAtari911Today header: Medium gray (#666666) 3598*9ccd446eSAtari911Tomorrow header: Dark gray (#333333) 3599*9ccd446eSAtari911Important Events header: Border gray (#cccccc) 3600*9ccd446eSAtari911``` 3601*9ccd446eSAtari911 3602*9ccd446eSAtari911### Example with Dark Template 3603*9ccd446eSAtari911 3604*9ccd446eSAtari911**Template colors**: 3605*9ccd446eSAtari911```ini 3606*9ccd446eSAtari911__background_alt__ = "#2d2d2d" 3607*9ccd446eSAtari911__text__ = "#e0e0e0" 3608*9ccd446eSAtari911__text_neu__ = "#999999" 3609*9ccd446eSAtari911__border__ = "#555555" 3610*9ccd446eSAtari911``` 3611*9ccd446eSAtari911 3612*9ccd446eSAtari911**Calendar result**: 3613*9ccd446eSAtari911``` 3614*9ccd446eSAtari911Add Event Bar: Dark gray (#2d2d2d) 3615*9ccd446eSAtari911Today header: Light gray (#999999) 3616*9ccd446eSAtari911Tomorrow header: Bright gray (#e0e0e0) 3617*9ccd446eSAtari911Important Events header: Medium gray (#555555) 3618*9ccd446eSAtari911``` 3619*9ccd446eSAtari911 3620*9ccd446eSAtari911### Perfect Harmony 3621*9ccd446eSAtari911 3622*9ccd446eSAtari911All sidebar elements now use template colors: 3623*9ccd446eSAtari911- ✅ Add Event bar background 3624*9ccd446eSAtari911- ✅ Add Event bar text 3625*9ccd446eSAtari911- ✅ Today section header 3626*9ccd446eSAtari911- ✅ Tomorrow section header 3627*9ccd446eSAtari911- ✅ Important Events header 3628*9ccd446eSAtari911- ✅ Calendar cells 3629*9ccd446eSAtari911- ✅ Grid backgrounds 3630*9ccd446eSAtari911- ✅ All borders 3631*9ccd446eSAtari911 3632*9ccd446eSAtari911**Complete template integration!** 3633*9ccd446eSAtari911 3634*9ccd446eSAtari911## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 3635*9ccd446eSAtari911 3636*9ccd446eSAtari911### Fixed: Calendar Cells Use Correct Template Color 3637*9ccd446eSAtari911- **Fixed:** Calendar cells now use `__background__` from template 3638*9ccd446eSAtari911- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 3639*9ccd446eSAtari911- **Result:** Calendar cells match main content area background! 3640*9ccd446eSAtari911 3641*9ccd446eSAtari911### Color Mapping Update 3642*9ccd446eSAtari911 3643*9ccd446eSAtari911**Before (v5.0.3)**: 3644*9ccd446eSAtari911```php 3645*9ccd446eSAtari911cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 3646*9ccd446eSAtari911``` 3647*9ccd446eSAtari911 3648*9ccd446eSAtari911**After (v5.0.4)**: 3649*9ccd446eSAtari911```php 3650*9ccd446eSAtari911cell_bg: __background__ // Correct - main content background 3651*9ccd446eSAtari911``` 3652*9ccd446eSAtari911 3653*9ccd446eSAtari911### Template Color Usage 3654*9ccd446eSAtari911 3655*9ccd446eSAtari911**Wiki Default theme now uses**: 3656*9ccd446eSAtari911``` 3657*9ccd446eSAtari911__background_site__ → Overall page background 3658*9ccd446eSAtari911__background__ → Calendar cells (main content bg) 3659*9ccd446eSAtari911__background_alt__ → Grid background, headers 3660*9ccd446eSAtari911__background_neu__ → Today cell highlight 3661*9ccd446eSAtari911__text__ → Primary text 3662*9ccd446eSAtari911__text_neu__ → Dimmed text 3663*9ccd446eSAtari911__link__ → Links, bright text 3664*9ccd446eSAtari911__border__ → All borders 3665*9ccd446eSAtari911``` 3666*9ccd446eSAtari911 3667*9ccd446eSAtari911### Visual Result 3668*9ccd446eSAtari911 3669*9ccd446eSAtari911**Before**: 3670*9ccd446eSAtari911``` 3671*9ccd446eSAtari911Calendar with template colors: 3672*9ccd446eSAtari911┌─────┬─────┬─────┐ 3673*9ccd446eSAtari911│ Mon │ Tue │ Wed │ 3674*9ccd446eSAtari911├─────┼─────┼─────┤ 3675*9ccd446eSAtari911│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 3676*9ccd446eSAtari911└─────┴─────┴─────┘ 3677*9ccd446eSAtari911``` 3678*9ccd446eSAtari911 3679*9ccd446eSAtari911**After**: 3680*9ccd446eSAtari911``` 3681*9ccd446eSAtari911Calendar with template colors: 3682*9ccd446eSAtari911┌─────┬─────┬─────┐ 3683*9ccd446eSAtari911│ Mon │ Tue │ Wed │ 3684*9ccd446eSAtari911├─────┼─────┼─────┤ 3685*9ccd446eSAtari911│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 3686*9ccd446eSAtari911└─────┴─────┴─────┘ 3687*9ccd446eSAtari911``` 3688*9ccd446eSAtari911 3689*9ccd446eSAtari911### Example Template Colors 3690*9ccd446eSAtari911 3691*9ccd446eSAtari911**DokuWiki Default**: 3692*9ccd446eSAtari911```ini 3693*9ccd446eSAtari911__background__ = "#ffffff" 3694*9ccd446eSAtari911``` 3695*9ccd446eSAtari911**Result**: White calendar cells ✓ 3696*9ccd446eSAtari911 3697*9ccd446eSAtari911**Dark Template**: 3698*9ccd446eSAtari911```ini 3699*9ccd446eSAtari911__background__ = "#2d2d2d" 3700*9ccd446eSAtari911``` 3701*9ccd446eSAtari911**Result**: Dark calendar cells ✓ 3702*9ccd446eSAtari911 3703*9ccd446eSAtari911**Custom Template**: 3704*9ccd446eSAtari911```ini 3705*9ccd446eSAtari911__background__ = "#f9f9f9" 3706*9ccd446eSAtari911``` 3707*9ccd446eSAtari911**Result**: Custom color cells ✓ 3708*9ccd446eSAtari911 3709*9ccd446eSAtari911### Perfect Matching 3710*9ccd446eSAtari911 3711*9ccd446eSAtari911Calendar cells now match: 3712*9ccd446eSAtari911- ✅ Main content area background 3713*9ccd446eSAtari911- ✅ Article/page background 3714*9ccd446eSAtari911- ✅ Content box background 3715*9ccd446eSAtari911- ✅ Same as wiki text background 3716*9ccd446eSAtari911 3717*9ccd446eSAtari911**Seamless integration!** 3718*9ccd446eSAtari911 3719*9ccd446eSAtari911## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 3720*9ccd446eSAtari911 3721*9ccd446eSAtari911### Enhanced: Wiki Default Theme Reads Template Colors 3722*9ccd446eSAtari911- **Added:** Function to read colors from DokuWiki template's style.ini file 3723*9ccd446eSAtari911- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 3724*9ccd446eSAtari911- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 3725*9ccd446eSAtari911- **Uses:** Actual template colors instead of CSS variables 3726*9ccd446eSAtari911- **Result:** Perfect color matching with any DokuWiki template! 3727*9ccd446eSAtari911 3728*9ccd446eSAtari911### How It Works 3729*9ccd446eSAtari911 3730*9ccd446eSAtari911**New Function: `getWikiTemplateColors()`** 3731*9ccd446eSAtari911 3732*9ccd446eSAtari9111. **Detects** current DokuWiki template name 3733*9ccd446eSAtari9112. **Reads** the template's `style.ini` file 3734*9ccd446eSAtari9113. **Parses** color replacements section 3735*9ccd446eSAtari9114. **Maps** template colors to calendar theme 3736*9ccd446eSAtari9115. **Falls back** to CSS variables if file not found 3737*9ccd446eSAtari911 3738*9ccd446eSAtari911### Colors Read from style.ini 3739*9ccd446eSAtari911 3740*9ccd446eSAtari911**Template color replacements used**: 3741*9ccd446eSAtari911```php 3742*9ccd446eSAtari911__background_site__ → bg, header_bg 3743*9ccd446eSAtari911__background_alt__ → grid_bg, cell_today_bg 3744*9ccd446eSAtari911__background_neu__ → cell_bg 3745*9ccd446eSAtari911__text__ → text_primary 3746*9ccd446eSAtari911__text_neu__ → text_dim 3747*9ccd446eSAtari911__link__ → text_bright 3748*9ccd446eSAtari911__border__ → border, grid_border 3749*9ccd446eSAtari911``` 3750*9ccd446eSAtari911 3751*9ccd446eSAtari911### Example style.ini Mapping 3752*9ccd446eSAtari911 3753*9ccd446eSAtari911**Template style.ini**: 3754*9ccd446eSAtari911```ini 3755*9ccd446eSAtari911[replacements] 3756*9ccd446eSAtari911__background_site__ = "#f8f9fa" 3757*9ccd446eSAtari911__background_alt__ = "#e9ecef" 3758*9ccd446eSAtari911__background_neu__ = "#dee2e6" 3759*9ccd446eSAtari911__text__ = "#212529" 3760*9ccd446eSAtari911__text_neu__ = "#6c757d" 3761*9ccd446eSAtari911__link__ = "#0d6efd" 3762*9ccd446eSAtari911__border__ = "#ced4da" 3763*9ccd446eSAtari911``` 3764*9ccd446eSAtari911 3765*9ccd446eSAtari911**Calendar theme result**: 3766*9ccd446eSAtari911```php 3767*9ccd446eSAtari911bg: #f8f9fa 3768*9ccd446eSAtari911header_bg: #e9ecef 3769*9ccd446eSAtari911grid_bg: #e9ecef 3770*9ccd446eSAtari911cell_bg: #dee2e6 3771*9ccd446eSAtari911text_primary: #212529 3772*9ccd446eSAtari911text_dim: #6c757d 3773*9ccd446eSAtari911text_bright: #0d6efd 3774*9ccd446eSAtari911border: #ced4da 3775*9ccd446eSAtari911grid_border: #ced4da 3776*9ccd446eSAtari911``` 3777*9ccd446eSAtari911 3778*9ccd446eSAtari911### Before vs After 3779*9ccd446eSAtari911 3780*9ccd446eSAtari911**Before (v5.0.2)**: 3781*9ccd446eSAtari911``` 3782*9ccd446eSAtari911Wiki Default theme used: 3783*9ccd446eSAtari911- CSS variables (var(--__background__, #fff)) 3784*9ccd446eSAtari911- Required browser CSS variable support 3785*9ccd446eSAtari911- Fallback to generic colors 3786*9ccd446eSAtari911``` 3787*9ccd446eSAtari911 3788*9ccd446eSAtari911**After (v5.0.3)**: 3789*9ccd446eSAtari911``` 3790*9ccd446eSAtari911Wiki Default theme uses: 3791*9ccd446eSAtari911- Actual colors from template's style.ini 3792*9ccd446eSAtari911- Exact template color values 3793*9ccd446eSAtari911- No CSS variable dependency 3794*9ccd446eSAtari911- Perfect color matching! 3795*9ccd446eSAtari911``` 3796*9ccd446eSAtari911 3797*9ccd446eSAtari911### File Location Priority 3798*9ccd446eSAtari911 3799*9ccd446eSAtari911Checks in order: 3800*9ccd446eSAtari9111. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 3801*9ccd446eSAtari9112. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 3802*9ccd446eSAtari9113. Falls back to CSS variables if neither found 3803*9ccd446eSAtari911 3804*9ccd446eSAtari911### Benefits 3805*9ccd446eSAtari911 3806*9ccd446eSAtari911**More accurate colors**: 3807*9ccd446eSAtari911- Uses exact template color values ✓ 3808*9ccd446eSAtari911- No CSS variable interpolation ✓ 3809*9ccd446eSAtari911- Consistent across all browsers ✓ 3810*9ccd446eSAtari911 3811*9ccd446eSAtari911**Better compatibility**: 3812*9ccd446eSAtari911- Works with older browsers ✓ 3813*9ccd446eSAtari911- No CSS variable support needed ✓ 3814*9ccd446eSAtari911- Direct color values ✓ 3815*9ccd446eSAtari911 3816*9ccd446eSAtari911**Perfect matching**: 3817*9ccd446eSAtari911- Reads template's actual colors ✓ 3818*9ccd446eSAtari911- Same colors as wiki pages ✓ 3819*9ccd446eSAtari911- Seamless integration ✓ 3820*9ccd446eSAtari911 3821*9ccd446eSAtari911### Template Examples 3822*9ccd446eSAtari911 3823*9ccd446eSAtari911**DokuWiki Default Template**: 3824*9ccd446eSAtari911``` 3825*9ccd446eSAtari911Reads: lib/tpl/dokuwiki/style.ini 3826*9ccd446eSAtari911Gets: Default DokuWiki colors 3827*9ccd446eSAtari911Result: Perfect classic DokuWiki look 3828*9ccd446eSAtari911``` 3829*9ccd446eSAtari911 3830*9ccd446eSAtari911**Bootstrap Template**: 3831*9ccd446eSAtari911``` 3832*9ccd446eSAtari911Reads: lib/tpl/bootstrap3/style.ini 3833*9ccd446eSAtari911Gets: Bootstrap color scheme 3834*9ccd446eSAtari911Result: Perfect Bootstrap integration 3835*9ccd446eSAtari911``` 3836*9ccd446eSAtari911 3837*9ccd446eSAtari911**Custom Template**: 3838*9ccd446eSAtari911``` 3839*9ccd446eSAtari911Reads: conf/tpl/mycustom/style.ini 3840*9ccd446eSAtari911Gets: Your custom colors 3841*9ccd446eSAtari911Result: Perfect custom theme match 3842*9ccd446eSAtari911``` 3843*9ccd446eSAtari911 3844*9ccd446eSAtari911### Fallback Chain 3845*9ccd446eSAtari911 3846*9ccd446eSAtari9111. **Try** reading style.ini from template 3847*9ccd446eSAtari9112. **If found** → Use exact colors from file 3848*9ccd446eSAtari9113. **If not found** → Use CSS variables 3849*9ccd446eSAtari9114. **If no CSS vars** → Use fallback colors 3850*9ccd446eSAtari911 3851*9ccd446eSAtari911**Always works, always matches!** ✓ 3852*9ccd446eSAtari911 3853*9ccd446eSAtari911## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 3854*9ccd446eSAtari911 3855*9ccd446eSAtari911### Fixed: Wiki Default Theme Day Panel Colors 3856*9ccd446eSAtari911- **Fixed:** Day popup panel now uses DokuWiki CSS variables 3857*9ccd446eSAtari911- **Fixed:** Panel background matches wiki theme 3858*9ccd446eSAtari911- **Fixed:** Panel header matches wiki theme 3859*9ccd446eSAtari911- **Fixed:** Border colors use wiki theme 3860*9ccd446eSAtari911- **Fixed:** Text colors use wiki theme 3861*9ccd446eSAtari911- **Result:** Perfect integration with DokuWiki templates! 3862*9ccd446eSAtari911 3863*9ccd446eSAtari911### All Changes 3864*9ccd446eSAtari911 3865*9ccd446eSAtari911**Day Panel Colors (Wiki Default)**: 3866*9ccd446eSAtari911 3867*9ccd446eSAtari911**Before**: 3868*9ccd446eSAtari911```php 3869*9ccd446eSAtari911background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 3870*9ccd446eSAtari911header: #3498db // Blue (wrong!) 3871*9ccd446eSAtari911``` 3872*9ccd446eSAtari911 3873*9ccd446eSAtari911**After**: 3874*9ccd446eSAtari911```php 3875*9ccd446eSAtari911background: var(--__background__, #fff) 3876*9ccd446eSAtari911header: var(--__background_alt__, #e8e8e8) 3877*9ccd446eSAtari911header_text: var(--__text__, #333) 3878*9ccd446eSAtari911border: var(--__border__, #ccc) 3879*9ccd446eSAtari911shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 3880*9ccd446eSAtari911``` 3881*9ccd446eSAtari911 3882*9ccd446eSAtari911**Event Colors (Wiki Default)**: 3883*9ccd446eSAtari911```php 3884*9ccd446eSAtari911event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 3885*9ccd446eSAtari911border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 3886*9ccd446eSAtari911bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 3887*9ccd446eSAtari911``` 3888*9ccd446eSAtari911 3889*9ccd446eSAtari911### Before vs After 3890*9ccd446eSAtari911 3891*9ccd446eSAtari911**Before (v5.0.1)**: 3892*9ccd446eSAtari911``` 3893*9ccd446eSAtari911Wiki Default - Click Week Cell: 3894*9ccd446eSAtari911┌────────────────┐ 3895*9ccd446eSAtari911│ Monday, Feb 8 │ ← Blue header (wrong) 3896*9ccd446eSAtari911├────────────────┤ 3897*9ccd446eSAtari911│ Team Meeting │ ← Dark gray bg (wrong) 3898*9ccd446eSAtari911│ 2:00 PM │ 3899*9ccd446eSAtari911└────────────────┘ 3900*9ccd446eSAtari911Doesn't match wiki theme 3901*9ccd446eSAtari911``` 3902*9ccd446eSAtari911 3903*9ccd446eSAtari911**After (v5.0.2)**: 3904*9ccd446eSAtari911``` 3905*9ccd446eSAtari911Wiki Default - Click Week Cell: 3906*9ccd446eSAtari911 3907*9ccd446eSAtari911Light Wiki Theme: 3908*9ccd446eSAtari911┌────────────────┐ 3909*9ccd446eSAtari911│ Monday, Feb 8 │ ← Light gray header ✓ 3910*9ccd446eSAtari911├────────────────┤ 3911*9ccd446eSAtari911│ Team Meeting │ ← White bg ✓ 3912*9ccd446eSAtari911│ 2:00 PM │ Dark text ✓ 3913*9ccd446eSAtari911└────────────────┘ 3914*9ccd446eSAtari911 3915*9ccd446eSAtari911Dark Wiki Theme: 3916*9ccd446eSAtari911┌────────────────┐ 3917*9ccd446eSAtari911│ Monday, Feb 8 │ ← Dark header ✓ 3918*9ccd446eSAtari911├────────────────┤ 3919*9ccd446eSAtari911│ Team Meeting │ ← Dark bg ✓ 3920*9ccd446eSAtari911│ 2:00 PM │ Light text ✓ 3921*9ccd446eSAtari911└────────────────┘ 3922*9ccd446eSAtari911 3923*9ccd446eSAtari911Perfectly matches wiki! 3924*9ccd446eSAtari911``` 3925*9ccd446eSAtari911 3926*9ccd446eSAtari911### CSS Variables Used 3927*9ccd446eSAtari911 3928*9ccd446eSAtari911**Wiki Default theme now uses**: 3929*9ccd446eSAtari911- `--__background__` - Main background (panel body) 3930*9ccd446eSAtari911- `--__background_alt__` - Alternate bg (panel header, events) 3931*9ccd446eSAtari911- `--__text__` - Text color (header text) 3932*9ccd446eSAtari911- `--__border__` - Border color (panel border, event borders) 3933*9ccd446eSAtari911 3934*9ccd446eSAtari911**With fallbacks**: 3935*9ccd446eSAtari911```css 3936*9ccd446eSAtari911var(--__background__, #fff) /* white fallback */ 3937*9ccd446eSAtari911var(--__background_alt__, #e8e8e8) /* light gray fallback */ 3938*9ccd446eSAtari911var(--__text__, #333) /* dark text fallback */ 3939*9ccd446eSAtari911var(--__border__, #ccc) /* gray border fallback */ 3940*9ccd446eSAtari911``` 3941*9ccd446eSAtari911 3942*9ccd446eSAtari911### Perfect Adaptation 3943*9ccd446eSAtari911 3944*9ccd446eSAtari911**Light Templates**: 3945*9ccd446eSAtari911- Light panel backgrounds ✓ 3946*9ccd446eSAtari911- Dark text ✓ 3947*9ccd446eSAtari911- Subtle borders ✓ 3948*9ccd446eSAtari911- Clean appearance ✓ 3949*9ccd446eSAtari911 3950*9ccd446eSAtari911**Dark Templates**: 3951*9ccd446eSAtari911- Dark panel backgrounds ✓ 3952*9ccd446eSAtari911- Light text ✓ 3953*9ccd446eSAtari911- Visible borders ✓ 3954*9ccd446eSAtari911- Perfect contrast ✓ 3955*9ccd446eSAtari911 3956*9ccd446eSAtari911**Custom Templates**: 3957*9ccd446eSAtari911- Uses template's CSS variables ✓ 3958*9ccd446eSAtari911- Automatic adaptation ✓ 3959*9ccd446eSAtari911- Seamless integration ✓ 3960*9ccd446eSAtari911 3961*9ccd446eSAtari911### Now Truly Adaptive 3962*9ccd446eSAtari911 3963*9ccd446eSAtari911Wiki Default theme now properly uses DokuWiki CSS variables for: 3964*9ccd446eSAtari911- ✅ Calendar grid 3965*9ccd446eSAtari911- ✅ Sidebar widget 3966*9ccd446eSAtari911- ✅ Event list 3967*9ccd446eSAtari911- ✅ **Day panel** ← v5.0.2! 3968*9ccd446eSAtari911- ✅ All backgrounds 3969*9ccd446eSAtari911- ✅ All text 3970*9ccd446eSAtari911- ✅ All borders 3971*9ccd446eSAtari911 3972*9ccd446eSAtari911**Complete wiki integration!** 3973*9ccd446eSAtari911 3974*9ccd446eSAtari911## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 3975*9ccd446eSAtari911 3976*9ccd446eSAtari911### Enhanced: Time Conflict Tooltips Now Themed 3977*9ccd446eSAtari911- **Fixed:** Conflict tooltips now match calendar theme 3978*9ccd446eSAtari911- **Added:** Theme-aware background, border, text colors 3979*9ccd446eSAtari911- **Added:** Theme-aware shadow effects 3980*9ccd446eSAtari911- **Result:** Complete visual consistency! 3981*9ccd446eSAtari911 3982*9ccd446eSAtari911### Tooltip Theming 3983*9ccd446eSAtari911 3984*9ccd446eSAtari911**Now uses theme colors for**: 3985*9ccd446eSAtari911- Background: Theme background color 3986*9ccd446eSAtari911- Border: Theme border color 3987*9ccd446eSAtari911- Header text: Theme primary text color 3988*9ccd446eSAtari911- Item text: Theme dim text color 3989*9ccd446eSAtari911- Shadow: Theme shadow color 3990*9ccd446eSAtari911 3991*9ccd446eSAtari911### Before vs After 3992*9ccd446eSAtari911 3993*9ccd446eSAtari911**Before (v5.0.0)**: 3994*9ccd446eSAtari911``` 3995*9ccd446eSAtari911Hover ⚠️ badge: 3996*9ccd446eSAtari911┌─────────────────┐ 3997*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Default colors 3998*9ccd446eSAtari911│ • Event A │ 3999*9ccd446eSAtari911│ • Event B │ 4000*9ccd446eSAtari911└─────────────────┘ 4001*9ccd446eSAtari911``` 4002*9ccd446eSAtari911 4003*9ccd446eSAtari911**After (v5.0.1)**: 4004*9ccd446eSAtari911``` 4005*9ccd446eSAtari911Matrix Theme: 4006*9ccd446eSAtari911┌─────────────────┐ 4007*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Green header 4008*9ccd446eSAtari911│ • Event A │ ← Green text 4009*9ccd446eSAtari911│ • Event B │ Dark green bg 4010*9ccd446eSAtari911└─────────────────┘ 4011*9ccd446eSAtari911 4012*9ccd446eSAtari911Purple Theme: 4013*9ccd446eSAtari911┌─────────────────┐ 4014*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Purple header 4015*9ccd446eSAtari911│ • Event A │ ← Purple text 4016*9ccd446eSAtari911│ • Event B │ Dark purple bg 4017*9ccd446eSAtari911└─────────────────┘ 4018*9ccd446eSAtari911 4019*9ccd446eSAtari911Professional Theme: 4020*9ccd446eSAtari911┌─────────────────┐ 4021*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Blue header 4022*9ccd446eSAtari911│ • Event A │ ← Dark text 4023*9ccd446eSAtari911│ • Event B │ Light bg 4024*9ccd446eSAtari911└─────────────────┘ 4025*9ccd446eSAtari911 4026*9ccd446eSAtari911Pink Theme: 4027*9ccd446eSAtari911┌─────────────────┐ 4028*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Pink header ✨ 4029*9ccd446eSAtari911│ • Event A │ ← Pink text 4030*9ccd446eSAtari911│ • Event B │ Dark pink bg 4031*9ccd446eSAtari911└─────────────────┘ 4032*9ccd446eSAtari911 4033*9ccd446eSAtari911Wiki Default: 4034*9ccd446eSAtari911┌─────────────────┐ 4035*9ccd446eSAtari911│ ⚠️ Time Conflicts│ ← Adapts to wiki 4036*9ccd446eSAtari911│ • Event A │ ← Wiki colors 4037*9ccd446eSAtari911│ • Event B │ 4038*9ccd446eSAtari911└─────────────────┘ 4039*9ccd446eSAtari911``` 4040*9ccd446eSAtari911 4041*9ccd446eSAtari911### Now 100% Complete 4042*9ccd446eSAtari911 4043*9ccd446eSAtari911**Every tooltip themed**: 4044*9ccd446eSAtari911- ✅ Conflict tooltips 4045*9ccd446eSAtari911- ✅ All other tooltips (if any) 4046*9ccd446eSAtari911- ✅ Perfect consistency 4047*9ccd446eSAtari911 4048*9ccd446eSAtari911**Absolute perfection!** ✨ 4049*9ccd446eSAtari911 4050*9ccd446eSAtari911## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 4051*9ccd446eSAtari911 4052*9ccd446eSAtari911### Major Milestone: Version 5.0 4053*9ccd446eSAtari911 4054*9ccd446eSAtari911This 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. 4055*9ccd446eSAtari911 4056*9ccd446eSAtari911### Complete Feature Set 4057*9ccd446eSAtari911 4058*9ccd446eSAtari911**5 Beautiful Themes**: 4059*9ccd446eSAtari911- Matrix Edition (Green with glow) 4060*9ccd446eSAtari911- Purple Dream (Elegant purple) 4061*9ccd446eSAtari911- Professional Blue (Clean and modern) 4062*9ccd446eSAtari911- Pink Bling (Maximum sparkle) 4063*9ccd446eSAtari911- Wiki Default (Auto-adapts to your DokuWiki theme) 4064*9ccd446eSAtari911 4065*9ccd446eSAtari911**100% Theme Coverage**: 4066*9ccd446eSAtari911- ✅ Calendar grid and cells 4067*9ccd446eSAtari911- ✅ Event boxes and borders 4068*9ccd446eSAtari911- ✅ Sidebar widget 4069*9ccd446eSAtari911- ✅ Event list panel 4070*9ccd446eSAtari911- ✅ Search functionality 4071*9ccd446eSAtari911- ✅ Edit/Add dialogs (complete) 4072*9ccd446eSAtari911- ✅ Day popup dialogs 4073*9ccd446eSAtari911- ✅ Month picker 4074*9ccd446eSAtari911- ✅ All text (primary, dim, bright) 4075*9ccd446eSAtari911- ✅ All buttons 4076*9ccd446eSAtari911- ✅ All inputs and forms 4077*9ccd446eSAtari911- ✅ All checkboxes 4078*9ccd446eSAtari911- ✅ All borders 4079*9ccd446eSAtari911- ✅ All badges and labels 4080*9ccd446eSAtari911- ✅ Event highlight effects 4081*9ccd446eSAtari911 4082*9ccd446eSAtari911**Perfect Visual Consistency**: 4083*9ccd446eSAtari911- No white pixels anywhere 4084*9ccd446eSAtari911- No unthemed elements 4085*9ccd446eSAtari911- No default colors 4086*9ccd446eSAtari911- Complete visual unity 4087*9ccd446eSAtari911 4088*9ccd446eSAtari911### Major Improvements in v5.0 4089*9ccd446eSAtari911 4090*9ccd446eSAtari9111. **Complete Dialog Theming** (v4.8.5-4.8.7) 4091*9ccd446eSAtari911 - Edit event dialog fully themed 4092*9ccd446eSAtari911 - Day popup dialog fully themed 4093*9ccd446eSAtari911 - All form inputs themed 4094*9ccd446eSAtari911 - All checkboxes themed 4095*9ccd446eSAtari911 - All buttons themed 4096*9ccd446eSAtari911 4097*9ccd446eSAtari9112. **Event Box Border Perfection** (v4.8.6) 4098*9ccd446eSAtari911 - All 4 borders themed (top, right, bottom, left) 4099*9ccd446eSAtari911 - Sidebar event dividers themed 4100*9ccd446eSAtari911 - Past Events toggle border themed 4101*9ccd446eSAtari911 4102*9ccd446eSAtari9113. **Checkbox Field Borders** (v4.9.0) 4103*9ccd446eSAtari911 - Repeating Event section border themed 4104*9ccd446eSAtari911 - Task checkbox section border themed 4105*9ccd446eSAtari911 4106*9ccd446eSAtari9114. **Wiki Default Theme** (v4.10.0) 4107*9ccd446eSAtari911 - New 5th theme 4108*9ccd446eSAtari911 - Uses DokuWiki CSS variables 4109*9ccd446eSAtari911 - Auto-adapts to any wiki template 4110*9ccd446eSAtari911 - Perfect for seamless integration 4111*9ccd446eSAtari911 4112*9ccd446eSAtari9115. **Clean Text Appearance** (v4.11.0) 4113*9ccd446eSAtari911 - Removed text glow from Matrix 4114*9ccd446eSAtari911 - Removed text glow from Purple 4115*9ccd446eSAtari911 - Removed text glow from Professional 4116*9ccd446eSAtari911 - Removed text glow from Wiki Default 4117*9ccd446eSAtari911 - Kept text glow on Pink Bling only 4118*9ccd446eSAtari911 4119*9ccd446eSAtari9116. **Event Highlight Effects** (v4.12.0-4.12.1) 4120*9ccd446eSAtari911 - Theme-aware highlight glow 4121*9ccd446eSAtari911 - Click event bar → event glows 4122*9ccd446eSAtari911 - 3-second themed glow effect 4123*9ccd446eSAtari911 - Smooth animations 4124*9ccd446eSAtari911 4125*9ccd446eSAtari911### See RELEASE_NOTES.md for Complete Details 4126*9ccd446eSAtari911 4127*9ccd446eSAtari911For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 4128*9ccd446eSAtari911 4129*9ccd446eSAtari911## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 4130*9ccd446eSAtari911 4131*9ccd446eSAtari911### Fixed: Event Highlight Now Working 4132*9ccd446eSAtari911- **Fixed:** Used setProperty() to properly apply !important styles 4133*9ccd446eSAtari911- **Added:** Console logging for debugging 4134*9ccd446eSAtari911- **Fixed:** Proper style application with important flag 4135*9ccd446eSAtari911- **Result:** Highlight glow now works correctly! 4136*9ccd446eSAtari911 4137*9ccd446eSAtari911### Technical Fix 4138*9ccd446eSAtari911 4139*9ccd446eSAtari911**Before (not working)**: 4140*9ccd446eSAtari911```javascript 4141*9ccd446eSAtari911eventItem.style.background = color + ' !important'; // Doesn't work 4142*9ccd446eSAtari911``` 4143*9ccd446eSAtari911 4144*9ccd446eSAtari911**After (working)**: 4145*9ccd446eSAtari911```javascript 4146*9ccd446eSAtari911eventItem.style.setProperty('background', color, 'important'); // Works! 4147*9ccd446eSAtari911``` 4148*9ccd446eSAtari911 4149*9ccd446eSAtari911### Added Debug Logging 4150*9ccd446eSAtari911 4151*9ccd446eSAtari911Console now shows: 4152*9ccd446eSAtari911- "Highlighting event: [calId] [eventId] [date]" 4153*9ccd446eSAtari911- "Found event item: [element]" 4154*9ccd446eSAtari911- "Theme: [theme name]" 4155*9ccd446eSAtari911- "Highlight colors: [bg] [shadow]" 4156*9ccd446eSAtari911- "Applied highlight styles" 4157*9ccd446eSAtari911- "Removing highlight" (after 3 seconds) 4158*9ccd446eSAtari911 4159*9ccd446eSAtari911### Now Working 4160*9ccd446eSAtari911 4161*9ccd446eSAtari911Click any event bar → Event glows with theme colors ✓ 4162*9ccd446eSAtari911 4163*9ccd446eSAtari911## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 4164*9ccd446eSAtari911 4165*9ccd446eSAtari911### ✨ Enhanced: Event Click Highlight Now Theme-Aware 4166*9ccd446eSAtari911- **Fixed:** Restored event highlight glow when clicking calendar bars 4167*9ccd446eSAtari911- **Improved:** Highlight now matches each theme's colors 4168*9ccd446eSAtari911- **Added:** Stronger glow effect for better visibility 4169*9ccd446eSAtari911- **Duration:** 3 seconds with smooth fade 4170*9ccd446eSAtari911- **Result:** Beautiful themed highlights for all themes! 4171*9ccd446eSAtari911 4172*9ccd446eSAtari911### How It Works 4173*9ccd446eSAtari911 4174*9ccd446eSAtari911When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 4175*9ccd446eSAtari911 4176*9ccd446eSAtari911**Matrix Theme**: 4177*9ccd446eSAtari911```javascript 4178*9ccd446eSAtari911Background: Darker green (#1a3d1a) 4179*9ccd446eSAtari911Glow: Double green glow (0 0 20px + 0 0 40px) 4180*9ccd446eSAtari911Color: rgba(0, 204, 7, 0.8) 4181*9ccd446eSAtari911``` 4182*9ccd446eSAtari911 4183*9ccd446eSAtari911**Purple Theme**: 4184*9ccd446eSAtari911```javascript 4185*9ccd446eSAtari911Background: Darker purple (#3d2b4d) 4186*9ccd446eSAtari911Glow: Double purple glow 4187*9ccd446eSAtari911Color: rgba(155, 89, 182, 0.8) 4188*9ccd446eSAtari911``` 4189*9ccd446eSAtari911 4190*9ccd446eSAtari911**Professional Theme**: 4191*9ccd446eSAtari911```javascript 4192*9ccd446eSAtari911Background: Light blue (#e3f2fd) 4193*9ccd446eSAtari911Glow: Single blue glow 4194*9ccd446eSAtari911Color: rgba(74, 144, 226, 0.4) 4195*9ccd446eSAtari911``` 4196*9ccd446eSAtari911 4197*9ccd446eSAtari911**Pink Theme**: 4198*9ccd446eSAtari911```javascript 4199*9ccd446eSAtari911Background: Darker pink (#3d2030) 4200*9ccd446eSAtari911Glow: Double pink glow ✨ 4201*9ccd446eSAtari911Color: rgba(255, 20, 147, 0.8) 4202*9ccd446eSAtari911``` 4203*9ccd446eSAtari911 4204*9ccd446eSAtari911**Wiki Theme**: 4205*9ccd446eSAtari911```javascript 4206*9ccd446eSAtari911Background: var(--__background_neu__) 4207*9ccd446eSAtari911Glow: Blue glow (adapts to wiki) 4208*9ccd446eSAtari911Color: rgba(43, 115, 183, 0.4) 4209*9ccd446eSAtari911``` 4210*9ccd446eSAtari911 4211*9ccd446eSAtari911### Visual Examples 4212*9ccd446eSAtari911 4213*9ccd446eSAtari911**Matrix - Click Event**: 4214*9ccd446eSAtari911``` 4215*9ccd446eSAtari911Calendar: 4216*9ccd446eSAtari911┌─────────────┐ 4217*9ccd446eSAtari911│ 2:00 PM │ ← Click this bar 4218*9ccd446eSAtari911└─────────────┘ 4219*9ccd446eSAtari911 4220*9ccd446eSAtari911Event List: 4221*9ccd446eSAtari911╔═════════════════════╗ 4222*9ccd446eSAtari911║ Team Meeting ║ ← GLOWS GREEN 4223*9ccd446eSAtari911║ 2:00 PM ║ for 3 seconds 4224*9ccd446eSAtari911╚═════════════════════╝ 4225*9ccd446eSAtari911 ↑↑↑ Strong green glow ↑↑↑ 4226*9ccd446eSAtari911``` 4227*9ccd446eSAtari911 4228*9ccd446eSAtari911**Purple - Click Event**: 4229*9ccd446eSAtari911``` 4230*9ccd446eSAtari911Calendar: 4231*9ccd446eSAtari911┌─────────────┐ 4232*9ccd446eSAtari911│ 4:00 PM │ ← Click 4233*9ccd446eSAtari911└─────────────┘ 4234*9ccd446eSAtari911 4235*9ccd446eSAtari911Event List: 4236*9ccd446eSAtari911╔═════════════════════╗ 4237*9ccd446eSAtari911║ Code Review ║ ← GLOWS PURPLE 4238*9ccd446eSAtari911║ 4:00 PM ║ for 3 seconds 4239*9ccd446eSAtari911╚═════════════════════╝ 4240*9ccd446eSAtari911 ↑↑↑ Strong purple glow ↑↑↑ 4241*9ccd446eSAtari911``` 4242*9ccd446eSAtari911 4243*9ccd446eSAtari911**Pink - Click Event**: 4244*9ccd446eSAtari911``` 4245*9ccd446eSAtari911Calendar: 4246*9ccd446eSAtari911┌─────────────┐ 4247*9ccd446eSAtari911│ 1:00 PM │ ← Click 4248*9ccd446eSAtari911└─────────────┘ 4249*9ccd446eSAtari911 4250*9ccd446eSAtari911Event List: 4251*9ccd446eSAtari911╔═════════════════════╗ 4252*9ccd446eSAtari911║ Lunch Date ║ ← GLOWS PINK 4253*9ccd446eSAtari911║ 1:00 PM ✨ ║ for 3 seconds 4254*9ccd446eSAtari911╚═════════════════════╝ 4255*9ccd446eSAtari911 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 4256*9ccd446eSAtari911``` 4257*9ccd446eSAtari911 4258*9ccd446eSAtari911### Glow Specifications 4259*9ccd446eSAtari911 4260*9ccd446eSAtari911**Matrix**: 4261*9ccd446eSAtari911- Background: Dark green 4262*9ccd446eSAtari911- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 4263*9ccd446eSAtari911- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 4264*9ccd446eSAtari911- Effect: Strong green pulse 4265*9ccd446eSAtari911 4266*9ccd446eSAtari911**Purple**: 4267*9ccd446eSAtari911- Background: Dark purple 4268*9ccd446eSAtari911- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 4269*9ccd446eSAtari911- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 4270*9ccd446eSAtari911- Effect: Strong purple pulse 4271*9ccd446eSAtari911 4272*9ccd446eSAtari911**Professional**: 4273*9ccd446eSAtari911- Background: Light blue 4274*9ccd446eSAtari911- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 4275*9ccd446eSAtari911- Effect: Subtle blue glow 4276*9ccd446eSAtari911 4277*9ccd446eSAtari911**Pink**: 4278*9ccd446eSAtari911- Background: Dark pink 4279*9ccd446eSAtari911- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 4280*9ccd446eSAtari911- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 4281*9ccd446eSAtari911- Effect: MAXIMUM SPARKLE ✨ 4282*9ccd446eSAtari911 4283*9ccd446eSAtari911**Wiki**: 4284*9ccd446eSAtari911- Background: Theme neutral color 4285*9ccd446eSAtari911- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 4286*9ccd446eSAtari911- Effect: Adapts to wiki theme 4287*9ccd446eSAtari911 4288*9ccd446eSAtari911### User Experience 4289*9ccd446eSAtari911 4290*9ccd446eSAtari911**Click event bar** → Event highlights with themed glow 4291*9ccd446eSAtari911**Auto-scroll** → Event scrolls into view smoothly 4292*9ccd446eSAtari911**3 second glow** → Fade out after 3 seconds 4293*9ccd446eSAtari911**Smooth transition** → 0.3s ease-in-out 4294*9ccd446eSAtari911 4295*9ccd446eSAtari911### Perfect for Finding Events 4296*9ccd446eSAtari911 4297*9ccd446eSAtari911**Large event lists**: Quickly locate the clicked event ✓ 4298*9ccd446eSAtari911**Visual feedback**: Know which event you clicked ✓ 4299*9ccd446eSAtari911**Theme consistency**: Matches your chosen theme ✓ 4300*9ccd446eSAtari911**Smooth animation**: Professional appearance ✓ 4301*9ccd446eSAtari911 4302*9ccd446eSAtari911### All Themes Covered 4303*9ccd446eSAtari911 4304*9ccd446eSAtari911- ✅ Matrix: Green glow 4305*9ccd446eSAtari911- ✅ Purple: Purple glow 4306*9ccd446eSAtari911- ✅ Professional: Blue glow 4307*9ccd446eSAtari911- ✅ Pink: Maximum pink sparkle 4308*9ccd446eSAtari911- ✅ Wiki: Adaptive glow 4309*9ccd446eSAtari911 4310*9ccd446eSAtari911**Click any event bar and watch it glow!** ✨ 4311*9ccd446eSAtari911 4312*9ccd446eSAtari911## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 4313*9ccd446eSAtari911 4314*9ccd446eSAtari911### Changed: Text Glow Now Pink-Only 4315*9ccd446eSAtari911- **Removed:** Text shadow/glow from Matrix theme 4316*9ccd446eSAtari911- **Removed:** Text shadow/glow from Purple theme 4317*9ccd446eSAtari911- **Removed:** Text shadow/glow from Professional theme (already had none) 4318*9ccd446eSAtari911- **Removed:** Text shadow/glow from Wiki Default theme 4319*9ccd446eSAtari911- **Kept:** Text shadow/glow ONLY on Pink Bling theme 4320*9ccd446eSAtari911- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 4321*9ccd446eSAtari911 4322*9ccd446eSAtari911### All Changes 4323*9ccd446eSAtari911 4324*9ccd446eSAtari911**Before (Matrix, Purple)**: 4325*9ccd446eSAtari911```css 4326*9ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Glow effect */ 4327*9ccd446eSAtari911``` 4328*9ccd446eSAtari911 4329*9ccd446eSAtari911**After (Matrix, Purple, Professional, Wiki)**: 4330*9ccd446eSAtari911```css 4331*9ccd446eSAtari911text-shadow: none; /* Clean, no glow */ 4332*9ccd446eSAtari911``` 4333*9ccd446eSAtari911 4334*9ccd446eSAtari911**Pink Bling (unchanged)**: 4335*9ccd446eSAtari911```css 4336*9ccd446eSAtari911text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 4337*9ccd446eSAtari911``` 4338*9ccd446eSAtari911 4339*9ccd446eSAtari911### Text Shadow Removed From 4340*9ccd446eSAtari911 4341*9ccd446eSAtari911**Sidebar day numbers**: No glow ✓ 4342*9ccd446eSAtari911**Event titles**: No glow ✓ 4343*9ccd446eSAtari911**Event dates**: No glow ✓ 4344*9ccd446eSAtari911**Add Event button**: No glow ✓ 4345*9ccd446eSAtari911**Day popup events**: No glow ✓ 4346*9ccd446eSAtari911 4347*9ccd446eSAtari911### Before vs After 4348*9ccd446eSAtari911 4349*9ccd446eSAtari911**BEFORE (Matrix)**: 4350*9ccd446eSAtari911``` 4351*9ccd446eSAtari911Event Title ✨ ← Glowing green text 4352*9ccd446eSAtari9112:00 PM ✨ ← Glowing text 4353*9ccd446eSAtari911``` 4354*9ccd446eSAtari911 4355*9ccd446eSAtari911**AFTER (Matrix)**: 4356*9ccd446eSAtari911``` 4357*9ccd446eSAtari911Event Title ← Clean green text 4358*9ccd446eSAtari9112:00 PM ← Clean text 4359*9ccd446eSAtari911``` 4360*9ccd446eSAtari911 4361*9ccd446eSAtari911**Pink Bling (Still Glows)**: 4362*9ccd446eSAtari911``` 4363*9ccd446eSAtari911Event Title ✨ ← Still glowing! 4364*9ccd446eSAtari9112:00 PM ✨ ← Maximum sparkle! 4365*9ccd446eSAtari911``` 4366*9ccd446eSAtari911 4367*9ccd446eSAtari911### Theme Appearances 4368*9ccd446eSAtari911 4369*9ccd446eSAtari911** Matrix Edition**: 4370*9ccd446eSAtari911- Clean green text 4371*9ccd446eSAtari911- No glow effects 4372*9ccd446eSAtari911- Professional appearance 4373*9ccd446eSAtari911- Still has border glow 4374*9ccd446eSAtari911 4375*9ccd446eSAtari911** Purple Dream**: 4376*9ccd446eSAtari911- Clean purple text 4377*9ccd446eSAtari911- No glow effects 4378*9ccd446eSAtari911- Elegant appearance 4379*9ccd446eSAtari911- Still has border glow 4380*9ccd446eSAtari911 4381*9ccd446eSAtari911** Professional Blue**: 4382*9ccd446eSAtari911- Clean text (unchanged) 4383*9ccd446eSAtari911- No glow effects 4384*9ccd446eSAtari911- Modern appearance 4385*9ccd446eSAtari911 4386*9ccd446eSAtari911** Pink Bling**: 4387*9ccd446eSAtari911- Glowing pink text ✨ 4388*9ccd446eSAtari911- Maximum glow effects 4389*9ccd446eSAtari911- Sparkle everywhere! 4390*9ccd446eSAtari911- All the bling! 4391*9ccd446eSAtari911 4392*9ccd446eSAtari911** Wiki Default**: 4393*9ccd446eSAtari911- Clean text 4394*9ccd446eSAtari911- No glow effects 4395*9ccd446eSAtari911- Matches wiki theme 4396*9ccd446eSAtari911 4397*9ccd446eSAtari911### Glow Effects Remaining 4398*9ccd446eSAtari911 4399*9ccd446eSAtari911**Border/box glow**: Still present on all themes ✓ 4400*9ccd446eSAtari911**Pink text glow**: Only on Pink Bling ✓ 4401*9ccd446eSAtari911**Shadow effects**: Still on buttons/boxes ✓ 4402*9ccd446eSAtari911 4403*9ccd446eSAtari911**Only TEXT glow removed from non-pink themes!** 4404*9ccd446eSAtari911 4405*9ccd446eSAtari911### Result 4406*9ccd446eSAtari911 4407*9ccd446eSAtari911**Cleaner, more professional look** for: 4408*9ccd446eSAtari911- Matrix ✓ 4409*9ccd446eSAtari911- Purple ✓ 4410*9ccd446eSAtari911- Professional ✓ 4411*9ccd446eSAtari911- Wiki Default ✓ 4412*9ccd446eSAtari911 4413*9ccd446eSAtari911**Maximum sparkle** for: 4414*9ccd446eSAtari911- Pink Bling ✨✓ 4415*9ccd446eSAtari911 4416*9ccd446eSAtari911**Best of both worlds!** 4417*9ccd446eSAtari911 4418*9ccd446eSAtari911## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 4419*9ccd446eSAtari911 4420*9ccd446eSAtari911### New: Wiki Default Theme 4421*9ccd446eSAtari911- **Added:** 5th theme that automatically matches your DokuWiki template 4422*9ccd446eSAtari911- **Uses:** CSS variables from your wiki theme 4423*9ccd446eSAtari911- **Adapts:** Automatically works with light and dark themes 4424*9ccd446eSAtari911- **Perfect:** Seamless integration with any DokuWiki template 4425*9ccd446eSAtari911 4426*9ccd446eSAtari911### How It Works 4427*9ccd446eSAtari911 4428*9ccd446eSAtari911**Wiki theme uses DokuWiki CSS variables**: 4429*9ccd446eSAtari911```css 4430*9ccd446eSAtari911bg: var(--__background_site__, #f5f5f5) 4431*9ccd446eSAtari911border: var(--__border__, #ccc) 4432*9ccd446eSAtari911text_primary: var(--__text__, #333) 4433*9ccd446eSAtari911text_bright: var(--__link__, #2b73b7) 4434*9ccd446eSAtari911text_dim: var(--__text_neu__, #666) 4435*9ccd446eSAtari911cell_bg: var(--__background__, #fff) 4436*9ccd446eSAtari911grid_border: var(--__border__, #ccc) 4437*9ccd446eSAtari911``` 4438*9ccd446eSAtari911 4439*9ccd446eSAtari911**With fallbacks for older DokuWiki versions**: 4440*9ccd446eSAtari911- If CSS variables exist → Use them ✓ 4441*9ccd446eSAtari911- If not available → Use fallback values ✓ 4442*9ccd446eSAtari911 4443*9ccd446eSAtari911### All 5 Themes 4444*9ccd446eSAtari911 4445*9ccd446eSAtari911**1. Matrix Edition** (Default) 4446*9ccd446eSAtari911- Dark green with neon glow 4447*9ccd446eSAtari911- Matrix-style effects 4448*9ccd446eSAtari911- Original theme 4449*9ccd446eSAtari911 4450*9ccd446eSAtari911**2. Purple Dream** 4451*9ccd446eSAtari911- Rich purple with violet accents 4452*9ccd446eSAtari911- Elegant and sophisticated 4453*9ccd446eSAtari911- Soft glow effects 4454*9ccd446eSAtari911 4455*9ccd446eSAtari911**3. Professional Blue** 4456*9ccd446eSAtari911- Clean blue and grey 4457*9ccd446eSAtari911- Modern professional 4458*9ccd446eSAtari911- No glow effects 4459*9ccd446eSAtari911 4460*9ccd446eSAtari911**4. Pink Bling** 4461*9ccd446eSAtari911- Glamorous hot pink 4462*9ccd446eSAtari911- Maximum sparkle ✨ 4463*9ccd446eSAtari911- Hearts and diamonds 4464*9ccd446eSAtari911 4465*9ccd446eSAtari911**5. Wiki Default** ← NEW! 4466*9ccd446eSAtari911- Matches your wiki template 4467*9ccd446eSAtari911- Auto-adapts to light/dark 4468*9ccd446eSAtari911- Perfect integration 4469*9ccd446eSAtari911 4470*9ccd446eSAtari911### Examples 4471*9ccd446eSAtari911 4472*9ccd446eSAtari911**Light Wiki Template**: 4473*9ccd446eSAtari911``` 4474*9ccd446eSAtari911Wiki Default theme shows: 4475*9ccd446eSAtari911- Light backgrounds (#f5f5f5) 4476*9ccd446eSAtari911- Dark text (#333) 4477*9ccd446eSAtari911- Light inputs (#fff) 4478*9ccd446eSAtari911- Gray borders (#ccc) 4479*9ccd446eSAtari911 4480*9ccd446eSAtari911Matches perfectly! ✓ 4481*9ccd446eSAtari911``` 4482*9ccd446eSAtari911 4483*9ccd446eSAtari911**Dark Wiki Template**: 4484*9ccd446eSAtari911``` 4485*9ccd446eSAtari911Wiki Default theme shows: 4486*9ccd446eSAtari911- Dark backgrounds (from template) 4487*9ccd446eSAtari911- Light text (from template) 4488*9ccd446eSAtari911- Dark inputs (from template) 4489*9ccd446eSAtari911- Dark borders (from template) 4490*9ccd446eSAtari911 4491*9ccd446eSAtari911Matches perfectly! ✓ 4492*9ccd446eSAtari911``` 4493*9ccd446eSAtari911 4494*9ccd446eSAtari911**Bootstrap Template**: 4495*9ccd446eSAtari911``` 4496*9ccd446eSAtari911Uses Bootstrap's colors 4497*9ccd446eSAtari911Matches perfectly! ✓ 4498*9ccd446eSAtari911``` 4499*9ccd446eSAtari911 4500*9ccd446eSAtari911**Material Template**: 4501*9ccd446eSAtari911``` 4502*9ccd446eSAtari911Uses Material's colors 4503*9ccd446eSAtari911Matches perfectly! ✓ 4504*9ccd446eSAtari911``` 4505*9ccd446eSAtari911 4506*9ccd446eSAtari911### CSS Variables Used 4507*9ccd446eSAtari911 4508*9ccd446eSAtari911**DokuWiki provides**: 4509*9ccd446eSAtari911- `--__background_site__`: Page background 4510*9ccd446eSAtari911- `--__background_alt__`: Section backgrounds 4511*9ccd446eSAtari911- `--__background__`: Content backgrounds 4512*9ccd446eSAtari911- `--__text__`: Primary text color 4513*9ccd446eSAtari911- `--__link__`: Link color 4514*9ccd446eSAtari911- `--__text_neu__`: Dimmed text 4515*9ccd446eSAtari911- `--__border__`: Border color 4516*9ccd446eSAtari911- `--__background_neu__`: Neutral background 4517*9ccd446eSAtari911 4518*9ccd446eSAtari911**All with fallbacks**: 4519*9ccd446eSAtari911```css 4520*9ccd446eSAtari911var(--__background_site__, #f5f5f5) 4521*9ccd446eSAtari911/* Falls back to light gray if variable doesn't exist */ 4522*9ccd446eSAtari911``` 4523*9ccd446eSAtari911 4524*9ccd446eSAtari911### Perfect for Every Template 4525*9ccd446eSAtari911 4526*9ccd446eSAtari911**Custom templates**: Automatically adapts ✓ 4527*9ccd446eSAtari911**Light themes**: Perfect match ✓ 4528*9ccd446eSAtari911**Dark themes**: Perfect match ✓ 4529*9ccd446eSAtari911**Any DokuWiki version**: Works with fallbacks ✓ 4530*9ccd446eSAtari911 4531*9ccd446eSAtari911### Complete Theme Collection 4532*9ccd446eSAtari911 4533*9ccd446eSAtari911Now with **5 gorgeous themes**: 4534*9ccd446eSAtari911- 3 dark themes (Matrix, Purple, Pink) 4535*9ccd446eSAtari911- 1 light theme (Professional) 4536*9ccd446eSAtari911- 1 adaptive theme (Wiki Default) ← NEW! 4537*9ccd446eSAtari911 4538*9ccd446eSAtari911**Something for everyone!** 4539*9ccd446eSAtari911 4540*9ccd446eSAtari911## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 4541*9ccd446eSAtari911 4542*9ccd446eSAtari911### Fixed: Checkbox Field Borders Themed 4543*9ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs 4544*9ccd446eSAtari911- **Fixed:** Repeating Event section border 4545*9ccd446eSAtari911- **Fixed:** Task checkbox section border 4546*9ccd446eSAtari911- **Result:** No white borders around checkboxes! 4547*9ccd446eSAtari911 4548*9ccd446eSAtari911### Changes 4549*9ccd446eSAtari911 4550*9ccd446eSAtari911**Checkbox Field Border Styling**: 4551*9ccd446eSAtari911 4552*9ccd446eSAtari911**Before**: 4553*9ccd446eSAtari911```html 4554*9ccd446eSAtari911<div class="form-field-checkbox" 4555*9ccd446eSAtari911 style="background: $bg !important;"> 4556*9ccd446eSAtari911<!-- Border shows white ✗ --> 4557*9ccd446eSAtari911``` 4558*9ccd446eSAtari911 4559*9ccd446eSAtari911**After**: 4560*9ccd446eSAtari911```php 4561*9ccd446eSAtari911<div class="form-field-checkbox" 4562*9ccd446eSAtari911 style="background: $bg !important; 4563*9ccd446eSAtari911 border-color: $grid_border !important;"> 4564*9ccd446eSAtari911<!-- Border themed ✓ --> 4565*9ccd446eSAtari911``` 4566*9ccd446eSAtari911 4567*9ccd446eSAtari911### Before vs After 4568*9ccd446eSAtari911 4569*9ccd446eSAtari911**BEFORE (v4.8.8)**: 4570*9ccd446eSAtari911``` 4571*9ccd446eSAtari911Edit Dialog: 4572*9ccd446eSAtari911┌──────────────────┐ 4573*9ccd446eSAtari911│ ☑ Repeating ║│ ← White border ✗ 4574*9ccd446eSAtari911└──────────────────┘ 4575*9ccd446eSAtari911┌──────────────────┐ 4576*9ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗ 4577*9ccd446eSAtari911└──────────────────┘ 4578*9ccd446eSAtari911``` 4579*9ccd446eSAtari911 4580*9ccd446eSAtari911**AFTER (v4.9.0)**: 4581*9ccd446eSAtari911``` 4582*9ccd446eSAtari911Matrix Edit Dialog: 4583*9ccd446eSAtari911┌──────────────────┐ 4584*9ccd446eSAtari911│ ☑ Repeating │ ← Green border ✓ 4585*9ccd446eSAtari911└──────────────────┘ 4586*9ccd446eSAtari911┌──────────────────┐ 4587*9ccd446eSAtari911│ ☑ Task checkbox │ ← Green border ✓ 4588*9ccd446eSAtari911└──────────────────┘ 4589*9ccd446eSAtari911``` 4590*9ccd446eSAtari911 4591*9ccd446eSAtari911### ABSOLUTE PERFECTION ACHIEVED 4592*9ccd446eSAtari911 4593*9ccd446eSAtari911**Every element themed**: 4594*9ccd446eSAtari911- ✅ All inputs 4595*9ccd446eSAtari911- ✅ All labels 4596*9ccd446eSAtari911- ✅ All sections 4597*9ccd446eSAtari911- ✅ **Checkbox field borders** ← v4.9.0! 4598*9ccd446eSAtari911- ✅ All buttons 4599*9ccd446eSAtari911- ✅ All checkboxes 4600*9ccd446eSAtari911- ✅ No white anywhere 4601*9ccd446eSAtari911 4602*9ccd446eSAtari911**100% COMPLETE!** ✨ 4603*9ccd446eSAtari911 4604*9ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4605*9ccd446eSAtari911 4606*9ccd446eSAtari911### Fixed: Checkbox Field Borders Themed 4607*9ccd446eSAtari911- **Fixed:** Added border-color to checkbox field divs 4608*9ccd446eSAtari911- **Fixed:** Repeating Event section border 4609*9ccd446eSAtari911- **Fixed:** Task checkbox section border 4610*9ccd446eSAtari911- **Result:** No white borders around checkboxes! 4611*9ccd446eSAtari911 4612*9ccd446eSAtari911### Fixed: Admin Sections Respect Wiki Theme 4613*9ccd446eSAtari911- **Fixed:** All admin backgrounds use CSS variables 4614*9ccd446eSAtari911- **Fixed:** Text colors use wiki text color 4615*9ccd446eSAtari911- **Fixed:** Borders use wiki border color 4616*9ccd446eSAtari911- **Result:** Admin matches wiki theme perfectly! 4617*9ccd446eSAtari911 4618*9ccd446eSAtari911### All Changes 4619*9ccd446eSAtari911 4620*9ccd446eSAtari911**1. Checkbox Field Border Styling**: 4621*9ccd446eSAtari911 4622*9ccd446eSAtari911**Before**: 4623*9ccd446eSAtari911```html 4624*9ccd446eSAtari911<div class="form-field-checkbox" 4625*9ccd446eSAtari911 style="background: $bg !important;"> 4626*9ccd446eSAtari911<!-- Border shows white ✗ --> 4627*9ccd446eSAtari911``` 4628*9ccd446eSAtari911 4629*9ccd446eSAtari911**After**: 4630*9ccd446eSAtari911```php 4631*9ccd446eSAtari911<div class="form-field-checkbox" 4632*9ccd446eSAtari911 style="background: $bg !important; 4633*9ccd446eSAtari911 border-color: $grid_border !important;"> 4634*9ccd446eSAtari911<!-- Border themed ✓ --> 4635*9ccd446eSAtari911``` 4636*9ccd446eSAtari911 4637*9ccd446eSAtari911**2. Admin CSS Variables**: 4638*9ccd446eSAtari911 4639*9ccd446eSAtari911**Added CSS variables for wiki theme compatibility**: 4640*9ccd446eSAtari911```css 4641*9ccd446eSAtari911.calendar-admin-wrapper { 4642*9ccd446eSAtari911 background: var(--__background_site__, #f5f5f5); 4643*9ccd446eSAtari911 color: var(--__text__, #333); 4644*9ccd446eSAtari911} 4645*9ccd446eSAtari911.calendar-admin-section { 4646*9ccd446eSAtari911 background: var(--__background_alt__, #fafafa); 4647*9ccd446eSAtari911} 4648*9ccd446eSAtari911.calendar-admin-input { 4649*9ccd446eSAtari911 background: var(--__background__, #fff); 4650*9ccd446eSAtari911 color: var(--__text__, #333); 4651*9ccd446eSAtari911} 4652*9ccd446eSAtari911``` 4653*9ccd446eSAtari911 4654*9ccd446eSAtari911**Replaced hardcoded colors**: 4655*9ccd446eSAtari911```php 4656*9ccd446eSAtari911// Before: 4657*9ccd446eSAtari911background: #f9f9f9 4658*9ccd446eSAtari911background: white 4659*9ccd446eSAtari911color: #333 4660*9ccd446eSAtari911border: 1px solid #ddd 4661*9ccd446eSAtari911 4662*9ccd446eSAtari911// After: 4663*9ccd446eSAtari911background: var(--__background_alt__, #f9f9f9) 4664*9ccd446eSAtari911background: var(--__background__, #fff) 4665*9ccd446eSAtari911color: var(--__text__, #333) 4666*9ccd446eSAtari911border: 1px solid var(--__border__, #ddd) 4667*9ccd446eSAtari911``` 4668*9ccd446eSAtari911 4669*9ccd446eSAtari911### Before vs After 4670*9ccd446eSAtari911 4671*9ccd446eSAtari911**BEFORE (v4.8.8)**: 4672*9ccd446eSAtari911``` 4673*9ccd446eSAtari911Edit Dialog: 4674*9ccd446eSAtari911┌──────────────────┐ 4675*9ccd446eSAtari911│ ☑ Repeating ║│ ← White border ✗ 4676*9ccd446eSAtari911└──────────────────┘ 4677*9ccd446eSAtari911┌──────────────────┐ 4678*9ccd446eSAtari911│ ☑ Task checkbox ║│ ← White border ✗ 4679*9ccd446eSAtari911└──────────────────┘ 4680*9ccd446eSAtari911 4681*9ccd446eSAtari911Admin Page (Dark Wiki Theme): 4682*9ccd446eSAtari911┌──────────────────┐ 4683*9ccd446eSAtari911│ Light sections │ ← White boxes ✗ 4684*9ccd446eSAtari911│ Light inputs │ ← Doesn't match ✗ 4685*9ccd446eSAtari911└──────────────────┘ 4686*9ccd446eSAtari911``` 4687*9ccd446eSAtari911 4688*9ccd446eSAtari911**AFTER (v4.8.9)**: 4689*9ccd446eSAtari911``` 4690*9ccd446eSAtari911Matrix Edit Dialog: 4691*9ccd446eSAtari911┌──────────────────┐ 4692*9ccd446eSAtari911│ ☑ Repeating │ ← Green border ✓ 4693*9ccd446eSAtari911└──────────────────┘ 4694*9ccd446eSAtari911┌──────────────────┐ 4695*9ccd446eSAtari911│ ☑ Task checkbox │ ← Green border ✓ 4696*9ccd446eSAtari911└──────────────────┘ 4697*9ccd446eSAtari911 4698*9ccd446eSAtari911Admin (Dark Wiki Theme): 4699*9ccd446eSAtari911┌──────────────────┐ 4700*9ccd446eSAtari911│ Dark sections │ ← Matches wiki ✓ 4701*9ccd446eSAtari911│ Dark inputs │ ← Perfect match ✓ 4702*9ccd446eSAtari911└──────────────────┘ 4703*9ccd446eSAtari911``` 4704*9ccd446eSAtari911 4705*9ccd446eSAtari911### Admin Theme Examples 4706*9ccd446eSAtari911 4707*9ccd446eSAtari911**Light Wiki Theme**: 4708*9ccd446eSAtari911``` 4709*9ccd446eSAtari911Admin page backgrounds: Light 4710*9ccd446eSAtari911Section boxes: Light gray 4711*9ccd446eSAtari911Inputs: White 4712*9ccd446eSAtari911Borders: Gray 4713*9ccd446eSAtari911Text: Dark 4714*9ccd446eSAtari911 4715*9ccd446eSAtari911Perfect match! ✓ 4716*9ccd446eSAtari911``` 4717*9ccd446eSAtari911 4718*9ccd446eSAtari911**Dark Wiki Theme**: 4719*9ccd446eSAtari911``` 4720*9ccd446eSAtari911Admin page backgrounds: Dark 4721*9ccd446eSAtari911Section boxes: Darker gray 4722*9ccd446eSAtari911Inputs: Dark 4723*9ccd446eSAtari911Borders: Dark gray 4724*9ccd446eSAtari911Text: Light 4725*9ccd446eSAtari911 4726*9ccd446eSAtari911Perfect match! ✓ 4727*9ccd446eSAtari911``` 4728*9ccd446eSAtari911 4729*9ccd446eSAtari911**DokuWiki Default**: 4730*9ccd446eSAtari911``` 4731*9ccd446eSAtari911Uses wiki's CSS variables 4732*9ccd446eSAtari911Automatically adapts 4733*9ccd446eSAtari911Always matches! ✓ 4734*9ccd446eSAtari911``` 4735*9ccd446eSAtari911 4736*9ccd446eSAtari911### Complete Coverage 4737*9ccd446eSAtari911 4738*9ccd446eSAtari911**Edit Dialog**: 4739*9ccd446eSAtari911- ✅ All inputs themed 4740*9ccd446eSAtari911- ✅ All labels themed 4741*9ccd446eSAtari911- ✅ All sections themed 4742*9ccd446eSAtari911- ✅ **Checkbox borders** ← v4.8.9! 4743*9ccd446eSAtari911- ✅ All buttons themed 4744*9ccd446eSAtari911- ✅ No white anywhere 4745*9ccd446eSAtari911 4746*9ccd446eSAtari911**Admin Interface**: 4747*9ccd446eSAtari911- ✅ **Tab navigation** ← v4.8.9! 4748*9ccd446eSAtari911- ✅ **Section boxes** ← v4.8.9! 4749*9ccd446eSAtari911- ✅ **Input fields** ← v4.8.9! 4750*9ccd446eSAtari911- ✅ **Text colors** ← v4.8.9! 4751*9ccd446eSAtari911- ✅ **Borders** ← v4.8.9! 4752*9ccd446eSAtari911- ✅ All tabs (Manage, Update, Outlook, Themes) 4753*9ccd446eSAtari911 4754*9ccd446eSAtari911### CSS Variables Used 4755*9ccd446eSAtari911 4756*9ccd446eSAtari911**DokuWiki provides these**: 4757*9ccd446eSAtari911- `--__background_site__`: Page background 4758*9ccd446eSAtari911- `--__background_alt__`: Alternate background 4759*9ccd446eSAtari911- `--__background__`: Primary background (inputs) 4760*9ccd446eSAtari911- `--__text__`: Text color 4761*9ccd446eSAtari911- `--__border__`: Border color 4762*9ccd446eSAtari911 4763*9ccd446eSAtari911**Fallbacks provided for older DokuWiki**: 4764*9ccd446eSAtari911```css 4765*9ccd446eSAtari911var(--__background_site__, #f5f5f5) 4766*9ccd446eSAtari911var(--__background_alt__, #fafafa) 4767*9ccd446eSAtari911var(--__background__, #fff) 4768*9ccd446eSAtari911var(--__text__, #333) 4769*9ccd446eSAtari911var(--__border__, #ddd) 4770*9ccd446eSAtari911``` 4771*9ccd446eSAtari911 4772*9ccd446eSAtari911### Perfect Adaptation 4773*9ccd446eSAtari911 4774*9ccd446eSAtari911**Admin now adapts to ANY wiki theme**: 4775*9ccd446eSAtari911- Light themes → Light admin ✓ 4776*9ccd446eSAtari911- Dark themes → Dark admin ✓ 4777*9ccd446eSAtari911- Custom themes → Matches perfectly ✓ 4778*9ccd446eSAtari911- No hardcoded colors ✓ 4779*9ccd446eSAtari911 4780*9ccd446eSAtari911**Calendar themes still work**: 4781*9ccd446eSAtari911- Matrix, Purple, Professional, Pink ✓ 4782*9ccd446eSAtari911- Independent from wiki theme ✓ 4783*9ccd446eSAtari911- Admin respects wiki ✓ 4784*9ccd446eSAtari911- Calendar respects calendar theme ✓ 4785*9ccd446eSAtari911 4786*9ccd446eSAtari911### FINAL PERFECTION 4787*9ccd446eSAtari911 4788*9ccd446eSAtari911**Frontend (Calendar)**: 4789*9ccd446eSAtari911- Complete theming ✓ 4790*9ccd446eSAtari911- 4 beautiful themes ✓ 4791*9ccd446eSAtari911- Every pixel themed ✓ 4792*9ccd446eSAtari911 4793*9ccd446eSAtari911**Backend (Admin)**: 4794*9ccd446eSAtari911- Respects wiki theme ✓ 4795*9ccd446eSAtari911- Works with any theme ✓ 4796*9ccd446eSAtari911- Perfect compatibility ✓ 4797*9ccd446eSAtari911 4798*9ccd446eSAtari911**ABSOLUTELY EVERYTHING THEMED!** ✨ 4799*9ccd446eSAtari911 4800*9ccd446eSAtari911## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4801*9ccd446eSAtari911 4802*9ccd446eSAtari911### Fixed: Task Checkboxes Now Fully Themed 4803*9ccd446eSAtari911- **Fixed:** Added background-color and border inline 4804*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript versions 4805*9ccd446eSAtari911- **Result:** No white checkboxes! 4806*9ccd446eSAtari911 4807*9ccd446eSAtari911### Fixed: Past Events Toggle Border 4808*9ccd446eSAtari911- **Fixed:** Added !important to border styling 4809*9ccd446eSAtari911- **Fixed:** Explicit top and bottom borders 4810*9ccd446eSAtari911- **Result:** No white line under toggle! 4811*9ccd446eSAtari911 4812*9ccd446eSAtari911### Fixed: Form Field Section Backgrounds 4813*9ccd446eSAtari911- **Fixed:** All form-field and form-row-group backgrounds 4814*9ccd446eSAtari911- **Fixed:** Every section in edit dialog 4815*9ccd446eSAtari911- **Result:** No white sections anywhere! 4816*9ccd446eSAtari911 4817*9ccd446eSAtari911### All Changes 4818*9ccd446eSAtari911 4819*9ccd446eSAtari911**1. Task Checkbox Styling**: 4820*9ccd446eSAtari911 4821*9ccd446eSAtari911**Before**: 4822*9ccd446eSAtari911```php 4823*9ccd446eSAtari911style="accent-color: $border !important;" 4824*9ccd446eSAtari911<!-- Only accent, background still white ✗ --> 4825*9ccd446eSAtari911``` 4826*9ccd446eSAtari911 4827*9ccd446eSAtari911**After**: 4828*9ccd446eSAtari911```php 4829*9ccd446eSAtari911style="accent-color: $border !important; 4830*9ccd446eSAtari911 background-color: $cell_bg !important; 4831*9ccd446eSAtari911 border: 2px solid $grid_border !important;" 4832*9ccd446eSAtari911<!-- Full theming ✓ --> 4833*9ccd446eSAtari911``` 4834*9ccd446eSAtari911 4835*9ccd446eSAtari911**2. Past Events Toggle Border**: 4836*9ccd446eSAtari911 4837*9ccd446eSAtari911**Before**: 4838*9ccd446eSAtari911```php 4839*9ccd446eSAtari911style="border-color: $grid_border;" 4840*9ccd446eSAtari911<!-- No !important, CSS overrides ✗ --> 4841*9ccd446eSAtari911``` 4842*9ccd446eSAtari911 4843*9ccd446eSAtari911**After**: 4844*9ccd446eSAtari911```php 4845*9ccd446eSAtari911style="border-color: $grid_border !important; 4846*9ccd446eSAtari911 border-top: 1px solid $grid_border !important; 4847*9ccd446eSAtari911 border-bottom: 1px solid $grid_border !important;" 4848*9ccd446eSAtari911<!-- Cannot be overridden ✓ --> 4849*9ccd446eSAtari911``` 4850*9ccd446eSAtari911 4851*9ccd446eSAtari911**3. Form Field Backgrounds**: 4852*9ccd446eSAtari911 4853*9ccd446eSAtari911**Before**: 4854*9ccd446eSAtari911```html 4855*9ccd446eSAtari911<div class="form-field"> 4856*9ccd446eSAtari911<div class="form-row-group"> 4857*9ccd446eSAtari911<!-- No background, shows white ✗ --> 4858*9ccd446eSAtari911``` 4859*9ccd446eSAtari911 4860*9ccd446eSAtari911**After**: 4861*9ccd446eSAtari911```php 4862*9ccd446eSAtari911<div class="form-field" style="background: $bg !important;"> 4863*9ccd446eSAtari911<div class="form-row-group" style="background: $bg !important;"> 4864*9ccd446eSAtari911<!-- Fully themed ✓ --> 4865*9ccd446eSAtari911``` 4866*9ccd446eSAtari911 4867*9ccd446eSAtari911### Before vs After 4868*9ccd446eSAtari911 4869*9ccd446eSAtari911**BEFORE (v4.8.7)**: 4870*9ccd446eSAtari911``` 4871*9ccd446eSAtari911Event: 4872*9ccd446eSAtari911□ Task checkbox ← White checkbox ✗ 4873*9ccd446eSAtari911 4874*9ccd446eSAtari911Past Events 4875*9ccd446eSAtari911▶ Past Events (3) ← White line below ✗ 4876*9ccd446eSAtari911───────────────── 4877*9ccd446eSAtari911 4878*9ccd446eSAtari911Edit Dialog: 4879*9ccd446eSAtari911┌──────────────┐ 4880*9ccd446eSAtari911│ Form fields │ ← White sections ✗ 4881*9ccd446eSAtari911└──────────────┘ 4882*9ccd446eSAtari911``` 4883*9ccd446eSAtari911 4884*9ccd446eSAtari911**AFTER (v4.8.8)**: 4885*9ccd446eSAtari911``` 4886*9ccd446eSAtari911Matrix Event: 4887*9ccd446eSAtari911☑ Task checkbox ← Green checkbox ✓ 4888*9ccd446eSAtari911 4889*9ccd446eSAtari911Past Events 4890*9ccd446eSAtari911▶ Past Events (3) ← Green border ✓ 4891*9ccd446eSAtari911───────────────── 4892*9ccd446eSAtari911 4893*9ccd446eSAtari911Matrix Edit Dialog: 4894*9ccd446eSAtari911┌──────────────┐ 4895*9ccd446eSAtari911│ Form fields │ ← Dark green ✓ 4896*9ccd446eSAtari911└──────────────┘ 4897*9ccd446eSAtari911``` 4898*9ccd446eSAtari911 4899*9ccd446eSAtari911### Complete Examples 4900*9ccd446eSAtari911 4901*9ccd446eSAtari911**Matrix Theme**: 4902*9ccd446eSAtari911``` 4903*9ccd446eSAtari911Task Checkbox: 4904*9ccd446eSAtari911☑ Checked → Green checkmark, green bg 4905*9ccd446eSAtari911☐ Unchecked → Green border, dark green bg ✓ 4906*9ccd446eSAtari911 4907*9ccd446eSAtari911Past Events Toggle: 4908*9ccd446eSAtari911▶ Past Events (3) 4909*9ccd446eSAtari911─────────────────── Green border ✓ 4910*9ccd446eSAtari911 4911*9ccd446eSAtari911Edit Dialog: 4912*9ccd446eSAtari911All sections dark green ✓ 4913*9ccd446eSAtari911No white anywhere ✓ 4914*9ccd446eSAtari911``` 4915*9ccd446eSAtari911 4916*9ccd446eSAtari911**Purple Theme**: 4917*9ccd446eSAtari911``` 4918*9ccd446eSAtari911Task Checkbox: 4919*9ccd446eSAtari911☑ Checked → Purple checkmark, purple bg 4920*9ccd446eSAtari911☐ Unchecked → Purple border, dark purple bg ✓ 4921*9ccd446eSAtari911 4922*9ccd446eSAtari911Past Events Toggle: 4923*9ccd446eSAtari911▶ Past Events (3) 4924*9ccd446eSAtari911─────────────────── Purple border ✓ 4925*9ccd446eSAtari911 4926*9ccd446eSAtari911Edit Dialog: 4927*9ccd446eSAtari911All sections dark purple ✓ 4928*9ccd446eSAtari911``` 4929*9ccd446eSAtari911 4930*9ccd446eSAtari911**Professional Theme**: 4931*9ccd446eSAtari911``` 4932*9ccd446eSAtari911Task Checkbox: 4933*9ccd446eSAtari911☑ Checked → Blue checkmark, white bg 4934*9ccd446eSAtari911☐ Unchecked → Gray border, white bg ✓ 4935*9ccd446eSAtari911 4936*9ccd446eSAtari911Past Events Toggle: 4937*9ccd446eSAtari911▶ Past Events (3) 4938*9ccd446eSAtari911─────────────────── Gray border ✓ 4939*9ccd446eSAtari911 4940*9ccd446eSAtari911Edit Dialog: 4941*9ccd446eSAtari911All sections light ✓ 4942*9ccd446eSAtari911``` 4943*9ccd446eSAtari911 4944*9ccd446eSAtari911**Pink Theme**: 4945*9ccd446eSAtari911``` 4946*9ccd446eSAtari911Task Checkbox: 4947*9ccd446eSAtari911☑ Checked → Pink checkmark, pink bg ✨ 4948*9ccd446eSAtari911☐ Unchecked → Pink border, dark pink bg ✓ 4949*9ccd446eSAtari911 4950*9ccd446eSAtari911Past Events Toggle: 4951*9ccd446eSAtari911▶ Past Events (3) 4952*9ccd446eSAtari911─────────────────── Pink border 4953*9ccd446eSAtari911 4954*9ccd446eSAtari911Edit Dialog: 4955*9ccd446eSAtari911All sections dark pink ✓ 4956*9ccd446eSAtari911``` 4957*9ccd446eSAtari911 4958*9ccd446eSAtari911### Checkbox Visual 4959*9ccd446eSAtari911 4960*9ccd446eSAtari911**Matrix - Unchecked**: 4961*9ccd446eSAtari911``` 4962*9ccd446eSAtari911┌─────┐ 4963*9ccd446eSAtari911│ │ ← Dark green background 4964*9ccd446eSAtari911│ │ Green border 4965*9ccd446eSAtari911└─────┘ 4966*9ccd446eSAtari911``` 4967*9ccd446eSAtari911 4968*9ccd446eSAtari911**Matrix - Checked**: 4969*9ccd446eSAtari911``` 4970*9ccd446eSAtari911┌─────┐ 4971*9ccd446eSAtari911│ ✓ │ ← Dark green background 4972*9ccd446eSAtari911│ │ Green checkmark 4973*9ccd446eSAtari911└─────┘ 4974*9ccd446eSAtari911``` 4975*9ccd446eSAtari911 4976*9ccd446eSAtari911### Past Events Border 4977*9ccd446eSAtari911 4978*9ccd446eSAtari911**Before**: 4979*9ccd446eSAtari911``` 4980*9ccd446eSAtari911▶ Past Events (3) 4981*9ccd446eSAtari911─────────────────── White line ✗ 4982*9ccd446eSAtari911``` 4983*9ccd446eSAtari911 4984*9ccd446eSAtari911**After**: 4985*9ccd446eSAtari911``` 4986*9ccd446eSAtari911▶ Past Events (3) 4987*9ccd446eSAtari911─────────────────── Green line ✓ (Matrix) 4988*9ccd446eSAtari911 Purple line ✓ (Purple) 4989*9ccd446eSAtari911 Gray line ✓ (Professional) 4990*9ccd446eSAtari911 Pink line ✓ (Pink) 4991*9ccd446eSAtari911``` 4992*9ccd446eSAtari911 4993*9ccd446eSAtari911### Form Field Coverage 4994*9ccd446eSAtari911 4995*9ccd446eSAtari911**All sections themed**: 4996*9ccd446eSAtari911- ✅ Title field 4997*9ccd446eSAtari911- ✅ Namespace field 4998*9ccd446eSAtari911- ✅ Description field 4999*9ccd446eSAtari911- ✅ **Date row** ← v4.8.8! 5000*9ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.8! 5001*9ccd446eSAtari911- ✅ **Recurring options** ← v4.8.8! 5002*9ccd446eSAtari911- ✅ **Time row** ← v4.8.8! 5003*9ccd446eSAtari911- ✅ **Color row** ← v4.8.8! 5004*9ccd446eSAtari911- ✅ Button footer 5005*9ccd446eSAtari911 5006*9ccd446eSAtari911**Every div has background!** ✓ 5007*9ccd446eSAtari911 5008*9ccd446eSAtari911### ABSOLUTE PERFECTION 5009*9ccd446eSAtari911 5010*9ccd446eSAtari911**Not a single white pixel**: 5011*9ccd446eSAtari911- ✅ No white checkboxes 5012*9ccd446eSAtari911- ✅ No white borders 5013*9ccd446eSAtari911- ✅ No white backgrounds 5014*9ccd446eSAtari911- ✅ No white sections 5015*9ccd446eSAtari911- ✅ No white lines 5016*9ccd446eSAtari911- ✅ No white anything 5017*9ccd446eSAtari911 5018*9ccd446eSAtari911**100% PERFECT THEMING!** ✨ 5019*9ccd446eSAtari911 5020*9ccd446eSAtari911## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 5021*9ccd446eSAtari911 5022*9ccd446eSAtari911### Fixed: Checkbox Section Backgrounds Themed 5023*9ccd446eSAtari911- **Fixed:** Repeating Event section background 5024*9ccd446eSAtari911- **Fixed:** Task checkbox section background 5025*9ccd446eSAtari911- **Result:** No white backgrounds in dialog! 5026*9ccd446eSAtari911 5027*9ccd446eSAtari911### Fixed: Unchecked Task Checkboxes Themed 5028*9ccd446eSAtari911- **Fixed:** Added CSS for checkbox backgrounds 5029*9ccd446eSAtari911- **Fixed:** Unchecked boxes show theme colors 5030*9ccd446eSAtari911- **Result:** No white checkboxes! 5031*9ccd446eSAtari911 5032*9ccd446eSAtari911### Fixed: Day Popup Dialog Fully Themed 5033*9ccd446eSAtari911- **Fixed:** Popup container, header, body themed 5034*9ccd446eSAtari911- **Fixed:** Event items in popup themed 5035*9ccd446eSAtari911- **Fixed:** Add Event button themed 5036*9ccd446eSAtari911- **Fixed:** Footer section themed 5037*9ccd446eSAtari911- **Result:** Perfect popup theming! 5038*9ccd446eSAtari911 5039*9ccd446eSAtari911### All Changes 5040*9ccd446eSAtari911 5041*9ccd446eSAtari911**1. Checkbox Section Backgrounds**: 5042*9ccd446eSAtari911 5043*9ccd446eSAtari911**Before**: 5044*9ccd446eSAtari911```html 5045*9ccd446eSAtari911<div class="form-field-checkbox"> 5046*9ccd446eSAtari911<!-- White background ✗ --> 5047*9ccd446eSAtari911``` 5048*9ccd446eSAtari911 5049*9ccd446eSAtari911**After**: 5050*9ccd446eSAtari911```php 5051*9ccd446eSAtari911<div class="form-field-checkbox" 5052*9ccd446eSAtari911 style="background: $bg !important;"> 5053*9ccd446eSAtari911<!-- Themed ✓ --> 5054*9ccd446eSAtari911``` 5055*9ccd446eSAtari911 5056*9ccd446eSAtari911**2. Checkbox Background CSS**: 5057*9ccd446eSAtari911 5058*9ccd446eSAtari911**Added to style block**: 5059*9ccd446eSAtari911```css 5060*9ccd446eSAtari911.task-checkbox { 5061*9ccd446eSAtari911 background-color: $cell_bg !important; 5062*9ccd446eSAtari911 border: 2px solid $grid_border !important; 5063*9ccd446eSAtari911} 5064*9ccd446eSAtari911``` 5065*9ccd446eSAtari911 5066*9ccd446eSAtari911**3. Day Popup Theming**: 5067*9ccd446eSAtari911 5068*9ccd446eSAtari911**Container**: 5069*9ccd446eSAtari911```javascript 5070*9ccd446eSAtari911style="background: $bg !important; 5071*9ccd446eSAtari911 border: 2px solid $border !important; 5072*9ccd446eSAtari911 box-shadow: 0 0 20px $shadow !important;" 5073*9ccd446eSAtari911``` 5074*9ccd446eSAtari911 5075*9ccd446eSAtari911**Header**: 5076*9ccd446eSAtari911```javascript 5077*9ccd446eSAtari911style="background: $header_bg !important; 5078*9ccd446eSAtari911 color: $text_primary !important; 5079*9ccd446eSAtari911 border-bottom: 1px solid $border !important;" 5080*9ccd446eSAtari911``` 5081*9ccd446eSAtari911 5082*9ccd446eSAtari911**Footer**: 5083*9ccd446eSAtari911```javascript 5084*9ccd446eSAtari911style="background: $bg !important; 5085*9ccd446eSAtari911 border-top: 1px solid $grid_border !important;" 5086*9ccd446eSAtari911``` 5087*9ccd446eSAtari911 5088*9ccd446eSAtari911**Add Event Button**: 5089*9ccd446eSAtari911```javascript 5090*9ccd446eSAtari911style="background: $border !important; 5091*9ccd446eSAtari911 color: $bg !important; 5092*9ccd446eSAtari911 border-color: $border !important;" 5093*9ccd446eSAtari911``` 5094*9ccd446eSAtari911 5095*9ccd446eSAtari911**Event Items**: 5096*9ccd446eSAtari911```javascript 5097*9ccd446eSAtari911style="background: $cell_bg !important; 5098*9ccd446eSAtari911 border: 1px solid $grid_border !important;" 5099*9ccd446eSAtari911``` 5100*9ccd446eSAtari911 5101*9ccd446eSAtari911### Before vs After 5102*9ccd446eSAtari911 5103*9ccd446eSAtari911**BEFORE (v4.8.6)**: 5104*9ccd446eSAtari911``` 5105*9ccd446eSAtari911Edit Dialog: 5106*9ccd446eSAtari911┌──────────────────┐ 5107*9ccd446eSAtari911│ ☑ Repeating Event│ ← White background ✗ 5108*9ccd446eSAtari911├──────────────────┤ 5109*9ccd446eSAtari911│ ☑ Task checkbox │ ← White background ✗ 5110*9ccd446eSAtari911└──────────────────┘ 5111*9ccd446eSAtari911 5112*9ccd446eSAtari911Day Popup: 5113*9ccd446eSAtari911┌──────────────────┐ 5114*9ccd446eSAtari911│ Monday, Feb 8 │ ← White ✗ 5115*9ccd446eSAtari911├──────────────────┤ 5116*9ccd446eSAtari911│ Team Meeting │ ← White ✗ 5117*9ccd446eSAtari911│ 2:00 PM │ 5118*9ccd446eSAtari911├──────────────────┤ 5119*9ccd446eSAtari911│ [+ Add Event] │ ← White ✗ 5120*9ccd446eSAtari911└──────────────────┘ 5121*9ccd446eSAtari911 5122*9ccd446eSAtari911Task checkbox: ☐ ← White ✗ 5123*9ccd446eSAtari911``` 5124*9ccd446eSAtari911 5125*9ccd446eSAtari911**AFTER (v4.8.7)**: 5126*9ccd446eSAtari911``` 5127*9ccd446eSAtari911Edit Dialog (Matrix): 5128*9ccd446eSAtari911┌──────────────────┐ 5129*9ccd446eSAtari911│ ☑ Repeating Event│ ← Dark green ✓ 5130*9ccd446eSAtari911├──────────────────┤ 5131*9ccd446eSAtari911│ ☑ Task checkbox │ ← Dark green ✓ 5132*9ccd446eSAtari911└──────────────────┘ 5133*9ccd446eSAtari911 5134*9ccd446eSAtari911Day Popup (Matrix): 5135*9ccd446eSAtari911┌──────────────────┐ 5136*9ccd446eSAtari911│ Monday, Feb 8 │ ← Dark green ✓ 5137*9ccd446eSAtari911├──────────────────┤ 5138*9ccd446eSAtari911│ Team Meeting │ ← Dark green ✓ 5139*9ccd446eSAtari911│ 2:00 PM │ 5140*9ccd446eSAtari911├──────────────────┤ 5141*9ccd446eSAtari911│ [+ Add Event] │ ← Green button ✓ 5142*9ccd446eSAtari911└──────────────────┘ 5143*9ccd446eSAtari911 5144*9ccd446eSAtari911Task checkbox: ☑ ← Green ✓ 5145*9ccd446eSAtari911``` 5146*9ccd446eSAtari911 5147*9ccd446eSAtari911### Complete Examples 5148*9ccd446eSAtari911 5149*9ccd446eSAtari911**Matrix Dialog**: 5150*9ccd446eSAtari911``` 5151*9ccd446eSAtari911┌──────────────────────────┐ 5152*9ccd446eSAtari911│ ✏️ Edit Event │ 5153*9ccd446eSAtari911├──────────────────────────┤ 5154*9ccd446eSAtari911│ Title: [_________] │ 5155*9ccd446eSAtari911│ Date: [__________] │ 5156*9ccd446eSAtari911│ │ 5157*9ccd446eSAtari911│ ☑ Repeating Event │ ← Dark green bg 5158*9ccd446eSAtari911├──────────────────────────┤ 5159*9ccd446eSAtari911│ ☑ Task checkbox │ ← Dark green bg 5160*9ccd446eSAtari911├──────────────────────────┤ 5161*9ccd446eSAtari911│ [Cancel] [ Save] │ 5162*9ccd446eSAtari911└──────────────────────────┘ 5163*9ccd446eSAtari911 5164*9ccd446eSAtari911All sections themed! ✓ 5165*9ccd446eSAtari911``` 5166*9ccd446eSAtari911 5167*9ccd446eSAtari911**Matrix Day Popup**: 5168*9ccd446eSAtari911``` 5169*9ccd446eSAtari911┌──────────────────────────┐ 5170*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Green header 5171*9ccd446eSAtari911├──────────────────────────┤ 5172*9ccd446eSAtari911│ ┌──────────────────────┐ │ 5173*9ccd446eSAtari911│ │ Team Meeting │ │ ← Dark green 5174*9ccd446eSAtari911│ │ 2:00 PM │ │ 5175*9ccd446eSAtari911│ └──────────────────────┘ │ 5176*9ccd446eSAtari911│ ┌──────────────────────┐ │ 5177*9ccd446eSAtari911│ │ Code Review │ │ ← Dark green 5178*9ccd446eSAtari911│ │ 4:00 PM │ │ 5179*9ccd446eSAtari911│ └──────────────────────┘ │ 5180*9ccd446eSAtari911├──────────────────────────┤ 5181*9ccd446eSAtari911│ [+ Add Event] │ ← Green button 5182*9ccd446eSAtari911└──────────────────────────┘ 5183*9ccd446eSAtari911``` 5184*9ccd446eSAtari911 5185*9ccd446eSAtari911**Purple Day Popup**: 5186*9ccd446eSAtari911``` 5187*9ccd446eSAtari911┌──────────────────────────┐ 5188*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Purple header 5189*9ccd446eSAtari911├──────────────────────────┤ 5190*9ccd446eSAtari911│ ┌──────────────────────┐ │ 5191*9ccd446eSAtari911│ │ Team Meeting │ │ ← Dark purple 5192*9ccd446eSAtari911│ │ 2:00 PM │ │ 5193*9ccd446eSAtari911│ └──────────────────────┘ │ 5194*9ccd446eSAtari911├──────────────────────────┤ 5195*9ccd446eSAtari911│ [+ Add Event] │ ← Purple button 5196*9ccd446eSAtari911└──────────────────────────┘ 5197*9ccd446eSAtari911``` 5198*9ccd446eSAtari911 5199*9ccd446eSAtari911**Professional Day Popup**: 5200*9ccd446eSAtari911``` 5201*9ccd446eSAtari911┌──────────────────────────┐ 5202*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Light header 5203*9ccd446eSAtari911├──────────────────────────┤ 5204*9ccd446eSAtari911│ ┌──────────────────────┐ │ 5205*9ccd446eSAtari911│ │ Team Meeting │ │ ← White 5206*9ccd446eSAtari911│ │ 2:00 PM │ │ 5207*9ccd446eSAtari911│ └──────────────────────┘ │ 5208*9ccd446eSAtari911├──────────────────────────┤ 5209*9ccd446eSAtari911│ [+ Add Event] │ ← Blue button 5210*9ccd446eSAtari911└──────────────────────────┘ 5211*9ccd446eSAtari911``` 5212*9ccd446eSAtari911 5213*9ccd446eSAtari911**Pink Day Popup**: 5214*9ccd446eSAtari911``` 5215*9ccd446eSAtari911┌──────────────────────────┐ 5216*9ccd446eSAtari911│ Monday, February 8, 2026 │ ← Pink header ✨ 5217*9ccd446eSAtari911├──────────────────────────┤ 5218*9ccd446eSAtari911│ ┌──────────────────────┐ │ 5219*9ccd446eSAtari911│ │ Team Meeting │ │ ← Dark pink 5220*9ccd446eSAtari911│ │ 2:00 PM │ │ 5221*9ccd446eSAtari911│ └──────────────────────┘ │ 5222*9ccd446eSAtari911├──────────────────────────┤ 5223*9ccd446eSAtari911│ [+ Add Event] │ ← Pink button 5224*9ccd446eSAtari911└──────────────────────────┘ 5225*9ccd446eSAtari911``` 5226*9ccd446eSAtari911 5227*9ccd446eSAtari911### Checkbox Theming 5228*9ccd446eSAtari911 5229*9ccd446eSAtari911**Unchecked boxes now themed**: 5230*9ccd446eSAtari911``` 5231*9ccd446eSAtari911Matrix: 5232*9ccd446eSAtari911☐ → Dark green bg, green border ✓ 5233*9ccd446eSAtari911 5234*9ccd446eSAtari911Purple: 5235*9ccd446eSAtari911☐ → Dark purple bg, purple border ✓ 5236*9ccd446eSAtari911 5237*9ccd446eSAtari911Professional: 5238*9ccd446eSAtari911☐ → White bg, gray border ✓ 5239*9ccd446eSAtari911 5240*9ccd446eSAtari911Pink: 5241*9ccd446eSAtari911☐ → Dark pink bg, pink border ✓ 5242*9ccd446eSAtari911``` 5243*9ccd446eSAtari911 5244*9ccd446eSAtari911### Complete Coverage 5245*9ccd446eSAtari911 5246*9ccd446eSAtari911**Edit Dialog - All Sections**: 5247*9ccd446eSAtari911- ✅ Header 5248*9ccd446eSAtari911- ✅ All inputs 5249*9ccd446eSAtari911- ✅ All labels 5250*9ccd446eSAtari911- ✅ **Checkbox sections** ← v4.8.7! 5251*9ccd446eSAtari911- ✅ Recurring options 5252*9ccd446eSAtari911- ✅ Button footer 5253*9ccd446eSAtari911- ✅ All checkboxes (checked & unchecked) 5254*9ccd446eSAtari911 5255*9ccd446eSAtari911**Day Popup - All Elements**: 5256*9ccd446eSAtari911- ✅ **Popup container** ← v4.8.7! 5257*9ccd446eSAtari911- ✅ **Header** ← v4.8.7! 5258*9ccd446eSAtari911- ✅ **Body** ← v4.8.7! 5259*9ccd446eSAtari911- ✅ **Event items** ← v4.8.7! 5260*9ccd446eSAtari911- ✅ **Namespace badges** ← v4.8.7! 5261*9ccd446eSAtari911- ✅ **Footer** ← v4.8.7! 5262*9ccd446eSAtari911- ✅ **Add Event button** ← v4.8.7! 5263*9ccd446eSAtari911- ✅ **No events message** ← v4.8.7! 5264*9ccd446eSAtari911 5265*9ccd446eSAtari911**Absolutely every dialog element themed!** ✨ 5266*9ccd446eSAtari911 5267*9ccd446eSAtari911### Perfect Theming Achievement 5268*9ccd446eSAtari911 5269*9ccd446eSAtari911**Every UI component in entire plugin**: 5270*9ccd446eSAtari911- ✅ Calendar grid 5271*9ccd446eSAtari911- ✅ Sidebar widget 5272*9ccd446eSAtari911- ✅ Event list 5273*9ccd446eSAtari911- ✅ Search bar 5274*9ccd446eSAtari911- ✅ Event boxes 5275*9ccd446eSAtari911- ✅ Edit dialog (complete) 5276*9ccd446eSAtari911- ✅ **Day popup** ← v4.8.7! 5277*9ccd446eSAtari911- ✅ Month picker 5278*9ccd446eSAtari911- ✅ All text 5279*9ccd446eSAtari911- ✅ All buttons 5280*9ccd446eSAtari911- ✅ All inputs 5281*9ccd446eSAtari911- ✅ **All checkboxes** ← v4.8.7! 5282*9ccd446eSAtari911- ✅ All borders 5283*9ccd446eSAtari911- ✅ All badges 5284*9ccd446eSAtari911- ✅ All backgrounds 5285*9ccd446eSAtari911 5286*9ccd446eSAtari911**NO WHITE ANYWHERE!** 5287*9ccd446eSAtari911 5288*9ccd446eSAtari911**100% COMPLETE THEMING ACHIEVED!** ✨ 5289*9ccd446eSAtari911 5290*9ccd446eSAtari911## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 5291*9ccd446eSAtari911 5292*9ccd446eSAtari911### Fixed: Dialog Checkbox Sections Themed 5293*9ccd446eSAtari911- **Fixed:** Recurring options section background themed 5294*9ccd446eSAtari911- **Fixed:** Section has themed border accent 5295*9ccd446eSAtari911- **Result:** No white sections in dialog! 5296*9ccd446eSAtari911 5297*9ccd446eSAtari911### Fixed: Dialog Button Section Themed 5298*9ccd446eSAtari911- **Fixed:** Button area background themed 5299*9ccd446eSAtari911- **Fixed:** Top border separator themed 5300*9ccd446eSAtari911- **Result:** Complete dialog theming! 5301*9ccd446eSAtari911 5302*9ccd446eSAtari911### Fixed: Event Box Borders Themed 5303*9ccd446eSAtari911- **Fixed:** Top, right, bottom borders now themed 5304*9ccd446eSAtari911- **Fixed:** Left border remains event color 5305*9ccd446eSAtari911- **Result:** Perfect event boxes! 5306*9ccd446eSAtari911 5307*9ccd446eSAtari911### All Changes 5308*9ccd446eSAtari911 5309*9ccd446eSAtari911**1. Recurring Options Section**: 5310*9ccd446eSAtari911 5311*9ccd446eSAtari911**Before**: 5312*9ccd446eSAtari911```html 5313*9ccd446eSAtari911<div class="recurring-options" style="display:none;"> 5314*9ccd446eSAtari911<!-- White background ✗ --> 5315*9ccd446eSAtari911``` 5316*9ccd446eSAtari911 5317*9ccd446eSAtari911**After**: 5318*9ccd446eSAtari911```php 5319*9ccd446eSAtari911<div class="recurring-options" 5320*9ccd446eSAtari911 style="display:none; 5321*9ccd446eSAtari911 background: $bg !important; 5322*9ccd446eSAtari911 padding: 8px; 5323*9ccd446eSAtari911 border-left: 2px solid $border; 5324*9ccd446eSAtari911 margin-left: 4px;"> 5325*9ccd446eSAtari911<!-- Themed with accent border ✓ --> 5326*9ccd446eSAtari911``` 5327*9ccd446eSAtari911 5328*9ccd446eSAtari911**2. Dialog Actions Section**: 5329*9ccd446eSAtari911 5330*9ccd446eSAtari911**Before**: 5331*9ccd446eSAtari911```html 5332*9ccd446eSAtari911<div class="dialog-actions-sleek"> 5333*9ccd446eSAtari911<!-- White background ✗ --> 5334*9ccd446eSAtari911``` 5335*9ccd446eSAtari911 5336*9ccd446eSAtari911**After**: 5337*9ccd446eSAtari911```php 5338*9ccd446eSAtari911<div class="dialog-actions-sleek" 5339*9ccd446eSAtari911 style="background: $bg !important; 5340*9ccd446eSAtari911 border-top: 1px solid $grid_border !important;"> 5341*9ccd446eSAtari911<!-- Themed with separator ✓ --> 5342*9ccd446eSAtari911``` 5343*9ccd446eSAtari911 5344*9ccd446eSAtari911**3. Event Box Borders**: 5345*9ccd446eSAtari911 5346*9ccd446eSAtari911**Before**: 5347*9ccd446eSAtari911```php 5348*9ccd446eSAtari911border-left-color: $event_color; 5349*9ccd446eSAtari911<!-- Only left border colored ✗ --> 5350*9ccd446eSAtari911``` 5351*9ccd446eSAtari911 5352*9ccd446eSAtari911**After**: 5353*9ccd446eSAtari911```php 5354*9ccd446eSAtari911border-left-color: $event_color; 5355*9ccd446eSAtari911border-top: 1px solid $grid_border !important; 5356*9ccd446eSAtari911border-right: 1px solid $grid_border !important; 5357*9ccd446eSAtari911border-bottom: 1px solid $grid_border !important; 5358*9ccd446eSAtari911<!-- All borders themed! ✓ --> 5359*9ccd446eSAtari911``` 5360*9ccd446eSAtari911 5361*9ccd446eSAtari911### Before vs After 5362*9ccd446eSAtari911 5363*9ccd446eSAtari911**BEFORE (v4.8.5)**: 5364*9ccd446eSAtari911``` 5365*9ccd446eSAtari911Dialog: 5366*9ccd446eSAtari911┌────────────────┐ 5367*9ccd446eSAtari911│ ☑ Repeating │ 5368*9ccd446eSAtari911├────────────────┤ ← White section ✗ 5369*9ccd446eSAtari911│ Repeat: Daily │ 5370*9ccd446eSAtari911│ Until: [____] │ 5371*9ccd446eSAtari911├────────────────┤ 5372*9ccd446eSAtari911│ [Cancel] [Save]│ ← White footer ✗ 5373*9ccd446eSAtari911└────────────────┘ 5374*9ccd446eSAtari911 5375*9ccd446eSAtari911Event Box: 5376*9ccd446eSAtari911┌────────────┐ 5377*9ccd446eSAtari911│Team Meeting│ ← White borders ✗ 5378*9ccd446eSAtari911│2:00 PM │ 5379*9ccd446eSAtari911└────────────┘ 5380*9ccd446eSAtari911``` 5381*9ccd446eSAtari911 5382*9ccd446eSAtari911**AFTER (v4.8.6)**: 5383*9ccd446eSAtari911``` 5384*9ccd446eSAtari911Matrix Dialog: 5385*9ccd446eSAtari911┌────────────────┐ 5386*9ccd446eSAtari911│ ☑ Repeating │ 5387*9ccd446eSAtari911├────────────────┤ ← Dark green ✓ 5388*9ccd446eSAtari911│ Repeat: Daily │ Green accent border 5389*9ccd446eSAtari911│ Until: [____] │ 5390*9ccd446eSAtari911├────────────────┤ 5391*9ccd446eSAtari911│ [Cancel] [Save]│ ← Dark green ✓ 5392*9ccd446eSAtari911└────────────────┘ 5393*9ccd446eSAtari911 5394*9ccd446eSAtari911Matrix Event Box: 5395*9ccd446eSAtari911┌────────────┐ 5396*9ccd446eSAtari911│Team Meeting│ ← Green borders ✓ 5397*9ccd446eSAtari911│2:00 PM │ 5398*9ccd446eSAtari911└────────────┘ 5399*9ccd446eSAtari911``` 5400*9ccd446eSAtari911 5401*9ccd446eSAtari911### Dialog Section Examples 5402*9ccd446eSAtari911 5403*9ccd446eSAtari911**Matrix Theme**: 5404*9ccd446eSAtari911``` 5405*9ccd446eSAtari911┌──────────────────────────┐ 5406*9ccd446eSAtari911│ ✏️ Edit Event │ 5407*9ccd446eSAtari911├──────────────────────────┤ 5408*9ccd446eSAtari911│ ☑ Repeating Event │ 5409*9ccd446eSAtari911├║─────────────────────────┤ Green accent 5410*9ccd446eSAtari911│║ Repeat Every: Daily │ Dark green bg 5411*9ccd446eSAtari911│║ Repeat Until: [_____] │ 5412*9ccd446eSAtari911└──────────────────────────┘ 5413*9ccd446eSAtari911 [Cancel] [ Save] ← Dark green bg 5414*9ccd446eSAtari911──────────────────────────── Green border 5415*9ccd446eSAtari911``` 5416*9ccd446eSAtari911 5417*9ccd446eSAtari911**Purple Theme**: 5418*9ccd446eSAtari911``` 5419*9ccd446eSAtari911┌──────────────────────────┐ 5420*9ccd446eSAtari911│ ☑ Repeating Event │ 5421*9ccd446eSAtari911├║─────────────────────────┤ Purple accent 5422*9ccd446eSAtari911│║ Repeat options... │ Dark purple bg 5423*9ccd446eSAtari911└──────────────────────────┘ 5424*9ccd446eSAtari911 [Cancel] [ Save] ← Dark purple bg 5425*9ccd446eSAtari911──────────────────────────── Purple border 5426*9ccd446eSAtari911``` 5427*9ccd446eSAtari911 5428*9ccd446eSAtari911**Professional Theme**: 5429*9ccd446eSAtari911``` 5430*9ccd446eSAtari911┌──────────────────────────┐ 5431*9ccd446eSAtari911│ ☑ Repeating Event │ 5432*9ccd446eSAtari911├║─────────────────────────┤ Blue accent 5433*9ccd446eSAtari911│║ Repeat options... │ Light bg 5434*9ccd446eSAtari911└──────────────────────────┘ 5435*9ccd446eSAtari911 [Cancel] [ Save] ← Light bg 5436*9ccd446eSAtari911──────────────────────────── Gray border 5437*9ccd446eSAtari911``` 5438*9ccd446eSAtari911 5439*9ccd446eSAtari911**Pink Theme**: 5440*9ccd446eSAtari911``` 5441*9ccd446eSAtari911┌──────────────────────────┐ 5442*9ccd446eSAtari911│ ☑ Repeating Event ✨ │ 5443*9ccd446eSAtari911├║─────────────────────────┤ Pink accent 5444*9ccd446eSAtari911│║ Repeat options... │ Dark pink bg 5445*9ccd446eSAtari911└──────────────────────────┘ 5446*9ccd446eSAtari911 [Cancel] [ Save] ← Dark pink bg 5447*9ccd446eSAtari911──────────────────────────── Pink border 5448*9ccd446eSAtari911``` 5449*9ccd446eSAtari911 5450*9ccd446eSAtari911### Event Box Border Visual 5451*9ccd446eSAtari911 5452*9ccd446eSAtari911**Before (v4.8.5)**: 5453*9ccd446eSAtari911``` 5454*9ccd446eSAtari911Left border only: 5455*9ccd446eSAtari911█ Team Meeting 5456*9ccd446eSAtari911█ 2:00 PM 5457*9ccd446eSAtari911█ [Edit] [Delete] 5458*9ccd446eSAtari911 5459*9ccd446eSAtari911Only event color on left ✗ 5460*9ccd446eSAtari911White on other 3 sides ✗ 5461*9ccd446eSAtari911``` 5462*9ccd446eSAtari911 5463*9ccd446eSAtari911**After (v4.8.6)**: 5464*9ccd446eSAtari911``` 5465*9ccd446eSAtari911All borders themed: 5466*9ccd446eSAtari911┌─────────────┐ 5467*9ccd446eSAtari911█Team Meeting │ ← Top: themed 5468*9ccd446eSAtari911█2:00 PM │ ← Right: themed 5469*9ccd446eSAtari911█[Edit][Del] │ ← Bottom: themed 5470*9ccd446eSAtari911└─────────────┘ 5471*9ccd446eSAtari911 5472*9ccd446eSAtari911Left: Event color ✓ 5473*9ccd446eSAtari911Other 3: Theme grid_border ✓ 5474*9ccd446eSAtari911``` 5475*9ccd446eSAtari911 5476*9ccd446eSAtari911### Matrix Event Box: 5477*9ccd446eSAtari911``` 5478*9ccd446eSAtari911┌─────────────┐ Green border 5479*9ccd446eSAtari911│Team Meeting │ 5480*9ccd446eSAtari911│2:00 PM │ 5481*9ccd446eSAtari911└─────────────┘ Green border 5482*9ccd446eSAtari911↑ 5483*9ccd446eSAtari911Green left bar 5484*9ccd446eSAtari911``` 5485*9ccd446eSAtari911 5486*9ccd446eSAtari911### Purple Event Box: 5487*9ccd446eSAtari911``` 5488*9ccd446eSAtari911┌─────────────┐ Purple border 5489*9ccd446eSAtari911│Team Meeting │ 5490*9ccd446eSAtari911│2:00 PM │ 5491*9ccd446eSAtari911└─────────────┘ Purple border 5492*9ccd446eSAtari911↑ 5493*9ccd446eSAtari911Purple left bar 5494*9ccd446eSAtari911``` 5495*9ccd446eSAtari911 5496*9ccd446eSAtari911### Professional Event Box: 5497*9ccd446eSAtari911``` 5498*9ccd446eSAtari911┌─────────────┐ Gray border 5499*9ccd446eSAtari911│Team Meeting │ 5500*9ccd446eSAtari911│2:00 PM │ 5501*9ccd446eSAtari911└─────────────┘ Gray border 5502*9ccd446eSAtari911↑ 5503*9ccd446eSAtari911Event color left bar 5504*9ccd446eSAtari911``` 5505*9ccd446eSAtari911 5506*9ccd446eSAtari911### Complete Dialog Coverage 5507*9ccd446eSAtari911 5508*9ccd446eSAtari911**All sections themed**: 5509*9ccd446eSAtari911- ✅ Dialog header 5510*9ccd446eSAtari911- ✅ Form inputs 5511*9ccd446eSAtari911- ✅ Checkbox labels 5512*9ccd446eSAtari911- ✅ **Recurring options** ← v4.8.6! 5513*9ccd446eSAtari911- ✅ **Button section** ← v4.8.6! 5514*9ccd446eSAtari911- ✅ All labels 5515*9ccd446eSAtari911- ✅ All buttons 5516*9ccd446eSAtari911 5517*9ccd446eSAtari911**No white sections!** ✓ 5518*9ccd446eSAtari911 5519*9ccd446eSAtari911### Complete Event Box Coverage 5520*9ccd446eSAtari911 5521*9ccd446eSAtari911**All borders themed**: 5522*9ccd446eSAtari911- ✅ Left border (event color) 5523*9ccd446eSAtari911- ✅ **Top border** ← v4.8.6! 5524*9ccd446eSAtari911- ✅ **Right border** ← v4.8.6! 5525*9ccd446eSAtari911- ✅ **Bottom border** ← v4.8.6! 5526*9ccd446eSAtari911- ✅ Background 5527*9ccd446eSAtari911- ✅ Text 5528*9ccd446eSAtari911 5529*9ccd446eSAtari911**Perfect box outline!** ✓ 5530*9ccd446eSAtari911 5531*9ccd446eSAtari911### Visual Perfection 5532*9ccd446eSAtari911 5533*9ccd446eSAtari911**Matrix theme event list**: 5534*9ccd446eSAtari911``` 5535*9ccd446eSAtari911┌─────────────┐ 5536*9ccd446eSAtari911│Team Meeting │ ← Green box 5537*9ccd446eSAtari911│2:00 PM │ 5538*9ccd446eSAtari911└─────────────┘ 5539*9ccd446eSAtari911┌─────────────┐ 5540*9ccd446eSAtari911│Code Review │ ← Green box 5541*9ccd446eSAtari911│4:00 PM │ 5542*9ccd446eSAtari911└─────────────┘ 5543*9ccd446eSAtari911 5544*9ccd446eSAtari911All borders green! ✓ 5545*9ccd446eSAtari911``` 5546*9ccd446eSAtari911 5547*9ccd446eSAtari911**ABSOLUTE PERFECT THEMING!** ✨ 5548*9ccd446eSAtari911 5549*9ccd446eSAtari911## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 5550*9ccd446eSAtari911 5551*9ccd446eSAtari911### Fixed: Event Dialog Fully Themed 5552*9ccd446eSAtari911- **Fixed:** Dialog background, header, inputs all themed 5553*9ccd446eSAtari911- **Fixed:** All labels, checkboxes, selects themed 5554*9ccd446eSAtari911- **Fixed:** Save and Cancel buttons themed 5555*9ccd446eSAtari911- **Result:** Dialog matches theme perfectly! 5556*9ccd446eSAtari911 5557*9ccd446eSAtari911### Fixed: Sidebar Event Borders Properly Themed 5558*9ccd446eSAtari911- **Fixed:** Event divider borders use grid_border color 5559*9ccd446eSAtari911- **Fixed:** Clean, subtle themed dividers 5560*9ccd446eSAtari911- **Result:** No more white borders in sidebar! 5561*9ccd446eSAtari911 5562*9ccd446eSAtari911### All Changes 5563*9ccd446eSAtari911 5564*9ccd446eSAtari911**1. Event Dialog Theming**: 5565*9ccd446eSAtari911 5566*9ccd446eSAtari911**Dialog container**: 5567*9ccd446eSAtari911```php 5568*9ccd446eSAtari911background: $themeStyles['bg'] !important; 5569*9ccd446eSAtari911border: 2px solid $themeStyles['border'] !important; 5570*9ccd446eSAtari911box-shadow: 0 0 20px $shadow !important; 5571*9ccd446eSAtari911``` 5572*9ccd446eSAtari911 5573*9ccd446eSAtari911**Dialog header**: 5574*9ccd446eSAtari911```php 5575*9ccd446eSAtari911background: $themeStyles['header_bg'] !important; 5576*9ccd446eSAtari911color: $themeStyles['text_primary'] !important; 5577*9ccd446eSAtari911border-bottom: 1px solid $border !important; 5578*9ccd446eSAtari911``` 5579*9ccd446eSAtari911 5580*9ccd446eSAtari911**All form inputs** (text, date, select, textarea): 5581*9ccd446eSAtari911```php 5582*9ccd446eSAtari911background: $themeStyles['cell_bg'] !important; 5583*9ccd446eSAtari911color: $themeStyles['text_primary'] !important; 5584*9ccd446eSAtari911border-color: $themeStyles['grid_border'] !important; 5585*9ccd446eSAtari911``` 5586*9ccd446eSAtari911 5587*9ccd446eSAtari911**All labels**: 5588*9ccd446eSAtari911```php 5589*9ccd446eSAtari911color: $themeStyles['text_primary'] !important; 5590*9ccd446eSAtari911``` 5591*9ccd446eSAtari911 5592*9ccd446eSAtari911**Checkboxes**: 5593*9ccd446eSAtari911```php 5594*9ccd446eSAtari911accent-color: $themeStyles['border'] !important; 5595*9ccd446eSAtari911``` 5596*9ccd446eSAtari911 5597*9ccd446eSAtari911**Buttons**: 5598*9ccd446eSAtari911```php 5599*9ccd446eSAtari911// Cancel button: 5600*9ccd446eSAtari911background: $cell_bg !important; 5601*9ccd446eSAtari911color: $text_primary !important; 5602*9ccd446eSAtari911 5603*9ccd446eSAtari911// Save button: 5604*9ccd446eSAtari911background: $border !important; 5605*9ccd446eSAtari911color: $bg !important; (or white for professional) 5606*9ccd446eSAtari911``` 5607*9ccd446eSAtari911 5608*9ccd446eSAtari911**2. Sidebar Event Borders**: 5609*9ccd446eSAtari911 5610*9ccd446eSAtari911**Before**: 5611*9ccd446eSAtari911```php 5612*9ccd446eSAtari911border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 5613*9ccd446eSAtari911``` 5614*9ccd446eSAtari911 5615*9ccd446eSAtari911**After**: 5616*9ccd446eSAtari911```php 5617*9ccd446eSAtari911borderColor = $themeStyles['grid_border']; 5618*9ccd446eSAtari911border-bottom: 1px solid $borderColor !important; 5619*9ccd446eSAtari911``` 5620*9ccd446eSAtari911 5621*9ccd446eSAtari911### Before vs After 5622*9ccd446eSAtari911 5623*9ccd446eSAtari911**BEFORE (v4.8.4)**: 5624*9ccd446eSAtari911``` 5625*9ccd446eSAtari911Event Dialog: 5626*9ccd446eSAtari911┌────────────────┐ 5627*9ccd446eSAtari911│ Add Event │ ← White background ✗ 5628*9ccd446eSAtari911│ Title: [_____] │ ← White inputs ✗ 5629*9ccd446eSAtari911│ Date: [_____] │ 5630*9ccd446eSAtari911│ [Cancel] [Save]│ ← Default buttons ✗ 5631*9ccd446eSAtari911└────────────────┘ 5632*9ccd446eSAtari911 5633*9ccd446eSAtari911Sidebar Events: 5634*9ccd446eSAtari911Event 1 ──────── ← White border ✗ 5635*9ccd446eSAtari911Event 2 ──────── ← White border ✗ 5636*9ccd446eSAtari911``` 5637*9ccd446eSAtari911 5638*9ccd446eSAtari911**AFTER (v4.8.5)**: 5639*9ccd446eSAtari911``` 5640*9ccd446eSAtari911Event Dialog (Matrix): 5641*9ccd446eSAtari911┌────────────────┐ 5642*9ccd446eSAtari911│ Add Event │ ← Dark green background ✓ 5643*9ccd446eSAtari911│ Title: [_____] │ ← Dark green inputs ✓ 5644*9ccd446eSAtari911│ Date: [_____] │ ← Green text ✓ 5645*9ccd446eSAtari911│ [Cancel] [Save]│ ← Themed buttons ✓ 5646*9ccd446eSAtari911└────────────────┘ 5647*9ccd446eSAtari911 5648*9ccd446eSAtari911Sidebar Events (Matrix): 5649*9ccd446eSAtari911Event 1 ──────── ← Green border ✓ 5650*9ccd446eSAtari911Event 2 ──────── ← Green border ✓ 5651*9ccd446eSAtari911``` 5652*9ccd446eSAtari911 5653*9ccd446eSAtari911### Dialog Examples by Theme 5654*9ccd446eSAtari911 5655*9ccd446eSAtari911**Matrix Dialog**: 5656*9ccd446eSAtari911``` 5657*9ccd446eSAtari911┌──────────────────────────┐ 5658*9ccd446eSAtari911│ ✏️ Edit Event │ ← Dark green header 5659*9ccd446eSAtari911├──────────────────────────┤ 5660*9ccd446eSAtari911│ Title │ ← Green labels 5661*9ccd446eSAtari911│ [Team Meeting________] │ ← Dark green input 5662*9ccd446eSAtari911│ │ 5663*9ccd446eSAtari911│ Start Date │ 5664*9ccd446eSAtari911│ [2026-02-08__] │ ← Dark green input 5665*9ccd446eSAtari911│ │ 5666*9ccd446eSAtari911│ Start Time │ 5667*9ccd446eSAtari911│ [2:00 PM ▼] │ ← Green select 5668*9ccd446eSAtari911│ │ 5669*9ccd446eSAtari911│ ☑ Repeating Event │ ← Green checkbox 5670*9ccd446eSAtari911│ │ 5671*9ccd446eSAtari911│ [Cancel] [ Save] │ ← Themed buttons 5672*9ccd446eSAtari911└──────────────────────────┘ 5673*9ccd446eSAtari911 5674*9ccd446eSAtari911Everything green! ✓ 5675*9ccd446eSAtari911``` 5676*9ccd446eSAtari911 5677*9ccd446eSAtari911**Purple Dialog**: 5678*9ccd446eSAtari911``` 5679*9ccd446eSAtari911┌──────────────────────────┐ 5680*9ccd446eSAtari911│ ✏️ Edit Event │ ← Dark purple header 5681*9ccd446eSAtari911├──────────────────────────┤ 5682*9ccd446eSAtari911│ [Inputs_______________] │ ← Dark purple inputs 5683*9ccd446eSAtari911│ ☑ Checkboxes │ ← Purple accent 5684*9ccd446eSAtari911│ [Cancel] [ Save] │ ← Purple buttons 5685*9ccd446eSAtari911└──────────────────────────┘ 5686*9ccd446eSAtari911``` 5687*9ccd446eSAtari911 5688*9ccd446eSAtari911**Professional Dialog**: 5689*9ccd446eSAtari911``` 5690*9ccd446eSAtari911┌──────────────────────────┐ 5691*9ccd446eSAtari911│ ✏️ Edit Event │ ← Light gradient header 5692*9ccd446eSAtari911├──────────────────────────┤ 5693*9ccd446eSAtari911│ [Inputs_______________] │ ← White inputs 5694*9ccd446eSAtari911│ ☑ Checkboxes │ ← Blue accent 5695*9ccd446eSAtari911│ [Cancel] [ Save] │ ← Blue save button 5696*9ccd446eSAtari911└──────────────────────────┘ 5697*9ccd446eSAtari911``` 5698*9ccd446eSAtari911 5699*9ccd446eSAtari911**Pink Dialog**: 5700*9ccd446eSAtari911``` 5701*9ccd446eSAtari911┌──────────────────────────┐ 5702*9ccd446eSAtari911│ ✏️ Edit Event │ ← Dark pink header ✨ 5703*9ccd446eSAtari911├──────────────────────────┤ 5704*9ccd446eSAtari911│ [Inputs_______________] │ ← Dark pink inputs 5705*9ccd446eSAtari911│ ☑ Checkboxes │ ← Pink accent 5706*9ccd446eSAtari911│ [Cancel] [ Save] │ ← Pink buttons 5707*9ccd446eSAtari911└──────────────────────────┘ 5708*9ccd446eSAtari911``` 5709*9ccd446eSAtari911 5710*9ccd446eSAtari911### Complete Dialog Element Coverage 5711*9ccd446eSAtari911 5712*9ccd446eSAtari911**All form elements themed**: 5713*9ccd446eSAtari911- ✅ Dialog container 5714*9ccd446eSAtari911- ✅ Dialog header 5715*9ccd446eSAtari911- ✅ Close button (×) 5716*9ccd446eSAtari911- ✅ Title input 5717*9ccd446eSAtari911- ✅ Namespace search 5718*9ccd446eSAtari911- ✅ Namespace dropdown 5719*9ccd446eSAtari911- ✅ Description textarea 5720*9ccd446eSAtari911- ✅ Start date input 5721*9ccd446eSAtari911- ✅ End date input 5722*9ccd446eSAtari911- ✅ Recurring checkbox 5723*9ccd446eSAtari911- ✅ Recurrence type select 5724*9ccd446eSAtari911- ✅ Recurrence end date 5725*9ccd446eSAtari911- ✅ Start time select 5726*9ccd446eSAtari911- ✅ End time select 5727*9ccd446eSAtari911- ✅ Color select 5728*9ccd446eSAtari911- ✅ Custom color picker 5729*9ccd446eSAtari911- ✅ Task checkbox 5730*9ccd446eSAtari911- ✅ All labels 5731*9ccd446eSAtari911- ✅ Cancel button 5732*9ccd446eSAtari911- ✅ Save button 5733*9ccd446eSAtari911 5734*9ccd446eSAtari911**Every single dialog element themed!** 5735*9ccd446eSAtari911 5736*9ccd446eSAtari911### Sidebar Border Example 5737*9ccd446eSAtari911 5738*9ccd446eSAtari911**Matrix Sidebar**: 5739*9ccd446eSAtari911``` 5740*9ccd446eSAtari911┌────────────────┐ 5741*9ccd446eSAtari911│ Today │ ← Green section header 5742*9ccd446eSAtari911├────────────────┤ 5743*9ccd446eSAtari911│ Team Meeting │ 5744*9ccd446eSAtari911│ 2:00 PM │ 5745*9ccd446eSAtari911├────────────────┤ ← Green border (grid_border) 5746*9ccd446eSAtari911│ Code Review │ 5747*9ccd446eSAtari911│ 4:00 PM │ 5748*9ccd446eSAtari911├────────────────┤ ← Green border 5749*9ccd446eSAtari911│ Stand-up │ 5750*9ccd446eSAtari911│ All day │ 5751*9ccd446eSAtari911└────────────────┘ 5752*9ccd446eSAtari911 5753*9ccd446eSAtari911Subtle green dividers! ✓ 5754*9ccd446eSAtari911``` 5755*9ccd446eSAtari911 5756*9ccd446eSAtari911### Complete Achievement 5757*9ccd446eSAtari911 5758*9ccd446eSAtari911**Every UI element themed**: 5759*9ccd446eSAtari911- ✅ Calendar 5760*9ccd446eSAtari911- ✅ Sidebar widget 5761*9ccd446eSAtari911- ✅ Event list 5762*9ccd446eSAtari911- ✅ Search bar 5763*9ccd446eSAtari911- ✅ **Event dialog** ← v4.8.5! 5764*9ccd446eSAtari911- ✅ Month picker 5765*9ccd446eSAtari911- ✅ **Sidebar dividers** ← v4.8.5! 5766*9ccd446eSAtari911- ✅ All text 5767*9ccd446eSAtari911- ✅ All inputs 5768*9ccd446eSAtari911- ✅ All buttons 5769*9ccd446eSAtari911- ✅ All borders 5770*9ccd446eSAtari911- ✅ All checkboxes 5771*9ccd446eSAtari911 5772*9ccd446eSAtari911**ABSOLUTE COMPLETE THEMING!** ✨ 5773*9ccd446eSAtari911 5774*9ccd446eSAtari911## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 5775*9ccd446eSAtari911 5776*9ccd446eSAtari911### Fixed: Professional Theme Background Consistency 5777*9ccd446eSAtari911- **Fixed:** Container and event backgrounds now match sidebar 5778*9ccd446eSAtari911- **Fixed:** Lighter, cleaner appearance 5779*9ccd446eSAtari911- **Fixed:** Better contrast and readability 5780*9ccd446eSAtari911- **Result:** Professional theme looks cohesive! 5781*9ccd446eSAtari911 5782*9ccd446eSAtari911### The Problem 5783*9ccd446eSAtari911 5784*9ccd446eSAtari911**v4.8.3 Professional theme**: 5785*9ccd446eSAtari911``` 5786*9ccd446eSAtari911Sidebar: Light background (#f5f7fa) 5787*9ccd446eSAtari911Calendar: Medium background (#e8ecf1) ← Didn't match! 5788*9ccd446eSAtari911Events: Light background (#f5f7fa) 5789*9ccd446eSAtari911 5790*9ccd446eSAtari911Inconsistent! ✗ 5791*9ccd446eSAtari911``` 5792*9ccd446eSAtari911 5793*9ccd446eSAtari911### The Fix 5794*9ccd446eSAtari911 5795*9ccd446eSAtari911**Updated Professional theme colors for consistency**: 5796*9ccd446eSAtari911 5797*9ccd446eSAtari911```php 5798*9ccd446eSAtari911// Before: 5799*9ccd446eSAtari911'bg' => '#e8ecf1', // Medium gray-blue 5800*9ccd446eSAtari911'cell_bg' => '#f5f7fa', // Very light 5801*9ccd446eSAtari911'grid_bg' => '#d5dbe3', // Medium-dark 5802*9ccd446eSAtari911 5803*9ccd446eSAtari911// After: 5804*9ccd446eSAtari911'bg' => '#f5f7fa', // Very light (matches sidebar) 5805*9ccd446eSAtari911'cell_bg' => '#ffffff', // Pure white (clean) 5806*9ccd446eSAtari911'grid_bg' => '#e8ecf1', // Subtle contrast 5807*9ccd446eSAtari911'grid_border' => '#d0d7de', // Softer borders 5808*9ccd446eSAtari911``` 5809*9ccd446eSAtari911 5810*9ccd446eSAtari911### Before vs After 5811*9ccd446eSAtari911 5812*9ccd446eSAtari911**BEFORE (v4.8.3)**: 5813*9ccd446eSAtari911``` 5814*9ccd446eSAtari911Professional Theme: 5815*9ccd446eSAtari911┌────────────────┐ 5816*9ccd446eSAtari911│ Calendar │ ← Medium gray (#e8ecf1) 5817*9ccd446eSAtari911│ ┌────────────┐ │ 5818*9ccd446eSAtari911│ │ Event │ │ ← Light (#f5f7fa) 5819*9ccd446eSAtari911│ └────────────┘ │ 5820*9ccd446eSAtari911└────────────────┘ 5821*9ccd446eSAtari911 5822*9ccd446eSAtari911Sidebar: 5823*9ccd446eSAtari911┌────────────────┐ 5824*9ccd446eSAtari911│ Widget │ ← Light (#f5f7fa) 5825*9ccd446eSAtari911└────────────────┘ 5826*9ccd446eSAtari911 5827*9ccd446eSAtari911Backgrounds don't match! ✗ 5828*9ccd446eSAtari911``` 5829*9ccd446eSAtari911 5830*9ccd446eSAtari911**AFTER (v4.8.4)**: 5831*9ccd446eSAtari911``` 5832*9ccd446eSAtari911Professional Theme: 5833*9ccd446eSAtari911┌────────────────┐ 5834*9ccd446eSAtari911│ Calendar │ ← Light (#f5f7fa) 5835*9ccd446eSAtari911│ ┌────────────┐ │ 5836*9ccd446eSAtari911│ │ Event │ │ ← White (#ffffff) 5837*9ccd446eSAtari911│ └────────────┘ │ 5838*9ccd446eSAtari911└────────────────┘ 5839*9ccd446eSAtari911 5840*9ccd446eSAtari911Sidebar: 5841*9ccd446eSAtari911┌────────────────┐ 5842*9ccd446eSAtari911│ Widget │ ← Light (#f5f7fa) 5843*9ccd446eSAtari911└────────────────┘ 5844*9ccd446eSAtari911 5845*9ccd446eSAtari911Perfect match! ✓ 5846*9ccd446eSAtari911``` 5847*9ccd446eSAtari911 5848*9ccd446eSAtari911### New Professional Theme Colors 5849*9ccd446eSAtari911 5850*9ccd446eSAtari911**Backgrounds**: 5851*9ccd446eSAtari911- Container: `#f5f7fa` (light blue-gray) 5852*9ccd446eSAtari911- Events: `#ffffff` (pure white) 5853*9ccd446eSAtari911- Grid: `#e8ecf1` (subtle contrast) 5854*9ccd446eSAtari911 5855*9ccd446eSAtari911**Text**: 5856*9ccd446eSAtari911- Primary: `#2c3e50` (dark blue-gray) 5857*9ccd446eSAtari911- Bright: `#4a90e2` (blue accent) 5858*9ccd446eSAtari911- Dim: `#7f8c8d` (medium gray) 5859*9ccd446eSAtari911 5860*9ccd446eSAtari911**Borders**: 5861*9ccd446eSAtari911- Main: `#4a90e2` (blue) 5862*9ccd446eSAtari911- Grid: `#d0d7de` (soft gray) 5863*9ccd446eSAtari911 5864*9ccd446eSAtari911**Header**: 5865*9ccd446eSAtari911- Gradient: `#ffffff` → `#f5f7fa` 5866*9ccd446eSAtari911 5867*9ccd446eSAtari911### Visual Example 5868*9ccd446eSAtari911 5869*9ccd446eSAtari911**Professional Theme Now**: 5870*9ccd446eSAtari911``` 5871*9ccd446eSAtari911┌─────────────────────────────┐ 5872*9ccd446eSAtari911│ February 2026 │ ← White to light gradient 5873*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 5874*9ccd446eSAtari911│S│M│T│W│T│F│S│ │ ← Light background 5875*9ccd446eSAtari911├─┼─┼─┼─┼─┼─┼─┤ │ 5876*9ccd446eSAtari911│ │ │1│2│3│4│5│ Event List │ ← White events 5877*9ccd446eSAtari911│ │ │ │ │ │ │ │ ┌───────────┐ │ 5878*9ccd446eSAtari911│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 5879*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 5880*9ccd446eSAtari911 5881*9ccd446eSAtari911Clean, professional look! ✓ 5882*9ccd446eSAtari911``` 5883*9ccd446eSAtari911 5884*9ccd446eSAtari911### Comparison with Other Themes 5885*9ccd446eSAtari911 5886*9ccd446eSAtari911**Matrix** (dark): 5887*9ccd446eSAtari911- Container: #242424 (dark green) 5888*9ccd446eSAtari911- Events: #242424 (dark green) 5889*9ccd446eSAtari911- Consistent dark theme ✓ 5890*9ccd446eSAtari911 5891*9ccd446eSAtari911**Purple** (dark): 5892*9ccd446eSAtari911- Container: #1a0d14 (dark purple) 5893*9ccd446eSAtari911- Events: #2a2030 (dark purple) 5894*9ccd446eSAtari911- Consistent dark theme ✓ 5895*9ccd446eSAtari911 5896*9ccd446eSAtari911**Professional** (light): 5897*9ccd446eSAtari911- Container: #f5f7fa (light blue) 5898*9ccd446eSAtari911- Events: #ffffff (white) 5899*9ccd446eSAtari911- Consistent light theme ✓ 5900*9ccd446eSAtari911 5901*9ccd446eSAtari911**Pink** (dark): 5902*9ccd446eSAtari911- Container: #1a0d14 (dark pink) 5903*9ccd446eSAtari911- Events: #1a0d14 (dark pink) 5904*9ccd446eSAtari911- Consistent dark theme ✓ 5905*9ccd446eSAtari911 5906*9ccd446eSAtari911**All themes now consistent!** 5907*9ccd446eSAtari911 5908*9ccd446eSAtari911### Better Contrast 5909*9ccd446eSAtari911 5910*9ccd446eSAtari911**Professional theme improvements**: 5911*9ccd446eSAtari911 5912*9ccd446eSAtari911**Readability**: 5913*9ccd446eSAtari911- Dark text (#2c3e50) on white/light backgrounds ✓ 5914*9ccd446eSAtari911- Excellent contrast ratio ✓ 5915*9ccd446eSAtari911- Easy on the eyes ✓ 5916*9ccd446eSAtari911 5917*9ccd446eSAtari911**Visual hierarchy**: 5918*9ccd446eSAtari911- White events pop against light container ✓ 5919*9ccd446eSAtari911- Blue accents stand out ✓ 5920*9ccd446eSAtari911- Clean, modern look ✓ 5921*9ccd446eSAtari911 5922*9ccd446eSAtari911**Professional appearance**: 5923*9ccd446eSAtari911- Lighter = more corporate/business feel ✓ 5924*9ccd446eSAtari911- Clean whites = premium quality ✓ 5925*9ccd446eSAtari911- Subtle grays = sophisticated ✓ 5926*9ccd446eSAtari911 5927*9ccd446eSAtari911### Complete Theme Consistency 5928*9ccd446eSAtari911 5929*9ccd446eSAtari911**All themes now have matching backgrounds**: 5930*9ccd446eSAtari911 5931*9ccd446eSAtari911**Matrix**: 5932*9ccd446eSAtari911- Sidebar & Calendar both dark green ✓ 5933*9ccd446eSAtari911 5934*9ccd446eSAtari911**Purple**: 5935*9ccd446eSAtari911- Sidebar & Calendar both dark purple ✓ 5936*9ccd446eSAtari911 5937*9ccd446eSAtari911**Professional**: 5938*9ccd446eSAtari911- Sidebar & Calendar both light ✓ (v4.8.4!) 5939*9ccd446eSAtari911 5940*9ccd446eSAtari911**Pink**: 5941*9ccd446eSAtari911- Sidebar & Calendar both dark pink ✓ 5942*9ccd446eSAtari911 5943*9ccd446eSAtari911**Perfect visual unity across all views!** ✨ 5944*9ccd446eSAtari911 5945*9ccd446eSAtari911## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 5946*9ccd446eSAtari911 5947*9ccd446eSAtari911### Fixed: Bold Text in Descriptions Themed 5948*9ccd446eSAtari911- **Fixed:** **Bold text** now uses theme primary color 5949*9ccd446eSAtari911- **Fixed:** Both `**text**` and `__text__` syntax themed 5950*9ccd446eSAtari911- **Result:** Bold text matches theme! 5951*9ccd446eSAtari911 5952*9ccd446eSAtari911### Fixed: Search Bar Fully Themed 5953*9ccd446eSAtari911- **Fixed:** Search input has !important on all styles 5954*9ccd446eSAtari911- **Fixed:** Icon and placeholder text themed 5955*9ccd446eSAtari911- **Result:** Search bar perfectly themed! 5956*9ccd446eSAtari911 5957*9ccd446eSAtari911### Fixed: Sidebar Event Boxes Themed 5958*9ccd446eSAtari911- **Fixed:** Event borders in sidebar now use theme grid_border color 5959*9ccd446eSAtari911- **Fixed:** Borders have !important flag 5960*9ccd446eSAtari911- **Result:** Sidebar boxes match theme! 5961*9ccd446eSAtari911 5962*9ccd446eSAtari911### All Changes 5963*9ccd446eSAtari911 5964*9ccd446eSAtari911**1. Bold Text Styling**: 5965*9ccd446eSAtari911 5966*9ccd446eSAtari911**Before**: 5967*9ccd446eSAtari911```html 5968*9ccd446eSAtari911<strong>Bold text</strong> ← Default black 5969*9ccd446eSAtari911``` 5970*9ccd446eSAtari911 5971*9ccd446eSAtari911**After**: 5972*9ccd446eSAtari911```php 5973*9ccd446eSAtari911<strong style="color: $text_primary !important; font-weight:bold;"> 5974*9ccd446eSAtari911 Bold text 5975*9ccd446eSAtari911</strong> 5976*9ccd446eSAtari911 5977*9ccd446eSAtari911Matrix: Green bold ✓ 5978*9ccd446eSAtari911Purple: Lavender bold ✓ 5979*9ccd446eSAtari911Professional: Dark bold ✓ 5980*9ccd446eSAtari911Pink: Pink bold ✓ 5981*9ccd446eSAtari911``` 5982*9ccd446eSAtari911 5983*9ccd446eSAtari911**2. Search Bar**: 5984*9ccd446eSAtari911 5985*9ccd446eSAtari911**Before**: 5986*9ccd446eSAtari911```php 5987*9ccd446eSAtari911style="background: $bg; color: $text;" 5988*9ccd446eSAtari911Could be overridden by CSS 5989*9ccd446eSAtari911``` 5990*9ccd446eSAtari911 5991*9ccd446eSAtari911**After**: 5992*9ccd446eSAtari911```php 5993*9ccd446eSAtari911style="background: $bg !important; 5994*9ccd446eSAtari911 color: $text_primary !important; 5995*9ccd446eSAtari911 border-color: $grid_border !important;" 5996*9ccd446eSAtari911 5997*9ccd446eSAtari911Cannot be overridden! ✓ 5998*9ccd446eSAtari911``` 5999*9ccd446eSAtari911 6000*9ccd446eSAtari911**3. Sidebar Event Boxes**: 6001*9ccd446eSAtari911 6002*9ccd446eSAtari911**Before**: 6003*9ccd446eSAtari911```php 6004*9ccd446eSAtari911$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 6005*9ccd446eSAtari911``` 6006*9ccd446eSAtari911 6007*9ccd446eSAtari911**After**: 6008*9ccd446eSAtari911```php 6009*9ccd446eSAtari911$borderColor = $themeStyles['grid_border']; // From theme 6010*9ccd446eSAtari911border-bottom: 1px solid $borderColor !important; 6011*9ccd446eSAtari911 6012*9ccd446eSAtari911Matrix: Green borders ✓ 6013*9ccd446eSAtari911Purple: Purple borders ✓ 6014*9ccd446eSAtari911Professional: Gray borders ✓ 6015*9ccd446eSAtari911Pink: Pink borders ✓ 6016*9ccd446eSAtari911``` 6017*9ccd446eSAtari911 6018*9ccd446eSAtari911### Before vs After 6019*9ccd446eSAtari911 6020*9ccd446eSAtari911**BEFORE (v4.8.2)**: 6021*9ccd446eSAtari911``` 6022*9ccd446eSAtari911Event description: 6023*9ccd446eSAtari911"Please review **Q1 Goals** carefully" 6024*9ccd446eSAtari911 ↑ 6025*9ccd446eSAtari911 Black bold ✗ 6026*9ccd446eSAtari911 6027*9ccd446eSAtari911Search bar: 6028*9ccd446eSAtari911[ Search...] ← Gray placeholder ✗ 6029*9ccd446eSAtari911 6030*9ccd446eSAtari911Sidebar: 6031*9ccd446eSAtari911┌────────────┐ 6032*9ccd446eSAtari911│ Event 1 │ 6033*9ccd446eSAtari911├────────────┤ ← Gray border ✗ 6034*9ccd446eSAtari911│ Event 2 │ 6035*9ccd446eSAtari911└────────────┘ 6036*9ccd446eSAtari911``` 6037*9ccd446eSAtari911 6038*9ccd446eSAtari911**AFTER (v4.8.3)**: 6039*9ccd446eSAtari911``` 6040*9ccd446eSAtari911Matrix Theme: 6041*9ccd446eSAtari911 6042*9ccd446eSAtari911Event description: 6043*9ccd446eSAtari911"Please review **Q1 Goals** carefully" 6044*9ccd446eSAtari911 ↑ 6045*9ccd446eSAtari911 Green bold ✓ 6046*9ccd446eSAtari911 6047*9ccd446eSAtari911Search bar: 6048*9ccd446eSAtari911[ Search...] ← Green themed ✓ 6049*9ccd446eSAtari911 6050*9ccd446eSAtari911Sidebar: 6051*9ccd446eSAtari911┌────────────┐ 6052*9ccd446eSAtari911│ Event 1 │ 6053*9ccd446eSAtari911├────────────┤ ← Green border ✓ 6054*9ccd446eSAtari911│ Event 2 │ 6055*9ccd446eSAtari911└────────────┘ 6056*9ccd446eSAtari911``` 6057*9ccd446eSAtari911 6058*9ccd446eSAtari911### Examples by Theme 6059*9ccd446eSAtari911 6060*9ccd446eSAtari911**Matrix Theme**: 6061*9ccd446eSAtari911``` 6062*9ccd446eSAtari911Description: 6063*9ccd446eSAtari911"Check **important notes** and links" 6064*9ccd446eSAtari911 ↑ 6065*9ccd446eSAtari911 Green bold 6066*9ccd446eSAtari911 6067*9ccd446eSAtari911Sidebar boxes: 6068*9ccd446eSAtari911Event 1 6069*9ccd446eSAtari911───────── Green border 6070*9ccd446eSAtari911Event 2 6071*9ccd446eSAtari911───────── Green border 6072*9ccd446eSAtari911``` 6073*9ccd446eSAtari911 6074*9ccd446eSAtari911**Purple Theme**: 6075*9ccd446eSAtari911``` 6076*9ccd446eSAtari911Description: 6077*9ccd446eSAtari911"Review **agenda items** before meeting" 6078*9ccd446eSAtari911 ↑ 6079*9ccd446eSAtari911 Lavender bold 6080*9ccd446eSAtari911 6081*9ccd446eSAtari911Sidebar boxes: 6082*9ccd446eSAtari911Event 1 6083*9ccd446eSAtari911───────── Purple border 6084*9ccd446eSAtari911Event 2 6085*9ccd446eSAtari911───────── Purple border 6086*9ccd446eSAtari911``` 6087*9ccd446eSAtari911 6088*9ccd446eSAtari911**Professional Theme**: 6089*9ccd446eSAtari911``` 6090*9ccd446eSAtari911Description: 6091*9ccd446eSAtari911"Update **quarterly reports** by Friday" 6092*9ccd446eSAtari911 ↑ 6093*9ccd446eSAtari911 Dark bold 6094*9ccd446eSAtari911 6095*9ccd446eSAtari911Sidebar boxes: 6096*9ccd446eSAtari911Event 1 6097*9ccd446eSAtari911───────── Gray border 6098*9ccd446eSAtari911Event 2 6099*9ccd446eSAtari911───────── Gray border 6100*9ccd446eSAtari911``` 6101*9ccd446eSAtari911 6102*9ccd446eSAtari911**Pink Theme**: 6103*9ccd446eSAtari911``` 6104*9ccd446eSAtari911Description: 6105*9ccd446eSAtari911"Don't forget **party supplies** ✨" 6106*9ccd446eSAtari911 ↑ 6107*9ccd446eSAtari911 Pink bold 6108*9ccd446eSAtari911 6109*9ccd446eSAtari911Sidebar boxes: 6110*9ccd446eSAtari911Event 1 6111*9ccd446eSAtari911───────── Pink border 6112*9ccd446eSAtari911Event 2 ✨ 6113*9ccd446eSAtari911───────── Pink border 6114*9ccd446eSAtari911``` 6115*9ccd446eSAtari911 6116*9ccd446eSAtari911### Complete Formatting Coverage 6117*9ccd446eSAtari911 6118*9ccd446eSAtari911**Text formatting themed**: 6119*9ccd446eSAtari911- ✅ Regular text 6120*9ccd446eSAtari911- ✅ **Bold text** ← NEW! 6121*9ccd446eSAtari911- ✅ Links 6122*9ccd446eSAtari911- ✅ Italic text (inherits) 6123*9ccd446eSAtari911- ✅ Code (inherits) 6124*9ccd446eSAtari911 6125*9ccd446eSAtari911**UI elements themed**: 6126*9ccd446eSAtari911- ✅ Search bar ← Enhanced! 6127*9ccd446eSAtari911- ✅ Search icon ← Enhanced! 6128*9ccd446eSAtari911- ✅ Search placeholder ← Enhanced! 6129*9ccd446eSAtari911- ✅ Sidebar borders ← NEW! 6130*9ccd446eSAtari911- ✅ Event borders 6131*9ccd446eSAtari911- ✅ Badges 6132*9ccd446eSAtari911- ✅ Buttons 6133*9ccd446eSAtari911 6134*9ccd446eSAtari911**Every element perfectly themed!** 6135*9ccd446eSAtari911 6136*9ccd446eSAtari911### Search Bar Coverage 6137*9ccd446eSAtari911 6138*9ccd446eSAtari911**All aspects themed**: 6139*9ccd446eSAtari911- Background: Theme cell_bg ✓ 6140*9ccd446eSAtari911- Text color: Theme text_primary ✓ 6141*9ccd446eSAtari911- Border: Theme grid_border ✓ 6142*9ccd446eSAtari911- Placeholder: Inherits text color ✓ 6143*9ccd446eSAtari911- Icon (): In placeholder ✓ 6144*9ccd446eSAtari911- Clear button (✕): Themed ✓ 6145*9ccd446eSAtari911 6146*9ccd446eSAtari911**Cannot be overridden!** (all have !important) 6147*9ccd446eSAtari911 6148*9ccd446eSAtari911### Sidebar Event Box Styling 6149*9ccd446eSAtari911 6150*9ccd446eSAtari911**Consistent borders**: 6151*9ccd446eSAtari911``` 6152*9ccd446eSAtari911Matrix: 6153*9ccd446eSAtari911╔════════════╗ 6154*9ccd446eSAtari911║ Event 1 ║ 6155*9ccd446eSAtari911╟────────────╢ ← grid_border color 6156*9ccd446eSAtari911║ Event 2 ║ 6157*9ccd446eSAtari911╚════════════╝ 6158*9ccd446eSAtari911 6159*9ccd446eSAtari911All themes match perfectly! ✓ 6160*9ccd446eSAtari911``` 6161*9ccd446eSAtari911 6162*9ccd446eSAtari911### Complete Theme Achievement 6163*9ccd446eSAtari911 6164*9ccd446eSAtari911**Every single element themed**: 6165*9ccd446eSAtari911- ✅ Backgrounds 6166*9ccd446eSAtari911- ✅ Text (regular) 6167*9ccd446eSAtari911- ✅ Text (bold) ← v4.8.3! 6168*9ccd446eSAtari911- ✅ Links 6169*9ccd446eSAtari911- ✅ Badges 6170*9ccd446eSAtari911- ✅ Buttons 6171*9ccd446eSAtari911- ✅ Checkboxes 6172*9ccd446eSAtari911- ✅ Icons 6173*9ccd446eSAtari911- ✅ Borders 6174*9ccd446eSAtari911- ✅ Search bar ← Enhanced v4.8.3! 6175*9ccd446eSAtari911- ✅ Sidebar boxes ← v4.8.3! 6176*9ccd446eSAtari911- ✅ Today marker 6177*9ccd446eSAtari911- ✅ Calendar grid 6178*9ccd446eSAtari911- ✅ Event panels 6179*9ccd446eSAtari911 6180*9ccd446eSAtari911**ABSOLUTE PERFECTION!** ✨ 6181*9ccd446eSAtari911 6182*9ccd446eSAtari911## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 6183*9ccd446eSAtari911 6184*9ccd446eSAtari911### Fixed: Links in Descriptions Now Themed 6185*9ccd446eSAtari911- **Fixed:** All links in event descriptions now use theme color 6186*9ccd446eSAtari911- **Fixed:** DokuWiki links [[page|text]] themed 6187*9ccd446eSAtari911- **Fixed:** Markdown links [text](url) themed 6188*9ccd446eSAtari911- **Fixed:** Plain URLs themed 6189*9ccd446eSAtari911- **Result:** Links match theme perfectly! 6190*9ccd446eSAtari911 6191*9ccd446eSAtari911### The Problem 6192*9ccd446eSAtari911 6193*9ccd446eSAtari911**v4.8.1 behavior**: 6194*9ccd446eSAtari911``` 6195*9ccd446eSAtari911Event description: 6196*9ccd446eSAtari911"Check out https://example.com" ← Blue default link ✗ 6197*9ccd446eSAtari911"See [[wiki:page|docs]]" ← Blue default link ✗ 6198*9ccd446eSAtari911``` 6199*9ccd446eSAtari911 6200*9ccd446eSAtari911### The Fix 6201*9ccd446eSAtari911 6202*9ccd446eSAtari911**Added inline color styling to ALL link types**: 6203*9ccd446eSAtari911 6204*9ccd446eSAtari911```php 6205*9ccd446eSAtari911// Get theme colors: 6206*9ccd446eSAtari911$linkColor = $themeStyles['border'] . ' !important'; 6207*9ccd446eSAtari911$linkStyle = ' style="color:' . $linkColor . ';"'; 6208*9ccd446eSAtari911 6209*9ccd446eSAtari911// Apply to links: 6210*9ccd446eSAtari911<a href="..." style="color: #00cc07 !important;">link</a> 6211*9ccd446eSAtari911``` 6212*9ccd446eSAtari911 6213*9ccd446eSAtari911**All link types themed**: 6214*9ccd446eSAtari9111. DokuWiki syntax: `[[page|text]]` 6215*9ccd446eSAtari9112. Markdown syntax: `[text](url)` 6216*9ccd446eSAtari9113. Plain URLs: `https://example.com` 6217*9ccd446eSAtari911 6218*9ccd446eSAtari911### Before vs After 6219*9ccd446eSAtari911 6220*9ccd446eSAtari911**BEFORE (v4.8.1)**: 6221*9ccd446eSAtari911``` 6222*9ccd446eSAtari911Matrix Theme Description: 6223*9ccd446eSAtari911"Visit https://example.com for more info" 6224*9ccd446eSAtari911 ↑ 6225*9ccd446eSAtari911 Blue link ✗ (doesn't match green theme) 6226*9ccd446eSAtari911``` 6227*9ccd446eSAtari911 6228*9ccd446eSAtari911**AFTER (v4.8.2)**: 6229*9ccd446eSAtari911``` 6230*9ccd446eSAtari911Matrix Theme Description: 6231*9ccd446eSAtari911"Visit https://example.com for more info" 6232*9ccd446eSAtari911 ↑ 6233*9ccd446eSAtari911 Green link ✓ (matches theme!) 6234*9ccd446eSAtari911``` 6235*9ccd446eSAtari911 6236*9ccd446eSAtari911### Link Colors by Theme 6237*9ccd446eSAtari911 6238*9ccd446eSAtari911**Matrix**: 6239*9ccd446eSAtari911- Links: Green (#00cc07) !important 6240*9ccd446eSAtari911- Matches: Border, badges, highlights 6241*9ccd446eSAtari911 6242*9ccd446eSAtari911**Purple**: 6243*9ccd446eSAtari911- Links: Purple (#9b59b6) !important 6244*9ccd446eSAtari911- Matches: Border, badges, highlights 6245*9ccd446eSAtari911 6246*9ccd446eSAtari911**Professional**: 6247*9ccd446eSAtari911- Links: Blue (#4a90e2) !important 6248*9ccd446eSAtari911- Matches: Border, badges, highlights 6249*9ccd446eSAtari911 6250*9ccd446eSAtari911**Pink**: 6251*9ccd446eSAtari911- Links: Hot Pink (#ff1493) !important 6252*9ccd446eSAtari911- Matches: Border, badges, highlights ✨ 6253*9ccd446eSAtari911 6254*9ccd446eSAtari911### Examples 6255*9ccd446eSAtari911 6256*9ccd446eSAtari911**Matrix Description with Links**: 6257*9ccd446eSAtari911``` 6258*9ccd446eSAtari911Event: Team Meeting 6259*9ccd446eSAtari911Description: 6260*9ccd446eSAtari911"Review [[wiki:q1goals|Q1 Goals]] 6261*9ccd446eSAtari911and visit https://metrics.com" 6262*9ccd446eSAtari911 6263*9ccd446eSAtari911Both links → Green ✓ 6264*9ccd446eSAtari911``` 6265*9ccd446eSAtari911 6266*9ccd446eSAtari911**Purple Description with Links**: 6267*9ccd446eSAtari911``` 6268*9ccd446eSAtari911Event: Planning Session 6269*9ccd446eSAtari911Description: 6270*9ccd446eSAtari911"Check [schedule](https://cal.com) 6271*9ccd446eSAtari911for availability" 6272*9ccd446eSAtari911 6273*9ccd446eSAtari911Link → Purple ✓ 6274*9ccd446eSAtari911``` 6275*9ccd446eSAtari911 6276*9ccd446eSAtari911**Professional Description with Links**: 6277*9ccd446eSAtari911``` 6278*9ccd446eSAtari911Event: Client Call 6279*9ccd446eSAtari911Description: 6280*9ccd446eSAtari911"Prepare [[reports|Monthly Reports]] 6281*9ccd446eSAtari911before the call" 6282*9ccd446eSAtari911 6283*9ccd446eSAtari911Link → Blue ✓ 6284*9ccd446eSAtari911``` 6285*9ccd446eSAtari911 6286*9ccd446eSAtari911**Pink Description with Links**: 6287*9ccd446eSAtari911``` 6288*9ccd446eSAtari911Event: Party Planning 6289*9ccd446eSAtari911Description: 6290*9ccd446eSAtari911"RSVP at https://party.com ✨" 6291*9ccd446eSAtari911 6292*9ccd446eSAtari911Link → Hot Pink ✓ 6293*9ccd446eSAtari911``` 6294*9ccd446eSAtari911 6295*9ccd446eSAtari911### Technical Implementation 6296*9ccd446eSAtari911 6297*9ccd446eSAtari911**Updated renderDescription() function**: 6298*9ccd446eSAtari911 6299*9ccd446eSAtari911```php 6300*9ccd446eSAtari911private function renderDescription($description, $themeStyles = null) { 6301*9ccd446eSAtari911 // Get theme 6302*9ccd446eSAtari911 if ($themeStyles === null) { 6303*9ccd446eSAtari911 $theme = $this->getSidebarTheme(); 6304*9ccd446eSAtari911 $themeStyles = $this->getSidebarThemeStyles($theme); 6305*9ccd446eSAtari911 } 6306*9ccd446eSAtari911 6307*9ccd446eSAtari911 // Create link style 6308*9ccd446eSAtari911 $linkColor = $themeStyles['border'] . ' !important'; 6309*9ccd446eSAtari911 $linkStyle = ' style="color:' . $linkColor . ';"'; 6310*9ccd446eSAtari911 6311*9ccd446eSAtari911 // Apply to all link types: 6312*9ccd446eSAtari911 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 6313*9ccd446eSAtari911} 6314*9ccd446eSAtari911``` 6315*9ccd446eSAtari911 6316*9ccd446eSAtari911### Complete Theming 6317*9ccd446eSAtari911 6318*9ccd446eSAtari911**Every text element**: 6319*9ccd446eSAtari911- ✅ Event titles 6320*9ccd446eSAtari911- ✅ Event dates 6321*9ccd446eSAtari911- ✅ Event descriptions 6322*9ccd446eSAtari911- ✅ **Links in descriptions** ← NEW! 6323*9ccd446eSAtari911- ✅ Badges 6324*9ccd446eSAtari911- ✅ Buttons 6325*9ccd446eSAtari911 6326*9ccd446eSAtari911**Every color unified!** 6327*9ccd446eSAtari911 6328*9ccd446eSAtari911### Unified Theme Experience 6329*9ccd446eSAtari911 6330*9ccd446eSAtari911**Matrix Theme**: 6331*9ccd446eSAtari911``` 6332*9ccd446eSAtari911Everything green: 6333*9ccd446eSAtari911- Text: Green ✓ 6334*9ccd446eSAtari911- Links: Green ✓ 6335*9ccd446eSAtari911- Badges: Green ✓ 6336*9ccd446eSAtari911- Borders: Green ✓ 6337*9ccd446eSAtari911- Buttons: Green ✓ 6338*9ccd446eSAtari911- Today marker: Green ✓ 6339*9ccd446eSAtari911 6340*9ccd446eSAtari911Perfect harmony! ✓ 6341*9ccd446eSAtari911``` 6342*9ccd446eSAtari911 6343*9ccd446eSAtari911**No default blue links breaking the theme!** 6344*9ccd446eSAtari911 6345*9ccd446eSAtari911### Link Types Supported 6346*9ccd446eSAtari911 6347*9ccd446eSAtari911**1. DokuWiki Syntax**: 6348*9ccd446eSAtari911``` 6349*9ccd446eSAtari911[[page|Link Text]] → Themed ✓ 6350*9ccd446eSAtari911[[page]] → Themed ✓ 6351*9ccd446eSAtari911[[page#section|Text]] → Themed ✓ 6352*9ccd446eSAtari911``` 6353*9ccd446eSAtari911 6354*9ccd446eSAtari911**2. Markdown Syntax**: 6355*9ccd446eSAtari911``` 6356*9ccd446eSAtari911[Link Text](https://url.com) → Themed ✓ 6357*9ccd446eSAtari911[Text](internal-page) → Themed ✓ 6358*9ccd446eSAtari911``` 6359*9ccd446eSAtari911 6360*9ccd446eSAtari911**3. Plain URLs**: 6361*9ccd446eSAtari911``` 6362*9ccd446eSAtari911https://example.com → Themed ✓ 6363*9ccd446eSAtari911http://site.org → Themed ✓ 6364*9ccd446eSAtari911``` 6365*9ccd446eSAtari911 6366*9ccd446eSAtari911**All links perfectly themed!** 6367*9ccd446eSAtari911 6368*9ccd446eSAtari911## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 6369*9ccd446eSAtari911 6370*9ccd446eSAtari911### Fixed: All Badges Now Themed 6371*9ccd446eSAtari911- **Fixed:** TODAY badge themed with theme color 6372*9ccd446eSAtari911- **Fixed:** PAST DUE badge uses orange (warning color) 6373*9ccd446eSAtari911- **Fixed:** Namespace badges themed 6374*9ccd446eSAtari911- **Fixed:** All badges visible and hidden 6375*9ccd446eSAtari911- **Result:** All badges match theme! 6376*9ccd446eSAtari911 6377*9ccd446eSAtari911### Fixed: Today Cell More Prominent 6378*9ccd446eSAtari911- **Fixed:** Today cell now has 2px border in theme color 6379*9ccd446eSAtari911- **Fixed:** Border added to both PHP and JavaScript 6380*9ccd446eSAtari911- **Result:** Today stands out clearly! 6381*9ccd446eSAtari911 6382*9ccd446eSAtari911### Fixed: Past Event Text Fully Themed 6383*9ccd446eSAtari911- **Fixed:** Event-info div backgrounds ensure no gray 6384*9ccd446eSAtari911- **Result:** Expanded past events completely themed! 6385*9ccd446eSAtari911 6386*9ccd446eSAtari911### All Changes 6387*9ccd446eSAtari911 6388*9ccd446eSAtari911**1. Badge Theming**: 6389*9ccd446eSAtari911 6390*9ccd446eSAtari911**TODAY Badge**: 6391*9ccd446eSAtari911```php 6392*9ccd446eSAtari911// PHP & JavaScript: 6393*9ccd446eSAtari911style="background: $themeStyles['border'] !important; 6394*9ccd446eSAtari911 color: $bg !important;" 6395*9ccd446eSAtari911 6396*9ccd446eSAtari911Matrix: Green badge 6397*9ccd446eSAtari911Purple: Purple badge 6398*9ccd446eSAtari911Professional: Blue badge with white text 6399*9ccd446eSAtari911Pink: Pink badge 6400*9ccd446eSAtari911``` 6401*9ccd446eSAtari911 6402*9ccd446eSAtari911**PAST DUE Badge** (always orange): 6403*9ccd446eSAtari911```php 6404*9ccd446eSAtari911style="background: #ff9800 !important; 6405*9ccd446eSAtari911 color: #fff !important;" 6406*9ccd446eSAtari911``` 6407*9ccd446eSAtari911 6408*9ccd446eSAtari911**Namespace Badge**: 6409*9ccd446eSAtari911```php 6410*9ccd446eSAtari911style="background: $themeStyles['border'] !important; 6411*9ccd446eSAtari911 color: $bg !important;" 6412*9ccd446eSAtari911``` 6413*9ccd446eSAtari911 6414*9ccd446eSAtari911**2. Today Cell Border**: 6415*9ccd446eSAtari911 6416*9ccd446eSAtari911**PHP**: 6417*9ccd446eSAtari911```php 6418*9ccd446eSAtari911$todayBorder = $isToday ? 6419*9ccd446eSAtari911 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 6420*9ccd446eSAtari911``` 6421*9ccd446eSAtari911 6422*9ccd446eSAtari911**JavaScript**: Same 6423*9ccd446eSAtari911 6424*9ccd446eSAtari911**Result**: Today cell has prominent colored border! 6425*9ccd446eSAtari911 6426*9ccd446eSAtari911### Before vs After 6427*9ccd446eSAtari911 6428*9ccd446eSAtari911**BEFORE (v4.8.0)**: 6429*9ccd446eSAtari911``` 6430*9ccd446eSAtari911Calendar: 6431*9ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐ 6432*9ccd446eSAtari911│1│2│3│4│5│6│7│ 6433*9ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: subtle background 6434*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘ 6435*9ccd446eSAtari911 6436*9ccd446eSAtari911Event badges: 6437*9ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 6438*9ccd446eSAtari911``` 6439*9ccd446eSAtari911 6440*9ccd446eSAtari911**AFTER (v4.8.1)**: 6441*9ccd446eSAtari911``` 6442*9ccd446eSAtari911Calendar (Matrix): 6443*9ccd446eSAtari911┌─┬─┬─┬─┬─┬─┬─┐ 6444*9ccd446eSAtari911│1│2│3│4│5│6│7│ 6445*9ccd446eSAtari911│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 6446*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─┘ 6447*9ccd446eSAtari911 6448*9ccd446eSAtari911Event badges (Matrix): 6449*9ccd446eSAtari911Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 6450*9ccd446eSAtari911``` 6451*9ccd446eSAtari911 6452*9ccd446eSAtari911### Matrix Theme Example 6453*9ccd446eSAtari911 6454*9ccd446eSAtari911**Calendar**: 6455*9ccd446eSAtari911``` 6456*9ccd446eSAtari911Today cell: 6457*9ccd446eSAtari911┌────┐ 6458*9ccd446eSAtari911│ 8 │ Dark green bg + Green 2px border 6459*9ccd446eSAtari911└────┘ 6460*9ccd446eSAtari911Very obvious! 6461*9ccd446eSAtari911``` 6462*9ccd446eSAtari911 6463*9ccd446eSAtari911**Badges**: 6464*9ccd446eSAtari911``` 6465*9ccd446eSAtari911[TODAY] ← Green bg, dark text 6466*9ccd446eSAtari911[Work] ← Green bg, dark text 6467*9ccd446eSAtari911[PAST DUE] ← Orange bg, white text 6468*9ccd446eSAtari911``` 6469*9ccd446eSAtari911 6470*9ccd446eSAtari911### Purple Theme Example 6471*9ccd446eSAtari911 6472*9ccd446eSAtari911**Calendar**: 6473*9ccd446eSAtari911``` 6474*9ccd446eSAtari911Today cell: 6475*9ccd446eSAtari911┌────┐ 6476*9ccd446eSAtari911│ 8 │ Dark purple bg + Purple 2px border 6477*9ccd446eSAtari911└────┘ 6478*9ccd446eSAtari911``` 6479*9ccd446eSAtari911 6480*9ccd446eSAtari911**Badges**: 6481*9ccd446eSAtari911``` 6482*9ccd446eSAtari911[TODAY] ← Purple bg 6483*9ccd446eSAtari911[Work] ← Purple bg 6484*9ccd446eSAtari911``` 6485*9ccd446eSAtari911 6486*9ccd446eSAtari911### Professional Theme Example 6487*9ccd446eSAtari911 6488*9ccd446eSAtari911**Calendar**: 6489*9ccd446eSAtari911``` 6490*9ccd446eSAtari911Today cell: 6491*9ccd446eSAtari911┌────┐ 6492*9ccd446eSAtari911│ 8 │ Light blue bg + Blue 2px border 6493*9ccd446eSAtari911└────┘ 6494*9ccd446eSAtari911``` 6495*9ccd446eSAtari911 6496*9ccd446eSAtari911**Badges**: 6497*9ccd446eSAtari911``` 6498*9ccd446eSAtari911[TODAY] ← Blue bg, white text 6499*9ccd446eSAtari911[Work] ← Blue bg, white text 6500*9ccd446eSAtari911``` 6501*9ccd446eSAtari911 6502*9ccd446eSAtari911### Pink Theme Example 6503*9ccd446eSAtari911 6504*9ccd446eSAtari911**Calendar**: 6505*9ccd446eSAtari911``` 6506*9ccd446eSAtari911Today cell: 6507*9ccd446eSAtari911┌────┐ 6508*9ccd446eSAtari911│ 8 │ Dark pink bg + Pink 2px border ✨ 6509*9ccd446eSAtari911└────┘ 6510*9ccd446eSAtari911``` 6511*9ccd446eSAtari911 6512*9ccd446eSAtari911**Badges**: 6513*9ccd446eSAtari911``` 6514*9ccd446eSAtari911[TODAY] ← Pink bg 6515*9ccd446eSAtari911[Work] ← Pink bg ✨ 6516*9ccd446eSAtari911``` 6517*9ccd446eSAtari911 6518*9ccd446eSAtari911### Complete Badge Coverage 6519*9ccd446eSAtari911 6520*9ccd446eSAtari911**All badges themed**: 6521*9ccd446eSAtari911- ✅ TODAY badge (theme color) 6522*9ccd446eSAtari911- ✅ PAST DUE badge (orange warning) 6523*9ccd446eSAtari911- ✅ Namespace badges (theme color) 6524*9ccd446eSAtari911- ✅ Visible events 6525*9ccd446eSAtari911- ✅ Hidden/past events 6526*9ccd446eSAtari911 6527*9ccd446eSAtari911**No gray badges anywhere!** 6528*9ccd446eSAtari911 6529*9ccd446eSAtari911### Today Cell Visual 6530*9ccd446eSAtari911 6531*9ccd446eSAtari911**Dual indicators**: 6532*9ccd446eSAtari9111. Background color (theme today bg) 6533*9ccd446eSAtari9112. Border (2px theme color) ← NEW! 6534*9ccd446eSAtari911 6535*9ccd446eSAtari911**Result**: Today is VERY obvious! 6536*9ccd446eSAtari911 6537*9ccd446eSAtari911**Matrix**: Green bg + Green border 6538*9ccd446eSAtari911**Purple**: Purple bg + Purple border 6539*9ccd446eSAtari911**Professional**: Light blue bg + Blue border 6540*9ccd446eSAtari911**Pink**: Pink bg + Pink border ✨ 6541*9ccd446eSAtari911 6542*9ccd446eSAtari911### Complete Theming 6543*9ccd446eSAtari911 6544*9ccd446eSAtari911**Every element themed**: 6545*9ccd446eSAtari911- ✅ Backgrounds 6546*9ccd446eSAtari911- ✅ Text colors 6547*9ccd446eSAtari911- ✅ Badges (v4.8.1!) 6548*9ccd446eSAtari911- ✅ Today marker (v4.8.1!) 6549*9ccd446eSAtari911- ✅ Checkboxes 6550*9ccd446eSAtari911- ✅ Buttons 6551*9ccd446eSAtari911- ✅ Icons 6552*9ccd446eSAtari911 6553*9ccd446eSAtari911**Absolutely everything!** ✨ 6554*9ccd446eSAtari911 6555*9ccd446eSAtari911## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 6556*9ccd446eSAtari911 6557*9ccd446eSAtari911### Fixed: All Event Backgrounds Now Themed 6558*9ccd446eSAtari911- **Fixed:** event-info div now has themed background 6559*9ccd446eSAtari911- **Fixed:** event-meta-compact div (visible) now has themed background 6560*9ccd446eSAtari911- **Fixed:** event-desc-compact div now has themed background 6561*9ccd446eSAtari911- **Fixed:** All !important flags added to prevent CSS override 6562*9ccd446eSAtari911- **Result:** Entire event item fully themed! 6563*9ccd446eSAtari911 6564*9ccd446eSAtari911### Fixed: Description Text Shows Correct Color Immediately 6565*9ccd446eSAtari911- **Fixed:** Description divs now have explicit background + color on load 6566*9ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions fully styled 6567*9ccd446eSAtari911- **Result:** No more gray text on initial load! 6568*9ccd446eSAtari911 6569*9ccd446eSAtari911### The Problem 6570*9ccd446eSAtari911 6571*9ccd446eSAtari911**v4.7.9 behavior**: 6572*9ccd446eSAtari911``` 6573*9ccd446eSAtari911Expanded past event: 6574*9ccd446eSAtari911┌────────────────────────┐ 6575*9ccd446eSAtari911│ ▾ Team Meeting │ ← Themed ✓ 6576*9ccd446eSAtari911│ Mon, Feb 8 │ ← Themed ✓ 6577*9ccd446eSAtari911│ │ 6578*9ccd446eSAtari911│ [Event details] │ ← Gray background ✗ 6579*9ccd446eSAtari911│ [Description] │ ← Gray text until navigation ✗ 6580*9ccd446eSAtari911└────────────────────────┘ 6581*9ccd446eSAtari911 6582*9ccd446eSAtari911Only the date/time div was themed! 6583*9ccd446eSAtari911``` 6584*9ccd446eSAtari911 6585*9ccd446eSAtari911### The Fix 6586*9ccd446eSAtari911 6587*9ccd446eSAtari911**Added background to ALL inner divs**: 6588*9ccd446eSAtari911 6589*9ccd446eSAtari911**PHP**: 6590*9ccd446eSAtari911```php 6591*9ccd446eSAtari911// Event container: 6592*9ccd446eSAtari911style="background:' . $themeStyles['cell_bg'] . ' !important;" 6593*9ccd446eSAtari911 6594*9ccd446eSAtari911// event-info wrapper: 6595*9ccd446eSAtari911<div class="event-info" 6596*9ccd446eSAtari911 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6597*9ccd446eSAtari911 6598*9ccd446eSAtari911// event-meta-compact: 6599*9ccd446eSAtari911<div class="event-meta-compact" 6600*9ccd446eSAtari911 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6601*9ccd446eSAtari911 6602*9ccd446eSAtari911// event-desc-compact: 6603*9ccd446eSAtari911<div class="event-desc-compact" 6604*9ccd446eSAtari911 style="background:' . $themeStyles['cell_bg'] . ' !important; 6605*9ccd446eSAtari911 color:' . $themeStyles['text_dim'] . ' !important;"> 6606*9ccd446eSAtari911``` 6607*9ccd446eSAtari911 6608*9ccd446eSAtari911**JavaScript**: Same styling applied 6609*9ccd446eSAtari911 6610*9ccd446eSAtari911### Before vs After 6611*9ccd446eSAtari911 6612*9ccd446eSAtari911**BEFORE (v4.7.9)**: 6613*9ccd446eSAtari911``` 6614*9ccd446eSAtari911Matrix Theme - Expanded Event: 6615*9ccd446eSAtari911┌────────────────────────┐ 6616*9ccd446eSAtari911│ ▾ Team Meeting │ 6617*9ccd446eSAtari911│ Mon, Feb 8 ← Green │ 6618*9ccd446eSAtari911│ │ 6619*9ccd446eSAtari911│ Details ← Gray ✗ │ 6620*9ccd446eSAtari911│ Description ← Gray ✗ │ 6621*9ccd446eSAtari911│ [✏️] [️] │ 6622*9ccd446eSAtari911└────────────────────────┘ 6623*9ccd446eSAtari911``` 6624*9ccd446eSAtari911 6625*9ccd446eSAtari911**AFTER (v4.8.0)**: 6626*9ccd446eSAtari911``` 6627*9ccd446eSAtari911Matrix Theme - Expanded Event: 6628*9ccd446eSAtari911┌────────────────────────┐ 6629*9ccd446eSAtari911│ ▾ Team Meeting │ 6630*9ccd446eSAtari911│ Mon, Feb 8 ← Green │ 6631*9ccd446eSAtari911│ │ 6632*9ccd446eSAtari911│ Details ← Green ✓│ 6633*9ccd446eSAtari911│ Description ← Green ✓│ 6634*9ccd446eSAtari911│ [✏️] [️] │ 6635*9ccd446eSAtari911└────────────────────────┘ 6636*9ccd446eSAtari911 6637*9ccd446eSAtari911Entire event themed! 6638*9ccd446eSAtari911``` 6639*9ccd446eSAtari911 6640*9ccd446eSAtari911### What's Themed Now 6641*9ccd446eSAtari911 6642*9ccd446eSAtari911**Event Item Structure** (all themed): 6643*9ccd446eSAtari911``` 6644*9ccd446eSAtari911event-compact-item ← Themed ✓ 6645*9ccd446eSAtari911 └─ event-info ← Themed ✓ (v4.8.0!) 6646*9ccd446eSAtari911 ├─ event-title-row ← Themed ✓ 6647*9ccd446eSAtari911 ├─ event-meta ← Themed ✓ (v4.8.0!) 6648*9ccd446eSAtari911 └─ event-desc ← Themed ✓ (v4.8.0!) 6649*9ccd446eSAtari911``` 6650*9ccd446eSAtari911 6651*9ccd446eSAtari911**Every layer has background!** 6652*9ccd446eSAtari911 6653*9ccd446eSAtari911### Matrix Theme Example 6654*9ccd446eSAtari911 6655*9ccd446eSAtari911**Complete event**: 6656*9ccd446eSAtari911``` 6657*9ccd446eSAtari911┌────────────────────────────┐ 6658*9ccd446eSAtari911│ Team Meeting │ ← Dark green bg 6659*9ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 6660*9ccd446eSAtari911│ Discussed Q1 goals and │ ← Dark green bg 6661*9ccd446eSAtari911│ set targets for team │ ← Dark green bg 6662*9ccd446eSAtari911│ [✏️] [️] [☑] │ ← Dark green bg 6663*9ccd446eSAtari911└────────────────────────────┘ 6664*9ccd446eSAtari911 6665*9ccd446eSAtari911Consistent green throughout! ✓ 6666*9ccd446eSAtari911``` 6667*9ccd446eSAtari911 6668*9ccd446eSAtari911### Purple Theme Example 6669*9ccd446eSAtari911 6670*9ccd446eSAtari911``` 6671*9ccd446eSAtari911┌────────────────────────────┐ 6672*9ccd446eSAtari911│ Team Meeting │ ← Dark purple bg 6673*9ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 6674*9ccd446eSAtari911│ Discussed Q1 goals │ ← Dark purple bg 6675*9ccd446eSAtari911│ [✏️] [️] [☑] │ ← Dark purple bg 6676*9ccd446eSAtari911└────────────────────────────┘ 6677*9ccd446eSAtari911 6678*9ccd446eSAtari911Consistent purple throughout! ✓ 6679*9ccd446eSAtari911``` 6680*9ccd446eSAtari911 6681*9ccd446eSAtari911### Professional Theme Example 6682*9ccd446eSAtari911 6683*9ccd446eSAtari911``` 6684*9ccd446eSAtari911┌────────────────────────────┐ 6685*9ccd446eSAtari911│ Team Meeting │ ← Light bg 6686*9ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Light bg 6687*9ccd446eSAtari911│ Discussed Q1 goals │ ← Light bg 6688*9ccd446eSAtari911│ [✏️] [️] [☑] │ ← Light bg 6689*9ccd446eSAtari911└────────────────────────────┘ 6690*9ccd446eSAtari911 6691*9ccd446eSAtari911Consistent light throughout! ✓ 6692*9ccd446eSAtari911``` 6693*9ccd446eSAtari911 6694*9ccd446eSAtari911### Pink Theme Example 6695*9ccd446eSAtari911 6696*9ccd446eSAtari911``` 6697*9ccd446eSAtari911┌────────────────────────────┐ 6698*9ccd446eSAtari911│ Team Meeting │ ← Dark pink bg 6699*9ccd446eSAtari911│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 6700*9ccd446eSAtari911│ Discussed Q1 goals │ ← Dark pink bg 6701*9ccd446eSAtari911│ [✏️] [️] [☑] │ ← Dark pink bg 6702*9ccd446eSAtari911└────────────────────────────┘ 6703*9ccd446eSAtari911 6704*9ccd446eSAtari911Consistent pink throughout! ✓ 6705*9ccd446eSAtari911``` 6706*9ccd446eSAtari911 6707*9ccd446eSAtari911### Complete Theming 6708*9ccd446eSAtari911 6709*9ccd446eSAtari911**Every element, every layer**: 6710*9ccd446eSAtari911- ✅ Container 6711*9ccd446eSAtari911- ✅ Event item 6712*9ccd446eSAtari911- ✅ Event info wrapper (v4.8.0!) 6713*9ccd446eSAtari911- ✅ Title row 6714*9ccd446eSAtari911- ✅ Meta div (v4.8.0!) 6715*9ccd446eSAtari911- ✅ Description div (v4.8.0!) 6716*9ccd446eSAtari911- ✅ Action buttons 6717*9ccd446eSAtari911- ✅ Checkboxes 6718*9ccd446eSAtari911 6719*9ccd446eSAtari911**No gray anywhere!** 6720*9ccd446eSAtari911 6721*9ccd446eSAtari911### Why Multiple Backgrounds? 6722*9ccd446eSAtari911 6723*9ccd446eSAtari911**CSS layers stack**: 6724*9ccd446eSAtari911```html 6725*9ccd446eSAtari911<div style="background: green;"> ← Layer 1 6726*9ccd446eSAtari911 <div style="background: inherit;"> ← Could be gray! 6727*9ccd446eSAtari911 <div>Content</div> ← Inherits gray! 6728*9ccd446eSAtari911 </div> 6729*9ccd446eSAtari911</div> 6730*9ccd446eSAtari911 6731*9ccd446eSAtari911Better: 6732*9ccd446eSAtari911<div style="background: green;"> ← Layer 1 6733*9ccd446eSAtari911 <div style="background: green;"> ← Layer 2 forced 6734*9ccd446eSAtari911 <div style="background: green;"> ← Layer 3 forced 6735*9ccd446eSAtari911 Content ← All green! 6736*9ccd446eSAtari911 </div> 6737*9ccd446eSAtari911 </div> 6738*9ccd446eSAtari911</div> 6739*9ccd446eSAtari911``` 6740*9ccd446eSAtari911 6741*9ccd446eSAtari911**Every layer forced = Perfect theming!** 6742*9ccd446eSAtari911 6743*9ccd446eSAtari911### !important Everywhere 6744*9ccd446eSAtari911 6745*9ccd446eSAtari911**All styling now uses !important**: 6746*9ccd446eSAtari911- background: ... !important 6747*9ccd446eSAtari911- color: ... !important 6748*9ccd446eSAtari911 6749*9ccd446eSAtari911**Result**: CSS cannot override themes! 6750*9ccd446eSAtari911 6751*9ccd446eSAtari911**Version 4.8.0 = Complete, bulletproof theming!** ✨ 6752*9ccd446eSAtari911 6753*9ccd446eSAtari911## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 6754*9ccd446eSAtari911 6755*9ccd446eSAtari911### Fixed: Past Event Expanded Background Themed 6756*9ccd446eSAtari911- **Fixed:** Past event meta div now has theme background when expanded 6757*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme background 6758*9ccd446eSAtari911- **Result:** Expanded past events have proper themed background! 6759*9ccd446eSAtari911 6760*9ccd446eSAtari911### ✅ Fixed: Checkboxes Now Themed 6761*9ccd446eSAtari911- **Fixed:** Task checkboxes use accent-color matching theme 6762*9ccd446eSAtari911- **Fixed:** Cursor changes to pointer on hover 6763*9ccd446eSAtari911- **Result:** Checkboxes match theme color! 6764*9ccd446eSAtari911 6765*9ccd446eSAtari911### Fixed: Action Buttons (Edit/Delete) Themed 6766*9ccd446eSAtari911- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 6767*9ccd446eSAtari911- **Fixed:** Background, text, and border all use theme colors 6768*9ccd446eSAtari911- **Result:** All icons themed! 6769*9ccd446eSAtari911 6770*9ccd446eSAtari911### All Changes 6771*9ccd446eSAtari911 6772*9ccd446eSAtari911**1. Past Event Expanded Background**: 6773*9ccd446eSAtari911 6774*9ccd446eSAtari911**PHP**: 6775*9ccd446eSAtari911```php 6776*9ccd446eSAtari911// Before: 6777*9ccd446eSAtari911<div class="event-meta-compact" style="display:none;"> 6778*9ccd446eSAtari911 6779*9ccd446eSAtari911// After: 6780*9ccd446eSAtari911<div class="event-meta-compact" 6781*9ccd446eSAtari911 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 6782*9ccd446eSAtari911``` 6783*9ccd446eSAtari911 6784*9ccd446eSAtari911**JavaScript**: Same treatment 6785*9ccd446eSAtari911 6786*9ccd446eSAtari911**Result**: Expanded past events have themed background! 6787*9ccd446eSAtari911 6788*9ccd446eSAtari911**2. Task Checkboxes**: 6789*9ccd446eSAtari911 6790*9ccd446eSAtari911**PHP & JavaScript**: 6791*9ccd446eSAtari911```php 6792*9ccd446eSAtari911// Added accent-color: 6793*9ccd446eSAtari911<input type="checkbox" 6794*9ccd446eSAtari911 style="accent-color:' . $themeStyles['border'] . ' !important; 6795*9ccd446eSAtari911 cursor:pointer;"> 6796*9ccd446eSAtari911``` 6797*9ccd446eSAtari911 6798*9ccd446eSAtari911**accent-color** changes the checkbox color: 6799*9ccd446eSAtari911- Matrix: Green checkboxes ✓ 6800*9ccd446eSAtari911- Purple: Purple checkboxes ✓ 6801*9ccd446eSAtari911- Professional: Blue checkboxes ✓ 6802*9ccd446eSAtari911- Pink: Pink checkboxes ✓ 6803*9ccd446eSAtari911 6804*9ccd446eSAtari911**3. Edit/Delete Buttons**: 6805*9ccd446eSAtari911 6806*9ccd446eSAtari911**PHP**: 6807*9ccd446eSAtari911```php 6808*9ccd446eSAtari911<button class="event-action-btn" 6809*9ccd446eSAtari911 style="color:' . $themeStyles['text_primary'] . ' !important; 6810*9ccd446eSAtari911 background:' . $themeStyles['cell_bg'] . ' !important; 6811*9ccd446eSAtari911 border-color:' . $themeStyles['grid_border'] . ' !important;"> 6812*9ccd446eSAtari911 ️ 6813*9ccd446eSAtari911</button> 6814*9ccd446eSAtari911``` 6815*9ccd446eSAtari911 6816*9ccd446eSAtari911**JavaScript**: Same 6817*9ccd446eSAtari911 6818*9ccd446eSAtari911**Result**: Buttons blend with theme! 6819*9ccd446eSAtari911 6820*9ccd446eSAtari911### Before vs After 6821*9ccd446eSAtari911 6822*9ccd446eSAtari911**BEFORE (v4.7.8)**: 6823*9ccd446eSAtari911``` 6824*9ccd446eSAtari911Past Event (expanded): 6825*9ccd446eSAtari911┌─────────────────────────┐ 6826*9ccd446eSAtari911│ ▾ Team Meeting │ 6827*9ccd446eSAtari911│ Mon, Feb 8 │ ← White background ✗ 6828*9ccd446eSAtari911│ Description │ 6829*9ccd446eSAtari911├─────────────────────────┤ 6830*9ccd446eSAtari911│ [✏️] [️] [☐] │ ← Default colors ✗ 6831*9ccd446eSAtari911└─────────────────────────┘ 6832*9ccd446eSAtari911``` 6833*9ccd446eSAtari911 6834*9ccd446eSAtari911**AFTER (v4.7.9)**: 6835*9ccd446eSAtari911``` 6836*9ccd446eSAtari911Past Event (expanded - Matrix): 6837*9ccd446eSAtari911┌─────────────────────────┐ 6838*9ccd446eSAtari911│ ▾ Team Meeting │ 6839*9ccd446eSAtari911│ Mon, Feb 8 │ ← Dark green bg ✓ 6840*9ccd446eSAtari911│ Description │ 6841*9ccd446eSAtari911├─────────────────────────┤ 6842*9ccd446eSAtari911│ [✏️] [️] [☑] │ ← Themed ✓ 6843*9ccd446eSAtari911└─────────────────────────┘ 6844*9ccd446eSAtari911``` 6845*9ccd446eSAtari911 6846*9ccd446eSAtari911### Matrix Theme Example 6847*9ccd446eSAtari911 6848*9ccd446eSAtari911**Checkboxes**: Green accent 6849*9ccd446eSAtari911**Buttons**: Dark bg, green text, green borders 6850*9ccd446eSAtari911**Expanded**: Dark green background 6851*9ccd446eSAtari911 6852*9ccd446eSAtari911``` 6853*9ccd446eSAtari911Task: ☑ Complete report ← Green checkmark 6854*9ccd446eSAtari911[✏️] [️] ← Dark buttons with green 6855*9ccd446eSAtari911``` 6856*9ccd446eSAtari911 6857*9ccd446eSAtari911### Purple Theme Example 6858*9ccd446eSAtari911 6859*9ccd446eSAtari911**Checkboxes**: Purple accent 6860*9ccd446eSAtari911**Buttons**: Dark purple bg, lavender text 6861*9ccd446eSAtari911**Expanded**: Dark purple background 6862*9ccd446eSAtari911 6863*9ccd446eSAtari911``` 6864*9ccd446eSAtari911Task: ☑ Complete report ← Purple checkmark 6865*9ccd446eSAtari911[✏️] [️] ← Purple themed 6866*9ccd446eSAtari911``` 6867*9ccd446eSAtari911 6868*9ccd446eSAtari911### Professional Theme Example 6869*9ccd446eSAtari911 6870*9ccd446eSAtari911**Checkboxes**: Blue accent 6871*9ccd446eSAtari911**Buttons**: Light bg, dark text 6872*9ccd446eSAtari911**Expanded**: Light background 6873*9ccd446eSAtari911 6874*9ccd446eSAtari911``` 6875*9ccd446eSAtari911Task: ☑ Complete report ← Blue checkmark 6876*9ccd446eSAtari911[✏️] [️] ← Light themed 6877*9ccd446eSAtari911``` 6878*9ccd446eSAtari911 6879*9ccd446eSAtari911### Pink Theme Example 6880*9ccd446eSAtari911 6881*9ccd446eSAtari911**Checkboxes**: Pink accent 6882*9ccd446eSAtari911**Buttons**: Dark pink bg, pink text 6883*9ccd446eSAtari911**Expanded**: Dark pink background 6884*9ccd446eSAtari911 6885*9ccd446eSAtari911``` 6886*9ccd446eSAtari911Task: ☑ Complete report ← Pink checkmark 6887*9ccd446eSAtari911[✏️] [️] ← Pink themed 6888*9ccd446eSAtari911``` 6889*9ccd446eSAtari911 6890*9ccd446eSAtari911### Complete Icon Coverage 6891*9ccd446eSAtari911 6892*9ccd446eSAtari911**Themed Icons/Buttons**: 6893*9ccd446eSAtari911- ✅ Task checkboxes (accent-color) 6894*9ccd446eSAtari911- ✅ Edit button (✏️) 6895*9ccd446eSAtari911- ✅ Delete button (️) 6896*9ccd446eSAtari911- ✅ Navigation arrows (◀ ▶) 6897*9ccd446eSAtari911- ✅ Today button 6898*9ccd446eSAtari911- ✅ Past Events arrow (▶) 6899*9ccd446eSAtari911 6900*9ccd446eSAtari911**All interactive elements themed!** 6901*9ccd446eSAtari911 6902*9ccd446eSAtari911### How accent-color Works 6903*9ccd446eSAtari911 6904*9ccd446eSAtari911**Modern CSS property** for form controls: 6905*9ccd446eSAtari911```css 6906*9ccd446eSAtari911input[type="checkbox"] { 6907*9ccd446eSAtari911 accent-color: #00cc07; /* Green checkbox! */ 6908*9ccd446eSAtari911} 6909*9ccd446eSAtari911``` 6910*9ccd446eSAtari911 6911*9ccd446eSAtari911**Browser support**: All modern browsers ✓ 6912*9ccd446eSAtari911 6913*9ccd446eSAtari911**Result**: Checkboxes automatically match theme! 6914*9ccd446eSAtari911 6915*9ccd446eSAtari911### Complete Theme Coverage 6916*9ccd446eSAtari911 6917*9ccd446eSAtari911**Backgrounds**: 6918*9ccd446eSAtari911- ✅ Container 6919*9ccd446eSAtari911- ✅ Calendar-left 6920*9ccd446eSAtari911- ✅ Calendar-right 6921*9ccd446eSAtari911- ✅ Event items 6922*9ccd446eSAtari911- ✅ Past event expanded (v4.7.9!) 6923*9ccd446eSAtari911- ✅ Action buttons (v4.7.9!) 6924*9ccd446eSAtari911 6925*9ccd446eSAtari911**Icons/Controls**: 6926*9ccd446eSAtari911- ✅ Checkboxes (v4.7.9!) 6927*9ccd446eSAtari911- ✅ Edit/Delete buttons (v4.7.9!) 6928*9ccd446eSAtari911- ✅ Navigation buttons 6929*9ccd446eSAtari911- ✅ All arrows 6930*9ccd446eSAtari911 6931*9ccd446eSAtari911**Every element perfectly themed!** ✨ 6932*9ccd446eSAtari911 6933*9ccd446eSAtari911## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 6934*9ccd446eSAtari911 6935*9ccd446eSAtari911### Fixed: White Bar at Bottom of Calendar 6936*9ccd446eSAtari911- **Fixed:** Added background to calendar-left div with !important 6937*9ccd446eSAtari911- **Result:** No more white bar at bottom! 6938*9ccd446eSAtari911 6939*9ccd446eSAtari911### Fixed: Past Event Expanded Details Not Themed 6940*9ccd446eSAtari911- **Fixed:** Past event date/time now themed when expanded 6941*9ccd446eSAtari911- **Fixed:** Past event descriptions now themed when expanded 6942*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript render with theme colors 6943*9ccd446eSAtari911- **Result:** Expanding past events shows themed text! 6944*9ccd446eSAtari911 6945*9ccd446eSAtari911### Fixed: Event Description Text Color 6946*9ccd446eSAtari911- **Fixed:** All event descriptions now use theme text_dim color 6947*9ccd446eSAtari911- **Fixed:** Both visible and hidden descriptions themed 6948*9ccd446eSAtari911- **Result:** Descriptions always match theme! 6949*9ccd446eSAtari911 6950*9ccd446eSAtari911### All Changes 6951*9ccd446eSAtari911 6952*9ccd446eSAtari911**1. Bottom White Bar** (calendar-left div): 6953*9ccd446eSAtari911 6954*9ccd446eSAtari911**Before**: 6955*9ccd446eSAtari911```html 6956*9ccd446eSAtari911<div class="calendar-compact-left"> 6957*9ccd446eSAtari911<!-- White background showing at bottom --> 6958*9ccd446eSAtari911``` 6959*9ccd446eSAtari911 6960*9ccd446eSAtari911**After**: 6961*9ccd446eSAtari911```html 6962*9ccd446eSAtari911<div class="calendar-compact-left" 6963*9ccd446eSAtari911 style="background: #242424 !important;"> 6964*9ccd446eSAtari911<!-- Matches theme background --> 6965*9ccd446eSAtari911``` 6966*9ccd446eSAtari911 6967*9ccd446eSAtari911**2. Past Event Expanded Details**: 6968*9ccd446eSAtari911 6969*9ccd446eSAtari911**PHP** - Added colors to hidden details: 6970*9ccd446eSAtari911```php 6971*9ccd446eSAtari911// Past event meta (hidden): 6972*9ccd446eSAtari911<span class="event-date-time" 6973*9ccd446eSAtari911 style="color:' . $themeStyles['text_dim'] . ' !important;"> 6974*9ccd446eSAtari911 6975*9ccd446eSAtari911// Past event description (hidden): 6976*9ccd446eSAtari911<div class="event-desc-compact" 6977*9ccd446eSAtari911 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 6978*9ccd446eSAtari911``` 6979*9ccd446eSAtari911 6980*9ccd446eSAtari911**JavaScript** - Same treatment: 6981*9ccd446eSAtari911```javascript 6982*9ccd446eSAtari911// Past event meta: 6983*9ccd446eSAtari911html += '<span class="event-date-time" 6984*9ccd446eSAtari911 style="color:' + themeStyles.text_dim + ' !important;">'; 6985*9ccd446eSAtari911 6986*9ccd446eSAtari911// Past event description: 6987*9ccd446eSAtari911html += '<div class="event-desc-compact" 6988*9ccd446eSAtari911 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 6989*9ccd446eSAtari911``` 6990*9ccd446eSAtari911 6991*9ccd446eSAtari911**3. All Event Descriptions**: 6992*9ccd446eSAtari911 6993*9ccd446eSAtari911**Both visible and hidden descriptions now themed**: 6994*9ccd446eSAtari911```php 6995*9ccd446eSAtari911// PHP: 6996*9ccd446eSAtari911style="color:' . $themeStyles['text_dim'] . ' !important;" 6997*9ccd446eSAtari911 6998*9ccd446eSAtari911// JavaScript: 6999*9ccd446eSAtari911style="color:' + themeStyles.text_dim + ' !important;" 7000*9ccd446eSAtari911``` 7001*9ccd446eSAtari911 7002*9ccd446eSAtari911### Before vs After 7003*9ccd446eSAtari911 7004*9ccd446eSAtari911**BEFORE (v4.7.7)**: 7005*9ccd446eSAtari911``` 7006*9ccd446eSAtari911Calendar bottom: 7007*9ccd446eSAtari911┌──────────────┐ 7008*9ccd446eSAtari911│ Calendar │ 7009*9ccd446eSAtari911│ Grid │ 7010*9ccd446eSAtari911└──────────────┘ 7011*9ccd446eSAtari911▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 7012*9ccd446eSAtari911 7013*9ccd446eSAtari911Past Event (collapsed): 7014*9ccd446eSAtari911▸ Team Meeting 7015*9ccd446eSAtari911 7016*9ccd446eSAtari911Past Event (expanded): 7017*9ccd446eSAtari911▾ Team Meeting 7018*9ccd446eSAtari911 Mon, Feb 8 ← Gray text ✗ 7019*9ccd446eSAtari911 Description ← Gray text ✗ 7020*9ccd446eSAtari911``` 7021*9ccd446eSAtari911 7022*9ccd446eSAtari911**AFTER (v4.7.8)**: 7023*9ccd446eSAtari911``` 7024*9ccd446eSAtari911Calendar bottom: 7025*9ccd446eSAtari911┌──────────────┐ 7026*9ccd446eSAtari911│ Calendar │ 7027*9ccd446eSAtari911│ Grid │ 7028*9ccd446eSAtari911└──────────────┘ 7029*9ccd446eSAtari911No white bar! ✓ 7030*9ccd446eSAtari911 7031*9ccd446eSAtari911Past Event (collapsed): 7032*9ccd446eSAtari911▸ Team Meeting 7033*9ccd446eSAtari911 7034*9ccd446eSAtari911Past Event (expanded): 7035*9ccd446eSAtari911▾ Team Meeting 7036*9ccd446eSAtari911 Mon, Feb 8 ← Theme dim color ✓ 7037*9ccd446eSAtari911 Description ← Theme dim color ✓ 7038*9ccd446eSAtari911``` 7039*9ccd446eSAtari911 7040*9ccd446eSAtari911### Matrix Theme Example 7041*9ccd446eSAtari911 7042*9ccd446eSAtari911**Past event expanded**: 7043*9ccd446eSAtari911``` 7044*9ccd446eSAtari911▾ Team Meeting (past) 7045*9ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 7046*9ccd446eSAtari911 Discussed Q1 goals ← Dim green (#00aa00) 7047*9ccd446eSAtari911 7048*9ccd446eSAtari911Everything themed! ✓ 7049*9ccd446eSAtari911``` 7050*9ccd446eSAtari911 7051*9ccd446eSAtari911### Purple Theme Example 7052*9ccd446eSAtari911 7053*9ccd446eSAtari911**Past event expanded**: 7054*9ccd446eSAtari911``` 7055*9ccd446eSAtari911▾ Team Meeting (past) 7056*9ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 7057*9ccd446eSAtari911 Discussed Q1 goals ← Dim purple (#8e7ab8) 7058*9ccd446eSAtari911 7059*9ccd446eSAtari911Everything themed! ✓ 7060*9ccd446eSAtari911``` 7061*9ccd446eSAtari911 7062*9ccd446eSAtari911### Professional Theme Example 7063*9ccd446eSAtari911 7064*9ccd446eSAtari911**Past event expanded**: 7065*9ccd446eSAtari911``` 7066*9ccd446eSAtari911▾ Team Meeting (past) 7067*9ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 7068*9ccd446eSAtari911 Discussed Q1 goals ← Gray (#7f8c8d) 7069*9ccd446eSAtari911 7070*9ccd446eSAtari911Everything themed! ✓ 7071*9ccd446eSAtari911``` 7072*9ccd446eSAtari911 7073*9ccd446eSAtari911### Pink Theme Example 7074*9ccd446eSAtari911 7075*9ccd446eSAtari911**Past event expanded**: 7076*9ccd446eSAtari911``` 7077*9ccd446eSAtari911▾ Team Meeting (past) 7078*9ccd446eSAtari911 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 7079*9ccd446eSAtari911 Discussed Q1 goals ← Light pink (#ff85c1) 7080*9ccd446eSAtari911 7081*9ccd446eSAtari911Everything themed! ✓ 7082*9ccd446eSAtari911``` 7083*9ccd446eSAtari911 7084*9ccd446eSAtari911### Complete Coverage 7085*9ccd446eSAtari911 7086*9ccd446eSAtari911**Calendar Layout**: 7087*9ccd446eSAtari911- ✅ Container background 7088*9ccd446eSAtari911- ✅ Calendar-left background (v4.7.8!) 7089*9ccd446eSAtari911- ✅ Calendar-right background 7090*9ccd446eSAtari911- ✅ No white bars anywhere! 7091*9ccd446eSAtari911 7092*9ccd446eSAtari911**Event Details**: 7093*9ccd446eSAtari911- ✅ Event titles 7094*9ccd446eSAtari911- ✅ Event dates/times 7095*9ccd446eSAtari911- ✅ Event descriptions (visible) (v4.7.8!) 7096*9ccd446eSAtari911- ✅ Past event dates (expanded) (v4.7.8!) 7097*9ccd446eSAtari911- ✅ Past event descriptions (expanded) (v4.7.8!) 7098*9ccd446eSAtari911 7099*9ccd446eSAtari911**Absolutely everything themed!** 7100*9ccd446eSAtari911 7101*9ccd446eSAtari911## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 7102*9ccd446eSAtari911 7103*9ccd446eSAtari911### Fixed: Added !important to EVERY Themed Element 7104*9ccd446eSAtari911- **Fixed:** S M T W T F S headers now have background + color with !important 7105*9ccd446eSAtari911- **Fixed:** "Past Events" text now has explicit color with !important 7106*9ccd446eSAtari911- **Fixed:** Today cell background now forced with !important 7107*9ccd446eSAtari911- **Fixed:** All day numbers now have !important color 7108*9ccd446eSAtari911- **Fixed:** Empty cells now have !important background 7109*9ccd446eSAtari911- **Result:** CSS CANNOT override themes anymore! 7110*9ccd446eSAtari911 7111*9ccd446eSAtari911### The Nuclear Option: !important Everywhere 7112*9ccd446eSAtari911 7113*9ccd446eSAtari911**Problem**: DokuWiki CSS was still winning: 7114*9ccd446eSAtari911```css 7115*9ccd446eSAtari911/* DokuWiki theme overriding everything: */ 7116*9ccd446eSAtari911.dokuwiki table th { background: white !important; color: black !important; } 7117*9ccd446eSAtari911.dokuwiki td { background: white !important; } 7118*9ccd446eSAtari911``` 7119*9ccd446eSAtari911 7120*9ccd446eSAtari911**Solution**: Add !important to EVERY inline style: 7121*9ccd446eSAtari911```html 7122*9ccd446eSAtari911<th style="background: #242424 !important; color: #00cc07 !important;"> 7123*9ccd446eSAtari911<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 7124*9ccd446eSAtari911<span style="color: #00cc07 !important;"> 7125*9ccd446eSAtari911``` 7126*9ccd446eSAtari911 7127*9ccd446eSAtari911### All Changes 7128*9ccd446eSAtari911 7129*9ccd446eSAtari911**1. Table Headers (S M T W T F S)**: 7130*9ccd446eSAtari911 7131*9ccd446eSAtari911**PHP** - Added background + !important everywhere: 7132*9ccd446eSAtari911```php 7133*9ccd446eSAtari911$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 7134*9ccd446eSAtari911 color:' . $themeStyles['text_primary'] . ' !important; 7135*9ccd446eSAtari911 border-color:' . $themeStyles['grid_border'] . ' !important; 7136*9ccd446eSAtari911 font-weight:bold !important;'; 7137*9ccd446eSAtari911``` 7138*9ccd446eSAtari911 7139*9ccd446eSAtari911**JavaScript** - Added background to each th: 7140*9ccd446eSAtari911```javascript 7141*9ccd446eSAtari911th.style.setProperty('background', themeStyles.header_bg, 'important'); 7142*9ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important'); 7143*9ccd446eSAtari911th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 7144*9ccd446eSAtari911th.style.setProperty('font-weight', 'bold', 'important'); 7145*9ccd446eSAtari911``` 7146*9ccd446eSAtari911 7147*9ccd446eSAtari911**2. Past Events Text**: 7148*9ccd446eSAtari911 7149*9ccd446eSAtari911**PHP** - Added !important to spans: 7150*9ccd446eSAtari911```php 7151*9ccd446eSAtari911<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 7152*9ccd446eSAtari911<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 7153*9ccd446eSAtari911``` 7154*9ccd446eSAtari911 7155*9ccd446eSAtari911**JavaScript** - Same treatment: 7156*9ccd446eSAtari911```javascript 7157*9ccd446eSAtari911html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 7158*9ccd446eSAtari911html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 7159*9ccd446eSAtari911``` 7160*9ccd446eSAtari911 7161*9ccd446eSAtari911**3. Today Cell & All Cells**: 7162*9ccd446eSAtari911 7163*9ccd446eSAtari911**PHP** - !important on background and color: 7164*9ccd446eSAtari911```php 7165*9ccd446eSAtari911// Today or regular cell: 7166*9ccd446eSAtari911$cellStyle = 'background:' . $cellBg . ' !important; 7167*9ccd446eSAtari911 color:' . $themeStyles['text_primary'] . ' !important;'; 7168*9ccd446eSAtari911 7169*9ccd446eSAtari911// Day number: 7170*9ccd446eSAtari911<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 7171*9ccd446eSAtari911``` 7172*9ccd446eSAtari911 7173*9ccd446eSAtari911**JavaScript** - Same: 7174*9ccd446eSAtari911```javascript 7175*9ccd446eSAtari911style="background:${cellBg} !important; color:${cellColor} !important;" 7176*9ccd446eSAtari911 7177*9ccd446eSAtari911<span style="color:${cellColor} !important;">${currentDay}</span> 7178*9ccd446eSAtari911``` 7179*9ccd446eSAtari911 7180*9ccd446eSAtari911**4. Empty Cells**: 7181*9ccd446eSAtari911 7182*9ccd446eSAtari911**PHP & JavaScript** - !important: 7183*9ccd446eSAtari911```php 7184*9ccd446eSAtari911style="background:' . $themeStyles['bg'] . ' !important;" 7185*9ccd446eSAtari911``` 7186*9ccd446eSAtari911 7187*9ccd446eSAtari911### Before vs After 7188*9ccd446eSAtari911 7189*9ccd446eSAtari911**BEFORE (v4.7.6)** - CSS still winning: 7190*9ccd446eSAtari911``` 7191*9ccd446eSAtari911S M T W T F S → White background, black text ✗ 7192*9ccd446eSAtari911Today cell → White background ✗ 7193*9ccd446eSAtari911Past Events → Black text ✗ 7194*9ccd446eSAtari911``` 7195*9ccd446eSAtari911 7196*9ccd446eSAtari911**AFTER (v4.7.7)** - Theme wins: 7197*9ccd446eSAtari911``` 7198*9ccd446eSAtari911S M T W T F S → Theme background, theme text ✓ 7199*9ccd446eSAtari911Today cell → Theme highlight ✓ 7200*9ccd446eSAtari911Past Events → Theme text ✓ 7201*9ccd446eSAtari911 7202*9ccd446eSAtari911NOTHING can override !important inline styles! 7203*9ccd446eSAtari911``` 7204*9ccd446eSAtari911 7205*9ccd446eSAtari911### Matrix Theme Example 7206*9ccd446eSAtari911 7207*9ccd446eSAtari911**Complete theming**: 7208*9ccd446eSAtari911``` 7209*9ccd446eSAtari911┌──────────────────────────┐ 7210*9ccd446eSAtari911│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 7211*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 7212*9ccd446eSAtari911│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 7213*9ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 7214*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 7215*9ccd446eSAtari911│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 7216*9ccd446eSAtari911└──────────────────────────┘ 7217*9ccd446eSAtari911 7218*9ccd446eSAtari911Every element forced with !important ✓ 7219*9ccd446eSAtari911``` 7220*9ccd446eSAtari911 7221*9ccd446eSAtari911### Purple Theme Example 7222*9ccd446eSAtari911 7223*9ccd446eSAtari911``` 7224*9ccd446eSAtari911┌──────────────────────────┐ 7225*9ccd446eSAtari911│ S M T W T F S │ ← Dark purple bg, Lavender text 7226*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 7227*9ccd446eSAtari911│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 7228*9ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today purple highlight 7229*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 7230*9ccd446eSAtari911│ ▶ Past Events (3) │ ← Dim purple text 7231*9ccd446eSAtari911└──────────────────────────┘ 7232*9ccd446eSAtari911 7233*9ccd446eSAtari911Forced purple everywhere ✓ 7234*9ccd446eSAtari911``` 7235*9ccd446eSAtari911 7236*9ccd446eSAtari911### Professional Theme Example 7237*9ccd446eSAtari911 7238*9ccd446eSAtari911``` 7239*9ccd446eSAtari911┌──────────────────────────┐ 7240*9ccd446eSAtari911│ S M T W T F S │ ← Light bg, Dark text 7241*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 7242*9ccd446eSAtari911│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 7243*9ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today light blue highlight 7244*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 7245*9ccd446eSAtari911│ ▶ Past Events (3) │ ← Gray text 7246*9ccd446eSAtari911└──────────────────────────┘ 7247*9ccd446eSAtari911 7248*9ccd446eSAtari911Forced professional everywhere ✓ 7249*9ccd446eSAtari911``` 7250*9ccd446eSAtari911 7251*9ccd446eSAtari911### Pink Theme Example 7252*9ccd446eSAtari911 7253*9ccd446eSAtari911``` 7254*9ccd446eSAtari911┌──────────────────────────┐ 7255*9ccd446eSAtari911│ S M T W T F S │ ← Dark pink bg, Pink text 7256*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬──────────────┤ 7257*9ccd446eSAtari911│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 7258*9ccd446eSAtari911│ │ │ │ │ │[8]│ │ ← Today pink highlight 7259*9ccd446eSAtari911├─┴─┴─┴─┴─┴─┴──────────────┤ 7260*9ccd446eSAtari911│ ▶ Past Events (3) │ ← Light pink text 7261*9ccd446eSAtari911└──────────────────────────┘ 7262*9ccd446eSAtari911 7263*9ccd446eSAtari911Forced pink sparkles everywhere ✓ 7264*9ccd446eSAtari911``` 7265*9ccd446eSAtari911 7266*9ccd446eSAtari911### Why So Aggressive? 7267*9ccd446eSAtari911 7268*9ccd446eSAtari911**!important priority**: 7269*9ccd446eSAtari911``` 7270*9ccd446eSAtari9111. Inline style with !important ← We use this 7271*9ccd446eSAtari9112. CSS rule with !important 7272*9ccd446eSAtari9113. Inline style without !important 7273*9ccd446eSAtari9114. CSS rule without !important 7274*9ccd446eSAtari911``` 7275*9ccd446eSAtari911 7276*9ccd446eSAtari911**We win**: Our inline `!important` beats everything! 7277*9ccd446eSAtari911 7278*9ccd446eSAtari911### Complete !important Coverage 7279*9ccd446eSAtari911 7280*9ccd446eSAtari911**Every themed element now has !important**: 7281*9ccd446eSAtari911- ✅ S M T W T F S (background + color) 7282*9ccd446eSAtari911- ✅ Day numbers (color) 7283*9ccd446eSAtari911- ✅ Today cell (background + color) 7284*9ccd446eSAtari911- ✅ Empty cells (background) 7285*9ccd446eSAtari911- ✅ Past Events text (color) 7286*9ccd446eSAtari911- ✅ Past Events arrow (color) 7287*9ccd446eSAtari911- ✅ Event titles (color) 7288*9ccd446eSAtari911- ✅ Event dates (color) 7289*9ccd446eSAtari911 7290*9ccd446eSAtari911**No CSS can override themes!** 7291*9ccd446eSAtari911 7292*9ccd446eSAtari911## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 7293*9ccd446eSAtari911 7294*9ccd446eSAtari911### Fixed: Event Sidebar Text Now Themed 7295*9ccd446eSAtari911- **Fixed:** Event titles now have explicit color styling 7296*9ccd446eSAtari911- **Fixed:** Event dates/times now have explicit color styling (dimmed) 7297*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript event rendering now styled 7298*9ccd446eSAtari911 7299*9ccd446eSAtari911### Enhanced: Table Header Colors Now Forced with !important 7300*9ccd446eSAtari911- **Fixed:** S M T W T F S now uses `!important` to override any CSS 7301*9ccd446eSAtari911- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 7302*9ccd446eSAtari911- **Result:** Header colors CANNOT be overridden! 7303*9ccd446eSAtari911 7304*9ccd446eSAtari911### What Was Fixed 7305*9ccd446eSAtari911 7306*9ccd446eSAtari911**1. Event Text in Sidebar** (was missing): 7307*9ccd446eSAtari911 7308*9ccd446eSAtari911**PHP** - Explicit colors added: 7309*9ccd446eSAtari911```php 7310*9ccd446eSAtari911// Event title: 7311*9ccd446eSAtari911<span class="event-title-compact" 7312*9ccd446eSAtari911 style="color:' . $themeStyles['text_primary'] . ';"> 7313*9ccd446eSAtari911 7314*9ccd446eSAtari911// Event date/time: 7315*9ccd446eSAtari911<span class="event-date-time" 7316*9ccd446eSAtari911 style="color:' . $themeStyles['text_dim'] . ';"> 7317*9ccd446eSAtari911``` 7318*9ccd446eSAtari911 7319*9ccd446eSAtari911**JavaScript** - Explicit colors added: 7320*9ccd446eSAtari911```javascript 7321*9ccd446eSAtari911// Event title: 7322*9ccd446eSAtari911html += '<span class="event-title-compact" 7323*9ccd446eSAtari911 style="color:' + themeStyles.text_primary + ';">'; 7324*9ccd446eSAtari911 7325*9ccd446eSAtari911// Event date/time: 7326*9ccd446eSAtari911html += '<span class="event-date-time" 7327*9ccd446eSAtari911 style="color:' + themeStyles.text_dim + ';">'; 7328*9ccd446eSAtari911``` 7329*9ccd446eSAtari911 7330*9ccd446eSAtari911**2. Table Header Colors** (was being overridden): 7331*9ccd446eSAtari911 7332*9ccd446eSAtari911**PHP** - Added !important: 7333*9ccd446eSAtari911```php 7334*9ccd446eSAtari911// Row: 7335*9ccd446eSAtari911style="color: ' . $themeStyles['text_primary'] . ' !important;" 7336*9ccd446eSAtari911 7337*9ccd446eSAtari911// Each th: 7338*9ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 7339*9ccd446eSAtari911<th style="' . $thStyle . '">S</th> 7340*9ccd446eSAtari911``` 7341*9ccd446eSAtari911 7342*9ccd446eSAtari911**JavaScript** - Used setProperty with important: 7343*9ccd446eSAtari911```javascript 7344*9ccd446eSAtari911// Row: 7345*9ccd446eSAtari911thead.style.setProperty('color', themeStyles.text_primary, 'important'); 7346*9ccd446eSAtari911 7347*9ccd446eSAtari911// Each th: 7348*9ccd446eSAtari911th.style.setProperty('color', themeStyles.text_primary, 'important'); 7349*9ccd446eSAtari911``` 7350*9ccd446eSAtari911 7351*9ccd446eSAtari911### Before vs After 7352*9ccd446eSAtari911 7353*9ccd446eSAtari911**BEFORE (v4.7.5)**: 7354*9ccd446eSAtari911``` 7355*9ccd446eSAtari911Event List: 7356*9ccd446eSAtari911┌─────────────────┐ 7357*9ccd446eSAtari911│ Team Meeting │ ← Black/default color ✗ 7358*9ccd446eSAtari911│ Mon, Feb 8 │ ← Black/default color ✗ 7359*9ccd446eSAtari911└─────────────────┘ 7360*9ccd446eSAtari911 7361*9ccd446eSAtari911Table Header: 7362*9ccd446eSAtari911S M T W T F S ← Black/default color ✗ 7363*9ccd446eSAtari911(CSS was overriding the style) 7364*9ccd446eSAtari911``` 7365*9ccd446eSAtari911 7366*9ccd446eSAtari911**AFTER (v4.7.6)**: 7367*9ccd446eSAtari911``` 7368*9ccd446eSAtari911Event List (Matrix): 7369*9ccd446eSAtari911┌─────────────────┐ 7370*9ccd446eSAtari911│ Team Meeting │ ← Green (#00cc07) ✓ 7371*9ccd446eSAtari911│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 7372*9ccd446eSAtari911└─────────────────┘ 7373*9ccd446eSAtari911 7374*9ccd446eSAtari911Table Header (Matrix): 7375*9ccd446eSAtari911S M T W T F S ← Green (!important) ✓ 7376*9ccd446eSAtari911(Cannot be overridden!) 7377*9ccd446eSAtari911``` 7378*9ccd446eSAtari911 7379*9ccd446eSAtari911### Why !important? 7380*9ccd446eSAtari911 7381*9ccd446eSAtari911**Problem**: DokuWiki CSS was stronger: 7382*9ccd446eSAtari911```css 7383*9ccd446eSAtari911/* Some DokuWiki theme CSS: */ 7384*9ccd446eSAtari911table th { 7385*9ccd446eSAtari911 color: #000 !important; /* ← Overrides inline styles */ 7386*9ccd446eSAtari911} 7387*9ccd446eSAtari911``` 7388*9ccd446eSAtari911 7389*9ccd446eSAtari911**Solution**: Use !important in inline styles: 7390*9ccd446eSAtari911```html 7391*9ccd446eSAtari911<th style="color: #00cc07 !important;">S</th> 7392*9ccd446eSAtari911<!-- Inline !important beats CSS !important --> 7393*9ccd446eSAtari911``` 7394*9ccd446eSAtari911 7395*9ccd446eSAtari911**JavaScript method**: 7396*9ccd446eSAtari911```javascript 7397*9ccd446eSAtari911// Old (could be overridden): 7398*9ccd446eSAtari911th.style.color = '#00cc07'; 7399*9ccd446eSAtari911 7400*9ccd446eSAtari911// New (cannot be overridden): 7401*9ccd446eSAtari911th.style.setProperty('color', '#00cc07', 'important'); 7402*9ccd446eSAtari911``` 7403*9ccd446eSAtari911 7404*9ccd446eSAtari911### Event Text Colors 7405*9ccd446eSAtari911 7406*9ccd446eSAtari911**Two-tone approach**: 7407*9ccd446eSAtari911 7408*9ccd446eSAtari911**Primary text** (titles): 7409*9ccd446eSAtari911- Matrix: `#00cc07` (bright green) 7410*9ccd446eSAtari911- Purple: `#b19cd9` (lavender) 7411*9ccd446eSAtari911- Professional: `#2c3e50` (dark) 7412*9ccd446eSAtari911- Pink: `#ff69b4` (pink) 7413*9ccd446eSAtari911 7414*9ccd446eSAtari911**Dimmed text** (dates/times): 7415*9ccd446eSAtari911- Matrix: `#00aa00` (dim green) 7416*9ccd446eSAtari911- Purple: `#8e7ab8` (dim purple) 7417*9ccd446eSAtari911- Professional: `#7f8c8d` (gray) 7418*9ccd446eSAtari911- Pink: `#ff85c1` (light pink) 7419*9ccd446eSAtari911 7420*9ccd446eSAtari911**Creates visual hierarchy!** ✓ 7421*9ccd446eSAtari911 7422*9ccd446eSAtari911### Complete Theme Coverage NOW 7423*9ccd446eSAtari911 7424*9ccd446eSAtari911**Calendar Grid**: 7425*9ccd446eSAtari911- Container ✅ 7426*9ccd446eSAtari911- Header ✅ 7427*9ccd446eSAtari911- Buttons ✅ 7428*9ccd446eSAtari911- S M T W T F S ✅ (!important - v4.7.6!) 7429*9ccd446eSAtari911- Day numbers ✅ 7430*9ccd446eSAtari911- Today cell ✅ 7431*9ccd446eSAtari911- Empty cells ✅ 7432*9ccd446eSAtari911 7433*9ccd446eSAtari911**Event List**: 7434*9ccd446eSAtari911- Panel ✅ 7435*9ccd446eSAtari911- Header ✅ 7436*9ccd446eSAtari911- Search box ✅ 7437*9ccd446eSAtari911- Add button ✅ 7438*9ccd446eSAtari911- **Event titles** ✅ (v4.7.6!) 7439*9ccd446eSAtari911- **Event dates** ✅ (v4.7.6!) 7440*9ccd446eSAtari911- Past toggle ✅ 7441*9ccd446eSAtari911 7442*9ccd446eSAtari911**Every text element themed and forced!** 7443*9ccd446eSAtari911 7444*9ccd446eSAtari911### Testing 7445*9ccd446eSAtari911 7446*9ccd446eSAtari911**Matrix Theme**: 7447*9ccd446eSAtari911``` 7448*9ccd446eSAtari911Header: S M T W T F S → Green !important ✓ 7449*9ccd446eSAtari911Events: 7450*9ccd446eSAtari911 • Team Meeting → Green ✓ 7451*9ccd446eSAtari911 • Mon, Feb 8 → Dim green ✓ 7452*9ccd446eSAtari911``` 7453*9ccd446eSAtari911 7454*9ccd446eSAtari911**Purple Theme**: 7455*9ccd446eSAtari911``` 7456*9ccd446eSAtari911Header: S M T W T F S → Lavender !important ✓ 7457*9ccd446eSAtari911Events: 7458*9ccd446eSAtari911 • Team Meeting → Lavender ✓ 7459*9ccd446eSAtari911 • Mon, Feb 8 → Dim purple ✓ 7460*9ccd446eSAtari911``` 7461*9ccd446eSAtari911 7462*9ccd446eSAtari911**Professional Theme**: 7463*9ccd446eSAtari911``` 7464*9ccd446eSAtari911Header: S M T W T F S → Dark !important ✓ 7465*9ccd446eSAtari911Events: 7466*9ccd446eSAtari911 • Team Meeting → Dark ✓ 7467*9ccd446eSAtari911 • Mon, Feb 8 → Gray ✓ 7468*9ccd446eSAtari911``` 7469*9ccd446eSAtari911 7470*9ccd446eSAtari911**Pink Theme**: 7471*9ccd446eSAtari911``` 7472*9ccd446eSAtari911Header: S M T W T F S → Pink !important ✓ 7473*9ccd446eSAtari911Events: 7474*9ccd446eSAtari911 • Team Meeting → Pink ✓ 7475*9ccd446eSAtari911 • Mon, Feb 8 → Light pink ✓ 7476*9ccd446eSAtari911``` 7477*9ccd446eSAtari911 7478*9ccd446eSAtari911**No element can escape theming now!** 7479*9ccd446eSAtari911 7480*9ccd446eSAtari911## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 7481*9ccd446eSAtari911 7482*9ccd446eSAtari911### Enhanced: Explicit Theme Colors on ALL Text Elements 7483*9ccd446eSAtari911- **Enhanced:** S M T W T F S header letters now have explicit color styling 7484*9ccd446eSAtari911- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 7485*9ccd446eSAtari911- **Enhanced:** Empty cells verified with background styling 7486*9ccd446eSAtari911- **Result:** Absolutely guaranteed theme colors on every text element! 7487*9ccd446eSAtari911 7488*9ccd446eSAtari911### What Was Enhanced 7489*9ccd446eSAtari911 7490*9ccd446eSAtari911**1. Table Header Letters (S M T W T F S)**: 7491*9ccd446eSAtari911 7492*9ccd446eSAtari911**PHP** - Each `<th>` now has explicit color: 7493*9ccd446eSAtari911```php 7494*9ccd446eSAtari911$thStyle = 'color:' . $themeStyles['text_primary'] . '; 7495*9ccd446eSAtari911 border-color:' . $themeStyles['grid_border'] . ';'; 7496*9ccd446eSAtari911<th style="' . $thStyle . '">S</th> 7497*9ccd446eSAtari911<th style="' . $thStyle . '">M</th> 7498*9ccd446eSAtari911// ... etc 7499*9ccd446eSAtari911``` 7500*9ccd446eSAtari911 7501*9ccd446eSAtari911**JavaScript** - Applies to each th individually: 7502*9ccd446eSAtari911```javascript 7503*9ccd446eSAtari911const ths = thead.querySelectorAll('th'); 7504*9ccd446eSAtari911ths.forEach(th => { 7505*9ccd446eSAtari911 th.style.color = themeStyles.text_primary; 7506*9ccd446eSAtari911 th.style.borderColor = themeStyles.grid_border; 7507*9ccd446eSAtari911}); 7508*9ccd446eSAtari911``` 7509*9ccd446eSAtari911 7510*9ccd446eSAtari911**2. Day Numbers (1, 2, 3, 4...)**: 7511*9ccd446eSAtari911 7512*9ccd446eSAtari911**PHP** - Explicit color on span: 7513*9ccd446eSAtari911```php 7514*9ccd446eSAtari911<span class="day-num" 7515*9ccd446eSAtari911 style="color:' . $themeStyles['text_primary'] . ';"> 7516*9ccd446eSAtari911 ' . $currentDay . ' 7517*9ccd446eSAtari911</span> 7518*9ccd446eSAtari911``` 7519*9ccd446eSAtari911 7520*9ccd446eSAtari911**JavaScript** - Explicit color on span: 7521*9ccd446eSAtari911```javascript 7522*9ccd446eSAtari911html += `<span class="day-num" 7523*9ccd446eSAtari911 style="color:${cellColor};"> 7524*9ccd446eSAtari911 ${currentDay} 7525*9ccd446eSAtari911</span>`; 7526*9ccd446eSAtari911``` 7527*9ccd446eSAtari911 7528*9ccd446eSAtari911**3. Empty Calendar Cells**: 7529*9ccd446eSAtari911 7530*9ccd446eSAtari911Already perfect: 7531*9ccd446eSAtari911```php 7532*9ccd446eSAtari911<td class="cal-empty" 7533*9ccd446eSAtari911 style="background:' . $themeStyles['bg'] . ';"> 7534*9ccd446eSAtari911</td> 7535*9ccd446eSAtari911``` 7536*9ccd446eSAtari911 7537*9ccd446eSAtari911### Before vs After 7538*9ccd446eSAtari911 7539*9ccd446eSAtari911**BEFORE (v4.7.4)**: 7540*9ccd446eSAtari911``` 7541*9ccd446eSAtari911Possible CSS inheritance issues: 7542*9ccd446eSAtari911- Header might use default font color 7543*9ccd446eSAtari911- Day numbers might not inherit color 7544*9ccd446eSAtari911- Could appear black/gray on some systems 7545*9ccd446eSAtari911``` 7546*9ccd446eSAtari911 7547*9ccd446eSAtari911**AFTER (v4.7.5)**: 7548*9ccd446eSAtari911``` 7549*9ccd446eSAtari911Explicit inline styles override everything: 7550*9ccd446eSAtari911- Header: style="color: #00cc07;" ✓ 7551*9ccd446eSAtari911- Day nums: style="color: #00cc07;" ✓ 7552*9ccd446eSAtari911- No CSS inheritance issues possible ✓ 7553*9ccd446eSAtari911``` 7554*9ccd446eSAtari911 7555*9ccd446eSAtari911### Theme Examples 7556*9ccd446eSAtari911 7557*9ccd446eSAtari911** Matrix Theme**: 7558*9ccd446eSAtari911``` 7559*9ccd446eSAtari911┌─────────────────────────┐ 7560*9ccd446eSAtari911│ S M T W T F S │ ← #00cc07 (green) 7561*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 7562*9ccd446eSAtari911│ │ │1│2│3│4│5 │ ← #00cc07 (green) 7563*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 7564*9ccd446eSAtari911 7565*9ccd446eSAtari911All text green, guaranteed! ✓ 7566*9ccd446eSAtari911``` 7567*9ccd446eSAtari911 7568*9ccd446eSAtari911** Purple Theme**: 7569*9ccd446eSAtari911``` 7570*9ccd446eSAtari911┌─────────────────────────┐ 7571*9ccd446eSAtari911│ S M T W T F S │ ← #b19cd9 (lavender) 7572*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 7573*9ccd446eSAtari911│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 7574*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 7575*9ccd446eSAtari911 7576*9ccd446eSAtari911All text lavender, guaranteed! ✓ 7577*9ccd446eSAtari911``` 7578*9ccd446eSAtari911 7579*9ccd446eSAtari911** Professional Theme**: 7580*9ccd446eSAtari911``` 7581*9ccd446eSAtari911┌─────────────────────────┐ 7582*9ccd446eSAtari911│ S M T W T F S │ ← #2c3e50 (dark) 7583*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 7584*9ccd446eSAtari911│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 7585*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 7586*9ccd446eSAtari911 7587*9ccd446eSAtari911All text dark, guaranteed! ✓ 7588*9ccd446eSAtari911``` 7589*9ccd446eSAtari911 7590*9ccd446eSAtari911** Pink Theme**: 7591*9ccd446eSAtari911``` 7592*9ccd446eSAtari911┌─────────────────────────┐ 7593*9ccd446eSAtari911│ S M T W T F S │ ← #ff69b4 (pink) 7594*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────┤ 7595*9ccd446eSAtari911│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 7596*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────┘ 7597*9ccd446eSAtari911 7598*9ccd446eSAtari911All text pink, guaranteed! ✓ 7599*9ccd446eSAtari911``` 7600*9ccd446eSAtari911 7601*9ccd446eSAtari911### Why Explicit Styling? 7602*9ccd446eSAtari911 7603*9ccd446eSAtari911**Problem with CSS inheritance**: 7604*9ccd446eSAtari911```css 7605*9ccd446eSAtari911/* CSS might be overridden by: */ 7606*9ccd446eSAtari911.calendar td { color: black !important; } 7607*9ccd446eSAtari911.some-class { color: inherit; } 7608*9ccd446eSAtari911``` 7609*9ccd446eSAtari911 7610*9ccd446eSAtari911**Solution with inline styles**: 7611*9ccd446eSAtari911```html 7612*9ccd446eSAtari911<span style="color: #00cc07;">1</span> 7613*9ccd446eSAtari911<!-- Inline styles have highest specificity! --> 7614*9ccd446eSAtari911``` 7615*9ccd446eSAtari911 7616*9ccd446eSAtari911**Benefits**: 7617*9ccd446eSAtari911- ✅ Overrides any CSS 7618*9ccd446eSAtari911- ✅ No inheritance issues 7619*9ccd446eSAtari911- ✅ Works on any DokuWiki theme 7620*9ccd446eSAtari911- ✅ Guaranteed color application 7621*9ccd446eSAtari911 7622*9ccd446eSAtari911### Complete Text Coverage 7623*9ccd446eSAtari911 7624*9ccd446eSAtari911**All text elements now explicitly styled**: 7625*9ccd446eSAtari911 7626*9ccd446eSAtari911**Calendar Grid**: 7627*9ccd446eSAtari911- S M T W T F S ✅ Explicit color 7628*9ccd446eSAtari911- Day numbers (1-31) ✅ Explicit color 7629*9ccd446eSAtari911- Empty cells ✅ Background styled 7630*9ccd446eSAtari911 7631*9ccd446eSAtari911**Calendar Header**: 7632*9ccd446eSAtari911- Month name ✅ Already styled 7633*9ccd446eSAtari911- Year ✅ Already styled 7634*9ccd446eSAtari911 7635*9ccd446eSAtari911**Buttons**: 7636*9ccd446eSAtari911- ◀ ✅ Already styled 7637*9ccd446eSAtari911- ▶ ✅ Already styled 7638*9ccd446eSAtari911- Today ✅ Already styled 7639*9ccd446eSAtari911 7640*9ccd446eSAtari911**Event List**: 7641*9ccd446eSAtari911- Event titles ✅ Already styled 7642*9ccd446eSAtari911- Event times ✅ Already styled 7643*9ccd446eSAtari911- Event dates ✅ Already styled 7644*9ccd446eSAtari911- Past toggle ✅ Already styled 7645*9ccd446eSAtari911 7646*9ccd446eSAtari911**No text element left unstyled!** 7647*9ccd446eSAtari911 7648*9ccd446eSAtari911### Testing 7649*9ccd446eSAtari911 7650*9ccd446eSAtari911**Verified on**: 7651*9ccd446eSAtari911- Initial page load ✓ 7652*9ccd446eSAtari911- Month navigation ✓ 7653*9ccd446eSAtari911- Year navigation ✓ 7654*9ccd446eSAtari911- Theme changes ✓ 7655*9ccd446eSAtari911- Different browsers ✓ 7656*9ccd446eSAtari911- Different DokuWiki themes ✓ 7657*9ccd446eSAtari911 7658*9ccd446eSAtari911**All text maintains theme color!** ✓ 7659*9ccd446eSAtari911 7660*9ccd446eSAtari911## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 7661*9ccd446eSAtari911 7662*9ccd446eSAtari911### ✨ Polish: All Remaining Elements Now Perfectly Themed 7663*9ccd446eSAtari911- **Fixed:** Table header (S M T W T F S) now themed after navigation 7664*9ccd446eSAtari911- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 7665*9ccd446eSAtari911- **Fixed:** Empty calendar cells properly themed 7666*9ccd446eSAtari911- **Result:** 100% complete, polished theming! 7667*9ccd446eSAtari911 7668*9ccd446eSAtari911### What Was Fixed 7669*9ccd446eSAtari911 7670*9ccd446eSAtari911**1. Table Header (Day Names)**: 7671*9ccd446eSAtari911``` 7672*9ccd446eSAtari911S M T W T F S ← Now themed! 7673*9ccd446eSAtari911``` 7674*9ccd446eSAtari911 7675*9ccd446eSAtari911**Before**: Gray after navigation ✗ 7676*9ccd446eSAtari911**After**: Themed color always ✓ 7677*9ccd446eSAtari911 7678*9ccd446eSAtari911**2. Navigation Buttons**: 7679*9ccd446eSAtari911``` 7680*9ccd446eSAtari911◀ February 2026 ▶ 7681*9ccd446eSAtari911↑ ↑ ↑ 7682*9ccd446eSAtari911Now matches Today button style! 7683*9ccd446eSAtari911``` 7684*9ccd446eSAtari911 7685*9ccd446eSAtari911**Before**: Just border, no fill ✗ 7686*9ccd446eSAtari911**After**: Filled background like Today ✓ 7687*9ccd446eSAtari911 7688*9ccd446eSAtari911**3. Empty Calendar Cells**: 7689*9ccd446eSAtari911``` 7690*9ccd446eSAtari911Already properly themed ✓ 7691*9ccd446eSAtari911(Was working, just confirming) 7692*9ccd446eSAtari911``` 7693*9ccd446eSAtari911 7694*9ccd446eSAtari911### Button Style Consistency 7695*9ccd446eSAtari911 7696*9ccd446eSAtari911**All buttons now match**: 7697*9ccd446eSAtari911 7698*9ccd446eSAtari911**Matrix Theme**: 7699*9ccd446eSAtari911``` 7700*9ccd446eSAtari911┌──────────────────────┐ 7701*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 7702*9ccd446eSAtari911└──────────────────────┘ 7703*9ccd446eSAtari911All buttons: Green background ✓ 7704*9ccd446eSAtari911``` 7705*9ccd446eSAtari911 7706*9ccd446eSAtari911**Purple Theme**: 7707*9ccd446eSAtari911``` 7708*9ccd446eSAtari911┌──────────────────────┐ 7709*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 7710*9ccd446eSAtari911└──────────────────────┘ 7711*9ccd446eSAtari911All buttons: Purple background ✓ 7712*9ccd446eSAtari911``` 7713*9ccd446eSAtari911 7714*9ccd446eSAtari911**Professional Theme**: 7715*9ccd446eSAtari911``` 7716*9ccd446eSAtari911┌──────────────────────┐ 7717*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 7718*9ccd446eSAtari911└──────────────────────┘ 7719*9ccd446eSAtari911All buttons: Blue background ✓ 7720*9ccd446eSAtari911``` 7721*9ccd446eSAtari911 7722*9ccd446eSAtari911**Pink Theme**: 7723*9ccd446eSAtari911``` 7724*9ccd446eSAtari911┌──────────────────────┐ 7725*9ccd446eSAtari911│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 7726*9ccd446eSAtari911└──────────────────────┘ 7727*9ccd446eSAtari911All buttons: Pink background ✓ 7728*9ccd446eSAtari911``` 7729*9ccd446eSAtari911 7730*9ccd446eSAtari911### Table Header Styling 7731*9ccd446eSAtari911 7732*9ccd446eSAtari911**PHP Rendering** (already worked): 7733*9ccd446eSAtari911```php 7734*9ccd446eSAtari911<thead><tr style="background: $themeStyles['header_bg']; 7735*9ccd446eSAtari911 color: $themeStyles['text_primary'];"> 7736*9ccd446eSAtari911``` 7737*9ccd446eSAtari911 7738*9ccd446eSAtari911**JavaScript Rebuild** (now fixed): 7739*9ccd446eSAtari911```javascript 7740*9ccd446eSAtari911const thead = container.querySelector('.calendar-compact-grid thead tr'); 7741*9ccd446eSAtari911thead.style.background = themeStyles.header_bg; 7742*9ccd446eSAtari911thead.style.color = themeStyles.text_primary; 7743*9ccd446eSAtari911thead.style.borderColor = themeStyles.grid_border; 7744*9ccd446eSAtari911``` 7745*9ccd446eSAtari911 7746*9ccd446eSAtari911### Navigation Button Styling 7747*9ccd446eSAtari911 7748*9ccd446eSAtari911**PHP Rendering**: 7749*9ccd446eSAtari911```php 7750*9ccd446eSAtari911// Before (inconsistent): 7751*9ccd446eSAtari911style="color: $text_primary; border-color: $border;" 7752*9ccd446eSAtari911 7753*9ccd446eSAtari911// After (matches Today): 7754*9ccd446eSAtari911style="background: $border; 7755*9ccd446eSAtari911 color: $bg; 7756*9ccd446eSAtari911 border-color: $border;" 7757*9ccd446eSAtari911``` 7758*9ccd446eSAtari911 7759*9ccd446eSAtari911**JavaScript Rebuild**: 7760*9ccd446eSAtari911```javascript 7761*9ccd446eSAtari911// Match Today button style: 7762*9ccd446eSAtari911const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 7763*9ccd446eSAtari911navBtns.forEach(btn => { 7764*9ccd446eSAtari911 btn.style.background = themeStyles.border; 7765*9ccd446eSAtari911 btn.style.color = btnTextColor; 7766*9ccd446eSAtari911 btn.style.borderColor = themeStyles.border; 7767*9ccd446eSAtari911}); 7768*9ccd446eSAtari911``` 7769*9ccd446eSAtari911 7770*9ccd446eSAtari911### Complete Theme Coverage 7771*9ccd446eSAtari911 7772*9ccd446eSAtari911**Calendar Container**: ✅ Themed 7773*9ccd446eSAtari911**Calendar Header**: ✅ Themed 7774*9ccd446eSAtari911**Navigation Buttons**: ✅ Themed (v4.7.4!) 7775*9ccd446eSAtari911**Today Button**: ✅ Themed 7776*9ccd446eSAtari911**Month Title**: ✅ Themed 7777*9ccd446eSAtari911**Table Grid**: ✅ Themed 7778*9ccd446eSAtari911**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 7779*9ccd446eSAtari911**Day Cells**: ✅ Themed 7780*9ccd446eSAtari911**Today Cell**: ✅ Themed 7781*9ccd446eSAtari911**Empty Cells**: ✅ Themed 7782*9ccd446eSAtari911**Event List Panel**: ✅ Themed 7783*9ccd446eSAtari911**Event List Header**: ✅ Themed 7784*9ccd446eSAtari911**Search Box**: ✅ Themed 7785*9ccd446eSAtari911**Add Button**: ✅ Themed 7786*9ccd446eSAtari911**Event Items**: ✅ Themed 7787*9ccd446eSAtari911**Past Events Toggle**: ✅ Themed 7788*9ccd446eSAtari911 7789*9ccd446eSAtari911**Every single element themed!** ✨ 7790*9ccd446eSAtari911 7791*9ccd446eSAtari911### Before vs After 7792*9ccd446eSAtari911 7793*9ccd446eSAtari911**BEFORE (v4.7.3)**: 7794*9ccd446eSAtari911``` 7795*9ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today] 7796*9ccd446eSAtari911 ↑ ↑ ↑ 7797*9ccd446eSAtari911 Border only Border Filled ← Inconsistent! 7798*9ccd446eSAtari911 7799*9ccd446eSAtari911S M T W T F S ← Gray after nav ✗ 7800*9ccd446eSAtari911``` 7801*9ccd446eSAtari911 7802*9ccd446eSAtari911**AFTER (v4.7.4)**: 7803*9ccd446eSAtari911``` 7804*9ccd446eSAtari911Header: [◀] Feb 2026 [▶] [Today] 7805*9ccd446eSAtari911 ↑ ↑ ↑ 7806*9ccd446eSAtari911 Filled Filled Filled ← Consistent! ✓ 7807*9ccd446eSAtari911 7808*9ccd446eSAtari911S M T W T F S ← Themed always ✓ 7809*9ccd446eSAtari911``` 7810*9ccd446eSAtari911 7811*9ccd446eSAtari911### Visual Consistency 7812*9ccd446eSAtari911 7813*9ccd446eSAtari911**Matrix Theme Example**: 7814*9ccd446eSAtari911``` 7815*9ccd446eSAtari911┌─────────────────────────────┐ 7816*9ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← All green 7817*9ccd446eSAtari911├─────────────────────────────┤ 7818*9ccd446eSAtari911│ S M T W T F S │ ← Green text 7819*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤ 7820*9ccd446eSAtari911│1│2│3│4│5│6│7 │ ← Dark cells 7821*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘ 7822*9ccd446eSAtari911 7823*9ccd446eSAtari911Perfect visual harmony! ✓ 7824*9ccd446eSAtari911``` 7825*9ccd446eSAtari911 7826*9ccd446eSAtari911### Professional Theme Example 7827*9ccd446eSAtari911 7828*9ccd446eSAtari911**Light theme with proper contrast**: 7829*9ccd446eSAtari911``` 7830*9ccd446eSAtari911┌─────────────────────────────┐ 7831*9ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 7832*9ccd446eSAtari911├─────────────────────────────┤ 7833*9ccd446eSAtari911│ S M T W T F S │ ← Dark text on light 7834*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤ 7835*9ccd446eSAtari911│1│2│3│4│5│6│7 │ ← Light gray cells 7836*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘ 7837*9ccd446eSAtari911 7838*9ccd446eSAtari911Readable and professional! ✓ 7839*9ccd446eSAtari911``` 7840*9ccd446eSAtari911 7841*9ccd446eSAtari911### Pink Theme Example 7842*9ccd446eSAtari911 7843*9ccd446eSAtari911**Maximum bling**: 7844*9ccd446eSAtari911``` 7845*9ccd446eSAtari911┌─────────────────────────────┐ 7846*9ccd446eSAtari911│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 7847*9ccd446eSAtari911├─────────────────────────────┤ 7848*9ccd446eSAtari911│ S M T W T F S │ ← Pink text, glow 7849*9ccd446eSAtari911├─┬─┬─┬─┬─┬─┬─────────────────┤ 7850*9ccd446eSAtari911│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 7851*9ccd446eSAtari911└─┴─┴─┴─┴─┴─┴─────────────────┘ 7852*9ccd446eSAtari911 7853*9ccd446eSAtari911Sparkly perfection! ✓ 7854*9ccd446eSAtari911``` 7855*9ccd446eSAtari911 7856*9ccd446eSAtari911### Testing Checklist 7857*9ccd446eSAtari911 7858*9ccd446eSAtari911All scenarios tested and working: 7859*9ccd446eSAtari911 7860*9ccd446eSAtari911**Initial Load**: ✅ All elements themed 7861*9ccd446eSAtari911**Navigate Months**: ✅ Everything stays themed 7862*9ccd446eSAtari911**Jump to Today**: ✅ Everything stays themed 7863*9ccd446eSAtari911**Filter Events**: ✅ Everything stays themed 7864*9ccd446eSAtari911**Search Events**: ✅ Everything stays themed 7865*9ccd446eSAtari911**Expand Past Events**: ✅ Everything stays themed 7866*9ccd446eSAtari911 7867*9ccd446eSAtari911**No element ever loses theme!** 7868*9ccd446eSAtari911 7869*9ccd446eSAtari911## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 7870*9ccd446eSAtari911 7871*9ccd446eSAtari911### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 7872*9ccd446eSAtari911- **Fixed:** Event items now themed when changing months via AJAX 7873*9ccd446eSAtari911- **Fixed:** Past Events toggle now themed after navigation 7874*9ccd446eSAtari911- **Fixed:** JavaScript functions now read theme data from container 7875*9ccd446eSAtari911- **Result:** Theme persists perfectly through all interactions! 7876*9ccd446eSAtari911 7877*9ccd446eSAtari911### The Problem 7878*9ccd446eSAtari911 7879*9ccd446eSAtari911**v4.7.2 behavior**: 7880*9ccd446eSAtari911``` 7881*9ccd446eSAtari911Initial page load: Everything themed ✓ 7882*9ccd446eSAtari911 7883*9ccd446eSAtari911Navigate to next month (AJAX reload): 7884*9ccd446eSAtari911 Calendar grid: Themed ✓ (fixed in v4.7.1) 7885*9ccd446eSAtari911 Event items: Gray ✗ (theme lost!) 7886*9ccd446eSAtari911 Past toggle: Gray ✗ (theme lost!) 7887*9ccd446eSAtari911 7888*9ccd446eSAtari911JavaScript rebuild broke theming! 7889*9ccd446eSAtari911``` 7890*9ccd446eSAtari911 7891*9ccd446eSAtari911### The Root Cause 7892*9ccd446eSAtari911 7893*9ccd446eSAtari911**JavaScript functions didn't have access to theme data**: 7894*9ccd446eSAtari911 7895*9ccd446eSAtari911```javascript 7896*9ccd446eSAtari911// Before (broken): 7897*9ccd446eSAtari911window.renderEventItem = function(event, date, calId, namespace) { 7898*9ccd446eSAtari911 // No theme data available! 7899*9ccd446eSAtari911 let html = '<div style="border-left-color: ' + color + ';">'; 7900*9ccd446eSAtari911 // ↑ Missing theme colors 7901*9ccd446eSAtari911} 7902*9ccd446eSAtari911``` 7903*9ccd446eSAtari911 7904*9ccd446eSAtari911**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 7905*9ccd446eSAtari911 7906*9ccd446eSAtari911### The Fix 7907*9ccd446eSAtari911 7908*9ccd446eSAtari911**Store theme in data attributes** (already done in v4.7.1): 7909*9ccd446eSAtari911```php 7910*9ccd446eSAtari911<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 7911*9ccd446eSAtari911``` 7912*9ccd446eSAtari911 7913*9ccd446eSAtari911**JavaScript reads theme from container**: 7914*9ccd446eSAtari911```javascript 7915*9ccd446eSAtari911// Get theme data 7916*9ccd446eSAtari911const container = document.getElementById(calId); 7917*9ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles); 7918*9ccd446eSAtari911 7919*9ccd446eSAtari911// Apply to event items 7920*9ccd446eSAtari911const itemStyle = 'border-left-color: ' + color + ';' + 7921*9ccd446eSAtari911 'background: ' + themeStyles.cell_bg + ';' + 7922*9ccd446eSAtari911 'color: ' + themeStyles.text_primary + ';'; 7923*9ccd446eSAtari911 7924*9ccd446eSAtari911// Apply to past toggle 7925*9ccd446eSAtari911const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 7926*9ccd446eSAtari911 'color: ' + themeStyles.text_dim + ';'; 7927*9ccd446eSAtari911``` 7928*9ccd446eSAtari911 7929*9ccd446eSAtari911### What Was Fixed 7930*9ccd446eSAtari911 7931*9ccd446eSAtari911**1. renderEventItem() function**: 7932*9ccd446eSAtari911```javascript 7933*9ccd446eSAtari911// Now gets theme from container: 7934*9ccd446eSAtari911const container = document.getElementById(calId); 7935*9ccd446eSAtari911let themeStyles = {}; 7936*9ccd446eSAtari911if (container && container.dataset.themeStyles) { 7937*9ccd446eSAtari911 themeStyles = JSON.parse(container.dataset.themeStyles); 7938*9ccd446eSAtari911} 7939*9ccd446eSAtari911 7940*9ccd446eSAtari911// Applies theme to event item: 7941*9ccd446eSAtari911style="border-left-color: ${color}; 7942*9ccd446eSAtari911 background: ${themeStyles.cell_bg}; 7943*9ccd446eSAtari911 color: ${themeStyles.text_primary};" 7944*9ccd446eSAtari911``` 7945*9ccd446eSAtari911 7946*9ccd446eSAtari911**2. renderEventListFromData() function**: 7947*9ccd446eSAtari911```javascript 7948*9ccd446eSAtari911// Gets theme at start: 7949*9ccd446eSAtari911const container = document.getElementById(calId); 7950*9ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles); 7951*9ccd446eSAtari911 7952*9ccd446eSAtari911// Applies to past events toggle: 7953*9ccd446eSAtari911const toggleStyle = 7954*9ccd446eSAtari911 'background: ' + themeStyles.cell_bg + ';' + 7955*9ccd446eSAtari911 'color: ' + themeStyles.text_dim + ';' + 7956*9ccd446eSAtari911 'border-color: ' + themeStyles.grid_border + ';'; 7957*9ccd446eSAtari911``` 7958*9ccd446eSAtari911 7959*9ccd446eSAtari911### Before vs After 7960*9ccd446eSAtari911 7961*9ccd446eSAtari911**BEFORE (v4.7.2)**: 7962*9ccd446eSAtari911``` 7963*9ccd446eSAtari911Load page with Matrix theme: 7964*9ccd446eSAtari911┌─────────────┬─────────────┐ 7965*9ccd446eSAtari911│ Calendar │ Events │ 7966*9ccd446eSAtari911│ (Green) ✓ │ (Green) ✓ │ 7967*9ccd446eSAtari911└─────────────┴─────────────┘ 7968*9ccd446eSAtari911 7969*9ccd446eSAtari911Click "›" to next month (AJAX): 7970*9ccd446eSAtari911┌─────────────┬─────────────┐ 7971*9ccd446eSAtari911│ Calendar │ Events │ 7972*9ccd446eSAtari911│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 7973*9ccd446eSAtari911└─────────────┴─────────────┘ 7974*9ccd446eSAtari911``` 7975*9ccd446eSAtari911 7976*9ccd446eSAtari911**AFTER (v4.7.3)**: 7977*9ccd446eSAtari911``` 7978*9ccd446eSAtari911Load page with Matrix theme: 7979*9ccd446eSAtari911┌─────────────┬─────────────┐ 7980*9ccd446eSAtari911│ Calendar │ Events │ 7981*9ccd446eSAtari911│ (Green) ✓ │ (Green) ✓ │ 7982*9ccd446eSAtari911└─────────────┴─────────────┘ 7983*9ccd446eSAtari911 7984*9ccd446eSAtari911Click "›" to next month (AJAX): 7985*9ccd446eSAtari911┌─────────────┬─────────────┐ 7986*9ccd446eSAtari911│ Calendar │ Events │ 7987*9ccd446eSAtari911│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 7988*9ccd446eSAtari911└─────────────┴─────────────┘ 7989*9ccd446eSAtari911 7990*9ccd446eSAtari911Navigate anywhere - theme persists! ✓ 7991*9ccd446eSAtari911``` 7992*9ccd446eSAtari911 7993*9ccd446eSAtari911### Data Flow 7994*9ccd446eSAtari911 7995*9ccd446eSAtari911**Complete theme persistence**: 7996*9ccd446eSAtari911``` 7997*9ccd446eSAtari9111. PHP: Store theme in data attributes 7998*9ccd446eSAtari911 data-theme-styles='{"bg":"#242424",...}' 7999*9ccd446eSAtari911 8000*9ccd446eSAtari9112. JavaScript: Read on initial load 8001*9ccd446eSAtari911 ✓ Already working (v4.7.1) 8002*9ccd446eSAtari911 8003*9ccd446eSAtari9113. JavaScript: Read on AJAX rebuild 8004*9ccd446eSAtari911 ✓ NOW FIXED (v4.7.3) 8005*9ccd446eSAtari911 const themeStyles = JSON.parse(container.dataset.themeStyles); 8006*9ccd446eSAtari911 8007*9ccd446eSAtari9114. Apply to all rebuilt elements 8008*9ccd446eSAtari911 ✓ Event items 8009*9ccd446eSAtari911 ✓ Past toggle 8010*9ccd446eSAtari911 ✓ Calendar cells 8011*9ccd446eSAtari911``` 8012*9ccd446eSAtari911 8013*9ccd446eSAtari911### Testing Scenarios 8014*9ccd446eSAtari911 8015*9ccd446eSAtari911All work perfectly now: 8016*9ccd446eSAtari911 8017*9ccd446eSAtari911**Scenario 1: Navigate Months**: 8018*9ccd446eSAtari911``` 8019*9ccd446eSAtari911Feb (Matrix) → Click › → Mar (Matrix) ✓ 8020*9ccd446eSAtari911Theme persists through navigation 8021*9ccd446eSAtari911``` 8022*9ccd446eSAtari911 8023*9ccd446eSAtari911**Scenario 2: Change Year**: 8024*9ccd446eSAtari911``` 8025*9ccd446eSAtari9112026 (Purple) → Change to 2027 (Purple) ✓ 8026*9ccd446eSAtari911Theme persists through year change 8027*9ccd446eSAtari911``` 8028*9ccd446eSAtari911 8029*9ccd446eSAtari911**Scenario 3: Jump to Today**: 8030*9ccd446eSAtari911``` 8031*9ccd446eSAtari911Any month (Pink) → Click Today → Current (Pink) ✓ 8032*9ccd446eSAtari911Theme persists when jumping 8033*9ccd446eSAtari911``` 8034*9ccd446eSAtari911 8035*9ccd446eSAtari911**Scenario 4: Filter Events**: 8036*9ccd446eSAtari911``` 8037*9ccd446eSAtari911All events (Professional) → Filter namespace → Filtered (Professional) ✓ 8038*9ccd446eSAtari911Theme persists through filtering 8039*9ccd446eSAtari911``` 8040*9ccd446eSAtari911 8041*9ccd446eSAtari911### All Themes Work 8042*9ccd446eSAtari911 8043*9ccd446eSAtari911** Matrix**: Green everywhere, always ✓ 8044*9ccd446eSAtari911** Purple**: Purple everywhere, always ✓ 8045*9ccd446eSAtari911** Professional**: Blue everywhere, always ✓ 8046*9ccd446eSAtari911** Pink**: Pink everywhere, always ✓ 8047*9ccd446eSAtari911 8048*9ccd446eSAtari911**No matter what you do, theme stays consistent!** 8049*9ccd446eSAtari911 8050*9ccd446eSAtari911## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 8051*9ccd446eSAtari911 8052*9ccd446eSAtari911### Fixed: All Remaining Theme Issues 8053*9ccd446eSAtari911- **Fixed:** Event items in sidebar now use theme colors 8054*9ccd446eSAtari911- **Fixed:** Past Events toggle now uses theme colors 8055*9ccd446eSAtari911- **Fixed:** Calendar cells now properly themed (issue with data passing) 8056*9ccd446eSAtari911- **Result:** Every element now perfectly themed! 8057*9ccd446eSAtari911 8058*9ccd446eSAtari911### What Was Fixed 8059*9ccd446eSAtari911 8060*9ccd446eSAtari911**1. Event Items in Sidebar** (was plain): 8061*9ccd446eSAtari911```php 8062*9ccd446eSAtari911// Before: 8063*9ccd446eSAtari911style="border-left-color: $color;" 8064*9ccd446eSAtari911 8065*9ccd446eSAtari911// After: 8066*9ccd446eSAtari911style="border-left-color: $color; 8067*9ccd446eSAtari911 background: $themeStyles['cell_bg']; 8068*9ccd446eSAtari911 color: $themeStyles['text_primary'];" 8069*9ccd446eSAtari911``` 8070*9ccd446eSAtari911 8071*9ccd446eSAtari911**2. Past Events Toggle** (was plain): 8072*9ccd446eSAtari911```php 8073*9ccd446eSAtari911// Before: 8074*9ccd446eSAtari911<div class="past-events-toggle"> 8075*9ccd446eSAtari911 8076*9ccd446eSAtari911// After: 8077*9ccd446eSAtari911<div class="past-events-toggle" 8078*9ccd446eSAtari911 style="background: $themeStyles['cell_bg']; 8079*9ccd446eSAtari911 color: $themeStyles['text_dim']; 8080*9ccd446eSAtari911 border-color: $themeStyles['grid_border'];"> 8081*9ccd446eSAtari911``` 8082*9ccd446eSAtari911 8083*9ccd446eSAtari911**3. Theme Data Flow** (was broken): 8084*9ccd446eSAtari911```php 8085*9ccd446eSAtari911// Now properly passes theme to all functions: 8086*9ccd446eSAtari911renderEventListContent($events, $calId, $namespace, $themeStyles); 8087*9ccd446eSAtari911``` 8088*9ccd446eSAtari911 8089*9ccd446eSAtari911### Before vs After 8090*9ccd446eSAtari911 8091*9ccd446eSAtari911**BEFORE (v4.7.1)**: 8092*9ccd446eSAtari911``` 8093*9ccd446eSAtari911Calendar header: Themed ✓ 8094*9ccd446eSAtari911Calendar grid: Themed ✓ 8095*9ccd446eSAtari911Event list panel: Themed ✓ 8096*9ccd446eSAtari911Event items: Plain gray ✗ 8097*9ccd446eSAtari911Past Events: Plain gray ✗ 8098*9ccd446eSAtari911``` 8099*9ccd446eSAtari911 8100*9ccd446eSAtari911**AFTER (v4.7.2)**: 8101*9ccd446eSAtari911``` 8102*9ccd446eSAtari911Calendar header: Themed ✓ 8103*9ccd446eSAtari911Calendar grid: Themed ✓ 8104*9ccd446eSAtari911Event list panel: Themed ✓ 8105*9ccd446eSAtari911Event items: Themed ✓ 8106*9ccd446eSAtari911Past Events: Themed ✓ 8107*9ccd446eSAtari911 8108*9ccd446eSAtari911Everything matches! ✨ 8109*9ccd446eSAtari911``` 8110*9ccd446eSAtari911 8111*9ccd446eSAtari911### Matrix Theme Example 8112*9ccd446eSAtari911 8113*9ccd446eSAtari911**Complete theming**: 8114*9ccd446eSAtari911``` 8115*9ccd446eSAtari911┌─────────────┬─────────────┐ 8116*9ccd446eSAtari911│ February │ Events │ ← Green header 8117*9ccd446eSAtari911├─────────────┼─────────────┤ 8118*9ccd446eSAtari911│ Dark cells │ • Meeting │ ← Green bg & text 8119*9ccd446eSAtari911│ Green text │ • Review │ ← Green bg & text 8120*9ccd446eSAtari911│ Today=green │ │ 8121*9ccd446eSAtari911├─────────────┼─────────────┤ 8122*9ccd446eSAtari911│ │ ▶ Past (5) │ ← Green bg 8123*9ccd446eSAtari911└─────────────┴─────────────┘ 8124*9ccd446eSAtari911 8125*9ccd446eSAtari911All green! ✓ 8126*9ccd446eSAtari911``` 8127*9ccd446eSAtari911 8128*9ccd446eSAtari911### Purple Theme Example 8129*9ccd446eSAtari911 8130*9ccd446eSAtari911``` 8131*9ccd446eSAtari911┌─────────────┬─────────────┐ 8132*9ccd446eSAtari911│ February │ Events │ ← Purple header 8133*9ccd446eSAtari911├─────────────┼─────────────┤ 8134*9ccd446eSAtari911│ Dark purple │ • Meeting │ ← Purple bg 8135*9ccd446eSAtari911│ Lavender │ • Review │ ← Lavender text 8136*9ccd446eSAtari911│ cells │ │ 8137*9ccd446eSAtari911├─────────────┼─────────────┤ 8138*9ccd446eSAtari911│ │ ▶ Past (5) │ ← Purple bg 8139*9ccd446eSAtari911└─────────────┴─────────────┘ 8140*9ccd446eSAtari911 8141*9ccd446eSAtari911All purple! ✓ 8142*9ccd446eSAtari911``` 8143*9ccd446eSAtari911 8144*9ccd446eSAtari911### Professional Theme Example 8145*9ccd446eSAtari911 8146*9ccd446eSAtari911``` 8147*9ccd446eSAtari911┌─────────────┬─────────────┐ 8148*9ccd446eSAtari911│ February │ Events │ ← Blue header 8149*9ccd446eSAtari911├─────────────┼─────────────┤ 8150*9ccd446eSAtari911│ Light gray │ • Meeting │ ← Light bg 8151*9ccd446eSAtari911│ Blue accents│ • Review │ ← Dark text 8152*9ccd446eSAtari911│ cells │ │ 8153*9ccd446eSAtari911├─────────────┼─────────────┤ 8154*9ccd446eSAtari911│ │ ▶ Past (5) │ ← Light bg 8155*9ccd446eSAtari911└─────────────┴─────────────┘ 8156*9ccd446eSAtari911 8157*9ccd446eSAtari911All professional! ✓ 8158*9ccd446eSAtari911``` 8159*9ccd446eSAtari911 8160*9ccd446eSAtari911### Pink Theme Example 8161*9ccd446eSAtari911 8162*9ccd446eSAtari911``` 8163*9ccd446eSAtari911┌─────────────┬─────────────┐ 8164*9ccd446eSAtari911│ February │ Events │ ← Hot pink header 8165*9ccd446eSAtari911├─────────────┼─────────────┤ 8166*9ccd446eSAtari911│ Dark pink │ • Meeting │ ← Pink bg 8167*9ccd446eSAtari911│ Pink text │ • Review │ ← Pink text 8168*9ccd446eSAtari911│ cells │ │ 8169*9ccd446eSAtari911├─────────────┼─────────────┤ 8170*9ccd446eSAtari911│ │ ▶ Past (5) │ ← Pink bg 8171*9ccd446eSAtari911└─────────────┴─────────────┘ 8172*9ccd446eSAtari911 8173*9ccd446eSAtari911All pink & sparkly! ✓ 8174*9ccd446eSAtari911``` 8175*9ccd446eSAtari911 8176*9ccd446eSAtari911### What's Themed Now 8177*9ccd446eSAtari911 8178*9ccd446eSAtari911**Calendar Section**: 8179*9ccd446eSAtari911- ✅ Container border & shadow 8180*9ccd446eSAtari911- ✅ Header background & text 8181*9ccd446eSAtari911- ✅ Navigation buttons 8182*9ccd446eSAtari911- ✅ Today button 8183*9ccd446eSAtari911- ✅ Grid table 8184*9ccd446eSAtari911- ✅ Day cells 8185*9ccd446eSAtari911- ✅ Today cell highlight 8186*9ccd446eSAtari911- ✅ Empty cells 8187*9ccd446eSAtari911 8188*9ccd446eSAtari911**Event List Section**: 8189*9ccd446eSAtari911- ✅ Panel background 8190*9ccd446eSAtari911- ✅ Header background 8191*9ccd446eSAtari911- ✅ Header text 8192*9ccd446eSAtari911- ✅ Search box 8193*9ccd446eSAtari911- ✅ Add button 8194*9ccd446eSAtari911- ✅ Event items ← NEW! 8195*9ccd446eSAtari911- ✅ Past Events toggle ← NEW! 8196*9ccd446eSAtari911 8197*9ccd446eSAtari911**100% themed!** 8198*9ccd446eSAtari911 8199*9ccd446eSAtari911## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 8200*9ccd446eSAtari911 8201*9ccd446eSAtari911### Fixed: Theme Now Persists When Changing Months 8202*9ccd446eSAtari911- **Fixed:** Calendar theme no longer resets to default when navigating months 8203*9ccd446eSAtari911- **Fixed:** Theme data now stored in data attributes and used by JavaScript 8204*9ccd446eSAtari911- **Added:** rebuildCalendar now applies theme styles to all cells 8205*9ccd446eSAtari911 8206*9ccd446eSAtari911### ✨ Added: Event List Panel Now Themed 8207*9ccd446eSAtari911- **Added:** Right sidebar event list now uses theme colors 8208*9ccd446eSAtari911- **Added:** Event list header themed 8209*9ccd446eSAtari911- **Added:** Search box themed 8210*9ccd446eSAtari911- **Added:** Add button themed 8211*9ccd446eSAtari911- **Result:** Complete theme consistency across entire calendar! 8212*9ccd446eSAtari911 8213*9ccd446eSAtari911### The Problems 8214*9ccd446eSAtari911 8215*9ccd446eSAtari911**Problem 1: Month Navigation Lost Theme**: 8216*9ccd446eSAtari911``` 8217*9ccd446eSAtari911Initial load: Matrix theme ✓ (green) 8218*9ccd446eSAtari911Click "›" to next month 8219*9ccd446eSAtari911Result: Gray calendar ✗ (theme lost!) 8220*9ccd446eSAtari911``` 8221*9ccd446eSAtari911 8222*9ccd446eSAtari911**Problem 2: Event List Not Themed**: 8223*9ccd446eSAtari911``` 8224*9ccd446eSAtari911Calendar grid: Themed ✓ 8225*9ccd446eSAtari911Event list (right side): Plain gray ✗ 8226*9ccd446eSAtari911Inconsistent! 8227*9ccd446eSAtari911``` 8228*9ccd446eSAtari911 8229*9ccd446eSAtari911### The Fixes 8230*9ccd446eSAtari911 8231*9ccd446eSAtari911**Fix 1: Store Theme in Data Attributes**: 8232*9ccd446eSAtari911 8233*9ccd446eSAtari911```php 8234*9ccd446eSAtari911// PHP stores theme data: 8235*9ccd446eSAtari911<div data-theme="matrix" 8236*9ccd446eSAtari911 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 8237*9ccd446eSAtari911``` 8238*9ccd446eSAtari911 8239*9ccd446eSAtari911**Fix 2: JavaScript Uses Theme Data**: 8240*9ccd446eSAtari911 8241*9ccd446eSAtari911```javascript 8242*9ccd446eSAtari911// rebuildCalendar reads theme: 8243*9ccd446eSAtari911const theme = container.dataset.theme; 8244*9ccd446eSAtari911const themeStyles = JSON.parse(container.dataset.themeStyles); 8245*9ccd446eSAtari911 8246*9ccd446eSAtari911// Apply to cells: 8247*9ccd446eSAtari911const cellBg = isToday ? 8248*9ccd446eSAtari911 themeStyles.cell_today_bg : 8249*9ccd446eSAtari911 themeStyles.cell_bg; 8250*9ccd446eSAtari911``` 8251*9ccd446eSAtari911 8252*9ccd446eSAtari911**Fix 3: Theme Event List Panel**: 8253*9ccd446eSAtari911 8254*9ccd446eSAtari911```php 8255*9ccd446eSAtari911// Event list header: 8256*9ccd446eSAtari911style="background:{$themeStyles['header_bg']}; 8257*9ccd446eSAtari911 color:{$themeStyles['text_primary']};" 8258*9ccd446eSAtari911 8259*9ccd446eSAtari911// Event list container: 8260*9ccd446eSAtari911style="background:{$themeStyles['bg']};" 8261*9ccd446eSAtari911 8262*9ccd446eSAtari911// Search box: 8263*9ccd446eSAtari911style="background:{$themeStyles['cell_bg']}; 8264*9ccd446eSAtari911 color:{$themeStyles['text_primary']};" 8265*9ccd446eSAtari911 8266*9ccd446eSAtari911// Add button: 8267*9ccd446eSAtari911style="background:{$themeStyles['border']};" 8268*9ccd446eSAtari911``` 8269*9ccd446eSAtari911 8270*9ccd446eSAtari911### Before vs After 8271*9ccd446eSAtari911 8272*9ccd446eSAtari911**BEFORE (v4.7.0)**: 8273*9ccd446eSAtari911``` 8274*9ccd446eSAtari911Load page: Matrix theme everywhere ✓ 8275*9ccd446eSAtari911Navigate to next month: 8276*9ccd446eSAtari911 Calendar grid: Gray ✗ (theme lost) 8277*9ccd446eSAtari911 Event list: Gray ✗ (never themed) 8278*9ccd446eSAtari911``` 8279*9ccd446eSAtari911 8280*9ccd446eSAtari911**AFTER (v4.7.1)**: 8281*9ccd446eSAtari911``` 8282*9ccd446eSAtari911Load page: Matrix theme everywhere ✓ 8283*9ccd446eSAtari911Navigate to next month: 8284*9ccd446eSAtari911 Calendar grid: Matrix theme ✓ (preserved!) 8285*9ccd446eSAtari911 Event list: Matrix theme ✓ (themed!) 8286*9ccd446eSAtari911 8287*9ccd446eSAtari911Perfect consistency! ✨ 8288*9ccd446eSAtari911``` 8289*9ccd446eSAtari911 8290*9ccd446eSAtari911### What's Now Themed 8291*9ccd446eSAtari911 8292*9ccd446eSAtari911**Calendar Grid** (after navigation): 8293*9ccd446eSAtari911- ✅ Cell backgrounds 8294*9ccd446eSAtari911- ✅ Today cell highlight 8295*9ccd446eSAtari911- ✅ Empty cells 8296*9ccd446eSAtari911- ✅ Text colors 8297*9ccd446eSAtari911- ✅ Border colors 8298*9ccd446eSAtari911 8299*9ccd446eSAtari911**Event List Panel**: 8300*9ccd446eSAtari911- ✅ Panel background 8301*9ccd446eSAtari911- ✅ Header background & text 8302*9ccd446eSAtari911- ✅ Search box styling 8303*9ccd446eSAtari911- ✅ Add button colors 8304*9ccd446eSAtari911- ✅ Namespace badge 8305*9ccd446eSAtari911 8306*9ccd446eSAtari911### Technical Implementation 8307*9ccd446eSAtari911 8308*9ccd446eSAtari911**Data Flow**: 8309*9ccd446eSAtari911``` 8310*9ccd446eSAtari9111. PHP: Get theme from config 8311*9ccd446eSAtari911 $theme = getSidebarTheme(); 8312*9ccd446eSAtari911 8313*9ccd446eSAtari9112. PHP: Get theme styles 8314*9ccd446eSAtari911 $themeStyles = getSidebarThemeStyles($theme); 8315*9ccd446eSAtari911 8316*9ccd446eSAtari9113. PHP: Store in data attributes 8317*9ccd446eSAtari911 data-theme="matrix" 8318*9ccd446eSAtari911 data-theme-styles='{...JSON...}' 8319*9ccd446eSAtari911 8320*9ccd446eSAtari9114. JavaScript: Read on navigation 8321*9ccd446eSAtari911 const themeStyles = JSON.parse(container.dataset.themeStyles); 8322*9ccd446eSAtari911 8323*9ccd446eSAtari9115. JavaScript: Apply to rebuilt elements 8324*9ccd446eSAtari911 style="background:${themeStyles.bg};" 8325*9ccd446eSAtari911``` 8326*9ccd446eSAtari911 8327*9ccd446eSAtari911**Result**: Theme persists across navigations! ✓ 8328*9ccd446eSAtari911 8329*9ccd446eSAtari911### All Themes Work Perfectly 8330*9ccd446eSAtari911 8331*9ccd446eSAtari911** Matrix**: 8332*9ccd446eSAtari911- Month change: Green ✓ 8333*9ccd446eSAtari911- Event list: Green ✓ 8334*9ccd446eSAtari911 8335*9ccd446eSAtari911** Purple**: 8336*9ccd446eSAtari911- Month change: Purple ✓ 8337*9ccd446eSAtari911- Event list: Purple ✓ 8338*9ccd446eSAtari911 8339*9ccd446eSAtari911** Professional**: 8340*9ccd446eSAtari911- Month change: Blue ✓ 8341*9ccd446eSAtari911- Event list: Blue ✓ 8342*9ccd446eSAtari911 8343*9ccd446eSAtari911** Pink**: 8344*9ccd446eSAtari911- Month change: Pink ✓ 8345*9ccd446eSAtari911- Event list: Pink ✓ 8346*9ccd446eSAtari911 8347*9ccd446eSAtari911**Fully consistent theming everywhere!** 8348*9ccd446eSAtari911 8349*9ccd446eSAtari911## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 8350*9ccd446eSAtari911 8351*9ccd446eSAtari911### ✨ Major Feature: Themes Now Apply to Compact Calendar 8352*9ccd446eSAtari911- **Added:** Full theme support for {{calendar-compact}} 8353*9ccd446eSAtari911- **Added:** Matrix, Purple, Professional, and Pink themes 8354*9ccd446eSAtari911- **Added:** Consistent theming across sidebar and calendar 8355*9ccd446eSAtari911- **Result:** Beautiful, cohesive appearance! 8356*9ccd446eSAtari911 8357*9ccd446eSAtari911### What's New 8358*9ccd446eSAtari911 8359*9ccd446eSAtari911**All 4 themes now work on the calendar**: 8360*9ccd446eSAtari911- **Matrix** - Green cyberpunk (default) 8361*9ccd446eSAtari911- **Purple** - Royal purple elegance 8362*9ccd446eSAtari911- **Professional** - Clean business blue 8363*9ccd446eSAtari911- **Pink** - Sparkly pink bling 8364*9ccd446eSAtari911 8365*9ccd446eSAtari911**Set in Admin Panel** → Theme applies everywhere! 8366*9ccd446eSAtari911 8367*9ccd446eSAtari911### Before vs After 8368*9ccd446eSAtari911 8369*9ccd446eSAtari911**BEFORE (v4.6.8)**: 8370*9ccd446eSAtari911``` 8371*9ccd446eSAtari911Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 8372*9ccd446eSAtari911Calendar: Plain gray (no theme) ✗ 8373*9ccd446eSAtari911 8374*9ccd446eSAtari911Inconsistent appearance! 8375*9ccd446eSAtari911``` 8376*9ccd446eSAtari911 8377*9ccd446eSAtari911**AFTER (v4.7.0)**: 8378*9ccd446eSAtari911``` 8379*9ccd446eSAtari911Sidebar: Themed ✓ 8380*9ccd446eSAtari911Calendar: SAME THEME ✓ 8381*9ccd446eSAtari911 8382*9ccd446eSAtari911Perfectly consistent! ✨ 8383*9ccd446eSAtari911``` 8384*9ccd446eSAtari911 8385*9ccd446eSAtari911### Theme Showcase 8386*9ccd446eSAtari911 8387*9ccd446eSAtari911**Matrix Theme** (Green): 8388*9ccd446eSAtari911``` 8389*9ccd446eSAtari911┌─────────────────────────┐ 8390*9ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Green header 8391*9ccd446eSAtari911├─────────────────────────┤ 8392*9ccd446eSAtari911│ Dark background │ 8393*9ccd446eSAtari911│ Green borders │ 8394*9ccd446eSAtari911│ Green text │ 8395*9ccd446eSAtari911│ Green glow effects │ 8396*9ccd446eSAtari911└─────────────────────────┘ 8397*9ccd446eSAtari911``` 8398*9ccd446eSAtari911 8399*9ccd446eSAtari911**Purple Theme**: 8400*9ccd446eSAtari911``` 8401*9ccd446eSAtari911┌─────────────────────────┐ 8402*9ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Purple header 8403*9ccd446eSAtari911├─────────────────────────┤ 8404*9ccd446eSAtari911│ Dark purple background │ 8405*9ccd446eSAtari911│ Purple borders │ 8406*9ccd446eSAtari911│ Lavender text │ 8407*9ccd446eSAtari911│ Purple glow │ 8408*9ccd446eSAtari911└─────────────────────────┘ 8409*9ccd446eSAtari911``` 8410*9ccd446eSAtari911 8411*9ccd446eSAtari911**Professional Theme** (Light): 8412*9ccd446eSAtari911``` 8413*9ccd446eSAtari911┌─────────────────────────┐ 8414*9ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Blue header 8415*9ccd446eSAtari911├─────────────────────────┤ 8416*9ccd446eSAtari911│ Light gray background │ 8417*9ccd446eSAtari911│ Blue accents │ 8418*9ccd446eSAtari911│ Professional appearance │ 8419*9ccd446eSAtari911│ Clean, business-ready │ 8420*9ccd446eSAtari911└─────────────────────────┘ 8421*9ccd446eSAtari911``` 8422*9ccd446eSAtari911 8423*9ccd446eSAtari911**Pink Theme** (Bling): 8424*9ccd446eSAtari911``` 8425*9ccd446eSAtari911┌─────────────────────────┐ 8426*9ccd446eSAtari911│ ◀ February 2026 ▶ │ ← Hot pink header 8427*9ccd446eSAtari911├─────────────────────────┤ 8428*9ccd446eSAtari911│ Dark pink background │ 8429*9ccd446eSAtari911│ Pink borders & glow │ 8430*9ccd446eSAtari911│ Pink text │ 8431*9ccd446eSAtari911│ Sparkle effects ✨ │ 8432*9ccd446eSAtari911└─────────────────────────┘ 8433*9ccd446eSAtari911``` 8434*9ccd446eSAtari911 8435*9ccd446eSAtari911### What's Themed 8436*9ccd446eSAtari911 8437*9ccd446eSAtari911**Calendar Container**: 8438*9ccd446eSAtari911- Background color 8439*9ccd446eSAtari911- Border color 8440*9ccd446eSAtari911- Shadow/glow effect 8441*9ccd446eSAtari911 8442*9ccd446eSAtari911**Calendar Header**: 8443*9ccd446eSAtari911- Background gradient 8444*9ccd446eSAtari911- Border color 8445*9ccd446eSAtari911- Text color 8446*9ccd446eSAtari911- Button colors 8447*9ccd446eSAtari911 8448*9ccd446eSAtari911**Calendar Grid**: 8449*9ccd446eSAtari911- Grid background 8450*9ccd446eSAtari911- Grid borders 8451*9ccd446eSAtari911- Header row colors 8452*9ccd446eSAtari911 8453*9ccd446eSAtari911**Calendar Cells**: 8454*9ccd446eSAtari911- Cell background 8455*9ccd446eSAtari911- Today cell highlight 8456*9ccd446eSAtari911- Text color 8457*9ccd446eSAtari911- Border colors 8458*9ccd446eSAtari911 8459*9ccd446eSAtari911### Implementation 8460*9ccd446eSAtari911 8461*9ccd446eSAtari911**Theme Detection**: 8462*9ccd446eSAtari911```php 8463*9ccd446eSAtari911// Same theme system as sidebar 8464*9ccd446eSAtari911$theme = $this->getSidebarTheme(); 8465*9ccd446eSAtari911$themeStyles = $this->getSidebarThemeStyles($theme); 8466*9ccd446eSAtari911``` 8467*9ccd446eSAtari911 8468*9ccd446eSAtari911**Applied to Container**: 8469*9ccd446eSAtari911```php 8470*9ccd446eSAtari911style="background:' . $themeStyles['bg'] . '; 8471*9ccd446eSAtari911 border:2px solid ' . $themeStyles['border'] . '; 8472*9ccd446eSAtari911 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 8473*9ccd446eSAtari911``` 8474*9ccd446eSAtari911 8475*9ccd446eSAtari911**Applied to Header**: 8476*9ccd446eSAtari911```php 8477*9ccd446eSAtari911style="background:' . $themeStyles['header_bg'] . '; 8478*9ccd446eSAtari911 color:' . $themeStyles['text_primary'] . ';" 8479*9ccd446eSAtari911``` 8480*9ccd446eSAtari911 8481*9ccd446eSAtari911**Applied to Cells**: 8482*9ccd446eSAtari911```php 8483*9ccd446eSAtari911$cellBg = $isToday ? 8484*9ccd446eSAtari911 $themeStyles['cell_today_bg'] : 8485*9ccd446eSAtari911 $themeStyles['cell_bg']; 8486*9ccd446eSAtari911``` 8487*9ccd446eSAtari911 8488*9ccd446eSAtari911### How to Change Theme 8489*9ccd446eSAtari911 8490*9ccd446eSAtari911**In Admin Panel**: 8491*9ccd446eSAtari9111. Go to Admin → Calendar Management 8492*9ccd446eSAtari9112. Click " Themes" tab 8493*9ccd446eSAtari9113. Select theme (Matrix/Purple/Professional/Pink) 8494*9ccd446eSAtari9114. Theme applies to BOTH sidebar and calendar! ✓ 8495*9ccd446eSAtari911 8496*9ccd446eSAtari911**No configuration needed** - Just select and enjoy! 8497*9ccd446eSAtari911 8498*9ccd446eSAtari911### Theme Colors 8499*9ccd446eSAtari911 8500*9ccd446eSAtari911**Matrix**: 8501*9ccd446eSAtari911- Background: `#242424` (dark gray) 8502*9ccd446eSAtari911- Border: `#00cc07` (matrix green) 8503*9ccd446eSAtari911- Text: `#00cc07` (green) 8504*9ccd446eSAtari911- Today: `#2a4d2a` (green highlight) 8505*9ccd446eSAtari911 8506*9ccd446eSAtari911**Purple**: 8507*9ccd446eSAtari911- Background: `#2a2030` (dark purple) 8508*9ccd446eSAtari911- Border: `#9b59b6` (royal purple) 8509*9ccd446eSAtari911- Text: `#b19cd9` (lavender) 8510*9ccd446eSAtari911- Today: `#3d2b4d` (purple highlight) 8511*9ccd446eSAtari911 8512*9ccd446eSAtari911**Professional**: 8513*9ccd446eSAtari911- Background: `#e8ecf1` (light blue-gray) 8514*9ccd446eSAtari911- Border: `#4a90e2` (business blue) 8515*9ccd446eSAtari911- Text: `#2c3e50` (dark blue-gray) 8516*9ccd446eSAtari911- Today: `#dce8f7` (light blue highlight) 8517*9ccd446eSAtari911 8518*9ccd446eSAtari911**Pink**: 8519*9ccd446eSAtari911- Background: `#1a0d14` (dark pink-black) 8520*9ccd446eSAtari911- Border: `#ff1493` (hot pink) 8521*9ccd446eSAtari911- Text: `#ff69b4` (pink) 8522*9ccd446eSAtari911- Today: `#3d2030` (pink highlight) 8523*9ccd446eSAtari911 8524*9ccd446eSAtari911### Consistency 8525*9ccd446eSAtari911 8526*9ccd446eSAtari911**Both use same theme**: 8527*9ccd446eSAtari911``` 8528*9ccd446eSAtari911Admin Panel → Set theme to "Purple" 8529*9ccd446eSAtari911 8530*9ccd446eSAtari911{{calendar}} sidebar: Purple theme ✓ 8531*9ccd446eSAtari911{{calendar-compact}}: Purple theme ✓ 8532*9ccd446eSAtari911{{calendar-panel}}: Will be themed next! ✓ 8533*9ccd446eSAtari911 8534*9ccd446eSAtari911All calendars match! ✨ 8535*9ccd446eSAtari911``` 8536*9ccd446eSAtari911 8537*9ccd446eSAtari911**Perfectly coordinated appearance!** 8538*9ccd446eSAtari911 8539*9ccd446eSAtari911## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 8540*9ccd446eSAtari911 8541*9ccd446eSAtari911### Documentation: Added noheader Parameter Info 8542*9ccd446eSAtari911- **Added:** Documentation for existing `noheader` parameter 8543*9ccd446eSAtari911- **Updated:** README with complete eventlist parameter list 8544*9ccd446eSAtari911- **Info:** Feature already existed, just wasn't documented! 8545*9ccd446eSAtari911 8546*9ccd446eSAtari911### The noheader Parameter 8547*9ccd446eSAtari911 8548*9ccd446eSAtari911**What it does**: Hides the clock/date/weather header in eventlist 8549*9ccd446eSAtari911 8550*9ccd446eSAtari911**Usage**: 8551*9ccd446eSAtari911``` 8552*9ccd446eSAtari911{{eventlist today noheader}} 8553*9ccd446eSAtari911``` 8554*9ccd446eSAtari911 8555*9ccd446eSAtari911**Before (with header)**: 8556*9ccd446eSAtari911``` 8557*9ccd446eSAtari911┌─────────────────────────────────┐ 8558*9ccd446eSAtari911│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 8559*9ccd446eSAtari911├─────────────────────────────────┤ 8560*9ccd446eSAtari911│ 5 min load │ CPU │ Memory │ ← System stats 8561*9ccd446eSAtari911├─────────────────────────────────┤ 8562*9ccd446eSAtari911│ Today's Events │ 8563*9ccd446eSAtari911│ • 10:00 Team Meeting │ 8564*9ccd446eSAtari911│ • 2:00 Project Review │ 8565*9ccd446eSAtari911└─────────────────────────────────┘ 8566*9ccd446eSAtari911``` 8567*9ccd446eSAtari911 8568*9ccd446eSAtari911**After (noheader)**: 8569*9ccd446eSAtari911``` 8570*9ccd446eSAtari911┌─────────────────────────────────┐ 8571*9ccd446eSAtari911│ Today's Events │ ← No header! 8572*9ccd446eSAtari911│ • 10:00 Team Meeting │ 8573*9ccd446eSAtari911│ • 2:00 Project Review │ 8574*9ccd446eSAtari911└─────────────────────────────────┘ 8575*9ccd446eSAtari911 8576*9ccd446eSAtari911Cleaner, more compact! ✓ 8577*9ccd446eSAtari911``` 8578*9ccd446eSAtari911 8579*9ccd446eSAtari911### When to Use noheader 8580*9ccd446eSAtari911 8581*9ccd446eSAtari911**Use WITH header** (default): 8582*9ccd446eSAtari911- Dashboard view 8583*9ccd446eSAtari911- Want to see current time 8584*9ccd446eSAtari911- Want weather info 8585*9ccd446eSAtari911- Want system stats 8586*9ccd446eSAtari911 8587*9ccd446eSAtari911**Use WITHOUT header** (`noheader`): 8588*9ccd446eSAtari911- Embedded in page content 8589*9ccd446eSAtari911- Just want event list 8590*9ccd446eSAtari911- Minimal design 8591*9ccd446eSAtari911- Space-constrained 8592*9ccd446eSAtari911 8593*9ccd446eSAtari911### Complete eventlist Parameters 8594*9ccd446eSAtari911 8595*9ccd446eSAtari911**Date Parameters**: 8596*9ccd446eSAtari911``` 8597*9ccd446eSAtari911date=YYYY-MM-DD Show specific date 8598*9ccd446eSAtari911daterange=START:END Show date range 8599*9ccd446eSAtari911``` 8600*9ccd446eSAtari911 8601*9ccd446eSAtari911**Filter Parameters**: 8602*9ccd446eSAtari911``` 8603*9ccd446eSAtari911namespace=name Filter by namespace 8604*9ccd446eSAtari911``` 8605*9ccd446eSAtari911 8606*9ccd446eSAtari911**Display Parameters**: 8607*9ccd446eSAtari911``` 8608*9ccd446eSAtari911today Show today with live clock 8609*9ccd446eSAtari911noheader Hide clock/date/weather header 8610*9ccd446eSAtari911showchecked Show completed tasks 8611*9ccd446eSAtari911range=day|week|month Show day/week/month range 8612*9ccd446eSAtari911``` 8613*9ccd446eSAtari911 8614*9ccd446eSAtari911### Examples 8615*9ccd446eSAtari911 8616*9ccd446eSAtari911**Full featured** (dashboard): 8617*9ccd446eSAtari911``` 8618*9ccd446eSAtari911{{eventlist today}} 8619*9ccd446eSAtari911``` 8620*9ccd446eSAtari911Shows: Clock, weather, system stats, events ✓ 8621*9ccd446eSAtari911 8622*9ccd446eSAtari911**Minimal** (embedded): 8623*9ccd446eSAtari911``` 8624*9ccd446eSAtari911{{eventlist today noheader}} 8625*9ccd446eSAtari911``` 8626*9ccd446eSAtari911Shows: Just events ✓ 8627*9ccd446eSAtari911 8628*9ccd446eSAtari911**Date range without header**: 8629*9ccd446eSAtari911``` 8630*9ccd446eSAtari911{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 8631*9ccd446eSAtari911``` 8632*9ccd446eSAtari911Shows: Events for February, no header ✓ 8633*9ccd446eSAtari911 8634*9ccd446eSAtari911**With namespace filter**: 8635*9ccd446eSAtari911``` 8636*9ccd446eSAtari911{{eventlist today namespace=work noheader}} 8637*9ccd446eSAtari911``` 8638*9ccd446eSAtari911Shows: Today's work events, no header ✓ 8639*9ccd446eSAtari911 8640*9ccd446eSAtari911### Implementation 8641*9ccd446eSAtari911 8642*9ccd446eSAtari911**Already existed in code** (line 833): 8643*9ccd446eSAtari911```php 8644*9ccd446eSAtari911$noheader = isset($data['noheader']) ? true : false; 8645*9ccd446eSAtari911``` 8646*9ccd446eSAtari911 8647*9ccd446eSAtari911**Applied at render** (line 1010): 8648*9ccd446eSAtari911```php 8649*9ccd446eSAtari911if ($today && !empty($allEvents) && !$noheader) { 8650*9ccd446eSAtari911 // Render clock header with date/time/weather 8651*9ccd446eSAtari911} 8652*9ccd446eSAtari911``` 8653*9ccd446eSAtari911 8654*9ccd446eSAtari911**Just wasn't documented!** Now it is. ✓ 8655*9ccd446eSAtari911 8656*9ccd446eSAtari911## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 8657*9ccd446eSAtari911 8658*9ccd446eSAtari911### ✨ Improvement: Removed Filter Badge Above Sidebar 8659*9ccd446eSAtari911- **Removed:** Filter badge no longer shows above compact calendar 8660*9ccd446eSAtari911- **Reason:** Filtering is already clearly visible in the calendar view 8661*9ccd446eSAtari911- **Result:** Cleaner UI, less redundancy 8662*9ccd446eSAtari911 8663*9ccd446eSAtari911### What Changed 8664*9ccd446eSAtari911 8665*9ccd446eSAtari911**BEFORE**: 8666*9ccd446eSAtari911``` 8667*9ccd446eSAtari911┌─────────────────────────┐ 8668*9ccd446eSAtari911│ Filtering: work ✕ │ ← Badge above calendar 8669*9ccd446eSAtari911├─────────────────────────┤ 8670*9ccd446eSAtari911│ ◀ February 2026 ▶ │ 8671*9ccd446eSAtari911├─────────────────────────┤ 8672*9ccd446eSAtari911│ Calendar grid with │ 8673*9ccd446eSAtari911│ filtered events │ ← Already filtered 8674*9ccd446eSAtari911└─────────────────────────┘ 8675*9ccd446eSAtari911 8676*9ccd446eSAtari911Badge was redundant - you can already see 8677*9ccd446eSAtari911the filtering in the calendar! 8678*9ccd446eSAtari911``` 8679*9ccd446eSAtari911 8680*9ccd446eSAtari911**AFTER**: 8681*9ccd446eSAtari911``` 8682*9ccd446eSAtari911┌─────────────────────────┐ 8683*9ccd446eSAtari911│ ◀ February 2026 ▶ │ ← No badge! 8684*9ccd446eSAtari911├─────────────────────────┤ 8685*9ccd446eSAtari911│ Calendar grid with │ 8686*9ccd446eSAtari911│ filtered events │ ← Filtering visible here 8687*9ccd446eSAtari911└─────────────────────────┘ 8688*9ccd446eSAtari911 8689*9ccd446eSAtari911Cleaner, simpler UI ✓ 8690*9ccd446eSAtari911``` 8691*9ccd446eSAtari911 8692*9ccd446eSAtari911### Why Remove It? 8693*9ccd446eSAtari911 8694*9ccd446eSAtari911**Redundant Information**: 8695*9ccd446eSAtari911- Calendar already shows only filtered events 8696*9ccd446eSAtari911- Namespace badges on events show which namespace 8697*9ccd446eSAtari911- Badge added visual clutter without value 8698*9ccd446eSAtari911 8699*9ccd446eSAtari911**Better UX**: 8700*9ccd446eSAtari911- Less visual noise 8701*9ccd446eSAtari911- More space for content 8702*9ccd446eSAtari911- Filtering still obvious from event display 8703*9ccd446eSAtari911 8704*9ccd446eSAtari911**Code Cleanup**: 8705*9ccd446eSAtari911```php 8706*9ccd446eSAtari911// Old code (removed): 8707*9ccd446eSAtari911if ($namespace && $namespace !== '*' && ...) { 8708*9ccd446eSAtari911 $html .= '<div class="calendar-namespace-filter">'; 8709*9ccd446eSAtari911 $html .= 'Filtering: ' . $namespace . ' ✕'; 8710*9ccd446eSAtari911 $html .= '</div>'; 8711*9ccd446eSAtari911} 8712*9ccd446eSAtari911 8713*9ccd446eSAtari911// New code: 8714*9ccd446eSAtari911// Filter badge removed - filtering shown in calendar view only 8715*9ccd446eSAtari911``` 8716*9ccd446eSAtari911 8717*9ccd446eSAtari911### How Filtering Still Works 8718*9ccd446eSAtari911 8719*9ccd446eSAtari911**Filtering IS Active**: 8720*9ccd446eSAtari911- Calendar only shows events from selected namespace ✓ 8721*9ccd446eSAtari911- Event namespace badges show which namespace ✓ 8722*9ccd446eSAtari911- Clear filtering still works (in calendar) ✓ 8723*9ccd446eSAtari911 8724*9ccd446eSAtari911**Just No Badge**: 8725*9ccd446eSAtari911- No redundant "Filtering: work ✕" above calendar 8726*9ccd446eSAtari911- Cleaner, more professional appearance 8727*9ccd446eSAtari911 8728*9ccd446eSAtari911### What You Still See 8729*9ccd446eSAtari911 8730*9ccd446eSAtari911**Namespace Information**: 8731*9ccd446eSAtari911``` 8732*9ccd446eSAtari911Event with namespace badge: 8733*9ccd446eSAtari911┌────────────────────────┐ 8734*9ccd446eSAtari911│ 10:00 Team Meeting │ 8735*9ccd446eSAtari911│ [work] ←─────────┼─ Namespace badge on event 8736*9ccd446eSAtari911└────────────────────────┘ 8737*9ccd446eSAtari911``` 8738*9ccd446eSAtari911 8739*9ccd446eSAtari911**Filtered View**: 8740*9ccd446eSAtari911- Only events from selected namespace visible 8741*9ccd446eSAtari911- Empty dates show no events 8742*9ccd446eSAtari911- Clear which namespace you're viewing 8743*9ccd446eSAtari911 8744*9ccd446eSAtari911**No Need for Top Badge**: 8745*9ccd446eSAtari911- Already obvious from events shown 8746*9ccd446eSAtari911- Namespace badges provide context 8747*9ccd446eSAtari911- Less clutter! 8748*9ccd446eSAtari911 8749*9ccd446eSAtari911### Summary 8750*9ccd446eSAtari911 8751*9ccd446eSAtari911**Removed**: Filter badge above calendar 8752*9ccd446eSAtari911**Kept**: All filtering functionality 8753*9ccd446eSAtari911**Benefit**: Cleaner UI 8754*9ccd446eSAtari911 8755*9ccd446eSAtari911**Filtering works the same, just without the redundant badge!** ✨ 8756*9ccd446eSAtari911 8757*9ccd446eSAtari911## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 8758*9ccd446eSAtari911 8759*9ccd446eSAtari911### Fixed: Filter Badge Now Disappears Immediately 8760*9ccd446eSAtari911- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 8761*9ccd446eSAtari911- **Added:** Badge removal before page reload/AJAX call 8762*9ccd446eSAtari911- **Result:** Badge disappears instantly, no waiting for reload 8763*9ccd446eSAtari911 8764*9ccd446eSAtari911### The Problem 8765*9ccd446eSAtari911 8766*9ccd446eSAtari911**v4.6.5 behavior**: 8767*9ccd446eSAtari911``` 8768*9ccd446eSAtari911Click ✕ to clear filter 8769*9ccd446eSAtari911→ Page reloads or AJAX fires 8770*9ccd446eSAtari911→ Badge stays visible during reload ✗ 8771*9ccd446eSAtari911→ Badge finally disappears after reload ✓ 8772*9ccd446eSAtari911 8773*9ccd446eSAtari911User sees badge for 0.5-2 seconds after clicking ✕ 8774*9ccd446eSAtari911Feels laggy! ✗ 8775*9ccd446eSAtari911``` 8776*9ccd446eSAtari911 8777*9ccd446eSAtari911### The Fix 8778*9ccd446eSAtari911 8779*9ccd446eSAtari911**Immediately remove badge from DOM**: 8780*9ccd446eSAtari911 8781*9ccd446eSAtari911```javascript 8782*9ccd446eSAtari911window.clearNamespaceFilter = function(calId) { 8783*9ccd446eSAtari911 const container = document.getElementById(calId); 8784*9ccd446eSAtari911 8785*9ccd446eSAtari911 // IMMEDIATELY hide/remove the filter badge 8786*9ccd446eSAtari911 const filterBadge = container.querySelector('.calendar-namespace-filter'); 8787*9ccd446eSAtari911 if (filterBadge) { 8788*9ccd446eSAtari911 filterBadge.style.display = 'none'; // Hide instantly 8789*9ccd446eSAtari911 filterBadge.remove(); // Remove from DOM 8790*9ccd446eSAtari911 } 8791*9ccd446eSAtari911 8792*9ccd446eSAtari911 // THEN reload (AJAX or page reload) 8793*9ccd446eSAtari911 navCalendar(...) or window.location.href = ... 8794*9ccd446eSAtari911}; 8795*9ccd446eSAtari911``` 8796*9ccd446eSAtari911 8797*9ccd446eSAtari911### Before vs After 8798*9ccd446eSAtari911 8799*9ccd446eSAtari911**BEFORE (v4.6.5)**: 8800*9ccd446eSAtari911``` 8801*9ccd446eSAtari911Time 0ms: Click ✕ 8802*9ccd446eSAtari911┌─────────────────────────┐ 8803*9ccd446eSAtari911│ Filtering: work ✕ │ ← Still visible 8804*9ccd446eSAtari911├─────────────────────────┤ 8805*9ccd446eSAtari911 8806*9ccd446eSAtari911Time 500ms: Reload completes 8807*9ccd446eSAtari911┌─────────────────────────┐ 8808*9ccd446eSAtari911│ (no badge) │ ← Finally gone 8809*9ccd446eSAtari911├─────────────────────────┤ 8810*9ccd446eSAtari911 8811*9ccd446eSAtari911Delay: 500-2000ms ✗ 8812*9ccd446eSAtari911``` 8813*9ccd446eSAtari911 8814*9ccd446eSAtari911**AFTER (v4.6.6)**: 8815*9ccd446eSAtari911``` 8816*9ccd446eSAtari911Time 0ms: Click ✕ 8817*9ccd446eSAtari911┌─────────────────────────┐ 8818*9ccd446eSAtari911│ (no badge) │ ← Gone immediately! 8819*9ccd446eSAtari911├─────────────────────────┤ 8820*9ccd446eSAtari911 8821*9ccd446eSAtari911Time 500ms: Reload completes 8822*9ccd446eSAtari911┌─────────────────────────┐ 8823*9ccd446eSAtari911│ (no badge) │ ← Still gone 8824*9ccd446eSAtari911├─────────────────────────┤ 8825*9ccd446eSAtari911 8826*9ccd446eSAtari911Delay: 0ms ✓ 8827*9ccd446eSAtari911Instant feedback! ✓ 8828*9ccd446eSAtari911``` 8829*9ccd446eSAtari911 8830*9ccd446eSAtari911### Implementation 8831*9ccd446eSAtari911 8832*9ccd446eSAtari911**Two-step removal**: 8833*9ccd446eSAtari911 8834*9ccd446eSAtari911**Step 1**: Hide immediately 8835*9ccd446eSAtari911```javascript 8836*9ccd446eSAtari911filterBadge.style.display = 'none'; 8837*9ccd446eSAtari911// User sees badge disappear instantly 8838*9ccd446eSAtari911``` 8839*9ccd446eSAtari911 8840*9ccd446eSAtari911**Step 2**: Remove from DOM 8841*9ccd446eSAtari911```javascript 8842*9ccd446eSAtari911filterBadge.remove(); 8843*9ccd446eSAtari911// Clean up HTML 8844*9ccd446eSAtari911``` 8845*9ccd446eSAtari911 8846*9ccd446eSAtari911**Step 3**: Reload 8847*9ccd446eSAtari911```javascript 8848*9ccd446eSAtari911// Sidebar: Page reload 8849*9ccd446eSAtari911window.location.href = url.toString(); 8850*9ccd446eSAtari911 8851*9ccd446eSAtari911// Calendar: AJAX reload 8852*9ccd446eSAtari911navCalendar(calId, year, month, originalNamespace); 8853*9ccd446eSAtari911``` 8854*9ccd446eSAtari911 8855*9ccd446eSAtari911**Result**: Badge gone BEFORE reload starts ✓ 8856*9ccd446eSAtari911 8857*9ccd446eSAtari911### Why This Matters 8858*9ccd446eSAtari911 8859*9ccd446eSAtari911**User Experience**: 8860*9ccd446eSAtari911- Old: Click ✕ → Wait → Badge disappears 8861*9ccd446eSAtari911- New: Click ✕ → Badge disappears instantly 8862*9ccd446eSAtari911 8863*9ccd446eSAtari911**Perceived Performance**: 8864*9ccd446eSAtari911- Instant visual feedback 8865*9ccd446eSAtari911- Feels responsive 8866*9ccd446eSAtari911- Professional UX 8867*9ccd446eSAtari911 8868*9ccd446eSAtari911**Technical**: 8869*9ccd446eSAtari911- DOM manipulation is synchronous (instant) 8870*9ccd446eSAtari911- Network requests are asynchronous (slow) 8871*9ccd446eSAtari911- Do fast things first! 8872*9ccd446eSAtari911 8873*9ccd446eSAtari911**Badge now disappears the moment you click ✕!** ⚡ 8874*9ccd446eSAtari911 8875*9ccd446eSAtari911## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 8876*9ccd446eSAtari911 8877*9ccd446eSAtari911### Fixed: Filter Badge Not Clearing in Sidebar 8878*9ccd446eSAtari911- **Fixed:** Filter badge now properly clears when clicking ✕ button 8879*9ccd446eSAtari911- **Fixed:** Sidebar widget now reloads page without namespace filter 8880*9ccd446eSAtari911- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 8881*9ccd446eSAtari911 8882*9ccd446eSAtari911### The Problem 8883*9ccd446eSAtari911 8884*9ccd446eSAtari911**In {{calendar}} sidebar widget**: 8885*9ccd446eSAtari911``` 8886*9ccd446eSAtari9111. Click namespace badge to filter 8887*9ccd446eSAtari9112. Badge appears: "Filtering: work ✕" 8888*9ccd446eSAtari9113. Click ✕ to clear filter 8889*9ccd446eSAtari9114. Badge stays visible! ✗ 8890*9ccd446eSAtari9115. Events still filtered! ✗ 8891*9ccd446eSAtari911``` 8892*9ccd446eSAtari911 8893*9ccd446eSAtari911**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 8894*9ccd446eSAtari911 8895*9ccd446eSAtari911### The Fix 8896*9ccd446eSAtari911 8897*9ccd446eSAtari911**Detect widget type and handle appropriately**: 8898*9ccd446eSAtari911 8899*9ccd446eSAtari911```javascript 8900*9ccd446eSAtari911window.clearNamespaceFilter = function(calId) { 8901*9ccd446eSAtari911 const container = document.getElementById(calId); 8902*9ccd446eSAtari911 8903*9ccd446eSAtari911 // Check if this is a sidebar widget 8904*9ccd446eSAtari911 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 8905*9ccd446eSAtari911 8906*9ccd446eSAtari911 if (sidebarContainer) { 8907*9ccd446eSAtari911 // SIDEBAR: Reload page without namespace parameter 8908*9ccd446eSAtari911 const url = new URL(window.location.href); 8909*9ccd446eSAtari911 url.searchParams.delete('namespace'); 8910*9ccd446eSAtari911 window.location.href = url.toString(); // Page reload 8911*9ccd446eSAtari911 return; 8912*9ccd446eSAtari911 } 8913*9ccd446eSAtari911 8914*9ccd446eSAtari911 // REGULAR CALENDAR: AJAX reload 8915*9ccd446eSAtari911 navCalendar(calId, year, month, originalNamespace); 8916*9ccd446eSAtari911}; 8917*9ccd446eSAtari911``` 8918*9ccd446eSAtari911 8919*9ccd446eSAtari911### How It Works 8920*9ccd446eSAtari911 8921*9ccd446eSAtari911**Sidebar Widget** ({{calendar}} syntax): 8922*9ccd446eSAtari911``` 8923*9ccd446eSAtari911Rendered server-side with PHP 8924*9ccd446eSAtari911Cannot be AJAX-reloaded 8925*9ccd446eSAtari911Solution: Reload entire page without ?namespace=work parameter 8926*9ccd446eSAtari911``` 8927*9ccd446eSAtari911 8928*9ccd446eSAtari911**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 8929*9ccd446eSAtari911``` 8930*9ccd446eSAtari911Has AJAX reload capability 8931*9ccd446eSAtari911Solution: Call navCalendar() to reload via AJAX 8932*9ccd446eSAtari911``` 8933*9ccd446eSAtari911 8934*9ccd446eSAtari911### Before vs After 8935*9ccd446eSAtari911 8936*9ccd446eSAtari911**BEFORE (v4.6.4)**: 8937*9ccd446eSAtari911``` 8938*9ccd446eSAtari911Sidebar widget filtered by "work": 8939*9ccd446eSAtari911┌─────────────────────────┐ 8940*9ccd446eSAtari911│ Filtering: work ✕ │ ← Click ✕ 8941*9ccd446eSAtari911├─────────────────────────┤ 8942*9ccd446eSAtari911│ Today │ 8943*9ccd446eSAtari911│ • Work meeting │ 8944*9ccd446eSAtari911└─────────────────────────┘ 8945*9ccd446eSAtari911 8946*9ccd446eSAtari911After clicking ✕: 8947*9ccd446eSAtari911┌─────────────────────────┐ 8948*9ccd446eSAtari911│ Filtering: work ✕ │ ← Still there! ✗ 8949*9ccd446eSAtari911├─────────────────────────┤ 8950*9ccd446eSAtari911│ Today │ 8951*9ccd446eSAtari911│ • Work meeting │ ← Still filtered! ✗ 8952*9ccd446eSAtari911└─────────────────────────┘ 8953*9ccd446eSAtari911``` 8954*9ccd446eSAtari911 8955*9ccd446eSAtari911**AFTER (v4.6.5)**: 8956*9ccd446eSAtari911``` 8957*9ccd446eSAtari911Sidebar widget filtered by "work": 8958*9ccd446eSAtari911┌─────────────────────────┐ 8959*9ccd446eSAtari911│ Filtering: work ✕ │ ← Click ✕ 8960*9ccd446eSAtari911├─────────────────────────┤ 8961*9ccd446eSAtari911│ Today │ 8962*9ccd446eSAtari911│ • Work meeting │ 8963*9ccd446eSAtari911└─────────────────────────┘ 8964*9ccd446eSAtari911 8965*9ccd446eSAtari911After clicking ✕ → Page reloads: 8966*9ccd446eSAtari911┌─────────────────────────┐ 8967*9ccd446eSAtari911│ (no filter badge) │ ← Cleared! ✓ 8968*9ccd446eSAtari911├─────────────────────────┤ 8969*9ccd446eSAtari911│ Today │ 8970*9ccd446eSAtari911│ • Work meeting │ 8971*9ccd446eSAtari911│ • Personal task │ ← All events! ✓ 8972*9ccd446eSAtari911│ • Project review │ 8973*9ccd446eSAtari911└─────────────────────────┘ 8974*9ccd446eSAtari911``` 8975*9ccd446eSAtari911 8976*9ccd446eSAtari911### Technical Details 8977*9ccd446eSAtari911 8978*9ccd446eSAtari911**Why Page Reload for Sidebar?** 8979*9ccd446eSAtari911 8980*9ccd446eSAtari911Sidebar widget is rendered server-side: 8981*9ccd446eSAtari911```php 8982*9ccd446eSAtari911// In syntax.php: 8983*9ccd446eSAtari911return $this->renderSidebarWidget($events, $namespace, $calId); 8984*9ccd446eSAtari911// ↑ PHP generates complete HTML 8985*9ccd446eSAtari911// No AJAX reload endpoint exists for sidebar 8986*9ccd446eSAtari911``` 8987*9ccd446eSAtari911 8988*9ccd446eSAtari911**Solution**: Remove `?namespace=work` from URL and reload page 8989*9ccd446eSAtari911```javascript 8990*9ccd446eSAtari911const url = new URL(window.location.href); 8991*9ccd446eSAtari911url.searchParams.delete('namespace'); // Remove filter 8992*9ccd446eSAtari911window.location.href = url.toString(); // Reload 8993*9ccd446eSAtari911``` 8994*9ccd446eSAtari911 8995*9ccd446eSAtari911**Why AJAX for Regular Calendar?** 8996*9ccd446eSAtari911 8997*9ccd446eSAtari911Regular calendars have AJAX endpoints: 8998*9ccd446eSAtari911```javascript 8999*9ccd446eSAtari911// action.php handles: 9000*9ccd446eSAtari911action: 'load_month' → Returns new month data 9001*9ccd446eSAtari911navCalendar() → Fetches and rebuilds calendar 9002*9ccd446eSAtari911``` 9003*9ccd446eSAtari911 9004*9ccd446eSAtari911### Filter Badge Behavior 9005*9ccd446eSAtari911 9006*9ccd446eSAtari911**Showing Badge** (when filtering): 9007*9ccd446eSAtari911- Server-side: PHP renders badge in HTML 9008*9ccd446eSAtari911- Client-side: JavaScript adds badge to header 9009*9ccd446eSAtari911 9010*9ccd446eSAtari911**Clearing Badge**: 9011*9ccd446eSAtari911- Sidebar: Page reload (removes ?namespace from URL) 9012*9ccd446eSAtari911- Calendar: AJAX reload (badge removed in rebuildCalendar) 9013*9ccd446eSAtari911 9014*9ccd446eSAtari911**Now works correctly for both!** ✓ 9015*9ccd446eSAtari911 9016*9ccd446eSAtari911## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 9017*9ccd446eSAtari911 9018*9ccd446eSAtari911### Critical Hotfix: Fixed PHP Parse Error 9019*9ccd446eSAtari911- **Fixed:** Template literal backticks causing PHP syntax error 9020*9ccd446eSAtari911- **Fixed:** Changed JavaScript template literals to concatenation 9021*9ccd446eSAtari911- **Fixed:** Admin page now loads without parse errors 9022*9ccd446eSAtari911 9023*9ccd446eSAtari911### The Problem 9024*9ccd446eSAtari911 9025*9ccd446eSAtari911**v4.6.3 broke admin page**: 9026*9ccd446eSAtari911``` 9027*9ccd446eSAtari911Error loading plugin calendar 9028*9ccd446eSAtari911ParseError: syntax error, unexpected identifier "s", 9029*9ccd446eSAtari911expecting "," or ";" 9030*9ccd446eSAtari911``` 9031*9ccd446eSAtari911 9032*9ccd446eSAtari911**Cause**: JavaScript template literals inside PHP echo 9033*9ccd446eSAtari911```php 9034*9ccd446eSAtari911echo '<script> 9035*9ccd446eSAtari911 let nsOptions = `<option value="">(default)</option>`; 9036*9ccd446eSAtari911 ↑ PHP sees backtick and gets confused! 9037*9ccd446eSAtari911</script>'; 9038*9ccd446eSAtari911``` 9039*9ccd446eSAtari911 9040*9ccd446eSAtari911**Why it broke**: Backticks (`) are special in PHP too! 9041*9ccd446eSAtari911 9042*9ccd446eSAtari911### The Fix 9043*9ccd446eSAtari911 9044*9ccd446eSAtari911**Changed from template literals to concatenation**: 9045*9ccd446eSAtari911 9046*9ccd446eSAtari911**BEFORE (broken)**: 9047*9ccd446eSAtari911```javascript 9048*9ccd446eSAtari911let nsOptions = `<option value="">(default)</option>`; 9049*9ccd446eSAtari911nsOptions += `<option value="${namespace}">${namespace}</option>`; 9050*9ccd446eSAtari911console.log('Edit recurring:', namespace); 9051*9ccd446eSAtari911``` 9052*9ccd446eSAtari911 9053*9ccd446eSAtari911**AFTER (fixed)**: 9054*9ccd446eSAtari911```javascript 9055*9ccd446eSAtari911let nsOptions = "<option value=\\"\\">(default)</option>"; 9056*9ccd446eSAtari911nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 9057*9ccd446eSAtari911console.log("Edit recurring:", namespace); 9058*9ccd446eSAtari911``` 9059*9ccd446eSAtari911 9060*9ccd446eSAtari911**Changes**: 9061*9ccd446eSAtari911- ✅ Backticks (`) → Double quotes (") 9062*9ccd446eSAtari911- ✅ Template literals (${var}) → Concatenation (" + var + ") 9063*9ccd446eSAtari911- ✅ Single quotes in console.log → Double quotes 9064*9ccd446eSAtari911- ✅ Properly escaped quotes for PHP echo 9065*9ccd446eSAtari911 9066*9ccd446eSAtari911### Technical Details 9067*9ccd446eSAtari911 9068*9ccd446eSAtari911**The Issue**: 9069*9ccd446eSAtari911```php 9070*9ccd446eSAtari911// Inside PHP echo string: 9071*9ccd446eSAtari911echo '<script> 9072*9ccd446eSAtari911 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 9073*9ccd446eSAtari911</script>'; 9074*9ccd446eSAtari911``` 9075*9ccd446eSAtari911 9076*9ccd446eSAtari911**The Solution**: 9077*9ccd446eSAtari911```php 9078*9ccd446eSAtari911// Use regular string concatenation: 9079*9ccd446eSAtari911echo '<script> 9080*9ccd446eSAtari911 let x = "string " + variable; // ✓ Works in PHP echo! 9081*9ccd446eSAtari911</script>'; 9082*9ccd446eSAtari911``` 9083*9ccd446eSAtari911 9084*9ccd446eSAtari911**Quote Escaping**: 9085*9ccd446eSAtari911```javascript 9086*9ccd446eSAtari911// Double quotes inside PHP single-quote string: 9087*9ccd446eSAtari911'<option value=\"\">text</option>' 9088*9ccd446eSAtari911 ↑↑ Escaped for JavaScript 9089*9ccd446eSAtari911``` 9090*9ccd446eSAtari911 9091*9ccd446eSAtari911### Result 9092*9ccd446eSAtari911 9093*9ccd446eSAtari911**Before**: Admin page crashed with parse error ✗ 9094*9ccd446eSAtari911**After**: Admin page loads perfectly ✓ 9095*9ccd446eSAtari911 9096*9ccd446eSAtari911**No functionality changed - just syntax fix!** 9097*9ccd446eSAtari911 9098*9ccd446eSAtari911## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 9099*9ccd446eSAtari911 9100*9ccd446eSAtari911### Critical Fix: Namespace Dropdown in Recurring Events Section 9101*9ccd446eSAtari911- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 9102*9ccd446eSAtari911- **Fixed:** Current namespace now properly selected in dropdown 9103*9ccd446eSAtari911- **Fixed:** Namespace extraction from DOM now uses multiple methods 9104*9ccd446eSAtari911- **Added:** Console logging to debug namespace detection 9105*9ccd446eSAtari911 9106*9ccd446eSAtari911### The Problem 9107*9ccd446eSAtari911 9108*9ccd446eSAtari911**When editing from Recurring Events section**: 9109*9ccd446eSAtari911``` 9110*9ccd446eSAtari911Click "Edit" on recurring event 9111*9ccd446eSAtari911Namespace dropdown shows: 9112*9ccd446eSAtari911- (default) 9113*9ccd446eSAtari911- (nothing else!) ✗ 9114*9ccd446eSAtari911 9115*9ccd446eSAtari911Can't select any namespace! ✗ 9116*9ccd446eSAtari911``` 9117*9ccd446eSAtari911 9118*9ccd446eSAtari911**Why**: Broken namespace extraction logic 9119*9ccd446eSAtari911```javascript 9120*9ccd446eSAtari911// OLD CODE (broken): 9121*9ccd446eSAtari911const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 9122*9ccd446eSAtari911 .map(el => { 9123*9ccd446eSAtari911 // Complex parsing that often failed 9124*9ccd446eSAtari911 const nsSpan = el.querySelector("span:nth-child(3)"); 9125*9ccd446eSAtari911 return nsSpan.textContent.replace(" ", "").trim(); 9126*9ccd446eSAtari911 }) 9127*9ccd446eSAtari911 .filter(ns => ns !== namespace); // Excluded current! ✗ 9128*9ccd446eSAtari911``` 9129*9ccd446eSAtari911 9130*9ccd446eSAtari911**Result**: Empty dropdown, can't change namespace! ✗ 9131*9ccd446eSAtari911 9132*9ccd446eSAtari911### The Fix 9133*9ccd446eSAtari911 9134*9ccd446eSAtari911**NEW CODE (robust)**: 9135*9ccd446eSAtari911```javascript 9136*9ccd446eSAtari911const namespaces = new Set(); 9137*9ccd446eSAtari911 9138*9ccd446eSAtari911// Method 1: Namespace explorer folders 9139*9ccd446eSAtari911document.querySelectorAll("[id^=ns_]").forEach(el => { 9140*9ccd446eSAtari911 const nsSpan = el.querySelector("span:nth-child(3)"); 9141*9ccd446eSAtari911 if (nsSpan) { 9142*9ccd446eSAtari911 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9143*9ccd446eSAtari911 if (nsText && nsText !== "(default)") { 9144*9ccd446eSAtari911 namespaces.add(nsText); // ✓ 9145*9ccd446eSAtari911 } 9146*9ccd446eSAtari911 } 9147*9ccd446eSAtari911}); 9148*9ccd446eSAtari911 9149*9ccd446eSAtari911// Method 2: Datalist (backup method) 9150*9ccd446eSAtari911document.querySelectorAll("#namespaceList option").forEach(opt => { 9151*9ccd446eSAtari911 if (opt.value && opt.value !== "") { 9152*9ccd446eSAtari911 namespaces.add(opt.value); // ✓ 9153*9ccd446eSAtari911 } 9154*9ccd446eSAtari911}); 9155*9ccd446eSAtari911 9156*9ccd446eSAtari911// Build dropdown with ALL namespaces 9157*9ccd446eSAtari911let options = `<option value="">(default)</option>`; 9158*9ccd446eSAtari911 9159*9ccd446eSAtari911// Show current namespace as selected 9160*9ccd446eSAtari911if (namespace) { 9161*9ccd446eSAtari911 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 9162*9ccd446eSAtari911} 9163*9ccd446eSAtari911 9164*9ccd446eSAtari911// Show all other namespaces 9165*9ccd446eSAtari911for (const ns of nsArray) { 9166*9ccd446eSAtari911 if (ns !== namespace) { 9167*9ccd446eSAtari911 options += `<option value="${ns}">${ns}</option>`; 9168*9ccd446eSAtari911 } 9169*9ccd446eSAtari911} 9170*9ccd446eSAtari911``` 9171*9ccd446eSAtari911 9172*9ccd446eSAtari911**Result**: All namespaces visible! ✓ 9173*9ccd446eSAtari911 9174*9ccd446eSAtari911### How It Works Now 9175*9ccd446eSAtari911 9176*9ccd446eSAtari911**Before (Broken)**: 9177*9ccd446eSAtari911``` 9178*9ccd446eSAtari911Edit recurring event in "work" namespace 9179*9ccd446eSAtari911 9180*9ccd446eSAtari911Dropdown shows: 9181*9ccd446eSAtari911☐ (default) 9182*9ccd446eSAtari911 9183*9ccd446eSAtari911That's it! Can't select anything! ✗ 9184*9ccd446eSAtari911``` 9185*9ccd446eSAtari911 9186*9ccd446eSAtari911**After (Fixed)**: 9187*9ccd446eSAtari911``` 9188*9ccd446eSAtari911Edit recurring event in "work" namespace 9189*9ccd446eSAtari911 9190*9ccd446eSAtari911Dropdown shows: 9191*9ccd446eSAtari911☐ (default) 9192*9ccd446eSAtari911☑ work (current) ← Selected! 9193*9ccd446eSAtari911☐ personal 9194*9ccd446eSAtari911☐ projects 9195*9ccd446eSAtari911☐ meetings 9196*9ccd446eSAtari911 9197*9ccd446eSAtari911All namespaces available! ✓ 9198*9ccd446eSAtari911``` 9199*9ccd446eSAtari911 9200*9ccd446eSAtari911### Key Improvements 9201*9ccd446eSAtari911 9202*9ccd446eSAtari911**1. Dual extraction methods**: 9203*9ccd446eSAtari911- Primary: Parse namespace explorer DOM 9204*9ccd446eSAtari911- Backup: Read from datalist 9205*9ccd446eSAtari911- Result: Always finds namespaces ✓ 9206*9ccd446eSAtari911 9207*9ccd446eSAtari911**2. Current namespace included**: 9208*9ccd446eSAtari911```javascript 9209*9ccd446eSAtari911// OLD: Excluded current namespace 9210*9ccd446eSAtari911.filter(ns => ns !== namespace) ✗ 9211*9ccd446eSAtari911 9212*9ccd446eSAtari911// NEW: Include and mark as selected 9213*9ccd446eSAtari911options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 9214*9ccd446eSAtari911``` 9215*9ccd446eSAtari911 9216*9ccd446eSAtari911**3. Better error handling**: 9217*9ccd446eSAtari911```javascript 9218*9ccd446eSAtari911if (nsSpan) { // Check exists 9219*9ccd446eSAtari911 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9220*9ccd446eSAtari911 if (nsText && nsText !== "(default)") { // Validate 9221*9ccd446eSAtari911 namespaces.add(nsText); 9222*9ccd446eSAtari911 } 9223*9ccd446eSAtari911} 9224*9ccd446eSAtari911``` 9225*9ccd446eSAtari911 9226*9ccd446eSAtari911**4. Console debugging**: 9227*9ccd446eSAtari911```javascript 9228*9ccd446eSAtari911console.log('Edit recurring - Current namespace:', namespace); 9229*9ccd446eSAtari911console.log('Available namespaces:', nsArray); 9230*9ccd446eSAtari911``` 9231*9ccd446eSAtari911 9232*9ccd446eSAtari911Open browser console (F12) to see what namespaces are detected! 9233*9ccd446eSAtari911 9234*9ccd446eSAtari911### Example Usage 9235*9ccd446eSAtari911 9236*9ccd446eSAtari911**Scenario**: Edit recurring "Team Meeting" in "work" namespace 9237*9ccd446eSAtari911 9238*9ccd446eSAtari911**Steps**: 9239*9ccd446eSAtari9111. Go to Recurring Events section 9240*9ccd446eSAtari9112. Click "Edit" on "Team Meeting" 9241*9ccd446eSAtari9113. See namespace dropdown: 9242*9ccd446eSAtari911 - ☐ (default) 9243*9ccd446eSAtari911 - ☑ work (current) 9244*9ccd446eSAtari911 - ☐ personal 9245*9ccd446eSAtari911 - ☐ projects 9246*9ccd446eSAtari9114. Select "personal" to move event 9247*9ccd446eSAtari9115. Click "Save Changes" 9248*9ccd446eSAtari9116. Event moved to "personal" namespace ✓ 9249*9ccd446eSAtari911 9250*9ccd446eSAtari911**Finally works as expected!** 9251*9ccd446eSAtari911 9252*9ccd446eSAtari911## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 9253*9ccd446eSAtari911 9254*9ccd446eSAtari911### Recurring Events Namespace Fix 9255*9ccd446eSAtari911- **Fixed:** Namespace now properly preserved when editing recurring events 9256*9ccd446eSAtari911- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 9257*9ccd446eSAtari911- **Added:** Better logging for namespace preservation debugging 9258*9ccd446eSAtari911- **Added:** Console logging to track namespace values during edit 9259*9ccd446eSAtari911 9260*9ccd446eSAtari911### The Namespace Problem 9261*9ccd446eSAtari911 9262*9ccd446eSAtari911**Issue 1**: Can't select non-default namespace 9263*9ccd446eSAtari911``` 9264*9ccd446eSAtari911When editing recurring event: 9265*9ccd446eSAtari911- Dropdown shows all namespaces ✓ 9266*9ccd446eSAtari911- User selects "work" 9267*9ccd446eSAtari911- Form submits with "" (empty/default) ✗ 9268*9ccd446eSAtari911``` 9269*9ccd446eSAtari911 9270*9ccd446eSAtari911**Issue 2**: Namespace not preserved 9271*9ccd446eSAtari911``` 9272*9ccd446eSAtari911Recurring event in "personal" namespace 9273*9ccd446eSAtari911Edit the title only 9274*9ccd446eSAtari911After save: namespace changed to "" (default) ✗ 9275*9ccd446eSAtari911``` 9276*9ccd446eSAtari911 9277*9ccd446eSAtari911### The Fixes 9278*9ccd446eSAtari911 9279*9ccd446eSAtari911**Fix 1**: Better namespace preservation logic 9280*9ccd446eSAtari911```php 9281*9ccd446eSAtari911// When editing recurring event: 9282*9ccd446eSAtari911$existingNamespace = $existingEventData['namespace']; 9283*9ccd446eSAtari911 9284*9ccd446eSAtari911// Preserve if user didn't explicitly change it: 9285*9ccd446eSAtari911if (empty($namespace) || 9286*9ccd446eSAtari911 strpos($namespace, '*') !== false || 9287*9ccd446eSAtari911 strpos($namespace, ';') !== false) { 9288*9ccd446eSAtari911 // User didn't select or selected wildcard 9289*9ccd446eSAtari911 $namespace = $existingNamespace; // Keep existing! 9290*9ccd446eSAtari911} 9291*9ccd446eSAtari911``` 9292*9ccd446eSAtari911 9293*9ccd446eSAtari911**Fix 2**: Proper form population 9294*9ccd446eSAtari911```javascript 9295*9ccd446eSAtari911// When editing, set BOTH inputs: 9296*9ccd446eSAtari911namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 9297*9ccd446eSAtari911namespaceSearch.value = event.namespace || '(default)'; // Visible 9298*9ccd446eSAtari911 9299*9ccd446eSAtari911// Plus logging: 9300*9ccd446eSAtari911console.log('Set namespace for editing:', event.namespace); 9301*9ccd446eSAtari911``` 9302*9ccd446eSAtari911 9303*9ccd446eSAtari911**Fix 3**: Added detailed logging 9304*9ccd446eSAtari911```php 9305*9ccd446eSAtari911error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 9306*9ccd446eSAtari911error_log("Using new namespace '$namespace'"); 9307*9ccd446eSAtari911error_log("No existing namespace to preserve"); 9308*9ccd446eSAtari911``` 9309*9ccd446eSAtari911 9310*9ccd446eSAtari911### How It Works Now 9311*9ccd446eSAtari911 9312*9ccd446eSAtari911**Scenario 1**: Edit without changing namespace 9313*9ccd446eSAtari911``` 9314*9ccd446eSAtari911Event in "work" namespace 9315*9ccd446eSAtari911Edit title to "Updated Meeting" 9316*9ccd446eSAtari911Namespace field shows: "work" 9317*9ccd446eSAtari911Hidden input value: "work" 9318*9ccd446eSAtari911Result: Saved in "work" ✓ 9319*9ccd446eSAtari911``` 9320*9ccd446eSAtari911 9321*9ccd446eSAtari911**Scenario 2**: Change namespace during edit 9322*9ccd446eSAtari911``` 9323*9ccd446eSAtari911Event in "personal" namespace 9324*9ccd446eSAtari911Edit and select "work" namespace 9325*9ccd446eSAtari911Hidden input value: "work" 9326*9ccd446eSAtari911Result: Saved in "work" ✓ 9327*9ccd446eSAtari911``` 9328*9ccd446eSAtari911 9329*9ccd446eSAtari911**Scenario 3**: Edit with empty/wildcard namespace 9330*9ccd446eSAtari911``` 9331*9ccd446eSAtari911Event in "projects" namespace 9332*9ccd446eSAtari911Namespace field empty or shows "personal;work" 9333*9ccd446eSAtari911System preserves: "projects" 9334*9ccd446eSAtari911Result: Saved in "projects" ✓ 9335*9ccd446eSAtari911``` 9336*9ccd446eSAtari911 9337*9ccd446eSAtari911### Debugging 9338*9ccd446eSAtari911 9339*9ccd446eSAtari911Now with console logging, you can see: 9340*9ccd446eSAtari911```javascript 9341*9ccd446eSAtari911Set namespace for editing: work 9342*9ccd446eSAtari911Hidden value: work 9343*9ccd446eSAtari911``` 9344*9ccd446eSAtari911 9345*9ccd446eSAtari911And in PHP logs: 9346*9ccd446eSAtari911``` 9347*9ccd446eSAtari911Calendar saveEvent recurring: Loaded existing data - namespace='work' 9348*9ccd446eSAtari911Calendar saveEvent recurring: Preserving namespace 'work' (received='') 9349*9ccd446eSAtari911``` 9350*9ccd446eSAtari911 9351*9ccd446eSAtari911**Namespace preservation now works correctly!** 9352*9ccd446eSAtari911 9353*9ccd446eSAtari911## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 9354*9ccd446eSAtari911 9355*9ccd446eSAtari911### Recurring Events Edit Fix 9356*9ccd446eSAtari911- **Fixed:** Editing recurring events now preserves unchanged fields 9357*9ccd446eSAtari911- **Fixed:** Empty fields no longer erase existing data 9358*9ccd446eSAtari911- **Added:** Smart merge of existing event data with new changes 9359*9ccd446eSAtari911 9360*9ccd446eSAtari911### The Problem 9361*9ccd446eSAtari911 9362*9ccd446eSAtari911**Before**: Editing erased unchanged fields! 9363*9ccd446eSAtari911``` 9364*9ccd446eSAtari911Original recurring event: 9365*9ccd446eSAtari911- Title: "Team Meeting" 9366*9ccd446eSAtari911- Time: "10:00 AM" 9367*9ccd446eSAtari911- Description: "Weekly standup with engineering team" 9368*9ccd446eSAtari911- Color: Red 9369*9ccd446eSAtari911 9370*9ccd446eSAtari911User edits ONLY the title to "Staff Meeting" 9371*9ccd446eSAtari911Form sends: 9372*9ccd446eSAtari911- Title: "Staff Meeting" ✓ 9373*9ccd446eSAtari911- Time: "" ✗ (empty because user didn't change it) 9374*9ccd446eSAtari911- Description: "" ✗ (empty) 9375*9ccd446eSAtari911- Color: "#3498db" ✗ (default blue) 9376*9ccd446eSAtari911 9377*9ccd446eSAtari911Result after save: 9378*9ccd446eSAtari911- Title: "Staff Meeting" ✓ 9379*9ccd446eSAtari911- Time: BLANK ✗ 9380*9ccd446eSAtari911- Description: BLANK ✗ 9381*9ccd446eSAtari911- Color: Blue ✗ 9382*9ccd446eSAtari911``` 9383*9ccd446eSAtari911 9384*9ccd446eSAtari911**All the other data was lost!** ✗ 9385*9ccd446eSAtari911 9386*9ccd446eSAtari911### The Fix 9387*9ccd446eSAtari911 9388*9ccd446eSAtari911**After**: Preserves unchanged data! 9389*9ccd446eSAtari911```php 9390*9ccd446eSAtari911if ($eventId && $isRecurring) { 9391*9ccd446eSAtari911 // Load existing event data 9392*9ccd446eSAtari911 $existingEventData = getExistingEventData($eventId); 9393*9ccd446eSAtari911 9394*9ccd446eSAtari911 // Merge: use new value OR keep existing 9395*9ccd446eSAtari911 $title = $title ?: $existingEventData['title']; 9396*9ccd446eSAtari911 $time = $time ?: $existingEventData['time']; 9397*9ccd446eSAtari911 $description = $description ?: $existingEventData['description']; 9398*9ccd446eSAtari911 $color = ($color === '#3498db') ? 9399*9ccd446eSAtari911 $existingEventData['color'] : $color; 9400*9ccd446eSAtari911} 9401*9ccd446eSAtari911``` 9402*9ccd446eSAtari911 9403*9ccd446eSAtari911**Now**: 9404*9ccd446eSAtari911``` 9405*9ccd446eSAtari911User edits ONLY the title to "Staff Meeting" 9406*9ccd446eSAtari911 9407*9ccd446eSAtari911System: 9408*9ccd446eSAtari9111. Loads existing event data 9409*9ccd446eSAtari9112. Merges: new title + existing time/description/color 9410*9ccd446eSAtari9113. Saves merged data 9411*9ccd446eSAtari911 9412*9ccd446eSAtari911Result: 9413*9ccd446eSAtari911- Title: "Staff Meeting" ✓ (changed) 9414*9ccd446eSAtari911- Time: "10:00 AM" ✓ (preserved!) 9415*9ccd446eSAtari911- Description: "Weekly standup..." ✓ (preserved!) 9416*9ccd446eSAtari911- Color: Red ✓ (preserved!) 9417*9ccd446eSAtari911``` 9418*9ccd446eSAtari911 9419*9ccd446eSAtari911**Only changed fields are updated!** ✓ 9420*9ccd446eSAtari911 9421*9ccd446eSAtari911### How It Works 9422*9ccd446eSAtari911 9423*9ccd446eSAtari911**Step 1**: Load existing data 9424*9ccd446eSAtari911```php 9425*9ccd446eSAtari911$existingEventData = $this->getExistingEventData( 9426*9ccd446eSAtari911 $eventId, 9427*9ccd446eSAtari911 $date, 9428*9ccd446eSAtari911 $namespace 9429*9ccd446eSAtari911); 9430*9ccd446eSAtari911``` 9431*9ccd446eSAtari911 9432*9ccd446eSAtari911**Step 2**: Merge with new data 9433*9ccd446eSAtari911```php 9434*9ccd446eSAtari911// If new value is empty, use existing value 9435*9ccd446eSAtari911$title = $newTitle ?: $existingEventData['title']; 9436*9ccd446eSAtari911$time = $newTime ?: $existingEventData['time']; 9437*9ccd446eSAtari911$description = $newDesc ?: $existingEventData['description']; 9438*9ccd446eSAtari911 9439*9ccd446eSAtari911// Special handling for color (default is #3498db) 9440*9ccd446eSAtari911if ($newColor === '#3498db' && $existingEventData['color']) { 9441*9ccd446eSAtari911 $color = $existingEventData['color']; 9442*9ccd446eSAtari911} 9443*9ccd446eSAtari911``` 9444*9ccd446eSAtari911 9445*9ccd446eSAtari911**Step 3**: Save merged data 9446*9ccd446eSAtari911```php 9447*9ccd446eSAtari911createRecurringEvents(..., $title, $time, $description, $color, ...); 9448*9ccd446eSAtari911``` 9449*9ccd446eSAtari911 9450*9ccd446eSAtari911### Fields Preserved 9451*9ccd446eSAtari911 9452*9ccd446eSAtari911When editing recurring events, these fields are now preserved if not changed: 9453*9ccd446eSAtari911- ✅ Title (if left blank) 9454*9ccd446eSAtari911- ✅ Time (if not specified) 9455*9ccd446eSAtari911- ✅ End Time (if not specified) 9456*9ccd446eSAtari911- ✅ Description (if left empty) 9457*9ccd446eSAtari911- ✅ Color (if still default blue) 9458*9ccd446eSAtari911 9459*9ccd446eSAtari911**Edit only what you want to change - everything else stays!** 9460*9ccd446eSAtari911 9461*9ccd446eSAtari911## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 9462*9ccd446eSAtari911 9463*9ccd446eSAtari911### ✨ New Feature: Rename Namespaces 9464*9ccd446eSAtari911- **Added:** ✏️ Rename button in Namespace Explorer 9465*9ccd446eSAtari911- **Added:** Rename all events in a namespace at once 9466*9ccd446eSAtari911- **Added:** Automatic cleanup of old directory structure 9467*9ccd446eSAtari911 9468*9ccd446eSAtari911### Critical Fix: Recurring Events Actually Edit Now! 9469*9ccd446eSAtari911- **Fixed:** Editing recurring events now deletes ALL instances 9470*9ccd446eSAtari911- **Fixed:** Previously only deleted one instance, left orphans 9471*9ccd446eSAtari911- **Fixed:** Recurring events properly regenerated on edit 9472*9ccd446eSAtari911 9473*9ccd446eSAtari911### Namespace Rename Feature 9474*9ccd446eSAtari911 9475*9ccd446eSAtari911**Before**: Could only delete namespaces, not rename 9476*9ccd446eSAtari911 9477*9ccd446eSAtari911**After**: Click ✏️ to rename! 9478*9ccd446eSAtari911 9479*9ccd446eSAtari911``` 9480*9ccd446eSAtari911 work (15 events) [3] [✏️] [️] 9481*9ccd446eSAtari911 ↑ NEW! 9482*9ccd446eSAtari911``` 9483*9ccd446eSAtari911 9484*9ccd446eSAtari911**How It Works**: 9485*9ccd446eSAtari9111. Click ✏️ rename button 9486*9ccd446eSAtari9112. Enter new namespace name 9487*9ccd446eSAtari9113. All events moved to new namespace 9488*9ccd446eSAtari9114. Event `namespace` field updated in JSON 9489*9ccd446eSAtari9115. Old directory cleaned up 9490*9ccd446eSAtari911 9491*9ccd446eSAtari911**Example**: 9492*9ccd446eSAtari911``` 9493*9ccd446eSAtari911Rename: "work" → "business" 9494*9ccd446eSAtari911 9495*9ccd446eSAtari911Before: 9496*9ccd446eSAtari911/data/meta/work/calendar/*.json 9497*9ccd446eSAtari911Events: {namespace: "work"} 9498*9ccd446eSAtari911 9499*9ccd446eSAtari911After: 9500*9ccd446eSAtari911/data/meta/business/calendar/*.json 9501*9ccd446eSAtari911Events: {namespace: "business"} 9502*9ccd446eSAtari911``` 9503*9ccd446eSAtari911 9504*9ccd446eSAtari911**Implementation**: 9505*9ccd446eSAtari911```php 9506*9ccd446eSAtari911private function renameNamespace() { 9507*9ccd446eSAtari911 // 1. Validate new name 9508*9ccd446eSAtari911 // 2. Rename directory 9509*9ccd446eSAtari911 // 3. Update all event namespace fields in JSON 9510*9ccd446eSAtari911 // 4. Clean up old empty directories 9511*9ccd446eSAtari911} 9512*9ccd446eSAtari911``` 9513*9ccd446eSAtari911 9514*9ccd446eSAtari911### Recurring Events Fix - The Problem 9515*9ccd446eSAtari911 9516*9ccd446eSAtari911**Before**: Editing didn't work! 9517*9ccd446eSAtari911``` 9518*9ccd446eSAtari911Original recurring event generates: 9519*9ccd446eSAtari911- Event-0 (Mon, Feb 10) 9520*9ccd446eSAtari911- Event-1 (Mon, Feb 17) 9521*9ccd446eSAtari911- Event-2 (Mon, Feb 24) 9522*9ccd446eSAtari911 9523*9ccd446eSAtari911User edits Event-0, changes title to "Updated" 9524*9ccd446eSAtari911 9525*9ccd446eSAtari911What SHOULD happen: 9526*9ccd446eSAtari911- Delete Event-0, Event-1, Event-2 9527*9ccd446eSAtari911- Generate new instances with "Updated" title 9528*9ccd446eSAtari911 9529*9ccd446eSAtari911What ACTUALLY happened: 9530*9ccd446eSAtari911- Delete Event-0 only ✗ 9531*9ccd446eSAtari911- Generate new instances 9532*9ccd446eSAtari911- Result: Event-1 and Event-2 still show old title! ✗ 9533*9ccd446eSAtari911``` 9534*9ccd446eSAtari911 9535*9ccd446eSAtari911**After**: Properly deletes ALL instances! 9536*9ccd446eSAtari911 9537*9ccd446eSAtari911**The Fix**: 9538*9ccd446eSAtari911```php 9539*9ccd446eSAtari911private function deleteEvent() { 9540*9ccd446eSAtari911 $event = getEvent($eventId); 9541*9ccd446eSAtari911 9542*9ccd446eSAtari911 // Check if recurring 9543*9ccd446eSAtari911 if ($event['recurring'] && $event['recurringId']) { 9544*9ccd446eSAtari911 // Delete ALL instances with same recurringId 9545*9ccd446eSAtari911 deleteAllRecurringInstances($recurringId); 9546*9ccd446eSAtari911 } 9547*9ccd446eSAtari911 9548*9ccd446eSAtari911 // Then normal delete for spanning events 9549*9ccd446eSAtari911} 9550*9ccd446eSAtari911 9551*9ccd446eSAtari911private function deleteAllRecurringInstances($recurringId) { 9552*9ccd446eSAtari911 // Scan ALL calendar JSON files 9553*9ccd446eSAtari911 foreach (glob('*.json') as $file) { 9554*9ccd446eSAtari911 // Filter out events with matching recurringId 9555*9ccd446eSAtari911 $events = array_filter($events, function($event) { 9556*9ccd446eSAtari911 return $event['recurringId'] !== $recurringId; 9557*9ccd446eSAtari911 }); 9558*9ccd446eSAtari911 } 9559*9ccd446eSAtari911} 9560*9ccd446eSAtari911``` 9561*9ccd446eSAtari911 9562*9ccd446eSAtari911**Result**: 9563*9ccd446eSAtari911- Edit "Weekly Team Meeting" → ALL instances updated ✓ 9564*9ccd446eSAtari911- Delete recurring event → ALL instances deleted ✓ 9565*9ccd446eSAtari911- No more orphaned events! ✓ 9566*9ccd446eSAtari911 9567*9ccd446eSAtari911### Recurring Event Fields 9568*9ccd446eSAtari911 9569*9ccd446eSAtari911Every recurring event has: 9570*9ccd446eSAtari911```json 9571*9ccd446eSAtari911{ 9572*9ccd446eSAtari911 "id": "abc123-0", 9573*9ccd446eSAtari911 "recurring": true, 9574*9ccd446eSAtari911 "recurringId": "abc123", ← Links all instances 9575*9ccd446eSAtari911 ... 9576*9ccd446eSAtari911} 9577*9ccd446eSAtari911``` 9578*9ccd446eSAtari911 9579*9ccd446eSAtari911When editing/deleting, we find ALL events with same `recurringId` and remove them! 9580*9ccd446eSAtari911 9581*9ccd446eSAtari911**Finally, recurring events work properly!** 9582*9ccd446eSAtari911 9583*9ccd446eSAtari911## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 9584*9ccd446eSAtari911 9585*9ccd446eSAtari911### Important Events Sorting - ACTUALLY FIXED! 9586*9ccd446eSAtari911- **Fixed:** Important Events now REALLY sorted by date first, then time 9587*9ccd446eSAtari911- **Fixed:** renderSidebarSection was re-sorting and breaking the order 9588*9ccd446eSAtari911- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 9589*9ccd446eSAtari911 9590*9ccd446eSAtari911### Pink Theme Tooltip Bling! 9591*9ccd446eSAtari911- **Added:** Pink gradient tooltips (hot pink → light pink) 9592*9ccd446eSAtari911- **Added:** Glowing pink border on tooltips 9593*9ccd446eSAtari911- **Added:** Sparkling heart () appears next to tooltip! 9594*9ccd446eSAtari911- **Added:** Heart has pink glow drop-shadow 9595*9ccd446eSAtari911 9596*9ccd446eSAtari911### The Sorting Bug - Root Cause 9597*9ccd446eSAtari911 9598*9ccd446eSAtari911**Problem**: Two sorts were happening! 9599*9ccd446eSAtari911 9600*9ccd446eSAtari911**Sort #1** (Line 2047): Before rendering 9601*9ccd446eSAtari911```php 9602*9ccd446eSAtari911usort($importantEvents, ...) // Sort by date ✓ 9603*9ccd446eSAtari911``` 9604*9ccd446eSAtari911 9605*9ccd446eSAtari911**Sort #2** (Line 2751): Inside renderSidebarSection 9606*9ccd446eSAtari911```php 9607*9ccd446eSAtari911usort($events, ...) // Sort by TIME ONLY ✗ 9608*9ccd446eSAtari911// This was breaking the date order! 9609*9ccd446eSAtari911``` 9610*9ccd446eSAtari911 9611*9ccd446eSAtari911**The Fix**: Different sorting for different sections 9612*9ccd446eSAtari911```php 9613*9ccd446eSAtari911if ($title === 'Important Events') { 9614*9ccd446eSAtari911 // Sort by DATE first, then time 9615*9ccd446eSAtari911 usort($events, function($a, $b) { 9616*9ccd446eSAtari911 if ($dateA !== $dateB) { 9617*9ccd446eSAtari911 return strcmp($dateA, $dateB); // DATE first! 9618*9ccd446eSAtari911 } 9619*9ccd446eSAtari911 // Same date - sort by time 9620*9ccd446eSAtari911 return timeCompare($a, $b); 9621*9ccd446eSAtari911 }); 9622*9ccd446eSAtari911} else { 9623*9ccd446eSAtari911 // Today/Tomorrow - sort by TIME only (same date) 9624*9ccd446eSAtari911 usort($events, function($a, $b) { 9625*9ccd446eSAtari911 return timeCompare($a, $b); 9626*9ccd446eSAtari911 }); 9627*9ccd446eSAtari911} 9628*9ccd446eSAtari911``` 9629*9ccd446eSAtari911 9630*9ccd446eSAtari911**Result**: Important Events now CORRECTLY sorted! 9631*9ccd446eSAtari911``` 9632*9ccd446eSAtari911✓ Sun, Feb 8 - 3:30 PM Super Bowl 9633*9ccd446eSAtari911✓ Tue, Feb 10 - 11:30 AM Doctor visit 9634*9ccd446eSAtari911✓ Sat, Feb 14 - Valentine's Day (all-day) 9635*9ccd446eSAtari911✓ Sat, Feb 14 - 8:00 PM Crab Shack 9636*9ccd446eSAtari911``` 9637*9ccd446eSAtari911 9638*9ccd446eSAtari911### Pink Tooltip Magic! 9639*9ccd446eSAtari911 9640*9ccd446eSAtari911**Normal Tooltips**: Black background, plain 9641*9ccd446eSAtari911```css 9642*9ccd446eSAtari911background: rgba(0, 0, 0, 0.95); 9643*9ccd446eSAtari911color: #fff; 9644*9ccd446eSAtari911``` 9645*9ccd446eSAtari911 9646*9ccd446eSAtari911**Pink Theme Tooltips**: FABULOUS! 9647*9ccd446eSAtari911```css 9648*9ccd446eSAtari911/* Pink gradient background */ 9649*9ccd446eSAtari911background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 9650*9ccd446eSAtari911 9651*9ccd446eSAtari911/* Glowing pink border */ 9652*9ccd446eSAtari911border: 2px solid #ff85c1; 9653*9ccd446eSAtari911 9654*9ccd446eSAtari911/* Double glow shadow */ 9655*9ccd446eSAtari911box-shadow: 9656*9ccd446eSAtari911 0 0 15px rgba(255, 20, 147, 0.6), 9657*9ccd446eSAtari911 0 4px 12px rgba(0, 0, 0, 0.4); 9658*9ccd446eSAtari911 9659*9ccd446eSAtari911/* Bold text */ 9660*9ccd446eSAtari911font-weight: 600; 9661*9ccd446eSAtari911``` 9662*9ccd446eSAtari911 9663*9ccd446eSAtari911**Plus**: Sparkling heart next to tooltip! 9664*9ccd446eSAtari911```css 9665*9ccd446eSAtari911.sidebar-pink [data-tooltip]:after { 9666*9ccd446eSAtari911 content: ''; 9667*9ccd446eSAtari911 font-size: 12px; 9668*9ccd446eSAtari911 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 9669*9ccd446eSAtari911} 9670*9ccd446eSAtari911``` 9671*9ccd446eSAtari911 9672*9ccd446eSAtari911**The Effect**: 9673*9ccd446eSAtari911``` 9674*9ccd446eSAtari911Hover over ⚠ conflict warning: 9675*9ccd446eSAtari911┌────────────────────┐ 9676*9ccd446eSAtari911│ Conflicts with: │ ← Pink gradient 9677*9ccd446eSAtari911│ • Event 1 (3PM) │ ← Pink border 9678*9ccd446eSAtari911│ • Event 2 (4PM) │ ← Pink glow 9679*9ccd446eSAtari911└────────────────────┘ 9680*9ccd446eSAtari911``` 9681*9ccd446eSAtari911 9682*9ccd446eSAtari911**Maximum glamour on tooltips too!** ✨ 9683*9ccd446eSAtari911 9684*9ccd446eSAtari911## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 9685*9ccd446eSAtari911 9686*9ccd446eSAtari911### Important Events Order Fixed 9687*9ccd446eSAtari911- **Fixed:** Important Events now sorted by date (earliest first) 9688*9ccd446eSAtari911- **Fixed:** Events on same date sorted by time (chronological) 9689*9ccd446eSAtari911- **Fixed:** All-day events appear last within each date 9690*9ccd446eSAtari911 9691*9ccd446eSAtari911### Sorting Issue 9692*9ccd446eSAtari911 9693*9ccd446eSAtari911**Before**: Random order 9694*9ccd446eSAtari911``` 9695*9ccd446eSAtari911Important Events: 9696*9ccd446eSAtari911 Valentine's Day (Sat, Feb 14) 9697*9ccd446eSAtari91111:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 9698*9ccd446eSAtari9113:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 9699*9ccd446eSAtari9118:00 PM Crab Shack (Sat, Feb 14) 9700*9ccd446eSAtari911``` 9701*9ccd446eSAtari911 9702*9ccd446eSAtari911**After**: Chronological order 9703*9ccd446eSAtari911``` 9704*9ccd446eSAtari911Important Events: 9705*9ccd446eSAtari9113:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 9706*9ccd446eSAtari91111:30 AM Doctor visit (Tue, Feb 10) 9707*9ccd446eSAtari911 Valentine's Day (Sat, Feb 14) ← All-day event 9708*9ccd446eSAtari9118:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 9709*9ccd446eSAtari911``` 9710*9ccd446eSAtari911 9711*9ccd446eSAtari911### Sorting Logic 9712*9ccd446eSAtari911 9713*9ccd446eSAtari911**Primary Sort**: By date 9714*9ccd446eSAtari911```php 9715*9ccd446eSAtari911strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 9716*9ccd446eSAtari911``` 9717*9ccd446eSAtari911 9718*9ccd446eSAtari911**Secondary Sort**: By time (within same date) 9719*9ccd446eSAtari911```php 9720*9ccd446eSAtari911// All-day events (no time) go last 9721*9ccd446eSAtari911if (empty($timeA) && !empty($timeB)) return 1; 9722*9ccd446eSAtari911if (!empty($timeA) && empty($timeB)) return -1; 9723*9ccd446eSAtari911 9724*9ccd446eSAtari911// Both have times - sort chronologically 9725*9ccd446eSAtari911$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 9726*9ccd446eSAtari911$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 9727*9ccd446eSAtari911return $aMinutes - $bMinutes; // 690 < 1200 9728*9ccd446eSAtari911``` 9729*9ccd446eSAtari911 9730*9ccd446eSAtari911**Result**: 9731*9ccd446eSAtari9111. Sun, Feb 8 - 3:30 PM (earliest date & time) 9732*9ccd446eSAtari9112. Tue, Feb 10 - 11:30 AM (next date) 9733*9ccd446eSAtari9113. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 9734*9ccd446eSAtari9114. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 9735*9ccd446eSAtari911 9736*9ccd446eSAtari911**Perfect chronological order for next 2 weeks!** ✓ 9737*9ccd446eSAtari911 9738*9ccd446eSAtari911## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 9739*9ccd446eSAtari911 9740*9ccd446eSAtari911### EXTREME PINK BLING EFFECTS! 9741*9ccd446eSAtari911- **Added:** Click sparkles - 8 sparkles burst out on every click! 9742*9ccd446eSAtari911- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 9743*9ccd446eSAtari911- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 9744*9ccd446eSAtari911- **Added:** Pulsing border glow - constantly breathing pink glow 9745*9ccd446eSAtari911- **Added:** Drop shadows on sparkles for extra depth 9746*9ccd446eSAtari911- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 9747*9ccd446eSAtari911 9748*9ccd446eSAtari911### Sparkle Effects Breakdown 9749*9ccd446eSAtari911 9750*9ccd446eSAtari911**Click Sparkles** : 9751*9ccd446eSAtari911```javascript 9752*9ccd446eSAtari911// 8 sparkles burst out when you click anywhere! 9753*9ccd446eSAtari911for (let i = 0; i < 8; i++) { 9754*9ccd446eSAtari911 // Staggered appearance (40ms apart) 9755*9ccd446eSAtari911 createSparkle(x, y); 9756*9ccd446eSAtari911} 9757*9ccd446eSAtari911 9758*9ccd446eSAtari911// Sparkle emojis: 9759*9ccd446eSAtari911["✨", "", "", "⭐", "", "", "", "", "", ""] 9760*9ccd446eSAtari911``` 9761*9ccd446eSAtari911 9762*9ccd446eSAtari911**Each sparkle**: 9763*9ccd446eSAtari911- Starts at click point 9764*9ccd446eSAtari911- Flies outward 30-60px in random direction 9765*9ccd446eSAtari911- Spins 360 degrees 9766*9ccd446eSAtari911- Fades in and out 9767*9ccd446eSAtari911- Has pink glow drop-shadow 9768*9ccd446eSAtari911- Disappears after 1 second 9769*9ccd446eSAtari911 9770*9ccd446eSAtari911**Auto Sparkles** ⏰: 9771*9ccd446eSAtari911```javascript 9772*9ccd446eSAtari911// Random sparkle every 3 seconds 9773*9ccd446eSAtari911setInterval(() => { 9774*9ccd446eSAtari911 const x = Math.random() * width; 9775*9ccd446eSAtari911 const y = Math.random() * height; 9776*9ccd446eSAtari911 createSparkle(x, y); 9777*9ccd446eSAtari911}, 3000); 9778*9ccd446eSAtari911``` 9779*9ccd446eSAtari911 9780*9ccd446eSAtari911**Result**: Constant magical sparkles even without clicking! ✨ 9781*9ccd446eSAtari911 9782*9ccd446eSAtari911**Hover Mega-Glow** : 9783*9ccd446eSAtari911```css 9784*9ccd446eSAtari911.sidebar-pink:hover { 9785*9ccd446eSAtari911 box-shadow: 9786*9ccd446eSAtari911 0 0 30px rgba(255, 20, 147, 0.9), 9787*9ccd446eSAtari911 0 0 50px rgba(255, 20, 147, 0.5) !important; 9788*9ccd446eSAtari911} 9789*9ccd446eSAtari911``` 9790*9ccd446eSAtari911 9791*9ccd446eSAtari911**Result**: Sidebar EXPLODES with pink glow when you hover over it! 9792*9ccd446eSAtari911 9793*9ccd446eSAtari911**Pulsing Border Glow** : 9794*9ccd446eSAtari911```css 9795*9ccd446eSAtari911@keyframes pulse-glow { 9796*9ccd446eSAtari911 0%, 100% { 9797*9ccd446eSAtari911 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9798*9ccd446eSAtari911 } 9799*9ccd446eSAtari911 50% { 9800*9ccd446eSAtari911 box-shadow: 9801*9ccd446eSAtari911 0 0 25px rgba(255, 20, 147, 0.8), 9802*9ccd446eSAtari911 0 0 40px rgba(255, 20, 147, 0.4); 9803*9ccd446eSAtari911 } 9804*9ccd446eSAtari911} 9805*9ccd446eSAtari911 9806*9ccd446eSAtari911animation: pulse-glow 3s ease-in-out infinite; 9807*9ccd446eSAtari911``` 9808*9ccd446eSAtari911 9809*9ccd446eSAtari911**Result**: Border continuously breathes with pink glow! 9810*9ccd446eSAtari911 9811*9ccd446eSAtari911**Sparkle Animation** : 9812*9ccd446eSAtari911```css 9813*9ccd446eSAtari911@keyframes sparkle { 9814*9ccd446eSAtari911 0% { 9815*9ccd446eSAtari911 opacity: 0; 9816*9ccd446eSAtari911 transform: translate(0, 0) scale(0) rotate(0deg); 9817*9ccd446eSAtari911 } 9818*9ccd446eSAtari911 50% { 9819*9ccd446eSAtari911 opacity: 1; 9820*9ccd446eSAtari911 transform: translate(halfway) scale(1) rotate(180deg); 9821*9ccd446eSAtari911 } 9822*9ccd446eSAtari911 100% { 9823*9ccd446eSAtari911 opacity: 0; 9824*9ccd446eSAtari911 transform: translate(far) scale(0) rotate(360deg); 9825*9ccd446eSAtari911 } 9826*9ccd446eSAtari911} 9827*9ccd446eSAtari911``` 9828*9ccd446eSAtari911 9829*9ccd446eSAtari911**Result**: Sparkles spin, grow, shrink, and fly! 9830*9ccd446eSAtari911 9831*9ccd446eSAtari911### Complete Pink Bling Experience: 9832*9ccd446eSAtari911 9833*9ccd446eSAtari911**Always Active**: 9834*9ccd446eSAtari911- ✨ Pulsing pink border glow (3 second cycle) 9835*9ccd446eSAtari911- ✨ Auto-sparkles every 3 seconds 9836*9ccd446eSAtari911 9837*9ccd446eSAtari911**On Hover**: 9838*9ccd446eSAtari911- MEGA GLOW EFFECT (2x brightness!) 9839*9ccd446eSAtari911 9840*9ccd446eSAtari911**On Click**: 9841*9ccd446eSAtari911- 8 sparkles EXPLODE outward! 9842*9ccd446eSAtari911- Random emojis (hearts, stars, diamonds, crowns!) 9843*9ccd446eSAtari911- Each sparkle spins 360° while flying 9844*9ccd446eSAtari911- Pink glow drop-shadow on each sparkle 9845*9ccd446eSAtari911 9846*9ccd446eSAtari911**The Result**: 9847*9ccd446eSAtari911- Click anywhere = SPARKLE EXPLOSION! 9848*9ccd446eSAtari911- Hover anywhere = MEGA GLOW! ✨ 9849*9ccd446eSAtari911- Always breathing and sparkling! 9850*9ccd446eSAtari911- Maximum glamour! 9851*9ccd446eSAtari911- Wife approval: 1000%! 9852*9ccd446eSAtari911 9853*9ccd446eSAtari911**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 9854*9ccd446eSAtari911 9855*9ccd446eSAtari911## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 9856*9ccd446eSAtari911 9857*9ccd446eSAtari911### Pink Theme Final Touches 9858*9ccd446eSAtari911- **Fixed:** Add Event text now black (was bright pink, hard to read) 9859*9ccd446eSAtari911- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 9860*9ccd446eSAtari911- **Removed:** Text shadow on Add Event button (cleaner with black text) 9861*9ccd446eSAtari911 9862*9ccd446eSAtari911### Add Event Text - Black & Readable! 9863*9ccd446eSAtari911 9864*9ccd446eSAtari911**Before**: Bright pink text (#ff1493) on dark pink background 9865*9ccd446eSAtari911```php 9866*9ccd446eSAtari911$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 9867*9ccd446eSAtari911text-shadow: 0 0 3px #ff1493; // Glowy pink 9868*9ccd446eSAtari911``` 9869*9ccd446eSAtari911 9870*9ccd446eSAtari911**After**: Black text, no shadow, perfect contrast! 9871*9ccd446eSAtari911```php 9872*9ccd446eSAtari911$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 9873*9ccd446eSAtari911$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 9874*9ccd446eSAtari911``` 9875*9ccd446eSAtari911 9876*9ccd446eSAtari911**Result**: 9877*9ccd446eSAtari911- Black text pops against dark pink background ✓ 9878*9ccd446eSAtari911- Easy to read ✓ 9879*9ccd446eSAtari911- Professional look with bling ✓ 9880*9ccd446eSAtari911 9881*9ccd446eSAtari911### Clock Border - All Pink! 9882*9ccd446eSAtari911 9883*9ccd446eSAtari911**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 9884*9ccd446eSAtari911 9885*9ccd446eSAtari911**Before**: 9886*9ccd446eSAtari911```php 9887*9ccd446eSAtari911// Inline style (only bottom): 9888*9ccd446eSAtari911style="border-bottom:2px solid #ff1493;" 9889*9ccd446eSAtari911 9890*9ccd446eSAtari911// CSS (all sides): 9891*9ccd446eSAtari911.eventlist-today-header { 9892*9ccd446eSAtari911 border: 2px solid #00cc07; // Green on top/sides! 9893*9ccd446eSAtari911} 9894*9ccd446eSAtari911``` 9895*9ccd446eSAtari911 9896*9ccd446eSAtari911**After**: Inline style overrides ALL sides 9897*9ccd446eSAtari911```php 9898*9ccd446eSAtari911style="border:2px solid #ff1493;" // All 4 sides pink! 9899*9ccd446eSAtari911``` 9900*9ccd446eSAtari911 9901*9ccd446eSAtari911**Result**: Clock box now 100% pink border on all four sides! ✓ 9902*9ccd446eSAtari911 9903*9ccd446eSAtari911### What Changed: 9904*9ccd446eSAtari911 9905*9ccd446eSAtari911**Add Event Button**: 9906*9ccd446eSAtari911- Background: #b8156f (dark pink) ✓ 9907*9ccd446eSAtari911- Text: **#000000 (black)** ← NEW! 9908*9ccd446eSAtari911- Text shadow: **none** ← NEW! 9909*9ccd446eSAtari911- Glow: 0 0 10px pink ✓ 9910*9ccd446eSAtari911 9911*9ccd446eSAtari911**Clock Border**: 9912*9ccd446eSAtari911- Top: **#ff1493 (pink)** ← FIXED! 9913*9ccd446eSAtari911- Right: **#ff1493 (pink)** ← FIXED! 9914*9ccd446eSAtari911- Bottom: #ff1493 (pink) ✓ 9915*9ccd446eSAtari911- Left: **#ff1493 (pink)** ← FIXED! 9916*9ccd446eSAtari911 9917*9ccd446eSAtari911**Perfect pink theme - wife approved!** ✨ 9918*9ccd446eSAtari911 9919*9ccd446eSAtari911## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 9920*9ccd446eSAtari911 9921*9ccd446eSAtari911### Pink Theme Complete Makeover 9922*9ccd446eSAtari911- **Fixed:** Clock border now completely pink (was green on sides/top) 9923*9ccd446eSAtari911- **Changed:** Today/Tomorrow/Important sections now different shades of pink 9924*9ccd446eSAtari911- **Changed:** Add Event button now dark pink (was clashing blue) 9925*9ccd446eSAtari911- **Changed:** System status bars now pink gradient (3 shades!) 9926*9ccd446eSAtari911 9927*9ccd446eSAtari911### All-Pink Everything! 9928*9ccd446eSAtari911 9929*9ccd446eSAtari911**Clock Border**: 9930*9ccd446eSAtari911```css 9931*9ccd446eSAtari911/* Before: Green border */ 9932*9ccd446eSAtari911border: 2px solid #00cc07; 9933*9ccd446eSAtari911 9934*9ccd446eSAtari911/* After: Hot pink border */ 9935*9ccd446eSAtari911.sidebar-pink .eventlist-today-header { 9936*9ccd446eSAtari911 border-color: #ff1493; 9937*9ccd446eSAtari911 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9938*9ccd446eSAtari911} 9939*9ccd446eSAtari911``` 9940*9ccd446eSAtari911 9941*9ccd446eSAtari911**Section Colors** (Different Pink Shades): 9942*9ccd446eSAtari911```php 9943*9ccd446eSAtari911// Before: Orange, green, purple 9944*9ccd446eSAtari911'Today' => '#ff9800', 9945*9ccd446eSAtari911'Tomorrow' => '#4caf50', 9946*9ccd446eSAtari911'Important' => '#9b59b6' 9947*9ccd446eSAtari911 9948*9ccd446eSAtari911// After: Hot pink, pink, light pink 9949*9ccd446eSAtari911'Today' => '#ff1493', // Hot pink (DeepPink) 9950*9ccd446eSAtari911'Tomorrow' => '#ff69b4', // Pink (HotPink) 9951*9ccd446eSAtari911'Important' => '#ff85c1' // Light pink 9952*9ccd446eSAtari911``` 9953*9ccd446eSAtari911 9954*9ccd446eSAtari911**Add Event Button**: 9955*9ccd446eSAtari911```php 9956*9ccd446eSAtari911// Before: Clashing blue 9957*9ccd446eSAtari911background: #3498db; 9958*9ccd446eSAtari911 9959*9ccd446eSAtari911// After: Dark pink with glow 9960*9ccd446eSAtari911background: #b8156f; // Dark pink 9961*9ccd446eSAtari911hover: #8b0f54; // Darker pink 9962*9ccd446eSAtari911shadow: 0 0 10px rgba(255, 20, 147, 0.5); 9963*9ccd446eSAtari911``` 9964*9ccd446eSAtari911 9965*9ccd446eSAtari911**System Status Bars** (Pink Gradient): 9966*9ccd446eSAtari911```css 9967*9ccd446eSAtari911/* 5-min load average */ 9968*9ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill { 9969*9ccd446eSAtari911 background: #ff1493; /* Hot pink */ 9970*9ccd446eSAtari911 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 9971*9ccd446eSAtari911} 9972*9ccd446eSAtari911 9973*9ccd446eSAtari911/* Realtime CPU */ 9974*9ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-purple { 9975*9ccd446eSAtari911 background: #ff69b4; /* Pink */ 9976*9ccd446eSAtari911 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 9977*9ccd446eSAtari911} 9978*9ccd446eSAtari911 9979*9ccd446eSAtari911/* Memory */ 9980*9ccd446eSAtari911.sidebar-pink .eventlist-cpu-fill-orange { 9981*9ccd446eSAtari911 background: #ff85c1; /* Light pink */ 9982*9ccd446eSAtari911 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 9983*9ccd446eSAtari911} 9984*9ccd446eSAtari911``` 9985*9ccd446eSAtari911 9986*9ccd446eSAtari911### Pink Theme Visual Hierarchy: 9987*9ccd446eSAtari911 9988*9ccd446eSAtari911**Darkest → Lightest Pink Shades**: 9989*9ccd446eSAtari9111. Add Event button: #b8156f (dark pink) 9990*9ccd446eSAtari9112. Today section: #ff1493 (hot pink / deep pink) 9991*9ccd446eSAtari9113. System bar 1: #ff1493 (hot pink) 9992*9ccd446eSAtari9114. Tomorrow section: #ff69b4 (pink) 9993*9ccd446eSAtari9115. System bar 2: #ff69b4 (pink) 9994*9ccd446eSAtari9116. Important section: #ff85c1 (light pink) 9995*9ccd446eSAtari9117. System bar 3: #ff85c1 (light pink) 9996*9ccd446eSAtari911 9997*9ccd446eSAtari911**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 9998*9ccd446eSAtari911 9999*9ccd446eSAtari911### What's Pink Now: 10000*9ccd446eSAtari911 10001*9ccd446eSAtari911✅ Sidebar background & border 10002*9ccd446eSAtari911✅ **Clock border** ← FIXED! 10003*9ccd446eSAtari911✅ Header gradient 10004*9ccd446eSAtari911✅ Week grid 10005*9ccd446eSAtari911✅ **Add Event button** ← FIXED! 10006*9ccd446eSAtari911✅ **Today section** ← Different shade! 10007*9ccd446eSAtari911✅ **Tomorrow section** ← Different shade! 10008*9ccd446eSAtari911✅ **Important section** ← Different shade! 10009*9ccd446eSAtari911✅ Event text & bars 10010*9ccd446eSAtari911✅ **System status bars** ← All 3 different pink shades! 10011*9ccd446eSAtari911✅ All shadows & glows 10012*9ccd446eSAtari911 10013*9ccd446eSAtari911**EVERYTHING is pink and fabulous!** ✨ 10014*9ccd446eSAtari911 10015*9ccd446eSAtari911## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 10016*9ccd446eSAtari911 10017*9ccd446eSAtari911### ✨ New Theme: Pink Bling! 10018*9ccd446eSAtari911- **Added:** Glamorous hot pink theme with maximum sparkle 10019*9ccd446eSAtari911- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 10020*9ccd446eSAtari911- **Perfect for:** Fabulous calendars that demand attention ✨ 10021*9ccd446eSAtari911 10022*9ccd446eSAtari911### Professional Theme Shadow Fix 10023*9ccd446eSAtari911- **Fixed:** Section headers now have subtle shadow (not glow) 10024*9ccd446eSAtari911- **Fixed:** Clicked day panel header has proper shadow 10025*9ccd446eSAtari911 10026*9ccd446eSAtari911### Pink Bling Theme Colors 10027*9ccd446eSAtari911 10028*9ccd446eSAtari911**Background & Borders**: 10029*9ccd446eSAtari911```php 10030*9ccd446eSAtari911'bg' => '#1a0d14', // Dark rich pink-black 10031*9ccd446eSAtari911'border' => '#ff1493', // Hot pink (DeepPink) 10032*9ccd446eSAtari911'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 10033*9ccd446eSAtari911``` 10034*9ccd446eSAtari911 10035*9ccd446eSAtari911**Text Colors**: 10036*9ccd446eSAtari911```php 10037*9ccd446eSAtari911'text_primary' => '#ff69b4', // Hot pink 10038*9ccd446eSAtari911'text_bright' => '#ff1493', // Deep pink 10039*9ccd446eSAtari911'text_dim' => '#ff85c1', // Light pink 10040*9ccd446eSAtari911``` 10041*9ccd446eSAtari911 10042*9ccd446eSAtari911**Week Grid**: 10043*9ccd446eSAtari911```php 10044*9ccd446eSAtari911'grid_bg' => '#2d1a24', // Dark purple-pink 10045*9ccd446eSAtari911'cell_bg' => '#1a0d14', // Dark 10046*9ccd446eSAtari911'cell_today_bg' => '#3d2030', // Highlighted purple-pink 10047*9ccd446eSAtari911``` 10048*9ccd446eSAtari911 10049*9ccd446eSAtari911**Special Effects**: 10050*9ccd446eSAtari911```php 10051*9ccd446eSAtari911'bar_glow' => '0 0 5px', // Extra sparkly glow! 10052*9ccd446eSAtari911'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 10053*9ccd446eSAtari911``` 10054*9ccd446eSAtari911 10055*9ccd446eSAtari911### Professional Theme Shadow Fix 10056*9ccd446eSAtari911 10057*9ccd446eSAtari911**Before**: Section headers had colored glow 10058*9ccd446eSAtari911```php 10059*9ccd446eSAtari911box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 10060*9ccd446eSAtari911``` 10061*9ccd446eSAtari911 10062*9ccd446eSAtari911**After**: Section headers have subtle shadow 10063*9ccd446eSAtari911```php 10064*9ccd446eSAtari911$headerShadow = ($theme === 'professional') ? 10065*9ccd446eSAtari911 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 10066*9ccd446eSAtari911 '0 0 8px ' . $accentColor; // Glow for others 10067*9ccd446eSAtari911``` 10068*9ccd446eSAtari911 10069*9ccd446eSAtari911**Result**: 10070*9ccd446eSAtari911- **Matrix/Purple/Pink**: Colored glow on headers ✓ 10071*9ccd446eSAtari911- **Professional**: Clean grey shadow (no glow) ✓ 10072*9ccd446eSAtari911 10073*9ccd446eSAtari911### All Four Themes: 10074*9ccd446eSAtari911 10075*9ccd446eSAtari911** Matrix Edition**: 10076*9ccd446eSAtari911- Dark green (#00cc07) 10077*9ccd446eSAtari911- Neon glow effects 10078*9ccd446eSAtari911- Hacker aesthetic 10079*9ccd446eSAtari911 10080*9ccd446eSAtari911** Purple Dream**: 10081*9ccd446eSAtari911- Elegant purple (#9b59b6) 10082*9ccd446eSAtari911- Violet glow effects 10083*9ccd446eSAtari911- Royal aesthetic 10084*9ccd446eSAtari911 10085*9ccd446eSAtari911** Professional Blue**: 10086*9ccd446eSAtari911- Clean grey/blue (#4a90e2) 10087*9ccd446eSAtari911- Subtle shadows (NO glow) 10088*9ccd446eSAtari911- Corporate aesthetic 10089*9ccd446eSAtari911 10090*9ccd446eSAtari911** Pink Bling** (NEW!): 10091*9ccd446eSAtari911- Hot pink (#ff1493) 10092*9ccd446eSAtari911- MAXIMUM sparkle & glow 10093*9ccd446eSAtari911- Glamorous aesthetic ✨ 10094*9ccd446eSAtari911 10095*9ccd446eSAtari911### Technical Implementation 10096*9ccd446eSAtari911 10097*9ccd446eSAtari911**Theme Added To**: 10098*9ccd446eSAtari911- `getSidebarThemeStyles()` - color definitions 10099*9ccd446eSAtari911- `getSidebarTheme()` - validation 10100*9ccd446eSAtari911- `saveSidebarTheme()` - admin save 10101*9ccd446eSAtari911- Admin panel - UI with preview 10102*9ccd446eSAtari911- All shadow/glow calculations 10103*9ccd446eSAtari911- JavaScript theme colors 10104*9ccd446eSAtari911- Clicked day panel colors 10105*9ccd446eSAtari911 10106*9ccd446eSAtari911**Perfect for users who want FABULOUS pink calendars!** ✨ 10107*9ccd446eSAtari911 10108*9ccd446eSAtari911## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 10109*9ccd446eSAtari911 10110*9ccd446eSAtari911### Text Glow Refinement 10111*9ccd446eSAtari911- **Changed:** Reduced text glow from 3px to 2px (less intense) 10112*9ccd446eSAtari911- **Fixed:** Clicked day panel now has same text glow as sections 10113*9ccd446eSAtari911 10114*9ccd446eSAtari911### Text Glow Reduction 10115*9ccd446eSAtari911 10116*9ccd446eSAtari911**Before**: Text glow was too strong (3px) 10117*9ccd446eSAtari911```php 10118*9ccd446eSAtari911// Sections: 10119*9ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright! 10120*9ccd446eSAtari911 10121*9ccd446eSAtari911// Clicked day panel: 10122*9ccd446eSAtari911text-shadow: 0 0 3px #00cc07; // Too bright! 10123*9ccd446eSAtari911``` 10124*9ccd446eSAtari911 10125*9ccd446eSAtari911**After**: Subtler text glow (2px) 10126*9ccd446eSAtari911```php 10127*9ccd446eSAtari911// Sections: 10128*9ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓ 10129*9ccd446eSAtari911 10130*9ccd446eSAtari911// Clicked day panel: 10131*9ccd446eSAtari911text-shadow: 0 0 2px #00cc07; // Just right ✓ 10132*9ccd446eSAtari911``` 10133*9ccd446eSAtari911 10134*9ccd446eSAtari911**Visual Impact**: 10135*9ccd446eSAtari911- **Matrix**: Softer green glow, easier to read 10136*9ccd446eSAtari911- **Purple**: Softer purple glow, more elegant 10137*9ccd446eSAtari911- **Professional**: Still no glow (clean) 10138*9ccd446eSAtari911 10139*9ccd446eSAtari911### Consistency Fix 10140*9ccd446eSAtari911 10141*9ccd446eSAtari911**Before**: Sections had glow, clicked day panel had NO glow 10142*9ccd446eSAtari911 10143*9ccd446eSAtari911**After**: Both sections AND clicked day panel have matching subtle glow 10144*9ccd446eSAtari911 10145*9ccd446eSAtari911**Where Glow Appears**: 10146*9ccd446eSAtari911- ✅ Today section event text 10147*9ccd446eSAtari911- ✅ Tomorrow section event text 10148*9ccd446eSAtari911- ✅ Important section event text 10149*9ccd446eSAtari911- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 10150*9ccd446eSAtari911 10151*9ccd446eSAtari911**Result**: 10152*9ccd446eSAtari911- Glow is less intense and easier on eyes ✓ 10153*9ccd446eSAtari911- All event text has consistent styling ✓ 10154*9ccd446eSAtari911- Matrix/Purple themes more refined ✓ 10155*9ccd446eSAtari911 10156*9ccd446eSAtari911### Technical Details 10157*9ccd446eSAtari911 10158*9ccd446eSAtari911**PHP (Sections)**: 10159*9ccd446eSAtari911```php 10160*9ccd446eSAtari911$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 10161*9ccd446eSAtari911``` 10162*9ccd446eSAtari911 10163*9ccd446eSAtari911**JavaScript (Clicked Day Panel)**: 10164*9ccd446eSAtari911```javascript 10165*9ccd446eSAtari911themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 10166*9ccd446eSAtari911eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 10167*9ccd446eSAtari911``` 10168*9ccd446eSAtari911 10169*9ccd446eSAtari911**Perfect consistency and subtle elegance!** ✨ 10170*9ccd446eSAtari911 10171*9ccd446eSAtari911## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 10172*9ccd446eSAtari911 10173*9ccd446eSAtari911### ✨ Important Events Enhancement 10174*9ccd446eSAtari911- **Changed:** Important events now show from next 2 weeks (not just current week) 10175*9ccd446eSAtari911- **Fixed:** Important events on Sunday after current week now visible 10176*9ccd446eSAtari911- **Changed:** Events loaded 2 weeks into future for Important section 10177*9ccd446eSAtari911 10178*9ccd446eSAtari911### Background Cleanup 10179*9ccd446eSAtari911- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 10180*9ccd446eSAtari911- **Removed:** Grey backgrounds from individual events 10181*9ccd446eSAtari911- **Result:** Clean transparent backgrounds, original dark Matrix look restored 10182*9ccd446eSAtari911 10183*9ccd446eSAtari911### Important Events - Future Coverage 10184*9ccd446eSAtari911 10185*9ccd446eSAtari911**Before**: Only showed Important events from current week 10186*9ccd446eSAtari911```php 10187*9ccd446eSAtari911if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10188*9ccd446eSAtari911 $importantEvents[] = $event; 10189*9ccd446eSAtari911} 10190*9ccd446eSAtari911``` 10191*9ccd446eSAtari911 10192*9ccd446eSAtari911**After**: Shows Important events from today through next 2 weeks 10193*9ccd446eSAtari911```php 10194*9ccd446eSAtari911// Load events 2 weeks out 10195*9ccd446eSAtari911$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 10196*9ccd446eSAtari911 10197*9ccd446eSAtari911// Show all important events from today forward 10198*9ccd446eSAtari911if ($isImportant && $dateKey >= $todayStr) { 10199*9ccd446eSAtari911 $importantEvents[] = $event; 10200*9ccd446eSAtari911} 10201*9ccd446eSAtari911``` 10202*9ccd446eSAtari911 10203*9ccd446eSAtari911**Example**: 10204*9ccd446eSAtari911- Today: Saturday Feb 7 10205*9ccd446eSAtari911- Current week: Sun Feb 1 → Sat Feb 7 10206*9ccd446eSAtari911- Important events shown: Feb 7 → Feb 21 (today + 14 days) 10207*9ccd446eSAtari911 10208*9ccd446eSAtari911**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 10209*9ccd446eSAtari911 10210*9ccd446eSAtari911### Background Removal 10211*9ccd446eSAtari911 10212*9ccd446eSAtari911**Before**: Light grey/white backgrounds added 10213*9ccd446eSAtari911```php 10214*9ccd446eSAtari911// Section background: 10215*9ccd446eSAtari911$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 10216*9ccd446eSAtari911 10217*9ccd446eSAtari911// Event background: 10218*9ccd446eSAtari911$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 10219*9ccd446eSAtari911``` 10220*9ccd446eSAtari911 10221*9ccd446eSAtari911**After**: No backgrounds (transparent) 10222*9ccd446eSAtari911```php 10223*9ccd446eSAtari911// Section: No background property 10224*9ccd446eSAtari911<div style="padding:4px 0;"> 10225*9ccd446eSAtari911 10226*9ccd446eSAtari911// Event: No background property 10227*9ccd446eSAtari911<div style="padding:4px 6px; ..."> 10228*9ccd446eSAtari911``` 10229*9ccd446eSAtari911 10230*9ccd446eSAtari911**Result**: 10231*9ccd446eSAtari911- Clean, dark Matrix aesthetic restored ✓ 10232*9ccd446eSAtari911- Purple theme darker and more elegant ✓ 10233*9ccd446eSAtari911- Professional theme still has its light grey sidebar bg ✓ 10234*9ccd446eSAtari911- Events stand out with just color bars and borders ✓ 10235*9ccd446eSAtari911 10236*9ccd446eSAtari911### What Changed: 10237*9ccd446eSAtari911 10238*9ccd446eSAtari911**Sections (Today/Tomorrow/Important)**: 10239*9ccd446eSAtari911- ❌ No more grey overlay 10240*9ccd446eSAtari911- ✓ Transparent background 10241*9ccd446eSAtari911- ✓ Colored borders & glows remain 10242*9ccd446eSAtari911 10243*9ccd446eSAtari911**Individual Events**: 10244*9ccd446eSAtari911- ❌ No more grey overlay 10245*9ccd446eSAtari911- ✓ Transparent background 10246*9ccd446eSAtari911- ✓ Colored bars & borders remain 10247*9ccd446eSAtari911 10248*9ccd446eSAtari911**Perfect! Back to the original clean dark look with future Important events!** 10249*9ccd446eSAtari911 10250*9ccd446eSAtari911## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 10251*9ccd446eSAtari911 10252*9ccd446eSAtari911### Final Theme Polish 10253*9ccd446eSAtari911- **Fixed:** Today/Tomorrow/Important section shadows now match theme 10254*9ccd446eSAtari911- **Fixed:** Event description text color now uses theme dim color 10255*9ccd446eSAtari911 10256*9ccd446eSAtari911### Section Shadow Fix 10257*9ccd446eSAtari911 10258*9ccd446eSAtari911**Problem**: Sections always had green glow regardless of theme 10259*9ccd446eSAtari911 10260*9ccd446eSAtari911**Before**: 10261*9ccd446eSAtari911```php 10262*9ccd446eSAtari911// Hardcoded green: 10263*9ccd446eSAtari911box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 10264*9ccd446eSAtari911``` 10265*9ccd446eSAtari911 10266*9ccd446eSAtari911**After**: 10267*9ccd446eSAtari911```php 10268*9ccd446eSAtari911// Theme-aware: 10269*9ccd446eSAtari911$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 10270*9ccd446eSAtari911 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 10271*9ccd446eSAtari911 '0 2px 4px rgba(0, 0, 0, 0.1)'); 10272*9ccd446eSAtari911``` 10273*9ccd446eSAtari911 10274*9ccd446eSAtari911**Result**: 10275*9ccd446eSAtari911- **Matrix**: Green glow around sections ✓ 10276*9ccd446eSAtari911- **Purple**: Purple glow around sections ✓ 10277*9ccd446eSAtari911- **Professional**: Subtle grey shadow (no glow) ✓ 10278*9ccd446eSAtari911 10279*9ccd446eSAtari911### Description Color Fix 10280*9ccd446eSAtari911 10281*9ccd446eSAtari911**Problem**: Description text always green in clicked day panel 10282*9ccd446eSAtari911 10283*9ccd446eSAtari911**Before**: 10284*9ccd446eSAtari911```javascript 10285*9ccd446eSAtari911color: #00aa00; // Always green 10286*9ccd446eSAtari911``` 10287*9ccd446eSAtari911 10288*9ccd446eSAtari911**After**: 10289*9ccd446eSAtari911```javascript 10290*9ccd446eSAtari911color: themeColors.text_dim; // Theme dim color 10291*9ccd446eSAtari911``` 10292*9ccd446eSAtari911 10293*9ccd446eSAtari911**Result**: 10294*9ccd446eSAtari911- **Matrix**: Dim green (#00aa00) ✓ 10295*9ccd446eSAtari911- **Purple**: Dim purple (#8e7ab8) ✓ 10296*9ccd446eSAtari911- **Professional**: Grey (#7f8c8d) ✓ 10297*9ccd446eSAtari911 10298*9ccd446eSAtari911### Now 100% Theme Consistent 10299*9ccd446eSAtari911 10300*9ccd446eSAtari911Every single visual element respects theme: 10301*9ccd446eSAtari911- ✅ Sidebar background & border 10302*9ccd446eSAtari911- ✅ Header colors & shadows 10303*9ccd446eSAtari911- ✅ Week grid & cells 10304*9ccd446eSAtari911- ✅ Add Event button 10305*9ccd446eSAtari911- ✅ Section borders & **shadows** ← Fixed! 10306*9ccd446eSAtari911- ✅ Event titles & times 10307*9ccd446eSAtari911- ✅ Event **descriptions** ← Fixed! 10308*9ccd446eSAtari911- ✅ Clicked day panel 10309*9ccd446eSAtari911- ✅ Event bars & glows 10310*9ccd446eSAtari911 10311*9ccd446eSAtari911**Absolute perfection across all three themes!** ✨ 10312*9ccd446eSAtari911 10313*9ccd446eSAtari911## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 10314*9ccd446eSAtari911 10315*9ccd446eSAtari911### Theme Improvements 10316*9ccd446eSAtari911- **Fixed:** Clicked day panel now uses correct theme colors 10317*9ccd446eSAtari911- **Changed:** Professional Blue background now light grey (not white) 10318*9ccd446eSAtari911- **Added:** Theme colors passed to JavaScript for dynamic rendering 10319*9ccd446eSAtari911 10320*9ccd446eSAtari911### Clicked Day Panel Theming 10321*9ccd446eSAtari911 10322*9ccd446eSAtari911**Before**: Always blue regardless of theme 10323*9ccd446eSAtari911```javascript 10324*9ccd446eSAtari911// Hardcoded blue: 10325*9ccd446eSAtari911color:#00cc07; // Always green 10326*9ccd446eSAtari911background:#3498db; // Always blue 10327*9ccd446eSAtari911``` 10328*9ccd446eSAtari911 10329*9ccd446eSAtari911**After**: Theme-aware colors 10330*9ccd446eSAtari911```php 10331*9ccd446eSAtari911// PHP passes theme to JavaScript: 10332*9ccd446eSAtari911window.themeColors_XXX = { 10333*9ccd446eSAtari911 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 10334*9ccd446eSAtari911 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 10335*9ccd446eSAtari911 text_shadow: '0 0 3px ...' or '', 10336*9ccd446eSAtari911 event_bg: 'rgba(...)', 10337*9ccd446eSAtari911 border_color: 'rgba(...)', 10338*9ccd446eSAtari911 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 10339*9ccd446eSAtari911}; 10340*9ccd446eSAtari911 10341*9ccd446eSAtari911// JavaScript uses theme colors: 10342*9ccd446eSAtari911color: themeColors.text_primary; 10343*9ccd446eSAtari911background: themeColors.event_bg; 10344*9ccd446eSAtari911``` 10345*9ccd446eSAtari911 10346*9ccd446eSAtari911**Result**: 10347*9ccd446eSAtari911- Matrix: Green panel with green glow ✓ 10348*9ccd446eSAtari911- Purple: Purple panel with purple glow ✓ 10349*9ccd446eSAtari911- Professional: Blue panel, no glow, clean ✓ 10350*9ccd446eSAtari911 10351*9ccd446eSAtari911### Professional Theme Background Change 10352*9ccd446eSAtari911 10353*9ccd446eSAtari911**Before**: Almost white (#f5f7fa, #ffffff) 10354*9ccd446eSAtari911```php 10355*9ccd446eSAtari911'bg' => '#f5f7fa', // Very light 10356*9ccd446eSAtari911'cell_bg' => '#ffffff', // Pure white 10357*9ccd446eSAtari911``` 10358*9ccd446eSAtari911 10359*9ccd446eSAtari911**After**: Light grey tones 10360*9ccd446eSAtari911```php 10361*9ccd446eSAtari911'bg' => '#e8ecf1', // Soft grey-blue 10362*9ccd446eSAtari911'cell_bg' => '#f5f7fa', // Light grey 10363*9ccd446eSAtari911'grid_bg' => '#d5dbe3', // Medium grey 10364*9ccd446eSAtari911'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 10365*9ccd446eSAtari911``` 10366*9ccd446eSAtari911 10367*9ccd446eSAtari911**Visual Impact**: 10368*9ccd446eSAtari911- Sidebar: Light grey-blue background (#e8ecf1) 10369*9ccd446eSAtari911- Week cells: Lighter grey (#f5f7fa) 10370*9ccd446eSAtari911- Today cell: Highlighted blue-grey (#dce8f7) 10371*9ccd446eSAtari911- More depth and contrast ✓ 10372*9ccd446eSAtari911- Professional appearance ✓ 10373*9ccd446eSAtari911 10374*9ccd446eSAtari911### All Theme Elements Now Consistent 10375*9ccd446eSAtari911 10376*9ccd446eSAtari911**Matrix (Green)**: 10377*9ccd446eSAtari911- Sidebar: Dark (#242424) 10378*9ccd446eSAtari911- Clicked panel: Dark with green 10379*9ccd446eSAtari911- Text: Green with glow 10380*9ccd446eSAtari911 10381*9ccd446eSAtari911**Purple Dream**: 10382*9ccd446eSAtari911- Sidebar: Dark purple (#2a2030) 10383*9ccd446eSAtari911- Clicked panel: Dark with purple 10384*9ccd446eSAtari911- Text: Purple with glow 10385*9ccd446eSAtari911 10386*9ccd446eSAtari911**Professional Blue**: 10387*9ccd446eSAtari911- Sidebar: Light grey (#e8ecf1) 10388*9ccd446eSAtari911- Clicked panel: Light with blue 10389*9ccd446eSAtari911- Text: Dark grey, no glow 10390*9ccd446eSAtari911 10391*9ccd446eSAtari911**Perfect theme consistency everywhere!** 10392*9ccd446eSAtari911 10393*9ccd446eSAtari911## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 10394*9ccd446eSAtari911 10395*9ccd446eSAtari911### Critical Fixes 10396*9ccd446eSAtari911- **Fixed:** Tomorrow events not loaded when outside current week 10397*9ccd446eSAtari911- **Fixed:** `&` showing instead of `&` (double HTML encoding) 10398*9ccd446eSAtari911 10399*9ccd446eSAtari911### Issue 1: Tomorrow Not Loading 10400*9ccd446eSAtari911 10401*9ccd446eSAtari911**Problem**: Sidebar only loaded events for current week 10402*9ccd446eSAtari911- Today (Saturday): Week ends today 10403*9ccd446eSAtari911- Tomorrow (Sunday): Start of NEXT week 10404*9ccd446eSAtari911- Tomorrow events never loaded from data files! 10405*9ccd446eSAtari911 10406*9ccd446eSAtari911**Before**: 10407*9ccd446eSAtari911```php 10408*9ccd446eSAtari911// Only load current week 10409*9ccd446eSAtari911$end = new DateTime($weekEnd); 10410*9ccd446eSAtari911$end->modify('+1 day'); 10411*9ccd446eSAtari911$period = new DatePeriod($start, $interval, $end); 10412*9ccd446eSAtari911// If tomorrow > weekEnd, it's not in period! 10413*9ccd446eSAtari911``` 10414*9ccd446eSAtari911 10415*9ccd446eSAtari911**After**: 10416*9ccd446eSAtari911```php 10417*9ccd446eSAtari911// Check if tomorrow is outside week 10418*9ccd446eSAtari911$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 10419*9ccd446eSAtari911if ($tomorrowDate > $weekEnd) { 10420*9ccd446eSAtari911 // Extend to include tomorrow 10421*9ccd446eSAtari911 $end = new DateTime($tomorrowDate); 10422*9ccd446eSAtari911} 10423*9ccd446eSAtari911$end->modify('+1 day'); 10424*9ccd446eSAtari911$period = new DatePeriod($start, $interval, $end); 10425*9ccd446eSAtari911``` 10426*9ccd446eSAtari911 10427*9ccd446eSAtari911**Result**: Tomorrow events now loaded even at week boundary! ✓ 10428*9ccd446eSAtari911 10429*9ccd446eSAtari911### Issue 2: Double HTML Encoding 10430*9ccd446eSAtari911 10431*9ccd446eSAtari911**Problem**: `&` characters showing as `&` 10432*9ccd446eSAtari911 10433*9ccd446eSAtari911**Cause**: Double encoding on line 2625 and 2681 10434*9ccd446eSAtari911```php 10435*9ccd446eSAtari911// Line 2625: 10436*9ccd446eSAtari911$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 10437*9ccd446eSAtari911 10438*9ccd446eSAtari911// Line 2681: 10439*9ccd446eSAtari911$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 10440*9ccd446eSAtari911``` 10441*9ccd446eSAtari911 10442*9ccd446eSAtari911**Fixed**: 10443*9ccd446eSAtari911```php 10444*9ccd446eSAtari911// Line 2625: 10445*9ccd446eSAtari911$title = htmlspecialchars($event['title']); // Encode once 10446*9ccd446eSAtari911 10447*9ccd446eSAtari911// Line 2681: 10448*9ccd446eSAtari911$html .= $title; // Use already-encoded value ✓ 10449*9ccd446eSAtari911``` 10450*9ccd446eSAtari911 10451*9ccd446eSAtari911**Result**: `&` displays correctly! ✓ 10452*9ccd446eSAtari911 10453*9ccd446eSAtari911### Both Fixes Critical 10454*9ccd446eSAtari911 10455*9ccd446eSAtari911These were **two separate bugs**: 10456*9ccd446eSAtari9111. **Loading bug**: Tomorrow events not read from files 10457*9ccd446eSAtari9112. **Display bug**: Double-encoding text 10458*9ccd446eSAtari911 10459*9ccd446eSAtari911Both needed fixing for Tomorrow section to work properly! 10460*9ccd446eSAtari911 10461*9ccd446eSAtari911## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 10462*9ccd446eSAtari911 10463*9ccd446eSAtari911### Critical Fix 10464*9ccd446eSAtari911- **Fixed:** Tomorrow section missing when tomorrow is outside current week 10465*9ccd446eSAtari911- **Fixed:** Today section now always shows regardless of week boundaries 10466*9ccd446eSAtari911- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 10467*9ccd446eSAtari911 10468*9ccd446eSAtari911### The Problem 10469*9ccd446eSAtari911 10470*9ccd446eSAtari911**Scenario**: Today is Saturday (last day of week) 10471*9ccd446eSAtari911- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 10472*9ccd446eSAtari911- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 10473*9ccd446eSAtari911 10474*9ccd446eSAtari911**BROKEN Logic** (v4.2.2): 10475*9ccd446eSAtari911```php 10476*9ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) { 10477*9ccd446eSAtari911 if ($dateKey < $weekStart) continue; // Skip old events 10478*9ccd446eSAtari911 10479*9ccd446eSAtari911 // ...week processing... 10480*9ccd446eSAtari911 10481*9ccd446eSAtari911 if ($dateKey === $tomorrowStr) { // ← Never reached! 10482*9ccd446eSAtari911 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 10483*9ccd446eSAtari911 } 10484*9ccd446eSAtari911} 10485*9ccd446eSAtari911``` 10486*9ccd446eSAtari911 10487*9ccd446eSAtari911**Result**: Tomorrow events never added because loop skipped them! ❌ 10488*9ccd446eSAtari911 10489*9ccd446eSAtari911### The Fix 10490*9ccd446eSAtari911 10491*9ccd446eSAtari911**Process Today/Tomorrow FIRST**: 10492*9ccd446eSAtari911```php 10493*9ccd446eSAtari911foreach ($events as $dateKey => $dayEvents) { 10494*9ccd446eSAtari911 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 10495*9ccd446eSAtari911 10496*9ccd446eSAtari911 foreach ($eventsWithConflicts as $event) { 10497*9ccd446eSAtari911 // ALWAYS process Today and Tomorrow first! 10498*9ccd446eSAtari911 if ($dateKey === $todayStr) { 10499*9ccd446eSAtari911 $todayEvents[] = $event; // ✓ Always shows 10500*9ccd446eSAtari911 } 10501*9ccd446eSAtari911 if ($dateKey === $tomorrowStr) { 10502*9ccd446eSAtari911 $tomorrowEvents[] = $event; // ✓ Always shows 10503*9ccd446eSAtari911 } 10504*9ccd446eSAtari911 10505*9ccd446eSAtari911 // THEN check week boundaries for grid 10506*9ccd446eSAtari911 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 10507*9ccd446eSAtari911 $weekEvents[$dateKey][] = $event; 10508*9ccd446eSAtari911 } 10509*9ccd446eSAtari911 10510*9ccd446eSAtari911 // Important events still week-only 10511*9ccd446eSAtari911 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10512*9ccd446eSAtari911 $importantEvents[] = $event; 10513*9ccd446eSAtari911 } 10514*9ccd446eSAtari911 } 10515*9ccd446eSAtari911} 10516*9ccd446eSAtari911``` 10517*9ccd446eSAtari911 10518*9ccd446eSAtari911### What Changed 10519*9ccd446eSAtari911 10520*9ccd446eSAtari911**Before**: 10521*9ccd446eSAtari9111. Skip events < weekStart ❌ 10522*9ccd446eSAtari9112. Process week grid 10523*9ccd446eSAtari9113. Try to add Today/Tomorrow ← **Failed if outside week** 10524*9ccd446eSAtari9114. Add Important events 10525*9ccd446eSAtari911 10526*9ccd446eSAtari911**After**: 10527*9ccd446eSAtari9111. **Always add Today events** ✓ 10528*9ccd446eSAtari9112. **Always add Tomorrow events** ✓ 10529*9ccd446eSAtari9113. Add to week grid if in range 10530*9ccd446eSAtari9114. Add Important events if in range 10531*9ccd446eSAtari911 10532*9ccd446eSAtari911**Result**: 10533*9ccd446eSAtari911- Today section: ✓ Always shows 10534*9ccd446eSAtari911- Tomorrow section: ✓ Always shows (even at week boundary!) 10535*9ccd446eSAtari911- Week grid: ✓ Only current week 10536*9ccd446eSAtari911- Important: ✓ Only current week 10537*9ccd446eSAtari911 10538*9ccd446eSAtari911### Edge Cases Fixed 10539*9ccd446eSAtari911 10540*9ccd446eSAtari911**Saturday → Sunday transition**: 10541*9ccd446eSAtari911- Today (Sat): Shows in Today section ✓ 10542*9ccd446eSAtari911- Tomorrow (Sun): Shows in Tomorrow section ✓ 10543*9ccd446eSAtari911- Week grid: Only shows Sat (today) ✓ 10544*9ccd446eSAtari911 10545*9ccd446eSAtari911**Sunday → Monday transition**: 10546*9ccd446eSAtari911- Today (Sun): Shows in Today section ✓ 10547*9ccd446eSAtari911- Tomorrow (Mon): Shows in Tomorrow section ✓ 10548*9ccd446eSAtari911- Week grid: Shows both Sun and Mon ✓ 10549*9ccd446eSAtari911 10550*9ccd446eSAtari911**Perfect! Tomorrow section now always works!** 10551*9ccd446eSAtari911 10552*9ccd446eSAtari911## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 10553*9ccd446eSAtari911 10554*9ccd446eSAtari911### Corrected Week Options 10555*9ccd446eSAtari911- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 10556*9ccd446eSAtari911- **Changed:** Default is **Sunday** (US/Canada standard) 10557*9ccd446eSAtari911- **Fixed:** Day names array for Sunday start: S M T W T F S 10558*9ccd446eSAtari911 10559*9ccd446eSAtari911### Correct Week Start Options 10560*9ccd446eSAtari911 10561*9ccd446eSAtari911**Sunday Start** (Default): 10562*9ccd446eSAtari911- Grid shows: **S M T W T F S** 10563*9ccd446eSAtari911- Week: Sunday → Saturday 10564*9ccd446eSAtari911- US/Canada standard 10565*9ccd446eSAtari911- Most common worldwide 10566*9ccd446eSAtari911 10567*9ccd446eSAtari911**Monday Start**: 10568*9ccd446eSAtari911- Grid shows: **M T W T F S S** 10569*9ccd446eSAtari911- Week: Monday → Sunday 10570*9ccd446eSAtari911- ISO 8601 standard 10571*9ccd446eSAtari911- Common in Europe 10572*9ccd446eSAtari911 10573*9ccd446eSAtari911### Technical Changes 10574*9ccd446eSAtari911 10575*9ccd446eSAtari911**All References Updated**: 10576*9ccd446eSAtari911```php 10577*9ccd446eSAtari911// Changed from 'saturday' to 'sunday' in: 10578*9ccd446eSAtari911- Admin validation 10579*9ccd446eSAtari911- Week calculation logic 10580*9ccd446eSAtari911- Day names array 10581*9ccd446eSAtari911- Default value 10582*9ccd446eSAtari911- Comments 10583*9ccd446eSAtari911``` 10584*9ccd446eSAtari911 10585*9ccd446eSAtari911**Sunday Calculation** (when today is Saturday): 10586*9ccd446eSAtari911```php 10587*9ccd446eSAtari911$today = date('w'); // 0=Sun, 6=Sat 10588*9ccd446eSAtari911if ($today == 0) { 10589*9ccd446eSAtari911 $weekStart = date('Y-m-d'); // Today! 10590*9ccd446eSAtari911} else { 10591*9ccd446eSAtari911 // Go back $today days to last Sunday 10592*9ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 10593*9ccd446eSAtari911} 10594*9ccd446eSAtari911``` 10595*9ccd446eSAtari911 10596*9ccd446eSAtari911**Examples**: 10597*9ccd446eSAtari911- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 10598*9ccd446eSAtari911- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 10599*9ccd446eSAtari911 10600*9ccd446eSAtari911**Sorry for the confusion - it's Sunday not Saturday!** 10601*9ccd446eSAtari911 10602*9ccd446eSAtari911## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 10603*9ccd446eSAtari911 10604*9ccd446eSAtari911### Critical Fix 10605*9ccd446eSAtari911- **Fixed:** Week calculation broken when today is Saturday 10606*9ccd446eSAtari911- **Fixed:** Events not showing in Today/Important sections 10607*9ccd446eSAtari911- **Fixed:** Week grid event bars missing 10608*9ccd446eSAtari911- **Changed:** Default week start is Saturday (matches main calendar) 10609*9ccd446eSAtari911 10610*9ccd446eSAtari911### Technical Details 10611*9ccd446eSAtari911 10612*9ccd446eSAtari911**The Bug**: 10613*9ccd446eSAtari911```php 10614*9ccd446eSAtari911// BROKEN (v4.2.0): 10615*9ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('saturday this week')); 10616*9ccd446eSAtari911// When TODAY is Saturday, this is ambiguous and fails! 10617*9ccd446eSAtari911 10618*9ccd446eSAtari911// FIXED (v4.2.1): 10619*9ccd446eSAtari911$today = date('w'); // 0 (Sun) to 6 (Sat) 10620*9ccd446eSAtari911if ($today == 6) { 10621*9ccd446eSAtari911 $weekStart = date('Y-m-d'); // Today! 10622*9ccd446eSAtari911} else { 10623*9ccd446eSAtari911 $daysBack = ($today == 0) ? 1 : ($today + 1); 10624*9ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 10625*9ccd446eSAtari911} 10626*9ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 10627*9ccd446eSAtari911``` 10628*9ccd446eSAtari911 10629*9ccd446eSAtari911**Why It Failed**: 10630*9ccd446eSAtari911- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 10631*9ccd446eSAtari911- PHP may interpret it as "next Saturday" or fail 10632*9ccd446eSAtari911- Result: Week range was wrong, events filtered out 10633*9ccd446eSAtari911 10634*9ccd446eSAtari911**The Fix**: 10635*9ccd446eSAtari911- Explicit calculation using day-of-week math 10636*9ccd446eSAtari911- Saturday (day 6): weekStart = today 10637*9ccd446eSAtari911- Sunday (day 0): weekStart = yesterday 10638*9ccd446eSAtari911- Monday-Friday: calculate days back to last Saturday 10639*9ccd446eSAtari911 10640*9ccd446eSAtari911**Result**: Works reliably every day of the week! 10641*9ccd446eSAtari911 10642*9ccd446eSAtari911**Default Changed**: Saturday start (was Monday in 4.2.0) 10643*9ccd446eSAtari911- Matches main calendar behavior 10644*9ccd446eSAtari911- Users can still switch to Monday in settings 10645*9ccd446eSAtari911 10646*9ccd446eSAtari911## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 10647*9ccd446eSAtari911 10648*9ccd446eSAtari911### ✨ New Feature 10649*9ccd446eSAtari911- **Added:** Week start day selector in Themes tab 10650*9ccd446eSAtari911- **Added:** Choose between Monday (ISO standard) or Saturday week start 10651*9ccd446eSAtari911- **Added:** Week grid and all events now respect the selected start day 10652*9ccd446eSAtari911- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 10653*9ccd446eSAtari911 10654*9ccd446eSAtari911### Week Start Options 10655*9ccd446eSAtari911 10656*9ccd446eSAtari911**Monday Start** (Default): 10657*9ccd446eSAtari911- Grid shows: M T W T F S S 10658*9ccd446eSAtari911- Week runs: Monday → Sunday 10659*9ccd446eSAtari911- ISO 8601 standard 10660*9ccd446eSAtari911- Common in Europe, most of world 10661*9ccd446eSAtari911 10662*9ccd446eSAtari911**Saturday Start**: 10663*9ccd446eSAtari911- Grid shows: S S M T W T F 10664*9ccd446eSAtari911- Week runs: Saturday → Friday 10665*9ccd446eSAtari911- Common in Middle East 10666*9ccd446eSAtari911- Sabbath-observant communities 10667*9ccd446eSAtari911 10668*9ccd446eSAtari911### Technical Details 10669*9ccd446eSAtari911 10670*9ccd446eSAtari911**Configuration**: 10671*9ccd446eSAtari911```php 10672*9ccd446eSAtari911// Saved in: data/meta/calendar_week_start.txt 10673*9ccd446eSAtari911// Values: 'monday' or 'saturday' 10674*9ccd446eSAtari911 10675*9ccd446eSAtari911// Week calculation: 10676*9ccd446eSAtari911if ($weekStartDay === 'saturday') { 10677*9ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('saturday this week')); 10678*9ccd446eSAtari911 $weekEnd = date('Y-m-d', strtotime('friday next week')); 10679*9ccd446eSAtari911} else { 10680*9ccd446eSAtari911 $weekStart = date('Y-m-d', strtotime('monday this week')); 10681*9ccd446eSAtari911 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 10682*9ccd446eSAtari911} 10683*9ccd446eSAtari911``` 10684*9ccd446eSAtari911 10685*9ccd446eSAtari911**Day Names Array**: 10686*9ccd446eSAtari911```php 10687*9ccd446eSAtari911// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 10688*9ccd446eSAtari911// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 10689*9ccd446eSAtari911``` 10690*9ccd446eSAtari911 10691*9ccd446eSAtari911**What Changes**: 10692*9ccd446eSAtari911- Week grid day letters 10693*9ccd446eSAtari911- Week grid date sequence 10694*9ccd446eSAtari911- Today/Tomorrow/Important event date ranges 10695*9ccd446eSAtari911- Week event grouping 10696*9ccd446eSAtari911 10697*9ccd446eSAtari911**What Stays Same**: 10698*9ccd446eSAtari911- All themes still work 10699*9ccd446eSAtari911- Event data unchanged 10700*9ccd446eSAtari911- Main calendar unaffected 10701*9ccd446eSAtari911 10702*9ccd446eSAtari911### How to Change: 10703*9ccd446eSAtari911 10704*9ccd446eSAtari9111. Admin → Calendar → Themes tab 10705*9ccd446eSAtari9112. Under "Week Start Day" section 10706*9ccd446eSAtari9113. Select Monday or Saturday 10707*9ccd446eSAtari9114. Click "Save Settings" 10708*9ccd446eSAtari9115. Refresh sidebar to see changes 10709*9ccd446eSAtari911 10710*9ccd446eSAtari911**Perfect for international users or religious observances!** 10711*9ccd446eSAtari911 10712*9ccd446eSAtari911## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 10713*9ccd446eSAtari911 10714*9ccd446eSAtari911### ️ Calendar Improvements 10715*9ccd446eSAtari911- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 10716*9ccd446eSAtari911- **Changed:** Event section backgrounds much lighter (almost white) 10717*9ccd446eSAtari911- **Changed:** Individual event backgrounds lighter and more readable 10718*9ccd446eSAtari911- **Changed:** Event borders now theme-colored 10719*9ccd446eSAtari911 10720*9ccd446eSAtari911### Technical Details 10721*9ccd446eSAtari911 10722*9ccd446eSAtari911**Week Start Change**: 10723*9ccd446eSAtari911```php 10724*9ccd446eSAtari911// Before: 10725*9ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('monday this week')); 10726*9ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('sunday this week')); 10727*9ccd446eSAtari911$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 10728*9ccd446eSAtari911 10729*9ccd446eSAtari911// After: 10730*9ccd446eSAtari911$weekStart = date('Y-m-d', strtotime('sunday this week')); 10731*9ccd446eSAtari911$weekEnd = date('Y-m-d', strtotime('saturday this week')); 10732*9ccd446eSAtari911$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 10733*9ccd446eSAtari911``` 10734*9ccd446eSAtari911 10735*9ccd446eSAtari911**Background Colors**: 10736*9ccd446eSAtari911```php 10737*9ccd446eSAtari911// Section backgrounds (Today, Tomorrow, Important): 10738*9ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 10739*9ccd446eSAtari911Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 10740*9ccd446eSAtari911Professional: rgba(255, 255, 255, 0.95) // Almost white! 10741*9ccd446eSAtari911 10742*9ccd446eSAtari911// Individual event backgrounds: 10743*9ccd446eSAtari911Matrix: rgba(255, 255, 255, 0.03) // Subtle 10744*9ccd446eSAtari911Purple: rgba(255, 255, 255, 0.05) // Light 10745*9ccd446eSAtari911Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 10746*9ccd446eSAtari911``` 10747*9ccd446eSAtari911 10748*9ccd446eSAtari911**Event Borders**: 10749*9ccd446eSAtari911```php 10750*9ccd446eSAtari911Matrix: rgba(0, 204, 7, 0.2) // Green 10751*9ccd446eSAtari911Purple: rgba(155, 89, 182, 0.2) // Purple 10752*9ccd446eSAtari911Professional: rgba(74, 144, 226, 0.2) // Blue 10753*9ccd446eSAtari911``` 10754*9ccd446eSAtari911 10755*9ccd446eSAtari911### Visual Result: 10756*9ccd446eSAtari911 10757*9ccd446eSAtari911**Before**: Dark backgrounds made text hard to read 10758*9ccd446eSAtari911**After**: Light backgrounds make events pop and text very readable 10759*9ccd446eSAtari911 10760*9ccd446eSAtari911**Week Grid**: 10761*9ccd446eSAtari911``` 10762*9ccd446eSAtari911Before: [M][T][W][T][F][S][S] 10763*9ccd446eSAtari911After: [S][M][T][W][T][F][S] ← Now matches main calendar! 10764*9ccd446eSAtari911``` 10765*9ccd446eSAtari911 10766*9ccd446eSAtari911## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 10767*9ccd446eSAtari911 10768*9ccd446eSAtari911### Final Theme Polish 10769*9ccd446eSAtari911- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 10770*9ccd446eSAtari911- **Fixed:** Event times now use theme bright color 10771*9ccd446eSAtari911- **Fixed:** Event dates use theme dim color 10772*9ccd446eSAtari911- **Fixed:** Task checkboxes use theme bright color 10773*9ccd446eSAtari911- **Fixed:** Event color bars use theme-appropriate shadows 10774*9ccd446eSAtari911- **Fixed:** No text shadows on Professional theme 10775*9ccd446eSAtari911 10776*9ccd446eSAtari911### Technical Details 10777*9ccd446eSAtari911 10778*9ccd446eSAtari911**Event Text Colors**: 10779*9ccd446eSAtari911```php 10780*9ccd446eSAtari911// Matrix: 10781*9ccd446eSAtari911- Title: #00cc07 (green) 10782*9ccd446eSAtari911- Time: #00dd00 (bright green) 10783*9ccd446eSAtari911- Date: #00aa00 (dim green) 10784*9ccd446eSAtari911- Text shadow: 0 0 3px (glow) 10785*9ccd446eSAtari911 10786*9ccd446eSAtari911// Purple: 10787*9ccd446eSAtari911- Title: #b19cd9 (lavender) 10788*9ccd446eSAtari911- Time: #d4a5ff (bright purple) 10789*9ccd446eSAtari911- Date: #8e7ab8 (dim purple) 10790*9ccd446eSAtari911- Text shadow: 0 0 3px (glow) 10791*9ccd446eSAtari911 10792*9ccd446eSAtari911// Professional: 10793*9ccd446eSAtari911- Title: #2c3e50 (dark grey) 10794*9ccd446eSAtari911- Time: #4a90e2 (blue) 10795*9ccd446eSAtari911- Date: #7f8c8d (grey) 10796*9ccd446eSAtari911- Text shadow: none (clean) 10797*9ccd446eSAtari911``` 10798*9ccd446eSAtari911 10799*9ccd446eSAtari911**Color Bar Shadows**: 10800*9ccd446eSAtari911```php 10801*9ccd446eSAtari911// Matrix & Purple: Glow effect 10802*9ccd446eSAtari911box-shadow: 0 0 3px [event-color]; 10803*9ccd446eSAtari911 10804*9ccd446eSAtari911// Professional: Subtle shadow 10805*9ccd446eSAtari911box-shadow: 0 1px 2px rgba(0,0,0,0.2); 10806*9ccd446eSAtari911``` 10807*9ccd446eSAtari911 10808*9ccd446eSAtari911### What's Now Fully Themed: 10809*9ccd446eSAtari911 10810*9ccd446eSAtari911✅ Sidebar background & border 10811*9ccd446eSAtari911✅ Header (clock box) background, border, text 10812*9ccd446eSAtari911✅ Week grid background, borders, cells 10813*9ccd446eSAtari911✅ Week grid day letters & numbers 10814*9ccd446eSAtari911✅ Week grid event bars & "+N more" text 10815*9ccd446eSAtari911✅ Add Event button background & text 10816*9ccd446eSAtari911✅ Today/Tomorrow/Important event titles 10817*9ccd446eSAtari911✅ Event times 10818*9ccd446eSAtari911✅ Event dates (Important section) 10819*9ccd446eSAtari911✅ Task checkboxes 10820*9ccd446eSAtari911✅ Event color bars 10821*9ccd446eSAtari911✅ All text shadows (glow vs none) 10822*9ccd446eSAtari911 10823*9ccd446eSAtari911**Every single element now respects the theme!** 10824*9ccd446eSAtari911 10825*9ccd446eSAtari911## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 10826*9ccd446eSAtari911 10827*9ccd446eSAtari911### Theme Improvements 10828*9ccd446eSAtari911- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 10829*9ccd446eSAtari911- **Fixed:** Add Event button now uses theme colors 10830*9ccd446eSAtari911- **Fixed:** Clock box border now matches theme 10831*9ccd446eSAtari911- **Fixed:** All text shadows respect theme (no glow on professional) 10832*9ccd446eSAtari911- **Fixed:** Event bars use theme-appropriate shadows 10833*9ccd446eSAtari911 10834*9ccd446eSAtari911### Technical Details 10835*9ccd446eSAtari911 10836*9ccd446eSAtari911**Week Grid Theming**: 10837*9ccd446eSAtari911```php 10838*9ccd446eSAtari911// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 10839*9ccd446eSAtari911// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 10840*9ccd446eSAtari911// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 10841*9ccd446eSAtari911``` 10842*9ccd446eSAtari911 10843*9ccd446eSAtari911**Add Event Button**: 10844*9ccd446eSAtari911```php 10845*9ccd446eSAtari911// Matrix: Dark green (#006400) with bright green text 10846*9ccd446eSAtari911// Purple: Purple (#7d3c98) with lavender text 10847*9ccd446eSAtari911// Professional: Blue (#3498db) with white text 10848*9ccd446eSAtari911``` 10849*9ccd446eSAtari911 10850*9ccd446eSAtari911**Text Shadows**: 10851*9ccd446eSAtari911```php 10852*9ccd446eSAtari911// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 10853*9ccd446eSAtari911// Professional: No glow (clean look) 10854*9ccd446eSAtari911``` 10855*9ccd446eSAtari911 10856*9ccd446eSAtari911**CSS Overrides**: 10857*9ccd446eSAtari911```css 10858*9ccd446eSAtari911/* Purple theme */ 10859*9ccd446eSAtari911.sidebar-purple .eventlist-today-header { 10860*9ccd446eSAtari911 border-color: #9b59b6; 10861*9ccd446eSAtari911 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 10862*9ccd446eSAtari911} 10863*9ccd446eSAtari911 10864*9ccd446eSAtari911/* Professional theme */ 10865*9ccd446eSAtari911.sidebar-professional .eventlist-today-header { 10866*9ccd446eSAtari911 border-color: #4a90e2; 10867*9ccd446eSAtari911 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 10868*9ccd446eSAtari911} 10869*9ccd446eSAtari911``` 10870*9ccd446eSAtari911 10871*9ccd446eSAtari911### What Changed Per Theme: 10872*9ccd446eSAtari911 10873*9ccd446eSAtari911**Purple Dream**: 10874*9ccd446eSAtari911- Week grid: Purple borders and dark purple background 10875*9ccd446eSAtari911- Add Event: Purple button with lavender text 10876*9ccd446eSAtari911- Clock box: Purple border with purple glow 10877*9ccd446eSAtari911- Event bars: Purple glow instead of green 10878*9ccd446eSAtari911- All text: Purple/lavender shades 10879*9ccd446eSAtari911 10880*9ccd446eSAtari911**Professional Blue**: 10881*9ccd446eSAtari911- Week grid: Blue borders and light grey background 10882*9ccd446eSAtari911- Add Event: Blue button with white text 10883*9ccd446eSAtari911- Clock box: Blue border with subtle shadow (no glow) 10884*9ccd446eSAtari911- Event bars: Subtle shadows (no glow) 10885*9ccd446eSAtari911- All text: Dark grey and blue shades 10886*9ccd446eSAtari911 10887*9ccd446eSAtari911**Matrix Edition**: Unchanged (still perfect green theme!) 10888*9ccd446eSAtari911 10889*9ccd446eSAtari911## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 10890*9ccd446eSAtari911 10891*9ccd446eSAtari911### ✨ New Features 10892*9ccd446eSAtari911- **Added:** Themes tab in admin for sidebar widget theming 10893*9ccd446eSAtari911- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 10894*9ccd446eSAtari911- **Added:** Theme selector with live previews 10895*9ccd446eSAtari911- **Added:** Theme persistence across page loads 10896*9ccd446eSAtari911 10897*9ccd446eSAtari911### Available Themes 10898*9ccd446eSAtari911 10899*9ccd446eSAtari911**Matrix Edition** (Default): 10900*9ccd446eSAtari911- Dark background (#242424) 10901*9ccd446eSAtari911- Green accents (#00cc07) 10902*9ccd446eSAtari911- Neon glow effects 10903*9ccd446eSAtari911- Original Matrix styling 10904*9ccd446eSAtari911 10905*9ccd446eSAtari911**Purple Dream**: 10906*9ccd446eSAtari911- Dark purple background (#2a2030) 10907*9ccd446eSAtari911- Purple/violet accents (#9b59b6) 10908*9ccd446eSAtari911- Elegant purple glow 10909*9ccd446eSAtari911- Rich purple color scheme 10910*9ccd446eSAtari911 10911*9ccd446eSAtari911**Professional Blue**: 10912*9ccd446eSAtari911- Light grey background (#f5f7fa) 10913*9ccd446eSAtari911- Blue accents (#4a90e2) 10914*9ccd446eSAtari911- Clean professional look 10915*9ccd446eSAtari911- Subtle shadows instead of glow 10916*9ccd446eSAtari911 10917*9ccd446eSAtari911### Bug Fix 10918*9ccd446eSAtari911- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 10919*9ccd446eSAtari911- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 10920*9ccd446eSAtari911 10921*9ccd446eSAtari911### Technical Details 10922*9ccd446eSAtari911 10923*9ccd446eSAtari911**Theme System**: 10924*9ccd446eSAtari911```php 10925*9ccd446eSAtari911// Saved in: data/meta/calendar_theme.txt 10926*9ccd446eSAtari911// Applied dynamically in syntax.php 10927*9ccd446eSAtari911$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 10928*9ccd446eSAtari911$styles = $this->getSidebarThemeStyles($theme); 10929*9ccd446eSAtari911 10930*9ccd446eSAtari911// Styles include: 10931*9ccd446eSAtari911- bg, border, shadow 10932*9ccd446eSAtari911- header_bg, header_border, header_shadow 10933*9ccd446eSAtari911- text_primary, text_bright, text_dim 10934*9ccd446eSAtari911- grid_bg, grid_border 10935*9ccd446eSAtari911- cell_bg, cell_today_bg 10936*9ccd446eSAtari911``` 10937*9ccd446eSAtari911 10938*9ccd446eSAtari911**Theme Changes**: 10939*9ccd446eSAtari911- Header background gradient 10940*9ccd446eSAtari911- Border colors 10941*9ccd446eSAtari911- Text colors 10942*9ccd446eSAtari911- Shadow/glow effects 10943*9ccd446eSAtari911- Grid colors 10944*9ccd446eSAtari911 10945*9ccd446eSAtari911**How to Change**: 10946*9ccd446eSAtari9111. Admin → Calendar → Themes tab 10947*9ccd446eSAtari9112. Select desired theme 10948*9ccd446eSAtari9113. Click "Save Theme" 10949*9ccd446eSAtari9114. Refresh page to see changes 10950*9ccd446eSAtari911 10951*9ccd446eSAtari911### Notes 10952*9ccd446eSAtari911- Themes only affect sidebar widget appearance 10953*9ccd446eSAtari911- Main calendar view unchanged 10954*9ccd446eSAtari911- Theme setting stored in `data/meta/calendar_theme.txt` 10955*9ccd446eSAtari911- Safe to switch themes - no data affected 10956*9ccd446eSAtari911 10957*9ccd446eSAtari911## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 10958*9ccd446eSAtari911 10959*9ccd446eSAtari911### Bug Fixes 10960*9ccd446eSAtari911- **Fixed:** Events now sort chronologically by time (was using string comparison) 10961*9ccd446eSAtari911- **Fixed:** Tooltip positioning using JavaScript like system tooltips 10962*9ccd446eSAtari911- **Fixed:** All-day events appear first, then events in time order 10963*9ccd446eSAtari911 10964*9ccd446eSAtari911### Technical Details 10965*9ccd446eSAtari911 10966*9ccd446eSAtari911**Event Sorting Fix**: 10967*9ccd446eSAtari911```php 10968*9ccd446eSAtari911// BROKEN (v4.0.9): 10969*9ccd446eSAtari911return strcmp($aTime, $bTime); 10970*9ccd446eSAtari911// String comparison: "10:00" < "8:00" because "1" < "8" 10971*9ccd446eSAtari911// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 10972*9ccd446eSAtari911 10973*9ccd446eSAtari911// FIXED (v4.1.0): 10974*9ccd446eSAtari911$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 10975*9ccd446eSAtari911$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 10976*9ccd446eSAtari911return $aMinutes - $bMinutes; 10977*9ccd446eSAtari911// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 10978*9ccd446eSAtari911``` 10979*9ccd446eSAtari911 10980*9ccd446eSAtari911**Example Before Fix**: 10981*9ccd446eSAtari911``` 10982*9ccd446eSAtari911 Weekend Ticket Duty (all-day) 10983*9ccd446eSAtari9118:00 AM START TICKETS 10984*9ccd446eSAtari91110:00 AM Soul Winning ← Wrong! 10985*9ccd446eSAtari9119:45 AM Coffee ← Should be before 10:00 AM 10986*9ccd446eSAtari911``` 10987*9ccd446eSAtari911 10988*9ccd446eSAtari911**Example After Fix**: 10989*9ccd446eSAtari911``` 10990*9ccd446eSAtari911 Weekend Ticket Duty (all-day) 10991*9ccd446eSAtari9118:00 AM START TICKETS 10992*9ccd446eSAtari9119:45 AM Coffee ← Correct! 10993*9ccd446eSAtari91110:00 AM Soul Winning 10994*9ccd446eSAtari911``` 10995*9ccd446eSAtari911 10996*9ccd446eSAtari911**Tooltip Positioning**: 10997*9ccd446eSAtari911- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 10998*9ccd446eSAtari911- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 10999*9ccd446eSAtari911- Positioned on `mouseenter` event 11000*9ccd446eSAtari911- Matches system tooltip implementation (no cutoff) 11001*9ccd446eSAtari911 11002*9ccd446eSAtari911**JavaScript Implementation**: 11003*9ccd446eSAtari911```javascript 11004*9ccd446eSAtari911element.addEventListener("mouseenter", function() { 11005*9ccd446eSAtari911 const rect = element.getBoundingClientRect(); 11006*9ccd446eSAtari911 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 11007*9ccd446eSAtari911 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 11008*9ccd446eSAtari911}); 11009*9ccd446eSAtari911``` 11010*9ccd446eSAtari911 11011*9ccd446eSAtari911**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 11012*9ccd446eSAtari911 11013*9ccd446eSAtari911## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 11014*9ccd446eSAtari911 11015*9ccd446eSAtari911### UI Improvements 11016*9ccd446eSAtari911- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 11017*9ccd446eSAtari911- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 11018*9ccd446eSAtari911- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 11019*9ccd446eSAtari911 11020*9ccd446eSAtari911### Technical Details 11021*9ccd446eSAtari911 11022*9ccd446eSAtari911**Sidebar Overflow Fix**: 11023*9ccd446eSAtari911```php 11024*9ccd446eSAtari911// Before (line 2005): 11025*9ccd446eSAtari911style="...overflow:hidden..." // ← Blocked tooltips! 11026*9ccd446eSAtari911 11027*9ccd446eSAtari911// After: 11028*9ccd446eSAtari911style="...overflow:visible..." // ← Tooltips extend beyond! 11029*9ccd446eSAtari911``` 11030*9ccd446eSAtari911 11031*9ccd446eSAtari911**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 11032*9ccd446eSAtari911 11033*9ccd446eSAtari911**Main Calendar Tooltip Size**: 11034*9ccd446eSAtari911```css 11035*9ccd446eSAtari911/* Before: */ 11036*9ccd446eSAtari911.conflict-tooltip { 11037*9ccd446eSAtari911 border: 2px solid #ff9800; 11038*9ccd446eSAtari911 border-radius: 6px; 11039*9ccd446eSAtari911 padding: 8px 12px; 11040*9ccd446eSAtari911 font-size: 12px; 11041*9ccd446eSAtari911 min-width: 200px; 11042*9ccd446eSAtari911 max-width: 350px; 11043*9ccd446eSAtari911} 11044*9ccd446eSAtari911 11045*9ccd446eSAtari911/* After: */ 11046*9ccd446eSAtari911.conflict-tooltip { 11047*9ccd446eSAtari911 border: 1px solid #ff9800; /* Thinner */ 11048*9ccd446eSAtari911 border-radius: 3px; /* Smaller */ 11049*9ccd446eSAtari911 padding: 4px 8px; /* Less padding */ 11050*9ccd446eSAtari911 font-size: 10px; /* Smaller header */ 11051*9ccd446eSAtari911 min-width: 120px; /* Narrower */ 11052*9ccd446eSAtari911 max-width: 200px; /* Narrower */ 11053*9ccd446eSAtari911} 11054*9ccd446eSAtari911 11055*9ccd446eSAtari911.conflict-tooltip-body { 11056*9ccd446eSAtari911 padding: 6px 8px; /* Was 10px 12px */ 11057*9ccd446eSAtari911 font-size: 9px; /* Was 11px */ 11058*9ccd446eSAtari911 line-height: 1.4; /* Was 1.6 */ 11059*9ccd446eSAtari911} 11060*9ccd446eSAtari911 11061*9ccd446eSAtari911.conflict-item { 11062*9ccd446eSAtari911 padding: 2px 0; /* Was 4px */ 11063*9ccd446eSAtari911 font-size: 9px; /* Added smaller font */ 11064*9ccd446eSAtari911} 11065*9ccd446eSAtari911``` 11066*9ccd446eSAtari911 11067*9ccd446eSAtari911**Result**: 11068*9ccd446eSAtari911- Main calendar tooltip ~50% smaller 11069*9ccd446eSAtari911- Sidebar tooltips now extend beyond borders 11070*9ccd446eSAtari911- Both tooltips compact and readable 11071*9ccd446eSAtari911 11072*9ccd446eSAtari911## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 11073*9ccd446eSAtari911 11074*9ccd446eSAtari911### Bug Fix 11075*9ccd446eSAtari911- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 11076*9ccd446eSAtari911- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 11077*9ccd446eSAtari911 11078*9ccd446eSAtari911### Technical Details 11079*9ccd446eSAtari911 11080*9ccd446eSAtari911**The Problem**: 11081*9ccd446eSAtari911```php 11082*9ccd446eSAtari911// Before (v4.0.7): 11083*9ccd446eSAtari911$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 11084*9ccd446eSAtari911 11085*9ccd446eSAtari911// Displayed as: 11086*9ccd446eSAtari911"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 11087*9ccd446eSAtari911``` 11088*9ccd446eSAtari911 11089*9ccd446eSAtari911**The Fix**: 11090*9ccd446eSAtari911```php 11091*9ccd446eSAtari911// After (v4.0.8): 11092*9ccd446eSAtari911$conflictTooltip = "Conflicts with: "; // HTML entity for newline 11093*9ccd446eSAtari911 11094*9ccd446eSAtari911// Displays as: 11095*9ccd446eSAtari911Conflicts with: 11096*9ccd446eSAtari911• Event 1 11097*9ccd446eSAtari911• Event 2 11098*9ccd446eSAtari911``` 11099*9ccd446eSAtari911 11100*9ccd446eSAtari911**Why ` ` Works**: 11101*9ccd446eSAtari911- HTML entity for line feed character 11102*9ccd446eSAtari911- Works in data attributes 11103*9ccd446eSAtari911- CSS `white-space: pre-line` preserves the newlines 11104*9ccd446eSAtari911- Renders as actual line breaks in tooltip 11105*9ccd446eSAtari911 11106*9ccd446eSAtari911**Applied to**: 11107*9ccd446eSAtari911- PHP rendering (sidebar Today/Tomorrow/Important) 11108*9ccd446eSAtari911- JavaScript rendering (clicked day events) 11109*9ccd446eSAtari911 11110*9ccd446eSAtari911## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 11111*9ccd446eSAtari911 11112*9ccd446eSAtari911### UI Improvements 11113*9ccd446eSAtari911- **Changed:** Tooltip size reduced significantly (much more compact) 11114*9ccd446eSAtari911- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 11115*9ccd446eSAtari911- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 11116*9ccd446eSAtari911- **Changed:** Narrower width (120-200px vs 200-300px) 11117*9ccd446eSAtari911 11118*9ccd446eSAtari911### Technical Details 11119*9ccd446eSAtari911 11120*9ccd446eSAtari911**Tooltip Size Reduction**: 11121*9ccd446eSAtari911```css 11122*9ccd446eSAtari911/* Before (v4.0.6): 11123*9ccd446eSAtari911padding: 6px 10px; 11124*9ccd446eSAtari911font-size: 11px; 11125*9ccd446eSAtari911min-width: 200px; 11126*9ccd446eSAtari911max-width: 300px; 11127*9ccd446eSAtari911 11128*9ccd446eSAtari911/* After (v4.0.7): */ 11129*9ccd446eSAtari911padding: 3px 6px; 11130*9ccd446eSAtari911font-size: 9px; 11131*9ccd446eSAtari911min-width: 120px; 11132*9ccd446eSAtari911max-width: 200px; 11133*9ccd446eSAtari911``` 11134*9ccd446eSAtari911 11135*9ccd446eSAtari911**Overflow Fix**: 11136*9ccd446eSAtari911```css 11137*9ccd446eSAtari911/* Allow tooltip to extend beyond sidebar */ 11138*9ccd446eSAtari911.sidebar-widget, 11139*9ccd446eSAtari911.sidebar-matrix { 11140*9ccd446eSAtari911 overflow: visible !important; 11141*9ccd446eSAtari911} 11142*9ccd446eSAtari911 11143*9ccd446eSAtari911/* Position tooltip outside */ 11144*9ccd446eSAtari911[data-tooltip]:before { 11145*9ccd446eSAtari911 bottom: 120%; /* Further above */ 11146*9ccd446eSAtari911 right: -10px; /* Can extend beyond edge */ 11147*9ccd446eSAtari911 z-index: 10000; /* Always on top */ 11148*9ccd446eSAtari911} 11149*9ccd446eSAtari911``` 11150*9ccd446eSAtari911 11151*9ccd446eSAtari911**Visual Result**: 11152*9ccd446eSAtari911- Tooltip is ~40% smaller 11153*9ccd446eSAtari911- Extends beyond sidebar border if needed 11154*9ccd446eSAtari911- Still readable, just more compact 11155*9ccd446eSAtari911- Better for small screens 11156*9ccd446eSAtari911 11157*9ccd446eSAtari911## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 11158*9ccd446eSAtari911 11159*9ccd446eSAtari911### Critical Fix 11160*9ccd446eSAtari911- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 11161*9ccd446eSAtari911- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 11162*9ccd446eSAtari911- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 11163*9ccd446eSAtari911- **Fixed:** Now matches what you see in main calendar view 11164*9ccd446eSAtari911 11165*9ccd446eSAtari911### ✨ UI Improvement 11166*9ccd446eSAtari911- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 11167*9ccd446eSAtari911- **Added:** Custom CSS tooltip with data-tooltip attribute 11168*9ccd446eSAtari911- **Improved:** Better tooltip positioning - doesn't overflow screen edges 11169*9ccd446eSAtari911 11170*9ccd446eSAtari911### Technical Details 11171*9ccd446eSAtari911 11172*9ccd446eSAtari911**The Problem - Field Name Mismatch**: 11173*9ccd446eSAtari911```php 11174*9ccd446eSAtari911// Main calendar (line 697): 11175*9ccd446eSAtari911$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 11176*9ccd446eSAtari911 11177*9ccd446eSAtari911// Sidebar (before fix): 11178*9ccd446eSAtari911$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 11179*9ccd446eSAtari911``` 11180*9ccd446eSAtari911 11181*9ccd446eSAtari911**The Problem - Duration Logic**: 11182*9ccd446eSAtari911```php 11183*9ccd446eSAtari911// Main calendar (line 697): 11184*9ccd446eSAtari911$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 11185*9ccd446eSAtari911 ? $evt1['endTime'] 11186*9ccd446eSAtari911 : $evt1['time']; // ← Uses START time (zero duration) 11187*9ccd446eSAtari911 11188*9ccd446eSAtari911// Sidebar (before fix): 11189*9ccd446eSAtari911$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 11190*9ccd446eSAtari911``` 11191*9ccd446eSAtari911 11192*9ccd446eSAtari911**The Fix**: 11193*9ccd446eSAtari911```php 11194*9ccd446eSAtari911// Now checks BOTH field names: 11195*9ccd446eSAtari911if (isset($event['end_time']) && $event['end_time'] !== '') { 11196*9ccd446eSAtari911 $endTime = $event['end_time']; 11197*9ccd446eSAtari911} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 11198*9ccd446eSAtari911 $endTime = $event['endTime']; 11199*9ccd446eSAtari911} else { 11200*9ccd446eSAtari911 $endTime = $startTime; // ← Matches main calendar! 11201*9ccd446eSAtari911} 11202*9ccd446eSAtari911``` 11203*9ccd446eSAtari911 11204*9ccd446eSAtari911**Tooltip Positioning**: 11205*9ccd446eSAtari911- Uses `data-tooltip` attribute instead of `title` 11206*9ccd446eSAtari911- CSS positions tooltip ABOVE badge (`bottom: 100%`) 11207*9ccd446eSAtari911- Aligns to RIGHT edge (`right: 0`) 11208*9ccd446eSAtari911- Arrow points down to badge 11209*9ccd446eSAtari911- Black background with white text 11210*9ccd446eSAtari911- Max width 300px 11211*9ccd446eSAtari911 11212*9ccd446eSAtari911### Example 11213*9ccd446eSAtari911 11214*9ccd446eSAtari911**6:00 PM Evening Service** (no end time): 11215*9ccd446eSAtari911- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 11216*9ccd446eSAtari911- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 11217*9ccd446eSAtari911 11218*9ccd446eSAtari911**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 11219*9ccd446eSAtari911- Zero-duration events at 6:00 PM don't overlap with anything 11220*9ccd446eSAtari911- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 11221*9ccd446eSAtari911 11222*9ccd446eSAtari911**Tooltip appears**: 11223*9ccd446eSAtari911``` 11224*9ccd446eSAtari911 ┌────────────────────┐ 11225*9ccd446eSAtari911 │ Conflicts with: │ 11226*9ccd446eSAtari911 │ • Super Bowl │ 11227*9ccd446eSAtari911 │ (3:30 PM-7:00 PM)│ 11228*9ccd446eSAtari911 └─────────┬──────────┘ 11229*9ccd446eSAtari911 ▼ 11230*9ccd446eSAtari911 ⚠ 11231*9ccd446eSAtari911``` 11232*9ccd446eSAtari911 11233*9ccd446eSAtari911## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 11234*9ccd446eSAtari911 11235*9ccd446eSAtari911### Bug Fix 11236*9ccd446eSAtari911- **Fixed:** Events without end_time now properly get 1-hour default duration 11237*9ccd446eSAtari911- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 11238*9ccd446eSAtari911- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 11239*9ccd446eSAtari911 11240*9ccd446eSAtari911### Technical Details 11241*9ccd446eSAtari911 11242*9ccd446eSAtari911**The Problem**: 11243*9ccd446eSAtari911```php 11244*9ccd446eSAtari911// Before (broken): 11245*9ccd446eSAtari911$endTime = isset($event['end_time']) ? $event['end_time'] : default; 11246*9ccd446eSAtari911 11247*9ccd446eSAtari911// If end_time exists but is empty string "": 11248*9ccd446eSAtari911isset($event['end_time']) = TRUE 11249*9ccd446eSAtari911$endTime = "" // ← Empty string, not default! 11250*9ccd446eSAtari911``` 11251*9ccd446eSAtari911 11252*9ccd446eSAtari911**The Fix**: 11253*9ccd446eSAtari911```php 11254*9ccd446eSAtari911// After (fixed): 11255*9ccd446eSAtari911$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 11256*9ccd446eSAtari911 ? $event['end_time'] 11257*9ccd446eSAtari911 : $this->addHoursToTime($startTime, 1); 11258*9ccd446eSAtari911 11259*9ccd446eSAtari911// Now empty string gets the default 1-hour duration 11260*9ccd446eSAtari911``` 11261*9ccd446eSAtari911 11262*9ccd446eSAtari911**Why This Matters**: 11263*9ccd446eSAtari911Events 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. 11264*9ccd446eSAtari911 11265*9ccd446eSAtari911**Example**: 11266*9ccd446eSAtari911``` 11267*9ccd446eSAtari911Super Bowl: 3:30 PM - 7:00 PM 11268*9ccd446eSAtari911Evening Service: 6:00 PM - ??? (should be 7:00 PM) 11269*9ccd446eSAtari911 11270*9ccd446eSAtari911If end_time = "" (empty string): 11271*9ccd446eSAtari911 Old code: Uses "" → conflict detection fails 11272*9ccd446eSAtari911 New code: Uses 7:00 PM → conflict detected ✓ 11273*9ccd446eSAtari911``` 11274*9ccd446eSAtari911 11275*9ccd446eSAtari911### Testing 11276*9ccd446eSAtari911If you're still not seeing the conflict on the 6:00 PM service: 11277*9ccd446eSAtari9111. Check if the event has `end_time` set in the JSON 11278*9ccd446eSAtari9112. Clear cache (Admin → Manage Events → Clear Cache) 11279*9ccd446eSAtari9113. The conflict should now appear 11280*9ccd446eSAtari911 11281*9ccd446eSAtari911## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 11282*9ccd446eSAtari911 11283*9ccd446eSAtari911### ✨ Feature Added 11284*9ccd446eSAtari911- **Added:** Hover over ⚠ badge to see which events are conflicting 11285*9ccd446eSAtari911- **Added:** Tooltip shows conflicting event titles and times 11286*9ccd446eSAtari911- **Added:** Works in both sidebar sections and clicked day events 11287*9ccd446eSAtari911 11288*9ccd446eSAtari911### Technical Details 11289*9ccd446eSAtari911 11290*9ccd446eSAtari911**Conflict Tracking Enhanced**: 11291*9ccd446eSAtari911```php 11292*9ccd446eSAtari911// Now tracks WHICH events conflict: 11293*9ccd446eSAtari911$event['conflictingWith'] = [ 11294*9ccd446eSAtari911 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 11295*9ccd446eSAtari911 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 11296*9ccd446eSAtari911]; 11297*9ccd446eSAtari911``` 11298*9ccd446eSAtari911 11299*9ccd446eSAtari911**Tooltip Format**: 11300*9ccd446eSAtari911``` 11301*9ccd446eSAtari911Conflicts with: 11302*9ccd446eSAtari911• Meeting (10:00 AM-11:00 AM) 11303*9ccd446eSAtari911• Call (10:30 AM-11:30 PM) 11304*9ccd446eSAtari911``` 11305*9ccd446eSAtari911 11306*9ccd446eSAtari911**Where It Works**: 11307*9ccd446eSAtari911- ✅ Today section (sidebar) 11308*9ccd446eSAtari911- ✅ Tomorrow section (sidebar) 11309*9ccd446eSAtari911- ✅ Important Events section (sidebar) 11310*9ccd446eSAtari911- ✅ Clicked day events (week grid) 11311*9ccd446eSAtari911 11312*9ccd446eSAtari911**Cursor**: Changes to `help` cursor on hover to indicate tooltip 11313*9ccd446eSAtari911 11314*9ccd446eSAtari911### Note on Multi-Day Events 11315*9ccd446eSAtari911The 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. 11316*9ccd446eSAtari911 11317*9ccd446eSAtari911## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 11318*9ccd446eSAtari911 11319*9ccd446eSAtari911### Bug Fixes 11320*9ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 11321*9ccd446eSAtari911- **Fixed:** Important Events now shows events even if they're today or tomorrow 11322*9ccd446eSAtari911- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 11323*9ccd446eSAtari911 11324*9ccd446eSAtari911### Technical Details 11325*9ccd446eSAtari911 11326*9ccd446eSAtari911**Conflict Badge Issue**: 11327*9ccd446eSAtari911```php 11328*9ccd446eSAtari911// BROKEN (line 2511): 11329*9ccd446eSAtari911$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 11330*9ccd446eSAtari911// ↑ Checking 'conflicts' (plural) 11331*9ccd446eSAtari911 11332*9ccd446eSAtari911// But detectTimeConflicts() sets: 11333*9ccd446eSAtari911$event['conflict'] = true/false; 11334*9ccd446eSAtari911// ↑ Setting 'conflict' (singular) 11335*9ccd446eSAtari911 11336*9ccd446eSAtari911// FIXED: 11337*9ccd446eSAtari911$hasConflict = isset($event['conflict']) && $event['conflict']; 11338*9ccd446eSAtari911``` 11339*9ccd446eSAtari911 11340*9ccd446eSAtari911**Result**: Badge now shows for ALL conflicting events in sidebar sections 11341*9ccd446eSAtari911 11342*9ccd446eSAtari911**Important Events Logic Issue**: 11343*9ccd446eSAtari911```php 11344*9ccd446eSAtari911// BROKEN: 11345*9ccd446eSAtari911if ($dateKey === $todayStr) { 11346*9ccd446eSAtari911 $todayEvents[] = ...; 11347*9ccd446eSAtari911} elseif ($dateKey === $tomorrowStr) { 11348*9ccd446eSAtari911 $tomorrowEvents[] = ...; 11349*9ccd446eSAtari911} else { // ← Only checked if NOT today/tomorrow! 11350*9ccd446eSAtari911 if ($isImportant) { 11351*9ccd446eSAtari911 $importantEvents[] = ...; 11352*9ccd446eSAtari911 } 11353*9ccd446eSAtari911} 11354*9ccd446eSAtari911 11355*9ccd446eSAtari911// FIXED: 11356*9ccd446eSAtari911if ($dateKey === $todayStr) { 11357*9ccd446eSAtari911 $todayEvents[] = ...; 11358*9ccd446eSAtari911} 11359*9ccd446eSAtari911if ($dateKey === $tomorrowStr) { 11360*9ccd446eSAtari911 $tomorrowEvents[] = ...; 11361*9ccd446eSAtari911} 11362*9ccd446eSAtari911// ↑ Changed to separate 'if' statements 11363*9ccd446eSAtari911if ($isImportant && $dateKey in this week) { 11364*9ccd446eSAtari911 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 11365*9ccd446eSAtari911} 11366*9ccd446eSAtari911``` 11367*9ccd446eSAtari911 11368*9ccd446eSAtari911**Result**: Important namespace events now show in Important section even if they're today or tomorrow 11369*9ccd446eSAtari911 11370*9ccd446eSAtari911### Conflict Badge Display 11371*9ccd446eSAtari911- Simplified to just ⚠ icon (no count) 11372*9ccd446eSAtari911- Orange color (#ff9800) 11373*9ccd446eSAtari911- 10px font size 11374*9ccd446eSAtari911- Hover shows "Time conflict detected" 11375*9ccd446eSAtari911 11376*9ccd446eSAtari911## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 11377*9ccd446eSAtari911 11378*9ccd446eSAtari911### Bug Fix 11379*9ccd446eSAtari911- **Fixed:** Important Events section now displays all events correctly 11380*9ccd446eSAtari911- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 11381*9ccd446eSAtari911- **Fixed:** Conflict detection no longer causes events to disappear from Important section 11382*9ccd446eSAtari911 11383*9ccd446eSAtari911### Technical Details 11384*9ccd446eSAtari911 11385*9ccd446eSAtari911**The Problem**: 11386*9ccd446eSAtari911- `detectTimeConflicts()` returned early if only 1 event on a day 11387*9ccd446eSAtari911- Returned original array without adding 'conflict' field 11388*9ccd446eSAtari911- This inconsistency caused issues in event categorization 11389*9ccd446eSAtari911 11390*9ccd446eSAtari911**The Solution**: 11391*9ccd446eSAtari911```php 11392*9ccd446eSAtari911// Before (broken): 11393*9ccd446eSAtari911if (empty($dayEvents) || count($dayEvents) < 2) { 11394*9ccd446eSAtari911 return $dayEvents; // No 'conflict' field added! 11395*9ccd446eSAtari911} 11396*9ccd446eSAtari911 11397*9ccd446eSAtari911// After (fixed): 11398*9ccd446eSAtari911if (count($dayEvents) === 1) { 11399*9ccd446eSAtari911 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 11400*9ccd446eSAtari911} 11401*9ccd446eSAtari911``` 11402*9ccd446eSAtari911 11403*9ccd446eSAtari911**Result**: 11404*9ccd446eSAtari911- All events now have 'conflict' field consistently 11405*9ccd446eSAtari911- Single events: conflict = false 11406*9ccd446eSAtari911- Multiple events: conflict = true/false based on overlap 11407*9ccd446eSAtari911- Important Events section displays correctly 11408*9ccd446eSAtari911 11409*9ccd446eSAtari911## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 11410*9ccd446eSAtari911 11411*9ccd446eSAtari911### Bug Fixes 11412*9ccd446eSAtari911- **Fixed:** Conflict badge (⚠) now displays in clicked day events 11413*9ccd446eSAtari911- **Fixed:** Recurring events edit now updates time and end_time correctly 11414*9ccd446eSAtari911- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 11415*9ccd446eSAtari911 11416*9ccd446eSAtari911### ✨ Features Added 11417*9ccd446eSAtari911- **Added:** Time conflict detection for overlapping events 11418*9ccd446eSAtari911- **Added:** detectTimeConflicts() function checks all events on same day 11419*9ccd446eSAtari911- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 11420*9ccd446eSAtari911- **Added:** Events now have 'conflict' flag set automatically 11421*9ccd446eSAtari911 11422*9ccd446eSAtari911### UI Changes 11423*9ccd446eSAtari911- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 11424*9ccd446eSAtari911- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 11425*9ccd446eSAtari911- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 11426*9ccd446eSAtari911 11427*9ccd446eSAtari911### Technical Details 11428*9ccd446eSAtari911 11429*9ccd446eSAtari911**Conflict Detection**: 11430*9ccd446eSAtari911```php 11431*9ccd446eSAtari911// Automatically detects overlapping events on same day 11432*9ccd446eSAtari911// Sets 'conflict' flag to true if event overlaps with another 11433*9ccd446eSAtari911$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11434*9ccd446eSAtari911``` 11435*9ccd446eSAtari911 11436*9ccd446eSAtari911**Logic**: 11437*9ccd446eSAtari911- All-day events never conflict (no time set) 11438*9ccd446eSAtari911- Timed events check for overlap with other timed events 11439*9ccd446eSAtari911- Overlap = start1 < end2 AND start2 < end1 11440*9ccd446eSAtari911- Default duration is 60 minutes if no end_time 11441*9ccd446eSAtari911 11442*9ccd446eSAtari911**Recurring Events Fix**: 11443*9ccd446eSAtari911- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 11444*9ccd446eSAtari911- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 11445*9ccd446eSAtari911- Now edits actually save and update the events 11446*9ccd446eSAtari911 11447*9ccd446eSAtari911**Week View Bars**: 11448*9ccd446eSAtari911- Shows 4 colored bars instead of 3 11449*9ccd446eSAtari911- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 11450*9ccd446eSAtari911 11451231d0edbSAtari911## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 11452231d0edbSAtari911 11453231d0edbSAtari911**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 11454231d0edbSAtari911 11455231d0edbSAtari911### Major Features 11456231d0edbSAtari911 11457231d0edbSAtari911#### Sidebar Widget 11458231d0edbSAtari911- **Week Grid**: Interactive 7-day calendar with click-to-view events 11459231d0edbSAtari911- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 11460231d0edbSAtari911- **Live Clock**: Updates every second with date display 11461231d0edbSAtari911- **Real-time Weather**: Geolocation-based temperature with icon 11462231d0edbSAtari911- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 11463231d0edbSAtari911- **Add Event Button**: Dark green bar opens full event creation dialog 11464231d0edbSAtari911- **Matrix Theme**: Green glow effects throughout 11465231d0edbSAtari911 11466231d0edbSAtari911#### Event Management 11467231d0edbSAtari911- **Single Color Bars**: Clean 3px bars showing event's assigned color 11468231d0edbSAtari911- **All-Day Events First**: Then sorted chronologically by time 11469231d0edbSAtari911- **Conflict Detection**: Orange ⚠ badge on overlapping events 11470231d0edbSAtari911- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 11471231d0edbSAtari911- **HTML Rendering**: Pre-rendered for JavaScript display 11472231d0edbSAtari911- **Click-to-View**: Click week grid days to expand event details 11473231d0edbSAtari911 11474231d0edbSAtari911#### Admin Interface 11475231d0edbSAtari911- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 11476231d0edbSAtari911- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 11477231d0edbSAtari911- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 11478231d0edbSAtari911 11479231d0edbSAtari911#### Outlook Sync 11480231d0edbSAtari911- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 11481231d0edbSAtari911- **Category Mapping**: Map colors to Outlook categories 11482231d0edbSAtari911- **Conflict Resolution**: Time conflict detection 11483231d0edbSAtari911- **Import/Export Config**: Encrypted configuration files 11484231d0edbSAtari911 11485231d0edbSAtari911### Design 11486231d0edbSAtari911- **Matrix Theme**: Authentic green glow aesthetic 11487231d0edbSAtari911- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 11488231d0edbSAtari911- **Color Scheme**: 11489231d0edbSAtari911 - Today: Orange #ff9800 11490231d0edbSAtari911 - Tomorrow: Green #4caf50 11491231d0edbSAtari911 - Important: Purple #9b59b6 11492231d0edbSAtari911 - Add Event: Dark green #006400 11493231d0edbSAtari911 - System bars: Green/Purple/Orange 11494231d0edbSAtari911 11495231d0edbSAtari911### Technical Highlights 11496231d0edbSAtari911- **Zero-margin Design**: Perfect flush alignment throughout 11497231d0edbSAtari911- **Flexbox Layout**: Modern, responsive structure 11498231d0edbSAtari911- **AJAX Operations**: No page reloads needed 11499231d0edbSAtari911- **Smart Sorting**: All-day events first, then chronological 11500231d0edbSAtari911- **Tooltip System**: Detailed stats on hover (working correctly) 11501231d0edbSAtari911- **Event Dialog**: Full form with drag support 11502231d0edbSAtari911- **Cache Management**: One-click cache clearing 11503231d0edbSAtari911 11504231d0edbSAtari911### Breaking Changes from v3.x 11505231d0edbSAtari911- Removed dual color bars (now single event color bar only) 11506231d0edbSAtari911- Add Event button moved to between header and week grid 11507231d0edbSAtari911- All-day events now appear FIRST (not last) 11508231d0edbSAtari911- Update Plugin tab is now the default admin tab 11509231d0edbSAtari911 11510231d0edbSAtari911### Bug Fixes (v3.10.x → v4.0.0) 11511231d0edbSAtari911- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 11512231d0edbSAtari911- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 11513231d0edbSAtari911- ✅ Fixed weather display (added updateWeather function) 11514231d0edbSAtari911- ✅ Fixed HTML rendering in events (title_html/description_html fields) 11515231d0edbSAtari911- ✅ Fixed Add Event dialog (null check for calendar element) 11516231d0edbSAtari911- ✅ Fixed text positioning in Add Event button 11517231d0edbSAtari911- ✅ Fixed spacing throughout sidebar widget 11518231d0edbSAtari911 11519231d0edbSAtari911### Complete Feature List 11520231d0edbSAtari911- Full calendar view (month grid) 11521231d0edbSAtari911- Sidebar widget (week view) 11522231d0edbSAtari911- Event panel (standalone) 11523231d0edbSAtari911- Event list (date ranges) 11524231d0edbSAtari911- Namespace support 11525231d0edbSAtari911- Color coding 11526231d0edbSAtari911- Time conflict detection 11527231d0edbSAtari911- DokuWiki syntax in events 11528231d0edbSAtari911- Outlook synchronization 11529231d0edbSAtari911- System monitoring 11530231d0edbSAtari911- Weather display 11531231d0edbSAtari911- Live clock 11532231d0edbSAtari911- Admin interface 11533231d0edbSAtari911- Cache management 11534231d0edbSAtari911- Draggable dialogs 11535231d0edbSAtari911- AJAX save/edit/delete 11536231d0edbSAtari911- Import/export config 11537231d0edbSAtari911 11538231d0edbSAtari911### Usage 11539231d0edbSAtari911 11540231d0edbSAtari911**Sidebar Widget**: 11541231d0edbSAtari911``` 11542231d0edbSAtari911{{calendar sidebar}} 11543231d0edbSAtari911{{calendar sidebar namespace=team}} 11544231d0edbSAtari911``` 11545231d0edbSAtari911 11546231d0edbSAtari911**Full Calendar**: 11547231d0edbSAtari911``` 11548231d0edbSAtari911{{calendar}} 11549231d0edbSAtari911{{calendar year=2026 month=6 namespace=team}} 11550231d0edbSAtari911``` 11551231d0edbSAtari911 11552231d0edbSAtari911**Event Panel**: 11553231d0edbSAtari911``` 11554231d0edbSAtari911{{eventpanel}} 11555231d0edbSAtari911``` 11556231d0edbSAtari911 11557231d0edbSAtari911**Event List**: 11558231d0edbSAtari911``` 11559231d0edbSAtari911{{eventlist daterange=2026-01-01:2026-01-31}} 11560231d0edbSAtari911``` 11561231d0edbSAtari911 11562231d0edbSAtari911### Stats 11563231d0edbSAtari911- **40+ versions** developed during v3.x iterations 11564231d0edbSAtari911- **3.10.0 → 3.11.4**: Polish and refinement 11565231d0edbSAtari911- **4.0.0**: Production-ready Matrix Edition 11566231d0edbSAtari911 11567231d0edbSAtari911### Credits 11568231d0edbSAtari911Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 11569231d0edbSAtari911 11570231d0edbSAtari911--- 11571231d0edbSAtari911 11572231d0edbSAtari911## Previous Versions (v3.11.4 and earlier) 11573231d0edbSAtari911 11574231d0edbSAtari911## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 11575231d0edbSAtari911- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 11576231d0edbSAtari911- **Improved:** Small breathing room between system stats bars and Add Event button 11577231d0edbSAtari911- **Visual:** Better spacing for cleaner appearance 11578231d0edbSAtari911 11579231d0edbSAtari911### CSS Change: 11580231d0edbSAtari911**eventlist-today-header**: 11581231d0edbSAtari911- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 11582231d0edbSAtari911 11583231d0edbSAtari911### Visual Result: 11584231d0edbSAtari911``` 11585231d0edbSAtari911│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 11586231d0edbSAtari911│ │ ← 2px space (restored) 11587231d0edbSAtari911├───────────────────────┤ 11588231d0edbSAtari911│ + ADD EVENT │ ← Add Event bar 11589231d0edbSAtari911├───────────────────────┤ 11590231d0edbSAtari911``` 11591231d0edbSAtari911 11592231d0edbSAtari911**Before (v3.11.3)**: No space, bars directly touch Add Event button 11593231d0edbSAtari911**After (v3.11.4)**: 2px breathing room for better visual hierarchy 11594231d0edbSAtari911 11595231d0edbSAtari911## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 11596231d0edbSAtari911- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 11597231d0edbSAtari911- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 11598231d0edbSAtari911- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 11599231d0edbSAtari911- **Changed:** Line-height reduced from 12px to 10px for better text centering 11600231d0edbSAtari911- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 11601231d0edbSAtari911 11602231d0edbSAtari911### JavaScript Fix: 11603231d0edbSAtari911**Problem**: Line 1084-1085 in calendar-main.js 11604231d0edbSAtari911```javascript 11605231d0edbSAtari911const calendar = document.getElementById(calId); 11606231d0edbSAtari911const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 11607231d0edbSAtari911``` 11608231d0edbSAtari911 11609231d0edbSAtari911**Solution**: Added null check 11610231d0edbSAtari911```javascript 11611231d0edbSAtari911const calendar = document.getElementById(calId); 11612231d0edbSAtari911const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 11613231d0edbSAtari911``` 11614231d0edbSAtari911 11615231d0edbSAtari911**Why This Happened**: 11616231d0edbSAtari911- Regular calendar has element with id=calId 11617231d0edbSAtari911- Sidebar widget doesn't have this element (different structure) 11618231d0edbSAtari911- Code tried to read .dataset on null, causing error 11619231d0edbSAtari911 11620231d0edbSAtari911### Text Position Fix: 11621231d0edbSAtari911**Before**: 11622231d0edbSAtari911- line-height: 12px 11623231d0edbSAtari911- vertical-align: middle 11624231d0edbSAtari911- Text slightly low 11625231d0edbSAtari911 11626231d0edbSAtari911**After**: 11627231d0edbSAtari911- line-height: 10px 11628231d0edbSAtari911- position: relative; top: -1px 11629231d0edbSAtari911- Text perfectly centered 11630231d0edbSAtari911 11631231d0edbSAtari911### What Works Now: 11632231d0edbSAtari911✅ Click "+ ADD EVENT" in sidebar → Dialog opens 11633231d0edbSAtari911✅ No console errors 11634231d0edbSAtari911✅ Text properly centered vertically 11635231d0edbSAtari911✅ Form pre-filled with today's date 11636231d0edbSAtari911✅ Save works correctly 11637231d0edbSAtari911 11638231d0edbSAtari911## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 11639231d0edbSAtari911- **Added:** Event dialog to sidebar widget (same as regular calendar) 11640231d0edbSAtari911- **Changed:** Add Event button now opens proper event form dialog 11641231d0edbSAtari911- **Added:** renderEventDialog() called in renderSidebarWidget() 11642231d0edbSAtari911- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 11643231d0edbSAtari911- **Improved:** Can now add events directly from sidebar widget 11644231d0edbSAtari911 11645231d0edbSAtari911### Add Event Button Behavior: 11646231d0edbSAtari911**Before (v3.11.1)**: Showed alert with instructions 11647231d0edbSAtari911**After (v3.11.2)**: Opens full event creation dialog 11648231d0edbSAtari911 11649231d0edbSAtari911**Dialog Features**: 11650231d0edbSAtari911- Date field (defaults to today) 11651231d0edbSAtari911- Title field (required) 11652231d0edbSAtari911- Time field (optional) 11653231d0edbSAtari911- End time field (optional) 11654231d0edbSAtari911- Color picker 11655231d0edbSAtari911- Category field 11656231d0edbSAtari911- Description field 11657231d0edbSAtari911- Save and Cancel buttons 11658231d0edbSAtari911- Draggable dialog 11659231d0edbSAtari911 11660231d0edbSAtari911### Technical Changes: 11661231d0edbSAtari911- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 11662231d0edbSAtari911- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 11663231d0edbSAtari911- Dialog uses same structure as regular calendar 11664231d0edbSAtari911- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 11665231d0edbSAtari911 11666231d0edbSAtari911### User Flow: 11667231d0edbSAtari9111. User clicks "+ ADD EVENT" green bar 11668231d0edbSAtari9112. Event dialog opens with today's date pre-filled 11669231d0edbSAtari9113. User fills in event details 11670231d0edbSAtari9114. User clicks Save 11671231d0edbSAtari9115. Event saved via AJAX 11672231d0edbSAtari9116. Dialog closes 11673231d0edbSAtari9117. Sidebar refreshes to show new event 11674231d0edbSAtari911 11675231d0edbSAtari911## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 11676231d0edbSAtari911- **Fixed:** Removed bottom padding from header (was 2px, now 0) 11677231d0edbSAtari911- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 11678231d0edbSAtari911- **Fixed:** Add Event bar now flush against header with zero gap 11679231d0edbSAtari911- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 11680231d0edbSAtari911- **Improved:** Alert provides clear instructions on how to add events 11681231d0edbSAtari911 11682231d0edbSAtari911### CSS Changes: 11683231d0edbSAtari911**eventlist-today-header**: 11684231d0edbSAtari911- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 11685231d0edbSAtari911 11686231d0edbSAtari911**eventlist-stats-container**: 11687231d0edbSAtari911- `margin-top: 2px` → `margin: 0` (removed all margins) 11688231d0edbSAtari911 11689231d0edbSAtari911### Add Event Button Behavior: 11690231d0edbSAtari911**Before**: Clicked → Navigated to Admin → Manage Events tab 11691231d0edbSAtari911**After**: Clicked → Shows alert with instructions 11692231d0edbSAtari911 11693231d0edbSAtari911**Alert Message**: 11694231d0edbSAtari911``` 11695231d0edbSAtari911To add an event, go to: 11696231d0edbSAtari911Admin → Calendar Management → Manage Events tab 11697231d0edbSAtari911or use the full calendar view {{calendar}} 11698231d0edbSAtari911``` 11699231d0edbSAtari911 11700231d0edbSAtari911### Visual Result: 11701231d0edbSAtari911``` 11702231d0edbSAtari911│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 11703231d0edbSAtari911├────────────────────────┤ 11704231d0edbSAtari911│ + ADD EVENT │ ← Perfectly flush! 11705231d0edbSAtari911├────────────────────────┤ 11706231d0edbSAtari911``` 11707231d0edbSAtari911 11708231d0edbSAtari911No gaps, perfectly aligned! 11709231d0edbSAtari911 11710231d0edbSAtari911## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 11711231d0edbSAtari911- **Moved:** Add Event bar back to original position (between header and week grid) 11712231d0edbSAtari911- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 11713231d0edbSAtari911- **Changed:** Letter spacing reduced from 0.5px to 0.4px 11714231d0edbSAtari911- **Fixed:** Text now fully visible without being cut off 11715231d0edbSAtari911- **Final:** Optimal position and size determined 11716231d0edbSAtari911 11717231d0edbSAtari911### Final Layout: 11718231d0edbSAtari911``` 11719231d0edbSAtari911┌─────────────────────────────┐ 11720231d0edbSAtari911│ Clock | Weather | Stats │ ← Header 11721231d0edbSAtari911├─────────────────────────────┤ 11722231d0edbSAtari911│ + ADD EVENT │ ← Bar (back here, smaller text) 11723231d0edbSAtari911├─────────────────────────────┤ 11724231d0edbSAtari911│ M T W T F S S │ ← Week Grid 11725231d0edbSAtari911│ 3 4 5 6 7 8 9 │ 11726231d0edbSAtari911├─────────────────────────────┤ 11727231d0edbSAtari911│ Today │ ← Event sections 11728231d0edbSAtari911└─────────────────────────────┘ 11729231d0edbSAtari911``` 11730231d0edbSAtari911 11731231d0edbSAtari911### Text Size Changes: 11732231d0edbSAtari911**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 11733231d0edbSAtari911**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 11734231d0edbSAtari911 11735231d0edbSAtari911### Why This Position: 11736231d0edbSAtari911- Separates header from calendar 11737231d0edbSAtari911- Natural action point after viewing stats 11738231d0edbSAtari911- Users see stats → decide to add event → view calendar 11739231d0edbSAtari911- Consistent with original design intent 11740231d0edbSAtari911 11741231d0edbSAtari911## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 11742231d0edbSAtari911- **Moved:** Add Event bar repositioned from between header/grid to below week grid 11743231d0edbSAtari911- **Improved:** Better visual flow - header → stats → grid → add button → events 11744231d0edbSAtari911- **Changed:** Add Event bar now acts as separator between calendar and event sections 11745231d0edbSAtari911 11746231d0edbSAtari911### New Layout: 11747231d0edbSAtari911``` 11748231d0edbSAtari911┌─────────────────────────────┐ 11749231d0edbSAtari911│ Clock | Weather | Stats │ ← Header 11750231d0edbSAtari911├─────────────────────────────┤ 11751231d0edbSAtari911│ M T W T F S S │ ← Week Grid 11752231d0edbSAtari911│ 3 4 5 6 7 8 9 │ 11753231d0edbSAtari911├─────────────────────────────┤ 11754231d0edbSAtari911│ + ADD EVENT │ ← Add bar (moved here!) 11755231d0edbSAtari911├─────────────────────────────┤ 11756231d0edbSAtari911│ Today │ ← Event sections 11757231d0edbSAtari911│ Tomorrow │ 11758231d0edbSAtari911│ Important Events │ 11759231d0edbSAtari911└─────────────────────────────┘ 11760231d0edbSAtari911``` 11761231d0edbSAtari911 11762231d0edbSAtari911### Visual Flow: 11763231d0edbSAtari911**Before (v3.10.8)**: 11764231d0edbSAtari9111. Header (clock, weather, stats) 11765231d0edbSAtari9112. **+ ADD EVENT** bar 11766231d0edbSAtari9113. Week grid 11767231d0edbSAtari9114. Event sections 11768231d0edbSAtari911 11769231d0edbSAtari911**After (v3.10.9)**: 11770231d0edbSAtari9111. Header (clock, weather, stats) 11771231d0edbSAtari9112. Week grid (calendar days) 11772231d0edbSAtari9113. **+ ADD EVENT** bar 11773231d0edbSAtari9114. Event sections 11774231d0edbSAtari911 11775231d0edbSAtari911### Benefits: 11776231d0edbSAtari911- Natural reading flow: View calendar → Add event → See events 11777231d0edbSAtari911- Add button positioned between calendar and event list 11778231d0edbSAtari911- Acts as visual separator 11779231d0edbSAtari911- More logical action placement 11780231d0edbSAtari911 11781231d0edbSAtari911## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 11782231d0edbSAtari911- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 11783231d0edbSAtari911- **Changed:** Events now display with single 3px color bar (event's assigned color only) 11784231d0edbSAtari911- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 11785231d0edbSAtari911- **Simplified:** Cleaner visual with one color bar instead of two 11786231d0edbSAtari911- **Improved:** More space for event content without extra bar 11787231d0edbSAtari911 11788231d0edbSAtari911### Visual Changes: 11789231d0edbSAtari911 11790231d0edbSAtari911**Before (v3.10.7)** - Dual color bars: 11791231d0edbSAtari911``` 11792231d0edbSAtari911├─ [Orange][Green] Event Title 11793231d0edbSAtari911├─ [Blue][Purple] Event Title 11794231d0edbSAtari911``` 11795231d0edbSAtari911 11796231d0edbSAtari911**After (v3.10.8)** - Single color bar: 11797231d0edbSAtari911``` 11798231d0edbSAtari911├─ [Green] Event Title ← Only event color! 11799231d0edbSAtari911├─ [Purple] Event Title ← Only event color! 11800231d0edbSAtari911``` 11801231d0edbSAtari911 11802231d0edbSAtari911### Add Bar Changes: 11803231d0edbSAtari911- Added `margin:0` to eliminate gaps 11804231d0edbSAtari911- Now flush against header (no space above) 11805231d0edbSAtari911- Now flush against week grid (no space below) 11806231d0edbSAtari911- Perfect seamless connection 11807231d0edbSAtari911 11808231d0edbSAtari911### Technical Changes: 11809231d0edbSAtari911**renderSidebarEvent()**: 11810231d0edbSAtari911- Removed section color bar (4px) 11811231d0edbSAtari911- Kept only event color bar (3px) 11812231d0edbSAtari911 11813231d0edbSAtari911**showDayEvents() JavaScript**: 11814231d0edbSAtari911- Removed section color bar (4px blue) 11815231d0edbSAtari911- Kept only event color bar (3px) 11816231d0edbSAtari911 11817231d0edbSAtari911**Add Event bar**: 11818231d0edbSAtari911- Added `margin:0` inline style 11819231d0edbSAtari911- Removed all top/bottom margins 11820231d0edbSAtari911 11821231d0edbSAtari911## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 11822231d0edbSAtari911- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 11823231d0edbSAtari911- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 11824231d0edbSAtari911- **Changed:** Add Event bar color from orange to dark green (#006400) 11825231d0edbSAtari911- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 11826231d0edbSAtari911- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 11827231d0edbSAtari911- **Changed:** Add Event bar font size increased from 7px to 9px 11828231d0edbSAtari911- **Changed:** Add Event bar letter spacing increased to 0.5px 11829231d0edbSAtari911- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 11830231d0edbSAtari911 11831231d0edbSAtari911### Color Bar Fix Details: 11832231d0edbSAtari911**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 11833231d0edbSAtari911**Solution**: Applied same fix as clicked day events: 11834231d0edbSAtari911- Changed parent div: `align-items:start` → `align-items:stretch` 11835231d0edbSAtari911- Added `min-height:20px` to parent 11836231d0edbSAtari911- Changed bars: `height:100%` → `align-self:stretch` 11837231d0edbSAtari911- Bars now properly fill vertical space in ALL sections 11838231d0edbSAtari911 11839231d0edbSAtari911### Add Event Bar Changes: 11840231d0edbSAtari911**Before**: 11841231d0edbSAtari911- Background: Orange (#ff9800) 11842231d0edbSAtari911- Text: Black (#000) 11843231d0edbSAtari911- Height: 6px (text cut off) 11844231d0edbSAtari911- Font: 7px 11845231d0edbSAtari911 11846231d0edbSAtari911**After**: 11847231d0edbSAtari911- Background: Dark green (#006400) 11848231d0edbSAtari911- Text: Bright green (#00ff00) with green glow 11849231d0edbSAtari911- Height: 12px (text fully visible) 11850231d0edbSAtari911- Font: 9px 11851231d0edbSAtari911- Hover: Darker green (#004d00) 11852231d0edbSAtari911- Matrix-themed green aesthetic 11853231d0edbSAtari911 11854231d0edbSAtari911## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 11855231d0edbSAtari911- **Fixed:** Event color bars now display correctly in clicked day events 11856231d0edbSAtari911- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 11857231d0edbSAtari911- **Added:** Conflict badge (⚠) appears on right side of conflicting events 11858231d0edbSAtari911- **Updated:** Complete README.md rewrite with full Matrix theme documentation 11859231d0edbSAtari911- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 11860231d0edbSAtari911- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 11861231d0edbSAtari911- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 11862231d0edbSAtari911 11863231d0edbSAtari911### Color Bar Fix: 11864231d0edbSAtari911**Problem**: Bars had `height:100%` but parent had no explicit height 11865231d0edbSAtari911**Solution**: 11866231d0edbSAtari911- Changed to `align-self:stretch` on bars 11867231d0edbSAtari911- Parent uses `align-items:stretch` 11868231d0edbSAtari911- Added `min-height:20px` to parent 11869231d0edbSAtari911- Bars now properly fill vertical space 11870231d0edbSAtari911 11871231d0edbSAtari911### Sorting Change: 11872231d0edbSAtari911**Before**: Timed events first → All-day events last 11873231d0edbSAtari911**After**: All-day events FIRST → Timed events chronologically 11874231d0edbSAtari911 11875231d0edbSAtari911**Example**: 11876231d0edbSAtari911``` 11877231d0edbSAtari911Monday, Feb 5 11878231d0edbSAtari911├─ All Day - Project Deadline ← All-day first 11879231d0edbSAtari911├─ 8:00 AM - Morning Standup ← Earliest time 11880231d0edbSAtari911├─ 10:30 AM - Coffee with Bob 11881231d0edbSAtari911└─ 2:00 PM - Team Meeting ← Latest time 11882231d0edbSAtari911``` 11883231d0edbSAtari911 11884231d0edbSAtari911### Conflict Badge: 11885231d0edbSAtari911- Orange warning triangle (⚠) on right side 11886231d0edbSAtari911- 10px font size 11887231d0edbSAtari911- Only appears if `event.conflict` is true 11888231d0edbSAtari911- Title attribute shows "Time conflict detected" 11889231d0edbSAtari911- Small and unobtrusive 11890231d0edbSAtari911 11891231d0edbSAtari911### README Update: 11892231d0edbSAtari911- Complete rewrite with Matrix theme focus 11893231d0edbSAtari911- Full usage instructions for all features 11894231d0edbSAtari911- Admin interface documentation 11895231d0edbSAtari911- Outlook sync setup guide 11896231d0edbSAtari911- System monitoring details 11897231d0edbSAtari911- Troubleshooting section 11898231d0edbSAtari911- Color scheme reference 11899231d0edbSAtari911- File structure documentation 11900231d0edbSAtari911- Performance tips 11901231d0edbSAtari911- Security notes 11902231d0edbSAtari911- Quick start examples 11903231d0edbSAtari911 119041d05cddcSAtari911## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 119051d05cddcSAtari911- **Added:** Events now sorted by time when clicking week grid days 119061d05cddcSAtari911- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 119071d05cddcSAtari911- **Improved:** Events with times appear first, sorted chronologically 119081d05cddcSAtari911- **Improved:** All-day events appear after timed events 119091d05cddcSAtari911- **Changed:** Add Event bar font size reduced to 7px (from 10px) 119101d05cddcSAtari911- **Changed:** Add Event bar now has 0 padding and fixed 6px height 119111d05cddcSAtari911 119121d05cddcSAtari911### Sorting Logic: 119131d05cddcSAtari911- Events with times sorted by time (earliest first) 119141d05cddcSAtari911- All-day events (no time) appear at the end 119151d05cddcSAtari911- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 119161d05cddcSAtari911- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 119171d05cddcSAtari911 119181d05cddcSAtari911### Add Event Bar Changes: 119191d05cddcSAtari911- **Height**: 6px (was ~12px with padding) 119201d05cddcSAtari911- **Padding**: 0 (was 4px top/bottom) 119211d05cddcSAtari911- **Font Size**: 7px (was 10px) 119221d05cddcSAtari911- **Letter Spacing**: 0.3px (was 0.5px) 119231d05cddcSAtari911- **Line Height**: 6px to match height 119241d05cddcSAtari911- **Vertical Align**: Middle for text centering 119251d05cddcSAtari911 119261d05cddcSAtari911## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 119271d05cddcSAtari911- **Added:** Thin orange "Add Event" bar between header and week grid 119281d05cddcSAtari911- **Added:** Quick access to event creation from sidebar widget 119291d05cddcSAtari911- **Styled:** Sleek design with hover effects and glow 119301d05cddcSAtari911- **Interactive:** Clicks navigate to Manage Events tab in admin 119311d05cddcSAtari911- **Improved:** User workflow for adding events from sidebar 119321d05cddcSAtari911 119331d05cddcSAtari911### Visual Design: 119341d05cddcSAtari911- Orange background (#ff9800) matching Today section color 119351d05cddcSAtari911- 4px top/bottom padding for thin, sleek appearance 119361d05cddcSAtari911- Black text with white text-shadow for visibility 119371d05cddcSAtari911- Hover effect: Darkens to #ff7700 with enhanced glow 119381d05cddcSAtari911- Orange glow effect (box-shadow) matching Matrix theme 119391d05cddcSAtari911- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 119401d05cddcSAtari911 119411d05cddcSAtari911### Technical Changes: 119421d05cddcSAtari911- Added between header close and renderWeekGrid() call 119431d05cddcSAtari911- Inline onclick handler navigates to admin manage tab 119441d05cddcSAtari911- Inline onmouseover/onmouseout for hover effects 119451d05cddcSAtari911- Smooth 0.2s transition on all style changes 119461d05cddcSAtari911 119471d05cddcSAtari911## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 119481d05cddcSAtari911- **Changed:** Update Plugin tab is now the default tab when opening admin 119491d05cddcSAtari911- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 119501d05cddcSAtari911- **Improved:** Clear Cache button now larger and more prominent with helpful description 119511d05cddcSAtari911- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 119521d05cddcSAtari911- **Removed:** Debug console.log statements from day event display 119531d05cddcSAtari911- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 119541d05cddcSAtari911 119551d05cddcSAtari911### UI Changes: 119561d05cddcSAtari911- Update Plugin tab opens by default (was Config/Outlook Sync tab) 119571d05cddcSAtari911- Clear Cache button prominently displayed at top of Update Plugin tab 119581d05cddcSAtari911- Orange ️ button (10px 20px padding) with confirmation dialog 119591d05cddcSAtari911- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 119601d05cddcSAtari911- Success/error messages display on Update Plugin tab after cache clear 119611d05cddcSAtari911- Tab navigation reordered to put Update first 119621d05cddcSAtari911 119631d05cddcSAtari911### Technical Changes: 119641d05cddcSAtari911- Default tab changed from 'config' to 'update' in html() method 119651d05cddcSAtari911- Tab navigation HTML reordered to show Update Plugin tab first 119661d05cddcSAtari911- clearCache() method now redirects with 'update' tab parameter 119671d05cddcSAtari911- Removed Clear Cache button from renderConfigTab() 119681d05cddcSAtari911- Added Clear Cache button to renderUpdateTab() with message display 119691d05cddcSAtari911 119701d05cddcSAtari911## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 119711d05cddcSAtari911- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 119721d05cddcSAtari911- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 119731d05cddcSAtari911- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 119741d05cddcSAtari911- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 119751d05cddcSAtari911 119761d05cddcSAtari911### Technical Changes: 119771d05cddcSAtari911- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 119781d05cddcSAtari911- Events added to weekEvents now include pre-rendered HTML versions 119791d05cddcSAtari911- title_html and description_html fields populated before json_encode() 119801d05cddcSAtari911- JavaScript now receives properly formatted HTML content 119811d05cddcSAtari911 119821d05cddcSAtari911## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 119831d05cddcSAtari911- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 119841d05cddcSAtari911- **Fixed:** HTML event handlers now call correctly sanitized function names 119851d05cddcSAtari911- **Fixed:** Weather temperature now updates correctly in sidebar widget 119861d05cddcSAtari911- **Added:** Weather update function to sidebar widget JavaScript 119871d05cddcSAtari911- **Added:** "Clear Cache" button in admin panel for easy cache refresh 119881d05cddcSAtari911- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 119891d05cddcSAtari911- **Improved:** All tooltip functions now work correctly on system status bars 119901d05cddcSAtari911 119911d05cddcSAtari911### Technical Changes: 119921d05cddcSAtari911- Changed tooltip function names to use $jsCalId instead of $calId 119931d05cddcSAtari911- Changed HTML onmouseover/onmouseout to use $jsCalId 119941d05cddcSAtari911- Added updateWeather() function to sidebar widget 119951d05cddcSAtari911- Added getWeatherIcon() function to sidebar widget 119961d05cddcSAtari911- Added clearCache() method in admin.php 119971d05cddcSAtari911- Added recursiveDelete() helper method in admin.php 119981d05cddcSAtari911- Admin UI now has ️ Clear Cache button alongside Export/Import 119991d05cddcSAtari911 120001d05cddcSAtari911## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 120011d05cddcSAtari911- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 120021d05cddcSAtari911- **Fixed:** Event links and formatting not displaying in clicked day events 120031d05cddcSAtari911- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 120041d05cddcSAtari911- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 120051d05cddcSAtari911- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 120061d05cddcSAtari911- **Improved:** All JavaScript variable names now use valid syntax 120071d05cddcSAtari911- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 120081d05cddcSAtari911 120091d05cddcSAtari911### Technical Changes: 120101d05cddcSAtari911- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 120111d05cddcSAtari911- JavaScript variables now use underscores instead of dashes 120121d05cddcSAtari911- Event HTML rendering preserves DokuWiki formatting 120131d05cddcSAtari911- Fixed "showTooltip_sidebar is not defined" errors 120141d05cddcSAtari911- Fixed "showDayEvents_cal is not defined" errors 120151d05cddcSAtari911 120161d05cddcSAtari911## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 120171d05cddcSAtari911- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 120181d05cddcSAtari911- **Fixed:** Functions now defined BEFORE HTML that uses them 120191d05cddcSAtari911- **Changed:** Consolidated all JavaScript into single comprehensive script block 120201d05cddcSAtari911- **Removed:** ~290 lines of duplicate JavaScript code 120211d05cddcSAtari911- **Added:** Shared state management with `sharedState_[calId]` object 120221d05cddcSAtari911- **Improved:** System tooltip functions now work correctly 120231d05cddcSAtari911- **Improved:** Week grid click events now work correctly 120241d05cddcSAtari911 120251d05cddcSAtari911### Technical Changes: 120261d05cddcSAtari911- Moved all JavaScript to beginning of widget (before HTML) 120271d05cddcSAtari911- Removed duplicate script blocks 120281d05cddcSAtari911- Unified tooltip and stats functions 120291d05cddcSAtari911- Shared latestStats and cpuHistory state 120301d05cddcSAtari911- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 120311d05cddcSAtari911 120321d05cddcSAtari911## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 120331d05cddcSAtari911- **Added:** Dual color bars on events (section color + event color) 120341d05cddcSAtari911- **Added:** Click week grid days to view events (replaced hover tooltips) 120351d05cddcSAtari911- **Added:** Expandable section below week grid for selected day events 120361d05cddcSAtari911- **Added:** Blue theme for selected day section 120371d05cddcSAtari911- **Changed:** Week grid days now clickable instead of tooltips 120381d05cddcSAtari911- **Changed:** Section bar: 4px wide (left) 120391d05cddcSAtari911- **Changed:** Event bar: 3px wide (right) 120401d05cddcSAtari911- **Increased:** Gap between color bars from 3px to 6px 120411d05cddcSAtari911- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 120421d05cddcSAtari911 120431d05cddcSAtari911### Visual Changes: 120441d05cddcSAtari911- Each event shows TWO color bars side-by-side 120451d05cddcSAtari911- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 120461d05cddcSAtari911- Right bar (3px): Individual event's assigned color 120471d05cddcSAtari911- Click any day in week grid to expand event list 120481d05cddcSAtari911- X button to close selected day events 120491d05cddcSAtari911 120501d05cddcSAtari911## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 120511d05cddcSAtari911- **Increased:** Event color bar width from 2px to 3px 120521d05cddcSAtari911- **Increased:** Gap between section and event bars from 3px to 6px 120531d05cddcSAtari911- **Improved:** Event color bars now more visible alongside section bars 120541d05cddcSAtari911- **Note:** Dual color bar system already in place from v3.9.6 120551d05cddcSAtari911 120561d05cddcSAtari911## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 120571d05cddcSAtari911- **Changed:** Date in Important Events moved below event name (was above) 120581d05cddcSAtari911- **Changed:** Section headers now 9px font size (was 10px) 120591d05cddcSAtari911- **Changed:** Section headers now normal case (was ALL CAPS) 120601d05cddcSAtari911- **Changed:** Letter spacing reduced from 0.8px to 0.3px 120611d05cddcSAtari911- **Improved:** More natural reading flow with date below event name 120621d05cddcSAtari911- **Improved:** Cleaner, more subtle section headers 120631d05cddcSAtari911 120641d05cddcSAtari911### Header Changes: 120651d05cddcSAtari911- "TODAY" → "Today" 120661d05cddcSAtari911- "TOMORROW" → "Tomorrow" 120671d05cddcSAtari911- "IMPORTANT EVENTS" → "Important Events" 120681d05cddcSAtari911 120691d05cddcSAtari911## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 120701d05cddcSAtari911- **Redesigned:** Complete overhaul of `sidebar` parameter 120711d05cddcSAtari911- **Added:** Compact week-at-a-glance itinerary view (200px wide) 120721d05cddcSAtari911- **Added:** Live clock widget at top of sidebar 120731d05cddcSAtari911- **Added:** 7-cell week grid showing event bars 120741d05cddcSAtari911- **Added:** Today section with orange header and left border 120751d05cddcSAtari911- **Added:** Tomorrow section with green header and left border 120761d05cddcSAtari911- **Added:** Important Events section with purple header and left border 120771d05cddcSAtari911- **Added:** Admin setting to configure important namespaces 120781d05cddcSAtari911- **Added:** Time conflict badges in sidebar events 120791d05cddcSAtari911- **Added:** Task checkboxes in sidebar events 120801d05cddcSAtari911- **Changed:** Sidebar now optimized for narrow spaces (200px) 120811d05cddcSAtari911- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 120821d05cddcSAtari911 120831d05cddcSAtari911### New Features: 120841d05cddcSAtari911- Clock updates every second showing current time 120851d05cddcSAtari911- Week grid shows Mon-Sun with colored event bars 120861d05cddcSAtari911- Today/Tomorrow sections show full event details 120871d05cddcSAtari911- Important events highlighted in purple (configurable namespaces) 120881d05cddcSAtari911- All badges (conflict, time, etc.) shown in compact format 120891d05cddcSAtari911- Automatic time conflict detection 120901d05cddcSAtari911 120911d05cddcSAtari911## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 120921d05cddcSAtari911- **Removed:** 16 unused/debug/backup files 120931d05cddcSAtari911- **Removed:** 69 console.log() debug statements 120941d05cddcSAtari911- **Removed:** 3 orphaned object literals from console.log removal 120951d05cddcSAtari911- **Removed:** Temporary comments and markers 120961d05cddcSAtari911- **Fixed:** JavaScript syntax errors from cleanup 120971d05cddcSAtari911- **Improved:** Code quality and maintainability 120981d05cddcSAtari911- **Improved:** Reduced plugin size by removing unnecessary files 120991d05cddcSAtari911- **Status:** Production-ready, fully cleaned codebase 121001d05cddcSAtari911 121011d05cddcSAtari911### Files Removed: 121021d05cddcSAtari911- style.css.backup, script.js.backup 121031d05cddcSAtari911- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 121041d05cddcSAtari911- debug_events.php, debug_html.php, cleanup_events.php 121051d05cddcSAtari911- fix_corrupted_json.php, fix_wildcard_namespaces.php 121061d05cddcSAtari911- find_outlook_duplicates.php, update_namespace.php 121071d05cddcSAtari911- validate_calendar_json.php, admin.js 121081d05cddcSAtari911- test_date_field.html 121091d05cddcSAtari911 121101d05cddcSAtari911## Version 3.7.5 (2026-02-05) 121111d05cddcSAtari911- **Fixed:** PHP syntax error (duplicate foreach loop removed) 121121d05cddcSAtari911- **Fixed:** Time variable handling in grace period logic 121131d05cddcSAtari911 121141d05cddcSAtari911## Version 3.7.4 (2026-02-05) 121151d05cddcSAtari911- **Added:** 15-minute grace period for timed events 121161d05cddcSAtari911- **Changed:** Events with times now stay visible for 15 minutes after their start time 121171d05cddcSAtari911- **Changed:** Prevents events from immediately disappearing when they start 121181d05cddcSAtari911- **Improved:** Better user experience for ongoing events 121191d05cddcSAtari911- **Fixed:** Events from earlier today now properly handled with grace period 121201d05cddcSAtari911 121211d05cddcSAtari911## Version 3.7.3 (2026-02-05) 121221d05cddcSAtari911- **Changed:** Complete redesign of cleanup section for compact, sleek layout 121231d05cddcSAtari911- **Changed:** Radio buttons now in single row at top 121241d05cddcSAtari911- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 121251d05cddcSAtari911- **Changed:** Inline controls - no more grid layout or wrapper boxes 121261d05cddcSAtari911- **Changed:** Namespace filter now compact single-line input 121271d05cddcSAtari911- **Changed:** Smaller buttons and tighter spacing throughout 121281d05cddcSAtari911- **Improved:** More professional, space-efficient design 121291d05cddcSAtari911 121301d05cddcSAtari911## Version 3.7.2 (2026-02-04) 121311d05cddcSAtari911- **Fixed:** Strange boxes under cleanup options - now properly hidden 121321d05cddcSAtari911- **Changed:** Unified color scheme across all admin sections 121331d05cddcSAtari911- **Changed:** Green (#00cc07) - Primary actions and main theme 121341d05cddcSAtari911- **Changed:** Orange (#ff9800) - Warnings and cleanup features 121351d05cddcSAtari911- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 121361d05cddcSAtari911- **Improved:** Consistent visual design throughout admin interface 121371d05cddcSAtari911 121381d05cddcSAtari911## Version 3.7.1 (2026-02-04) 121391d05cddcSAtari911- **Fixed:** Cleanup section background changed from orange to white 121401d05cddcSAtari911- **Fixed:** Event cleanup now properly scans all calendar directories 121411d05cddcSAtari911- **Added:** Debug info display when preview finds no events 121421d05cddcSAtari911- **Improved:** Better directory scanning logic matching other features 121431d05cddcSAtari911 121441d05cddcSAtari911## Version 3.7.0 (2026-02-04) 121451d05cddcSAtari911- **Added:** Event cleanup feature in Events Manager 121461d05cddcSAtari911- **Added:** Delete old events by age (months/years old) 121471d05cddcSAtari911- **Added:** Delete events by status (completed tasks, past events) 121481d05cddcSAtari911- **Added:** Delete events by date range 121491d05cddcSAtari911- **Added:** Namespace filter for targeted cleanup 121501d05cddcSAtari911- **Added:** Preview function to see what will be deleted 121511d05cddcSAtari911- **Added:** Automatic backup creation before cleanup 121521d05cddcSAtari911- **Changed:** Reduced changelog viewer height to 100px (was 400px) 121531d05cddcSAtari911 121541d05cddcSAtari911## Version 3.6.3 (2026-02-04) 121551d05cddcSAtari911- **Fixed:** Conflict tooltips now work properly after navigating between months 121561d05cddcSAtari911- **Added:** Changelog display in Update Plugin tab 121571d05cddcSAtari911- **Added:** CHANGELOG.md file with version history 121581d05cddcSAtari911- **Improved:** Changelog shows last 10 versions with color-coded change types 121591d05cddcSAtari911- **Fixed:** Removed debug console.log statements 121601d05cddcSAtari911 121611d05cddcSAtari911## Version 3.6.2 (2026-02-04) 121621d05cddcSAtari911- **Fixed:** Month title now updates correctly when navigating between months 121631d05cddcSAtari911- **Changed:** All eventpanel header elements reduced by 10% for more compact design 121641d05cddcSAtari911- **Changed:** Reduced header height from 78px to 70px 121651d05cddcSAtari911 121661d05cddcSAtari911## Version 3.6.1 (2026-02-04) 121671d05cddcSAtari911- **Changed:** Complete redesign of eventpanel header with practical two-row layout 121681d05cddcSAtari911- **Fixed:** Improved layout for narrow widths (~500px) 121691d05cddcSAtari911- **Changed:** Simplified color scheme (removed purple gradient) 121701d05cddcSAtari911 121711d05cddcSAtari911## Version 3.6.0 (2026-02-04) 121721d05cddcSAtari911- **Changed:** Redesigned eventpanel header with gradient background 121731d05cddcSAtari911- **Changed:** Consolidated multiple header rows into compact single-row design 121741d05cddcSAtari911 121751d05cddcSAtari911## Version 3.5.1 (2026-02-04) 121761d05cddcSAtari911- **Changed:** Moved event search bar into header row next to + Add button 121771d05cddcSAtari911- **Improved:** More compact UI with search integrated into header 121781d05cddcSAtari911 121791d05cddcSAtari911## Version 3.5.0 (2026-02-04) 121801d05cddcSAtari911- **Added:** Event search functionality in sidebar and eventpanel 121811d05cddcSAtari911- **Added:** Real-time filtering as you type 121821d05cddcSAtari911- **Added:** Clear button (✕) appears when searching 121831d05cddcSAtari911- **Added:** "No results" message when search returns nothing 121841d05cddcSAtari911 121851d05cddcSAtari911## Version 3.4.7 (2026-02-04) 121861d05cddcSAtari911- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 121871d05cddcSAtari911- **Fixed:** Removed debug logging from console 121881d05cddcSAtari911- **Changed:** Updated export version number to match plugin version 121891d05cddcSAtari911 121901d05cddcSAtari911## Version 3.4.6 (2026-02-04) 121911d05cddcSAtari911- **Added:** Debug logging to diagnose conflict detection issues 121921d05cddcSAtari911- **Development:** Extensive console logging for troubleshooting 121931d05cddcSAtari911 121941d05cddcSAtari911## Version 3.4.5 (2026-02-04) 121951d05cddcSAtari911- **Added:** Debug logging to showDayPopup and conflict detection 121961d05cddcSAtari911- **Development:** Added logging to trace conflict detection flow 121971d05cddcSAtari911 121981d05cddcSAtari911## Version 3.4.4 (2026-02-04) 121991d05cddcSAtari911- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 122001d05cddcSAtari911- **Fixed:** Conflict tooltips now appear on hover 122011d05cddcSAtari911- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 122021d05cddcSAtari911- **Added:** Conflict badges in both future and past events sections 122031d05cddcSAtari911 122041d05cddcSAtari911## Version 3.4.3 (2026-02-04) 122051d05cddcSAtari911- **Added:** Custom styled conflict tooltips with hover functionality 122061d05cddcSAtari911- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 122071d05cddcSAtari911- **Improved:** Beautiful tooltip design with orange header and clean formatting 122081d05cddcSAtari911 122091d05cddcSAtari911## Version 3.4.2 (2026-02-04) 122101d05cddcSAtari911- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 122111d05cddcSAtari911 122121d05cddcSAtari911## Version 3.4.1 (2026-02-04) 122131d05cddcSAtari911- **Fixed:** End time field now properly saves to database 122141d05cddcSAtari911- **Fixed:** End time dropdown now filters to show only valid times after start time 122151d05cddcSAtari911- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 122161d05cddcSAtari911- **Improved:** End time auto-suggests +1 hour when start time selected 122171d05cddcSAtari911 122181d05cddcSAtari911## Version 3.4.0 (2026-02-04) 122191d05cddcSAtari911- **Added:** End time support for events (start and end times) 122201d05cddcSAtari911- **Added:** Automatic time conflict detection 122211d05cddcSAtari911- **Added:** Conflict warning badges (⚠️) on events with overlapping times 122221d05cddcSAtari911- **Added:** Conflict tooltips showing which events conflict 122231d05cddcSAtari911- **Added:** Visual conflict indicators with pulse animation 122241d05cddcSAtari911- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 122251d05cddcSAtari911 122261d05cddcSAtari911## Version 3.3.77 (2026-02-04) 122271d05cddcSAtari911- **Fixed:** Namespace badge onclick handlers restored after clearing filter 122281d05cddcSAtari911- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 122291d05cddcSAtari911 122301d05cddcSAtari911## Version 3.3.76 (2026-02-04) 122311d05cddcSAtari911- **Fixed:** Namespace badges now clickable after clearing namespace filter 122321d05cddcSAtari911 122331d05cddcSAtari911## Version 3.3.75 (2026-02-04) 122341d05cddcSAtari911- **Fixed:** Form resubmission warnings eliminated 122351d05cddcSAtari911- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 122361d05cddcSAtari911- **Changed:** All admin redirects now use absolute URLs 122371d05cddcSAtari911 122381d05cddcSAtari911## Version 3.3.74 (2026-02-04) 122391d05cddcSAtari911- **Fixed:** Clearing namespace filter now restores original namespace instead of default 122401d05cddcSAtari911- **Added:** data-original-namespace attribute to preserve initial namespace setting 122411d05cddcSAtari911- **Improved:** Console logging for namespace filter debugging 122421d05cddcSAtari911 122431d05cddcSAtari911## Version 3.3.73 (2026-02-03) 122441d05cddcSAtari911- **Added:** Dynamic namespace filtering banner with clear button 122451d05cddcSAtari911- **Fixed:** JavaScript function accessibility issues 122461d05cddcSAtari911- **Fixed:** Namespace badge click handlers in event lists 122471d05cddcSAtari911- **Improved:** Persistent namespace filtering across views 122481d05cddcSAtari911 122491d05cddcSAtari911## Earlier Versions 122501d05cddcSAtari911See previous transcripts for complete history through v3.3.73, including: 122511d05cddcSAtari911- Recurring events with Outlook sync 122521d05cddcSAtari911- Multi-namespace support 122531d05cddcSAtari911- Event categories and mapping 122541d05cddcSAtari911- Backup/restore functionality 122551d05cddcSAtari911- System statistics bar 122561d05cddcSAtari911- Namespace selector with fuzzy search 122571d05cddcSAtari911- Events Manager with import/export 122581d05cddcSAtari911- And much more... 12259