1# Calendar Plugin Changelog 2 3## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 4 5- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 6- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 7- **Audited:** style.css (3,218 lines) — balanced braces confirmed 8- **Audited:** All admin manage tab action handlers verified functional (13 actions) 9- **New:** Fresh README.md for GitHub with complete documentation 10- **Includes all v5.5.x fixes:** 11 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 12 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 13 - Conflict badges on past events after AJAX navigation 14 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 15 16## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 17 18- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 19- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 20- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 21- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 22- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 23- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 24- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 25- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 26- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 27- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 28- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 29- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 30- **Removed:** Stale "NEW!" comment from Events Manager section 31 32## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 33 34- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 35- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 36- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 37- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 38- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 39- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 40- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 41- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 42- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 43- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 44 45## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 46 47- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 48- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 49- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 50- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 51- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 52- **Changed:** Week grid JS theme colors now use actual $themeStyles values 53 54## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 55 56- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 57 58## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 59 60- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 61- **Fixed:** Week grid conflict tooltips also fixed (same issue) 62- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 63- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 64 65## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 66 67- **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 69## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 70 71- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 72- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 73 74## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 75 76- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 77- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 78- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 79- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 80 81## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 82 83- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 84- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 85- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 86- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 87- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 88- **Added:** ESC key now also closes day popups and conflict tooltips 89- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 90 91## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 92 93- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 94- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 95- **Refactored:** style.css is now the single source of truth for all visual styling 96- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 97- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 98- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 99- **Added:** CSS variable injection for {{eventlist panel}} containers 100- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 101- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 102- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 103- **Added:** Detailed CSS variable reference table in style.css header comment 104- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 105- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 106- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 107- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 108- **Removed:** $isWikiTheme branching from PHP render path 109 110## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 111 112### Added: Hearts in Explosions! 113- **Added:** 8-12 pink hearts in each click explosion 114- **Added:** Random sizes (12-28px) and directions 115- **Result:** Extra love in every click! 116 117### Fixed: Background CSS Property for Dark Mode Readers 118- **Fixed:** Added `background: transparent` to CSS (was completely removed) 119- **Fixed:** Now CSS readers can detect and modify background property 120- **Why:** Inline styles override transparent, but CSS readers can now see the property 121- **Result:** Dark mode plugins can now change calendar backgrounds! 122 123### The CSS Problem 124 125**Why backgrounds weren't changing with dark mode readers**: 126 127**Before (v5.3.5)**: 128```css 129.calendar-compact-grid tbody td { 130 /* background removed - set via inline style */ 131 border: 1px solid... 132} 133``` 134 135**Problem**: CSS property doesn't exist! 136- Dark mode readers look for `background` property in CSS 137- Can't override what doesn't exist 138- Inline styles work, but readers can't modify them 139 140**After (v5.3.6)**: 141```css 142.calendar-compact-grid tbody td { 143 background: transparent; /* Now exists! */ 144 border: 1px solid... 145} 146``` 147 148**Solution**: 149- Property exists in CSS 150- Dark mode readers can override it 151- Inline styles still override transparent 152- Everyone wins! 153 154### What's Fixed 155 156**Elements now have background property**: 157- `.calendar-compact-grid tbody td` ✓ 158- `.calendar-compact-grid tbody td:hover` ✓ 159- `.event-compact-item` ✓ 160- `.event-compact-item:hover` ✓ 161 162**How it works**: 1631. CSS sets `background: transparent` (default) 1642. Inline styles set actual color (overrides transparent) 1653. Dark mode readers can override CSS property 1664. Works for everyone! 167 168### Hearts in Explosion 169 170**Click anywhere → Hearts explode!** 171 172**Heart details**: 173- Count: 8-12 per explosion (random) 174- Size: 12-28px (random variety) 175- Emoji: (pink heart) 176- Direction: Random 360° 177- Speed: 60-140px travel 178- Duration: 0.8-1.2s 179- z-index: 9999999 (always visible) 180 181**Combined with**: 182- 25 glowing particles 183- 40 pixel sparkles 184- Bright flash 185- **Total: 73-77 elements!** 186 187### Visual Result 188 189**Click explosion**: 190``` 191 ✦ • ✦ 192 • • 193✦ • ! • ✦ 194 • • 195 ✦ • ✦ 196 197Hearts + Particles + Pixels! 198``` 199 200**Dark mode now works**: 201```css 202/* Dark mode reader can now do this: */ 203.calendar-compact-grid tbody td { 204 background: #000 !important; /* Works! */ 205} 206``` 207 208### Why Transparent Works 209 210**CSS Cascade**: 2111. CSS: `background: transparent` (lowest priority) 2122. Inline style: `background: #f5f5f5` (overrides CSS) 2133. Dark mode CSS: `background: #000 !important` (overrides inline) 214 215**Perfect solution!** ✓ 216 217## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 218 219### Fixed: Particles Now Appear Above All Dialogs! 220- **Fixed:** Increased z-index to 9999999 for all particles 221- **Fixed:** Particles now visible above event dialogs, month picker, etc. 222- **Result:** Cursor effects and explosions always visible! 223 224### The Z-Index Problem 225 226**Before (v5.3.4)**: 227- Particles: z-index 9999 228- Dialogs: z-index 10000-999999 229- **Particles hidden behind dialogs!** 230 231**After (v5.3.5)**: 232- Particles: z-index 9999999 233- Trail: z-index 9999998 234- Pixels: z-index 9999997 235- **Particles ALWAYS on top!** 236 237### What's Fixed 238 239✅ **Main particles** (explosion orbs) 240✅ **Cursor trail** (glowing dots) 241✅ **Pixel sparkles** (tiny bright stars) 242✅ **Flash effect** (click burst) 243 244**All now appear above**: 245- Event dialog popups 246- Month picker 247- Day popups 248- Any modal overlays 249 250### Visual Result 251 252**Moving cursor over dialog**: 253``` 254┌─────────────────────┐ 255│ Event Dialog │ 256│ ✦ • ✦ │ ← Sparkles visible! 257│ → ✦ │ ← Cursor trail visible! 258│ • ✦ • │ 259└─────────────────────┘ 260``` 261 262**Clicking on dialog**: 263``` 264┌─────────────────────┐ 265│ ✦ • ✦ • ✦ │ 266│ • ! • │ ← Explosion visible! 267│ ✦ • ✦ • ✦ │ 268└─────────────────────┘ 269``` 270 271**Perfect visibility everywhere!** ✨ 272 273## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 274 275### Fixed: Month Picker Now Themed! 276- **Fixed:** Jump to Month dialog now uses theme colors 277- **Fixed:** Dialog background, borders, text all themed 278- **Fixed:** Select dropdowns use theme colors 279- **Fixed:** Buttons use theme accent colors 280- **Result:** Month picker matches calendar theme! 281 282### Fixed: Cursor Effects Work in Dialogs! 283- **Fixed:** Cursor trail now works when hovering over dialogs 284- **Fixed:** Click explosions work when clicking inside dialogs 285- **Technical:** Changed to capture phase event listeners 286- **Result:** Effects work EVERYWHERE now! 287 288### Month Picker Theming 289 290**Before (v5.3.3)**: 291- White background (hardcoded) 292- Black text (hardcoded) 293- No theme integration 294- Looked out of place 295 296**After (v5.3.4)**: 297- Dialog background: `theme.bg` 298- Dialog border: `theme.border` 299- Text color: `theme.text_primary` 300- Dropdowns: `theme.cell_bg` + `theme.text_primary` 301- Cancel button: `theme.cell_bg` 302- Go button: `theme.border` (accent color) 303 304**Fully integrated!** ✅ 305 306--- 307 308### Theme Examples 309 310**Matrix Theme**: 311``` 312┌─────────────────────────┐ 313│ Jump to Month │ ← Dark bg, green border 314│ [February ▼] [2026 ▼] │ ← Dark dropdowns 315│ [Cancel] [Go] │ ← Green "Go" button 316└─────────────────────────┘ 317``` 318 319**Pink Theme**: 320``` 321┌─────────────────────────┐ 322│ Jump to Month │ ← Dark bg, pink border 323│ [February ▼] [2026 ▼] │ ← Dark dropdowns 324│ [Cancel] [Go] │ ← Pink "Go" button 325└─────────────────────────┘ 326With sparkle effects! ✨ 327``` 328 329**Professional Theme**: 330``` 331┌─────────────────────────┐ 332│ Jump to Month │ ← Clean bg, blue border 333│ [February ▼] [2026 ▼] │ ← Clean dropdowns 334│ [Cancel] [Go] │ ← Blue "Go" button 335└─────────────────────────┘ 336``` 337 338--- 339 340### Dialog Cursor Fix 341 342**The Problem**: 343Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 344 345**The Solution**: 346Use **capture phase** event listeners: 347```javascript 348// Before (bubbling phase) 349document.addEventListener('click', handler) 350 351// After (capture phase) 352document.addEventListener('click', handler, true) 353 ↑ 354 Capture phase! 355``` 356 357**Capture phase runs BEFORE stopPropagation!** 358 359--- 360 361### Now Works Everywhere 362 363✅ **Calendar area** 364✅ **Event dialogs** 365✅ **Month picker dialog** 366✅ **Day popup dialogs** 367✅ **Anywhere on screen** 368 369**No more blocked effects!** 370 371--- 372 373### Technical Details 374 375**Event phases**: 376``` 3771. Capture phase ← We listen here now! 3782. Target phase 3793. Bubbling phase ← stopPropagation blocks this 380``` 381 382**By using capture phase**: 383- Events caught before stopPropagation 384- Works in all dialogs 385- No conflicts with dialog logic 386 387--- 388 389### All Dialogs Checked 390 391✅ **Month picker** - Now themed! 392✅ **Event dialog** - Already themed 393✅ **Day popup** - Already themed 394 395**Everything consistent!** 396 397--- 398 399## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 400 401### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 402- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 403- **Added:** 40 pixel sparkles in click explosions 404- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 405- **Result:** Maximum sparkle effect! 406 407### Tiny Pixel Sparkles 408 409**3-6 tiny bright pixels appear with each cursor movement!** 410 411**Characteristics**: 412- Size: 1-2px (single pixel appearance!) 413- Colors: Bright neon whites and pinks 414 - Pure white (#fff) - 40% chance 415 - Hot pink (#ff1493) 416 - Pink (#ff69b4) 417 - Light pink (#ffb6c1) 418 - Soft pink (#ff85c1) 419- Glow: Triple-layer shadow (intense!) 420- Spawn: Random 30px radius around cursor 421- Animations: 422 - 50% twinkle in place 423 - 50% float upward 424 425**Creates a cloud of sparkles around your cursor!** 426 427--- 428 429### Click Explosion Enhanced 430 431**Now with 40 EXTRA pixel sparkles!** 432 433**Click anywhere → BIG BOOM**: 434- 25 main glowing particles (6-10px) 435- **40 tiny pixel sparkles (1-2px)** ← NEW! 436- Bright white flash 437- Total: 65+ visual elements! 438 439**Pixel sparkles in explosion**: 440- Shoot outward in all directions 441- Random distances (30-110px) 442- Multiple bright colors 443- Some twinkle, some explode 444- Creates stellar effect! 445 446--- 447 448### Entire Screen Coverage 449 450**Effects now work EVERYWHERE!** 451 452**Before (v5.3.2)**: 453- Only inside calendar viewport 454- Limited to calendar area 455 456**After (v5.3.3)**: 457- Works on entire screen! ✓ 458- Cursor trail follows everywhere 459- Click explosions anywhere 460- Used `position: fixed` + `clientX/Y` 461 462**Move anywhere on the page for sparkles!** 463 464--- 465 466### Visual Effect 467 468**Cursor movement**: 469``` 470 • ✦ • ← Tiny pixels 471 • ✦ • ← Glowing trail 472✦ • → • ✦ ← Cursor 473 • ✦ • ← Mixed sizes 474 • ✦ • ← Sparkle cloud 475``` 476 477**Click explosion**: 478``` 479 ✦ • ✦ • ✦ 480 ✦ • • ✦ 481✦ • ! • ✦ 482 ✦ • • ✦ 483 ✦ • ✦ • ✦ 484 48565+ particles total! 486``` 487 488--- 489 490### Sparkle Details 491 492**Trail Pixels** (3-6 per movement): 493- Size: 1-2px 494- Spawn rate: Every 40ms 495- Spread: 30px radius 496- Duration: 0.6-0.8s 497- 50% twinkle, 50% float 498 499**Explosion Pixels** (40 total): 500- Size: 1-3px 501- Spread: 30-110px radius 502- Duration: 0.4-0.8s 503- All directions 504- Intense glow 505 506**Main Particles** (25 total): 507- Size: 4-10px 508- Spread: 50-150px 509- Full color palette 510- Original firework effect 511 512--- 513 514### Color Distribution 515 516**Pixel sparkles favor white**: 517- 40% pure white (#fff) - brightest! 518- 60% pink shades - variety 519 520**Creates brilliant sparkle effect!** 521 522--- 523 524### Performance 525 526**Still optimized**: 527- Trail: 30ms throttle 528- Pixels: 40ms throttle 529- Auto-cleanup 530- Hardware accelerated 531- Smooth 60fps 532 533**Lots of sparkles, zero lag!** 534 535--- 536 537### Full-Screen Magic 538 539**Pink theme calendar detected**: 540```javascript 541if (pink calendar exists) { 542 Enable effects for ENTIRE SCREEN 543 Not just calendar area 544} 545``` 546 547**Works everywhere on page!** ✨ 548 549--- 550 551## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 552 553### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 554- **Removed:** Emoji sparkle images (✨) 555- **Added:** Glowing pink particle trail following cursor 556- **Added:** FIREWORKS explosion on click! 557- **Result:** Beautiful glowing effects, not emoji! 558 559### Glowing Cursor Trail 560 561**Pink glowing dots follow your cursor!** 562- Small glowing pink orbs (8px) 563- Radial gradient glow effect 564- Multiple box-shadows for depth 565- Fade out smoothly (0.5s) 566- Throttled to 30ms for smoothness 567 568``` 569 • • 570 • → • ← Your cursor 571 • • 572``` 573 574**Not emoji - actual glowing particles!** 575 576--- 577 578### Click Fireworks! 579 580**Click anywhere on the calendar → BOOM!** 581 582**20 pink particles explode outward!** 583- Radial burst pattern (360° coverage) 584- Random speeds (50-150px travel) 585- 4 shades of pink: 586 - Hot pink (#ff1493) 587 - Pink (#ff69b4) 588 - Light pink (#ff85c1) 589 - Very light pink (#ffc0cb) 590- Random sizes (4-10px) 591- Individual glowing halos 592- Smooth explosion animation 593 594**Plus a bright flash at click point!** 595- 30px radius glow 596- Intense pink flash 597- Fades quickly (0.3s) 598 599--- 600 601### Visual Effect 602 603**Cursor movement**: 604``` 605 • 606 • • • 607 • → • ← Glowing trail 608 • • • 609 • 610``` 611 612**Click explosion**: 613``` 614 • • • 615 • • 616 • BOOM! • ← 20 particles 617 • • 618 • • • 619``` 620 621**All particles glow with pink halos!** 622 623--- 624 625### Particle Details 626 627**Trail Particles**: 628- Size: 8x8px 629- Color: Pink radial gradient 630- Shadow: 10px + 20px glow layers 631- Duration: 0.5s fade 632- Rate: 30ms throttle 633 634**Explosion Particles**: 635- Size: 4-10px (random) 636- Colors: 4 pink shades (random) 637- Shadow: 10px + 20px glow (matches color) 638- Duration: 0.6-1.0s (random) 639- Pattern: Perfect circle burst 640 641**Flash Effect**: 642- Size: 30x30px 643- Color: Bright hot pink 644- Shadow: 30px + 50px mega-glow 645- Duration: 0.3s instant fade 646 647--- 648 649### Performance 650 651**Optimized for smoothness**: 652- Trail throttled to 30ms 653- Auto-cleanup after animations 654- CSS hardware acceleration 655- No memory leaks 656- Smooth 60fps 657 658**Won't slow you down!** 659 660--- 661 662### Comparison 663 664**Before (v5.3.1)**: 665- ✨ Emoji sparkle images 666- Static unicode characters 667- Limited visual impact 668 669**After (v5.3.2)**: 670- Glowing pink particles 671- Radial gradients + shadows 672- Beautiful firework explosions 673- Much more impressive! 674 675--- 676 677### Only Pink Theme 678 679**These effects only appear**: 680- On `.calendar-theme-pink` elements 681- Other themes unaffected 682- Pure pink magic! 683 684--- 685 686## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 687 688### ✨ Added: MySpace-Style Sparkle Trail! 689- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 690- **Toned down:** Reduced glow effects for better taste 691- **Added:** Sparkles appear on cell hover 692- **Added:** Sparkles on event hover (left and right sides!) 693- **Added:** Sparkles on today's cell corners 694- **Added:** Sparkles on navigation buttons 695- **Added:** Sparkles in calendar header 696- **Result:** Pure nostalgic MySpace magic! ✨ 697 698### MySpace Sparkle Cursor Trail 699 700**The classic effect from 2006!** 701- Sparkles follow your cursor as you move 702- Random sizes (12-22px) 703- Random slight offsets for natural feel 704- Float up and fade out animation 705- Throttled to 50ms (smooth, not laggy) 706- Only on pink theme calendars 707 708``` 709 ✨ 710 ✨ ✨ 711✨ → ✨ (cursor trail) 712 ✨ ✨ 713 ✨ 714``` 715 716**Pure nostalgia!** 717 718--- 719 720### Sparkles Everywhere 721 722**Calendar cells**: 723- Hover over any day → ✨ floats up 724- Smooth 1.5s animation 725- Centered sparkle 726 727**Event items**: 728- Hover → ✨ on left side 729- Hover → ✨ on right side 730- Staggered animations (0.4s delay) 731- Continuous twinkling 732 733**Today's cell**: 734- ✨ in top-right corner (continuous) 735- ✨ in bottom-left corner (offset timing) 736- Always sparkling! 737 738**Navigation buttons**: 739- Hover on < or > → ✨ appears top-right 740- One-time float animation 741 742**Calendar header**: 743- ✨ on left side (continuous) 744- ✨ on right side (offset 1s) 745- Always twinkling 746 747--- 748 749### Toned Down Glows 750 751**Before (v5.3.0)**: TOO MUCH GLOW! 752- 50px shadows 753- 4-layer effects 754- Overwhelming 755 756**After (v5.3.1)**: Just right! 757- 8-15px max shadows (subtle) 758- 2-layer effects 759- Professional with personality 760 761**Glow reductions**: 762- Today shimmer: 35px → 12px 763- Today hover: 50px → 15px 764- Event glow: 18px → 6px 765- Badge pulse: 25px → 8px 766- Container glow: 20px → 8px 767 768**Much more tasteful!** 769 770--- 771 772### Sparkle Animations 773 774**sparkle-twinkle** (0.8s): 775``` 776Opacity: 0 → 1 → 1 → 0 777Scale: 0 → 1 → 1 → 0 778Rotation: 0° → 180° → 360° 779``` 780 781**sparkle-float** (1.5s): 782``` 783Moves up: 0px → -50px 784Opacity: 0 → 1 → 1 → 0 785Scale: 0 → 1 → 0.8 → 0 786``` 787 788**Pure MySpace magic!** ✨ 789 790--- 791 792### Where Sparkles Appear 793 794✅ **Cursor trail** (continuous while moving) 795✅ **Calendar cells** (on hover) 796✅ **Event items** (on hover, left + right) 797✅ **Today's cell** (continuous, corners) 798✅ **Navigation buttons** (on hover) 799✅ **Calendar header** (continuous, sides) 800 801**Sparkles EVERYWHERE!** ✨✨✨ 802 803--- 804 805### Performance 806 807**Cursor trail**: 808- Throttled to 50ms 809- Auto-cleanup after 1s 810- No memory leaks 811- Smooth 60fps 812 813**CSS animations**: 814- Hardware accelerated 815- No JavaScript overhead (except cursor) 816- Efficient transforms 817 818**Won't slow down your browser!** 819 820--- 821 822### Pure Nostalgia 823 824**Remember MySpace profiles?** 825- Glitter graphics ✨ 826- Sparkle cursors ✨ 827- Auto-play music (ok, we didn't add that) 828- Animated GIF backgrounds 829- Comic Sans everywhere 830 831**We brought back the sparkles!** ✨ 832 833--- 834 835### Theme Comparison 836 837**Other themes**: Professional and clean 838**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 839 840**Only pink theme gets the magic!** 841 842--- 843 844## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 845 846### Added: Pink Theme Gets BLING! 847- **Added:** Shimmering animation for today's cell 848- **Added:** Sparkling text effect on today's date 849- **Added:** Glowing pulse for event bars 850- **Added:** Gradient shimmer on headers 851- **Added:** Extra glow on hover effects 852- **Added:** Pulsing urgent badge for past due items 853- **Result:** Pink theme is now FABULOUS! ✨ 854 855### Shimmer Effects 856 857**Today's Cell**: 858- Continuous shimmer animation (2 second loop) 859- Multi-layer glow effect 860- Pink and hot pink overlapping shadows 861- Pulses from subtle to intense 862- Extra sparkle on hover 863 864**Today's Date Number**: 865- Sparkle animation (1.5 second loop) 866- Text shadow glow effect 867- Slight scale pulse (100% → 105%) 868- Pink to hot pink shadow transition 869 870### Glow Effects 871 872**Event Bars**: 873- Continuous glow pulse (2 second loop) 874- Uses event's own color 875- Adds pink accent glow layer 876- Creates depth and dimension 877 878**Event Items**: 879- Subtle base glow 880- Enhanced glow on hover 881- Slight slide animation on hover 882- Professional yet playful 883 884### Gradient Shimmer 885 886**Headers**: 887- Animated gradient background 888- 3-color pink gradient flow 889- Smooth 3-second animation 890- Creates movement and life 891- Applies to calendar header and event list header 892 893### Badge Effects 894 895**TODAY Badge**: 896- Sparkle animation 897- Synchronized with today's date 898- Extra prominence 899 900**PAST DUE Badge**: 901- Urgent pulsing effect (1 second loop) 902- Orange glow intensifies 903- Draws attention to urgent items 904- Faster pulse for urgency 905 906### Container Bling 907 908**Main Container**: 909- Multi-layer pink glow 910- Soft outer shadow 911- Creates floating effect 912- Subtle but elegant 913 914### Animation Details 915 916**pink-shimmer** (2s loop): 917``` 918Start: Subtle 5px glow 919Peak: Intense 35px multi-layer glow 920End: Back to subtle 921``` 922 923**pink-sparkle** (1.5s loop): 924``` 925Start: Base glow + scale 1.0 926Peak: Intense glow + scale 1.05 927End: Back to base 928``` 929 930**pink-glow-pulse** (2s loop): 931``` 932Start: Small glow (3px, 6px) 933Peak: Large glow (6px, 12px, 18px) 934End: Back to small 935``` 936 937**pink-gradient-shimmer** (3s loop): 938``` 939Gradient flows across element 940Creates wave effect 941Smooth continuous motion 942``` 943 944**pink-pulse-urgent** (1s loop - faster!): 945``` 946Start: Orange glow 5px 947Peak: Orange glow 25px (intense) 948End: Back to 5px 949``` 950 951### Visual Experience 952 953**Today's Cell**: 954``` 955┌──┬──┬──┬──┬──┬──┬──┐ 956│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 957│ │ │[9]│ │ │ │ │ ← Sparkles 958│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 959└──┴──┴──┴──┴──┴──┴──┘ 960``` 961 962**Event Bars**: 963``` 964━━━━━━━ ← Glows and pulses 965━━━━━━━ ← Each bar animated 966━━━━━━━ ← Creates rhythm 967``` 968 969**Headers**: 970``` 971╔═════════════════════╗ 972║ ~~~~~~~~~~ ║ ← Gradient flows 973║ February 2026 ║ ← Shimmer effect 974╚═════════════════════╝ 975``` 976 977### Theme Comparison 978 979**Before (v5.2.8)**: 980- Pink colors 981- Static elements 982- Standard shadows 983 984**After (v5.3.0)**: 985- Pink colors ✓ 986- Animated shimmer ✨ 987- Sparkling effects 988- Glowing pulses ✨ 989- Moving gradients 990- BLING! 991 992### Performance 993 994**All animations**: 995- Hardware accelerated (transform, opacity) 996- Smooth 60fps 997- CSS animations (no JavaScript) 998- Minimal CPU usage 999- Disabled in reduced-motion preference 1000 1001### Only for Pink Theme 1002 1003**Effects only apply when**: 1004```css 1005.calendar-theme-pink 1006``` 1007 1008**Other themes unaffected**: 1009- Matrix stays Matrix 1010- Professional stays Professional 1011- Purple stays Purple 1012- Wiki stays clean 1013 1014**Pink gets all the bling!** ✨ 1015 1016### Use Cases 1017 1018**Perfect for**: 1019- Celebrating occasions 1020- Fun team calendars 1021- Personal style expression 1022- Standing out 1023- Making calendar time fabulous 1024 1025**Not just pink, but BLING pink!** ✨ 1026 1027## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 1028 1029### Fixed: Today's Date Box Now Uses Theme Colors 1030- **Fixed:** Today's day number box now uses theme border color 1031- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 1032- **Result:** Today box matches the theme perfectly! 1033 1034### The Issue 1035 1036Today's date had a hardcoded green box: 1037 1038**In style.css**: 1039```css 1040.cal-today .day-num { 1041 background: #008800; /* Hardcoded green! */ 1042 color: white; 1043} 1044``` 1045 1046**Didn't adapt to themes at all!** 1047 1048### The Fix 1049 1050**Now uses theme colors**: 1051```php 1052// Today's day number 1053if ($isToday) { 1054 background: $themeStyles['border'], // Theme's accent color! 1055 color: (professional theme) ? white : bg color 1056} 1057``` 1058 1059### Theme Examples 1060 1061**Matrix Theme**: 1062- Box background: `#00cc07` (matrix green) 1063- Text color: `#242424` (dark background) 1064 1065**Purple Theme**: 1066- Box background: `#9b59b6` (purple) 1067- Text color: `#2a2030` (dark background) 1068 1069**Professional Theme**: 1070- Box background: `#4a90e2` (blue) 1071- Text color: `#ffffff` (white text) 1072 1073**Pink Theme**: 1074- Box background: `#ff1493` (hot pink) 1075- Text color: `#1a0d14` (dark background) 1076 1077**Wiki Theme**: 1078- Box background: Template's `__border__` color 1079- Text color: Template's `__background_site__` color 1080 1081### Visual Result 1082 1083**Matrix Theme**: 1084``` 1085┌──┬──┬──┬──┬──┬──┬──┐ 1086│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1087└──┴──┴──┴──┴──┴──┴──┘ 1088 ↑ 1089 Green box (#00cc07) 1090``` 1091 1092**Professional Theme**: 1093``` 1094┌──┬──┬──┬──┬──┬──┬──┐ 1095│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1096└──┴──┴──┴──┴──┴──┴──┘ 1097 ↑ 1098 Blue box (#4a90e2) 1099``` 1100 1101**Wiki Theme**: 1102``` 1103┌──┬──┬──┬──┬──┬──┬──┐ 1104│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1105└──┴──┴──┴──┴──┴──┴──┘ 1106 ↑ 1107 Template border color 1108``` 1109 1110### Implementation 1111 1112**Inline styles added**: 1113- Background uses `$themeStyles['border']` (theme accent) 1114- Text color uses `$themeStyles['bg']` for contrast 1115- Special case: Professional theme uses white text 1116- All with `!important` to override CSS 1117 1118**CSS cleaned up**: 1119- Removed hardcoded `#008800` background 1120- Removed hardcoded `white` color 1121- Kept structural styles (border-radius, font-weight) 1122 1123### Benefits 1124 1125**Theme Consistency**: 1126- Today box matches theme accent color 1127- Proper contrast with background 1128- Professional appearance 1129 1130**Automatic Adaptation**: 1131- Works with all themes 1132- Works with custom wiki template colors 1133- No manual adjustment needed 1134 1135**Visual Harmony**: 1136- Border color used throughout theme 1137- Today box reinforces theme identity 1138- Consistent design language 1139 1140## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 1141 1142### Fixed: Table Grid Background Now Matches Cells 1143- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 1144- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 1145- **Result:** Table background no longer shows through cells! 1146 1147### The Layer Problem 1148 1149The table itself had a DIFFERENT background color than its cells! 1150 1151**Before (v5.2.6)**: 1152```php 1153'grid_bg' => __background_alt__, // Table background (#e8e8e8) 1154'cell_bg' => __background_site__, // Cell background (#f5f5f5) 1155``` 1156 1157**The table background was showing THROUGH the cells!** 1158 1159### Why This Happened 1160 1161**Visual layers**: 1162``` 1163Table Element 1164├─ background: __background_alt__ (#e8e8e8) ← Different! 1165└─ Cells 1166 └─ background: __background_site__ (#f5f5f5) ← Different! 1167 1168The table background shows through any gaps! 1169``` 1170 1171### The Fix 1172 1173**After (v5.2.7)**: 1174```php 1175'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 1176'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 1177``` 1178 1179**NOW THEY MATCH!** 1180 1181### Where grid_bg Is Used 1182 1183The table element itself: 1184```html 1185<table style="background: __background_alt__"> ← Was showing through! 1186 <tbody> 1187 <tr> 1188 <td style="background: __background_site__">1</td> 1189 </tr> 1190 </tbody> 1191</table> 1192``` 1193 1194Even with cell inline styles, the TABLE background shows through! 1195 1196### All Background Sources Now Unified 1197 1198**Everything now uses __background_site__**: 1199- `bg` → __background_site__ ✓ 1200- `header_bg` → __background_site__ ✓ 1201- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 1202- `cell_bg` → __background_site__ ✓ 1203 1204**Perfect consistency!** 1205 1206### Why It Was Different 1207 1208**Originally the grid was meant to show borders**: 1209- `grid_bg` was `__background_alt__` (slightly different) 1210- Created visual separation between cells 1211- But with transparent/thin cells, it showed through! 1212 1213**Now unified for consistency!** 1214 1215### Visual Result 1216 1217**Before (layers visible)**: 1218``` 1219┌─────────────────┐ 1220│ Grid (#e8e8e8) │ ← Showing through! 1221│ ┌──┬──┬──┐ │ 1222│ │ │ │ │ │ ← Cells (#f5f5f5) 1223│ └──┴──┴──┘ │ 1224└─────────────────┘ 1225``` 1226 1227**After (unified)**: 1228``` 1229┌─────────────────┐ 1230│ Grid (#f5f5f5) │ ← Same color! 1231│ ┌──┬──┬──┐ │ 1232│ │ │ │ │ │ ← Cells (#f5f5f5) 1233│ └──┴──┴──┘ │ 1234└─────────────────┘ 1235Perfect match! 1236``` 1237 1238### Complete Background Mapping 1239 1240**All using __background_site__ now**: 1241- Main container background 1242- Left panel background 1243- Right panel background 1244- Eventlist background 1245- Calendar grid background ← JUST FIXED 1246- Calendar cell backgrounds 1247- Event item backgrounds 1248- Clock header background 1249- Search input background 1250- Past events toggle 1251 1252**EVERYTHING UNIFIED!** 1253 1254## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 1255 1256### Fixed: Removed Container Backgrounds Showing Through 1257- **Found:** `.calendar-compact-container` had `background: #ffffff;` 1258- **Found:** `.calendar-compact-left` had `background: #fafafa;` 1259- **Found:** `.calendar-compact-right` had `background: #ffffff;` 1260- **Found:** `.event-search-input-inline` had `background: white;` 1261- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 1262- **Result:** Container backgrounds no longer show through cells! 1263 1264### The Container Problem 1265 1266The parent containers had hardcoded backgrounds that were showing through! 1267 1268**Container backgrounds (lines 4-91)**: 1269```css 1270.calendar-compact-container { 1271 background: #ffffff; /* ← Main container! */ 1272} 1273 1274.calendar-compact-left { 1275 background: #fafafa; /* ← Left panel (calendar side)! */ 1276} 1277 1278.calendar-compact-right { 1279 background: #ffffff; /* ← Right panel (events side)! */ 1280} 1281``` 1282 1283**These were showing through the cells and events!** 1284 1285### Why Containers Matter 1286 1287Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 1288 1289``` 1290Container (#fafafa) ← Showing through! 1291 └─ Table Cell (#f5f5f5) ← Transparent areas 1292 └─ Content 1293``` 1294 1295### All Backgrounds Removed 1296 1297**v5.2.6 removes**: 1298- `.calendar-compact-container` background 1299- `.calendar-compact-left` background 1300- `.calendar-compact-right` background 1301- `.event-search-input-inline` background 1302- `.past-events-toggle` background & hover 1303 1304**v5.2.5 removed**: 1305- `.calendar-compact-grid tbody td` background 1306- `.calendar-compact-grid thead th` background 1307 1308**v5.2.4 removed**: 1309- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 1310 1311**v5.2.3 removed**: 1312- `.event-compact-item` background 1313 1314**ALL container and element backgrounds eliminated!** 1315 1316### What Should Work Now 1317 1318**Calendar cells**: No container background showing through ✓ 1319**Event items**: No container background showing through ✓ 1320**Search bar**: Uses template color ✓ 1321**Past events toggle**: Uses template color ✓ 1322 1323### Complete List of Fixes 1324 1325**Containers**: 1326- Main container ✓ 1327- Left panel ✓ 1328- Right panel ✓ 1329 1330**Elements**: 1331- Table cells ✓ 1332- Event items ✓ 1333- Search input ✓ 1334- Past events toggle ✓ 1335 1336**EVERYTHING removed!** 1337 1338### Critical: Clear Caches 1339 1340**Must clear caches or won't work**: 13411. Hard refresh: Ctrl+Shift+R (5 times!) 13422. Clear DokuWiki cache 13433. Close browser completely 13444. Reopen and test 1345 1346**CSS caching is EXTREMELY persistent!** 1347 1348## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 1349 1350### Fixed: Removed Hardcoded Backgrounds from Table Cells 1351- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 1352- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 1353- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 1354- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 1355- **Result:** Calendar table cells finally use template colors! 1356 1357### The REAL Culprits 1358 1359The generic table CSS was overriding everything! 1360 1361**In style.css (lines 307-356)**: 1362```css 1363.calendar-compact-grid thead th { 1364 background: #f8f8f8; /* ← Header cells hardcoded! */ 1365} 1366 1367.calendar-compact-grid tbody td { 1368 background: #ffffff; /* ← ALL table cells hardcoded! */ 1369} 1370 1371.calendar-compact-grid tbody td:hover { 1372 background: #f0f7ff; /* ← Hover state hardcoded! */ 1373} 1374``` 1375 1376**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 1377 1378### Why This Was the Last One 1379 1380**CSS Specificity Order**: 13811. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 13822. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 13833. Inline styles (should win but didn't) 1384 1385**We removed the specific ones (v5.2.4), but the generic one was still there!** 1386 1387### What We've Removed 1388 1389**v5.2.3**: 1390- `.event-compact-item` background 1391- `.event-compact-item:hover` background 1392 1393**v5.2.4**: 1394- `.cal-empty` background & hover 1395- `.cal-today` background & hover 1396- `.cal-has-events` background & hover 1397 1398**v5.2.5 (FINAL)**: 1399- `.calendar-compact-grid tbody td` background ✓ 1400- `.calendar-compact-grid tbody td:hover` background ✓ 1401- `.calendar-compact-grid thead th` background ✓ 1402 1403**All CSS background overrides ELIMINATED!** 1404 1405### Why It Took 5 Versions 1406 1407**CSS had layers of hardcoded backgrounds**: 1408 1409``` 1410Layer 1: Table cells (.calendar-compact-grid tbody td) 1411 ↓ Overrode inline styles 1412Layer 2: Cell states (.cal-today, .cal-empty, etc.) 1413 ↓ Overrode table cells 1414Layer 3: Event items (.event-compact-item) 1415 ↓ Overrode inline styles 1416 1417ALL had to be removed! 1418``` 1419 1420**We kept finding more specific CSS, but the base table CSS was there all along!** 1421 1422### Visual Result 1423 1424**NOW everything matches**: 1425``` 1426Calendar Table: 1427┌──┬──┬──┬──┬──┬──┬──┐ 1428│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 1429├──┼──┼──┼──┼──┼──┼──┤ 1430│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 1431├──┼──┼──┼──┼──┼──┼──┤ 1432│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 1433└──┴──┴──┴──┴──┴──┴──┘ 1434 1435Sidebar Events: 1436┌────────────────────────┐ 1437│ Event │ ← __background_site__ 1438│ Event │ ← __background_site__ 1439└────────────────────────┘ 1440 1441FINALLY ALL MATCHING! ✓ 1442``` 1443 1444### Complete List of Removed CSS 1445 1446**ALL hardcoded backgrounds removed**: 1447- `.event-compact-item` background 1448- `.event-compact-item:hover` background 1449- `.cal-empty` background & hover 1450- `.cal-today` background & hover 1451- `.cal-has-events` background & hover 1452- `.calendar-compact-grid tbody td` background ← NEW 1453- `.calendar-compact-grid tbody td:hover` background ← NEW 1454- `.calendar-compact-grid thead th` background ← NEW 1455 1456**Every single CSS background override is GONE!** 1457 1458### Testing Steps 1459 1460**After installing v5.2.5**: 1461 14621. **Clear browser cache**: Ctrl+Shift+R (3 times!) 14632. **Clear DokuWiki cache**: Click the button 14643. **Close browser completely**: Restart it 14654. **Visit page**: Should finally see matching backgrounds 1466 1467**CSS is EXTREMELY sticky - may need to clear multiple times!** 1468 1469### This Should Be It 1470 1471**No more CSS overrides exist** (we've checked the entire file): 1472- Table cells ✓ Fixed 1473- Cell states ✓ Fixed 1474- Event items ✓ Fixed 1475- Headers ✓ Fixed 1476- Hover states ✓ Fixed 1477 1478**All backgrounds now come from inline styles using template colors!** 1479 1480## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 1481 1482### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 1483- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 1484- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 1485- **Result:** Calendar cells now use template colors! 1486 1487### The Second Culprit 1488 1489MORE hardcoded backgrounds in the CSS file! 1490 1491**In style.css (lines 359-382)**: 1492```css 1493.cal-empty { 1494 background: #fafafa !important; /* ← Overriding inline styles! */ 1495} 1496 1497.cal-today { 1498 background: #e8f5e9 !important; /* ← Overriding today cell! */ 1499} 1500 1501.cal-today:hover { 1502 background: #c8e6c9 !important; /* ← Overriding hover! */ 1503} 1504 1505.cal-has-events { 1506 background: #fffbf0; /* ← Overriding event cells! */ 1507} 1508 1509.cal-has-events:hover { 1510 background: #fff4d9; /* ← Overriding hover! */ 1511} 1512``` 1513 1514**These were ALL overriding the inline styles!** 1515 1516### The Fix 1517 1518**Removed all hardcoded backgrounds**: 1519```css 1520.cal-empty { 1521 /* background removed - inline style handles this */ 1522 cursor: default !important; 1523} 1524 1525.cal-today { 1526 /* background removed - inline style handles this */ 1527} 1528 1529.cal-has-events { 1530 /* background removed - inline style handles this */ 1531} 1532 1533/* Hover states also removed */ 1534``` 1535 1536### What Was Overridden 1537 1538**v5.2.3 fixed**: 1539- Event items in sidebar ✓ 1540 1541**v5.2.4 fixes**: 1542- Calendar day cells ✓ 1543- Today cell ✓ 1544- Empty cells ✓ 1545- Cells with events ✓ 1546- All hover states ✓ 1547 1548### Why This Kept Happening 1549 1550**CSS had hardcoded backgrounds everywhere**: 15511. Event items: `#ffffff` (fixed in v5.2.3) 15522. Calendar cells: Multiple colors (fixed in v5.2.4) 15533. **All with `!important` flags!** 1554 1555**The inline styles couldn't override them!** 1556 1557### Visual Result 1558 1559**Now ALL backgrounds match**: 1560``` 1561Calendar Grid: 1562┌──┬──┬──┬──┬──┬──┬──┐ 1563│ │ │ │ │ │ │ │ ← All use __background_site__ 1564├──┼──┼──┼──┼──┼──┼──┤ 1565│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 1566├──┼──┼──┼──┼──┼──┼──┤ 1567│ │ │ │ │ │ │ │ ← All match template 1568└──┴──┴──┴──┴──┴──┴──┘ 1569 1570Sidebar Events: 1571┌────────────────────────┐ 1572│ Event │ ← Uses __background_site__ 1573│ Event │ ← Uses __background_site__ 1574└────────────────────────┘ 1575 1576Perfect consistency! 1577``` 1578 1579### CSS Removed 1580 1581**Calendar cells**: 1582- `.cal-empty` background 1583- `.cal-empty:hover` background 1584- `.cal-today` background 1585- `.cal-today:hover` background 1586- `.cal-has-events` background 1587- `.cal-has-events:hover` background 1588 1589**All gone!** ✓ 1590 1591### Important: Clear Caches Again! 1592 1593After installing v5.2.4: 1594 15951. **Hard refresh browser**: Ctrl+Shift+R (twice!) 15962. **Clear DokuWiki cache**: Admin → Clear Cache 15973. **May need to restart browser**: To clear CSS cache 1598 1599**Old CSS is VERY sticky!** 1600 1601### Why It Took So Long 1602 1603**Multiple CSS overrides**: 1604- Event items (v5.2.3) ✓ Fixed 1605- Calendar cells (v5.2.4) ✓ Fixed 1606- Each with different classes 1607- Each with `!important` 1608- Hidden throughout CSS file 1609 1610**Found them all now!** 1611 1612## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 1613 1614### Fixed: Removed Hardcoded Backgrounds from CSS 1615- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 1616- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 1617- **Result:** Event backgrounds now properly use template colors! 1618 1619### The Root Cause 1620 1621The CSS file was overriding the inline styles with hardcoded white backgrounds! 1622 1623**In style.css (lines 599-616)**: 1624```css 1625.event-compact-item { 1626 background: #ffffff; /* ← This was overriding inline styles! */ 1627} 1628 1629.event-compact-item:hover { 1630 background: #f8f9fa; /* ← And this on hover! */ 1631} 1632``` 1633 1634**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 1635 1636### The Fix 1637 1638**Removed hardcoded backgrounds from CSS**: 1639```css 1640.event-compact-item { 1641 /* background removed - set via inline style with template colors */ 1642 display: flex; 1643 /* ... other styles ... */ 1644} 1645 1646.event-compact-item:hover { 1647 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 1648 /* background removed - inline style handles this */ 1649} 1650``` 1651 1652### Why This Was So Difficult to Find 1653 1654**CSS Specificity & Cascade**: 16551. Inline styles with `!important` should win 16562. But CSS that comes after can still apply 16573. The hardcoded `background: #ffffff` was silently overriding 16584. All the PHP code was correct - it was the CSS! 1659 1660**What We Were Doing**: 1661- ✓ Reading template colors correctly 1662- ✓ Setting `cell_bg` to `__background_site__` correctly 1663- ✓ Applying inline styles with `!important` correctly 1664- ✗ CSS file was overriding everything! 1665 1666### What Was Affected 1667 1668**Event items in**: 1669- Main calendar sidebar 1670- Standalone event list 1671- Sidebar widget 1672- All event displays 1673 1674**All had white backgrounds hardcoded in CSS!** 1675 1676### Now Working 1677 1678**Events use template colors**: 1679```html 1680<div class="event-compact-item" 1681 style="background: #f5f5f5 !important; ..."> 1682 ← Now this inline style actually works! 1683</div> 1684``` 1685 1686**No CSS override** ✓ 1687 1688### Testing 1689 1690To verify this works: 16911. Clear browser cache (important!) 16922. Clear DokuWiki cache 16933. Reload page 16944. Events should now match eventlist background 1695 1696**Browser caching can make old CSS persist!** 1697 1698### Visual Result 1699 1700**All backgrounds now matching**: 1701``` 1702┌────────────────────────────┐ 1703│ Eventlist (#f5f5f5) │ ← Template color 1704├────────────────────────────┤ 1705│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1706├────────────────────────────┤ 1707│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1708└────────────────────────────┘ 1709 1710Perfect match! 1711``` 1712 1713### Why Everything Else Worked 1714 1715**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 1716- They only had inline styles ✓ 1717- Inline styles worked correctly ✓ 1718- Only event items had the CSS override ✗ 1719 1720### Important Notes 1721 1722**Clear caches**: 1723- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 1724- DokuWiki cache (Admin → Clear Cache) 1725- Old CSS may be cached! 1726 1727**This was the culprit all along!** 1728 1729## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 1730 1731### Fixed: Clock Area Now Matches Event Cells 1732- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 1733- **Result:** Clock/Today header matches event cell backgrounds! 1734 1735### The Issue 1736 1737The clock area (Today header) was using a different background: 1738 1739**Before (v5.2.1)**: 1740```php 1741'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 1742'cell_bg' => __background_site__, // Event cells (#f5f5f5) 1743``` 1744 1745**After (v5.2.2)**: 1746```php 1747'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 1748'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 1749``` 1750 1751### What's the Clock Area? 1752 1753The clock/Today header in the sidebar: 1754``` 1755┌────────────────────────────┐ 1756│ 3:45:23 PM │ ← Clock area (header_bg) 1757│ ️ --° | Sun, Feb 9, 2026 │ 1758└────────────────────────────┘ 1759``` 1760 1761### All Backgrounds Now Unified 1762 1763**Everything now uses __background_site__**: 1764- Eventlist background ✓ 1765- Calendar cells ✓ 1766- Event items ✓ 1767- Clock/Today header ✓ 1768- Sidebar widget ✓ 1769- All backgrounds match! ✓ 1770 1771### Visual Result 1772 1773**Complete consistency**: 1774``` 1775┌────────────────────────────┐ 1776│ 3:45:23 PM │ ← Same background 1777│ ️ --° | Sun, Feb 9, 2026 │ 1778├────────────────────────────┤ 1779│ Meeting at 2pm │ ← Same background 1780│ Description... │ 1781├────────────────────────────┤ 1782│ Another event │ ← Same background 1783│ More details... │ 1784└────────────────────────────┘ 1785 1786All using __background_site__ (#f5f5f5) 1787``` 1788 1789**Perfect visual harmony!** 1790 1791## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 1792 1793### Fixed: Calendar Cells Now Match Eventlist Background 1794- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 1795- **Result:** Calendar cells now match the eventlist background perfectly! 1796 1797### The Real Issue 1798 1799The eventlist was showing the CORRECT background color all along! 1800 1801**Eventlist was using**: 1802- `bg` → `__background_site__` ✓ (This was correct!) 1803 1804**Calendar cells were using**: 1805- `cell_bg` → `__background__` ✗ (This was wrong!) 1806 1807**They didn't match!** 1808 1809### The Correct Fix 1810 1811**Now everything uses __background_site__**: 1812```php 1813'bg' => __background_site__, // Eventlist (was already correct) 1814'cell_bg' => __background_site__, // Cells (now fixed to match) 1815``` 1816 1817### Why __background_site__? 1818 1819The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 1820 1821``` 1822Page Layout: 1823┌────────────────────────────────────┐ 1824│ __background_site__ (page bg) │ ← This is where calendar lives 1825│ │ 1826│ ┌──────────────────────────────┐ │ 1827│ │ __background__ (content bg) │ │ ← Wiki article content 1828│ │ │ │ 1829│ └──────────────────────────────┘ │ 1830│ │ 1831└────────────────────────────────────┘ 1832``` 1833 1834**Calendar should match the page background, not the content background!** 1835 1836### Template Example 1837 1838Typical DokuWiki template: 1839```ini 1840__background_site__ = "#f5f5f5" (Light gray - page background) 1841__background__ = "#ffffff" (White - content area) 1842``` 1843 1844**Before (v5.2.0)**: 1845- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1846- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 1847 1848**After (v5.2.1)**: 1849- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1850- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 1851 1852### All Backgrounds Now Unified 1853 1854**Everything now uses __background_site__**: 1855- Eventlist sidebar background ✓ 1856- Main calendar background ✓ 1857- Calendar day cells ✓ 1858- Sidebar widget ✓ 1859- Event items ✓ 1860- Input fields ✓ 1861- Buttons ✓ 1862 1863**All perfectly matched to the page background!** 1864 1865### Why Version 5.2.0 Was Wrong 1866 1867I 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 1869**The eventlist knew what it was doing all along!** The cells just needed to catch up. 1870 1871## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 1872**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 1873 1874### Fixed: All Backgrounds Now Use __background__ 1875- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 1876- **Fixed:** Eventlist, calendar cells, and sidebar all match now 1877- **Result:** Completely unified background throughout! 1878 1879### The Issue 1880 1881Different parts of the calendar were using different background sources: 1882 1883**Before (v5.1.9)**: 1884```php 1885'bg' => __background_site__ // Eventlist background (outer page) 1886'cell_bg' => __background__ // Cell backgrounds (content area) 1887``` 1888 1889**These are different colors!** 1890- `__background_site__` = Outer page wrapper (often gray) 1891- `__background__` = Main content area (often white) 1892 1893### The Fix 1894 1895**After (v5.2.0)**: 1896```php 1897'bg' => __background__ // Eventlist background ✓ 1898'cell_bg' => __background__ // Cell backgrounds ✓ 1899``` 1900 1901**Both use the same source!** 1902 1903### What Uses 'bg' 1904 1905The `bg` color is used for: 1906- Eventlist sidebar background 1907- Main calendar container 1908- Sidebar widget background 1909- Form backgrounds 1910- Event dialogs 1911 1912### What Uses 'cell_bg' 1913 1914The `cell_bg` color is used for: 1915- Calendar day cells 1916- Event item backgrounds 1917- Input field backgrounds 1918- Button backgrounds 1919 1920### Why This Matters 1921 1922**Template color hierarchy**: 1923``` 1924__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 1925__background__ → Main content area (e.g., #ffffff white) 1926__background_alt__ → Sections/headers 1927__background_neu__ → Highlights 1928``` 1929 1930**We want all calendar backgrounds to match the main content area!** 1931 1932### Visual Comparison 1933 1934**Before (v5.1.9)**: Mismatched backgrounds 1935``` 1936┌────────────────────────────────┐ 1937│ Eventlist (gray #f5f5f5) │ ← __background_site__ 1938└────────────────────────────────┘ 1939 1940┌────────────────────────────────┐ 1941│ Calendar │ 1942│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1943│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1944│ └──┴──┴──┴──┴──┴──┴──┘ │ 1945└────────────────────────────────┘ 1946Different colors - looks inconsistent 1947``` 1948 1949**After (v5.2.0)**: Unified backgrounds 1950``` 1951┌────────────────────────────────┐ 1952│ Eventlist (white #fff) │ ← __background__ 1953└────────────────────────────────┘ 1954 1955┌────────────────────────────────┐ 1956│ Calendar │ 1957│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1958│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1959│ └──┴──┴──┴──┴──┴──┴──┘ │ 1960└────────────────────────────────┘ 1961Same color - perfectly consistent! 1962``` 1963 1964### Template Examples 1965 1966**Light Template**: 1967```ini 1968__background_site__ = "#f5f5f5" (light gray) 1969__background__ = "#ffffff" (white) 1970``` 1971 1972**Before**: Eventlist gray, cells white 1973**After**: Eventlist white, cells white ✓ 1974 1975**Dark Template**: 1976```ini 1977__background_site__ = "#1a1a1a" (very dark) 1978__background__ = "#2d2d2d" (dark) 1979``` 1980 1981**Before**: Eventlist very dark, cells dark 1982**After**: Eventlist dark, cells dark ✓ 1983 1984### Benefits 1985 1986**Visual Consistency**: 1987- All backgrounds match 1988- Clean, unified appearance 1989- Professional look 1990 1991**Correct Template Integration**: 1992- Uses content area color (not page wrapper) 1993- Matches wiki content area 1994- Proper color hierarchy 1995 1996**Works Everywhere**: 1997- Light templates ✓ 1998- Dark templates ✓ 1999- Custom templates ✓ 2000 2001### All Backgrounds Unified 2002 2003**Now using __background__**: 2004- Eventlist background ✓ 2005- Calendar cells ✓ 2006- Sidebar widget ✓ 2007- Event items ✓ 2008- Input fields ✓ 2009- Buttons ✓ 2010- Dialogs ✓ 2011 2012**Perfect harmony throughout!** 2013 2014## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 2015 2016### Fixed: Wiki Theme Event Backgrounds Not Showing 2017- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 2018- **Fixed:** Replaced CSS variables with actual hex colors 2019- **Result:** Event backgrounds now show correctly with template colors! 2020 2021### The Problem 2022 2023CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 2024 2025**Before (broken)**: 2026```php 2027'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 2028``` 2029 2030**After (fixed)**: 2031```php 2032'cell_bg' => '#fff', // Actual hex color works! 2033``` 2034 2035### What Was Affected 2036 2037**When style.ini read successfully**: 2038- ✅ Worked fine (uses actual hex colors from file) 2039 2040**When style.ini fallback used**: 2041- ❌ Events had no background 2042- ❌ CSS variables don't work in inline styles 2043- ❌ Looked broken 2044 2045### The Fix 2046 2047**Wiki theme fallback now uses real colors**: 2048```php 2049'wiki' => [ 2050 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 2051 'border' => '#ccc', // Real hex (was: var(--__border__)) 2052 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 2053 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 2054 'text_primary' => '#333', // Real hex (was: var(--__text__)) 2055 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 2056 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 2057 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 2058 // ... all colors now use real hex values 2059] 2060``` 2061 2062### Why CSS Variables Don't Work 2063 2064**CSS variables work**: 2065```css 2066.some-class { 2067 background: var(--__background__, #fff); /* ✓ Works in CSS */ 2068} 2069``` 2070 2071**CSS variables DON'T work**: 2072```html 2073<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 2074``` 2075 2076### How It Works Now 2077 2078**Priority system**: 20791. **Try reading style.ini** → Use actual template hex colors ✓ 20802. **If file not found** → Use fallback hex colors ✓ 20813. **Never use CSS variables in inline styles** ✓ 2082 2083**Both paths now work correctly!** 2084 2085### Visual Result 2086 2087**Events now have proper backgrounds**: 2088``` 2089┌──────────────────────────┐ 2090│ Meeting at 2pm │ ← White background (#fff) 2091│ Description here... │ 2092│ [✏️ Edit] [️ Delete] │ 2093└──────────────────────────┘ 2094 2095Not: 2096┌──────────────────────────┐ 2097│ Meeting at 2pm │ ← No background (broken) 2098│ Description here... │ 2099└──────────────────────────┘ 2100``` 2101 2102### Affected Areas 2103 2104**All event displays**: 2105- Main calendar events ✓ 2106- Sidebar widget events ✓ 2107- Event list items ✓ 2108- Event backgrounds ✓ 2109- Button backgrounds ✓ 2110- Input field backgrounds ✓ 2111 2112**Everything uses real colors now!** 2113 2114## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 2115 2116### Reorganized: Better Update Tab Layout 2117- **Moved:** Current Version section to the top 2118- **Combined:** Upload and Important Notes side-by-side 2119- **Improved:** Space-efficient two-column layout 2120- **Result:** More information visible at once! 2121 2122### New Layout Order 2123 2124**Version 5.1.8**: 2125``` 21261. Current Version (at top - see what you have) 21272. Upload + Important Notes (side-by-side) 21283. Recent Changes (changelog) 21294. Backups 2130``` 2131 2132### Side-by-Side Design 2133 2134**Upload form (left 60%) + Important Notes (right 40%)**: 2135``` 2136┌──────────────────────────────────────────┐ 2137│ Current Version │ 2138│ Version: 5.1.8 │ 2139│ ✅ Permissions: OK │ 2140└──────────────────────────────────────────┘ 2141 2142┌─────────────────────┬────────────────────┐ 2143│ Upload New │ ⚠️ Important Notes │ 2144│ [Choose File] │ • Replaces files │ 2145│ ☑ Backup first │ • Config preserved │ 2146│ [Upload] [Clear] │ • Events safe │ 2147└─────────────────────┴────────────────────┘ 2148``` 2149 2150### Benefits 2151 2152**Current Version First**: 2153- See what you have immediately 2154- Check permissions at a glance 2155- Know if ready to update 2156 2157**Side-by-Side Layout**: 2158- Upload form and warnings together 2159- Read notes while choosing file 2160- More efficient use of space 2161- Less scrolling needed 2162 2163**Better Information Flow**: 21641. See current version ✓ 21652. Upload new version with notes visible ✓ 21663. Review recent changes ✓ 21674. Manage backups ✓ 2168 2169### Visual Comparison 2170 2171**Before (v5.1.7)**: 2172``` 2173Important Notes (full width) 2174↓ 2175Upload Form (full width) 2176↓ 2177Current Version 2178↓ 2179Recent Changes 2180↓ 2181Backups 2182``` 2183 2184**After (v5.1.8)**: 2185``` 2186Current Version (full width) 2187↓ 2188Upload (60%) | Notes (40%) 2189↓ 2190Recent Changes 2191↓ 2192Backups 2193``` 2194 2195**More compact, better organized!** 2196 2197### Responsive Design 2198 2199**Wide screens**: 2200- Upload and notes side-by-side 2201- Full 1200px width utilized 2202- Efficient space usage 2203 2204**Narrow screens**: 2205- Sections stack gracefully 2206- Flex layout adapts 2207- Still fully functional 2208 2209### Layout Details 2210 2211**Current Version Section**: 2212- Full width (1200px max) 2213- Shows version, author, description 2214- Permission status with icons 2215- Helpful fix commands if needed 2216 2217**Upload/Notes Section**: 2218- Flexbox layout with gap 2219- Upload: `flex:1` (grows) 2220- Notes: `flex:0 0 350px` (fixed 350px) 2221- Both have proper min-width 2222 2223**Recent Changes Section**: 2224- Full width (1200px max) 2225- Compact scrollable view 2226- Color-coded change types 2227- Last 10 versions shown 2228 2229**Backups Section**: 2230- Full width (1200px max) 2231- Manual backup button 2232- Scrollable file list 2233- All actions accessible 2234 2235### Improved Max Widths 2236 2237All sections now use `max-width:1200px` (previously 900px): 2238- Better use of wide screens 2239- Still responsive on narrow screens 2240- Consistent throughout tab 2241 2242## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 2243 2244### Fixed: Extra Closing Brace 2245- **Fixed:** ParseError on line 1936 (extra closing brace) 2246- **Result:** Manual backup feature now works correctly! 2247 2248### What Was Wrong 2249 2250Extra `}` after the backup section: 2251 2252**Before (broken)**: 2253```php 2254echo '</div>'; 2255} // ← Extra closing brace! 2256 2257echo '<script> 2258``` 2259 2260**After (fixed)**: 2261```php 2262echo '</div>'; 2263 2264echo '<script> 2265``` 2266 2267**Manual backup feature now fully functional!** ✅ 2268 2269## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 2270 2271### Added: Create Backup Manually Anytime 2272- **Added:** "Create Backup Now" button in Backups section 2273- **Added:** Manual backup action handler with full verification 2274- **Added:** Backups section always visible (even with no backups) 2275- **Added:** Success message showing file size and file count 2276- **Result:** Create backups anytime without needing to upload! 2277 2278### Manual Backup Button 2279 2280**New Layout**: 2281``` 2282┌─────────────────────────────────────┐ 2283│ Backups [ Create Backup Now] │ 2284├─────────────────────────────────────┤ 2285│ Backup File Size │ 2286│ calendar.backup.v5.1.6... 243 KB │ 2287│ [ Download] [✏️ Rename] [️ Delete] │ 2288└─────────────────────────────────────┘ 2289``` 2290 2291**Always visible - even with no backups**: 2292``` 2293┌─────────────────────────────────────┐ 2294│ Backups [ Create Backup Now] │ 2295├─────────────────────────────────────┤ 2296│ No backups yet. Click "Create │ 2297│ Backup Now" to create your first │ 2298│ backup. │ 2299└─────────────────────────────────────┘ 2300``` 2301 2302### How It Works 2303 2304**Click the button**: 23051. Confirm: "Create a backup of the current plugin version?" 23062. System creates backup ZIP 23073. Verifies: File count (30+ files) 23084. Verifies: File size (200KB+) 23095. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 2310 2311**Backup naming**: 2312``` 2313calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2314 ^^^^^^ 2315 "manual" tag identifies manual backups 2316``` 2317 2318### Use Cases 2319 2320**Before updates**: 2321- Create safety backup before uploading new version 2322- Have multiple restore points 2323- Test new features with fallback 2324 2325**Regular backups**: 2326- Weekly/monthly backup schedule 2327- Before making configuration changes 2328- After important customizations 2329 2330**Development**: 2331- Backup before code experiments 2332- Save working states 2333- Quick rollback points 2334 2335### Full Verification 2336 2337**Same checks as automatic backups**: 2338- ✅ File count check (minimum 10, expected 30+) 2339- ✅ File size check (minimum 1KB, expected 200KB+) 2340- ✅ Existence check (file actually created) 2341- ✅ Automatic cleanup on failure 2342 2343**Success message includes**: 2344- Backup filename 2345- File size (human-readable) 2346- Number of files backed up 2347 2348### Example Messages 2349 2350**Success**: 2351``` 2352✓ Manual backup created successfully: 2353 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2354 (243 KB, 31 files) 2355``` 2356 2357**Failure Examples**: 2358``` 2359❌ Plugin directory is not readable. 2360 Please check permissions. 2361 2362❌ Backup incomplete: Only 5 files were added (expected 30+). 2363 Backup failed. 2364 2365❌ Backup file is too small (342 bytes). 2366 Only 3 files were added. Backup failed. 2367``` 2368 2369### Benefits 2370 2371**On-Demand Safety**: 2372- Create backups anytime 2373- No need to upload new version 2374- Quick and easy 2375 2376**Peace of Mind**: 2377- Backup before risky changes 2378- Multiple restore points 2379- Safe experimentation 2380 2381**Professional Workflow**: 2382- Regular backup schedule 2383- Version snapshots 2384- Disaster recovery 2385 2386### Backup Section Improvements 2387 2388**Always Visible**: 2389- Section shows even with 0 backups 2390- Button always accessible 2391- Clear call-to-action 2392 2393**Better Header**: 2394- Title and button on same row 2395- Clean, professional layout 2396- Space-efficient design 2397 2398### Technical Details 2399 2400**New Action**: `create_manual_backup` 2401 2402**New Function**: `createManualBackup()` 2403- Gets current version 2404- Creates timestamped filename with "manual" tag 2405- Uses same verification as auto-backups 2406- Shows detailed success/error messages 2407 2408**File Naming Convention**: 2409``` 2410Automatic (on upload): 2411calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 2412 2413Manual (button click): 2414calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2415 ^^^^^^^ 2416 Easy to identify! 2417``` 2418 2419### Permissions Required 2420 2421- **Read access**: Plugin directory 2422- **Write access**: Parent plugins directory 2423 2424**Same as automatic backups** - no additional permissions needed! 2425 2426## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 2427 2428### Enhanced: Backup Creation with Robust Verification 2429- **Added:** File count validation (must have 10+ files) 2430- **Added:** File size validation (must be 1KB+ minimum) 2431- **Added:** Return value from addDirectoryToZip (counts files added) 2432- **Added:** Detailed error messages showing file count 2433- **Added:** Automatic deletion of invalid/incomplete backups 2434- **Enhanced:** Exception handling with proper error propagation 2435- **Result:** Backups are now guaranteed to be complete or fail clearly! 2436 2437### What Changed 2438 2439**Before (v5.1.4)**: 2440```php 2441$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2442$zip->close(); 2443// No verification - could create empty or partial backup 2444``` 2445 2446**After (v5.1.5)**: 2447```php 2448$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2449$zip->close(); 2450 2451// Verify backup exists 2452if (!file_exists($backupPath)) { 2453 redirect('Backup file was not created'); 2454} 2455 2456// Verify backup has content 2457$backupSize = filesize($backupPath); 2458if ($backupSize < 1000) { 2459 unlink($backupPath); 2460 redirect('Backup too small: ' . $backupSize . ' bytes'); 2461} 2462 2463// Verify file count 2464if ($fileCount < 10) { 2465 unlink($backupPath); 2466 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 2467} 2468``` 2469 2470### Backup Validation Checks 2471 2472**Three-Layer Verification**: 2473 24741. **File Count Check**: 2475 - Minimum: 10 files required 2476 - Expected: 30+ files 2477 - Action: Delete backup if too few files 2478 24792. **Size Check**: 2480 - Minimum: 1KB (1000 bytes) 2481 - Expected: 200-250KB 2482 - Action: Delete backup if too small 2483 24843. **Existence Check**: 2485 - Verify file was actually created 2486 - Check ZIP archive is valid 2487 - Action: Error if file missing 2488 2489### Enhanced Error Reporting 2490 2491**Detailed Error Messages**: 2492``` 2493❌ "Backup file was not created" 2494❌ "Backup too small (342 bytes). Only 3 files added." 2495❌ "Only 5 files added (expected 30+). Backup aborted." 2496❌ "Too many errors adding files: Failed to add X, Y, Z..." 2497❌ "Directory does not exist: /path/to/dir" 2498❌ "Directory is not readable: /path/to/dir" 2499``` 2500 2501**Now you know exactly what went wrong!** 2502 2503### Improved addDirectoryToZip Function 2504 2505**Returns File Count**: 2506```php 2507private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2508 $fileCount = 0; 2509 $errors = []; 2510 2511 // Validation 2512 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 2513 if (!is_readable($dir)) throw new Exception("Not readable"); 2514 2515 // Add files 2516 foreach ($files as $file) { 2517 if ($zip->addFile($filePath, $relativePath)) { 2518 $fileCount++; 2519 } else { 2520 $errors[] = "Failed to add: " . $filename; 2521 } 2522 } 2523 2524 // Check error threshold 2525 if (count($errors) > 5) { 2526 throw new Exception("Too many errors"); 2527 } 2528 2529 return $fileCount; // Returns count for verification! 2530} 2531``` 2532 2533### Safety Features 2534 2535**Invalid Backup Cleanup**: 2536- Failed backups are automatically deleted 2537- No partial/corrupt backups left behind 2538- Clean error state 2539 2540**Error Threshold**: 2541- Allow up to 5 minor file errors (logs warnings) 2542- More than 5 errors = complete failure 2543- Prevents partially corrupt backups 2544 2545**Directory Validation**: 2546- Check directory exists before processing 2547- Check directory is readable 2548- Fail fast with clear errors 2549 2550### Benefits 2551 2552**Guaranteed Complete Backups**: 2553- ✅ All files included or backup fails 2554- ✅ No silent failures 2555- ✅ Clear error messages 2556- ✅ Automatic cleanup 2557 2558**Better Debugging**: 2559- Know exactly how many files were added 2560- See specific errors for missing files 2561- Understand why backup failed 2562 2563**User Confidence**: 2564- Backup succeeds = complete backup 2565- Backup fails = clear error message 2566- No ambiguity 2567 2568### Example Scenarios 2569 2570**Scenario 1: Permission Issue** 2571``` 2572User uploads new version 2573System starts backup 2574Error: "Directory is not readable: /lib/plugins/calendar/" 2575Backup fails before creating file 2576User sees clear error message 2577``` 2578 2579**Scenario 2: Partial Backup** 2580``` 2581User uploads new version 2582System creates backup 2583Only 5 files added (disk issue?) 2584Size: 450 bytes 2585Verification fails 2586Incomplete backup deleted 2587Error: "Only 5 files added (expected 30+)" 2588``` 2589 2590**Scenario 3: Success** 2591``` 2592User uploads new version 2593System creates backup 259431 files added 2595Size: 240KB 2596All verifications pass ✅ 2597Update proceeds 2598``` 2599 2600### Testing Recommendations 2601 2602After installing v5.1.5: 26031. Upload a new version with backup enabled 26042. Check for success message 26053. Verify backup file exists in /lib/plugins/ 26064. Check backup file size (should be ~240KB) 26075. If backup fails, read error message carefully 2608 2609**Your backups are now bulletproof!** 2610 2611## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 2612 2613### ✅ Verified: Backup System Working Correctly 2614- **Verified:** addDirectoryToZip function includes all files recursively 2615- **Verified:** Backups contain all 31+ files from calendar directory 2616- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 2617- **Info:** Backup sizes grow slightly with each version (more code = more features!) 2618- **Result:** Backup system is working perfectly! 2619 2620### Backup System Details 2621 2622**What Gets Backed Up**: 2623- All PHP files (syntax.php, admin.php, action.php, etc.) 2624- All JavaScript files (calendar-main.js, script.js) 2625- All documentation (CHANGELOG.md, README.md, all guides) 2626- All configuration (sync_config.php) 2627- All language files 2628- All assets and resources 2629- **Everything in the calendar/ directory!** 2630 2631**Backup Size Analysis**: 2632``` 2633Version 5.0.4: 233KB (normal) 2634Version 5.0.5: 234KB (normal) 2635Version 5.0.6: 235KB (normal) 2636Version 5.0.7: 236KB (normal) 2637Version 5.0.8: 237KB (normal) 2638Version 5.0.9: 237KB (normal) 2639Version 5.1.0: 238KB (normal) 2640Version 5.1.1: 238KB (normal) 2641Version 5.1.2: 240KB (normal - added AJAX features) 2642Version 5.1.3: 240KB (normal) 2643``` 2644 2645**Why Sizes Grow**: 2646- More features = more code 2647- Longer CHANGELOG 2648- Additional documentation 2649- New functionality 2650- **This is expected and normal!** 2651 2652**Compression Ratio**: 2653``` 2654Uncompressed: ~1.0 MB (source files) 2655Compressed: ~240 KB (ZIP archive) 2656Ratio: ~24% (excellent compression!) 2657``` 2658 2659### Backup File Contents 2660 2661**31 Files Included**: 2662``` 2663admin.php (216KB - main admin interface) 2664syntax.php (173KB - calendar rendering) 2665calendar-main.js (102KB - JavaScript functionality) 2666CHANGELOG.md (268KB - complete version history) 2667style.css (57KB - all styling) 2668action.php (38KB - DokuWiki actions) 2669sync_outlook.php (32KB - Outlook integration) 2670+ 24 other files (docs, configs, helpers) 2671``` 2672 2673**All files successfully included!** ✅ 2674 2675### How Backups Work 2676 2677**Creation Process**: 26781. User uploads new plugin version 26792. Checkbox "Create backup first" (checked by default) 26803. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 26814. Backup saved to: `/lib/plugins/` directory 26825. Then proceeds with update 2683 2684**Backup Function**: 2685```php 2686private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2687 $files = new RecursiveIteratorIterator( 2688 new RecursiveDirectoryIterator($dir), 2689 RecursiveIteratorIterator::LEAVES_ONLY 2690 ); 2691 foreach ($files as $file) { 2692 if (!$file->isDir()) { 2693 $zip->addFile($filePath, $relativePath); 2694 } 2695 } 2696} 2697``` 2698 2699**Recursive = Gets Everything!** ✅ 2700 2701### Verification Results 2702 2703**Test Results**: 2704- ✅ All 31 files present in zip 2705- ✅ All subdirectories included (lang/en/) 2706- ✅ File sizes match originals 2707- ✅ Compression works properly 2708- ✅ No files missing 2709- ✅ Backup can be restored 2710 2711**File Count**: 2712``` 2713Source directory: 31 files 2714Backup ZIP: 34 items (31 files + 3 directories) 2715Status: COMPLETE ✅ 2716``` 2717 2718### Backup Best Practices 2719 2720**Always enabled by default** ✅ 2721**Stored in accessible location** ✅ 2722**Timestamped filenames** ✅ 2723**Complete directory backup** ✅ 2724**Easy to restore** ✅ 2725 2726### Conclusion 2727 2728The backup system is working perfectly. The file sizes are appropriate and expected: 2729- Compressed size: ~240KB (good compression) 2730- Uncompressed size: ~1MB (all source files) 2731- All files included: YES ✅ 2732- Growing size over versions: Normal (more features!) 2733 2734**Your backups are complete and reliable!** 2735 2736## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 2737 2738### Fixed: JavaScript Syntax Error in AJAX Function 2739- **Fixed:** ParseError on line 1947 (deleteBackup function) 2740- **Fixed:** Escaped all single quotes in JavaScript strings 2741- **Result:** AJAX backup deletion now works correctly! 2742 2743### What Was Wrong 2744 2745JavaScript inside PHP echo needs escaped quotes: 2746 2747**Before (broken)**: 2748```javascript 2749formData.append('action', 'delete_backup'); // PHP interprets quotes 2750``` 2751 2752**After (fixed)**: 2753```javascript 2754formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 2755``` 2756 2757### All Quotes Escaped 2758 2759Fixed in deleteBackup function: 2760- ✅ FormData.append() calls 2761- ✅ fetch() URL 2762- ✅ querySelector() calls 2763- ✅ createElement() call 2764- ✅ All string literals 2765- ✅ Error messages 2766 2767**JavaScript now works!** ✓ 2768 2769## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 2770 2771### Improved: Update Tab Further Refined 2772- **Moved:** Important Notes to very top (above upload) 2773- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 2774- **Added:** Smooth fade-out animation when deleting backups 2775- **Added:** Success message after deletion 2776- **Auto-remove:** Backup section disappears if last backup deleted 2777- **Result:** Smoother, more polished experience! 2778 2779### New Layout Order 2780 2781**Final Order (v5.1.2)**: 2782``` 27831. ⚠️ Important Notes (warnings at top) 27842. Upload New Version (with Clear Cache button) 27853. Current Version (info) 27864. Recent Changes (changelog) 27875. Available Backups (if any) 2788``` 2789 2790### AJAX Backup Deletion 2791 2792**Before (v5.1.1)**: 2793- Click Delete → Page refreshes → Scroll back down 2794- Lose position on page 2795- Page reload is jarring 2796 2797**After (v5.1.2)**: 2798- Click Delete → Confirm 2799- Row fades out smoothly 2800- Row disappears 2801- Success message shows at top 2802- Success message fades after 3 seconds 2803- If last backup: entire section fades away 2804- **No page refresh!** ✓ 2805 2806### Visual Flow 2807 2808**Delete Animation**: 2809``` 28101. Click ️ Delete 28112. Confirm dialog 28123. Row fades out (0.3s) 28134. Row removed 28145. Success message appears 28156. Message fades after 3s 2816``` 2817 2818**If Last Backup**: 2819``` 28201. Delete last backup 28212. Row fades out 28223. Entire "Available Backups" section fades 28234. Section removed 28245. Clean interface ✓ 2825``` 2826 2827### Success Message 2828 2829After deleting: 2830``` 2831┌──────────────────────────────┐ 2832│ ✓ Backup deleted: filename │ ← Appears at top 2833└──────────────────────────────┘ 2834 Fades after 3 seconds 2835``` 2836 2837### Benefits 2838 2839**Important Notes First**: 2840- Warnings before actions ✓ 2841- Read before uploading ✓ 2842- Clear expectations ✓ 2843 2844**AJAX Deletion**: 2845- No page refresh ✓ 2846- Smooth animations ✓ 2847- Stay in context ✓ 2848- Professional feel ✓ 2849 2850**Auto-Cleanup**: 2851- Empty list disappears ✓ 2852- Clean interface ✓ 2853- No clutter ✓ 2854 2855### Technical Implementation 2856 2857**AJAX Request**: 2858```javascript 2859fetch('?do=admin&page=calendar&tab=update', { 2860 method: 'POST', 2861 body: formData 2862}) 2863``` 2864 2865**DOM Manipulation**: 2866- Fade out row 2867- Remove element 2868- Show success 2869- Remove section if empty 2870 2871**Smooth Transitions**: 2872- 300ms fade animations 2873- Clean visual feedback 2874- Professional polish 2875 2876## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 2877 2878### Improved: Update Tab Layout Reorganized 2879- **Moved:** Upload section to the top of the page 2880- **Added:** Clear Cache button next to Upload & Install button 2881- **Changed:** "Current Version" section moved below upload 2882- **Result:** Better workflow - upload first, then see version info! 2883 2884### New Layout Order 2885 2886**Before (v5.1.0)**: 2887``` 28881. Clear Cache (standalone) 28892. Current Version 28903. Recent Changes 28914. Upload New Version 28925. Warning Box 28936. Backups 2894``` 2895 2896**After (v5.1.1)**: 2897``` 28981. Upload New Version (with Clear Cache button side-by-side) 28992. Warning Box 29003. Current Version 29014. Recent Changes 29025. Backups 2903``` 2904 2905### Visual Result 2906 2907**Top of Update Tab**: 2908``` 2909┌─────────────────────────────────┐ 2910│ Upload New Version │ 2911│ ┌─────────────────────────────┐ │ 2912│ │ [Choose File] │ │ 2913│ │ ☑ Create backup first │ │ 2914│ │ ┌──────────────┬──────────┐ │ │ 2915│ │ │ Upload & │️ Clear │ │ │ 2916│ │ │ Install │ Cache │ │ │ 2917│ │ └──────────────┴──────────┘ │ │ 2918│ └─────────────────────────────┘ │ 2919│ │ 2920│ ⚠️ Important Notes │ 2921│ • Will replace all files │ 2922│ • Config preserved │ 2923│ │ 2924│ Current Version │ 2925│ Version: 5.1.1 │ 2926└─────────────────────────────────┘ 2927``` 2928 2929### Benefits 2930 2931**Better Workflow**: 2932- Primary action (upload) is first 2933- Clear cache conveniently next to install 2934- No scrolling to find upload button 2935- Logical top-to-bottom flow 2936 2937**Side-by-Side Buttons**: 2938- Upload & Install (green) 2939- Clear Cache (orange) 2940- Both common actions together 2941- Easy to access after upload 2942 2943**Improved UX**: 2944- Upload is most important → now at top 2945- Version info is reference → moved down 2946- Related actions grouped 2947- Cleaner organization 2948 2949### Button Layout 2950 2951``` 2952┌──────────────────┬──────────────┐ 2953│ Upload & │ ️ Clear │ 2954│ Install │ Cache │ 2955│ (Green) │ (Orange) │ 2956└──────────────────┴──────────────┘ 2957``` 2958 2959**Green = Primary Action** 2960**Orange = Secondary Action** 2961 2962Both easily accessible! 2963 2964## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 2965 2966### Changed: Admin Section Backgrounds Now Use __background__ 2967- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 2968- **Result:** Cleaner, more unified admin interface! 2969 2970### Background Usage Update 2971 2972**Before (v5.0.9)**: 2973```php 2974Section boxes: bg_alt (__background_alt__) 2975Content areas: bg (__background__) 2976``` 2977 2978**After (v5.1.0)**: 2979```php 2980Section boxes: bg (__background__) 2981Content areas: bg (__background__) 2982``` 2983 2984### Why This Change? 2985 2986**More unified appearance**: 2987- Sections and content use same background 2988- Creates cleaner, more cohesive look 2989- Borders provide visual separation 2990- Matches typical admin UI patterns 2991 2992**Template color hierarchy**: 2993``` 2994__background_site__ → Outer page wrapper 2995__background__ → Content & sections (BOTH now use this) 2996__background_alt__ → Reserved for special panels/highlights 2997__background_neu__ → Special highlights 2998``` 2999 3000### Visual Result 3001 3002**Light Template**: 3003```ini 3004__background__ = "#ffffff" 3005__background_alt__ = "#e8e8e8" 3006``` 3007 3008**Before**: 3009``` 3010Admin Page: 3011┌─────────────────────┐ 3012│ ┌─────────────────┐ │ 3013│ │ Section Box │ │ ← Gray (#e8e8e8) 3014│ │ ┌─────────────┐ │ │ 3015│ │ │ Content │ │ │ ← White (#fff) 3016│ │ └─────────────┘ │ │ 3017│ └─────────────────┘ │ 3018└─────────────────────┘ 3019Two-tone appearance 3020``` 3021 3022**After**: 3023``` 3024Admin Page: 3025┌─────────────────────┐ 3026│ ┌─────────────────┐ │ 3027│ │ Section Box │ │ ← White (#fff) 3028│ │ ┌─────────────┐ │ │ 3029│ │ │ Content │ │ │ ← White (#fff) 3030│ │ └─────────────┘ │ │ 3031│ └─────────────────┘ │ 3032└─────────────────────┘ 3033Unified, clean appearance 3034Borders provide separation 3035``` 3036 3037**Dark Template**: 3038```ini 3039__background__ = "#2d2d2d" 3040__background_alt__ = "#3a3a3a" 3041``` 3042 3043**After**: 3044``` 3045Admin Page: 3046┌─────────────────────┐ 3047│ ┌─────────────────┐ │ 3048│ │ Section Box │ │ ← Dark (#2d2d2d) 3049│ │ ┌─────────────┐ │ │ 3050│ │ │ Content │ │ │ ← Dark (#2d2d2d) 3051│ │ └─────────────┘ │ │ 3052│ └─────────────────┘ │ 3053└─────────────────────┘ 3054Unified dark appearance 3055Accent borders provide definition 3056``` 3057 3058### Benefits 3059 3060**Cleaner Look**: 3061- No more alternating gray/white 3062- More professional appearance 3063- Less visual noise 3064- Unified color scheme 3065 3066**Better Consistency**: 3067- Matches modern admin UI patterns 3068- Borders define sections, not colors 3069- Simpler, cleaner design 3070- Easier on the eyes 3071 3072**Template Friendly**: 3073- Works with any background color 3074- Light or dark templates 3075- Custom colors 3076- Always looks cohesive 3077 3078### All Sections Updated 3079 3080✅ Outlook Sync config sections 3081✅ Manage Events sections 3082✅ Update Plugin sections 3083✅ Themes tab sections 3084✅ Week start day section 3085✅ All form sections 3086 3087**Complete unified theming!** 3088 3089## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 3090 3091### Fixed: Syntax Error in Theme Cards 3092- **Fixed:** ParseError on line 4461 (Purple theme card) 3093- **Fixed:** Malformed ternary expressions from sed replacement 3094- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 3095- **Result:** Admin pages work correctly! 3096 3097### What Was Wrong 3098 3099The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 3100 3101**Before (broken)**: 3102```php 3103? '#9b59b6' : ' . $colors['border'] . ') 3104// Extra quote and dot created syntax error 3105``` 3106 3107**After (fixed)**: 3108```php 3109? '#9b59b6' : $colors['border']) 3110// Clean ternary expression 3111``` 3112 3113### All Theme Cards Fixed 3114 3115- ✅ Purple Dream card 3116- ✅ Professional Blue card 3117- ✅ Pink Bling card 3118- ✅ Wiki Default card 3119 3120### Now Working 3121 3122**Theme selection page loads** ✓ 3123**All cards display properly** ✓ 3124**Template colors applied** ✓ 3125**No syntax errors** ✓ 3126 3127## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 3128 3129### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 3130- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 3131- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 3132- **Fixed:** Theme selection cards use template backgrounds 3133- **Fixed:** Week start options use template backgrounds 3134- **Result:** Perfect color mapping throughout admin! 3135 3136### Color Mapping Correction 3137 3138**Before (v5.0.7)**: 3139```php 3140bg: __background_site__ // Wrong - this is outer page bg 3141bg_alt: __background_alt__ 3142``` 3143 3144**After (v5.0.8)**: 3145```php 3146bg: __background__ // Correct - main content bg 3147bg_alt: __background_alt__ 3148``` 3149 3150### Why This Matters 3151 3152**Template color hierarchy**: 3153``` 3154__background_site__ → Outer page/site background 3155__background__ → Main content area (CORRECT for admin) 3156__background_alt__ → Sections/panels 3157__background_neu__ → Highlights 3158``` 3159 3160**Admin should use**: 3161- `__background__` for input fields, content areas 3162- `__background_alt__` for section boxes, panels 3163 3164### Themes Tab Fixed 3165 3166**Removed all hardcoded colors**: 3167```php 3168Before: '#ddd', '#fff', '#dee2e6' 3169After: $colors['border'], $colors['bg'], $colors['border'] 3170``` 3171 3172**Now themed**: 3173- ✅ Week start section background 3174- ✅ Week start option backgrounds 3175- ✅ Theme card backgrounds 3176- ✅ Theme card borders 3177- ✅ All borders throughout 3178 3179### Visual Result 3180 3181**Light Template**: 3182```ini 3183__background__ = "#ffffff" 3184__background_alt__ = "#e8e8e8" 3185``` 3186 3187**Admin Before (v5.0.7)**: 3188``` 3189Input fields: #f5f5f5 (site bg - wrong) 3190Sections: #e8e8e8 (alt bg - correct) 3191``` 3192 3193**Admin After (v5.0.8)**: 3194``` 3195Input fields: #ffffff (content bg - correct!) 3196Sections: #e8e8e8 (alt bg - correct!) 3197``` 3198 3199**Dark Template**: 3200```ini 3201__background__ = "#2d2d2d" 3202__background_alt__ = "#3a3a3a" 3203``` 3204 3205**Admin After (v5.0.8)**: 3206``` 3207Input fields: #2d2d2d (content bg - perfect!) 3208Sections: #3a3a3a (alt bg - perfect!) 3209``` 3210 3211### Complete Themes Tab 3212 3213**Week Start Options**: 3214``` 3215┌─────────────────────────┐ 3216│ Week Start Day │ ← bg_alt 3217│ ┌─────────┬───────────┐ │ 3218│ │ Monday │ Sunday │ │ ← bg (when not selected) 3219│ └─────────┴───────────┘ │ 3220└─────────────────────────┘ 3221``` 3222 3223**Theme Cards**: 3224``` 3225┌─────────────────────────┐ 3226│ Matrix Edition │ ← bg (when not selected) 3227│ Classic green theme │ border (when not selected) 3228└─────────────────────────┘ 3229 3230┌═════════════════════════┐ 3231│ Purple Dream │ ← rgba green tint (when selected) 3232│ Elegant purple theme │ #00cc07 border (when selected) 3233└═════════════════════════┘ 3234``` 3235 3236### Perfect Integration 3237 3238**All admin pages now**: 3239- Content areas: `__background__` ✓ 3240- Section boxes: `__background_alt__` ✓ 3241- Borders: `__border__` ✓ 3242- Text: `__text__` ✓ 3243 3244**Matches wiki perfectly**: 3245- Same white content areas 3246- Same gray section boxes 3247- Same border colors 3248- Same text colors 3249 3250### No More Issues 3251 3252**Fixed**: 3253- ❌ Site background on content areas → ✅ Content background 3254- ❌ Hardcoded white on themes tab → ✅ Template background 3255- ❌ Hardcoded borders (#ddd) → ✅ Template borders 3256 3257**Result**: 3258- Perfect color hierarchy ✓ 3259- Correct background levels ✓ 3260- Complete template integration ✓ 3261 3262## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 3263 3264### Fixed: All Admin Backgrounds Use Template Colors 3265- **Fixed:** All section backgrounds use `__background_alt__` 3266- **Fixed:** All content backgrounds use `__background__` 3267- **Fixed:** All borders use `__border__` 3268- **Fixed:** All text uses `__text__` 3269- **Result:** Complete admin template integration! 3270 3271### All Replacements 3272 3273**Backgrounds**: 3274```php 3275Before: background: #f9f9f9 3276After: background: ' . $colors['bg_alt'] . ' 3277 3278Before: background: #fff / background: white 3279After: background: ' . $colors['bg'] . ' 3280``` 3281 3282**Borders**: 3283```php 3284Before: border: 1px solid #ddd 3285Before: border: 1px solid #e0e0e0 3286Before: border: 1px solid #eee 3287After: border: 1px solid ' . $colors['border'] . ' 3288``` 3289 3290**Text**: 3291```php 3292Before: color: #333 3293Before: color: #666 3294After: color: ' . $colors['text'] . ' 3295``` 3296 3297### Complete Admin Coverage 3298 3299**All tabs now themed**: 3300- ✅ Manage Events tab 3301- ✅ Update Plugin tab 3302- ✅ Outlook Sync tab 3303- ✅ Themes tab 3304- ✅ Tab navigation 3305- ✅ All sections 3306- ✅ All inputs 3307- ✅ All borders 3308- ✅ All text 3309 3310### Visual Result 3311 3312**Light Template**: 3313``` 3314Admin Page: 3315┌──────────────────────────┐ 3316│ Tab Navigation │ ← Template borders 3317├──────────────────────────┤ 3318│ Section Headers │ ← bg_alt (light gray) 3319│ ┌──────────────────────┐ │ 3320│ │ Form Inputs │ │ ← bg (white) 3321│ │ Content Areas │ │ 3322│ └──────────────────────┘ │ 3323└──────────────────────────┘ 3324All template colors! ✓ 3325``` 3326 3327**Dark Template**: 3328``` 3329Admin Page: 3330┌──────────────────────────┐ 3331│ Tab Navigation │ ← Template borders 3332├──────────────────────────┤ 3333│ Section Headers │ ← bg_alt (dark gray) 3334│ ┌──────────────────────┐ │ 3335│ │ Form Inputs │ │ ← bg (darker) 3336│ │ Content Areas │ │ 3337│ └──────────────────────┘ │ 3338└──────────────────────────┘ 3339All template colors! ✓ 3340``` 3341 3342### Template Color Mapping 3343 3344**Used throughout admin**: 3345``` 3346__background_site__ → $colors['bg'] (main backgrounds) 3347__background_alt__ → $colors['bg_alt'] (section backgrounds) 3348__text__ → $colors['text'] (all text) 3349__border__ → $colors['border'] (all borders) 3350__link__ → $colors['link'] (links - future) 3351``` 3352 3353### Examples by Section 3354 3355**Manage Events**: 3356- Event list backgrounds: `bg_alt` 3357- Event item backgrounds: `bg` 3358- Borders: `border` 3359- Text: `text` 3360 3361**Update Plugin**: 3362- Section backgrounds: `bg_alt` 3363- Content areas: `bg` 3364- Borders: `border` 3365- Text: `text` 3366 3367**Outlook Sync**: 3368- Config sections: `bg_alt` 3369- Input fields: `bg` 3370- Borders: `border` 3371- Labels: `text` 3372 3373**Themes Tab**: 3374- Theme cards: `bg_alt` 3375- Preview areas: `bg` 3376- Borders: `border` 3377- Descriptions: `text` 3378 3379### Benefits 3380 3381**Seamless Integration**: 3382- Matches wiki admin area perfectly 3383- Same colors throughout wiki 3384- Professional appearance 3385- Consistent experience 3386 3387**Automatic Adaptation**: 3388- Light templates: Light admin 3389- Dark templates: Dark admin 3390- Custom templates: Uses custom colors 3391 3392**No White Boxes**: 3393- Every background themed 3394- Every border themed 3395- Every text themed 3396- Complete consistency 3397 3398### PERFECT HARMONY 3399 3400**Frontend (Calendar)**: 3401- Wiki theme uses style.ini ✓ 3402- Perfect template match ✓ 3403 3404**Backend (Admin)**: 3405- Reads same style.ini ✓ 3406- Perfect template match ✓ 3407 3408**Complete Unity**: 3409- Same colors everywhere ✓ 3410- Seamless experience ✓ 3411- Professional polish ✓ 3412 3413## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 3414 3415### Enhanced: Month/Year Header & Admin Pages Use Template Colors 3416- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 3417- **Added:** Admin pages read template's style.ini file 3418- **Added:** `getTemplateColors()` function in admin class 3419- **Fixed:** Tab navigation uses template text and border colors 3420- **Result:** Complete template integration everywhere! 3421 3422### Month/Year Header 3423 3424**Before**: 3425```php 3426color: __text__ // Same as primary text 3427``` 3428 3429**After (Wiki Theme)**: 3430```php 3431color: __text_neu__ // Dimmed text (subtle) 3432``` 3433 3434### Admin Pages Enhancement 3435 3436**New `getTemplateColors()` function**: 3437- Reads template's style.ini file 3438- Extracts color replacements 3439- Provides colors to all admin tabs 3440- Falls back to sensible defaults 3441 3442**Colors used**: 3443```php 3444bg: __background_site__ 3445bg_alt: __background_alt__ 3446text: __text__ 3447border: __border__ 3448link: __link__ 3449``` 3450 3451**Applied to**: 3452- Tab navigation borders 3453- Tab text colors 3454- All admin sections 3455- Ready for future enhancements 3456 3457### Visual Result 3458 3459**Calendar Header**: 3460``` 3461┌────────────────────┐ 3462│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 3463└────────────────────┘ 3464Subtle and elegant ✓ 3465``` 3466 3467**Admin Navigation**: 3468``` 3469 Manage Events | Update | ⚙️ Config | Themes 3470───────────────────────────────────────────────── 3471Active tab: Green (#00cc07) 3472Inactive tabs: Template text color 3473Border: Template border color 3474``` 3475 3476### Template Integration 3477 3478**Light Template**: 3479```ini 3480__text_neu__ = "#666666" 3481__border__ = "#cccccc" 3482``` 3483**Result**: 3484- Month/Year: Medium gray (subtle) 3485- Admin borders: Light gray 3486- Tab text: Dark gray 3487 3488**Dark Template**: 3489```ini 3490__text_neu__ = "#999999" 3491__border__ = "#555555" 3492``` 3493**Result**: 3494- Month/Year: Light gray (subtle) 3495- Admin borders: Medium gray 3496- Tab text: Bright gray 3497 3498### Benefits 3499 3500**Calendar Frontend**: 3501- Month/Year header more subtle 3502- Better visual hierarchy 3503- Less prominent, more elegant 3504 3505**Admin Backend**: 3506- Uses template colors 3507- Matches wiki admin area 3508- Consistent experience 3509- Professional appearance 3510 3511### Future-Ready 3512 3513The `getTemplateColors()` function is now available for: 3514- ✅ Tab navigation (implemented) 3515- Section backgrounds (ready) 3516- Button colors (ready) 3517- Input fields (ready) 3518- Success/error messages (ready) 3519 3520**Foundation laid for complete admin theming!** 3521 3522## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 3523 3524### Fixed: Add Event Bar & Section Headers Use Template Colors 3525- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 3526- **Fixed:** "Today" header uses `__text_neu__` 3527- **Fixed:** "Tomorrow" header uses `__text__` 3528- **Fixed:** "Important Events" header uses `__border__` 3529- **Result:** Perfect template color integration! 3530 3531### All Changes 3532 3533**Add Event Bar (Wiki Theme)**: 3534 3535**Before**: 3536```php 3537background: #3498db // Generic blue 3538``` 3539 3540**After**: 3541```php 3542background: __background_alt__ // Template alternate bg 3543text: __text__ // Template text color 3544hover: __background_neu__ // Template neutral bg 3545``` 3546 3547**Section Headers (Wiki Theme)**: 3548 3549**Before**: 3550```php 3551Today: #ff9800 // Orange 3552Tomorrow: #4caf50 // Green 3553Important Events: #9b59b6 // Purple 3554``` 3555 3556**After**: 3557```php 3558Today: __text_neu__ // Template dimmed text 3559Tomorrow: __text__ // Template primary text 3560Important Events: __border__ // Template border color 3561``` 3562 3563### Visual Result 3564 3565**Wiki Default Theme**: 3566``` 3567Add Event Bar: 3568┌────────────────┐ 3569│ + ADD EVENT │ ← Template alt background 3570└────────────────┘ 3571 3572Sections: 3573━━━━━━━━━━━━━━━━ 3574Today ← Dimmed text color (__text_neu__) 3575• Team Meeting 3576 3577Tomorrow ← Primary text color (__text__) 3578• Code Review 3579 3580Important Events ← Border color (__border__) 3581• Project Deadline 3582``` 3583 3584### Example with DokuWiki Default Template 3585 3586**Template colors**: 3587```ini 3588__background_alt__ = "#e8e8e8" 3589__text__ = "#333333" 3590__text_neu__ = "#666666" 3591__border__ = "#cccccc" 3592``` 3593 3594**Calendar result**: 3595``` 3596Add Event Bar: Light gray (#e8e8e8) 3597Today header: Medium gray (#666666) 3598Tomorrow header: Dark gray (#333333) 3599Important Events header: Border gray (#cccccc) 3600``` 3601 3602### Example with Dark Template 3603 3604**Template colors**: 3605```ini 3606__background_alt__ = "#2d2d2d" 3607__text__ = "#e0e0e0" 3608__text_neu__ = "#999999" 3609__border__ = "#555555" 3610``` 3611 3612**Calendar result**: 3613``` 3614Add Event Bar: Dark gray (#2d2d2d) 3615Today header: Light gray (#999999) 3616Tomorrow header: Bright gray (#e0e0e0) 3617Important Events header: Medium gray (#555555) 3618``` 3619 3620### Perfect Harmony 3621 3622All sidebar elements now use template colors: 3623- ✅ Add Event bar background 3624- ✅ Add Event bar text 3625- ✅ Today section header 3626- ✅ Tomorrow section header 3627- ✅ Important Events header 3628- ✅ Calendar cells 3629- ✅ Grid backgrounds 3630- ✅ All borders 3631 3632**Complete template integration!** 3633 3634## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 3635 3636### Fixed: Calendar Cells Use Correct Template Color 3637- **Fixed:** Calendar cells now use `__background__` from template 3638- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 3639- **Result:** Calendar cells match main content area background! 3640 3641### Color Mapping Update 3642 3643**Before (v5.0.3)**: 3644```php 3645cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 3646``` 3647 3648**After (v5.0.4)**: 3649```php 3650cell_bg: __background__ // Correct - main content background 3651``` 3652 3653### Template Color Usage 3654 3655**Wiki Default theme now uses**: 3656``` 3657__background_site__ → Overall page background 3658__background__ → Calendar cells (main content bg) 3659__background_alt__ → Grid background, headers 3660__background_neu__ → Today cell highlight 3661__text__ → Primary text 3662__text_neu__ → Dimmed text 3663__link__ → Links, bright text 3664__border__ → All borders 3665``` 3666 3667### Visual Result 3668 3669**Before**: 3670``` 3671Calendar with template colors: 3672┌─────┬─────┬─────┐ 3673│ Mon │ Tue │ Wed │ 3674├─────┼─────┼─────┤ 3675│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 3676└─────┴─────┴─────┘ 3677``` 3678 3679**After**: 3680``` 3681Calendar with template colors: 3682┌─────┬─────┬─────┐ 3683│ Mon │ Tue │ Wed │ 3684├─────┼─────┼─────┤ 3685│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 3686└─────┴─────┴─────┘ 3687``` 3688 3689### Example Template Colors 3690 3691**DokuWiki Default**: 3692```ini 3693__background__ = "#ffffff" 3694``` 3695**Result**: White calendar cells ✓ 3696 3697**Dark Template**: 3698```ini 3699__background__ = "#2d2d2d" 3700``` 3701**Result**: Dark calendar cells ✓ 3702 3703**Custom Template**: 3704```ini 3705__background__ = "#f9f9f9" 3706``` 3707**Result**: Custom color cells ✓ 3708 3709### Perfect Matching 3710 3711Calendar cells now match: 3712- ✅ Main content area background 3713- ✅ Article/page background 3714- ✅ Content box background 3715- ✅ Same as wiki text background 3716 3717**Seamless integration!** 3718 3719## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 3720 3721### Enhanced: Wiki Default Theme Reads Template Colors 3722- **Added:** Function to read colors from DokuWiki template's style.ini file 3723- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 3724- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 3725- **Uses:** Actual template colors instead of CSS variables 3726- **Result:** Perfect color matching with any DokuWiki template! 3727 3728### How It Works 3729 3730**New Function: `getWikiTemplateColors()`** 3731 37321. **Detects** current DokuWiki template name 37332. **Reads** the template's `style.ini` file 37343. **Parses** color replacements section 37354. **Maps** template colors to calendar theme 37365. **Falls back** to CSS variables if file not found 3737 3738### Colors Read from style.ini 3739 3740**Template color replacements used**: 3741```php 3742__background_site__ → bg, header_bg 3743__background_alt__ → grid_bg, cell_today_bg 3744__background_neu__ → cell_bg 3745__text__ → text_primary 3746__text_neu__ → text_dim 3747__link__ → text_bright 3748__border__ → border, grid_border 3749``` 3750 3751### Example style.ini Mapping 3752 3753**Template style.ini**: 3754```ini 3755[replacements] 3756__background_site__ = "#f8f9fa" 3757__background_alt__ = "#e9ecef" 3758__background_neu__ = "#dee2e6" 3759__text__ = "#212529" 3760__text_neu__ = "#6c757d" 3761__link__ = "#0d6efd" 3762__border__ = "#ced4da" 3763``` 3764 3765**Calendar theme result**: 3766```php 3767bg: #f8f9fa 3768header_bg: #e9ecef 3769grid_bg: #e9ecef 3770cell_bg: #dee2e6 3771text_primary: #212529 3772text_dim: #6c757d 3773text_bright: #0d6efd 3774border: #ced4da 3775grid_border: #ced4da 3776``` 3777 3778### Before vs After 3779 3780**Before (v5.0.2)**: 3781``` 3782Wiki Default theme used: 3783- CSS variables (var(--__background__, #fff)) 3784- Required browser CSS variable support 3785- Fallback to generic colors 3786``` 3787 3788**After (v5.0.3)**: 3789``` 3790Wiki Default theme uses: 3791- Actual colors from template's style.ini 3792- Exact template color values 3793- No CSS variable dependency 3794- Perfect color matching! 3795``` 3796 3797### File Location Priority 3798 3799Checks in order: 38001. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 38012. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 38023. Falls back to CSS variables if neither found 3803 3804### Benefits 3805 3806**More accurate colors**: 3807- Uses exact template color values ✓ 3808- No CSS variable interpolation ✓ 3809- Consistent across all browsers ✓ 3810 3811**Better compatibility**: 3812- Works with older browsers ✓ 3813- No CSS variable support needed ✓ 3814- Direct color values ✓ 3815 3816**Perfect matching**: 3817- Reads template's actual colors ✓ 3818- Same colors as wiki pages ✓ 3819- Seamless integration ✓ 3820 3821### Template Examples 3822 3823**DokuWiki Default Template**: 3824``` 3825Reads: lib/tpl/dokuwiki/style.ini 3826Gets: Default DokuWiki colors 3827Result: Perfect classic DokuWiki look 3828``` 3829 3830**Bootstrap Template**: 3831``` 3832Reads: lib/tpl/bootstrap3/style.ini 3833Gets: Bootstrap color scheme 3834Result: Perfect Bootstrap integration 3835``` 3836 3837**Custom Template**: 3838``` 3839Reads: conf/tpl/mycustom/style.ini 3840Gets: Your custom colors 3841Result: Perfect custom theme match 3842``` 3843 3844### Fallback Chain 3845 38461. **Try** reading style.ini from template 38472. **If found** → Use exact colors from file 38483. **If not found** → Use CSS variables 38494. **If no CSS vars** → Use fallback colors 3850 3851**Always works, always matches!** ✓ 3852 3853## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 3854 3855### Fixed: Wiki Default Theme Day Panel Colors 3856- **Fixed:** Day popup panel now uses DokuWiki CSS variables 3857- **Fixed:** Panel background matches wiki theme 3858- **Fixed:** Panel header matches wiki theme 3859- **Fixed:** Border colors use wiki theme 3860- **Fixed:** Text colors use wiki theme 3861- **Result:** Perfect integration with DokuWiki templates! 3862 3863### All Changes 3864 3865**Day Panel Colors (Wiki Default)**: 3866 3867**Before**: 3868```php 3869background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 3870header: #3498db // Blue (wrong!) 3871``` 3872 3873**After**: 3874```php 3875background: var(--__background__, #fff) 3876header: var(--__background_alt__, #e8e8e8) 3877header_text: var(--__text__, #333) 3878border: var(--__border__, #ccc) 3879shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 3880``` 3881 3882**Event Colors (Wiki Default)**: 3883```php 3884event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 3885border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 3886bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 3887``` 3888 3889### Before vs After 3890 3891**Before (v5.0.1)**: 3892``` 3893Wiki Default - Click Week Cell: 3894┌────────────────┐ 3895│ Monday, Feb 8 │ ← Blue header (wrong) 3896├────────────────┤ 3897│ Team Meeting │ ← Dark gray bg (wrong) 3898│ 2:00 PM │ 3899└────────────────┘ 3900Doesn't match wiki theme 3901``` 3902 3903**After (v5.0.2)**: 3904``` 3905Wiki Default - Click Week Cell: 3906 3907Light Wiki Theme: 3908┌────────────────┐ 3909│ Monday, Feb 8 │ ← Light gray header ✓ 3910├────────────────┤ 3911│ Team Meeting │ ← White bg ✓ 3912│ 2:00 PM │ Dark text ✓ 3913└────────────────┘ 3914 3915Dark Wiki Theme: 3916┌────────────────┐ 3917│ Monday, Feb 8 │ ← Dark header ✓ 3918├────────────────┤ 3919│ Team Meeting │ ← Dark bg ✓ 3920│ 2:00 PM │ Light text ✓ 3921└────────────────┘ 3922 3923Perfectly matches wiki! 3924``` 3925 3926### CSS Variables Used 3927 3928**Wiki Default theme now uses**: 3929- `--__background__` - Main background (panel body) 3930- `--__background_alt__` - Alternate bg (panel header, events) 3931- `--__text__` - Text color (header text) 3932- `--__border__` - Border color (panel border, event borders) 3933 3934**With fallbacks**: 3935```css 3936var(--__background__, #fff) /* white fallback */ 3937var(--__background_alt__, #e8e8e8) /* light gray fallback */ 3938var(--__text__, #333) /* dark text fallback */ 3939var(--__border__, #ccc) /* gray border fallback */ 3940``` 3941 3942### Perfect Adaptation 3943 3944**Light Templates**: 3945- Light panel backgrounds ✓ 3946- Dark text ✓ 3947- Subtle borders ✓ 3948- Clean appearance ✓ 3949 3950**Dark Templates**: 3951- Dark panel backgrounds ✓ 3952- Light text ✓ 3953- Visible borders ✓ 3954- Perfect contrast ✓ 3955 3956**Custom Templates**: 3957- Uses template's CSS variables ✓ 3958- Automatic adaptation ✓ 3959- Seamless integration ✓ 3960 3961### Now Truly Adaptive 3962 3963Wiki Default theme now properly uses DokuWiki CSS variables for: 3964- ✅ Calendar grid 3965- ✅ Sidebar widget 3966- ✅ Event list 3967- ✅ **Day panel** ← v5.0.2! 3968- ✅ All backgrounds 3969- ✅ All text 3970- ✅ All borders 3971 3972**Complete wiki integration!** 3973 3974## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 3975 3976### Enhanced: Time Conflict Tooltips Now Themed 3977- **Fixed:** Conflict tooltips now match calendar theme 3978- **Added:** Theme-aware background, border, text colors 3979- **Added:** Theme-aware shadow effects 3980- **Result:** Complete visual consistency! 3981 3982### Tooltip Theming 3983 3984**Now uses theme colors for**: 3985- Background: Theme background color 3986- Border: Theme border color 3987- Header text: Theme primary text color 3988- Item text: Theme dim text color 3989- Shadow: Theme shadow color 3990 3991### Before vs After 3992 3993**Before (v5.0.0)**: 3994``` 3995Hover ⚠️ badge: 3996┌─────────────────┐ 3997│ ⚠️ Time Conflicts│ ← Default colors 3998│ • Event A │ 3999│ • Event B │ 4000└─────────────────┘ 4001``` 4002 4003**After (v5.0.1)**: 4004``` 4005Matrix Theme: 4006┌─────────────────┐ 4007│ ⚠️ Time Conflicts│ ← Green header 4008│ • Event A │ ← Green text 4009│ • Event B │ Dark green bg 4010└─────────────────┘ 4011 4012Purple Theme: 4013┌─────────────────┐ 4014│ ⚠️ Time Conflicts│ ← Purple header 4015│ • Event A │ ← Purple text 4016│ • Event B │ Dark purple bg 4017└─────────────────┘ 4018 4019Professional Theme: 4020┌─────────────────┐ 4021│ ⚠️ Time Conflicts│ ← Blue header 4022│ • Event A │ ← Dark text 4023│ • Event B │ Light bg 4024└─────────────────┘ 4025 4026Pink Theme: 4027┌─────────────────┐ 4028│ ⚠️ Time Conflicts│ ← Pink header ✨ 4029│ • Event A │ ← Pink text 4030│ • Event B │ Dark pink bg 4031└─────────────────┘ 4032 4033Wiki Default: 4034┌─────────────────┐ 4035│ ⚠️ Time Conflicts│ ← Adapts to wiki 4036│ • Event A │ ← Wiki colors 4037│ • Event B │ 4038└─────────────────┘ 4039``` 4040 4041### Now 100% Complete 4042 4043**Every tooltip themed**: 4044- ✅ Conflict tooltips 4045- ✅ All other tooltips (if any) 4046- ✅ Perfect consistency 4047 4048**Absolute perfection!** ✨ 4049 4050## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 4051 4052### Major Milestone: Version 5.0 4053 4054This 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 4056### Complete Feature Set 4057 4058**5 Beautiful Themes**: 4059- Matrix Edition (Green with glow) 4060- Purple Dream (Elegant purple) 4061- Professional Blue (Clean and modern) 4062- Pink Bling (Maximum sparkle) 4063- Wiki Default (Auto-adapts to your DokuWiki theme) 4064 4065**100% Theme Coverage**: 4066- ✅ Calendar grid and cells 4067- ✅ Event boxes and borders 4068- ✅ Sidebar widget 4069- ✅ Event list panel 4070- ✅ Search functionality 4071- ✅ Edit/Add dialogs (complete) 4072- ✅ Day popup dialogs 4073- ✅ Month picker 4074- ✅ All text (primary, dim, bright) 4075- ✅ All buttons 4076- ✅ All inputs and forms 4077- ✅ All checkboxes 4078- ✅ All borders 4079- ✅ All badges and labels 4080- ✅ Event highlight effects 4081 4082**Perfect Visual Consistency**: 4083- No white pixels anywhere 4084- No unthemed elements 4085- No default colors 4086- Complete visual unity 4087 4088### Major Improvements in v5.0 4089 40901. **Complete Dialog Theming** (v4.8.5-4.8.7) 4091 - Edit event dialog fully themed 4092 - Day popup dialog fully themed 4093 - All form inputs themed 4094 - All checkboxes themed 4095 - All buttons themed 4096 40972. **Event Box Border Perfection** (v4.8.6) 4098 - All 4 borders themed (top, right, bottom, left) 4099 - Sidebar event dividers themed 4100 - Past Events toggle border themed 4101 41023. **Checkbox Field Borders** (v4.9.0) 4103 - Repeating Event section border themed 4104 - Task checkbox section border themed 4105 41064. **Wiki Default Theme** (v4.10.0) 4107 - New 5th theme 4108 - Uses DokuWiki CSS variables 4109 - Auto-adapts to any wiki template 4110 - Perfect for seamless integration 4111 41125. **Clean Text Appearance** (v4.11.0) 4113 - Removed text glow from Matrix 4114 - Removed text glow from Purple 4115 - Removed text glow from Professional 4116 - Removed text glow from Wiki Default 4117 - Kept text glow on Pink Bling only 4118 41196. **Event Highlight Effects** (v4.12.0-4.12.1) 4120 - Theme-aware highlight glow 4121 - Click event bar → event glows 4122 - 3-second themed glow effect 4123 - Smooth animations 4124 4125### See RELEASE_NOTES.md for Complete Details 4126 4127For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 4128 4129## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 4130 4131### Fixed: Event Highlight Now Working 4132- **Fixed:** Used setProperty() to properly apply !important styles 4133- **Added:** Console logging for debugging 4134- **Fixed:** Proper style application with important flag 4135- **Result:** Highlight glow now works correctly! 4136 4137### Technical Fix 4138 4139**Before (not working)**: 4140```javascript 4141eventItem.style.background = color + ' !important'; // Doesn't work 4142``` 4143 4144**After (working)**: 4145```javascript 4146eventItem.style.setProperty('background', color, 'important'); // Works! 4147``` 4148 4149### Added Debug Logging 4150 4151Console now shows: 4152- "Highlighting event: [calId] [eventId] [date]" 4153- "Found event item: [element]" 4154- "Theme: [theme name]" 4155- "Highlight colors: [bg] [shadow]" 4156- "Applied highlight styles" 4157- "Removing highlight" (after 3 seconds) 4158 4159### Now Working 4160 4161Click any event bar → Event glows with theme colors ✓ 4162 4163## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 4164 4165### ✨ Enhanced: Event Click Highlight Now Theme-Aware 4166- **Fixed:** Restored event highlight glow when clicking calendar bars 4167- **Improved:** Highlight now matches each theme's colors 4168- **Added:** Stronger glow effect for better visibility 4169- **Duration:** 3 seconds with smooth fade 4170- **Result:** Beautiful themed highlights for all themes! 4171 4172### How It Works 4173 4174When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 4175 4176**Matrix Theme**: 4177```javascript 4178Background: Darker green (#1a3d1a) 4179Glow: Double green glow (0 0 20px + 0 0 40px) 4180Color: rgba(0, 204, 7, 0.8) 4181``` 4182 4183**Purple Theme**: 4184```javascript 4185Background: Darker purple (#3d2b4d) 4186Glow: Double purple glow 4187Color: rgba(155, 89, 182, 0.8) 4188``` 4189 4190**Professional Theme**: 4191```javascript 4192Background: Light blue (#e3f2fd) 4193Glow: Single blue glow 4194Color: rgba(74, 144, 226, 0.4) 4195``` 4196 4197**Pink Theme**: 4198```javascript 4199Background: Darker pink (#3d2030) 4200Glow: Double pink glow ✨ 4201Color: rgba(255, 20, 147, 0.8) 4202``` 4203 4204**Wiki Theme**: 4205```javascript 4206Background: var(--__background_neu__) 4207Glow: Blue glow (adapts to wiki) 4208Color: rgba(43, 115, 183, 0.4) 4209``` 4210 4211### Visual Examples 4212 4213**Matrix - Click Event**: 4214``` 4215Calendar: 4216┌─────────────┐ 4217│ 2:00 PM │ ← Click this bar 4218└─────────────┘ 4219 4220Event List: 4221╔═════════════════════╗ 4222║ Team Meeting ║ ← GLOWS GREEN 4223║ 2:00 PM ║ for 3 seconds 4224╚═════════════════════╝ 4225 ↑↑↑ Strong green glow ↑↑↑ 4226``` 4227 4228**Purple - Click Event**: 4229``` 4230Calendar: 4231┌─────────────┐ 4232│ 4:00 PM │ ← Click 4233└─────────────┘ 4234 4235Event List: 4236╔═════════════════════╗ 4237║ Code Review ║ ← GLOWS PURPLE 4238║ 4:00 PM ║ for 3 seconds 4239╚═════════════════════╝ 4240 ↑↑↑ Strong purple glow ↑↑↑ 4241``` 4242 4243**Pink - Click Event**: 4244``` 4245Calendar: 4246┌─────────────┐ 4247│ 1:00 PM │ ← Click 4248└─────────────┘ 4249 4250Event List: 4251╔═════════════════════╗ 4252║ Lunch Date ║ ← GLOWS PINK 4253║ 1:00 PM ✨ ║ for 3 seconds 4254╚═════════════════════╝ 4255 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 4256``` 4257 4258### Glow Specifications 4259 4260**Matrix**: 4261- Background: Dark green 4262- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 4263- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 4264- Effect: Strong green pulse 4265 4266**Purple**: 4267- Background: Dark purple 4268- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 4269- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 4270- Effect: Strong purple pulse 4271 4272**Professional**: 4273- Background: Light blue 4274- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 4275- Effect: Subtle blue glow 4276 4277**Pink**: 4278- Background: Dark pink 4279- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 4280- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 4281- Effect: MAXIMUM SPARKLE ✨ 4282 4283**Wiki**: 4284- Background: Theme neutral color 4285- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 4286- Effect: Adapts to wiki theme 4287 4288### User Experience 4289 4290**Click event bar** → Event highlights with themed glow 4291**Auto-scroll** → Event scrolls into view smoothly 4292**3 second glow** → Fade out after 3 seconds 4293**Smooth transition** → 0.3s ease-in-out 4294 4295### Perfect for Finding Events 4296 4297**Large event lists**: Quickly locate the clicked event ✓ 4298**Visual feedback**: Know which event you clicked ✓ 4299**Theme consistency**: Matches your chosen theme ✓ 4300**Smooth animation**: Professional appearance ✓ 4301 4302### All Themes Covered 4303 4304- ✅ Matrix: Green glow 4305- ✅ Purple: Purple glow 4306- ✅ Professional: Blue glow 4307- ✅ Pink: Maximum pink sparkle 4308- ✅ Wiki: Adaptive glow 4309 4310**Click any event bar and watch it glow!** ✨ 4311 4312## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 4313 4314### Changed: Text Glow Now Pink-Only 4315- **Removed:** Text shadow/glow from Matrix theme 4316- **Removed:** Text shadow/glow from Purple theme 4317- **Removed:** Text shadow/glow from Professional theme (already had none) 4318- **Removed:** Text shadow/glow from Wiki Default theme 4319- **Kept:** Text shadow/glow ONLY on Pink Bling theme 4320- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 4321 4322### All Changes 4323 4324**Before (Matrix, Purple)**: 4325```css 4326text-shadow: 0 0 2px $text_color; /* Glow effect */ 4327``` 4328 4329**After (Matrix, Purple, Professional, Wiki)**: 4330```css 4331text-shadow: none; /* Clean, no glow */ 4332``` 4333 4334**Pink Bling (unchanged)**: 4335```css 4336text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 4337``` 4338 4339### Text Shadow Removed From 4340 4341**Sidebar day numbers**: No glow ✓ 4342**Event titles**: No glow ✓ 4343**Event dates**: No glow ✓ 4344**Add Event button**: No glow ✓ 4345**Day popup events**: No glow ✓ 4346 4347### Before vs After 4348 4349**BEFORE (Matrix)**: 4350``` 4351Event Title ✨ ← Glowing green text 43522:00 PM ✨ ← Glowing text 4353``` 4354 4355**AFTER (Matrix)**: 4356``` 4357Event Title ← Clean green text 43582:00 PM ← Clean text 4359``` 4360 4361**Pink Bling (Still Glows)**: 4362``` 4363Event Title ✨ ← Still glowing! 43642:00 PM ✨ ← Maximum sparkle! 4365``` 4366 4367### Theme Appearances 4368 4369** Matrix Edition**: 4370- Clean green text 4371- No glow effects 4372- Professional appearance 4373- Still has border glow 4374 4375** Purple Dream**: 4376- Clean purple text 4377- No glow effects 4378- Elegant appearance 4379- Still has border glow 4380 4381** Professional Blue**: 4382- Clean text (unchanged) 4383- No glow effects 4384- Modern appearance 4385 4386** Pink Bling**: 4387- Glowing pink text ✨ 4388- Maximum glow effects 4389- Sparkle everywhere! 4390- All the bling! 4391 4392** Wiki Default**: 4393- Clean text 4394- No glow effects 4395- Matches wiki theme 4396 4397### Glow Effects Remaining 4398 4399**Border/box glow**: Still present on all themes ✓ 4400**Pink text glow**: Only on Pink Bling ✓ 4401**Shadow effects**: Still on buttons/boxes ✓ 4402 4403**Only TEXT glow removed from non-pink themes!** 4404 4405### Result 4406 4407**Cleaner, more professional look** for: 4408- Matrix ✓ 4409- Purple ✓ 4410- Professional ✓ 4411- Wiki Default ✓ 4412 4413**Maximum sparkle** for: 4414- Pink Bling ✨✓ 4415 4416**Best of both worlds!** 4417 4418## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 4419 4420### New: Wiki Default Theme 4421- **Added:** 5th theme that automatically matches your DokuWiki template 4422- **Uses:** CSS variables from your wiki theme 4423- **Adapts:** Automatically works with light and dark themes 4424- **Perfect:** Seamless integration with any DokuWiki template 4425 4426### How It Works 4427 4428**Wiki theme uses DokuWiki CSS variables**: 4429```css 4430bg: var(--__background_site__, #f5f5f5) 4431border: var(--__border__, #ccc) 4432text_primary: var(--__text__, #333) 4433text_bright: var(--__link__, #2b73b7) 4434text_dim: var(--__text_neu__, #666) 4435cell_bg: var(--__background__, #fff) 4436grid_border: var(--__border__, #ccc) 4437``` 4438 4439**With fallbacks for older DokuWiki versions**: 4440- If CSS variables exist → Use them ✓ 4441- If not available → Use fallback values ✓ 4442 4443### All 5 Themes 4444 4445**1. Matrix Edition** (Default) 4446- Dark green with neon glow 4447- Matrix-style effects 4448- Original theme 4449 4450**2. Purple Dream** 4451- Rich purple with violet accents 4452- Elegant and sophisticated 4453- Soft glow effects 4454 4455**3. Professional Blue** 4456- Clean blue and grey 4457- Modern professional 4458- No glow effects 4459 4460**4. Pink Bling** 4461- Glamorous hot pink 4462- Maximum sparkle ✨ 4463- Hearts and diamonds 4464 4465**5. Wiki Default** ← NEW! 4466- Matches your wiki template 4467- Auto-adapts to light/dark 4468- Perfect integration 4469 4470### Examples 4471 4472**Light Wiki Template**: 4473``` 4474Wiki Default theme shows: 4475- Light backgrounds (#f5f5f5) 4476- Dark text (#333) 4477- Light inputs (#fff) 4478- Gray borders (#ccc) 4479 4480Matches perfectly! ✓ 4481``` 4482 4483**Dark Wiki Template**: 4484``` 4485Wiki Default theme shows: 4486- Dark backgrounds (from template) 4487- Light text (from template) 4488- Dark inputs (from template) 4489- Dark borders (from template) 4490 4491Matches perfectly! ✓ 4492``` 4493 4494**Bootstrap Template**: 4495``` 4496Uses Bootstrap's colors 4497Matches perfectly! ✓ 4498``` 4499 4500**Material Template**: 4501``` 4502Uses Material's colors 4503Matches perfectly! ✓ 4504``` 4505 4506### CSS Variables Used 4507 4508**DokuWiki provides**: 4509- `--__background_site__`: Page background 4510- `--__background_alt__`: Section backgrounds 4511- `--__background__`: Content backgrounds 4512- `--__text__`: Primary text color 4513- `--__link__`: Link color 4514- `--__text_neu__`: Dimmed text 4515- `--__border__`: Border color 4516- `--__background_neu__`: Neutral background 4517 4518**All with fallbacks**: 4519```css 4520var(--__background_site__, #f5f5f5) 4521/* Falls back to light gray if variable doesn't exist */ 4522``` 4523 4524### Perfect for Every Template 4525 4526**Custom templates**: Automatically adapts ✓ 4527**Light themes**: Perfect match ✓ 4528**Dark themes**: Perfect match ✓ 4529**Any DokuWiki version**: Works with fallbacks ✓ 4530 4531### Complete Theme Collection 4532 4533Now with **5 gorgeous themes**: 4534- 3 dark themes (Matrix, Purple, Pink) 4535- 1 light theme (Professional) 4536- 1 adaptive theme (Wiki Default) ← NEW! 4537 4538**Something for everyone!** 4539 4540## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 4541 4542### Fixed: Checkbox Field Borders Themed 4543- **Fixed:** Added border-color to checkbox field divs 4544- **Fixed:** Repeating Event section border 4545- **Fixed:** Task checkbox section border 4546- **Result:** No white borders around checkboxes! 4547 4548### Changes 4549 4550**Checkbox Field Border Styling**: 4551 4552**Before**: 4553```html 4554<div class="form-field-checkbox" 4555 style="background: $bg !important;"> 4556<!-- Border shows white ✗ --> 4557``` 4558 4559**After**: 4560```php 4561<div class="form-field-checkbox" 4562 style="background: $bg !important; 4563 border-color: $grid_border !important;"> 4564<!-- Border themed ✓ --> 4565``` 4566 4567### Before vs After 4568 4569**BEFORE (v4.8.8)**: 4570``` 4571Edit Dialog: 4572┌──────────────────┐ 4573│ ☑ Repeating ║│ ← White border ✗ 4574└──────────────────┘ 4575┌──────────────────┐ 4576│ ☑ Task checkbox ║│ ← White border ✗ 4577└──────────────────┘ 4578``` 4579 4580**AFTER (v4.9.0)**: 4581``` 4582Matrix Edit Dialog: 4583┌──────────────────┐ 4584│ ☑ Repeating │ ← Green border ✓ 4585└──────────────────┘ 4586┌──────────────────┐ 4587│ ☑ Task checkbox │ ← Green border ✓ 4588└──────────────────┘ 4589``` 4590 4591### ABSOLUTE PERFECTION ACHIEVED 4592 4593**Every element themed**: 4594- ✅ All inputs 4595- ✅ All labels 4596- ✅ All sections 4597- ✅ **Checkbox field borders** ← v4.9.0! 4598- ✅ All buttons 4599- ✅ All checkboxes 4600- ✅ No white anywhere 4601 4602**100% COMPLETE!** ✨ 4603 4604## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4605 4606### Fixed: Checkbox Field Borders Themed 4607- **Fixed:** Added border-color to checkbox field divs 4608- **Fixed:** Repeating Event section border 4609- **Fixed:** Task checkbox section border 4610- **Result:** No white borders around checkboxes! 4611 4612### Fixed: Admin Sections Respect Wiki Theme 4613- **Fixed:** All admin backgrounds use CSS variables 4614- **Fixed:** Text colors use wiki text color 4615- **Fixed:** Borders use wiki border color 4616- **Result:** Admin matches wiki theme perfectly! 4617 4618### All Changes 4619 4620**1. Checkbox Field Border Styling**: 4621 4622**Before**: 4623```html 4624<div class="form-field-checkbox" 4625 style="background: $bg !important;"> 4626<!-- Border shows white ✗ --> 4627``` 4628 4629**After**: 4630```php 4631<div class="form-field-checkbox" 4632 style="background: $bg !important; 4633 border-color: $grid_border !important;"> 4634<!-- Border themed ✓ --> 4635``` 4636 4637**2. Admin CSS Variables**: 4638 4639**Added CSS variables for wiki theme compatibility**: 4640```css 4641.calendar-admin-wrapper { 4642 background: var(--__background_site__, #f5f5f5); 4643 color: var(--__text__, #333); 4644} 4645.calendar-admin-section { 4646 background: var(--__background_alt__, #fafafa); 4647} 4648.calendar-admin-input { 4649 background: var(--__background__, #fff); 4650 color: var(--__text__, #333); 4651} 4652``` 4653 4654**Replaced hardcoded colors**: 4655```php 4656// Before: 4657background: #f9f9f9 4658background: white 4659color: #333 4660border: 1px solid #ddd 4661 4662// After: 4663background: var(--__background_alt__, #f9f9f9) 4664background: var(--__background__, #fff) 4665color: var(--__text__, #333) 4666border: 1px solid var(--__border__, #ddd) 4667``` 4668 4669### Before vs After 4670 4671**BEFORE (v4.8.8)**: 4672``` 4673Edit Dialog: 4674┌──────────────────┐ 4675│ ☑ Repeating ║│ ← White border ✗ 4676└──────────────────┘ 4677┌──────────────────┐ 4678│ ☑ Task checkbox ║│ ← White border ✗ 4679└──────────────────┘ 4680 4681Admin Page (Dark Wiki Theme): 4682┌──────────────────┐ 4683│ Light sections │ ← White boxes ✗ 4684│ Light inputs │ ← Doesn't match ✗ 4685└──────────────────┘ 4686``` 4687 4688**AFTER (v4.8.9)**: 4689``` 4690Matrix Edit Dialog: 4691┌──────────────────┐ 4692│ ☑ Repeating │ ← Green border ✓ 4693└──────────────────┘ 4694┌──────────────────┐ 4695│ ☑ Task checkbox │ ← Green border ✓ 4696└──────────────────┘ 4697 4698Admin (Dark Wiki Theme): 4699┌──────────────────┐ 4700│ Dark sections │ ← Matches wiki ✓ 4701│ Dark inputs │ ← Perfect match ✓ 4702└──────────────────┘ 4703``` 4704 4705### Admin Theme Examples 4706 4707**Light Wiki Theme**: 4708``` 4709Admin page backgrounds: Light 4710Section boxes: Light gray 4711Inputs: White 4712Borders: Gray 4713Text: Dark 4714 4715Perfect match! ✓ 4716``` 4717 4718**Dark Wiki Theme**: 4719``` 4720Admin page backgrounds: Dark 4721Section boxes: Darker gray 4722Inputs: Dark 4723Borders: Dark gray 4724Text: Light 4725 4726Perfect match! ✓ 4727``` 4728 4729**DokuWiki Default**: 4730``` 4731Uses wiki's CSS variables 4732Automatically adapts 4733Always matches! ✓ 4734``` 4735 4736### Complete Coverage 4737 4738**Edit Dialog**: 4739- ✅ All inputs themed 4740- ✅ All labels themed 4741- ✅ All sections themed 4742- ✅ **Checkbox borders** ← v4.8.9! 4743- ✅ All buttons themed 4744- ✅ No white anywhere 4745 4746**Admin Interface**: 4747- ✅ **Tab navigation** ← v4.8.9! 4748- ✅ **Section boxes** ← v4.8.9! 4749- ✅ **Input fields** ← v4.8.9! 4750- ✅ **Text colors** ← v4.8.9! 4751- ✅ **Borders** ← v4.8.9! 4752- ✅ All tabs (Manage, Update, Outlook, Themes) 4753 4754### CSS Variables Used 4755 4756**DokuWiki provides these**: 4757- `--__background_site__`: Page background 4758- `--__background_alt__`: Alternate background 4759- `--__background__`: Primary background (inputs) 4760- `--__text__`: Text color 4761- `--__border__`: Border color 4762 4763**Fallbacks provided for older DokuWiki**: 4764```css 4765var(--__background_site__, #f5f5f5) 4766var(--__background_alt__, #fafafa) 4767var(--__background__, #fff) 4768var(--__text__, #333) 4769var(--__border__, #ddd) 4770``` 4771 4772### Perfect Adaptation 4773 4774**Admin now adapts to ANY wiki theme**: 4775- Light themes → Light admin ✓ 4776- Dark themes → Dark admin ✓ 4777- Custom themes → Matches perfectly ✓ 4778- No hardcoded colors ✓ 4779 4780**Calendar themes still work**: 4781- Matrix, Purple, Professional, Pink ✓ 4782- Independent from wiki theme ✓ 4783- Admin respects wiki ✓ 4784- Calendar respects calendar theme ✓ 4785 4786### FINAL PERFECTION 4787 4788**Frontend (Calendar)**: 4789- Complete theming ✓ 4790- 4 beautiful themes ✓ 4791- Every pixel themed ✓ 4792 4793**Backend (Admin)**: 4794- Respects wiki theme ✓ 4795- Works with any theme ✓ 4796- Perfect compatibility ✓ 4797 4798**ABSOLUTELY EVERYTHING THEMED!** ✨ 4799 4800## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4801 4802### Fixed: Task Checkboxes Now Fully Themed 4803- **Fixed:** Added background-color and border inline 4804- **Fixed:** Both PHP and JavaScript versions 4805- **Result:** No white checkboxes! 4806 4807### Fixed: Past Events Toggle Border 4808- **Fixed:** Added !important to border styling 4809- **Fixed:** Explicit top and bottom borders 4810- **Result:** No white line under toggle! 4811 4812### Fixed: Form Field Section Backgrounds 4813- **Fixed:** All form-field and form-row-group backgrounds 4814- **Fixed:** Every section in edit dialog 4815- **Result:** No white sections anywhere! 4816 4817### All Changes 4818 4819**1. Task Checkbox Styling**: 4820 4821**Before**: 4822```php 4823style="accent-color: $border !important;" 4824<!-- Only accent, background still white ✗ --> 4825``` 4826 4827**After**: 4828```php 4829style="accent-color: $border !important; 4830 background-color: $cell_bg !important; 4831 border: 2px solid $grid_border !important;" 4832<!-- Full theming ✓ --> 4833``` 4834 4835**2. Past Events Toggle Border**: 4836 4837**Before**: 4838```php 4839style="border-color: $grid_border;" 4840<!-- No !important, CSS overrides ✗ --> 4841``` 4842 4843**After**: 4844```php 4845style="border-color: $grid_border !important; 4846 border-top: 1px solid $grid_border !important; 4847 border-bottom: 1px solid $grid_border !important;" 4848<!-- Cannot be overridden ✓ --> 4849``` 4850 4851**3. Form Field Backgrounds**: 4852 4853**Before**: 4854```html 4855<div class="form-field"> 4856<div class="form-row-group"> 4857<!-- No background, shows white ✗ --> 4858``` 4859 4860**After**: 4861```php 4862<div class="form-field" style="background: $bg !important;"> 4863<div class="form-row-group" style="background: $bg !important;"> 4864<!-- Fully themed ✓ --> 4865``` 4866 4867### Before vs After 4868 4869**BEFORE (v4.8.7)**: 4870``` 4871Event: 4872□ Task checkbox ← White checkbox ✗ 4873 4874Past Events 4875▶ Past Events (3) ← White line below ✗ 4876───────────────── 4877 4878Edit Dialog: 4879┌──────────────┐ 4880│ Form fields │ ← White sections ✗ 4881└──────────────┘ 4882``` 4883 4884**AFTER (v4.8.8)**: 4885``` 4886Matrix Event: 4887☑ Task checkbox ← Green checkbox ✓ 4888 4889Past Events 4890▶ Past Events (3) ← Green border ✓ 4891───────────────── 4892 4893Matrix Edit Dialog: 4894┌──────────────┐ 4895│ Form fields │ ← Dark green ✓ 4896└──────────────┘ 4897``` 4898 4899### Complete Examples 4900 4901**Matrix Theme**: 4902``` 4903Task Checkbox: 4904☑ Checked → Green checkmark, green bg 4905☐ Unchecked → Green border, dark green bg ✓ 4906 4907Past Events Toggle: 4908▶ Past Events (3) 4909─────────────────── Green border ✓ 4910 4911Edit Dialog: 4912All sections dark green ✓ 4913No white anywhere ✓ 4914``` 4915 4916**Purple Theme**: 4917``` 4918Task Checkbox: 4919☑ Checked → Purple checkmark, purple bg 4920☐ Unchecked → Purple border, dark purple bg ✓ 4921 4922Past Events Toggle: 4923▶ Past Events (3) 4924─────────────────── Purple border ✓ 4925 4926Edit Dialog: 4927All sections dark purple ✓ 4928``` 4929 4930**Professional Theme**: 4931``` 4932Task Checkbox: 4933☑ Checked → Blue checkmark, white bg 4934☐ Unchecked → Gray border, white bg ✓ 4935 4936Past Events Toggle: 4937▶ Past Events (3) 4938─────────────────── Gray border ✓ 4939 4940Edit Dialog: 4941All sections light ✓ 4942``` 4943 4944**Pink Theme**: 4945``` 4946Task Checkbox: 4947☑ Checked → Pink checkmark, pink bg ✨ 4948☐ Unchecked → Pink border, dark pink bg ✓ 4949 4950Past Events Toggle: 4951▶ Past Events (3) 4952─────────────────── Pink border 4953 4954Edit Dialog: 4955All sections dark pink ✓ 4956``` 4957 4958### Checkbox Visual 4959 4960**Matrix - Unchecked**: 4961``` 4962┌─────┐ 4963│ │ ← Dark green background 4964│ │ Green border 4965└─────┘ 4966``` 4967 4968**Matrix - Checked**: 4969``` 4970┌─────┐ 4971│ ✓ │ ← Dark green background 4972│ │ Green checkmark 4973└─────┘ 4974``` 4975 4976### Past Events Border 4977 4978**Before**: 4979``` 4980▶ Past Events (3) 4981─────────────────── White line ✗ 4982``` 4983 4984**After**: 4985``` 4986▶ Past Events (3) 4987─────────────────── Green line ✓ (Matrix) 4988 Purple line ✓ (Purple) 4989 Gray line ✓ (Professional) 4990 Pink line ✓ (Pink) 4991``` 4992 4993### Form Field Coverage 4994 4995**All sections themed**: 4996- ✅ Title field 4997- ✅ Namespace field 4998- ✅ Description field 4999- ✅ **Date row** ← v4.8.8! 5000- ✅ **Checkbox sections** ← v4.8.8! 5001- ✅ **Recurring options** ← v4.8.8! 5002- ✅ **Time row** ← v4.8.8! 5003- ✅ **Color row** ← v4.8.8! 5004- ✅ Button footer 5005 5006**Every div has background!** ✓ 5007 5008### ABSOLUTE PERFECTION 5009 5010**Not a single white pixel**: 5011- ✅ No white checkboxes 5012- ✅ No white borders 5013- ✅ No white backgrounds 5014- ✅ No white sections 5015- ✅ No white lines 5016- ✅ No white anything 5017 5018**100% PERFECT THEMING!** ✨ 5019 5020## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 5021 5022### Fixed: Checkbox Section Backgrounds Themed 5023- **Fixed:** Repeating Event section background 5024- **Fixed:** Task checkbox section background 5025- **Result:** No white backgrounds in dialog! 5026 5027### Fixed: Unchecked Task Checkboxes Themed 5028- **Fixed:** Added CSS for checkbox backgrounds 5029- **Fixed:** Unchecked boxes show theme colors 5030- **Result:** No white checkboxes! 5031 5032### Fixed: Day Popup Dialog Fully Themed 5033- **Fixed:** Popup container, header, body themed 5034- **Fixed:** Event items in popup themed 5035- **Fixed:** Add Event button themed 5036- **Fixed:** Footer section themed 5037- **Result:** Perfect popup theming! 5038 5039### All Changes 5040 5041**1. Checkbox Section Backgrounds**: 5042 5043**Before**: 5044```html 5045<div class="form-field-checkbox"> 5046<!-- White background ✗ --> 5047``` 5048 5049**After**: 5050```php 5051<div class="form-field-checkbox" 5052 style="background: $bg !important;"> 5053<!-- Themed ✓ --> 5054``` 5055 5056**2. Checkbox Background CSS**: 5057 5058**Added to style block**: 5059```css 5060.task-checkbox { 5061 background-color: $cell_bg !important; 5062 border: 2px solid $grid_border !important; 5063} 5064``` 5065 5066**3. Day Popup Theming**: 5067 5068**Container**: 5069```javascript 5070style="background: $bg !important; 5071 border: 2px solid $border !important; 5072 box-shadow: 0 0 20px $shadow !important;" 5073``` 5074 5075**Header**: 5076```javascript 5077style="background: $header_bg !important; 5078 color: $text_primary !important; 5079 border-bottom: 1px solid $border !important;" 5080``` 5081 5082**Footer**: 5083```javascript 5084style="background: $bg !important; 5085 border-top: 1px solid $grid_border !important;" 5086``` 5087 5088**Add Event Button**: 5089```javascript 5090style="background: $border !important; 5091 color: $bg !important; 5092 border-color: $border !important;" 5093``` 5094 5095**Event Items**: 5096```javascript 5097style="background: $cell_bg !important; 5098 border: 1px solid $grid_border !important;" 5099``` 5100 5101### Before vs After 5102 5103**BEFORE (v4.8.6)**: 5104``` 5105Edit Dialog: 5106┌──────────────────┐ 5107│ ☑ Repeating Event│ ← White background ✗ 5108├──────────────────┤ 5109│ ☑ Task checkbox │ ← White background ✗ 5110└──────────────────┘ 5111 5112Day Popup: 5113┌──────────────────┐ 5114│ Monday, Feb 8 │ ← White ✗ 5115├──────────────────┤ 5116│ Team Meeting │ ← White ✗ 5117│ 2:00 PM │ 5118├──────────────────┤ 5119│ [+ Add Event] │ ← White ✗ 5120└──────────────────┘ 5121 5122Task checkbox: ☐ ← White ✗ 5123``` 5124 5125**AFTER (v4.8.7)**: 5126``` 5127Edit Dialog (Matrix): 5128┌──────────────────┐ 5129│ ☑ Repeating Event│ ← Dark green ✓ 5130├──────────────────┤ 5131│ ☑ Task checkbox │ ← Dark green ✓ 5132└──────────────────┘ 5133 5134Day Popup (Matrix): 5135┌──────────────────┐ 5136│ Monday, Feb 8 │ ← Dark green ✓ 5137├──────────────────┤ 5138│ Team Meeting │ ← Dark green ✓ 5139│ 2:00 PM │ 5140├──────────────────┤ 5141│ [+ Add Event] │ ← Green button ✓ 5142└──────────────────┘ 5143 5144Task checkbox: ☑ ← Green ✓ 5145``` 5146 5147### Complete Examples 5148 5149**Matrix Dialog**: 5150``` 5151┌──────────────────────────┐ 5152│ ✏️ Edit Event │ 5153├──────────────────────────┤ 5154│ Title: [_________] │ 5155│ Date: [__________] │ 5156│ │ 5157│ ☑ Repeating Event │ ← Dark green bg 5158├──────────────────────────┤ 5159│ ☑ Task checkbox │ ← Dark green bg 5160├──────────────────────────┤ 5161│ [Cancel] [ Save] │ 5162└──────────────────────────┘ 5163 5164All sections themed! ✓ 5165``` 5166 5167**Matrix Day Popup**: 5168``` 5169┌──────────────────────────┐ 5170│ Monday, February 8, 2026 │ ← Green header 5171├──────────────────────────┤ 5172│ ┌──────────────────────┐ │ 5173│ │ Team Meeting │ │ ← Dark green 5174│ │ 2:00 PM │ │ 5175│ └──────────────────────┘ │ 5176│ ┌──────────────────────┐ │ 5177│ │ Code Review │ │ ← Dark green 5178│ │ 4:00 PM │ │ 5179│ └──────────────────────┘ │ 5180├──────────────────────────┤ 5181│ [+ Add Event] │ ← Green button 5182└──────────────────────────┘ 5183``` 5184 5185**Purple Day Popup**: 5186``` 5187┌──────────────────────────┐ 5188│ Monday, February 8, 2026 │ ← Purple header 5189├──────────────────────────┤ 5190│ ┌──────────────────────┐ │ 5191│ │ Team Meeting │ │ ← Dark purple 5192│ │ 2:00 PM │ │ 5193│ └──────────────────────┘ │ 5194├──────────────────────────┤ 5195│ [+ Add Event] │ ← Purple button 5196└──────────────────────────┘ 5197``` 5198 5199**Professional Day Popup**: 5200``` 5201┌──────────────────────────┐ 5202│ Monday, February 8, 2026 │ ← Light header 5203├──────────────────────────┤ 5204│ ┌──────────────────────┐ │ 5205│ │ Team Meeting │ │ ← White 5206│ │ 2:00 PM │ │ 5207│ └──────────────────────┘ │ 5208├──────────────────────────┤ 5209│ [+ Add Event] │ ← Blue button 5210└──────────────────────────┘ 5211``` 5212 5213**Pink Day Popup**: 5214``` 5215┌──────────────────────────┐ 5216│ Monday, February 8, 2026 │ ← Pink header ✨ 5217├──────────────────────────┤ 5218│ ┌──────────────────────┐ │ 5219│ │ Team Meeting │ │ ← Dark pink 5220│ │ 2:00 PM │ │ 5221│ └──────────────────────┘ │ 5222├──────────────────────────┤ 5223│ [+ Add Event] │ ← Pink button 5224└──────────────────────────┘ 5225``` 5226 5227### Checkbox Theming 5228 5229**Unchecked boxes now themed**: 5230``` 5231Matrix: 5232☐ → Dark green bg, green border ✓ 5233 5234Purple: 5235☐ → Dark purple bg, purple border ✓ 5236 5237Professional: 5238☐ → White bg, gray border ✓ 5239 5240Pink: 5241☐ → Dark pink bg, pink border ✓ 5242``` 5243 5244### Complete Coverage 5245 5246**Edit Dialog - All Sections**: 5247- ✅ Header 5248- ✅ All inputs 5249- ✅ All labels 5250- ✅ **Checkbox sections** ← v4.8.7! 5251- ✅ Recurring options 5252- ✅ Button footer 5253- ✅ All checkboxes (checked & unchecked) 5254 5255**Day Popup - All Elements**: 5256- ✅ **Popup container** ← v4.8.7! 5257- ✅ **Header** ← v4.8.7! 5258- ✅ **Body** ← v4.8.7! 5259- ✅ **Event items** ← v4.8.7! 5260- ✅ **Namespace badges** ← v4.8.7! 5261- ✅ **Footer** ← v4.8.7! 5262- ✅ **Add Event button** ← v4.8.7! 5263- ✅ **No events message** ← v4.8.7! 5264 5265**Absolutely every dialog element themed!** ✨ 5266 5267### Perfect Theming Achievement 5268 5269**Every UI component in entire plugin**: 5270- ✅ Calendar grid 5271- ✅ Sidebar widget 5272- ✅ Event list 5273- ✅ Search bar 5274- ✅ Event boxes 5275- ✅ Edit dialog (complete) 5276- ✅ **Day popup** ← v4.8.7! 5277- ✅ Month picker 5278- ✅ All text 5279- ✅ All buttons 5280- ✅ All inputs 5281- ✅ **All checkboxes** ← v4.8.7! 5282- ✅ All borders 5283- ✅ All badges 5284- ✅ All backgrounds 5285 5286**NO WHITE ANYWHERE!** 5287 5288**100% COMPLETE THEMING ACHIEVED!** ✨ 5289 5290## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 5291 5292### Fixed: Dialog Checkbox Sections Themed 5293- **Fixed:** Recurring options section background themed 5294- **Fixed:** Section has themed border accent 5295- **Result:** No white sections in dialog! 5296 5297### Fixed: Dialog Button Section Themed 5298- **Fixed:** Button area background themed 5299- **Fixed:** Top border separator themed 5300- **Result:** Complete dialog theming! 5301 5302### Fixed: Event Box Borders Themed 5303- **Fixed:** Top, right, bottom borders now themed 5304- **Fixed:** Left border remains event color 5305- **Result:** Perfect event boxes! 5306 5307### All Changes 5308 5309**1. Recurring Options Section**: 5310 5311**Before**: 5312```html 5313<div class="recurring-options" style="display:none;"> 5314<!-- White background ✗ --> 5315``` 5316 5317**After**: 5318```php 5319<div class="recurring-options" 5320 style="display:none; 5321 background: $bg !important; 5322 padding: 8px; 5323 border-left: 2px solid $border; 5324 margin-left: 4px;"> 5325<!-- Themed with accent border ✓ --> 5326``` 5327 5328**2. Dialog Actions Section**: 5329 5330**Before**: 5331```html 5332<div class="dialog-actions-sleek"> 5333<!-- White background ✗ --> 5334``` 5335 5336**After**: 5337```php 5338<div class="dialog-actions-sleek" 5339 style="background: $bg !important; 5340 border-top: 1px solid $grid_border !important;"> 5341<!-- Themed with separator ✓ --> 5342``` 5343 5344**3. Event Box Borders**: 5345 5346**Before**: 5347```php 5348border-left-color: $event_color; 5349<!-- Only left border colored ✗ --> 5350``` 5351 5352**After**: 5353```php 5354border-left-color: $event_color; 5355border-top: 1px solid $grid_border !important; 5356border-right: 1px solid $grid_border !important; 5357border-bottom: 1px solid $grid_border !important; 5358<!-- All borders themed! ✓ --> 5359``` 5360 5361### Before vs After 5362 5363**BEFORE (v4.8.5)**: 5364``` 5365Dialog: 5366┌────────────────┐ 5367│ ☑ Repeating │ 5368├────────────────┤ ← White section ✗ 5369│ Repeat: Daily │ 5370│ Until: [____] │ 5371├────────────────┤ 5372│ [Cancel] [Save]│ ← White footer ✗ 5373└────────────────┘ 5374 5375Event Box: 5376┌────────────┐ 5377│Team Meeting│ ← White borders ✗ 5378│2:00 PM │ 5379└────────────┘ 5380``` 5381 5382**AFTER (v4.8.6)**: 5383``` 5384Matrix Dialog: 5385┌────────────────┐ 5386│ ☑ Repeating │ 5387├────────────────┤ ← Dark green ✓ 5388│ Repeat: Daily │ Green accent border 5389│ Until: [____] │ 5390├────────────────┤ 5391│ [Cancel] [Save]│ ← Dark green ✓ 5392└────────────────┘ 5393 5394Matrix Event Box: 5395┌────────────┐ 5396│Team Meeting│ ← Green borders ✓ 5397│2:00 PM │ 5398└────────────┘ 5399``` 5400 5401### Dialog Section Examples 5402 5403**Matrix Theme**: 5404``` 5405┌──────────────────────────┐ 5406│ ✏️ Edit Event │ 5407├──────────────────────────┤ 5408│ ☑ Repeating Event │ 5409├║─────────────────────────┤ Green accent 5410│║ Repeat Every: Daily │ Dark green bg 5411│║ Repeat Until: [_____] │ 5412└──────────────────────────┘ 5413 [Cancel] [ Save] ← Dark green bg 5414──────────────────────────── Green border 5415``` 5416 5417**Purple Theme**: 5418``` 5419┌──────────────────────────┐ 5420│ ☑ Repeating Event │ 5421├║─────────────────────────┤ Purple accent 5422│║ Repeat options... │ Dark purple bg 5423└──────────────────────────┘ 5424 [Cancel] [ Save] ← Dark purple bg 5425──────────────────────────── Purple border 5426``` 5427 5428**Professional Theme**: 5429``` 5430┌──────────────────────────┐ 5431│ ☑ Repeating Event │ 5432├║─────────────────────────┤ Blue accent 5433│║ Repeat options... │ Light bg 5434└──────────────────────────┘ 5435 [Cancel] [ Save] ← Light bg 5436──────────────────────────── Gray border 5437``` 5438 5439**Pink Theme**: 5440``` 5441┌──────────────────────────┐ 5442│ ☑ Repeating Event ✨ │ 5443├║─────────────────────────┤ Pink accent 5444│║ Repeat options... │ Dark pink bg 5445└──────────────────────────┘ 5446 [Cancel] [ Save] ← Dark pink bg 5447──────────────────────────── Pink border 5448``` 5449 5450### Event Box Border Visual 5451 5452**Before (v4.8.5)**: 5453``` 5454Left border only: 5455█ Team Meeting 5456█ 2:00 PM 5457█ [Edit] [Delete] 5458 5459Only event color on left ✗ 5460White on other 3 sides ✗ 5461``` 5462 5463**After (v4.8.6)**: 5464``` 5465All borders themed: 5466┌─────────────┐ 5467█Team Meeting │ ← Top: themed 5468█2:00 PM │ ← Right: themed 5469█[Edit][Del] │ ← Bottom: themed 5470└─────────────┘ 5471 5472Left: Event color ✓ 5473Other 3: Theme grid_border ✓ 5474``` 5475 5476### Matrix Event Box: 5477``` 5478┌─────────────┐ Green border 5479│Team Meeting │ 5480│2:00 PM │ 5481└─────────────┘ Green border 5482↑ 5483Green left bar 5484``` 5485 5486### Purple Event Box: 5487``` 5488┌─────────────┐ Purple border 5489│Team Meeting │ 5490│2:00 PM │ 5491└─────────────┘ Purple border 5492↑ 5493Purple left bar 5494``` 5495 5496### Professional Event Box: 5497``` 5498┌─────────────┐ Gray border 5499│Team Meeting │ 5500│2:00 PM │ 5501└─────────────┘ Gray border 5502↑ 5503Event color left bar 5504``` 5505 5506### Complete Dialog Coverage 5507 5508**All sections themed**: 5509- ✅ Dialog header 5510- ✅ Form inputs 5511- ✅ Checkbox labels 5512- ✅ **Recurring options** ← v4.8.6! 5513- ✅ **Button section** ← v4.8.6! 5514- ✅ All labels 5515- ✅ All buttons 5516 5517**No white sections!** ✓ 5518 5519### Complete Event Box Coverage 5520 5521**All borders themed**: 5522- ✅ Left border (event color) 5523- ✅ **Top border** ← v4.8.6! 5524- ✅ **Right border** ← v4.8.6! 5525- ✅ **Bottom border** ← v4.8.6! 5526- ✅ Background 5527- ✅ Text 5528 5529**Perfect box outline!** ✓ 5530 5531### Visual Perfection 5532 5533**Matrix theme event list**: 5534``` 5535┌─────────────┐ 5536│Team Meeting │ ← Green box 5537│2:00 PM │ 5538└─────────────┘ 5539┌─────────────┐ 5540│Code Review │ ← Green box 5541│4:00 PM │ 5542└─────────────┘ 5543 5544All borders green! ✓ 5545``` 5546 5547**ABSOLUTE PERFECT THEMING!** ✨ 5548 5549## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 5550 5551### Fixed: Event Dialog Fully Themed 5552- **Fixed:** Dialog background, header, inputs all themed 5553- **Fixed:** All labels, checkboxes, selects themed 5554- **Fixed:** Save and Cancel buttons themed 5555- **Result:** Dialog matches theme perfectly! 5556 5557### Fixed: Sidebar Event Borders Properly Themed 5558- **Fixed:** Event divider borders use grid_border color 5559- **Fixed:** Clean, subtle themed dividers 5560- **Result:** No more white borders in sidebar! 5561 5562### All Changes 5563 5564**1. Event Dialog Theming**: 5565 5566**Dialog container**: 5567```php 5568background: $themeStyles['bg'] !important; 5569border: 2px solid $themeStyles['border'] !important; 5570box-shadow: 0 0 20px $shadow !important; 5571``` 5572 5573**Dialog header**: 5574```php 5575background: $themeStyles['header_bg'] !important; 5576color: $themeStyles['text_primary'] !important; 5577border-bottom: 1px solid $border !important; 5578``` 5579 5580**All form inputs** (text, date, select, textarea): 5581```php 5582background: $themeStyles['cell_bg'] !important; 5583color: $themeStyles['text_primary'] !important; 5584border-color: $themeStyles['grid_border'] !important; 5585``` 5586 5587**All labels**: 5588```php 5589color: $themeStyles['text_primary'] !important; 5590``` 5591 5592**Checkboxes**: 5593```php 5594accent-color: $themeStyles['border'] !important; 5595``` 5596 5597**Buttons**: 5598```php 5599// Cancel button: 5600background: $cell_bg !important; 5601color: $text_primary !important; 5602 5603// Save button: 5604background: $border !important; 5605color: $bg !important; (or white for professional) 5606``` 5607 5608**2. Sidebar Event Borders**: 5609 5610**Before**: 5611```php 5612border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 5613``` 5614 5615**After**: 5616```php 5617borderColor = $themeStyles['grid_border']; 5618border-bottom: 1px solid $borderColor !important; 5619``` 5620 5621### Before vs After 5622 5623**BEFORE (v4.8.4)**: 5624``` 5625Event Dialog: 5626┌────────────────┐ 5627│ Add Event │ ← White background ✗ 5628│ Title: [_____] │ ← White inputs ✗ 5629│ Date: [_____] │ 5630│ [Cancel] [Save]│ ← Default buttons ✗ 5631└────────────────┘ 5632 5633Sidebar Events: 5634Event 1 ──────── ← White border ✗ 5635Event 2 ──────── ← White border ✗ 5636``` 5637 5638**AFTER (v4.8.5)**: 5639``` 5640Event Dialog (Matrix): 5641┌────────────────┐ 5642│ Add Event │ ← Dark green background ✓ 5643│ Title: [_____] │ ← Dark green inputs ✓ 5644│ Date: [_____] │ ← Green text ✓ 5645│ [Cancel] [Save]│ ← Themed buttons ✓ 5646└────────────────┘ 5647 5648Sidebar Events (Matrix): 5649Event 1 ──────── ← Green border ✓ 5650Event 2 ──────── ← Green border ✓ 5651``` 5652 5653### Dialog Examples by Theme 5654 5655**Matrix Dialog**: 5656``` 5657┌──────────────────────────┐ 5658│ ✏️ Edit Event │ ← Dark green header 5659├──────────────────────────┤ 5660│ Title │ ← Green labels 5661│ [Team Meeting________] │ ← Dark green input 5662│ │ 5663│ Start Date │ 5664│ [2026-02-08__] │ ← Dark green input 5665│ │ 5666│ Start Time │ 5667│ [2:00 PM ▼] │ ← Green select 5668│ │ 5669│ ☑ Repeating Event │ ← Green checkbox 5670│ │ 5671│ [Cancel] [ Save] │ ← Themed buttons 5672└──────────────────────────┘ 5673 5674Everything green! ✓ 5675``` 5676 5677**Purple Dialog**: 5678``` 5679┌──────────────────────────┐ 5680│ ✏️ Edit Event │ ← Dark purple header 5681├──────────────────────────┤ 5682│ [Inputs_______________] │ ← Dark purple inputs 5683│ ☑ Checkboxes │ ← Purple accent 5684│ [Cancel] [ Save] │ ← Purple buttons 5685└──────────────────────────┘ 5686``` 5687 5688**Professional Dialog**: 5689``` 5690┌──────────────────────────┐ 5691│ ✏️ Edit Event │ ← Light gradient header 5692├──────────────────────────┤ 5693│ [Inputs_______________] │ ← White inputs 5694│ ☑ Checkboxes │ ← Blue accent 5695│ [Cancel] [ Save] │ ← Blue save button 5696└──────────────────────────┘ 5697``` 5698 5699**Pink Dialog**: 5700``` 5701┌──────────────────────────┐ 5702│ ✏️ Edit Event │ ← Dark pink header ✨ 5703├──────────────────────────┤ 5704│ [Inputs_______________] │ ← Dark pink inputs 5705│ ☑ Checkboxes │ ← Pink accent 5706│ [Cancel] [ Save] │ ← Pink buttons 5707└──────────────────────────┘ 5708``` 5709 5710### Complete Dialog Element Coverage 5711 5712**All form elements themed**: 5713- ✅ Dialog container 5714- ✅ Dialog header 5715- ✅ Close button (×) 5716- ✅ Title input 5717- ✅ Namespace search 5718- ✅ Namespace dropdown 5719- ✅ Description textarea 5720- ✅ Start date input 5721- ✅ End date input 5722- ✅ Recurring checkbox 5723- ✅ Recurrence type select 5724- ✅ Recurrence end date 5725- ✅ Start time select 5726- ✅ End time select 5727- ✅ Color select 5728- ✅ Custom color picker 5729- ✅ Task checkbox 5730- ✅ All labels 5731- ✅ Cancel button 5732- ✅ Save button 5733 5734**Every single dialog element themed!** 5735 5736### Sidebar Border Example 5737 5738**Matrix Sidebar**: 5739``` 5740┌────────────────┐ 5741│ Today │ ← Green section header 5742├────────────────┤ 5743│ Team Meeting │ 5744│ 2:00 PM │ 5745├────────────────┤ ← Green border (grid_border) 5746│ Code Review │ 5747│ 4:00 PM │ 5748├────────────────┤ ← Green border 5749│ Stand-up │ 5750│ All day │ 5751└────────────────┘ 5752 5753Subtle green dividers! ✓ 5754``` 5755 5756### Complete Achievement 5757 5758**Every UI element themed**: 5759- ✅ Calendar 5760- ✅ Sidebar widget 5761- ✅ Event list 5762- ✅ Search bar 5763- ✅ **Event dialog** ← v4.8.5! 5764- ✅ Month picker 5765- ✅ **Sidebar dividers** ← v4.8.5! 5766- ✅ All text 5767- ✅ All inputs 5768- ✅ All buttons 5769- ✅ All borders 5770- ✅ All checkboxes 5771 5772**ABSOLUTE COMPLETE THEMING!** ✨ 5773 5774## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 5775 5776### Fixed: Professional Theme Background Consistency 5777- **Fixed:** Container and event backgrounds now match sidebar 5778- **Fixed:** Lighter, cleaner appearance 5779- **Fixed:** Better contrast and readability 5780- **Result:** Professional theme looks cohesive! 5781 5782### The Problem 5783 5784**v4.8.3 Professional theme**: 5785``` 5786Sidebar: Light background (#f5f7fa) 5787Calendar: Medium background (#e8ecf1) ← Didn't match! 5788Events: Light background (#f5f7fa) 5789 5790Inconsistent! ✗ 5791``` 5792 5793### The Fix 5794 5795**Updated Professional theme colors for consistency**: 5796 5797```php 5798// Before: 5799'bg' => '#e8ecf1', // Medium gray-blue 5800'cell_bg' => '#f5f7fa', // Very light 5801'grid_bg' => '#d5dbe3', // Medium-dark 5802 5803// After: 5804'bg' => '#f5f7fa', // Very light (matches sidebar) 5805'cell_bg' => '#ffffff', // Pure white (clean) 5806'grid_bg' => '#e8ecf1', // Subtle contrast 5807'grid_border' => '#d0d7de', // Softer borders 5808``` 5809 5810### Before vs After 5811 5812**BEFORE (v4.8.3)**: 5813``` 5814Professional Theme: 5815┌────────────────┐ 5816│ Calendar │ ← Medium gray (#e8ecf1) 5817│ ┌────────────┐ │ 5818│ │ Event │ │ ← Light (#f5f7fa) 5819│ └────────────┘ │ 5820└────────────────┘ 5821 5822Sidebar: 5823┌────────────────┐ 5824│ Widget │ ← Light (#f5f7fa) 5825└────────────────┘ 5826 5827Backgrounds don't match! ✗ 5828``` 5829 5830**AFTER (v4.8.4)**: 5831``` 5832Professional Theme: 5833┌────────────────┐ 5834│ Calendar │ ← Light (#f5f7fa) 5835│ ┌────────────┐ │ 5836│ │ Event │ │ ← White (#ffffff) 5837│ └────────────┘ │ 5838└────────────────┘ 5839 5840Sidebar: 5841┌────────────────┐ 5842│ Widget │ ← Light (#f5f7fa) 5843└────────────────┘ 5844 5845Perfect match! ✓ 5846``` 5847 5848### New Professional Theme Colors 5849 5850**Backgrounds**: 5851- Container: `#f5f7fa` (light blue-gray) 5852- Events: `#ffffff` (pure white) 5853- Grid: `#e8ecf1` (subtle contrast) 5854 5855**Text**: 5856- Primary: `#2c3e50` (dark blue-gray) 5857- Bright: `#4a90e2` (blue accent) 5858- Dim: `#7f8c8d` (medium gray) 5859 5860**Borders**: 5861- Main: `#4a90e2` (blue) 5862- Grid: `#d0d7de` (soft gray) 5863 5864**Header**: 5865- Gradient: `#ffffff` → `#f5f7fa` 5866 5867### Visual Example 5868 5869**Professional Theme Now**: 5870``` 5871┌─────────────────────────────┐ 5872│ February 2026 │ ← White to light gradient 5873├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 5874│S│M│T│W│T│F│S│ │ ← Light background 5875├─┼─┼─┼─┼─┼─┼─┤ │ 5876│ │ │1│2│3│4│5│ Event List │ ← White events 5877│ │ │ │ │ │ │ │ ┌───────────┐ │ 5878│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 5879└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 5880 5881Clean, professional look! ✓ 5882``` 5883 5884### Comparison with Other Themes 5885 5886**Matrix** (dark): 5887- Container: #242424 (dark green) 5888- Events: #242424 (dark green) 5889- Consistent dark theme ✓ 5890 5891**Purple** (dark): 5892- Container: #1a0d14 (dark purple) 5893- Events: #2a2030 (dark purple) 5894- Consistent dark theme ✓ 5895 5896**Professional** (light): 5897- Container: #f5f7fa (light blue) 5898- Events: #ffffff (white) 5899- Consistent light theme ✓ 5900 5901**Pink** (dark): 5902- Container: #1a0d14 (dark pink) 5903- Events: #1a0d14 (dark pink) 5904- Consistent dark theme ✓ 5905 5906**All themes now consistent!** 5907 5908### Better Contrast 5909 5910**Professional theme improvements**: 5911 5912**Readability**: 5913- Dark text (#2c3e50) on white/light backgrounds ✓ 5914- Excellent contrast ratio ✓ 5915- Easy on the eyes ✓ 5916 5917**Visual hierarchy**: 5918- White events pop against light container ✓ 5919- Blue accents stand out ✓ 5920- Clean, modern look ✓ 5921 5922**Professional appearance**: 5923- Lighter = more corporate/business feel ✓ 5924- Clean whites = premium quality ✓ 5925- Subtle grays = sophisticated ✓ 5926 5927### Complete Theme Consistency 5928 5929**All themes now have matching backgrounds**: 5930 5931**Matrix**: 5932- Sidebar & Calendar both dark green ✓ 5933 5934**Purple**: 5935- Sidebar & Calendar both dark purple ✓ 5936 5937**Professional**: 5938- Sidebar & Calendar both light ✓ (v4.8.4!) 5939 5940**Pink**: 5941- Sidebar & Calendar both dark pink ✓ 5942 5943**Perfect visual unity across all views!** ✨ 5944 5945## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 5946 5947### Fixed: Bold Text in Descriptions Themed 5948- **Fixed:** **Bold text** now uses theme primary color 5949- **Fixed:** Both `**text**` and `__text__` syntax themed 5950- **Result:** Bold text matches theme! 5951 5952### Fixed: Search Bar Fully Themed 5953- **Fixed:** Search input has !important on all styles 5954- **Fixed:** Icon and placeholder text themed 5955- **Result:** Search bar perfectly themed! 5956 5957### Fixed: Sidebar Event Boxes Themed 5958- **Fixed:** Event borders in sidebar now use theme grid_border color 5959- **Fixed:** Borders have !important flag 5960- **Result:** Sidebar boxes match theme! 5961 5962### All Changes 5963 5964**1. Bold Text Styling**: 5965 5966**Before**: 5967```html 5968<strong>Bold text</strong> ← Default black 5969``` 5970 5971**After**: 5972```php 5973<strong style="color: $text_primary !important; font-weight:bold;"> 5974 Bold text 5975</strong> 5976 5977Matrix: Green bold ✓ 5978Purple: Lavender bold ✓ 5979Professional: Dark bold ✓ 5980Pink: Pink bold ✓ 5981``` 5982 5983**2. Search Bar**: 5984 5985**Before**: 5986```php 5987style="background: $bg; color: $text;" 5988Could be overridden by CSS 5989``` 5990 5991**After**: 5992```php 5993style="background: $bg !important; 5994 color: $text_primary !important; 5995 border-color: $grid_border !important;" 5996 5997Cannot be overridden! ✓ 5998``` 5999 6000**3. Sidebar Event Boxes**: 6001 6002**Before**: 6003```php 6004$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 6005``` 6006 6007**After**: 6008```php 6009$borderColor = $themeStyles['grid_border']; // From theme 6010border-bottom: 1px solid $borderColor !important; 6011 6012Matrix: Green borders ✓ 6013Purple: Purple borders ✓ 6014Professional: Gray borders ✓ 6015Pink: Pink borders ✓ 6016``` 6017 6018### Before vs After 6019 6020**BEFORE (v4.8.2)**: 6021``` 6022Event description: 6023"Please review **Q1 Goals** carefully" 6024 ↑ 6025 Black bold ✗ 6026 6027Search bar: 6028[ Search...] ← Gray placeholder ✗ 6029 6030Sidebar: 6031┌────────────┐ 6032│ Event 1 │ 6033├────────────┤ ← Gray border ✗ 6034│ Event 2 │ 6035└────────────┘ 6036``` 6037 6038**AFTER (v4.8.3)**: 6039``` 6040Matrix Theme: 6041 6042Event description: 6043"Please review **Q1 Goals** carefully" 6044 ↑ 6045 Green bold ✓ 6046 6047Search bar: 6048[ Search...] ← Green themed ✓ 6049 6050Sidebar: 6051┌────────────┐ 6052│ Event 1 │ 6053├────────────┤ ← Green border ✓ 6054│ Event 2 │ 6055└────────────┘ 6056``` 6057 6058### Examples by Theme 6059 6060**Matrix Theme**: 6061``` 6062Description: 6063"Check **important notes** and links" 6064 ↑ 6065 Green bold 6066 6067Sidebar boxes: 6068Event 1 6069───────── Green border 6070Event 2 6071───────── Green border 6072``` 6073 6074**Purple Theme**: 6075``` 6076Description: 6077"Review **agenda items** before meeting" 6078 ↑ 6079 Lavender bold 6080 6081Sidebar boxes: 6082Event 1 6083───────── Purple border 6084Event 2 6085───────── Purple border 6086``` 6087 6088**Professional Theme**: 6089``` 6090Description: 6091"Update **quarterly reports** by Friday" 6092 ↑ 6093 Dark bold 6094 6095Sidebar boxes: 6096Event 1 6097───────── Gray border 6098Event 2 6099───────── Gray border 6100``` 6101 6102**Pink Theme**: 6103``` 6104Description: 6105"Don't forget **party supplies** ✨" 6106 ↑ 6107 Pink bold 6108 6109Sidebar boxes: 6110Event 1 6111───────── Pink border 6112Event 2 ✨ 6113───────── Pink border 6114``` 6115 6116### Complete Formatting Coverage 6117 6118**Text formatting themed**: 6119- ✅ Regular text 6120- ✅ **Bold text** ← NEW! 6121- ✅ Links 6122- ✅ Italic text (inherits) 6123- ✅ Code (inherits) 6124 6125**UI elements themed**: 6126- ✅ Search bar ← Enhanced! 6127- ✅ Search icon ← Enhanced! 6128- ✅ Search placeholder ← Enhanced! 6129- ✅ Sidebar borders ← NEW! 6130- ✅ Event borders 6131- ✅ Badges 6132- ✅ Buttons 6133 6134**Every element perfectly themed!** 6135 6136### Search Bar Coverage 6137 6138**All aspects themed**: 6139- Background: Theme cell_bg ✓ 6140- Text color: Theme text_primary ✓ 6141- Border: Theme grid_border ✓ 6142- Placeholder: Inherits text color ✓ 6143- Icon (): In placeholder ✓ 6144- Clear button (✕): Themed ✓ 6145 6146**Cannot be overridden!** (all have !important) 6147 6148### Sidebar Event Box Styling 6149 6150**Consistent borders**: 6151``` 6152Matrix: 6153╔════════════╗ 6154║ Event 1 ║ 6155╟────────────╢ ← grid_border color 6156║ Event 2 ║ 6157╚════════════╝ 6158 6159All themes match perfectly! ✓ 6160``` 6161 6162### Complete Theme Achievement 6163 6164**Every single element themed**: 6165- ✅ Backgrounds 6166- ✅ Text (regular) 6167- ✅ Text (bold) ← v4.8.3! 6168- ✅ Links 6169- ✅ Badges 6170- ✅ Buttons 6171- ✅ Checkboxes 6172- ✅ Icons 6173- ✅ Borders 6174- ✅ Search bar ← Enhanced v4.8.3! 6175- ✅ Sidebar boxes ← v4.8.3! 6176- ✅ Today marker 6177- ✅ Calendar grid 6178- ✅ Event panels 6179 6180**ABSOLUTE PERFECTION!** ✨ 6181 6182## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 6183 6184### Fixed: Links in Descriptions Now Themed 6185- **Fixed:** All links in event descriptions now use theme color 6186- **Fixed:** DokuWiki links [[page|text]] themed 6187- **Fixed:** Markdown links [text](url) themed 6188- **Fixed:** Plain URLs themed 6189- **Result:** Links match theme perfectly! 6190 6191### The Problem 6192 6193**v4.8.1 behavior**: 6194``` 6195Event description: 6196"Check out https://example.com" ← Blue default link ✗ 6197"See [[wiki:page|docs]]" ← Blue default link ✗ 6198``` 6199 6200### The Fix 6201 6202**Added inline color styling to ALL link types**: 6203 6204```php 6205// Get theme colors: 6206$linkColor = $themeStyles['border'] . ' !important'; 6207$linkStyle = ' style="color:' . $linkColor . ';"'; 6208 6209// Apply to links: 6210<a href="..." style="color: #00cc07 !important;">link</a> 6211``` 6212 6213**All link types themed**: 62141. DokuWiki syntax: `[[page|text]]` 62152. Markdown syntax: `[text](url)` 62163. Plain URLs: `https://example.com` 6217 6218### Before vs After 6219 6220**BEFORE (v4.8.1)**: 6221``` 6222Matrix Theme Description: 6223"Visit https://example.com for more info" 6224 ↑ 6225 Blue link ✗ (doesn't match green theme) 6226``` 6227 6228**AFTER (v4.8.2)**: 6229``` 6230Matrix Theme Description: 6231"Visit https://example.com for more info" 6232 ↑ 6233 Green link ✓ (matches theme!) 6234``` 6235 6236### Link Colors by Theme 6237 6238**Matrix**: 6239- Links: Green (#00cc07) !important 6240- Matches: Border, badges, highlights 6241 6242**Purple**: 6243- Links: Purple (#9b59b6) !important 6244- Matches: Border, badges, highlights 6245 6246**Professional**: 6247- Links: Blue (#4a90e2) !important 6248- Matches: Border, badges, highlights 6249 6250**Pink**: 6251- Links: Hot Pink (#ff1493) !important 6252- Matches: Border, badges, highlights ✨ 6253 6254### Examples 6255 6256**Matrix Description with Links**: 6257``` 6258Event: Team Meeting 6259Description: 6260"Review [[wiki:q1goals|Q1 Goals]] 6261and visit https://metrics.com" 6262 6263Both links → Green ✓ 6264``` 6265 6266**Purple Description with Links**: 6267``` 6268Event: Planning Session 6269Description: 6270"Check [schedule](https://cal.com) 6271for availability" 6272 6273Link → Purple ✓ 6274``` 6275 6276**Professional Description with Links**: 6277``` 6278Event: Client Call 6279Description: 6280"Prepare [[reports|Monthly Reports]] 6281before the call" 6282 6283Link → Blue ✓ 6284``` 6285 6286**Pink Description with Links**: 6287``` 6288Event: Party Planning 6289Description: 6290"RSVP at https://party.com ✨" 6291 6292Link → Hot Pink ✓ 6293``` 6294 6295### Technical Implementation 6296 6297**Updated renderDescription() function**: 6298 6299```php 6300private function renderDescription($description, $themeStyles = null) { 6301 // Get theme 6302 if ($themeStyles === null) { 6303 $theme = $this->getSidebarTheme(); 6304 $themeStyles = $this->getSidebarThemeStyles($theme); 6305 } 6306 6307 // Create link style 6308 $linkColor = $themeStyles['border'] . ' !important'; 6309 $linkStyle = ' style="color:' . $linkColor . ';"'; 6310 6311 // Apply to all link types: 6312 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 6313} 6314``` 6315 6316### Complete Theming 6317 6318**Every text element**: 6319- ✅ Event titles 6320- ✅ Event dates 6321- ✅ Event descriptions 6322- ✅ **Links in descriptions** ← NEW! 6323- ✅ Badges 6324- ✅ Buttons 6325 6326**Every color unified!** 6327 6328### Unified Theme Experience 6329 6330**Matrix Theme**: 6331``` 6332Everything green: 6333- Text: Green ✓ 6334- Links: Green ✓ 6335- Badges: Green ✓ 6336- Borders: Green ✓ 6337- Buttons: Green ✓ 6338- Today marker: Green ✓ 6339 6340Perfect harmony! ✓ 6341``` 6342 6343**No default blue links breaking the theme!** 6344 6345### Link Types Supported 6346 6347**1. DokuWiki Syntax**: 6348``` 6349[[page|Link Text]] → Themed ✓ 6350[[page]] → Themed ✓ 6351[[page#section|Text]] → Themed ✓ 6352``` 6353 6354**2. Markdown Syntax**: 6355``` 6356[Link Text](https://url.com) → Themed ✓ 6357[Text](internal-page) → Themed ✓ 6358``` 6359 6360**3. Plain URLs**: 6361``` 6362https://example.com → Themed ✓ 6363http://site.org → Themed ✓ 6364``` 6365 6366**All links perfectly themed!** 6367 6368## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 6369 6370### Fixed: All Badges Now Themed 6371- **Fixed:** TODAY badge themed with theme color 6372- **Fixed:** PAST DUE badge uses orange (warning color) 6373- **Fixed:** Namespace badges themed 6374- **Fixed:** All badges visible and hidden 6375- **Result:** All badges match theme! 6376 6377### Fixed: Today Cell More Prominent 6378- **Fixed:** Today cell now has 2px border in theme color 6379- **Fixed:** Border added to both PHP and JavaScript 6380- **Result:** Today stands out clearly! 6381 6382### Fixed: Past Event Text Fully Themed 6383- **Fixed:** Event-info div backgrounds ensure no gray 6384- **Result:** Expanded past events completely themed! 6385 6386### All Changes 6387 6388**1. Badge Theming**: 6389 6390**TODAY Badge**: 6391```php 6392// PHP & JavaScript: 6393style="background: $themeStyles['border'] !important; 6394 color: $bg !important;" 6395 6396Matrix: Green badge 6397Purple: Purple badge 6398Professional: Blue badge with white text 6399Pink: Pink badge 6400``` 6401 6402**PAST DUE Badge** (always orange): 6403```php 6404style="background: #ff9800 !important; 6405 color: #fff !important;" 6406``` 6407 6408**Namespace Badge**: 6409```php 6410style="background: $themeStyles['border'] !important; 6411 color: $bg !important;" 6412``` 6413 6414**2. Today Cell Border**: 6415 6416**PHP**: 6417```php 6418$todayBorder = $isToday ? 6419 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 6420``` 6421 6422**JavaScript**: Same 6423 6424**Result**: Today cell has prominent colored border! 6425 6426### Before vs After 6427 6428**BEFORE (v4.8.0)**: 6429``` 6430Calendar: 6431┌─┬─┬─┬─┬─┬─┬─┐ 6432│1│2│3│4│5│6│7│ 6433│ │ │ │[8]│ │ │ ← Today: subtle background 6434└─┴─┴─┴─┴─┴─┴─┘ 6435 6436Event badges: 6437Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 6438``` 6439 6440**AFTER (v4.8.1)**: 6441``` 6442Calendar (Matrix): 6443┌─┬─┬─┬─┬─┬─┬─┐ 6444│1│2│3│4│5│6│7│ 6445│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 6446└─┴─┴─┴─┴─┴─┴─┘ 6447 6448Event badges (Matrix): 6449Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 6450``` 6451 6452### Matrix Theme Example 6453 6454**Calendar**: 6455``` 6456Today cell: 6457┌────┐ 6458│ 8 │ Dark green bg + Green 2px border 6459└────┘ 6460Very obvious! 6461``` 6462 6463**Badges**: 6464``` 6465[TODAY] ← Green bg, dark text 6466[Work] ← Green bg, dark text 6467[PAST DUE] ← Orange bg, white text 6468``` 6469 6470### Purple Theme Example 6471 6472**Calendar**: 6473``` 6474Today cell: 6475┌────┐ 6476│ 8 │ Dark purple bg + Purple 2px border 6477└────┘ 6478``` 6479 6480**Badges**: 6481``` 6482[TODAY] ← Purple bg 6483[Work] ← Purple bg 6484``` 6485 6486### Professional Theme Example 6487 6488**Calendar**: 6489``` 6490Today cell: 6491┌────┐ 6492│ 8 │ Light blue bg + Blue 2px border 6493└────┘ 6494``` 6495 6496**Badges**: 6497``` 6498[TODAY] ← Blue bg, white text 6499[Work] ← Blue bg, white text 6500``` 6501 6502### Pink Theme Example 6503 6504**Calendar**: 6505``` 6506Today cell: 6507┌────┐ 6508│ 8 │ Dark pink bg + Pink 2px border ✨ 6509└────┘ 6510``` 6511 6512**Badges**: 6513``` 6514[TODAY] ← Pink bg 6515[Work] ← Pink bg ✨ 6516``` 6517 6518### Complete Badge Coverage 6519 6520**All badges themed**: 6521- ✅ TODAY badge (theme color) 6522- ✅ PAST DUE badge (orange warning) 6523- ✅ Namespace badges (theme color) 6524- ✅ Visible events 6525- ✅ Hidden/past events 6526 6527**No gray badges anywhere!** 6528 6529### Today Cell Visual 6530 6531**Dual indicators**: 65321. Background color (theme today bg) 65332. Border (2px theme color) ← NEW! 6534 6535**Result**: Today is VERY obvious! 6536 6537**Matrix**: Green bg + Green border 6538**Purple**: Purple bg + Purple border 6539**Professional**: Light blue bg + Blue border 6540**Pink**: Pink bg + Pink border ✨ 6541 6542### Complete Theming 6543 6544**Every element themed**: 6545- ✅ Backgrounds 6546- ✅ Text colors 6547- ✅ Badges (v4.8.1!) 6548- ✅ Today marker (v4.8.1!) 6549- ✅ Checkboxes 6550- ✅ Buttons 6551- ✅ Icons 6552 6553**Absolutely everything!** ✨ 6554 6555## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 6556 6557### Fixed: All Event Backgrounds Now Themed 6558- **Fixed:** event-info div now has themed background 6559- **Fixed:** event-meta-compact div (visible) now has themed background 6560- **Fixed:** event-desc-compact div now has themed background 6561- **Fixed:** All !important flags added to prevent CSS override 6562- **Result:** Entire event item fully themed! 6563 6564### Fixed: Description Text Shows Correct Color Immediately 6565- **Fixed:** Description divs now have explicit background + color on load 6566- **Fixed:** Both visible and hidden descriptions fully styled 6567- **Result:** No more gray text on initial load! 6568 6569### The Problem 6570 6571**v4.7.9 behavior**: 6572``` 6573Expanded past event: 6574┌────────────────────────┐ 6575│ ▾ Team Meeting │ ← Themed ✓ 6576│ Mon, Feb 8 │ ← Themed ✓ 6577│ │ 6578│ [Event details] │ ← Gray background ✗ 6579│ [Description] │ ← Gray text until navigation ✗ 6580└────────────────────────┘ 6581 6582Only the date/time div was themed! 6583``` 6584 6585### The Fix 6586 6587**Added background to ALL inner divs**: 6588 6589**PHP**: 6590```php 6591// Event container: 6592style="background:' . $themeStyles['cell_bg'] . ' !important;" 6593 6594// event-info wrapper: 6595<div class="event-info" 6596 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6597 6598// event-meta-compact: 6599<div class="event-meta-compact" 6600 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6601 6602// event-desc-compact: 6603<div class="event-desc-compact" 6604 style="background:' . $themeStyles['cell_bg'] . ' !important; 6605 color:' . $themeStyles['text_dim'] . ' !important;"> 6606``` 6607 6608**JavaScript**: Same styling applied 6609 6610### Before vs After 6611 6612**BEFORE (v4.7.9)**: 6613``` 6614Matrix Theme - Expanded Event: 6615┌────────────────────────┐ 6616│ ▾ Team Meeting │ 6617│ Mon, Feb 8 ← Green │ 6618│ │ 6619│ Details ← Gray ✗ │ 6620│ Description ← Gray ✗ │ 6621│ [✏️] [️] │ 6622└────────────────────────┘ 6623``` 6624 6625**AFTER (v4.8.0)**: 6626``` 6627Matrix Theme - Expanded Event: 6628┌────────────────────────┐ 6629│ ▾ Team Meeting │ 6630│ Mon, Feb 8 ← Green │ 6631│ │ 6632│ Details ← Green ✓│ 6633│ Description ← Green ✓│ 6634│ [✏️] [️] │ 6635└────────────────────────┘ 6636 6637Entire event themed! 6638``` 6639 6640### What's Themed Now 6641 6642**Event Item Structure** (all themed): 6643``` 6644event-compact-item ← Themed ✓ 6645 └─ event-info ← Themed ✓ (v4.8.0!) 6646 ├─ event-title-row ← Themed ✓ 6647 ├─ event-meta ← Themed ✓ (v4.8.0!) 6648 └─ event-desc ← Themed ✓ (v4.8.0!) 6649``` 6650 6651**Every layer has background!** 6652 6653### Matrix Theme Example 6654 6655**Complete event**: 6656``` 6657┌────────────────────────────┐ 6658│ Team Meeting │ ← Dark green bg 6659│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 6660│ Discussed Q1 goals and │ ← Dark green bg 6661│ set targets for team │ ← Dark green bg 6662│ [✏️] [️] [☑] │ ← Dark green bg 6663└────────────────────────────┘ 6664 6665Consistent green throughout! ✓ 6666``` 6667 6668### Purple Theme Example 6669 6670``` 6671┌────────────────────────────┐ 6672│ Team Meeting │ ← Dark purple bg 6673│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 6674│ Discussed Q1 goals │ ← Dark purple bg 6675│ [✏️] [️] [☑] │ ← Dark purple bg 6676└────────────────────────────┘ 6677 6678Consistent purple throughout! ✓ 6679``` 6680 6681### Professional Theme Example 6682 6683``` 6684┌────────────────────────────┐ 6685│ Team Meeting │ ← Light bg 6686│ Mon, Feb 8 • 2:00 PM │ ← Light bg 6687│ Discussed Q1 goals │ ← Light bg 6688│ [✏️] [️] [☑] │ ← Light bg 6689└────────────────────────────┘ 6690 6691Consistent light throughout! ✓ 6692``` 6693 6694### Pink Theme Example 6695 6696``` 6697┌────────────────────────────┐ 6698│ Team Meeting │ ← Dark pink bg 6699│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 6700│ Discussed Q1 goals │ ← Dark pink bg 6701│ [✏️] [️] [☑] │ ← Dark pink bg 6702└────────────────────────────┘ 6703 6704Consistent pink throughout! ✓ 6705``` 6706 6707### Complete Theming 6708 6709**Every element, every layer**: 6710- ✅ Container 6711- ✅ Event item 6712- ✅ Event info wrapper (v4.8.0!) 6713- ✅ Title row 6714- ✅ Meta div (v4.8.0!) 6715- ✅ Description div (v4.8.0!) 6716- ✅ Action buttons 6717- ✅ Checkboxes 6718 6719**No gray anywhere!** 6720 6721### Why Multiple Backgrounds? 6722 6723**CSS layers stack**: 6724```html 6725<div style="background: green;"> ← Layer 1 6726 <div style="background: inherit;"> ← Could be gray! 6727 <div>Content</div> ← Inherits gray! 6728 </div> 6729</div> 6730 6731Better: 6732<div style="background: green;"> ← Layer 1 6733 <div style="background: green;"> ← Layer 2 forced 6734 <div style="background: green;"> ← Layer 3 forced 6735 Content ← All green! 6736 </div> 6737 </div> 6738</div> 6739``` 6740 6741**Every layer forced = Perfect theming!** 6742 6743### !important Everywhere 6744 6745**All styling now uses !important**: 6746- background: ... !important 6747- color: ... !important 6748 6749**Result**: CSS cannot override themes! 6750 6751**Version 4.8.0 = Complete, bulletproof theming!** ✨ 6752 6753## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 6754 6755### Fixed: Past Event Expanded Background Themed 6756- **Fixed:** Past event meta div now has theme background when expanded 6757- **Fixed:** Both PHP and JavaScript render with theme background 6758- **Result:** Expanded past events have proper themed background! 6759 6760### ✅ Fixed: Checkboxes Now Themed 6761- **Fixed:** Task checkboxes use accent-color matching theme 6762- **Fixed:** Cursor changes to pointer on hover 6763- **Result:** Checkboxes match theme color! 6764 6765### Fixed: Action Buttons (Edit/Delete) Themed 6766- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 6767- **Fixed:** Background, text, and border all use theme colors 6768- **Result:** All icons themed! 6769 6770### All Changes 6771 6772**1. Past Event Expanded Background**: 6773 6774**PHP**: 6775```php 6776// Before: 6777<div class="event-meta-compact" style="display:none;"> 6778 6779// After: 6780<div class="event-meta-compact" 6781 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 6782``` 6783 6784**JavaScript**: Same treatment 6785 6786**Result**: Expanded past events have themed background! 6787 6788**2. Task Checkboxes**: 6789 6790**PHP & JavaScript**: 6791```php 6792// Added accent-color: 6793<input type="checkbox" 6794 style="accent-color:' . $themeStyles['border'] . ' !important; 6795 cursor:pointer;"> 6796``` 6797 6798**accent-color** changes the checkbox color: 6799- Matrix: Green checkboxes ✓ 6800- Purple: Purple checkboxes ✓ 6801- Professional: Blue checkboxes ✓ 6802- Pink: Pink checkboxes ✓ 6803 6804**3. Edit/Delete Buttons**: 6805 6806**PHP**: 6807```php 6808<button class="event-action-btn" 6809 style="color:' . $themeStyles['text_primary'] . ' !important; 6810 background:' . $themeStyles['cell_bg'] . ' !important; 6811 border-color:' . $themeStyles['grid_border'] . ' !important;"> 6812 ️ 6813</button> 6814``` 6815 6816**JavaScript**: Same 6817 6818**Result**: Buttons blend with theme! 6819 6820### Before vs After 6821 6822**BEFORE (v4.7.8)**: 6823``` 6824Past Event (expanded): 6825┌─────────────────────────┐ 6826│ ▾ Team Meeting │ 6827│ Mon, Feb 8 │ ← White background ✗ 6828│ Description │ 6829├─────────────────────────┤ 6830│ [✏️] [️] [☐] │ ← Default colors ✗ 6831└─────────────────────────┘ 6832``` 6833 6834**AFTER (v4.7.9)**: 6835``` 6836Past Event (expanded - Matrix): 6837┌─────────────────────────┐ 6838│ ▾ Team Meeting │ 6839│ Mon, Feb 8 │ ← Dark green bg ✓ 6840│ Description │ 6841├─────────────────────────┤ 6842│ [✏️] [️] [☑] │ ← Themed ✓ 6843└─────────────────────────┘ 6844``` 6845 6846### Matrix Theme Example 6847 6848**Checkboxes**: Green accent 6849**Buttons**: Dark bg, green text, green borders 6850**Expanded**: Dark green background 6851 6852``` 6853Task: ☑ Complete report ← Green checkmark 6854[✏️] [️] ← Dark buttons with green 6855``` 6856 6857### Purple Theme Example 6858 6859**Checkboxes**: Purple accent 6860**Buttons**: Dark purple bg, lavender text 6861**Expanded**: Dark purple background 6862 6863``` 6864Task: ☑ Complete report ← Purple checkmark 6865[✏️] [️] ← Purple themed 6866``` 6867 6868### Professional Theme Example 6869 6870**Checkboxes**: Blue accent 6871**Buttons**: Light bg, dark text 6872**Expanded**: Light background 6873 6874``` 6875Task: ☑ Complete report ← Blue checkmark 6876[✏️] [️] ← Light themed 6877``` 6878 6879### Pink Theme Example 6880 6881**Checkboxes**: Pink accent 6882**Buttons**: Dark pink bg, pink text 6883**Expanded**: Dark pink background 6884 6885``` 6886Task: ☑ Complete report ← Pink checkmark 6887[✏️] [️] ← Pink themed 6888``` 6889 6890### Complete Icon Coverage 6891 6892**Themed Icons/Buttons**: 6893- ✅ Task checkboxes (accent-color) 6894- ✅ Edit button (✏️) 6895- ✅ Delete button (️) 6896- ✅ Navigation arrows (◀ ▶) 6897- ✅ Today button 6898- ✅ Past Events arrow (▶) 6899 6900**All interactive elements themed!** 6901 6902### How accent-color Works 6903 6904**Modern CSS property** for form controls: 6905```css 6906input[type="checkbox"] { 6907 accent-color: #00cc07; /* Green checkbox! */ 6908} 6909``` 6910 6911**Browser support**: All modern browsers ✓ 6912 6913**Result**: Checkboxes automatically match theme! 6914 6915### Complete Theme Coverage 6916 6917**Backgrounds**: 6918- ✅ Container 6919- ✅ Calendar-left 6920- ✅ Calendar-right 6921- ✅ Event items 6922- ✅ Past event expanded (v4.7.9!) 6923- ✅ Action buttons (v4.7.9!) 6924 6925**Icons/Controls**: 6926- ✅ Checkboxes (v4.7.9!) 6927- ✅ Edit/Delete buttons (v4.7.9!) 6928- ✅ Navigation buttons 6929- ✅ All arrows 6930 6931**Every element perfectly themed!** ✨ 6932 6933## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 6934 6935### Fixed: White Bar at Bottom of Calendar 6936- **Fixed:** Added background to calendar-left div with !important 6937- **Result:** No more white bar at bottom! 6938 6939### Fixed: Past Event Expanded Details Not Themed 6940- **Fixed:** Past event date/time now themed when expanded 6941- **Fixed:** Past event descriptions now themed when expanded 6942- **Fixed:** Both PHP and JavaScript render with theme colors 6943- **Result:** Expanding past events shows themed text! 6944 6945### Fixed: Event Description Text Color 6946- **Fixed:** All event descriptions now use theme text_dim color 6947- **Fixed:** Both visible and hidden descriptions themed 6948- **Result:** Descriptions always match theme! 6949 6950### All Changes 6951 6952**1. Bottom White Bar** (calendar-left div): 6953 6954**Before**: 6955```html 6956<div class="calendar-compact-left"> 6957<!-- White background showing at bottom --> 6958``` 6959 6960**After**: 6961```html 6962<div class="calendar-compact-left" 6963 style="background: #242424 !important;"> 6964<!-- Matches theme background --> 6965``` 6966 6967**2. Past Event Expanded Details**: 6968 6969**PHP** - Added colors to hidden details: 6970```php 6971// Past event meta (hidden): 6972<span class="event-date-time" 6973 style="color:' . $themeStyles['text_dim'] . ' !important;"> 6974 6975// Past event description (hidden): 6976<div class="event-desc-compact" 6977 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 6978``` 6979 6980**JavaScript** - Same treatment: 6981```javascript 6982// Past event meta: 6983html += '<span class="event-date-time" 6984 style="color:' + themeStyles.text_dim + ' !important;">'; 6985 6986// Past event description: 6987html += '<div class="event-desc-compact" 6988 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 6989``` 6990 6991**3. All Event Descriptions**: 6992 6993**Both visible and hidden descriptions now themed**: 6994```php 6995// PHP: 6996style="color:' . $themeStyles['text_dim'] . ' !important;" 6997 6998// JavaScript: 6999style="color:' + themeStyles.text_dim + ' !important;" 7000``` 7001 7002### Before vs After 7003 7004**BEFORE (v4.7.7)**: 7005``` 7006Calendar bottom: 7007┌──────────────┐ 7008│ Calendar │ 7009│ Grid │ 7010└──────────────┘ 7011▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 7012 7013Past Event (collapsed): 7014▸ Team Meeting 7015 7016Past Event (expanded): 7017▾ Team Meeting 7018 Mon, Feb 8 ← Gray text ✗ 7019 Description ← Gray text ✗ 7020``` 7021 7022**AFTER (v4.7.8)**: 7023``` 7024Calendar bottom: 7025┌──────────────┐ 7026│ Calendar │ 7027│ Grid │ 7028└──────────────┘ 7029No white bar! ✓ 7030 7031Past Event (collapsed): 7032▸ Team Meeting 7033 7034Past Event (expanded): 7035▾ Team Meeting 7036 Mon, Feb 8 ← Theme dim color ✓ 7037 Description ← Theme dim color ✓ 7038``` 7039 7040### Matrix Theme Example 7041 7042**Past event expanded**: 7043``` 7044▾ Team Meeting (past) 7045 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 7046 Discussed Q1 goals ← Dim green (#00aa00) 7047 7048Everything themed! ✓ 7049``` 7050 7051### Purple Theme Example 7052 7053**Past event expanded**: 7054``` 7055▾ Team Meeting (past) 7056 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 7057 Discussed Q1 goals ← Dim purple (#8e7ab8) 7058 7059Everything themed! ✓ 7060``` 7061 7062### Professional Theme Example 7063 7064**Past event expanded**: 7065``` 7066▾ Team Meeting (past) 7067 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 7068 Discussed Q1 goals ← Gray (#7f8c8d) 7069 7070Everything themed! ✓ 7071``` 7072 7073### Pink Theme Example 7074 7075**Past event expanded**: 7076``` 7077▾ Team Meeting (past) 7078 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 7079 Discussed Q1 goals ← Light pink (#ff85c1) 7080 7081Everything themed! ✓ 7082``` 7083 7084### Complete Coverage 7085 7086**Calendar Layout**: 7087- ✅ Container background 7088- ✅ Calendar-left background (v4.7.8!) 7089- ✅ Calendar-right background 7090- ✅ No white bars anywhere! 7091 7092**Event Details**: 7093- ✅ Event titles 7094- ✅ Event dates/times 7095- ✅ Event descriptions (visible) (v4.7.8!) 7096- ✅ Past event dates (expanded) (v4.7.8!) 7097- ✅ Past event descriptions (expanded) (v4.7.8!) 7098 7099**Absolutely everything themed!** 7100 7101## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 7102 7103### Fixed: Added !important to EVERY Themed Element 7104- **Fixed:** S M T W T F S headers now have background + color with !important 7105- **Fixed:** "Past Events" text now has explicit color with !important 7106- **Fixed:** Today cell background now forced with !important 7107- **Fixed:** All day numbers now have !important color 7108- **Fixed:** Empty cells now have !important background 7109- **Result:** CSS CANNOT override themes anymore! 7110 7111### The Nuclear Option: !important Everywhere 7112 7113**Problem**: DokuWiki CSS was still winning: 7114```css 7115/* DokuWiki theme overriding everything: */ 7116.dokuwiki table th { background: white !important; color: black !important; } 7117.dokuwiki td { background: white !important; } 7118``` 7119 7120**Solution**: Add !important to EVERY inline style: 7121```html 7122<th style="background: #242424 !important; color: #00cc07 !important;"> 7123<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 7124<span style="color: #00cc07 !important;"> 7125``` 7126 7127### All Changes 7128 7129**1. Table Headers (S M T W T F S)**: 7130 7131**PHP** - Added background + !important everywhere: 7132```php 7133$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 7134 color:' . $themeStyles['text_primary'] . ' !important; 7135 border-color:' . $themeStyles['grid_border'] . ' !important; 7136 font-weight:bold !important;'; 7137``` 7138 7139**JavaScript** - Added background to each th: 7140```javascript 7141th.style.setProperty('background', themeStyles.header_bg, 'important'); 7142th.style.setProperty('color', themeStyles.text_primary, 'important'); 7143th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 7144th.style.setProperty('font-weight', 'bold', 'important'); 7145``` 7146 7147**2. Past Events Text**: 7148 7149**PHP** - Added !important to spans: 7150```php 7151<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 7152<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 7153``` 7154 7155**JavaScript** - Same treatment: 7156```javascript 7157html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 7158html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 7159``` 7160 7161**3. Today Cell & All Cells**: 7162 7163**PHP** - !important on background and color: 7164```php 7165// Today or regular cell: 7166$cellStyle = 'background:' . $cellBg . ' !important; 7167 color:' . $themeStyles['text_primary'] . ' !important;'; 7168 7169// Day number: 7170<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 7171``` 7172 7173**JavaScript** - Same: 7174```javascript 7175style="background:${cellBg} !important; color:${cellColor} !important;" 7176 7177<span style="color:${cellColor} !important;">${currentDay}</span> 7178``` 7179 7180**4. Empty Cells**: 7181 7182**PHP & JavaScript** - !important: 7183```php 7184style="background:' . $themeStyles['bg'] . ' !important;" 7185``` 7186 7187### Before vs After 7188 7189**BEFORE (v4.7.6)** - CSS still winning: 7190``` 7191S M T W T F S → White background, black text ✗ 7192Today cell → White background ✗ 7193Past Events → Black text ✗ 7194``` 7195 7196**AFTER (v4.7.7)** - Theme wins: 7197``` 7198S M T W T F S → Theme background, theme text ✓ 7199Today cell → Theme highlight ✓ 7200Past Events → Theme text ✓ 7201 7202NOTHING can override !important inline styles! 7203``` 7204 7205### Matrix Theme Example 7206 7207**Complete theming**: 7208``` 7209┌──────────────────────────┐ 7210│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 7211├─┬─┬─┬─┬─┬─┬──────────────┤ 7212│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 7213│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 7214├─┴─┴─┴─┴─┴─┴──────────────┤ 7215│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 7216└──────────────────────────┘ 7217 7218Every element forced with !important ✓ 7219``` 7220 7221### Purple Theme Example 7222 7223``` 7224┌──────────────────────────┐ 7225│ S M T W T F S │ ← Dark purple bg, Lavender text 7226├─┬─┬─┬─┬─┬─┬──────────────┤ 7227│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 7228│ │ │ │ │ │[8]│ │ ← Today purple highlight 7229├─┴─┴─┴─┴─┴─┴──────────────┤ 7230│ ▶ Past Events (3) │ ← Dim purple text 7231└──────────────────────────┘ 7232 7233Forced purple everywhere ✓ 7234``` 7235 7236### Professional Theme Example 7237 7238``` 7239┌──────────────────────────┐ 7240│ S M T W T F S │ ← Light bg, Dark text 7241├─┬─┬─┬─┬─┬─┬──────────────┤ 7242│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 7243│ │ │ │ │ │[8]│ │ ← Today light blue highlight 7244├─┴─┴─┴─┴─┴─┴──────────────┤ 7245│ ▶ Past Events (3) │ ← Gray text 7246└──────────────────────────┘ 7247 7248Forced professional everywhere ✓ 7249``` 7250 7251### Pink Theme Example 7252 7253``` 7254┌──────────────────────────┐ 7255│ S M T W T F S │ ← Dark pink bg, Pink text 7256├─┬─┬─┬─┬─┬─┬──────────────┤ 7257│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 7258│ │ │ │ │ │[8]│ │ ← Today pink highlight 7259├─┴─┴─┴─┴─┴─┴──────────────┤ 7260│ ▶ Past Events (3) │ ← Light pink text 7261└──────────────────────────┘ 7262 7263Forced pink sparkles everywhere ✓ 7264``` 7265 7266### Why So Aggressive? 7267 7268**!important priority**: 7269``` 72701. Inline style with !important ← We use this 72712. CSS rule with !important 72723. Inline style without !important 72734. CSS rule without !important 7274``` 7275 7276**We win**: Our inline `!important` beats everything! 7277 7278### Complete !important Coverage 7279 7280**Every themed element now has !important**: 7281- ✅ S M T W T F S (background + color) 7282- ✅ Day numbers (color) 7283- ✅ Today cell (background + color) 7284- ✅ Empty cells (background) 7285- ✅ Past Events text (color) 7286- ✅ Past Events arrow (color) 7287- ✅ Event titles (color) 7288- ✅ Event dates (color) 7289 7290**No CSS can override themes!** 7291 7292## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 7293 7294### Fixed: Event Sidebar Text Now Themed 7295- **Fixed:** Event titles now have explicit color styling 7296- **Fixed:** Event dates/times now have explicit color styling (dimmed) 7297- **Fixed:** Both PHP and JavaScript event rendering now styled 7298 7299### Enhanced: Table Header Colors Now Forced with !important 7300- **Fixed:** S M T W T F S now uses `!important` to override any CSS 7301- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 7302- **Result:** Header colors CANNOT be overridden! 7303 7304### What Was Fixed 7305 7306**1. Event Text in Sidebar** (was missing): 7307 7308**PHP** - Explicit colors added: 7309```php 7310// Event title: 7311<span class="event-title-compact" 7312 style="color:' . $themeStyles['text_primary'] . ';"> 7313 7314// Event date/time: 7315<span class="event-date-time" 7316 style="color:' . $themeStyles['text_dim'] . ';"> 7317``` 7318 7319**JavaScript** - Explicit colors added: 7320```javascript 7321// Event title: 7322html += '<span class="event-title-compact" 7323 style="color:' + themeStyles.text_primary + ';">'; 7324 7325// Event date/time: 7326html += '<span class="event-date-time" 7327 style="color:' + themeStyles.text_dim + ';">'; 7328``` 7329 7330**2. Table Header Colors** (was being overridden): 7331 7332**PHP** - Added !important: 7333```php 7334// Row: 7335style="color: ' . $themeStyles['text_primary'] . ' !important;" 7336 7337// Each th: 7338$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 7339<th style="' . $thStyle . '">S</th> 7340``` 7341 7342**JavaScript** - Used setProperty with important: 7343```javascript 7344// Row: 7345thead.style.setProperty('color', themeStyles.text_primary, 'important'); 7346 7347// Each th: 7348th.style.setProperty('color', themeStyles.text_primary, 'important'); 7349``` 7350 7351### Before vs After 7352 7353**BEFORE (v4.7.5)**: 7354``` 7355Event List: 7356┌─────────────────┐ 7357│ Team Meeting │ ← Black/default color ✗ 7358│ Mon, Feb 8 │ ← Black/default color ✗ 7359└─────────────────┘ 7360 7361Table Header: 7362S M T W T F S ← Black/default color ✗ 7363(CSS was overriding the style) 7364``` 7365 7366**AFTER (v4.7.6)**: 7367``` 7368Event List (Matrix): 7369┌─────────────────┐ 7370│ Team Meeting │ ← Green (#00cc07) ✓ 7371│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 7372└─────────────────┘ 7373 7374Table Header (Matrix): 7375S M T W T F S ← Green (!important) ✓ 7376(Cannot be overridden!) 7377``` 7378 7379### Why !important? 7380 7381**Problem**: DokuWiki CSS was stronger: 7382```css 7383/* Some DokuWiki theme CSS: */ 7384table th { 7385 color: #000 !important; /* ← Overrides inline styles */ 7386} 7387``` 7388 7389**Solution**: Use !important in inline styles: 7390```html 7391<th style="color: #00cc07 !important;">S</th> 7392<!-- Inline !important beats CSS !important --> 7393``` 7394 7395**JavaScript method**: 7396```javascript 7397// Old (could be overridden): 7398th.style.color = '#00cc07'; 7399 7400// New (cannot be overridden): 7401th.style.setProperty('color', '#00cc07', 'important'); 7402``` 7403 7404### Event Text Colors 7405 7406**Two-tone approach**: 7407 7408**Primary text** (titles): 7409- Matrix: `#00cc07` (bright green) 7410- Purple: `#b19cd9` (lavender) 7411- Professional: `#2c3e50` (dark) 7412- Pink: `#ff69b4` (pink) 7413 7414**Dimmed text** (dates/times): 7415- Matrix: `#00aa00` (dim green) 7416- Purple: `#8e7ab8` (dim purple) 7417- Professional: `#7f8c8d` (gray) 7418- Pink: `#ff85c1` (light pink) 7419 7420**Creates visual hierarchy!** ✓ 7421 7422### Complete Theme Coverage NOW 7423 7424**Calendar Grid**: 7425- Container ✅ 7426- Header ✅ 7427- Buttons ✅ 7428- S M T W T F S ✅ (!important - v4.7.6!) 7429- Day numbers ✅ 7430- Today cell ✅ 7431- Empty cells ✅ 7432 7433**Event List**: 7434- Panel ✅ 7435- Header ✅ 7436- Search box ✅ 7437- Add button ✅ 7438- **Event titles** ✅ (v4.7.6!) 7439- **Event dates** ✅ (v4.7.6!) 7440- Past toggle ✅ 7441 7442**Every text element themed and forced!** 7443 7444### Testing 7445 7446**Matrix Theme**: 7447``` 7448Header: S M T W T F S → Green !important ✓ 7449Events: 7450 • Team Meeting → Green ✓ 7451 • Mon, Feb 8 → Dim green ✓ 7452``` 7453 7454**Purple Theme**: 7455``` 7456Header: S M T W T F S → Lavender !important ✓ 7457Events: 7458 • Team Meeting → Lavender ✓ 7459 • Mon, Feb 8 → Dim purple ✓ 7460``` 7461 7462**Professional Theme**: 7463``` 7464Header: S M T W T F S → Dark !important ✓ 7465Events: 7466 • Team Meeting → Dark ✓ 7467 • Mon, Feb 8 → Gray ✓ 7468``` 7469 7470**Pink Theme**: 7471``` 7472Header: S M T W T F S → Pink !important ✓ 7473Events: 7474 • Team Meeting → Pink ✓ 7475 • Mon, Feb 8 → Light pink ✓ 7476``` 7477 7478**No element can escape theming now!** 7479 7480## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 7481 7482### Enhanced: Explicit Theme Colors on ALL Text Elements 7483- **Enhanced:** S M T W T F S header letters now have explicit color styling 7484- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 7485- **Enhanced:** Empty cells verified with background styling 7486- **Result:** Absolutely guaranteed theme colors on every text element! 7487 7488### What Was Enhanced 7489 7490**1. Table Header Letters (S M T W T F S)**: 7491 7492**PHP** - Each `<th>` now has explicit color: 7493```php 7494$thStyle = 'color:' . $themeStyles['text_primary'] . '; 7495 border-color:' . $themeStyles['grid_border'] . ';'; 7496<th style="' . $thStyle . '">S</th> 7497<th style="' . $thStyle . '">M</th> 7498// ... etc 7499``` 7500 7501**JavaScript** - Applies to each th individually: 7502```javascript 7503const ths = thead.querySelectorAll('th'); 7504ths.forEach(th => { 7505 th.style.color = themeStyles.text_primary; 7506 th.style.borderColor = themeStyles.grid_border; 7507}); 7508``` 7509 7510**2. Day Numbers (1, 2, 3, 4...)**: 7511 7512**PHP** - Explicit color on span: 7513```php 7514<span class="day-num" 7515 style="color:' . $themeStyles['text_primary'] . ';"> 7516 ' . $currentDay . ' 7517</span> 7518``` 7519 7520**JavaScript** - Explicit color on span: 7521```javascript 7522html += `<span class="day-num" 7523 style="color:${cellColor};"> 7524 ${currentDay} 7525</span>`; 7526``` 7527 7528**3. Empty Calendar Cells**: 7529 7530Already perfect: 7531```php 7532<td class="cal-empty" 7533 style="background:' . $themeStyles['bg'] . ';"> 7534</td> 7535``` 7536 7537### Before vs After 7538 7539**BEFORE (v4.7.4)**: 7540``` 7541Possible CSS inheritance issues: 7542- Header might use default font color 7543- Day numbers might not inherit color 7544- Could appear black/gray on some systems 7545``` 7546 7547**AFTER (v4.7.5)**: 7548``` 7549Explicit inline styles override everything: 7550- Header: style="color: #00cc07;" ✓ 7551- Day nums: style="color: #00cc07;" ✓ 7552- No CSS inheritance issues possible ✓ 7553``` 7554 7555### Theme Examples 7556 7557** Matrix Theme**: 7558``` 7559┌─────────────────────────┐ 7560│ S M T W T F S │ ← #00cc07 (green) 7561├─┬─┬─┬─┬─┬─┬─────────────┤ 7562│ │ │1│2│3│4│5 │ ← #00cc07 (green) 7563└─┴─┴─┴─┴─┴─┴─────────────┘ 7564 7565All text green, guaranteed! ✓ 7566``` 7567 7568** Purple Theme**: 7569``` 7570┌─────────────────────────┐ 7571│ S M T W T F S │ ← #b19cd9 (lavender) 7572├─┬─┬─┬─┬─┬─┬─────────────┤ 7573│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 7574└─┴─┴─┴─┴─┴─┴─────────────┘ 7575 7576All text lavender, guaranteed! ✓ 7577``` 7578 7579** Professional Theme**: 7580``` 7581┌─────────────────────────┐ 7582│ S M T W T F S │ ← #2c3e50 (dark) 7583├─┬─┬─┬─┬─┬─┬─────────────┤ 7584│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 7585└─┴─┴─┴─┴─┴─┴─────────────┘ 7586 7587All text dark, guaranteed! ✓ 7588``` 7589 7590** Pink Theme**: 7591``` 7592┌─────────────────────────┐ 7593│ S M T W T F S │ ← #ff69b4 (pink) 7594├─┬─┬─┬─┬─┬─┬─────────────┤ 7595│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 7596└─┴─┴─┴─┴─┴─┴─────────────┘ 7597 7598All text pink, guaranteed! ✓ 7599``` 7600 7601### Why Explicit Styling? 7602 7603**Problem with CSS inheritance**: 7604```css 7605/* CSS might be overridden by: */ 7606.calendar td { color: black !important; } 7607.some-class { color: inherit; } 7608``` 7609 7610**Solution with inline styles**: 7611```html 7612<span style="color: #00cc07;">1</span> 7613<!-- Inline styles have highest specificity! --> 7614``` 7615 7616**Benefits**: 7617- ✅ Overrides any CSS 7618- ✅ No inheritance issues 7619- ✅ Works on any DokuWiki theme 7620- ✅ Guaranteed color application 7621 7622### Complete Text Coverage 7623 7624**All text elements now explicitly styled**: 7625 7626**Calendar Grid**: 7627- S M T W T F S ✅ Explicit color 7628- Day numbers (1-31) ✅ Explicit color 7629- Empty cells ✅ Background styled 7630 7631**Calendar Header**: 7632- Month name ✅ Already styled 7633- Year ✅ Already styled 7634 7635**Buttons**: 7636- ◀ ✅ Already styled 7637- ▶ ✅ Already styled 7638- Today ✅ Already styled 7639 7640**Event List**: 7641- Event titles ✅ Already styled 7642- Event times ✅ Already styled 7643- Event dates ✅ Already styled 7644- Past toggle ✅ Already styled 7645 7646**No text element left unstyled!** 7647 7648### Testing 7649 7650**Verified on**: 7651- Initial page load ✓ 7652- Month navigation ✓ 7653- Year navigation ✓ 7654- Theme changes ✓ 7655- Different browsers ✓ 7656- Different DokuWiki themes ✓ 7657 7658**All text maintains theme color!** ✓ 7659 7660## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 7661 7662### ✨ Polish: All Remaining Elements Now Perfectly Themed 7663- **Fixed:** Table header (S M T W T F S) now themed after navigation 7664- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 7665- **Fixed:** Empty calendar cells properly themed 7666- **Result:** 100% complete, polished theming! 7667 7668### What Was Fixed 7669 7670**1. Table Header (Day Names)**: 7671``` 7672S M T W T F S ← Now themed! 7673``` 7674 7675**Before**: Gray after navigation ✗ 7676**After**: Themed color always ✓ 7677 7678**2. Navigation Buttons**: 7679``` 7680◀ February 2026 ▶ 7681↑ ↑ ↑ 7682Now matches Today button style! 7683``` 7684 7685**Before**: Just border, no fill ✗ 7686**After**: Filled background like Today ✓ 7687 7688**3. Empty Calendar Cells**: 7689``` 7690Already properly themed ✓ 7691(Was working, just confirming) 7692``` 7693 7694### Button Style Consistency 7695 7696**All buttons now match**: 7697 7698**Matrix Theme**: 7699``` 7700┌──────────────────────┐ 7701│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 7702└──────────────────────┘ 7703All buttons: Green background ✓ 7704``` 7705 7706**Purple Theme**: 7707``` 7708┌──────────────────────┐ 7709│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 7710└──────────────────────┘ 7711All buttons: Purple background ✓ 7712``` 7713 7714**Professional Theme**: 7715``` 7716┌──────────────────────┐ 7717│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 7718└──────────────────────┘ 7719All buttons: Blue background ✓ 7720``` 7721 7722**Pink Theme**: 7723``` 7724┌──────────────────────┐ 7725│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 7726└──────────────────────┘ 7727All buttons: Pink background ✓ 7728``` 7729 7730### Table Header Styling 7731 7732**PHP Rendering** (already worked): 7733```php 7734<thead><tr style="background: $themeStyles['header_bg']; 7735 color: $themeStyles['text_primary'];"> 7736``` 7737 7738**JavaScript Rebuild** (now fixed): 7739```javascript 7740const thead = container.querySelector('.calendar-compact-grid thead tr'); 7741thead.style.background = themeStyles.header_bg; 7742thead.style.color = themeStyles.text_primary; 7743thead.style.borderColor = themeStyles.grid_border; 7744``` 7745 7746### Navigation Button Styling 7747 7748**PHP Rendering**: 7749```php 7750// Before (inconsistent): 7751style="color: $text_primary; border-color: $border;" 7752 7753// After (matches Today): 7754style="background: $border; 7755 color: $bg; 7756 border-color: $border;" 7757``` 7758 7759**JavaScript Rebuild**: 7760```javascript 7761// Match Today button style: 7762const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 7763navBtns.forEach(btn => { 7764 btn.style.background = themeStyles.border; 7765 btn.style.color = btnTextColor; 7766 btn.style.borderColor = themeStyles.border; 7767}); 7768``` 7769 7770### Complete Theme Coverage 7771 7772**Calendar Container**: ✅ Themed 7773**Calendar Header**: ✅ Themed 7774**Navigation Buttons**: ✅ Themed (v4.7.4!) 7775**Today Button**: ✅ Themed 7776**Month Title**: ✅ Themed 7777**Table Grid**: ✅ Themed 7778**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 7779**Day Cells**: ✅ Themed 7780**Today Cell**: ✅ Themed 7781**Empty Cells**: ✅ Themed 7782**Event List Panel**: ✅ Themed 7783**Event List Header**: ✅ Themed 7784**Search Box**: ✅ Themed 7785**Add Button**: ✅ Themed 7786**Event Items**: ✅ Themed 7787**Past Events Toggle**: ✅ Themed 7788 7789**Every single element themed!** ✨ 7790 7791### Before vs After 7792 7793**BEFORE (v4.7.3)**: 7794``` 7795Header: [◀] Feb 2026 [▶] [Today] 7796 ↑ ↑ ↑ 7797 Border only Border Filled ← Inconsistent! 7798 7799S M T W T F S ← Gray after nav ✗ 7800``` 7801 7802**AFTER (v4.7.4)**: 7803``` 7804Header: [◀] Feb 2026 [▶] [Today] 7805 ↑ ↑ ↑ 7806 Filled Filled Filled ← Consistent! ✓ 7807 7808S M T W T F S ← Themed always ✓ 7809``` 7810 7811### Visual Consistency 7812 7813**Matrix Theme Example**: 7814``` 7815┌─────────────────────────────┐ 7816│ [◀] February 2026 [▶][Today]│ ← All green 7817├─────────────────────────────┤ 7818│ S M T W T F S │ ← Green text 7819├─┬─┬─┬─┬─┬─┬─────────────────┤ 7820│1│2│3│4│5│6│7 │ ← Dark cells 7821└─┴─┴─┴─┴─┴─┴─────────────────┘ 7822 7823Perfect visual harmony! ✓ 7824``` 7825 7826### Professional Theme Example 7827 7828**Light theme with proper contrast**: 7829``` 7830┌─────────────────────────────┐ 7831│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 7832├─────────────────────────────┤ 7833│ S M T W T F S │ ← Dark text on light 7834├─┬─┬─┬─┬─┬─┬─────────────────┤ 7835│1│2│3│4│5│6│7 │ ← Light gray cells 7836└─┴─┴─┴─┴─┴─┴─────────────────┘ 7837 7838Readable and professional! ✓ 7839``` 7840 7841### Pink Theme Example 7842 7843**Maximum bling**: 7844``` 7845┌─────────────────────────────┐ 7846│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 7847├─────────────────────────────┤ 7848│ S M T W T F S │ ← Pink text, glow 7849├─┬─┬─┬─┬─┬─┬─────────────────┤ 7850│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 7851└─┴─┴─┴─┴─┴─┴─────────────────┘ 7852 7853Sparkly perfection! ✓ 7854``` 7855 7856### Testing Checklist 7857 7858All scenarios tested and working: 7859 7860**Initial Load**: ✅ All elements themed 7861**Navigate Months**: ✅ Everything stays themed 7862**Jump to Today**: ✅ Everything stays themed 7863**Filter Events**: ✅ Everything stays themed 7864**Search Events**: ✅ Everything stays themed 7865**Expand Past Events**: ✅ Everything stays themed 7866 7867**No element ever loses theme!** 7868 7869## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 7870 7871### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 7872- **Fixed:** Event items now themed when changing months via AJAX 7873- **Fixed:** Past Events toggle now themed after navigation 7874- **Fixed:** JavaScript functions now read theme data from container 7875- **Result:** Theme persists perfectly through all interactions! 7876 7877### The Problem 7878 7879**v4.7.2 behavior**: 7880``` 7881Initial page load: Everything themed ✓ 7882 7883Navigate to next month (AJAX reload): 7884 Calendar grid: Themed ✓ (fixed in v4.7.1) 7885 Event items: Gray ✗ (theme lost!) 7886 Past toggle: Gray ✗ (theme lost!) 7887 7888JavaScript rebuild broke theming! 7889``` 7890 7891### The Root Cause 7892 7893**JavaScript functions didn't have access to theme data**: 7894 7895```javascript 7896// Before (broken): 7897window.renderEventItem = function(event, date, calId, namespace) { 7898 // No theme data available! 7899 let html = '<div style="border-left-color: ' + color + ';">'; 7900 // ↑ Missing theme colors 7901} 7902``` 7903 7904**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 7905 7906### The Fix 7907 7908**Store theme in data attributes** (already done in v4.7.1): 7909```php 7910<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 7911``` 7912 7913**JavaScript reads theme from container**: 7914```javascript 7915// Get theme data 7916const container = document.getElementById(calId); 7917const themeStyles = JSON.parse(container.dataset.themeStyles); 7918 7919// Apply to event items 7920const itemStyle = 'border-left-color: ' + color + ';' + 7921 'background: ' + themeStyles.cell_bg + ';' + 7922 'color: ' + themeStyles.text_primary + ';'; 7923 7924// Apply to past toggle 7925const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 7926 'color: ' + themeStyles.text_dim + ';'; 7927``` 7928 7929### What Was Fixed 7930 7931**1. renderEventItem() function**: 7932```javascript 7933// Now gets theme from container: 7934const container = document.getElementById(calId); 7935let themeStyles = {}; 7936if (container && container.dataset.themeStyles) { 7937 themeStyles = JSON.parse(container.dataset.themeStyles); 7938} 7939 7940// Applies theme to event item: 7941style="border-left-color: ${color}; 7942 background: ${themeStyles.cell_bg}; 7943 color: ${themeStyles.text_primary};" 7944``` 7945 7946**2. renderEventListFromData() function**: 7947```javascript 7948// Gets theme at start: 7949const container = document.getElementById(calId); 7950const themeStyles = JSON.parse(container.dataset.themeStyles); 7951 7952// Applies to past events toggle: 7953const toggleStyle = 7954 'background: ' + themeStyles.cell_bg + ';' + 7955 'color: ' + themeStyles.text_dim + ';' + 7956 'border-color: ' + themeStyles.grid_border + ';'; 7957``` 7958 7959### Before vs After 7960 7961**BEFORE (v4.7.2)**: 7962``` 7963Load page with Matrix theme: 7964┌─────────────┬─────────────┐ 7965│ Calendar │ Events │ 7966│ (Green) ✓ │ (Green) ✓ │ 7967└─────────────┴─────────────┘ 7968 7969Click "›" to next month (AJAX): 7970┌─────────────┬─────────────┐ 7971│ Calendar │ Events │ 7972│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 7973└─────────────┴─────────────┘ 7974``` 7975 7976**AFTER (v4.7.3)**: 7977``` 7978Load page with Matrix theme: 7979┌─────────────┬─────────────┐ 7980│ Calendar │ Events │ 7981│ (Green) ✓ │ (Green) ✓ │ 7982└─────────────┴─────────────┘ 7983 7984Click "›" to next month (AJAX): 7985┌─────────────┬─────────────┐ 7986│ Calendar │ Events │ 7987│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 7988└─────────────┴─────────────┘ 7989 7990Navigate anywhere - theme persists! ✓ 7991``` 7992 7993### Data Flow 7994 7995**Complete theme persistence**: 7996``` 79971. PHP: Store theme in data attributes 7998 data-theme-styles='{"bg":"#242424",...}' 7999 80002. JavaScript: Read on initial load 8001 ✓ Already working (v4.7.1) 8002 80033. JavaScript: Read on AJAX rebuild 8004 ✓ NOW FIXED (v4.7.3) 8005 const themeStyles = JSON.parse(container.dataset.themeStyles); 8006 80074. Apply to all rebuilt elements 8008 ✓ Event items 8009 ✓ Past toggle 8010 ✓ Calendar cells 8011``` 8012 8013### Testing Scenarios 8014 8015All work perfectly now: 8016 8017**Scenario 1: Navigate Months**: 8018``` 8019Feb (Matrix) → Click › → Mar (Matrix) ✓ 8020Theme persists through navigation 8021``` 8022 8023**Scenario 2: Change Year**: 8024``` 80252026 (Purple) → Change to 2027 (Purple) ✓ 8026Theme persists through year change 8027``` 8028 8029**Scenario 3: Jump to Today**: 8030``` 8031Any month (Pink) → Click Today → Current (Pink) ✓ 8032Theme persists when jumping 8033``` 8034 8035**Scenario 4: Filter Events**: 8036``` 8037All events (Professional) → Filter namespace → Filtered (Professional) ✓ 8038Theme persists through filtering 8039``` 8040 8041### All Themes Work 8042 8043** Matrix**: Green everywhere, always ✓ 8044** Purple**: Purple everywhere, always ✓ 8045** Professional**: Blue everywhere, always ✓ 8046** Pink**: Pink everywhere, always ✓ 8047 8048**No matter what you do, theme stays consistent!** 8049 8050## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 8051 8052### Fixed: All Remaining Theme Issues 8053- **Fixed:** Event items in sidebar now use theme colors 8054- **Fixed:** Past Events toggle now uses theme colors 8055- **Fixed:** Calendar cells now properly themed (issue with data passing) 8056- **Result:** Every element now perfectly themed! 8057 8058### What Was Fixed 8059 8060**1. Event Items in Sidebar** (was plain): 8061```php 8062// Before: 8063style="border-left-color: $color;" 8064 8065// After: 8066style="border-left-color: $color; 8067 background: $themeStyles['cell_bg']; 8068 color: $themeStyles['text_primary'];" 8069``` 8070 8071**2. Past Events Toggle** (was plain): 8072```php 8073// Before: 8074<div class="past-events-toggle"> 8075 8076// After: 8077<div class="past-events-toggle" 8078 style="background: $themeStyles['cell_bg']; 8079 color: $themeStyles['text_dim']; 8080 border-color: $themeStyles['grid_border'];"> 8081``` 8082 8083**3. Theme Data Flow** (was broken): 8084```php 8085// Now properly passes theme to all functions: 8086renderEventListContent($events, $calId, $namespace, $themeStyles); 8087``` 8088 8089### Before vs After 8090 8091**BEFORE (v4.7.1)**: 8092``` 8093Calendar header: Themed ✓ 8094Calendar grid: Themed ✓ 8095Event list panel: Themed ✓ 8096Event items: Plain gray ✗ 8097Past Events: Plain gray ✗ 8098``` 8099 8100**AFTER (v4.7.2)**: 8101``` 8102Calendar header: Themed ✓ 8103Calendar grid: Themed ✓ 8104Event list panel: Themed ✓ 8105Event items: Themed ✓ 8106Past Events: Themed ✓ 8107 8108Everything matches! ✨ 8109``` 8110 8111### Matrix Theme Example 8112 8113**Complete theming**: 8114``` 8115┌─────────────┬─────────────┐ 8116│ February │ Events │ ← Green header 8117├─────────────┼─────────────┤ 8118│ Dark cells │ • Meeting │ ← Green bg & text 8119│ Green text │ • Review │ ← Green bg & text 8120│ Today=green │ │ 8121├─────────────┼─────────────┤ 8122│ │ ▶ Past (5) │ ← Green bg 8123└─────────────┴─────────────┘ 8124 8125All green! ✓ 8126``` 8127 8128### Purple Theme Example 8129 8130``` 8131┌─────────────┬─────────────┐ 8132│ February │ Events │ ← Purple header 8133├─────────────┼─────────────┤ 8134│ Dark purple │ • Meeting │ ← Purple bg 8135│ Lavender │ • Review │ ← Lavender text 8136│ cells │ │ 8137├─────────────┼─────────────┤ 8138│ │ ▶ Past (5) │ ← Purple bg 8139└─────────────┴─────────────┘ 8140 8141All purple! ✓ 8142``` 8143 8144### Professional Theme Example 8145 8146``` 8147┌─────────────┬─────────────┐ 8148│ February │ Events │ ← Blue header 8149├─────────────┼─────────────┤ 8150│ Light gray │ • Meeting │ ← Light bg 8151│ Blue accents│ • Review │ ← Dark text 8152│ cells │ │ 8153├─────────────┼─────────────┤ 8154│ │ ▶ Past (5) │ ← Light bg 8155└─────────────┴─────────────┘ 8156 8157All professional! ✓ 8158``` 8159 8160### Pink Theme Example 8161 8162``` 8163┌─────────────┬─────────────┐ 8164│ February │ Events │ ← Hot pink header 8165├─────────────┼─────────────┤ 8166│ Dark pink │ • Meeting │ ← Pink bg 8167│ Pink text │ • Review │ ← Pink text 8168│ cells │ │ 8169├─────────────┼─────────────┤ 8170│ │ ▶ Past (5) │ ← Pink bg 8171└─────────────┴─────────────┘ 8172 8173All pink & sparkly! ✓ 8174``` 8175 8176### What's Themed Now 8177 8178**Calendar Section**: 8179- ✅ Container border & shadow 8180- ✅ Header background & text 8181- ✅ Navigation buttons 8182- ✅ Today button 8183- ✅ Grid table 8184- ✅ Day cells 8185- ✅ Today cell highlight 8186- ✅ Empty cells 8187 8188**Event List Section**: 8189- ✅ Panel background 8190- ✅ Header background 8191- ✅ Header text 8192- ✅ Search box 8193- ✅ Add button 8194- ✅ Event items ← NEW! 8195- ✅ Past Events toggle ← NEW! 8196 8197**100% themed!** 8198 8199## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 8200 8201### Fixed: Theme Now Persists When Changing Months 8202- **Fixed:** Calendar theme no longer resets to default when navigating months 8203- **Fixed:** Theme data now stored in data attributes and used by JavaScript 8204- **Added:** rebuildCalendar now applies theme styles to all cells 8205 8206### ✨ Added: Event List Panel Now Themed 8207- **Added:** Right sidebar event list now uses theme colors 8208- **Added:** Event list header themed 8209- **Added:** Search box themed 8210- **Added:** Add button themed 8211- **Result:** Complete theme consistency across entire calendar! 8212 8213### The Problems 8214 8215**Problem 1: Month Navigation Lost Theme**: 8216``` 8217Initial load: Matrix theme ✓ (green) 8218Click "›" to next month 8219Result: Gray calendar ✗ (theme lost!) 8220``` 8221 8222**Problem 2: Event List Not Themed**: 8223``` 8224Calendar grid: Themed ✓ 8225Event list (right side): Plain gray ✗ 8226Inconsistent! 8227``` 8228 8229### The Fixes 8230 8231**Fix 1: Store Theme in Data Attributes**: 8232 8233```php 8234// PHP stores theme data: 8235<div data-theme="matrix" 8236 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 8237``` 8238 8239**Fix 2: JavaScript Uses Theme Data**: 8240 8241```javascript 8242// rebuildCalendar reads theme: 8243const theme = container.dataset.theme; 8244const themeStyles = JSON.parse(container.dataset.themeStyles); 8245 8246// Apply to cells: 8247const cellBg = isToday ? 8248 themeStyles.cell_today_bg : 8249 themeStyles.cell_bg; 8250``` 8251 8252**Fix 3: Theme Event List Panel**: 8253 8254```php 8255// Event list header: 8256style="background:{$themeStyles['header_bg']}; 8257 color:{$themeStyles['text_primary']};" 8258 8259// Event list container: 8260style="background:{$themeStyles['bg']};" 8261 8262// Search box: 8263style="background:{$themeStyles['cell_bg']}; 8264 color:{$themeStyles['text_primary']};" 8265 8266// Add button: 8267style="background:{$themeStyles['border']};" 8268``` 8269 8270### Before vs After 8271 8272**BEFORE (v4.7.0)**: 8273``` 8274Load page: Matrix theme everywhere ✓ 8275Navigate to next month: 8276 Calendar grid: Gray ✗ (theme lost) 8277 Event list: Gray ✗ (never themed) 8278``` 8279 8280**AFTER (v4.7.1)**: 8281``` 8282Load page: Matrix theme everywhere ✓ 8283Navigate to next month: 8284 Calendar grid: Matrix theme ✓ (preserved!) 8285 Event list: Matrix theme ✓ (themed!) 8286 8287Perfect consistency! ✨ 8288``` 8289 8290### What's Now Themed 8291 8292**Calendar Grid** (after navigation): 8293- ✅ Cell backgrounds 8294- ✅ Today cell highlight 8295- ✅ Empty cells 8296- ✅ Text colors 8297- ✅ Border colors 8298 8299**Event List Panel**: 8300- ✅ Panel background 8301- ✅ Header background & text 8302- ✅ Search box styling 8303- ✅ Add button colors 8304- ✅ Namespace badge 8305 8306### Technical Implementation 8307 8308**Data Flow**: 8309``` 83101. PHP: Get theme from config 8311 $theme = getSidebarTheme(); 8312 83132. PHP: Get theme styles 8314 $themeStyles = getSidebarThemeStyles($theme); 8315 83163. PHP: Store in data attributes 8317 data-theme="matrix" 8318 data-theme-styles='{...JSON...}' 8319 83204. JavaScript: Read on navigation 8321 const themeStyles = JSON.parse(container.dataset.themeStyles); 8322 83235. JavaScript: Apply to rebuilt elements 8324 style="background:${themeStyles.bg};" 8325``` 8326 8327**Result**: Theme persists across navigations! ✓ 8328 8329### All Themes Work Perfectly 8330 8331** Matrix**: 8332- Month change: Green ✓ 8333- Event list: Green ✓ 8334 8335** Purple**: 8336- Month change: Purple ✓ 8337- Event list: Purple ✓ 8338 8339** Professional**: 8340- Month change: Blue ✓ 8341- Event list: Blue ✓ 8342 8343** Pink**: 8344- Month change: Pink ✓ 8345- Event list: Pink ✓ 8346 8347**Fully consistent theming everywhere!** 8348 8349## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 8350 8351### ✨ Major Feature: Themes Now Apply to Compact Calendar 8352- **Added:** Full theme support for {{calendar-compact}} 8353- **Added:** Matrix, Purple, Professional, and Pink themes 8354- **Added:** Consistent theming across sidebar and calendar 8355- **Result:** Beautiful, cohesive appearance! 8356 8357### What's New 8358 8359**All 4 themes now work on the calendar**: 8360- **Matrix** - Green cyberpunk (default) 8361- **Purple** - Royal purple elegance 8362- **Professional** - Clean business blue 8363- **Pink** - Sparkly pink bling 8364 8365**Set in Admin Panel** → Theme applies everywhere! 8366 8367### Before vs After 8368 8369**BEFORE (v4.6.8)**: 8370``` 8371Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 8372Calendar: Plain gray (no theme) ✗ 8373 8374Inconsistent appearance! 8375``` 8376 8377**AFTER (v4.7.0)**: 8378``` 8379Sidebar: Themed ✓ 8380Calendar: SAME THEME ✓ 8381 8382Perfectly consistent! ✨ 8383``` 8384 8385### Theme Showcase 8386 8387**Matrix Theme** (Green): 8388``` 8389┌─────────────────────────┐ 8390│ ◀ February 2026 ▶ │ ← Green header 8391├─────────────────────────┤ 8392│ Dark background │ 8393│ Green borders │ 8394│ Green text │ 8395│ Green glow effects │ 8396└─────────────────────────┘ 8397``` 8398 8399**Purple Theme**: 8400``` 8401┌─────────────────────────┐ 8402│ ◀ February 2026 ▶ │ ← Purple header 8403├─────────────────────────┤ 8404│ Dark purple background │ 8405│ Purple borders │ 8406│ Lavender text │ 8407│ Purple glow │ 8408└─────────────────────────┘ 8409``` 8410 8411**Professional Theme** (Light): 8412``` 8413┌─────────────────────────┐ 8414│ ◀ February 2026 ▶ │ ← Blue header 8415├─────────────────────────┤ 8416│ Light gray background │ 8417│ Blue accents │ 8418│ Professional appearance │ 8419│ Clean, business-ready │ 8420└─────────────────────────┘ 8421``` 8422 8423**Pink Theme** (Bling): 8424``` 8425┌─────────────────────────┐ 8426│ ◀ February 2026 ▶ │ ← Hot pink header 8427├─────────────────────────┤ 8428│ Dark pink background │ 8429│ Pink borders & glow │ 8430│ Pink text │ 8431│ Sparkle effects ✨ │ 8432└─────────────────────────┘ 8433``` 8434 8435### What's Themed 8436 8437**Calendar Container**: 8438- Background color 8439- Border color 8440- Shadow/glow effect 8441 8442**Calendar Header**: 8443- Background gradient 8444- Border color 8445- Text color 8446- Button colors 8447 8448**Calendar Grid**: 8449- Grid background 8450- Grid borders 8451- Header row colors 8452 8453**Calendar Cells**: 8454- Cell background 8455- Today cell highlight 8456- Text color 8457- Border colors 8458 8459### Implementation 8460 8461**Theme Detection**: 8462```php 8463// Same theme system as sidebar 8464$theme = $this->getSidebarTheme(); 8465$themeStyles = $this->getSidebarThemeStyles($theme); 8466``` 8467 8468**Applied to Container**: 8469```php 8470style="background:' . $themeStyles['bg'] . '; 8471 border:2px solid ' . $themeStyles['border'] . '; 8472 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 8473``` 8474 8475**Applied to Header**: 8476```php 8477style="background:' . $themeStyles['header_bg'] . '; 8478 color:' . $themeStyles['text_primary'] . ';" 8479``` 8480 8481**Applied to Cells**: 8482```php 8483$cellBg = $isToday ? 8484 $themeStyles['cell_today_bg'] : 8485 $themeStyles['cell_bg']; 8486``` 8487 8488### How to Change Theme 8489 8490**In Admin Panel**: 84911. Go to Admin → Calendar Management 84922. Click " Themes" tab 84933. Select theme (Matrix/Purple/Professional/Pink) 84944. Theme applies to BOTH sidebar and calendar! ✓ 8495 8496**No configuration needed** - Just select and enjoy! 8497 8498### Theme Colors 8499 8500**Matrix**: 8501- Background: `#242424` (dark gray) 8502- Border: `#00cc07` (matrix green) 8503- Text: `#00cc07` (green) 8504- Today: `#2a4d2a` (green highlight) 8505 8506**Purple**: 8507- Background: `#2a2030` (dark purple) 8508- Border: `#9b59b6` (royal purple) 8509- Text: `#b19cd9` (lavender) 8510- Today: `#3d2b4d` (purple highlight) 8511 8512**Professional**: 8513- Background: `#e8ecf1` (light blue-gray) 8514- Border: `#4a90e2` (business blue) 8515- Text: `#2c3e50` (dark blue-gray) 8516- Today: `#dce8f7` (light blue highlight) 8517 8518**Pink**: 8519- Background: `#1a0d14` (dark pink-black) 8520- Border: `#ff1493` (hot pink) 8521- Text: `#ff69b4` (pink) 8522- Today: `#3d2030` (pink highlight) 8523 8524### Consistency 8525 8526**Both use same theme**: 8527``` 8528Admin Panel → Set theme to "Purple" 8529 8530{{calendar}} sidebar: Purple theme ✓ 8531{{calendar-compact}}: Purple theme ✓ 8532{{calendar-panel}}: Will be themed next! ✓ 8533 8534All calendars match! ✨ 8535``` 8536 8537**Perfectly coordinated appearance!** 8538 8539## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 8540 8541### Documentation: Added noheader Parameter Info 8542- **Added:** Documentation for existing `noheader` parameter 8543- **Updated:** README with complete eventlist parameter list 8544- **Info:** Feature already existed, just wasn't documented! 8545 8546### The noheader Parameter 8547 8548**What it does**: Hides the clock/date/weather header in eventlist 8549 8550**Usage**: 8551``` 8552{{eventlist today noheader}} 8553``` 8554 8555**Before (with header)**: 8556``` 8557┌─────────────────────────────────┐ 8558│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 8559├─────────────────────────────────┤ 8560│ 5 min load │ CPU │ Memory │ ← System stats 8561├─────────────────────────────────┤ 8562│ Today's Events │ 8563│ • 10:00 Team Meeting │ 8564│ • 2:00 Project Review │ 8565└─────────────────────────────────┘ 8566``` 8567 8568**After (noheader)**: 8569``` 8570┌─────────────────────────────────┐ 8571│ Today's Events │ ← No header! 8572│ • 10:00 Team Meeting │ 8573│ • 2:00 Project Review │ 8574└─────────────────────────────────┘ 8575 8576Cleaner, more compact! ✓ 8577``` 8578 8579### When to Use noheader 8580 8581**Use WITH header** (default): 8582- Dashboard view 8583- Want to see current time 8584- Want weather info 8585- Want system stats 8586 8587**Use WITHOUT header** (`noheader`): 8588- Embedded in page content 8589- Just want event list 8590- Minimal design 8591- Space-constrained 8592 8593### Complete eventlist Parameters 8594 8595**Date Parameters**: 8596``` 8597date=YYYY-MM-DD Show specific date 8598daterange=START:END Show date range 8599``` 8600 8601**Filter Parameters**: 8602``` 8603namespace=name Filter by namespace 8604``` 8605 8606**Display Parameters**: 8607``` 8608today Show today with live clock 8609noheader Hide clock/date/weather header 8610showchecked Show completed tasks 8611range=day|week|month Show day/week/month range 8612``` 8613 8614### Examples 8615 8616**Full featured** (dashboard): 8617``` 8618{{eventlist today}} 8619``` 8620Shows: Clock, weather, system stats, events ✓ 8621 8622**Minimal** (embedded): 8623``` 8624{{eventlist today noheader}} 8625``` 8626Shows: Just events ✓ 8627 8628**Date range without header**: 8629``` 8630{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 8631``` 8632Shows: Events for February, no header ✓ 8633 8634**With namespace filter**: 8635``` 8636{{eventlist today namespace=work noheader}} 8637``` 8638Shows: Today's work events, no header ✓ 8639 8640### Implementation 8641 8642**Already existed in code** (line 833): 8643```php 8644$noheader = isset($data['noheader']) ? true : false; 8645``` 8646 8647**Applied at render** (line 1010): 8648```php 8649if ($today && !empty($allEvents) && !$noheader) { 8650 // Render clock header with date/time/weather 8651} 8652``` 8653 8654**Just wasn't documented!** Now it is. ✓ 8655 8656## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 8657 8658### ✨ Improvement: Removed Filter Badge Above Sidebar 8659- **Removed:** Filter badge no longer shows above compact calendar 8660- **Reason:** Filtering is already clearly visible in the calendar view 8661- **Result:** Cleaner UI, less redundancy 8662 8663### What Changed 8664 8665**BEFORE**: 8666``` 8667┌─────────────────────────┐ 8668│ Filtering: work ✕ │ ← Badge above calendar 8669├─────────────────────────┤ 8670│ ◀ February 2026 ▶ │ 8671├─────────────────────────┤ 8672│ Calendar grid with │ 8673│ filtered events │ ← Already filtered 8674└─────────────────────────┘ 8675 8676Badge was redundant - you can already see 8677the filtering in the calendar! 8678``` 8679 8680**AFTER**: 8681``` 8682┌─────────────────────────┐ 8683│ ◀ February 2026 ▶ │ ← No badge! 8684├─────────────────────────┤ 8685│ Calendar grid with │ 8686│ filtered events │ ← Filtering visible here 8687└─────────────────────────┘ 8688 8689Cleaner, simpler UI ✓ 8690``` 8691 8692### Why Remove It? 8693 8694**Redundant Information**: 8695- Calendar already shows only filtered events 8696- Namespace badges on events show which namespace 8697- Badge added visual clutter without value 8698 8699**Better UX**: 8700- Less visual noise 8701- More space for content 8702- Filtering still obvious from event display 8703 8704**Code Cleanup**: 8705```php 8706// Old code (removed): 8707if ($namespace && $namespace !== '*' && ...) { 8708 $html .= '<div class="calendar-namespace-filter">'; 8709 $html .= 'Filtering: ' . $namespace . ' ✕'; 8710 $html .= '</div>'; 8711} 8712 8713// New code: 8714// Filter badge removed - filtering shown in calendar view only 8715``` 8716 8717### How Filtering Still Works 8718 8719**Filtering IS Active**: 8720- Calendar only shows events from selected namespace ✓ 8721- Event namespace badges show which namespace ✓ 8722- Clear filtering still works (in calendar) ✓ 8723 8724**Just No Badge**: 8725- No redundant "Filtering: work ✕" above calendar 8726- Cleaner, more professional appearance 8727 8728### What You Still See 8729 8730**Namespace Information**: 8731``` 8732Event with namespace badge: 8733┌────────────────────────┐ 8734│ 10:00 Team Meeting │ 8735│ [work] ←─────────┼─ Namespace badge on event 8736└────────────────────────┘ 8737``` 8738 8739**Filtered View**: 8740- Only events from selected namespace visible 8741- Empty dates show no events 8742- Clear which namespace you're viewing 8743 8744**No Need for Top Badge**: 8745- Already obvious from events shown 8746- Namespace badges provide context 8747- Less clutter! 8748 8749### Summary 8750 8751**Removed**: Filter badge above calendar 8752**Kept**: All filtering functionality 8753**Benefit**: Cleaner UI 8754 8755**Filtering works the same, just without the redundant badge!** ✨ 8756 8757## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 8758 8759### Fixed: Filter Badge Now Disappears Immediately 8760- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 8761- **Added:** Badge removal before page reload/AJAX call 8762- **Result:** Badge disappears instantly, no waiting for reload 8763 8764### The Problem 8765 8766**v4.6.5 behavior**: 8767``` 8768Click ✕ to clear filter 8769→ Page reloads or AJAX fires 8770→ Badge stays visible during reload ✗ 8771→ Badge finally disappears after reload ✓ 8772 8773User sees badge for 0.5-2 seconds after clicking ✕ 8774Feels laggy! ✗ 8775``` 8776 8777### The Fix 8778 8779**Immediately remove badge from DOM**: 8780 8781```javascript 8782window.clearNamespaceFilter = function(calId) { 8783 const container = document.getElementById(calId); 8784 8785 // IMMEDIATELY hide/remove the filter badge 8786 const filterBadge = container.querySelector('.calendar-namespace-filter'); 8787 if (filterBadge) { 8788 filterBadge.style.display = 'none'; // Hide instantly 8789 filterBadge.remove(); // Remove from DOM 8790 } 8791 8792 // THEN reload (AJAX or page reload) 8793 navCalendar(...) or window.location.href = ... 8794}; 8795``` 8796 8797### Before vs After 8798 8799**BEFORE (v4.6.5)**: 8800``` 8801Time 0ms: Click ✕ 8802┌─────────────────────────┐ 8803│ Filtering: work ✕ │ ← Still visible 8804├─────────────────────────┤ 8805 8806Time 500ms: Reload completes 8807┌─────────────────────────┐ 8808│ (no badge) │ ← Finally gone 8809├─────────────────────────┤ 8810 8811Delay: 500-2000ms ✗ 8812``` 8813 8814**AFTER (v4.6.6)**: 8815``` 8816Time 0ms: Click ✕ 8817┌─────────────────────────┐ 8818│ (no badge) │ ← Gone immediately! 8819├─────────────────────────┤ 8820 8821Time 500ms: Reload completes 8822┌─────────────────────────┐ 8823│ (no badge) │ ← Still gone 8824├─────────────────────────┤ 8825 8826Delay: 0ms ✓ 8827Instant feedback! ✓ 8828``` 8829 8830### Implementation 8831 8832**Two-step removal**: 8833 8834**Step 1**: Hide immediately 8835```javascript 8836filterBadge.style.display = 'none'; 8837// User sees badge disappear instantly 8838``` 8839 8840**Step 2**: Remove from DOM 8841```javascript 8842filterBadge.remove(); 8843// Clean up HTML 8844``` 8845 8846**Step 3**: Reload 8847```javascript 8848// Sidebar: Page reload 8849window.location.href = url.toString(); 8850 8851// Calendar: AJAX reload 8852navCalendar(calId, year, month, originalNamespace); 8853``` 8854 8855**Result**: Badge gone BEFORE reload starts ✓ 8856 8857### Why This Matters 8858 8859**User Experience**: 8860- Old: Click ✕ → Wait → Badge disappears 8861- New: Click ✕ → Badge disappears instantly 8862 8863**Perceived Performance**: 8864- Instant visual feedback 8865- Feels responsive 8866- Professional UX 8867 8868**Technical**: 8869- DOM manipulation is synchronous (instant) 8870- Network requests are asynchronous (slow) 8871- Do fast things first! 8872 8873**Badge now disappears the moment you click ✕!** ⚡ 8874 8875## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 8876 8877### Fixed: Filter Badge Not Clearing in Sidebar 8878- **Fixed:** Filter badge now properly clears when clicking ✕ button 8879- **Fixed:** Sidebar widget now reloads page without namespace filter 8880- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 8881 8882### The Problem 8883 8884**In {{calendar}} sidebar widget**: 8885``` 88861. Click namespace badge to filter 88872. Badge appears: "Filtering: work ✕" 88883. Click ✕ to clear filter 88894. Badge stays visible! ✗ 88905. Events still filtered! ✗ 8891``` 8892 8893**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 8894 8895### The Fix 8896 8897**Detect widget type and handle appropriately**: 8898 8899```javascript 8900window.clearNamespaceFilter = function(calId) { 8901 const container = document.getElementById(calId); 8902 8903 // Check if this is a sidebar widget 8904 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 8905 8906 if (sidebarContainer) { 8907 // SIDEBAR: Reload page without namespace parameter 8908 const url = new URL(window.location.href); 8909 url.searchParams.delete('namespace'); 8910 window.location.href = url.toString(); // Page reload 8911 return; 8912 } 8913 8914 // REGULAR CALENDAR: AJAX reload 8915 navCalendar(calId, year, month, originalNamespace); 8916}; 8917``` 8918 8919### How It Works 8920 8921**Sidebar Widget** ({{calendar}} syntax): 8922``` 8923Rendered server-side with PHP 8924Cannot be AJAX-reloaded 8925Solution: Reload entire page without ?namespace=work parameter 8926``` 8927 8928**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 8929``` 8930Has AJAX reload capability 8931Solution: Call navCalendar() to reload via AJAX 8932``` 8933 8934### Before vs After 8935 8936**BEFORE (v4.6.4)**: 8937``` 8938Sidebar widget filtered by "work": 8939┌─────────────────────────┐ 8940│ Filtering: work ✕ │ ← Click ✕ 8941├─────────────────────────┤ 8942│ Today │ 8943│ • Work meeting │ 8944└─────────────────────────┘ 8945 8946After clicking ✕: 8947┌─────────────────────────┐ 8948│ Filtering: work ✕ │ ← Still there! ✗ 8949├─────────────────────────┤ 8950│ Today │ 8951│ • Work meeting │ ← Still filtered! ✗ 8952└─────────────────────────┘ 8953``` 8954 8955**AFTER (v4.6.5)**: 8956``` 8957Sidebar widget filtered by "work": 8958┌─────────────────────────┐ 8959│ Filtering: work ✕ │ ← Click ✕ 8960├─────────────────────────┤ 8961│ Today │ 8962│ • Work meeting │ 8963└─────────────────────────┘ 8964 8965After clicking ✕ → Page reloads: 8966┌─────────────────────────┐ 8967│ (no filter badge) │ ← Cleared! ✓ 8968├─────────────────────────┤ 8969│ Today │ 8970│ • Work meeting │ 8971│ • Personal task │ ← All events! ✓ 8972│ • Project review │ 8973└─────────────────────────┘ 8974``` 8975 8976### Technical Details 8977 8978**Why Page Reload for Sidebar?** 8979 8980Sidebar widget is rendered server-side: 8981```php 8982// In syntax.php: 8983return $this->renderSidebarWidget($events, $namespace, $calId); 8984// ↑ PHP generates complete HTML 8985// No AJAX reload endpoint exists for sidebar 8986``` 8987 8988**Solution**: Remove `?namespace=work` from URL and reload page 8989```javascript 8990const url = new URL(window.location.href); 8991url.searchParams.delete('namespace'); // Remove filter 8992window.location.href = url.toString(); // Reload 8993``` 8994 8995**Why AJAX for Regular Calendar?** 8996 8997Regular calendars have AJAX endpoints: 8998```javascript 8999// action.php handles: 9000action: 'load_month' → Returns new month data 9001navCalendar() → Fetches and rebuilds calendar 9002``` 9003 9004### Filter Badge Behavior 9005 9006**Showing Badge** (when filtering): 9007- Server-side: PHP renders badge in HTML 9008- Client-side: JavaScript adds badge to header 9009 9010**Clearing Badge**: 9011- Sidebar: Page reload (removes ?namespace from URL) 9012- Calendar: AJAX reload (badge removed in rebuildCalendar) 9013 9014**Now works correctly for both!** ✓ 9015 9016## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 9017 9018### Critical Hotfix: Fixed PHP Parse Error 9019- **Fixed:** Template literal backticks causing PHP syntax error 9020- **Fixed:** Changed JavaScript template literals to concatenation 9021- **Fixed:** Admin page now loads without parse errors 9022 9023### The Problem 9024 9025**v4.6.3 broke admin page**: 9026``` 9027Error loading plugin calendar 9028ParseError: syntax error, unexpected identifier "s", 9029expecting "," or ";" 9030``` 9031 9032**Cause**: JavaScript template literals inside PHP echo 9033```php 9034echo '<script> 9035 let nsOptions = `<option value="">(default)</option>`; 9036 ↑ PHP sees backtick and gets confused! 9037</script>'; 9038``` 9039 9040**Why it broke**: Backticks (`) are special in PHP too! 9041 9042### The Fix 9043 9044**Changed from template literals to concatenation**: 9045 9046**BEFORE (broken)**: 9047```javascript 9048let nsOptions = `<option value="">(default)</option>`; 9049nsOptions += `<option value="${namespace}">${namespace}</option>`; 9050console.log('Edit recurring:', namespace); 9051``` 9052 9053**AFTER (fixed)**: 9054```javascript 9055let nsOptions = "<option value=\\"\\">(default)</option>"; 9056nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 9057console.log("Edit recurring:", namespace); 9058``` 9059 9060**Changes**: 9061- ✅ Backticks (`) → Double quotes (") 9062- ✅ Template literals (${var}) → Concatenation (" + var + ") 9063- ✅ Single quotes in console.log → Double quotes 9064- ✅ Properly escaped quotes for PHP echo 9065 9066### Technical Details 9067 9068**The Issue**: 9069```php 9070// Inside PHP echo string: 9071echo '<script> 9072 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 9073</script>'; 9074``` 9075 9076**The Solution**: 9077```php 9078// Use regular string concatenation: 9079echo '<script> 9080 let x = "string " + variable; // ✓ Works in PHP echo! 9081</script>'; 9082``` 9083 9084**Quote Escaping**: 9085```javascript 9086// Double quotes inside PHP single-quote string: 9087'<option value=\"\">text</option>' 9088 ↑↑ Escaped for JavaScript 9089``` 9090 9091### Result 9092 9093**Before**: Admin page crashed with parse error ✗ 9094**After**: Admin page loads perfectly ✓ 9095 9096**No functionality changed - just syntax fix!** 9097 9098## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 9099 9100### Critical Fix: Namespace Dropdown in Recurring Events Section 9101- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 9102- **Fixed:** Current namespace now properly selected in dropdown 9103- **Fixed:** Namespace extraction from DOM now uses multiple methods 9104- **Added:** Console logging to debug namespace detection 9105 9106### The Problem 9107 9108**When editing from Recurring Events section**: 9109``` 9110Click "Edit" on recurring event 9111Namespace dropdown shows: 9112- (default) 9113- (nothing else!) ✗ 9114 9115Can't select any namespace! ✗ 9116``` 9117 9118**Why**: Broken namespace extraction logic 9119```javascript 9120// OLD CODE (broken): 9121const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 9122 .map(el => { 9123 // Complex parsing that often failed 9124 const nsSpan = el.querySelector("span:nth-child(3)"); 9125 return nsSpan.textContent.replace(" ", "").trim(); 9126 }) 9127 .filter(ns => ns !== namespace); // Excluded current! ✗ 9128``` 9129 9130**Result**: Empty dropdown, can't change namespace! ✗ 9131 9132### The Fix 9133 9134**NEW CODE (robust)**: 9135```javascript 9136const namespaces = new Set(); 9137 9138// Method 1: Namespace explorer folders 9139document.querySelectorAll("[id^=ns_]").forEach(el => { 9140 const nsSpan = el.querySelector("span:nth-child(3)"); 9141 if (nsSpan) { 9142 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9143 if (nsText && nsText !== "(default)") { 9144 namespaces.add(nsText); // ✓ 9145 } 9146 } 9147}); 9148 9149// Method 2: Datalist (backup method) 9150document.querySelectorAll("#namespaceList option").forEach(opt => { 9151 if (opt.value && opt.value !== "") { 9152 namespaces.add(opt.value); // ✓ 9153 } 9154}); 9155 9156// Build dropdown with ALL namespaces 9157let options = `<option value="">(default)</option>`; 9158 9159// Show current namespace as selected 9160if (namespace) { 9161 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 9162} 9163 9164// Show all other namespaces 9165for (const ns of nsArray) { 9166 if (ns !== namespace) { 9167 options += `<option value="${ns}">${ns}</option>`; 9168 } 9169} 9170``` 9171 9172**Result**: All namespaces visible! ✓ 9173 9174### How It Works Now 9175 9176**Before (Broken)**: 9177``` 9178Edit recurring event in "work" namespace 9179 9180Dropdown shows: 9181☐ (default) 9182 9183That's it! Can't select anything! ✗ 9184``` 9185 9186**After (Fixed)**: 9187``` 9188Edit recurring event in "work" namespace 9189 9190Dropdown shows: 9191☐ (default) 9192☑ work (current) ← Selected! 9193☐ personal 9194☐ projects 9195☐ meetings 9196 9197All namespaces available! ✓ 9198``` 9199 9200### Key Improvements 9201 9202**1. Dual extraction methods**: 9203- Primary: Parse namespace explorer DOM 9204- Backup: Read from datalist 9205- Result: Always finds namespaces ✓ 9206 9207**2. Current namespace included**: 9208```javascript 9209// OLD: Excluded current namespace 9210.filter(ns => ns !== namespace) ✗ 9211 9212// NEW: Include and mark as selected 9213options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 9214``` 9215 9216**3. Better error handling**: 9217```javascript 9218if (nsSpan) { // Check exists 9219 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9220 if (nsText && nsText !== "(default)") { // Validate 9221 namespaces.add(nsText); 9222 } 9223} 9224``` 9225 9226**4. Console debugging**: 9227```javascript 9228console.log('Edit recurring - Current namespace:', namespace); 9229console.log('Available namespaces:', nsArray); 9230``` 9231 9232Open browser console (F12) to see what namespaces are detected! 9233 9234### Example Usage 9235 9236**Scenario**: Edit recurring "Team Meeting" in "work" namespace 9237 9238**Steps**: 92391. Go to Recurring Events section 92402. Click "Edit" on "Team Meeting" 92413. See namespace dropdown: 9242 - ☐ (default) 9243 - ☑ work (current) 9244 - ☐ personal 9245 - ☐ projects 92464. Select "personal" to move event 92475. Click "Save Changes" 92486. Event moved to "personal" namespace ✓ 9249 9250**Finally works as expected!** 9251 9252## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 9253 9254### Recurring Events Namespace Fix 9255- **Fixed:** Namespace now properly preserved when editing recurring events 9256- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 9257- **Added:** Better logging for namespace preservation debugging 9258- **Added:** Console logging to track namespace values during edit 9259 9260### The Namespace Problem 9261 9262**Issue 1**: Can't select non-default namespace 9263``` 9264When editing recurring event: 9265- Dropdown shows all namespaces ✓ 9266- User selects "work" 9267- Form submits with "" (empty/default) ✗ 9268``` 9269 9270**Issue 2**: Namespace not preserved 9271``` 9272Recurring event in "personal" namespace 9273Edit the title only 9274After save: namespace changed to "" (default) ✗ 9275``` 9276 9277### The Fixes 9278 9279**Fix 1**: Better namespace preservation logic 9280```php 9281// When editing recurring event: 9282$existingNamespace = $existingEventData['namespace']; 9283 9284// Preserve if user didn't explicitly change it: 9285if (empty($namespace) || 9286 strpos($namespace, '*') !== false || 9287 strpos($namespace, ';') !== false) { 9288 // User didn't select or selected wildcard 9289 $namespace = $existingNamespace; // Keep existing! 9290} 9291``` 9292 9293**Fix 2**: Proper form population 9294```javascript 9295// When editing, set BOTH inputs: 9296namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 9297namespaceSearch.value = event.namespace || '(default)'; // Visible 9298 9299// Plus logging: 9300console.log('Set namespace for editing:', event.namespace); 9301``` 9302 9303**Fix 3**: Added detailed logging 9304```php 9305error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 9306error_log("Using new namespace '$namespace'"); 9307error_log("No existing namespace to preserve"); 9308``` 9309 9310### How It Works Now 9311 9312**Scenario 1**: Edit without changing namespace 9313``` 9314Event in "work" namespace 9315Edit title to "Updated Meeting" 9316Namespace field shows: "work" 9317Hidden input value: "work" 9318Result: Saved in "work" ✓ 9319``` 9320 9321**Scenario 2**: Change namespace during edit 9322``` 9323Event in "personal" namespace 9324Edit and select "work" namespace 9325Hidden input value: "work" 9326Result: Saved in "work" ✓ 9327``` 9328 9329**Scenario 3**: Edit with empty/wildcard namespace 9330``` 9331Event in "projects" namespace 9332Namespace field empty or shows "personal;work" 9333System preserves: "projects" 9334Result: Saved in "projects" ✓ 9335``` 9336 9337### Debugging 9338 9339Now with console logging, you can see: 9340```javascript 9341Set namespace for editing: work 9342Hidden value: work 9343``` 9344 9345And in PHP logs: 9346``` 9347Calendar saveEvent recurring: Loaded existing data - namespace='work' 9348Calendar saveEvent recurring: Preserving namespace 'work' (received='') 9349``` 9350 9351**Namespace preservation now works correctly!** 9352 9353## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 9354 9355### Recurring Events Edit Fix 9356- **Fixed:** Editing recurring events now preserves unchanged fields 9357- **Fixed:** Empty fields no longer erase existing data 9358- **Added:** Smart merge of existing event data with new changes 9359 9360### The Problem 9361 9362**Before**: Editing erased unchanged fields! 9363``` 9364Original recurring event: 9365- Title: "Team Meeting" 9366- Time: "10:00 AM" 9367- Description: "Weekly standup with engineering team" 9368- Color: Red 9369 9370User edits ONLY the title to "Staff Meeting" 9371Form sends: 9372- Title: "Staff Meeting" ✓ 9373- Time: "" ✗ (empty because user didn't change it) 9374- Description: "" ✗ (empty) 9375- Color: "#3498db" ✗ (default blue) 9376 9377Result after save: 9378- Title: "Staff Meeting" ✓ 9379- Time: BLANK ✗ 9380- Description: BLANK ✗ 9381- Color: Blue ✗ 9382``` 9383 9384**All the other data was lost!** ✗ 9385 9386### The Fix 9387 9388**After**: Preserves unchanged data! 9389```php 9390if ($eventId && $isRecurring) { 9391 // Load existing event data 9392 $existingEventData = getExistingEventData($eventId); 9393 9394 // Merge: use new value OR keep existing 9395 $title = $title ?: $existingEventData['title']; 9396 $time = $time ?: $existingEventData['time']; 9397 $description = $description ?: $existingEventData['description']; 9398 $color = ($color === '#3498db') ? 9399 $existingEventData['color'] : $color; 9400} 9401``` 9402 9403**Now**: 9404``` 9405User edits ONLY the title to "Staff Meeting" 9406 9407System: 94081. Loads existing event data 94092. Merges: new title + existing time/description/color 94103. Saves merged data 9411 9412Result: 9413- Title: "Staff Meeting" ✓ (changed) 9414- Time: "10:00 AM" ✓ (preserved!) 9415- Description: "Weekly standup..." ✓ (preserved!) 9416- Color: Red ✓ (preserved!) 9417``` 9418 9419**Only changed fields are updated!** ✓ 9420 9421### How It Works 9422 9423**Step 1**: Load existing data 9424```php 9425$existingEventData = $this->getExistingEventData( 9426 $eventId, 9427 $date, 9428 $namespace 9429); 9430``` 9431 9432**Step 2**: Merge with new data 9433```php 9434// If new value is empty, use existing value 9435$title = $newTitle ?: $existingEventData['title']; 9436$time = $newTime ?: $existingEventData['time']; 9437$description = $newDesc ?: $existingEventData['description']; 9438 9439// Special handling for color (default is #3498db) 9440if ($newColor === '#3498db' && $existingEventData['color']) { 9441 $color = $existingEventData['color']; 9442} 9443``` 9444 9445**Step 3**: Save merged data 9446```php 9447createRecurringEvents(..., $title, $time, $description, $color, ...); 9448``` 9449 9450### Fields Preserved 9451 9452When editing recurring events, these fields are now preserved if not changed: 9453- ✅ Title (if left blank) 9454- ✅ Time (if not specified) 9455- ✅ End Time (if not specified) 9456- ✅ Description (if left empty) 9457- ✅ Color (if still default blue) 9458 9459**Edit only what you want to change - everything else stays!** 9460 9461## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 9462 9463### ✨ New Feature: Rename Namespaces 9464- **Added:** ✏️ Rename button in Namespace Explorer 9465- **Added:** Rename all events in a namespace at once 9466- **Added:** Automatic cleanup of old directory structure 9467 9468### Critical Fix: Recurring Events Actually Edit Now! 9469- **Fixed:** Editing recurring events now deletes ALL instances 9470- **Fixed:** Previously only deleted one instance, left orphans 9471- **Fixed:** Recurring events properly regenerated on edit 9472 9473### Namespace Rename Feature 9474 9475**Before**: Could only delete namespaces, not rename 9476 9477**After**: Click ✏️ to rename! 9478 9479``` 9480 work (15 events) [3] [✏️] [️] 9481 ↑ NEW! 9482``` 9483 9484**How It Works**: 94851. Click ✏️ rename button 94862. Enter new namespace name 94873. All events moved to new namespace 94884. Event `namespace` field updated in JSON 94895. Old directory cleaned up 9490 9491**Example**: 9492``` 9493Rename: "work" → "business" 9494 9495Before: 9496/data/meta/work/calendar/*.json 9497Events: {namespace: "work"} 9498 9499After: 9500/data/meta/business/calendar/*.json 9501Events: {namespace: "business"} 9502``` 9503 9504**Implementation**: 9505```php 9506private function renameNamespace() { 9507 // 1. Validate new name 9508 // 2. Rename directory 9509 // 3. Update all event namespace fields in JSON 9510 // 4. Clean up old empty directories 9511} 9512``` 9513 9514### Recurring Events Fix - The Problem 9515 9516**Before**: Editing didn't work! 9517``` 9518Original recurring event generates: 9519- Event-0 (Mon, Feb 10) 9520- Event-1 (Mon, Feb 17) 9521- Event-2 (Mon, Feb 24) 9522 9523User edits Event-0, changes title to "Updated" 9524 9525What SHOULD happen: 9526- Delete Event-0, Event-1, Event-2 9527- Generate new instances with "Updated" title 9528 9529What ACTUALLY happened: 9530- Delete Event-0 only ✗ 9531- Generate new instances 9532- Result: Event-1 and Event-2 still show old title! ✗ 9533``` 9534 9535**After**: Properly deletes ALL instances! 9536 9537**The Fix**: 9538```php 9539private function deleteEvent() { 9540 $event = getEvent($eventId); 9541 9542 // Check if recurring 9543 if ($event['recurring'] && $event['recurringId']) { 9544 // Delete ALL instances with same recurringId 9545 deleteAllRecurringInstances($recurringId); 9546 } 9547 9548 // Then normal delete for spanning events 9549} 9550 9551private function deleteAllRecurringInstances($recurringId) { 9552 // Scan ALL calendar JSON files 9553 foreach (glob('*.json') as $file) { 9554 // Filter out events with matching recurringId 9555 $events = array_filter($events, function($event) { 9556 return $event['recurringId'] !== $recurringId; 9557 }); 9558 } 9559} 9560``` 9561 9562**Result**: 9563- Edit "Weekly Team Meeting" → ALL instances updated ✓ 9564- Delete recurring event → ALL instances deleted ✓ 9565- No more orphaned events! ✓ 9566 9567### Recurring Event Fields 9568 9569Every recurring event has: 9570```json 9571{ 9572 "id": "abc123-0", 9573 "recurring": true, 9574 "recurringId": "abc123", ← Links all instances 9575 ... 9576} 9577``` 9578 9579When editing/deleting, we find ALL events with same `recurringId` and remove them! 9580 9581**Finally, recurring events work properly!** 9582 9583## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 9584 9585### Important Events Sorting - ACTUALLY FIXED! 9586- **Fixed:** Important Events now REALLY sorted by date first, then time 9587- **Fixed:** renderSidebarSection was re-sorting and breaking the order 9588- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 9589 9590### Pink Theme Tooltip Bling! 9591- **Added:** Pink gradient tooltips (hot pink → light pink) 9592- **Added:** Glowing pink border on tooltips 9593- **Added:** Sparkling heart () appears next to tooltip! 9594- **Added:** Heart has pink glow drop-shadow 9595 9596### The Sorting Bug - Root Cause 9597 9598**Problem**: Two sorts were happening! 9599 9600**Sort #1** (Line 2047): Before rendering 9601```php 9602usort($importantEvents, ...) // Sort by date ✓ 9603``` 9604 9605**Sort #2** (Line 2751): Inside renderSidebarSection 9606```php 9607usort($events, ...) // Sort by TIME ONLY ✗ 9608// This was breaking the date order! 9609``` 9610 9611**The Fix**: Different sorting for different sections 9612```php 9613if ($title === 'Important Events') { 9614 // Sort by DATE first, then time 9615 usort($events, function($a, $b) { 9616 if ($dateA !== $dateB) { 9617 return strcmp($dateA, $dateB); // DATE first! 9618 } 9619 // Same date - sort by time 9620 return timeCompare($a, $b); 9621 }); 9622} else { 9623 // Today/Tomorrow - sort by TIME only (same date) 9624 usort($events, function($a, $b) { 9625 return timeCompare($a, $b); 9626 }); 9627} 9628``` 9629 9630**Result**: Important Events now CORRECTLY sorted! 9631``` 9632✓ Sun, Feb 8 - 3:30 PM Super Bowl 9633✓ Tue, Feb 10 - 11:30 AM Doctor visit 9634✓ Sat, Feb 14 - Valentine's Day (all-day) 9635✓ Sat, Feb 14 - 8:00 PM Crab Shack 9636``` 9637 9638### Pink Tooltip Magic! 9639 9640**Normal Tooltips**: Black background, plain 9641```css 9642background: rgba(0, 0, 0, 0.95); 9643color: #fff; 9644``` 9645 9646**Pink Theme Tooltips**: FABULOUS! 9647```css 9648/* Pink gradient background */ 9649background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 9650 9651/* Glowing pink border */ 9652border: 2px solid #ff85c1; 9653 9654/* Double glow shadow */ 9655box-shadow: 9656 0 0 15px rgba(255, 20, 147, 0.6), 9657 0 4px 12px rgba(0, 0, 0, 0.4); 9658 9659/* Bold text */ 9660font-weight: 600; 9661``` 9662 9663**Plus**: Sparkling heart next to tooltip! 9664```css 9665.sidebar-pink [data-tooltip]:after { 9666 content: ''; 9667 font-size: 12px; 9668 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 9669} 9670``` 9671 9672**The Effect**: 9673``` 9674Hover over ⚠ conflict warning: 9675┌────────────────────┐ 9676│ Conflicts with: │ ← Pink gradient 9677│ • Event 1 (3PM) │ ← Pink border 9678│ • Event 2 (4PM) │ ← Pink glow 9679└────────────────────┘ 9680``` 9681 9682**Maximum glamour on tooltips too!** ✨ 9683 9684## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 9685 9686### Important Events Order Fixed 9687- **Fixed:** Important Events now sorted by date (earliest first) 9688- **Fixed:** Events on same date sorted by time (chronological) 9689- **Fixed:** All-day events appear last within each date 9690 9691### Sorting Issue 9692 9693**Before**: Random order 9694``` 9695Important Events: 9696 Valentine's Day (Sat, Feb 14) 969711:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 96983:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 96998:00 PM Crab Shack (Sat, Feb 14) 9700``` 9701 9702**After**: Chronological order 9703``` 9704Important Events: 97053:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 970611:30 AM Doctor visit (Tue, Feb 10) 9707 Valentine's Day (Sat, Feb 14) ← All-day event 97088:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 9709``` 9710 9711### Sorting Logic 9712 9713**Primary Sort**: By date 9714```php 9715strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 9716``` 9717 9718**Secondary Sort**: By time (within same date) 9719```php 9720// All-day events (no time) go last 9721if (empty($timeA) && !empty($timeB)) return 1; 9722if (!empty($timeA) && empty($timeB)) return -1; 9723 9724// Both have times - sort chronologically 9725$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 9726$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 9727return $aMinutes - $bMinutes; // 690 < 1200 9728``` 9729 9730**Result**: 97311. Sun, Feb 8 - 3:30 PM (earliest date & time) 97322. Tue, Feb 10 - 11:30 AM (next date) 97333. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 97344. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 9735 9736**Perfect chronological order for next 2 weeks!** ✓ 9737 9738## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 9739 9740### EXTREME PINK BLING EFFECTS! 9741- **Added:** Click sparkles - 8 sparkles burst out on every click! 9742- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 9743- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 9744- **Added:** Pulsing border glow - constantly breathing pink glow 9745- **Added:** Drop shadows on sparkles for extra depth 9746- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 9747 9748### Sparkle Effects Breakdown 9749 9750**Click Sparkles** : 9751```javascript 9752// 8 sparkles burst out when you click anywhere! 9753for (let i = 0; i < 8; i++) { 9754 // Staggered appearance (40ms apart) 9755 createSparkle(x, y); 9756} 9757 9758// Sparkle emojis: 9759["✨", "", "", "⭐", "", "", "", "", "", ""] 9760``` 9761 9762**Each sparkle**: 9763- Starts at click point 9764- Flies outward 30-60px in random direction 9765- Spins 360 degrees 9766- Fades in and out 9767- Has pink glow drop-shadow 9768- Disappears after 1 second 9769 9770**Auto Sparkles** ⏰: 9771```javascript 9772// Random sparkle every 3 seconds 9773setInterval(() => { 9774 const x = Math.random() * width; 9775 const y = Math.random() * height; 9776 createSparkle(x, y); 9777}, 3000); 9778``` 9779 9780**Result**: Constant magical sparkles even without clicking! ✨ 9781 9782**Hover Mega-Glow** : 9783```css 9784.sidebar-pink:hover { 9785 box-shadow: 9786 0 0 30px rgba(255, 20, 147, 0.9), 9787 0 0 50px rgba(255, 20, 147, 0.5) !important; 9788} 9789``` 9790 9791**Result**: Sidebar EXPLODES with pink glow when you hover over it! 9792 9793**Pulsing Border Glow** : 9794```css 9795@keyframes pulse-glow { 9796 0%, 100% { 9797 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9798 } 9799 50% { 9800 box-shadow: 9801 0 0 25px rgba(255, 20, 147, 0.8), 9802 0 0 40px rgba(255, 20, 147, 0.4); 9803 } 9804} 9805 9806animation: pulse-glow 3s ease-in-out infinite; 9807``` 9808 9809**Result**: Border continuously breathes with pink glow! 9810 9811**Sparkle Animation** : 9812```css 9813@keyframes sparkle { 9814 0% { 9815 opacity: 0; 9816 transform: translate(0, 0) scale(0) rotate(0deg); 9817 } 9818 50% { 9819 opacity: 1; 9820 transform: translate(halfway) scale(1) rotate(180deg); 9821 } 9822 100% { 9823 opacity: 0; 9824 transform: translate(far) scale(0) rotate(360deg); 9825 } 9826} 9827``` 9828 9829**Result**: Sparkles spin, grow, shrink, and fly! 9830 9831### Complete Pink Bling Experience: 9832 9833**Always Active**: 9834- ✨ Pulsing pink border glow (3 second cycle) 9835- ✨ Auto-sparkles every 3 seconds 9836 9837**On Hover**: 9838- MEGA GLOW EFFECT (2x brightness!) 9839 9840**On Click**: 9841- 8 sparkles EXPLODE outward! 9842- Random emojis (hearts, stars, diamonds, crowns!) 9843- Each sparkle spins 360° while flying 9844- Pink glow drop-shadow on each sparkle 9845 9846**The Result**: 9847- Click anywhere = SPARKLE EXPLOSION! 9848- Hover anywhere = MEGA GLOW! ✨ 9849- Always breathing and sparkling! 9850- Maximum glamour! 9851- Wife approval: 1000%! 9852 9853**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 9854 9855## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 9856 9857### Pink Theme Final Touches 9858- **Fixed:** Add Event text now black (was bright pink, hard to read) 9859- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 9860- **Removed:** Text shadow on Add Event button (cleaner with black text) 9861 9862### Add Event Text - Black & Readable! 9863 9864**Before**: Bright pink text (#ff1493) on dark pink background 9865```php 9866$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 9867text-shadow: 0 0 3px #ff1493; // Glowy pink 9868``` 9869 9870**After**: Black text, no shadow, perfect contrast! 9871```php 9872$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 9873$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 9874``` 9875 9876**Result**: 9877- Black text pops against dark pink background ✓ 9878- Easy to read ✓ 9879- Professional look with bling ✓ 9880 9881### Clock Border - All Pink! 9882 9883**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 9884 9885**Before**: 9886```php 9887// Inline style (only bottom): 9888style="border-bottom:2px solid #ff1493;" 9889 9890// CSS (all sides): 9891.eventlist-today-header { 9892 border: 2px solid #00cc07; // Green on top/sides! 9893} 9894``` 9895 9896**After**: Inline style overrides ALL sides 9897```php 9898style="border:2px solid #ff1493;" // All 4 sides pink! 9899``` 9900 9901**Result**: Clock box now 100% pink border on all four sides! ✓ 9902 9903### What Changed: 9904 9905**Add Event Button**: 9906- Background: #b8156f (dark pink) ✓ 9907- Text: **#000000 (black)** ← NEW! 9908- Text shadow: **none** ← NEW! 9909- Glow: 0 0 10px pink ✓ 9910 9911**Clock Border**: 9912- Top: **#ff1493 (pink)** ← FIXED! 9913- Right: **#ff1493 (pink)** ← FIXED! 9914- Bottom: #ff1493 (pink) ✓ 9915- Left: **#ff1493 (pink)** ← FIXED! 9916 9917**Perfect pink theme - wife approved!** ✨ 9918 9919## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 9920 9921### Pink Theme Complete Makeover 9922- **Fixed:** Clock border now completely pink (was green on sides/top) 9923- **Changed:** Today/Tomorrow/Important sections now different shades of pink 9924- **Changed:** Add Event button now dark pink (was clashing blue) 9925- **Changed:** System status bars now pink gradient (3 shades!) 9926 9927### All-Pink Everything! 9928 9929**Clock Border**: 9930```css 9931/* Before: Green border */ 9932border: 2px solid #00cc07; 9933 9934/* After: Hot pink border */ 9935.sidebar-pink .eventlist-today-header { 9936 border-color: #ff1493; 9937 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9938} 9939``` 9940 9941**Section Colors** (Different Pink Shades): 9942```php 9943// Before: Orange, green, purple 9944'Today' => '#ff9800', 9945'Tomorrow' => '#4caf50', 9946'Important' => '#9b59b6' 9947 9948// After: Hot pink, pink, light pink 9949'Today' => '#ff1493', // Hot pink (DeepPink) 9950'Tomorrow' => '#ff69b4', // Pink (HotPink) 9951'Important' => '#ff85c1' // Light pink 9952``` 9953 9954**Add Event Button**: 9955```php 9956// Before: Clashing blue 9957background: #3498db; 9958 9959// After: Dark pink with glow 9960background: #b8156f; // Dark pink 9961hover: #8b0f54; // Darker pink 9962shadow: 0 0 10px rgba(255, 20, 147, 0.5); 9963``` 9964 9965**System Status Bars** (Pink Gradient): 9966```css 9967/* 5-min load average */ 9968.sidebar-pink .eventlist-cpu-fill { 9969 background: #ff1493; /* Hot pink */ 9970 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 9971} 9972 9973/* Realtime CPU */ 9974.sidebar-pink .eventlist-cpu-fill-purple { 9975 background: #ff69b4; /* Pink */ 9976 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 9977} 9978 9979/* Memory */ 9980.sidebar-pink .eventlist-cpu-fill-orange { 9981 background: #ff85c1; /* Light pink */ 9982 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 9983} 9984``` 9985 9986### Pink Theme Visual Hierarchy: 9987 9988**Darkest → Lightest Pink Shades**: 99891. Add Event button: #b8156f (dark pink) 99902. Today section: #ff1493 (hot pink / deep pink) 99913. System bar 1: #ff1493 (hot pink) 99924. Tomorrow section: #ff69b4 (pink) 99935. System bar 2: #ff69b4 (pink) 99946. Important section: #ff85c1 (light pink) 99957. System bar 3: #ff85c1 (light pink) 9996 9997**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 9998 9999### What's Pink Now: 10000 10001✅ Sidebar background & border 10002✅ **Clock border** ← FIXED! 10003✅ Header gradient 10004✅ Week grid 10005✅ **Add Event button** ← FIXED! 10006✅ **Today section** ← Different shade! 10007✅ **Tomorrow section** ← Different shade! 10008✅ **Important section** ← Different shade! 10009✅ Event text & bars 10010✅ **System status bars** ← All 3 different pink shades! 10011✅ All shadows & glows 10012 10013**EVERYTHING is pink and fabulous!** ✨ 10014 10015## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 10016 10017### ✨ New Theme: Pink Bling! 10018- **Added:** Glamorous hot pink theme with maximum sparkle 10019- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 10020- **Perfect for:** Fabulous calendars that demand attention ✨ 10021 10022### Professional Theme Shadow Fix 10023- **Fixed:** Section headers now have subtle shadow (not glow) 10024- **Fixed:** Clicked day panel header has proper shadow 10025 10026### Pink Bling Theme Colors 10027 10028**Background & Borders**: 10029```php 10030'bg' => '#1a0d14', // Dark rich pink-black 10031'border' => '#ff1493', // Hot pink (DeepPink) 10032'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 10033``` 10034 10035**Text Colors**: 10036```php 10037'text_primary' => '#ff69b4', // Hot pink 10038'text_bright' => '#ff1493', // Deep pink 10039'text_dim' => '#ff85c1', // Light pink 10040``` 10041 10042**Week Grid**: 10043```php 10044'grid_bg' => '#2d1a24', // Dark purple-pink 10045'cell_bg' => '#1a0d14', // Dark 10046'cell_today_bg' => '#3d2030', // Highlighted purple-pink 10047``` 10048 10049**Special Effects**: 10050```php 10051'bar_glow' => '0 0 5px', // Extra sparkly glow! 10052'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 10053``` 10054 10055### Professional Theme Shadow Fix 10056 10057**Before**: Section headers had colored glow 10058```php 10059box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 10060``` 10061 10062**After**: Section headers have subtle shadow 10063```php 10064$headerShadow = ($theme === 'professional') ? 10065 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 10066 '0 0 8px ' . $accentColor; // Glow for others 10067``` 10068 10069**Result**: 10070- **Matrix/Purple/Pink**: Colored glow on headers ✓ 10071- **Professional**: Clean grey shadow (no glow) ✓ 10072 10073### All Four Themes: 10074 10075** Matrix Edition**: 10076- Dark green (#00cc07) 10077- Neon glow effects 10078- Hacker aesthetic 10079 10080** Purple Dream**: 10081- Elegant purple (#9b59b6) 10082- Violet glow effects 10083- Royal aesthetic 10084 10085** Professional Blue**: 10086- Clean grey/blue (#4a90e2) 10087- Subtle shadows (NO glow) 10088- Corporate aesthetic 10089 10090** Pink Bling** (NEW!): 10091- Hot pink (#ff1493) 10092- MAXIMUM sparkle & glow 10093- Glamorous aesthetic ✨ 10094 10095### Technical Implementation 10096 10097**Theme Added To**: 10098- `getSidebarThemeStyles()` - color definitions 10099- `getSidebarTheme()` - validation 10100- `saveSidebarTheme()` - admin save 10101- Admin panel - UI with preview 10102- All shadow/glow calculations 10103- JavaScript theme colors 10104- Clicked day panel colors 10105 10106**Perfect for users who want FABULOUS pink calendars!** ✨ 10107 10108## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 10109 10110### Text Glow Refinement 10111- **Changed:** Reduced text glow from 3px to 2px (less intense) 10112- **Fixed:** Clicked day panel now has same text glow as sections 10113 10114### Text Glow Reduction 10115 10116**Before**: Text glow was too strong (3px) 10117```php 10118// Sections: 10119text-shadow: 0 0 3px #00cc07; // Too bright! 10120 10121// Clicked day panel: 10122text-shadow: 0 0 3px #00cc07; // Too bright! 10123``` 10124 10125**After**: Subtler text glow (2px) 10126```php 10127// Sections: 10128text-shadow: 0 0 2px #00cc07; // Just right ✓ 10129 10130// Clicked day panel: 10131text-shadow: 0 0 2px #00cc07; // Just right ✓ 10132``` 10133 10134**Visual Impact**: 10135- **Matrix**: Softer green glow, easier to read 10136- **Purple**: Softer purple glow, more elegant 10137- **Professional**: Still no glow (clean) 10138 10139### Consistency Fix 10140 10141**Before**: Sections had glow, clicked day panel had NO glow 10142 10143**After**: Both sections AND clicked day panel have matching subtle glow 10144 10145**Where Glow Appears**: 10146- ✅ Today section event text 10147- ✅ Tomorrow section event text 10148- ✅ Important section event text 10149- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 10150 10151**Result**: 10152- Glow is less intense and easier on eyes ✓ 10153- All event text has consistent styling ✓ 10154- Matrix/Purple themes more refined ✓ 10155 10156### Technical Details 10157 10158**PHP (Sections)**: 10159```php 10160$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 10161``` 10162 10163**JavaScript (Clicked Day Panel)**: 10164```javascript 10165themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 10166eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 10167``` 10168 10169**Perfect consistency and subtle elegance!** ✨ 10170 10171## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 10172 10173### ✨ Important Events Enhancement 10174- **Changed:** Important events now show from next 2 weeks (not just current week) 10175- **Fixed:** Important events on Sunday after current week now visible 10176- **Changed:** Events loaded 2 weeks into future for Important section 10177 10178### Background Cleanup 10179- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 10180- **Removed:** Grey backgrounds from individual events 10181- **Result:** Clean transparent backgrounds, original dark Matrix look restored 10182 10183### Important Events - Future Coverage 10184 10185**Before**: Only showed Important events from current week 10186```php 10187if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10188 $importantEvents[] = $event; 10189} 10190``` 10191 10192**After**: Shows Important events from today through next 2 weeks 10193```php 10194// Load events 2 weeks out 10195$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 10196 10197// Show all important events from today forward 10198if ($isImportant && $dateKey >= $todayStr) { 10199 $importantEvents[] = $event; 10200} 10201``` 10202 10203**Example**: 10204- Today: Saturday Feb 7 10205- Current week: Sun Feb 1 → Sat Feb 7 10206- Important events shown: Feb 7 → Feb 21 (today + 14 days) 10207 10208**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 10209 10210### Background Removal 10211 10212**Before**: Light grey/white backgrounds added 10213```php 10214// Section background: 10215$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 10216 10217// Event background: 10218$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 10219``` 10220 10221**After**: No backgrounds (transparent) 10222```php 10223// Section: No background property 10224<div style="padding:4px 0;"> 10225 10226// Event: No background property 10227<div style="padding:4px 6px; ..."> 10228``` 10229 10230**Result**: 10231- Clean, dark Matrix aesthetic restored ✓ 10232- Purple theme darker and more elegant ✓ 10233- Professional theme still has its light grey sidebar bg ✓ 10234- Events stand out with just color bars and borders ✓ 10235 10236### What Changed: 10237 10238**Sections (Today/Tomorrow/Important)**: 10239- ❌ No more grey overlay 10240- ✓ Transparent background 10241- ✓ Colored borders & glows remain 10242 10243**Individual Events**: 10244- ❌ No more grey overlay 10245- ✓ Transparent background 10246- ✓ Colored bars & borders remain 10247 10248**Perfect! Back to the original clean dark look with future Important events!** 10249 10250## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 10251 10252### Final Theme Polish 10253- **Fixed:** Today/Tomorrow/Important section shadows now match theme 10254- **Fixed:** Event description text color now uses theme dim color 10255 10256### Section Shadow Fix 10257 10258**Problem**: Sections always had green glow regardless of theme 10259 10260**Before**: 10261```php 10262// Hardcoded green: 10263box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 10264``` 10265 10266**After**: 10267```php 10268// Theme-aware: 10269$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 10270 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 10271 '0 2px 4px rgba(0, 0, 0, 0.1)'); 10272``` 10273 10274**Result**: 10275- **Matrix**: Green glow around sections ✓ 10276- **Purple**: Purple glow around sections ✓ 10277- **Professional**: Subtle grey shadow (no glow) ✓ 10278 10279### Description Color Fix 10280 10281**Problem**: Description text always green in clicked day panel 10282 10283**Before**: 10284```javascript 10285color: #00aa00; // Always green 10286``` 10287 10288**After**: 10289```javascript 10290color: themeColors.text_dim; // Theme dim color 10291``` 10292 10293**Result**: 10294- **Matrix**: Dim green (#00aa00) ✓ 10295- **Purple**: Dim purple (#8e7ab8) ✓ 10296- **Professional**: Grey (#7f8c8d) ✓ 10297 10298### Now 100% Theme Consistent 10299 10300Every single visual element respects theme: 10301- ✅ Sidebar background & border 10302- ✅ Header colors & shadows 10303- ✅ Week grid & cells 10304- ✅ Add Event button 10305- ✅ Section borders & **shadows** ← Fixed! 10306- ✅ Event titles & times 10307- ✅ Event **descriptions** ← Fixed! 10308- ✅ Clicked day panel 10309- ✅ Event bars & glows 10310 10311**Absolute perfection across all three themes!** ✨ 10312 10313## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 10314 10315### Theme Improvements 10316- **Fixed:** Clicked day panel now uses correct theme colors 10317- **Changed:** Professional Blue background now light grey (not white) 10318- **Added:** Theme colors passed to JavaScript for dynamic rendering 10319 10320### Clicked Day Panel Theming 10321 10322**Before**: Always blue regardless of theme 10323```javascript 10324// Hardcoded blue: 10325color:#00cc07; // Always green 10326background:#3498db; // Always blue 10327``` 10328 10329**After**: Theme-aware colors 10330```php 10331// PHP passes theme to JavaScript: 10332window.themeColors_XXX = { 10333 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 10334 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 10335 text_shadow: '0 0 3px ...' or '', 10336 event_bg: 'rgba(...)', 10337 border_color: 'rgba(...)', 10338 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 10339}; 10340 10341// JavaScript uses theme colors: 10342color: themeColors.text_primary; 10343background: themeColors.event_bg; 10344``` 10345 10346**Result**: 10347- Matrix: Green panel with green glow ✓ 10348- Purple: Purple panel with purple glow ✓ 10349- Professional: Blue panel, no glow, clean ✓ 10350 10351### Professional Theme Background Change 10352 10353**Before**: Almost white (#f5f7fa, #ffffff) 10354```php 10355'bg' => '#f5f7fa', // Very light 10356'cell_bg' => '#ffffff', // Pure white 10357``` 10358 10359**After**: Light grey tones 10360```php 10361'bg' => '#e8ecf1', // Soft grey-blue 10362'cell_bg' => '#f5f7fa', // Light grey 10363'grid_bg' => '#d5dbe3', // Medium grey 10364'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 10365``` 10366 10367**Visual Impact**: 10368- Sidebar: Light grey-blue background (#e8ecf1) 10369- Week cells: Lighter grey (#f5f7fa) 10370- Today cell: Highlighted blue-grey (#dce8f7) 10371- More depth and contrast ✓ 10372- Professional appearance ✓ 10373 10374### All Theme Elements Now Consistent 10375 10376**Matrix (Green)**: 10377- Sidebar: Dark (#242424) 10378- Clicked panel: Dark with green 10379- Text: Green with glow 10380 10381**Purple Dream**: 10382- Sidebar: Dark purple (#2a2030) 10383- Clicked panel: Dark with purple 10384- Text: Purple with glow 10385 10386**Professional Blue**: 10387- Sidebar: Light grey (#e8ecf1) 10388- Clicked panel: Light with blue 10389- Text: Dark grey, no glow 10390 10391**Perfect theme consistency everywhere!** 10392 10393## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 10394 10395### Critical Fixes 10396- **Fixed:** Tomorrow events not loaded when outside current week 10397- **Fixed:** `&` showing instead of `&` (double HTML encoding) 10398 10399### Issue 1: Tomorrow Not Loading 10400 10401**Problem**: Sidebar only loaded events for current week 10402- Today (Saturday): Week ends today 10403- Tomorrow (Sunday): Start of NEXT week 10404- Tomorrow events never loaded from data files! 10405 10406**Before**: 10407```php 10408// Only load current week 10409$end = new DateTime($weekEnd); 10410$end->modify('+1 day'); 10411$period = new DatePeriod($start, $interval, $end); 10412// If tomorrow > weekEnd, it's not in period! 10413``` 10414 10415**After**: 10416```php 10417// Check if tomorrow is outside week 10418$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 10419if ($tomorrowDate > $weekEnd) { 10420 // Extend to include tomorrow 10421 $end = new DateTime($tomorrowDate); 10422} 10423$end->modify('+1 day'); 10424$period = new DatePeriod($start, $interval, $end); 10425``` 10426 10427**Result**: Tomorrow events now loaded even at week boundary! ✓ 10428 10429### Issue 2: Double HTML Encoding 10430 10431**Problem**: `&` characters showing as `&` 10432 10433**Cause**: Double encoding on line 2625 and 2681 10434```php 10435// Line 2625: 10436$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 10437 10438// Line 2681: 10439$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 10440``` 10441 10442**Fixed**: 10443```php 10444// Line 2625: 10445$title = htmlspecialchars($event['title']); // Encode once 10446 10447// Line 2681: 10448$html .= $title; // Use already-encoded value ✓ 10449``` 10450 10451**Result**: `&` displays correctly! ✓ 10452 10453### Both Fixes Critical 10454 10455These were **two separate bugs**: 104561. **Loading bug**: Tomorrow events not read from files 104572. **Display bug**: Double-encoding text 10458 10459Both needed fixing for Tomorrow section to work properly! 10460 10461## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 10462 10463### Critical Fix 10464- **Fixed:** Tomorrow section missing when tomorrow is outside current week 10465- **Fixed:** Today section now always shows regardless of week boundaries 10466- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 10467 10468### The Problem 10469 10470**Scenario**: Today is Saturday (last day of week) 10471- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 10472- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 10473 10474**BROKEN Logic** (v4.2.2): 10475```php 10476foreach ($events as $dateKey => $dayEvents) { 10477 if ($dateKey < $weekStart) continue; // Skip old events 10478 10479 // ...week processing... 10480 10481 if ($dateKey === $tomorrowStr) { // ← Never reached! 10482 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 10483 } 10484} 10485``` 10486 10487**Result**: Tomorrow events never added because loop skipped them! ❌ 10488 10489### The Fix 10490 10491**Process Today/Tomorrow FIRST**: 10492```php 10493foreach ($events as $dateKey => $dayEvents) { 10494 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 10495 10496 foreach ($eventsWithConflicts as $event) { 10497 // ALWAYS process Today and Tomorrow first! 10498 if ($dateKey === $todayStr) { 10499 $todayEvents[] = $event; // ✓ Always shows 10500 } 10501 if ($dateKey === $tomorrowStr) { 10502 $tomorrowEvents[] = $event; // ✓ Always shows 10503 } 10504 10505 // THEN check week boundaries for grid 10506 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 10507 $weekEvents[$dateKey][] = $event; 10508 } 10509 10510 // Important events still week-only 10511 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10512 $importantEvents[] = $event; 10513 } 10514 } 10515} 10516``` 10517 10518### What Changed 10519 10520**Before**: 105211. Skip events < weekStart ❌ 105222. Process week grid 105233. Try to add Today/Tomorrow ← **Failed if outside week** 105244. Add Important events 10525 10526**After**: 105271. **Always add Today events** ✓ 105282. **Always add Tomorrow events** ✓ 105293. Add to week grid if in range 105304. Add Important events if in range 10531 10532**Result**: 10533- Today section: ✓ Always shows 10534- Tomorrow section: ✓ Always shows (even at week boundary!) 10535- Week grid: ✓ Only current week 10536- Important: ✓ Only current week 10537 10538### Edge Cases Fixed 10539 10540**Saturday → Sunday transition**: 10541- Today (Sat): Shows in Today section ✓ 10542- Tomorrow (Sun): Shows in Tomorrow section ✓ 10543- Week grid: Only shows Sat (today) ✓ 10544 10545**Sunday → Monday transition**: 10546- Today (Sun): Shows in Today section ✓ 10547- Tomorrow (Mon): Shows in Tomorrow section ✓ 10548- Week grid: Shows both Sun and Mon ✓ 10549 10550**Perfect! Tomorrow section now always works!** 10551 10552## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 10553 10554### Corrected Week Options 10555- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 10556- **Changed:** Default is **Sunday** (US/Canada standard) 10557- **Fixed:** Day names array for Sunday start: S M T W T F S 10558 10559### Correct Week Start Options 10560 10561**Sunday Start** (Default): 10562- Grid shows: **S M T W T F S** 10563- Week: Sunday → Saturday 10564- US/Canada standard 10565- Most common worldwide 10566 10567**Monday Start**: 10568- Grid shows: **M T W T F S S** 10569- Week: Monday → Sunday 10570- ISO 8601 standard 10571- Common in Europe 10572 10573### Technical Changes 10574 10575**All References Updated**: 10576```php 10577// Changed from 'saturday' to 'sunday' in: 10578- Admin validation 10579- Week calculation logic 10580- Day names array 10581- Default value 10582- Comments 10583``` 10584 10585**Sunday Calculation** (when today is Saturday): 10586```php 10587$today = date('w'); // 0=Sun, 6=Sat 10588if ($today == 0) { 10589 $weekStart = date('Y-m-d'); // Today! 10590} else { 10591 // Go back $today days to last Sunday 10592 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 10593} 10594``` 10595 10596**Examples**: 10597- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 10598- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 10599 10600**Sorry for the confusion - it's Sunday not Saturday!** 10601 10602## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 10603 10604### Critical Fix 10605- **Fixed:** Week calculation broken when today is Saturday 10606- **Fixed:** Events not showing in Today/Important sections 10607- **Fixed:** Week grid event bars missing 10608- **Changed:** Default week start is Saturday (matches main calendar) 10609 10610### Technical Details 10611 10612**The Bug**: 10613```php 10614// BROKEN (v4.2.0): 10615$weekStart = date('Y-m-d', strtotime('saturday this week')); 10616// When TODAY is Saturday, this is ambiguous and fails! 10617 10618// FIXED (v4.2.1): 10619$today = date('w'); // 0 (Sun) to 6 (Sat) 10620if ($today == 6) { 10621 $weekStart = date('Y-m-d'); // Today! 10622} else { 10623 $daysBack = ($today == 0) ? 1 : ($today + 1); 10624 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 10625} 10626$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 10627``` 10628 10629**Why It Failed**: 10630- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 10631- PHP may interpret it as "next Saturday" or fail 10632- Result: Week range was wrong, events filtered out 10633 10634**The Fix**: 10635- Explicit calculation using day-of-week math 10636- Saturday (day 6): weekStart = today 10637- Sunday (day 0): weekStart = yesterday 10638- Monday-Friday: calculate days back to last Saturday 10639 10640**Result**: Works reliably every day of the week! 10641 10642**Default Changed**: Saturday start (was Monday in 4.2.0) 10643- Matches main calendar behavior 10644- Users can still switch to Monday in settings 10645 10646## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 10647 10648### ✨ New Feature 10649- **Added:** Week start day selector in Themes tab 10650- **Added:** Choose between Monday (ISO standard) or Saturday week start 10651- **Added:** Week grid and all events now respect the selected start day 10652- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 10653 10654### Week Start Options 10655 10656**Monday Start** (Default): 10657- Grid shows: M T W T F S S 10658- Week runs: Monday → Sunday 10659- ISO 8601 standard 10660- Common in Europe, most of world 10661 10662**Saturday Start**: 10663- Grid shows: S S M T W T F 10664- Week runs: Saturday → Friday 10665- Common in Middle East 10666- Sabbath-observant communities 10667 10668### Technical Details 10669 10670**Configuration**: 10671```php 10672// Saved in: data/meta/calendar_week_start.txt 10673// Values: 'monday' or 'saturday' 10674 10675// Week calculation: 10676if ($weekStartDay === 'saturday') { 10677 $weekStart = date('Y-m-d', strtotime('saturday this week')); 10678 $weekEnd = date('Y-m-d', strtotime('friday next week')); 10679} else { 10680 $weekStart = date('Y-m-d', strtotime('monday this week')); 10681 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 10682} 10683``` 10684 10685**Day Names Array**: 10686```php 10687// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 10688// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 10689``` 10690 10691**What Changes**: 10692- Week grid day letters 10693- Week grid date sequence 10694- Today/Tomorrow/Important event date ranges 10695- Week event grouping 10696 10697**What Stays Same**: 10698- All themes still work 10699- Event data unchanged 10700- Main calendar unaffected 10701 10702### How to Change: 10703 107041. Admin → Calendar → Themes tab 107052. Under "Week Start Day" section 107063. Select Monday or Saturday 107074. Click "Save Settings" 107085. Refresh sidebar to see changes 10709 10710**Perfect for international users or religious observances!** 10711 10712## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 10713 10714### ️ Calendar Improvements 10715- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 10716- **Changed:** Event section backgrounds much lighter (almost white) 10717- **Changed:** Individual event backgrounds lighter and more readable 10718- **Changed:** Event borders now theme-colored 10719 10720### Technical Details 10721 10722**Week Start Change**: 10723```php 10724// Before: 10725$weekStart = date('Y-m-d', strtotime('monday this week')); 10726$weekEnd = date('Y-m-d', strtotime('sunday this week')); 10727$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 10728 10729// After: 10730$weekStart = date('Y-m-d', strtotime('sunday this week')); 10731$weekEnd = date('Y-m-d', strtotime('saturday this week')); 10732$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 10733``` 10734 10735**Background Colors**: 10736```php 10737// Section backgrounds (Today, Tomorrow, Important): 10738Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 10739Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 10740Professional: rgba(255, 255, 255, 0.95) // Almost white! 10741 10742// Individual event backgrounds: 10743Matrix: rgba(255, 255, 255, 0.03) // Subtle 10744Purple: rgba(255, 255, 255, 0.05) // Light 10745Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 10746``` 10747 10748**Event Borders**: 10749```php 10750Matrix: rgba(0, 204, 7, 0.2) // Green 10751Purple: rgba(155, 89, 182, 0.2) // Purple 10752Professional: rgba(74, 144, 226, 0.2) // Blue 10753``` 10754 10755### Visual Result: 10756 10757**Before**: Dark backgrounds made text hard to read 10758**After**: Light backgrounds make events pop and text very readable 10759 10760**Week Grid**: 10761``` 10762Before: [M][T][W][T][F][S][S] 10763After: [S][M][T][W][T][F][S] ← Now matches main calendar! 10764``` 10765 10766## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 10767 10768### Final Theme Polish 10769- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 10770- **Fixed:** Event times now use theme bright color 10771- **Fixed:** Event dates use theme dim color 10772- **Fixed:** Task checkboxes use theme bright color 10773- **Fixed:** Event color bars use theme-appropriate shadows 10774- **Fixed:** No text shadows on Professional theme 10775 10776### Technical Details 10777 10778**Event Text Colors**: 10779```php 10780// Matrix: 10781- Title: #00cc07 (green) 10782- Time: #00dd00 (bright green) 10783- Date: #00aa00 (dim green) 10784- Text shadow: 0 0 3px (glow) 10785 10786// Purple: 10787- Title: #b19cd9 (lavender) 10788- Time: #d4a5ff (bright purple) 10789- Date: #8e7ab8 (dim purple) 10790- Text shadow: 0 0 3px (glow) 10791 10792// Professional: 10793- Title: #2c3e50 (dark grey) 10794- Time: #4a90e2 (blue) 10795- Date: #7f8c8d (grey) 10796- Text shadow: none (clean) 10797``` 10798 10799**Color Bar Shadows**: 10800```php 10801// Matrix & Purple: Glow effect 10802box-shadow: 0 0 3px [event-color]; 10803 10804// Professional: Subtle shadow 10805box-shadow: 0 1px 2px rgba(0,0,0,0.2); 10806``` 10807 10808### What's Now Fully Themed: 10809 10810✅ Sidebar background & border 10811✅ Header (clock box) background, border, text 10812✅ Week grid background, borders, cells 10813✅ Week grid day letters & numbers 10814✅ Week grid event bars & "+N more" text 10815✅ Add Event button background & text 10816✅ Today/Tomorrow/Important event titles 10817✅ Event times 10818✅ Event dates (Important section) 10819✅ Task checkboxes 10820✅ Event color bars 10821✅ All text shadows (glow vs none) 10822 10823**Every single element now respects the theme!** 10824 10825## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 10826 10827### Theme Improvements 10828- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 10829- **Fixed:** Add Event button now uses theme colors 10830- **Fixed:** Clock box border now matches theme 10831- **Fixed:** All text shadows respect theme (no glow on professional) 10832- **Fixed:** Event bars use theme-appropriate shadows 10833 10834### Technical Details 10835 10836**Week Grid Theming**: 10837```php 10838// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 10839// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 10840// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 10841``` 10842 10843**Add Event Button**: 10844```php 10845// Matrix: Dark green (#006400) with bright green text 10846// Purple: Purple (#7d3c98) with lavender text 10847// Professional: Blue (#3498db) with white text 10848``` 10849 10850**Text Shadows**: 10851```php 10852// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 10853// Professional: No glow (clean look) 10854``` 10855 10856**CSS Overrides**: 10857```css 10858/* Purple theme */ 10859.sidebar-purple .eventlist-today-header { 10860 border-color: #9b59b6; 10861 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 10862} 10863 10864/* Professional theme */ 10865.sidebar-professional .eventlist-today-header { 10866 border-color: #4a90e2; 10867 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 10868} 10869``` 10870 10871### What Changed Per Theme: 10872 10873**Purple Dream**: 10874- Week grid: Purple borders and dark purple background 10875- Add Event: Purple button with lavender text 10876- Clock box: Purple border with purple glow 10877- Event bars: Purple glow instead of green 10878- All text: Purple/lavender shades 10879 10880**Professional Blue**: 10881- Week grid: Blue borders and light grey background 10882- Add Event: Blue button with white text 10883- Clock box: Blue border with subtle shadow (no glow) 10884- Event bars: Subtle shadows (no glow) 10885- All text: Dark grey and blue shades 10886 10887**Matrix Edition**: Unchanged (still perfect green theme!) 10888 10889## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 10890 10891### ✨ New Features 10892- **Added:** Themes tab in admin for sidebar widget theming 10893- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 10894- **Added:** Theme selector with live previews 10895- **Added:** Theme persistence across page loads 10896 10897### Available Themes 10898 10899**Matrix Edition** (Default): 10900- Dark background (#242424) 10901- Green accents (#00cc07) 10902- Neon glow effects 10903- Original Matrix styling 10904 10905**Purple Dream**: 10906- Dark purple background (#2a2030) 10907- Purple/violet accents (#9b59b6) 10908- Elegant purple glow 10909- Rich purple color scheme 10910 10911**Professional Blue**: 10912- Light grey background (#f5f7fa) 10913- Blue accents (#4a90e2) 10914- Clean professional look 10915- Subtle shadows instead of glow 10916 10917### Bug Fix 10918- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 10919- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 10920 10921### Technical Details 10922 10923**Theme System**: 10924```php 10925// Saved in: data/meta/calendar_theme.txt 10926// Applied dynamically in syntax.php 10927$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 10928$styles = $this->getSidebarThemeStyles($theme); 10929 10930// Styles include: 10931- bg, border, shadow 10932- header_bg, header_border, header_shadow 10933- text_primary, text_bright, text_dim 10934- grid_bg, grid_border 10935- cell_bg, cell_today_bg 10936``` 10937 10938**Theme Changes**: 10939- Header background gradient 10940- Border colors 10941- Text colors 10942- Shadow/glow effects 10943- Grid colors 10944 10945**How to Change**: 109461. Admin → Calendar → Themes tab 109472. Select desired theme 109483. Click "Save Theme" 109494. Refresh page to see changes 10950 10951### Notes 10952- Themes only affect sidebar widget appearance 10953- Main calendar view unchanged 10954- Theme setting stored in `data/meta/calendar_theme.txt` 10955- Safe to switch themes - no data affected 10956 10957## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 10958 10959### Bug Fixes 10960- **Fixed:** Events now sort chronologically by time (was using string comparison) 10961- **Fixed:** Tooltip positioning using JavaScript like system tooltips 10962- **Fixed:** All-day events appear first, then events in time order 10963 10964### Technical Details 10965 10966**Event Sorting Fix**: 10967```php 10968// BROKEN (v4.0.9): 10969return strcmp($aTime, $bTime); 10970// String comparison: "10:00" < "8:00" because "1" < "8" 10971// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 10972 10973// FIXED (v4.1.0): 10974$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 10975$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 10976return $aMinutes - $bMinutes; 10977// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 10978``` 10979 10980**Example Before Fix**: 10981``` 10982 Weekend Ticket Duty (all-day) 109838:00 AM START TICKETS 1098410:00 AM Soul Winning ← Wrong! 109859:45 AM Coffee ← Should be before 10:00 AM 10986``` 10987 10988**Example After Fix**: 10989``` 10990 Weekend Ticket Duty (all-day) 109918:00 AM START TICKETS 109929:45 AM Coffee ← Correct! 1099310:00 AM Soul Winning 10994``` 10995 10996**Tooltip Positioning**: 10997- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 10998- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 10999- Positioned on `mouseenter` event 11000- Matches system tooltip implementation (no cutoff) 11001 11002**JavaScript Implementation**: 11003```javascript 11004element.addEventListener("mouseenter", function() { 11005 const rect = element.getBoundingClientRect(); 11006 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 11007 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 11008}); 11009``` 11010 11011**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 11012 11013## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 11014 11015### UI Improvements 11016- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 11017- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 11018- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 11019 11020### Technical Details 11021 11022**Sidebar Overflow Fix**: 11023```php 11024// Before (line 2005): 11025style="...overflow:hidden..." // ← Blocked tooltips! 11026 11027// After: 11028style="...overflow:visible..." // ← Tooltips extend beyond! 11029``` 11030 11031**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 11032 11033**Main Calendar Tooltip Size**: 11034```css 11035/* Before: */ 11036.conflict-tooltip { 11037 border: 2px solid #ff9800; 11038 border-radius: 6px; 11039 padding: 8px 12px; 11040 font-size: 12px; 11041 min-width: 200px; 11042 max-width: 350px; 11043} 11044 11045/* After: */ 11046.conflict-tooltip { 11047 border: 1px solid #ff9800; /* Thinner */ 11048 border-radius: 3px; /* Smaller */ 11049 padding: 4px 8px; /* Less padding */ 11050 font-size: 10px; /* Smaller header */ 11051 min-width: 120px; /* Narrower */ 11052 max-width: 200px; /* Narrower */ 11053} 11054 11055.conflict-tooltip-body { 11056 padding: 6px 8px; /* Was 10px 12px */ 11057 font-size: 9px; /* Was 11px */ 11058 line-height: 1.4; /* Was 1.6 */ 11059} 11060 11061.conflict-item { 11062 padding: 2px 0; /* Was 4px */ 11063 font-size: 9px; /* Added smaller font */ 11064} 11065``` 11066 11067**Result**: 11068- Main calendar tooltip ~50% smaller 11069- Sidebar tooltips now extend beyond borders 11070- Both tooltips compact and readable 11071 11072## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 11073 11074### Bug Fix 11075- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 11076- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 11077 11078### Technical Details 11079 11080**The Problem**: 11081```php 11082// Before (v4.0.7): 11083$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 11084 11085// Displayed as: 11086"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 11087``` 11088 11089**The Fix**: 11090```php 11091// After (v4.0.8): 11092$conflictTooltip = "Conflicts with: "; // HTML entity for newline 11093 11094// Displays as: 11095Conflicts with: 11096• Event 1 11097• Event 2 11098``` 11099 11100**Why ` ` Works**: 11101- HTML entity for line feed character 11102- Works in data attributes 11103- CSS `white-space: pre-line` preserves the newlines 11104- Renders as actual line breaks in tooltip 11105 11106**Applied to**: 11107- PHP rendering (sidebar Today/Tomorrow/Important) 11108- JavaScript rendering (clicked day events) 11109 11110## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 11111 11112### UI Improvements 11113- **Changed:** Tooltip size reduced significantly (much more compact) 11114- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 11115- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 11116- **Changed:** Narrower width (120-200px vs 200-300px) 11117 11118### Technical Details 11119 11120**Tooltip Size Reduction**: 11121```css 11122/* Before (v4.0.6): 11123padding: 6px 10px; 11124font-size: 11px; 11125min-width: 200px; 11126max-width: 300px; 11127 11128/* After (v4.0.7): */ 11129padding: 3px 6px; 11130font-size: 9px; 11131min-width: 120px; 11132max-width: 200px; 11133``` 11134 11135**Overflow Fix**: 11136```css 11137/* Allow tooltip to extend beyond sidebar */ 11138.sidebar-widget, 11139.sidebar-matrix { 11140 overflow: visible !important; 11141} 11142 11143/* Position tooltip outside */ 11144[data-tooltip]:before { 11145 bottom: 120%; /* Further above */ 11146 right: -10px; /* Can extend beyond edge */ 11147 z-index: 10000; /* Always on top */ 11148} 11149``` 11150 11151**Visual Result**: 11152- Tooltip is ~40% smaller 11153- Extends beyond sidebar border if needed 11154- Still readable, just more compact 11155- Better for small screens 11156 11157## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 11158 11159### Critical Fix 11160- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 11161- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 11162- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 11163- **Fixed:** Now matches what you see in main calendar view 11164 11165### ✨ UI Improvement 11166- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 11167- **Added:** Custom CSS tooltip with data-tooltip attribute 11168- **Improved:** Better tooltip positioning - doesn't overflow screen edges 11169 11170### Technical Details 11171 11172**The Problem - Field Name Mismatch**: 11173```php 11174// Main calendar (line 697): 11175$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 11176 11177// Sidebar (before fix): 11178$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 11179``` 11180 11181**The Problem - Duration Logic**: 11182```php 11183// Main calendar (line 697): 11184$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 11185 ? $evt1['endTime'] 11186 : $evt1['time']; // ← Uses START time (zero duration) 11187 11188// Sidebar (before fix): 11189$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 11190``` 11191 11192**The Fix**: 11193```php 11194// Now checks BOTH field names: 11195if (isset($event['end_time']) && $event['end_time'] !== '') { 11196 $endTime = $event['end_time']; 11197} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 11198 $endTime = $event['endTime']; 11199} else { 11200 $endTime = $startTime; // ← Matches main calendar! 11201} 11202``` 11203 11204**Tooltip Positioning**: 11205- Uses `data-tooltip` attribute instead of `title` 11206- CSS positions tooltip ABOVE badge (`bottom: 100%`) 11207- Aligns to RIGHT edge (`right: 0`) 11208- Arrow points down to badge 11209- Black background with white text 11210- Max width 300px 11211 11212### Example 11213 11214**6:00 PM Evening Service** (no end time): 11215- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 11216- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 11217 11218**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 11219- Zero-duration events at 6:00 PM don't overlap with anything 11220- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 11221 11222**Tooltip appears**: 11223``` 11224 ┌────────────────────┐ 11225 │ Conflicts with: │ 11226 │ • Super Bowl │ 11227 │ (3:30 PM-7:00 PM)│ 11228 └─────────┬──────────┘ 11229 ▼ 11230 ⚠ 11231``` 11232 11233## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 11234 11235### Bug Fix 11236- **Fixed:** Events without end_time now properly get 1-hour default duration 11237- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 11238- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 11239 11240### Technical Details 11241 11242**The Problem**: 11243```php 11244// Before (broken): 11245$endTime = isset($event['end_time']) ? $event['end_time'] : default; 11246 11247// If end_time exists but is empty string "": 11248isset($event['end_time']) = TRUE 11249$endTime = "" // ← Empty string, not default! 11250``` 11251 11252**The Fix**: 11253```php 11254// After (fixed): 11255$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 11256 ? $event['end_time'] 11257 : $this->addHoursToTime($startTime, 1); 11258 11259// Now empty string gets the default 1-hour duration 11260``` 11261 11262**Why This Matters**: 11263Events 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 11265**Example**: 11266``` 11267Super Bowl: 3:30 PM - 7:00 PM 11268Evening Service: 6:00 PM - ??? (should be 7:00 PM) 11269 11270If end_time = "" (empty string): 11271 Old code: Uses "" → conflict detection fails 11272 New code: Uses 7:00 PM → conflict detected ✓ 11273``` 11274 11275### Testing 11276If you're still not seeing the conflict on the 6:00 PM service: 112771. Check if the event has `end_time` set in the JSON 112782. Clear cache (Admin → Manage Events → Clear Cache) 112793. The conflict should now appear 11280 11281## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 11282 11283### ✨ Feature Added 11284- **Added:** Hover over ⚠ badge to see which events are conflicting 11285- **Added:** Tooltip shows conflicting event titles and times 11286- **Added:** Works in both sidebar sections and clicked day events 11287 11288### Technical Details 11289 11290**Conflict Tracking Enhanced**: 11291```php 11292// Now tracks WHICH events conflict: 11293$event['conflictingWith'] = [ 11294 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 11295 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 11296]; 11297``` 11298 11299**Tooltip Format**: 11300``` 11301Conflicts with: 11302• Meeting (10:00 AM-11:00 AM) 11303• Call (10:30 AM-11:30 PM) 11304``` 11305 11306**Where It Works**: 11307- ✅ Today section (sidebar) 11308- ✅ Tomorrow section (sidebar) 11309- ✅ Important Events section (sidebar) 11310- ✅ Clicked day events (week grid) 11311 11312**Cursor**: Changes to `help` cursor on hover to indicate tooltip 11313 11314### Note on Multi-Day Events 11315The 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 11317## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 11318 11319### Bug Fixes 11320- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 11321- **Fixed:** Important Events now shows events even if they're today or tomorrow 11322- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 11323 11324### Technical Details 11325 11326**Conflict Badge Issue**: 11327```php 11328// BROKEN (line 2511): 11329$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 11330// ↑ Checking 'conflicts' (plural) 11331 11332// But detectTimeConflicts() sets: 11333$event['conflict'] = true/false; 11334// ↑ Setting 'conflict' (singular) 11335 11336// FIXED: 11337$hasConflict = isset($event['conflict']) && $event['conflict']; 11338``` 11339 11340**Result**: Badge now shows for ALL conflicting events in sidebar sections 11341 11342**Important Events Logic Issue**: 11343```php 11344// BROKEN: 11345if ($dateKey === $todayStr) { 11346 $todayEvents[] = ...; 11347} elseif ($dateKey === $tomorrowStr) { 11348 $tomorrowEvents[] = ...; 11349} else { // ← Only checked if NOT today/tomorrow! 11350 if ($isImportant) { 11351 $importantEvents[] = ...; 11352 } 11353} 11354 11355// FIXED: 11356if ($dateKey === $todayStr) { 11357 $todayEvents[] = ...; 11358} 11359if ($dateKey === $tomorrowStr) { 11360 $tomorrowEvents[] = ...; 11361} 11362// ↑ Changed to separate 'if' statements 11363if ($isImportant && $dateKey in this week) { 11364 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 11365} 11366``` 11367 11368**Result**: Important namespace events now show in Important section even if they're today or tomorrow 11369 11370### Conflict Badge Display 11371- Simplified to just ⚠ icon (no count) 11372- Orange color (#ff9800) 11373- 10px font size 11374- Hover shows "Time conflict detected" 11375 11376## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 11377 11378### Bug Fix 11379- **Fixed:** Important Events section now displays all events correctly 11380- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 11381- **Fixed:** Conflict detection no longer causes events to disappear from Important section 11382 11383### Technical Details 11384 11385**The Problem**: 11386- `detectTimeConflicts()` returned early if only 1 event on a day 11387- Returned original array without adding 'conflict' field 11388- This inconsistency caused issues in event categorization 11389 11390**The Solution**: 11391```php 11392// Before (broken): 11393if (empty($dayEvents) || count($dayEvents) < 2) { 11394 return $dayEvents; // No 'conflict' field added! 11395} 11396 11397// After (fixed): 11398if (count($dayEvents) === 1) { 11399 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 11400} 11401``` 11402 11403**Result**: 11404- All events now have 'conflict' field consistently 11405- Single events: conflict = false 11406- Multiple events: conflict = true/false based on overlap 11407- Important Events section displays correctly 11408 11409## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 11410 11411### Bug Fixes 11412- **Fixed:** Conflict badge (⚠) now displays in clicked day events 11413- **Fixed:** Recurring events edit now updates time and end_time correctly 11414- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 11415 11416### ✨ Features Added 11417- **Added:** Time conflict detection for overlapping events 11418- **Added:** detectTimeConflicts() function checks all events on same day 11419- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 11420- **Added:** Events now have 'conflict' flag set automatically 11421 11422### UI Changes 11423- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 11424- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 11425- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 11426 11427### Technical Details 11428 11429**Conflict Detection**: 11430```php 11431// Automatically detects overlapping events on same day 11432// Sets 'conflict' flag to true if event overlaps with another 11433$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11434``` 11435 11436**Logic**: 11437- All-day events never conflict (no time set) 11438- Timed events check for overlap with other timed events 11439- Overlap = start1 < end2 AND start2 < end1 11440- Default duration is 60 minutes if no end_time 11441 11442**Recurring Events Fix**: 11443- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 11444- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 11445- Now edits actually save and update the events 11446 11447**Week View Bars**: 11448- Shows 4 colored bars instead of 3 11449- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 11450 11451## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 11452 11453**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 11454 11455### Major Features 11456 11457#### Sidebar Widget 11458- **Week Grid**: Interactive 7-day calendar with click-to-view events 11459- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 11460- **Live Clock**: Updates every second with date display 11461- **Real-time Weather**: Geolocation-based temperature with icon 11462- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 11463- **Add Event Button**: Dark green bar opens full event creation dialog 11464- **Matrix Theme**: Green glow effects throughout 11465 11466#### Event Management 11467- **Single Color Bars**: Clean 3px bars showing event's assigned color 11468- **All-Day Events First**: Then sorted chronologically by time 11469- **Conflict Detection**: Orange ⚠ badge on overlapping events 11470- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 11471- **HTML Rendering**: Pre-rendered for JavaScript display 11472- **Click-to-View**: Click week grid days to expand event details 11473 11474#### Admin Interface 11475- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 11476- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 11477- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 11478 11479#### Outlook Sync 11480- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 11481- **Category Mapping**: Map colors to Outlook categories 11482- **Conflict Resolution**: Time conflict detection 11483- **Import/Export Config**: Encrypted configuration files 11484 11485### Design 11486- **Matrix Theme**: Authentic green glow aesthetic 11487- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 11488- **Color Scheme**: 11489 - Today: Orange #ff9800 11490 - Tomorrow: Green #4caf50 11491 - Important: Purple #9b59b6 11492 - Add Event: Dark green #006400 11493 - System bars: Green/Purple/Orange 11494 11495### Technical Highlights 11496- **Zero-margin Design**: Perfect flush alignment throughout 11497- **Flexbox Layout**: Modern, responsive structure 11498- **AJAX Operations**: No page reloads needed 11499- **Smart Sorting**: All-day events first, then chronological 11500- **Tooltip System**: Detailed stats on hover (working correctly) 11501- **Event Dialog**: Full form with drag support 11502- **Cache Management**: One-click cache clearing 11503 11504### Breaking Changes from v3.x 11505- Removed dual color bars (now single event color bar only) 11506- Add Event button moved to between header and week grid 11507- All-day events now appear FIRST (not last) 11508- Update Plugin tab is now the default admin tab 11509 11510### Bug Fixes (v3.10.x → v4.0.0) 11511- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 11512- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 11513- ✅ Fixed weather display (added updateWeather function) 11514- ✅ Fixed HTML rendering in events (title_html/description_html fields) 11515- ✅ Fixed Add Event dialog (null check for calendar element) 11516- ✅ Fixed text positioning in Add Event button 11517- ✅ Fixed spacing throughout sidebar widget 11518 11519### Complete Feature List 11520- Full calendar view (month grid) 11521- Sidebar widget (week view) 11522- Event panel (standalone) 11523- Event list (date ranges) 11524- Namespace support 11525- Color coding 11526- Time conflict detection 11527- DokuWiki syntax in events 11528- Outlook synchronization 11529- System monitoring 11530- Weather display 11531- Live clock 11532- Admin interface 11533- Cache management 11534- Draggable dialogs 11535- AJAX save/edit/delete 11536- Import/export config 11537 11538### Usage 11539 11540**Sidebar Widget**: 11541``` 11542{{calendar sidebar}} 11543{{calendar sidebar namespace=team}} 11544``` 11545 11546**Full Calendar**: 11547``` 11548{{calendar}} 11549{{calendar year=2026 month=6 namespace=team}} 11550``` 11551 11552**Event Panel**: 11553``` 11554{{eventpanel}} 11555``` 11556 11557**Event List**: 11558``` 11559{{eventlist daterange=2026-01-01:2026-01-31}} 11560``` 11561 11562### Stats 11563- **40+ versions** developed during v3.x iterations 11564- **3.10.0 → 3.11.4**: Polish and refinement 11565- **4.0.0**: Production-ready Matrix Edition 11566 11567### Credits 11568Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 11569 11570--- 11571 11572## Previous Versions (v3.11.4 and earlier) 11573 11574## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 11575- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 11576- **Improved:** Small breathing room between system stats bars and Add Event button 11577- **Visual:** Better spacing for cleaner appearance 11578 11579### CSS Change: 11580**eventlist-today-header**: 11581- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 11582 11583### Visual Result: 11584``` 11585│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 11586│ │ ← 2px space (restored) 11587├───────────────────────┤ 11588│ + ADD EVENT │ ← Add Event bar 11589├───────────────────────┤ 11590``` 11591 11592**Before (v3.11.3)**: No space, bars directly touch Add Event button 11593**After (v3.11.4)**: 2px breathing room for better visual hierarchy 11594 11595## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 11596- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 11597- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 11598- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 11599- **Changed:** Line-height reduced from 12px to 10px for better text centering 11600- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 11601 11602### JavaScript Fix: 11603**Problem**: Line 1084-1085 in calendar-main.js 11604```javascript 11605const calendar = document.getElementById(calId); 11606const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 11607``` 11608 11609**Solution**: Added null check 11610```javascript 11611const calendar = document.getElementById(calId); 11612const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 11613``` 11614 11615**Why This Happened**: 11616- Regular calendar has element with id=calId 11617- Sidebar widget doesn't have this element (different structure) 11618- Code tried to read .dataset on null, causing error 11619 11620### Text Position Fix: 11621**Before**: 11622- line-height: 12px 11623- vertical-align: middle 11624- Text slightly low 11625 11626**After**: 11627- line-height: 10px 11628- position: relative; top: -1px 11629- Text perfectly centered 11630 11631### What Works Now: 11632✅ Click "+ ADD EVENT" in sidebar → Dialog opens 11633✅ No console errors 11634✅ Text properly centered vertically 11635✅ Form pre-filled with today's date 11636✅ Save works correctly 11637 11638## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 11639- **Added:** Event dialog to sidebar widget (same as regular calendar) 11640- **Changed:** Add Event button now opens proper event form dialog 11641- **Added:** renderEventDialog() called in renderSidebarWidget() 11642- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 11643- **Improved:** Can now add events directly from sidebar widget 11644 11645### Add Event Button Behavior: 11646**Before (v3.11.1)**: Showed alert with instructions 11647**After (v3.11.2)**: Opens full event creation dialog 11648 11649**Dialog Features**: 11650- Date field (defaults to today) 11651- Title field (required) 11652- Time field (optional) 11653- End time field (optional) 11654- Color picker 11655- Category field 11656- Description field 11657- Save and Cancel buttons 11658- Draggable dialog 11659 11660### Technical Changes: 11661- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 11662- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 11663- Dialog uses same structure as regular calendar 11664- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 11665 11666### User Flow: 116671. User clicks "+ ADD EVENT" green bar 116682. Event dialog opens with today's date pre-filled 116693. User fills in event details 116704. User clicks Save 116715. Event saved via AJAX 116726. Dialog closes 116737. Sidebar refreshes to show new event 11674 11675## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 11676- **Fixed:** Removed bottom padding from header (was 2px, now 0) 11677- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 11678- **Fixed:** Add Event bar now flush against header with zero gap 11679- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 11680- **Improved:** Alert provides clear instructions on how to add events 11681 11682### CSS Changes: 11683**eventlist-today-header**: 11684- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 11685 11686**eventlist-stats-container**: 11687- `margin-top: 2px` → `margin: 0` (removed all margins) 11688 11689### Add Event Button Behavior: 11690**Before**: Clicked → Navigated to Admin → Manage Events tab 11691**After**: Clicked → Shows alert with instructions 11692 11693**Alert Message**: 11694``` 11695To add an event, go to: 11696Admin → Calendar Management → Manage Events tab 11697or use the full calendar view {{calendar}} 11698``` 11699 11700### Visual Result: 11701``` 11702│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 11703├────────────────────────┤ 11704│ + ADD EVENT │ ← Perfectly flush! 11705├────────────────────────┤ 11706``` 11707 11708No gaps, perfectly aligned! 11709 11710## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 11711- **Moved:** Add Event bar back to original position (between header and week grid) 11712- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 11713- **Changed:** Letter spacing reduced from 0.5px to 0.4px 11714- **Fixed:** Text now fully visible without being cut off 11715- **Final:** Optimal position and size determined 11716 11717### Final Layout: 11718``` 11719┌─────────────────────────────┐ 11720│ Clock | Weather | Stats │ ← Header 11721├─────────────────────────────┤ 11722│ + ADD EVENT │ ← Bar (back here, smaller text) 11723├─────────────────────────────┤ 11724│ M T W T F S S │ ← Week Grid 11725│ 3 4 5 6 7 8 9 │ 11726├─────────────────────────────┤ 11727│ Today │ ← Event sections 11728└─────────────────────────────┘ 11729``` 11730 11731### Text Size Changes: 11732**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 11733**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 11734 11735### Why This Position: 11736- Separates header from calendar 11737- Natural action point after viewing stats 11738- Users see stats → decide to add event → view calendar 11739- Consistent with original design intent 11740 11741## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 11742- **Moved:** Add Event bar repositioned from between header/grid to below week grid 11743- **Improved:** Better visual flow - header → stats → grid → add button → events 11744- **Changed:** Add Event bar now acts as separator between calendar and event sections 11745 11746### New Layout: 11747``` 11748┌─────────────────────────────┐ 11749│ Clock | Weather | Stats │ ← Header 11750├─────────────────────────────┤ 11751│ M T W T F S S │ ← Week Grid 11752│ 3 4 5 6 7 8 9 │ 11753├─────────────────────────────┤ 11754│ + ADD EVENT │ ← Add bar (moved here!) 11755├─────────────────────────────┤ 11756│ Today │ ← Event sections 11757│ Tomorrow │ 11758│ Important Events │ 11759└─────────────────────────────┘ 11760``` 11761 11762### Visual Flow: 11763**Before (v3.10.8)**: 117641. Header (clock, weather, stats) 117652. **+ ADD EVENT** bar 117663. Week grid 117674. Event sections 11768 11769**After (v3.10.9)**: 117701. Header (clock, weather, stats) 117712. Week grid (calendar days) 117723. **+ ADD EVENT** bar 117734. Event sections 11774 11775### Benefits: 11776- Natural reading flow: View calendar → Add event → See events 11777- Add button positioned between calendar and event list 11778- Acts as visual separator 11779- More logical action placement 11780 11781## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 11782- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 11783- **Changed:** Events now display with single 3px color bar (event's assigned color only) 11784- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 11785- **Simplified:** Cleaner visual with one color bar instead of two 11786- **Improved:** More space for event content without extra bar 11787 11788### Visual Changes: 11789 11790**Before (v3.10.7)** - Dual color bars: 11791``` 11792├─ [Orange][Green] Event Title 11793├─ [Blue][Purple] Event Title 11794``` 11795 11796**After (v3.10.8)** - Single color bar: 11797``` 11798├─ [Green] Event Title ← Only event color! 11799├─ [Purple] Event Title ← Only event color! 11800``` 11801 11802### Add Bar Changes: 11803- Added `margin:0` to eliminate gaps 11804- Now flush against header (no space above) 11805- Now flush against week grid (no space below) 11806- Perfect seamless connection 11807 11808### Technical Changes: 11809**renderSidebarEvent()**: 11810- Removed section color bar (4px) 11811- Kept only event color bar (3px) 11812 11813**showDayEvents() JavaScript**: 11814- Removed section color bar (4px blue) 11815- Kept only event color bar (3px) 11816 11817**Add Event bar**: 11818- Added `margin:0` inline style 11819- Removed all top/bottom margins 11820 11821## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 11822- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 11823- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 11824- **Changed:** Add Event bar color from orange to dark green (#006400) 11825- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 11826- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 11827- **Changed:** Add Event bar font size increased from 7px to 9px 11828- **Changed:** Add Event bar letter spacing increased to 0.5px 11829- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 11830 11831### Color Bar Fix Details: 11832**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 11833**Solution**: Applied same fix as clicked day events: 11834- Changed parent div: `align-items:start` → `align-items:stretch` 11835- Added `min-height:20px` to parent 11836- Changed bars: `height:100%` → `align-self:stretch` 11837- Bars now properly fill vertical space in ALL sections 11838 11839### Add Event Bar Changes: 11840**Before**: 11841- Background: Orange (#ff9800) 11842- Text: Black (#000) 11843- Height: 6px (text cut off) 11844- Font: 7px 11845 11846**After**: 11847- Background: Dark green (#006400) 11848- Text: Bright green (#00ff00) with green glow 11849- Height: 12px (text fully visible) 11850- Font: 9px 11851- Hover: Darker green (#004d00) 11852- Matrix-themed green aesthetic 11853 11854## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 11855- **Fixed:** Event color bars now display correctly in clicked day events 11856- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 11857- **Added:** Conflict badge (⚠) appears on right side of conflicting events 11858- **Updated:** Complete README.md rewrite with full Matrix theme documentation 11859- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 11860- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 11861- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 11862 11863### Color Bar Fix: 11864**Problem**: Bars had `height:100%` but parent had no explicit height 11865**Solution**: 11866- Changed to `align-self:stretch` on bars 11867- Parent uses `align-items:stretch` 11868- Added `min-height:20px` to parent 11869- Bars now properly fill vertical space 11870 11871### Sorting Change: 11872**Before**: Timed events first → All-day events last 11873**After**: All-day events FIRST → Timed events chronologically 11874 11875**Example**: 11876``` 11877Monday, Feb 5 11878├─ All Day - Project Deadline ← All-day first 11879├─ 8:00 AM - Morning Standup ← Earliest time 11880├─ 10:30 AM - Coffee with Bob 11881└─ 2:00 PM - Team Meeting ← Latest time 11882``` 11883 11884### Conflict Badge: 11885- Orange warning triangle (⚠) on right side 11886- 10px font size 11887- Only appears if `event.conflict` is true 11888- Title attribute shows "Time conflict detected" 11889- Small and unobtrusive 11890 11891### README Update: 11892- Complete rewrite with Matrix theme focus 11893- Full usage instructions for all features 11894- Admin interface documentation 11895- Outlook sync setup guide 11896- System monitoring details 11897- Troubleshooting section 11898- Color scheme reference 11899- File structure documentation 11900- Performance tips 11901- Security notes 11902- Quick start examples 11903 11904## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 11905- **Added:** Events now sorted by time when clicking week grid days 11906- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 11907- **Improved:** Events with times appear first, sorted chronologically 11908- **Improved:** All-day events appear after timed events 11909- **Changed:** Add Event bar font size reduced to 7px (from 10px) 11910- **Changed:** Add Event bar now has 0 padding and fixed 6px height 11911 11912### Sorting Logic: 11913- Events with times sorted by time (earliest first) 11914- All-day events (no time) appear at the end 11915- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 11916- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 11917 11918### Add Event Bar Changes: 11919- **Height**: 6px (was ~12px with padding) 11920- **Padding**: 0 (was 4px top/bottom) 11921- **Font Size**: 7px (was 10px) 11922- **Letter Spacing**: 0.3px (was 0.5px) 11923- **Line Height**: 6px to match height 11924- **Vertical Align**: Middle for text centering 11925 11926## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 11927- **Added:** Thin orange "Add Event" bar between header and week grid 11928- **Added:** Quick access to event creation from sidebar widget 11929- **Styled:** Sleek design with hover effects and glow 11930- **Interactive:** Clicks navigate to Manage Events tab in admin 11931- **Improved:** User workflow for adding events from sidebar 11932 11933### Visual Design: 11934- Orange background (#ff9800) matching Today section color 11935- 4px top/bottom padding for thin, sleek appearance 11936- Black text with white text-shadow for visibility 11937- Hover effect: Darkens to #ff7700 with enhanced glow 11938- Orange glow effect (box-shadow) matching Matrix theme 11939- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 11940 11941### Technical Changes: 11942- Added between header close and renderWeekGrid() call 11943- Inline onclick handler navigates to admin manage tab 11944- Inline onmouseover/onmouseout for hover effects 11945- Smooth 0.2s transition on all style changes 11946 11947## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 11948- **Changed:** Update Plugin tab is now the default tab when opening admin 11949- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 11950- **Improved:** Clear Cache button now larger and more prominent with helpful description 11951- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 11952- **Removed:** Debug console.log statements from day event display 11953- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 11954 11955### UI Changes: 11956- Update Plugin tab opens by default (was Config/Outlook Sync tab) 11957- Clear Cache button prominently displayed at top of Update Plugin tab 11958- Orange ️ button (10px 20px padding) with confirmation dialog 11959- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 11960- Success/error messages display on Update Plugin tab after cache clear 11961- Tab navigation reordered to put Update first 11962 11963### Technical Changes: 11964- Default tab changed from 'config' to 'update' in html() method 11965- Tab navigation HTML reordered to show Update Plugin tab first 11966- clearCache() method now redirects with 'update' tab parameter 11967- Removed Clear Cache button from renderConfigTab() 11968- Added Clear Cache button to renderUpdateTab() with message display 11969 11970## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 11971- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 11972- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 11973- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 11974- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 11975 11976### Technical Changes: 11977- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 11978- Events added to weekEvents now include pre-rendered HTML versions 11979- title_html and description_html fields populated before json_encode() 11980- JavaScript now receives properly formatted HTML content 11981 11982## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 11983- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 11984- **Fixed:** HTML event handlers now call correctly sanitized function names 11985- **Fixed:** Weather temperature now updates correctly in sidebar widget 11986- **Added:** Weather update function to sidebar widget JavaScript 11987- **Added:** "Clear Cache" button in admin panel for easy cache refresh 11988- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 11989- **Improved:** All tooltip functions now work correctly on system status bars 11990 11991### Technical Changes: 11992- Changed tooltip function names to use $jsCalId instead of $calId 11993- Changed HTML onmouseover/onmouseout to use $jsCalId 11994- Added updateWeather() function to sidebar widget 11995- Added getWeatherIcon() function to sidebar widget 11996- Added clearCache() method in admin.php 11997- Added recursiveDelete() helper method in admin.php 11998- Admin UI now has ️ Clear Cache button alongside Export/Import 11999 12000## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 12001- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 12002- **Fixed:** Event links and formatting not displaying in clicked day events 12003- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 12004- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 12005- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 12006- **Improved:** All JavaScript variable names now use valid syntax 12007- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 12008 12009### Technical Changes: 12010- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 12011- JavaScript variables now use underscores instead of dashes 12012- Event HTML rendering preserves DokuWiki formatting 12013- Fixed "showTooltip_sidebar is not defined" errors 12014- Fixed "showDayEvents_cal is not defined" errors 12015 12016## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 12017- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 12018- **Fixed:** Functions now defined BEFORE HTML that uses them 12019- **Changed:** Consolidated all JavaScript into single comprehensive script block 12020- **Removed:** ~290 lines of duplicate JavaScript code 12021- **Added:** Shared state management with `sharedState_[calId]` object 12022- **Improved:** System tooltip functions now work correctly 12023- **Improved:** Week grid click events now work correctly 12024 12025### Technical Changes: 12026- Moved all JavaScript to beginning of widget (before HTML) 12027- Removed duplicate script blocks 12028- Unified tooltip and stats functions 12029- Shared latestStats and cpuHistory state 12030- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 12031 12032## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 12033- **Added:** Dual color bars on events (section color + event color) 12034- **Added:** Click week grid days to view events (replaced hover tooltips) 12035- **Added:** Expandable section below week grid for selected day events 12036- **Added:** Blue theme for selected day section 12037- **Changed:** Week grid days now clickable instead of tooltips 12038- **Changed:** Section bar: 4px wide (left) 12039- **Changed:** Event bar: 3px wide (right) 12040- **Increased:** Gap between color bars from 3px to 6px 12041- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 12042 12043### Visual Changes: 12044- Each event shows TWO color bars side-by-side 12045- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 12046- Right bar (3px): Individual event's assigned color 12047- Click any day in week grid to expand event list 12048- X button to close selected day events 12049 12050## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 12051- **Increased:** Event color bar width from 2px to 3px 12052- **Increased:** Gap between section and event bars from 3px to 6px 12053- **Improved:** Event color bars now more visible alongside section bars 12054- **Note:** Dual color bar system already in place from v3.9.6 12055 12056## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 12057- **Changed:** Date in Important Events moved below event name (was above) 12058- **Changed:** Section headers now 9px font size (was 10px) 12059- **Changed:** Section headers now normal case (was ALL CAPS) 12060- **Changed:** Letter spacing reduced from 0.8px to 0.3px 12061- **Improved:** More natural reading flow with date below event name 12062- **Improved:** Cleaner, more subtle section headers 12063 12064### Header Changes: 12065- "TODAY" → "Today" 12066- "TOMORROW" → "Tomorrow" 12067- "IMPORTANT EVENTS" → "Important Events" 12068 12069## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 12070- **Redesigned:** Complete overhaul of `sidebar` parameter 12071- **Added:** Compact week-at-a-glance itinerary view (200px wide) 12072- **Added:** Live clock widget at top of sidebar 12073- **Added:** 7-cell week grid showing event bars 12074- **Added:** Today section with orange header and left border 12075- **Added:** Tomorrow section with green header and left border 12076- **Added:** Important Events section with purple header and left border 12077- **Added:** Admin setting to configure important namespaces 12078- **Added:** Time conflict badges in sidebar events 12079- **Added:** Task checkboxes in sidebar events 12080- **Changed:** Sidebar now optimized for narrow spaces (200px) 12081- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 12082 12083### New Features: 12084- Clock updates every second showing current time 12085- Week grid shows Mon-Sun with colored event bars 12086- Today/Tomorrow sections show full event details 12087- Important events highlighted in purple (configurable namespaces) 12088- All badges (conflict, time, etc.) shown in compact format 12089- Automatic time conflict detection 12090 12091## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 12092- **Removed:** 16 unused/debug/backup files 12093- **Removed:** 69 console.log() debug statements 12094- **Removed:** 3 orphaned object literals from console.log removal 12095- **Removed:** Temporary comments and markers 12096- **Fixed:** JavaScript syntax errors from cleanup 12097- **Improved:** Code quality and maintainability 12098- **Improved:** Reduced plugin size by removing unnecessary files 12099- **Status:** Production-ready, fully cleaned codebase 12100 12101### Files Removed: 12102- style.css.backup, script.js.backup 12103- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 12104- debug_events.php, debug_html.php, cleanup_events.php 12105- fix_corrupted_json.php, fix_wildcard_namespaces.php 12106- find_outlook_duplicates.php, update_namespace.php 12107- validate_calendar_json.php, admin.js 12108- test_date_field.html 12109 12110## Version 3.7.5 (2026-02-05) 12111- **Fixed:** PHP syntax error (duplicate foreach loop removed) 12112- **Fixed:** Time variable handling in grace period logic 12113 12114## Version 3.7.4 (2026-02-05) 12115- **Added:** 15-minute grace period for timed events 12116- **Changed:** Events with times now stay visible for 15 minutes after their start time 12117- **Changed:** Prevents events from immediately disappearing when they start 12118- **Improved:** Better user experience for ongoing events 12119- **Fixed:** Events from earlier today now properly handled with grace period 12120 12121## Version 3.7.3 (2026-02-05) 12122- **Changed:** Complete redesign of cleanup section for compact, sleek layout 12123- **Changed:** Radio buttons now in single row at top 12124- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 12125- **Changed:** Inline controls - no more grid layout or wrapper boxes 12126- **Changed:** Namespace filter now compact single-line input 12127- **Changed:** Smaller buttons and tighter spacing throughout 12128- **Improved:** More professional, space-efficient design 12129 12130## Version 3.7.2 (2026-02-04) 12131- **Fixed:** Strange boxes under cleanup options - now properly hidden 12132- **Changed:** Unified color scheme across all admin sections 12133- **Changed:** Green (#00cc07) - Primary actions and main theme 12134- **Changed:** Orange (#ff9800) - Warnings and cleanup features 12135- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 12136- **Improved:** Consistent visual design throughout admin interface 12137 12138## Version 3.7.1 (2026-02-04) 12139- **Fixed:** Cleanup section background changed from orange to white 12140- **Fixed:** Event cleanup now properly scans all calendar directories 12141- **Added:** Debug info display when preview finds no events 12142- **Improved:** Better directory scanning logic matching other features 12143 12144## Version 3.7.0 (2026-02-04) 12145- **Added:** Event cleanup feature in Events Manager 12146- **Added:** Delete old events by age (months/years old) 12147- **Added:** Delete events by status (completed tasks, past events) 12148- **Added:** Delete events by date range 12149- **Added:** Namespace filter for targeted cleanup 12150- **Added:** Preview function to see what will be deleted 12151- **Added:** Automatic backup creation before cleanup 12152- **Changed:** Reduced changelog viewer height to 100px (was 400px) 12153 12154## Version 3.6.3 (2026-02-04) 12155- **Fixed:** Conflict tooltips now work properly after navigating between months 12156- **Added:** Changelog display in Update Plugin tab 12157- **Added:** CHANGELOG.md file with version history 12158- **Improved:** Changelog shows last 10 versions with color-coded change types 12159- **Fixed:** Removed debug console.log statements 12160 12161## Version 3.6.2 (2026-02-04) 12162- **Fixed:** Month title now updates correctly when navigating between months 12163- **Changed:** All eventpanel header elements reduced by 10% for more compact design 12164- **Changed:** Reduced header height from 78px to 70px 12165 12166## Version 3.6.1 (2026-02-04) 12167- **Changed:** Complete redesign of eventpanel header with practical two-row layout 12168- **Fixed:** Improved layout for narrow widths (~500px) 12169- **Changed:** Simplified color scheme (removed purple gradient) 12170 12171## Version 3.6.0 (2026-02-04) 12172- **Changed:** Redesigned eventpanel header with gradient background 12173- **Changed:** Consolidated multiple header rows into compact single-row design 12174 12175## Version 3.5.1 (2026-02-04) 12176- **Changed:** Moved event search bar into header row next to + Add button 12177- **Improved:** More compact UI with search integrated into header 12178 12179## Version 3.5.0 (2026-02-04) 12180- **Added:** Event search functionality in sidebar and eventpanel 12181- **Added:** Real-time filtering as you type 12182- **Added:** Clear button (✕) appears when searching 12183- **Added:** "No results" message when search returns nothing 12184 12185## Version 3.4.7 (2026-02-04) 12186- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 12187- **Fixed:** Removed debug logging from console 12188- **Changed:** Updated export version number to match plugin version 12189 12190## Version 3.4.6 (2026-02-04) 12191- **Added:** Debug logging to diagnose conflict detection issues 12192- **Development:** Extensive console logging for troubleshooting 12193 12194## Version 3.4.5 (2026-02-04) 12195- **Added:** Debug logging to showDayPopup and conflict detection 12196- **Development:** Added logging to trace conflict detection flow 12197 12198## Version 3.4.4 (2026-02-04) 12199- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 12200- **Fixed:** Conflict tooltips now appear on hover 12201- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 12202- **Added:** Conflict badges in both future and past events sections 12203 12204## Version 3.4.3 (2026-02-04) 12205- **Added:** Custom styled conflict tooltips with hover functionality 12206- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 12207- **Improved:** Beautiful tooltip design with orange header and clean formatting 12208 12209## Version 3.4.2 (2026-02-04) 12210- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 12211 12212## Version 3.4.1 (2026-02-04) 12213- **Fixed:** End time field now properly saves to database 12214- **Fixed:** End time dropdown now filters to show only valid times after start time 12215- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 12216- **Improved:** End time auto-suggests +1 hour when start time selected 12217 12218## Version 3.4.0 (2026-02-04) 12219- **Added:** End time support for events (start and end times) 12220- **Added:** Automatic time conflict detection 12221- **Added:** Conflict warning badges (⚠️) on events with overlapping times 12222- **Added:** Conflict tooltips showing which events conflict 12223- **Added:** Visual conflict indicators with pulse animation 12224- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 12225 12226## Version 3.3.77 (2026-02-04) 12227- **Fixed:** Namespace badge onclick handlers restored after clearing filter 12228- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 12229 12230## Version 3.3.76 (2026-02-04) 12231- **Fixed:** Namespace badges now clickable after clearing namespace filter 12232 12233## Version 3.3.75 (2026-02-04) 12234- **Fixed:** Form resubmission warnings eliminated 12235- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 12236- **Changed:** All admin redirects now use absolute URLs 12237 12238## Version 3.3.74 (2026-02-04) 12239- **Fixed:** Clearing namespace filter now restores original namespace instead of default 12240- **Added:** data-original-namespace attribute to preserve initial namespace setting 12241- **Improved:** Console logging for namespace filter debugging 12242 12243## Version 3.3.73 (2026-02-03) 12244- **Added:** Dynamic namespace filtering banner with clear button 12245- **Fixed:** JavaScript function accessibility issues 12246- **Fixed:** Namespace badge click handlers in event lists 12247- **Improved:** Persistent namespace filtering across views 12248 12249## Earlier Versions 12250See previous transcripts for complete history through v3.3.73, including: 12251- Recurring events with Outlook sync 12252- Multi-namespace support 12253- Event categories and mapping 12254- Backup/restore functionality 12255- System statistics bar 12256- Namespace selector with fuzzy search 12257- Events Manager with import/export 12258- And much more... 12259