1# Calendar Plugin Changelog 2## Version 6.0.3 (2026-02-09) - MOVE IMPORTANT NAMESPACES TO MANAGE TAB 3 4- **Moved:** Important Namespaces section from Outlook Sync tab to Manage Events tab (between Events Manager and Cleanup sections) 5- **Changed:** Section header color from purple (#9b59b6) to green (#00cc07) to match other Manage tab sections 6- **Added:** Dedicated Save button and `save_important_namespaces` action handler — setting is now independent of Outlook config save 7- **Fixed:** Saving Outlook config no longer overwrites important namespaces with the default value 8 9## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 10 11- **Fixed:** In Firefox, the SMTWTFS day-of-week header row was rendering at the same height as calendar day cells (58px instead of 22px). Firefox ignores `max-height` on `<th>` table cells per CSS spec. Replaced `<thead><tr><th>` with a CSS grid `<div>` outside the table, making header height fully independent of table cell sizing. Works consistently across Chrome, Firefox, Safari, and Edge. 12 13## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 14 15- **Fixed:** `theme=wiki` (and all `theme=` parameters) had no effect — all three render functions (`renderCompactCalendar`, `renderEventPanelOnly`, `renderSidebarWidget`) were ignoring the syntax parameter and always reading the admin global default via `getSidebarTheme()` 16- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 17- **How it works now:** `{{calendar theme=wiki}}`, `{{eventlist sidebar theme=purple}}`, `{{eventpanel theme=professional}}` all correctly apply the specified theme. The admin-configured default is used as fallback only when no `theme=` parameter is present. 18 19 20## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 21 22- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 23- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 24- **Audited:** style.css (3,218 lines) — balanced braces confirmed 25- **Audited:** All admin manage tab action handlers verified functional (13 actions) 26- **New:** Fresh README.md for GitHub with complete documentation 27- **Includes all v5.5.x fixes:** 28 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 29 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 30 - Conflict badges on past events after AJAX navigation 31 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 32 33## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 34 35- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 36- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 37- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 38- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 39- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 40- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 41- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 42- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 43- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 44- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 45- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 46- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 47- **Removed:** Stale "NEW!" comment from Events Manager section 48 49## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 50 51- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 52- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 53- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 54- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 55- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 56- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 57- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 58- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 59- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 60- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 61 62## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 63 64- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 65- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 66- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 67- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 68- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 69- **Changed:** Week grid JS theme colors now use actual $themeStyles values 70 71## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 72 73- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 74 75## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 76 77- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 78- **Fixed:** Week grid conflict tooltips also fixed (same issue) 79- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 80- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 81 82## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 83 84- **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) 85 86## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 87 88- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 89- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 90 91## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 92 93- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 94- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 95- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 96- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 97 98## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 99 100- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 101- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 102- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 103- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 104- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 105- **Added:** ESC key now also closes day popups and conflict tooltips 106- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 107 108## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 109 110- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 111- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 112- **Refactored:** style.css is now the single source of truth for all visual styling 113- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 114- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 115- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 116- **Added:** CSS variable injection for {{eventlist panel}} containers 117- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 118- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 119- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 120- **Added:** Detailed CSS variable reference table in style.css header comment 121- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 122- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 123- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 124- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 125- **Removed:** $isWikiTheme branching from PHP render path 126 127## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 128 129### Added: Hearts in Explosions! 130- **Added:** 8-12 pink hearts in each click explosion 131- **Added:** Random sizes (12-28px) and directions 132- **Result:** Extra love in every click! 133 134### Fixed: Background CSS Property for Dark Mode Readers 135- **Fixed:** Added `background: transparent` to CSS (was completely removed) 136- **Fixed:** Now CSS readers can detect and modify background property 137- **Why:** Inline styles override transparent, but CSS readers can now see the property 138- **Result:** Dark mode plugins can now change calendar backgrounds! 139 140### The CSS Problem 141 142**Why backgrounds weren't changing with dark mode readers**: 143 144**Before (v5.3.5)**: 145```css 146.calendar-compact-grid tbody td { 147 /* background removed - set via inline style */ 148 border: 1px solid... 149} 150``` 151 152**Problem**: CSS property doesn't exist! 153- Dark mode readers look for `background` property in CSS 154- Can't override what doesn't exist 155- Inline styles work, but readers can't modify them 156 157**After (v5.3.6)**: 158```css 159.calendar-compact-grid tbody td { 160 background: transparent; /* Now exists! */ 161 border: 1px solid... 162} 163``` 164 165**Solution**: 166- Property exists in CSS 167- Dark mode readers can override it 168- Inline styles still override transparent 169- Everyone wins! 170 171### What's Fixed 172 173**Elements now have background property**: 174- `.calendar-compact-grid tbody td` ✓ 175- `.calendar-compact-grid tbody td:hover` ✓ 176- `.event-compact-item` ✓ 177- `.event-compact-item:hover` ✓ 178 179**How it works**: 1801. CSS sets `background: transparent` (default) 1812. Inline styles set actual color (overrides transparent) 1823. Dark mode readers can override CSS property 1834. Works for everyone! 184 185### Hearts in Explosion 186 187**Click anywhere → Hearts explode!** 188 189**Heart details**: 190- Count: 8-12 per explosion (random) 191- Size: 12-28px (random variety) 192- Emoji: (pink heart) 193- Direction: Random 360° 194- Speed: 60-140px travel 195- Duration: 0.8-1.2s 196- z-index: 9999999 (always visible) 197 198**Combined with**: 199- 25 glowing particles 200- 40 pixel sparkles 201- Bright flash 202- **Total: 73-77 elements!** 203 204### Visual Result 205 206**Click explosion**: 207``` 208 ✦ • ✦ 209 • • 210✦ • ! • ✦ 211 • • 212 ✦ • ✦ 213 214Hearts + Particles + Pixels! 215``` 216 217**Dark mode now works**: 218```css 219/* Dark mode reader can now do this: */ 220.calendar-compact-grid tbody td { 221 background: #000 !important; /* Works! */ 222} 223``` 224 225### Why Transparent Works 226 227**CSS Cascade**: 2281. CSS: `background: transparent` (lowest priority) 2292. Inline style: `background: #f5f5f5` (overrides CSS) 2303. Dark mode CSS: `background: #000 !important` (overrides inline) 231 232**Perfect solution!** ✓ 233 234## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 235 236### Fixed: Particles Now Appear Above All Dialogs! 237- **Fixed:** Increased z-index to 9999999 for all particles 238- **Fixed:** Particles now visible above event dialogs, month picker, etc. 239- **Result:** Cursor effects and explosions always visible! 240 241### The Z-Index Problem 242 243**Before (v5.3.4)**: 244- Particles: z-index 9999 245- Dialogs: z-index 10000-999999 246- **Particles hidden behind dialogs!** 247 248**After (v5.3.5)**: 249- Particles: z-index 9999999 250- Trail: z-index 9999998 251- Pixels: z-index 9999997 252- **Particles ALWAYS on top!** 253 254### What's Fixed 255 256✅ **Main particles** (explosion orbs) 257✅ **Cursor trail** (glowing dots) 258✅ **Pixel sparkles** (tiny bright stars) 259✅ **Flash effect** (click burst) 260 261**All now appear above**: 262- Event dialog popups 263- Month picker 264- Day popups 265- Any modal overlays 266 267### Visual Result 268 269**Moving cursor over dialog**: 270``` 271┌─────────────────────┐ 272│ Event Dialog │ 273│ ✦ • ✦ │ ← Sparkles visible! 274│ → ✦ │ ← Cursor trail visible! 275│ • ✦ • │ 276└─────────────────────┘ 277``` 278 279**Clicking on dialog**: 280``` 281┌─────────────────────┐ 282│ ✦ • ✦ • ✦ │ 283│ • ! • │ ← Explosion visible! 284│ ✦ • ✦ • ✦ │ 285└─────────────────────┘ 286``` 287 288**Perfect visibility everywhere!** ✨ 289 290## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 291 292### Fixed: Month Picker Now Themed! 293- **Fixed:** Jump to Month dialog now uses theme colors 294- **Fixed:** Dialog background, borders, text all themed 295- **Fixed:** Select dropdowns use theme colors 296- **Fixed:** Buttons use theme accent colors 297- **Result:** Month picker matches calendar theme! 298 299### Fixed: Cursor Effects Work in Dialogs! 300- **Fixed:** Cursor trail now works when hovering over dialogs 301- **Fixed:** Click explosions work when clicking inside dialogs 302- **Technical:** Changed to capture phase event listeners 303- **Result:** Effects work EVERYWHERE now! 304 305### Month Picker Theming 306 307**Before (v5.3.3)**: 308- White background (hardcoded) 309- Black text (hardcoded) 310- No theme integration 311- Looked out of place 312 313**After (v5.3.4)**: 314- Dialog background: `theme.bg` 315- Dialog border: `theme.border` 316- Text color: `theme.text_primary` 317- Dropdowns: `theme.cell_bg` + `theme.text_primary` 318- Cancel button: `theme.cell_bg` 319- Go button: `theme.border` (accent color) 320 321**Fully integrated!** ✅ 322 323--- 324 325### Theme Examples 326 327**Matrix Theme**: 328``` 329┌─────────────────────────┐ 330│ Jump to Month │ ← Dark bg, green border 331│ [February ▼] [2026 ▼] │ ← Dark dropdowns 332│ [Cancel] [Go] │ ← Green "Go" button 333└─────────────────────────┘ 334``` 335 336**Pink Theme**: 337``` 338┌─────────────────────────┐ 339│ Jump to Month │ ← Dark bg, pink border 340│ [February ▼] [2026 ▼] │ ← Dark dropdowns 341│ [Cancel] [Go] │ ← Pink "Go" button 342└─────────────────────────┘ 343With sparkle effects! ✨ 344``` 345 346**Professional Theme**: 347``` 348┌─────────────────────────┐ 349│ Jump to Month │ ← Clean bg, blue border 350│ [February ▼] [2026 ▼] │ ← Clean dropdowns 351│ [Cancel] [Go] │ ← Blue "Go" button 352└─────────────────────────┘ 353``` 354 355--- 356 357### Dialog Cursor Fix 358 359**The Problem**: 360Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 361 362**The Solution**: 363Use **capture phase** event listeners: 364```javascript 365// Before (bubbling phase) 366document.addEventListener('click', handler) 367 368// After (capture phase) 369document.addEventListener('click', handler, true) 370 ↑ 371 Capture phase! 372``` 373 374**Capture phase runs BEFORE stopPropagation!** 375 376--- 377 378### Now Works Everywhere 379 380✅ **Calendar area** 381✅ **Event dialogs** 382✅ **Month picker dialog** 383✅ **Day popup dialogs** 384✅ **Anywhere on screen** 385 386**No more blocked effects!** 387 388--- 389 390### Technical Details 391 392**Event phases**: 393``` 3941. Capture phase ← We listen here now! 3952. Target phase 3963. Bubbling phase ← stopPropagation blocks this 397``` 398 399**By using capture phase**: 400- Events caught before stopPropagation 401- Works in all dialogs 402- No conflicts with dialog logic 403 404--- 405 406### All Dialogs Checked 407 408✅ **Month picker** - Now themed! 409✅ **Event dialog** - Already themed 410✅ **Day popup** - Already themed 411 412**Everything consistent!** 413 414--- 415 416## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 417 418### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 419- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 420- **Added:** 40 pixel sparkles in click explosions 421- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 422- **Result:** Maximum sparkle effect! 423 424### Tiny Pixel Sparkles 425 426**3-6 tiny bright pixels appear with each cursor movement!** 427 428**Characteristics**: 429- Size: 1-2px (single pixel appearance!) 430- Colors: Bright neon whites and pinks 431 - Pure white (#fff) - 40% chance 432 - Hot pink (#ff1493) 433 - Pink (#ff69b4) 434 - Light pink (#ffb6c1) 435 - Soft pink (#ff85c1) 436- Glow: Triple-layer shadow (intense!) 437- Spawn: Random 30px radius around cursor 438- Animations: 439 - 50% twinkle in place 440 - 50% float upward 441 442**Creates a cloud of sparkles around your cursor!** 443 444--- 445 446### Click Explosion Enhanced 447 448**Now with 40 EXTRA pixel sparkles!** 449 450**Click anywhere → BIG BOOM**: 451- 25 main glowing particles (6-10px) 452- **40 tiny pixel sparkles (1-2px)** ← NEW! 453- Bright white flash 454- Total: 65+ visual elements! 455 456**Pixel sparkles in explosion**: 457- Shoot outward in all directions 458- Random distances (30-110px) 459- Multiple bright colors 460- Some twinkle, some explode 461- Creates stellar effect! 462 463--- 464 465### Entire Screen Coverage 466 467**Effects now work EVERYWHERE!** 468 469**Before (v5.3.2)**: 470- Only inside calendar viewport 471- Limited to calendar area 472 473**After (v5.3.3)**: 474- Works on entire screen! ✓ 475- Cursor trail follows everywhere 476- Click explosions anywhere 477- Used `position: fixed` + `clientX/Y` 478 479**Move anywhere on the page for sparkles!** 480 481--- 482 483### Visual Effect 484 485**Cursor movement**: 486``` 487 • ✦ • ← Tiny pixels 488 • ✦ • ← Glowing trail 489✦ • → • ✦ ← Cursor 490 • ✦ • ← Mixed sizes 491 • ✦ • ← Sparkle cloud 492``` 493 494**Click explosion**: 495``` 496 ✦ • ✦ • ✦ 497 ✦ • • ✦ 498✦ • ! • ✦ 499 ✦ • • ✦ 500 ✦ • ✦ • ✦ 501 50265+ particles total! 503``` 504 505--- 506 507### Sparkle Details 508 509**Trail Pixels** (3-6 per movement): 510- Size: 1-2px 511- Spawn rate: Every 40ms 512- Spread: 30px radius 513- Duration: 0.6-0.8s 514- 50% twinkle, 50% float 515 516**Explosion Pixels** (40 total): 517- Size: 1-3px 518- Spread: 30-110px radius 519- Duration: 0.4-0.8s 520- All directions 521- Intense glow 522 523**Main Particles** (25 total): 524- Size: 4-10px 525- Spread: 50-150px 526- Full color palette 527- Original firework effect 528 529--- 530 531### Color Distribution 532 533**Pixel sparkles favor white**: 534- 40% pure white (#fff) - brightest! 535- 60% pink shades - variety 536 537**Creates brilliant sparkle effect!** 538 539--- 540 541### Performance 542 543**Still optimized**: 544- Trail: 30ms throttle 545- Pixels: 40ms throttle 546- Auto-cleanup 547- Hardware accelerated 548- Smooth 60fps 549 550**Lots of sparkles, zero lag!** 551 552--- 553 554### Full-Screen Magic 555 556**Pink theme calendar detected**: 557```javascript 558if (pink calendar exists) { 559 Enable effects for ENTIRE SCREEN 560 Not just calendar area 561} 562``` 563 564**Works everywhere on page!** ✨ 565 566--- 567 568## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 569 570### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 571- **Removed:** Emoji sparkle images (✨) 572- **Added:** Glowing pink particle trail following cursor 573- **Added:** FIREWORKS explosion on click! 574- **Result:** Beautiful glowing effects, not emoji! 575 576### Glowing Cursor Trail 577 578**Pink glowing dots follow your cursor!** 579- Small glowing pink orbs (8px) 580- Radial gradient glow effect 581- Multiple box-shadows for depth 582- Fade out smoothly (0.5s) 583- Throttled to 30ms for smoothness 584 585``` 586 • • 587 • → • ← Your cursor 588 • • 589``` 590 591**Not emoji - actual glowing particles!** 592 593--- 594 595### Click Fireworks! 596 597**Click anywhere on the calendar → BOOM!** 598 599**20 pink particles explode outward!** 600- Radial burst pattern (360° coverage) 601- Random speeds (50-150px travel) 602- 4 shades of pink: 603 - Hot pink (#ff1493) 604 - Pink (#ff69b4) 605 - Light pink (#ff85c1) 606 - Very light pink (#ffc0cb) 607- Random sizes (4-10px) 608- Individual glowing halos 609- Smooth explosion animation 610 611**Plus a bright flash at click point!** 612- 30px radius glow 613- Intense pink flash 614- Fades quickly (0.3s) 615 616--- 617 618### Visual Effect 619 620**Cursor movement**: 621``` 622 • 623 • • • 624 • → • ← Glowing trail 625 • • • 626 • 627``` 628 629**Click explosion**: 630``` 631 • • • 632 • • 633 • BOOM! • ← 20 particles 634 • • 635 • • • 636``` 637 638**All particles glow with pink halos!** 639 640--- 641 642### Particle Details 643 644**Trail Particles**: 645- Size: 8x8px 646- Color: Pink radial gradient 647- Shadow: 10px + 20px glow layers 648- Duration: 0.5s fade 649- Rate: 30ms throttle 650 651**Explosion Particles**: 652- Size: 4-10px (random) 653- Colors: 4 pink shades (random) 654- Shadow: 10px + 20px glow (matches color) 655- Duration: 0.6-1.0s (random) 656- Pattern: Perfect circle burst 657 658**Flash Effect**: 659- Size: 30x30px 660- Color: Bright hot pink 661- Shadow: 30px + 50px mega-glow 662- Duration: 0.3s instant fade 663 664--- 665 666### Performance 667 668**Optimized for smoothness**: 669- Trail throttled to 30ms 670- Auto-cleanup after animations 671- CSS hardware acceleration 672- No memory leaks 673- Smooth 60fps 674 675**Won't slow you down!** 676 677--- 678 679### Comparison 680 681**Before (v5.3.1)**: 682- ✨ Emoji sparkle images 683- Static unicode characters 684- Limited visual impact 685 686**After (v5.3.2)**: 687- Glowing pink particles 688- Radial gradients + shadows 689- Beautiful firework explosions 690- Much more impressive! 691 692--- 693 694### Only Pink Theme 695 696**These effects only appear**: 697- On `.calendar-theme-pink` elements 698- Other themes unaffected 699- Pure pink magic! 700 701--- 702 703## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 704 705### ✨ Added: MySpace-Style Sparkle Trail! 706- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 707- **Toned down:** Reduced glow effects for better taste 708- **Added:** Sparkles appear on cell hover 709- **Added:** Sparkles on event hover (left and right sides!) 710- **Added:** Sparkles on today's cell corners 711- **Added:** Sparkles on navigation buttons 712- **Added:** Sparkles in calendar header 713- **Result:** Pure nostalgic MySpace magic! ✨ 714 715### MySpace Sparkle Cursor Trail 716 717**The classic effect from 2006!** 718- Sparkles follow your cursor as you move 719- Random sizes (12-22px) 720- Random slight offsets for natural feel 721- Float up and fade out animation 722- Throttled to 50ms (smooth, not laggy) 723- Only on pink theme calendars 724 725``` 726 ✨ 727 ✨ ✨ 728✨ → ✨ (cursor trail) 729 ✨ ✨ 730 ✨ 731``` 732 733**Pure nostalgia!** 734 735--- 736 737### Sparkles Everywhere 738 739**Calendar cells**: 740- Hover over any day → ✨ floats up 741- Smooth 1.5s animation 742- Centered sparkle 743 744**Event items**: 745- Hover → ✨ on left side 746- Hover → ✨ on right side 747- Staggered animations (0.4s delay) 748- Continuous twinkling 749 750**Today's cell**: 751- ✨ in top-right corner (continuous) 752- ✨ in bottom-left corner (offset timing) 753- Always sparkling! 754 755**Navigation buttons**: 756- Hover on < or > → ✨ appears top-right 757- One-time float animation 758 759**Calendar header**: 760- ✨ on left side (continuous) 761- ✨ on right side (offset 1s) 762- Always twinkling 763 764--- 765 766### Toned Down Glows 767 768**Before (v5.3.0)**: TOO MUCH GLOW! 769- 50px shadows 770- 4-layer effects 771- Overwhelming 772 773**After (v5.3.1)**: Just right! 774- 8-15px max shadows (subtle) 775- 2-layer effects 776- Professional with personality 777 778**Glow reductions**: 779- Today shimmer: 35px → 12px 780- Today hover: 50px → 15px 781- Event glow: 18px → 6px 782- Badge pulse: 25px → 8px 783- Container glow: 20px → 8px 784 785**Much more tasteful!** 786 787--- 788 789### Sparkle Animations 790 791**sparkle-twinkle** (0.8s): 792``` 793Opacity: 0 → 1 → 1 → 0 794Scale: 0 → 1 → 1 → 0 795Rotation: 0° → 180° → 360° 796``` 797 798**sparkle-float** (1.5s): 799``` 800Moves up: 0px → -50px 801Opacity: 0 → 1 → 1 → 0 802Scale: 0 → 1 → 0.8 → 0 803``` 804 805**Pure MySpace magic!** ✨ 806 807--- 808 809### Where Sparkles Appear 810 811✅ **Cursor trail** (continuous while moving) 812✅ **Calendar cells** (on hover) 813✅ **Event items** (on hover, left + right) 814✅ **Today's cell** (continuous, corners) 815✅ **Navigation buttons** (on hover) 816✅ **Calendar header** (continuous, sides) 817 818**Sparkles EVERYWHERE!** ✨✨✨ 819 820--- 821 822### Performance 823 824**Cursor trail**: 825- Throttled to 50ms 826- Auto-cleanup after 1s 827- No memory leaks 828- Smooth 60fps 829 830**CSS animations**: 831- Hardware accelerated 832- No JavaScript overhead (except cursor) 833- Efficient transforms 834 835**Won't slow down your browser!** 836 837--- 838 839### Pure Nostalgia 840 841**Remember MySpace profiles?** 842- Glitter graphics ✨ 843- Sparkle cursors ✨ 844- Auto-play music (ok, we didn't add that) 845- Animated GIF backgrounds 846- Comic Sans everywhere 847 848**We brought back the sparkles!** ✨ 849 850--- 851 852### Theme Comparison 853 854**Other themes**: Professional and clean 855**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 856 857**Only pink theme gets the magic!** 858 859--- 860 861## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 862 863### Added: Pink Theme Gets BLING! 864- **Added:** Shimmering animation for today's cell 865- **Added:** Sparkling text effect on today's date 866- **Added:** Glowing pulse for event bars 867- **Added:** Gradient shimmer on headers 868- **Added:** Extra glow on hover effects 869- **Added:** Pulsing urgent badge for past due items 870- **Result:** Pink theme is now FABULOUS! ✨ 871 872### Shimmer Effects 873 874**Today's Cell**: 875- Continuous shimmer animation (2 second loop) 876- Multi-layer glow effect 877- Pink and hot pink overlapping shadows 878- Pulses from subtle to intense 879- Extra sparkle on hover 880 881**Today's Date Number**: 882- Sparkle animation (1.5 second loop) 883- Text shadow glow effect 884- Slight scale pulse (100% → 105%) 885- Pink to hot pink shadow transition 886 887### Glow Effects 888 889**Event Bars**: 890- Continuous glow pulse (2 second loop) 891- Uses event's own color 892- Adds pink accent glow layer 893- Creates depth and dimension 894 895**Event Items**: 896- Subtle base glow 897- Enhanced glow on hover 898- Slight slide animation on hover 899- Professional yet playful 900 901### Gradient Shimmer 902 903**Headers**: 904- Animated gradient background 905- 3-color pink gradient flow 906- Smooth 3-second animation 907- Creates movement and life 908- Applies to calendar header and event list header 909 910### Badge Effects 911 912**TODAY Badge**: 913- Sparkle animation 914- Synchronized with today's date 915- Extra prominence 916 917**PAST DUE Badge**: 918- Urgent pulsing effect (1 second loop) 919- Orange glow intensifies 920- Draws attention to urgent items 921- Faster pulse for urgency 922 923### Container Bling 924 925**Main Container**: 926- Multi-layer pink glow 927- Soft outer shadow 928- Creates floating effect 929- Subtle but elegant 930 931### Animation Details 932 933**pink-shimmer** (2s loop): 934``` 935Start: Subtle 5px glow 936Peak: Intense 35px multi-layer glow 937End: Back to subtle 938``` 939 940**pink-sparkle** (1.5s loop): 941``` 942Start: Base glow + scale 1.0 943Peak: Intense glow + scale 1.05 944End: Back to base 945``` 946 947**pink-glow-pulse** (2s loop): 948``` 949Start: Small glow (3px, 6px) 950Peak: Large glow (6px, 12px, 18px) 951End: Back to small 952``` 953 954**pink-gradient-shimmer** (3s loop): 955``` 956Gradient flows across element 957Creates wave effect 958Smooth continuous motion 959``` 960 961**pink-pulse-urgent** (1s loop - faster!): 962``` 963Start: Orange glow 5px 964Peak: Orange glow 25px (intense) 965End: Back to 5px 966``` 967 968### Visual Experience 969 970**Today's Cell**: 971``` 972┌──┬──┬──┬──┬──┬──┬──┐ 973│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 974│ │ │[9]│ │ │ │ │ ← Sparkles 975│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 976└──┴──┴──┴──┴──┴──┴──┘ 977``` 978 979**Event Bars**: 980``` 981━━━━━━━ ← Glows and pulses 982━━━━━━━ ← Each bar animated 983━━━━━━━ ← Creates rhythm 984``` 985 986**Headers**: 987``` 988╔═════════════════════╗ 989║ ~~~~~~~~~~ ║ ← Gradient flows 990║ February 2026 ║ ← Shimmer effect 991╚═════════════════════╝ 992``` 993 994### Theme Comparison 995 996**Before (v5.2.8)**: 997- Pink colors 998- Static elements 999- Standard shadows 1000 1001**After (v5.3.0)**: 1002- Pink colors ✓ 1003- Animated shimmer ✨ 1004- Sparkling effects 1005- Glowing pulses ✨ 1006- Moving gradients 1007- BLING! 1008 1009### Performance 1010 1011**All animations**: 1012- Hardware accelerated (transform, opacity) 1013- Smooth 60fps 1014- CSS animations (no JavaScript) 1015- Minimal CPU usage 1016- Disabled in reduced-motion preference 1017 1018### Only for Pink Theme 1019 1020**Effects only apply when**: 1021```css 1022.calendar-theme-pink 1023``` 1024 1025**Other themes unaffected**: 1026- Matrix stays Matrix 1027- Professional stays Professional 1028- Purple stays Purple 1029- Wiki stays clean 1030 1031**Pink gets all the bling!** ✨ 1032 1033### Use Cases 1034 1035**Perfect for**: 1036- Celebrating occasions 1037- Fun team calendars 1038- Personal style expression 1039- Standing out 1040- Making calendar time fabulous 1041 1042**Not just pink, but BLING pink!** ✨ 1043 1044## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 1045 1046### Fixed: Today's Date Box Now Uses Theme Colors 1047- **Fixed:** Today's day number box now uses theme border color 1048- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 1049- **Result:** Today box matches the theme perfectly! 1050 1051### The Issue 1052 1053Today's date had a hardcoded green box: 1054 1055**In style.css**: 1056```css 1057.cal-today .day-num { 1058 background: #008800; /* Hardcoded green! */ 1059 color: white; 1060} 1061``` 1062 1063**Didn't adapt to themes at all!** 1064 1065### The Fix 1066 1067**Now uses theme colors**: 1068```php 1069// Today's day number 1070if ($isToday) { 1071 background: $themeStyles['border'], // Theme's accent color! 1072 color: (professional theme) ? white : bg color 1073} 1074``` 1075 1076### Theme Examples 1077 1078**Matrix Theme**: 1079- Box background: `#00cc07` (matrix green) 1080- Text color: `#242424` (dark background) 1081 1082**Purple Theme**: 1083- Box background: `#9b59b6` (purple) 1084- Text color: `#2a2030` (dark background) 1085 1086**Professional Theme**: 1087- Box background: `#4a90e2` (blue) 1088- Text color: `#ffffff` (white text) 1089 1090**Pink Theme**: 1091- Box background: `#ff1493` (hot pink) 1092- Text color: `#1a0d14` (dark background) 1093 1094**Wiki Theme**: 1095- Box background: Template's `__border__` color 1096- Text color: Template's `__background_site__` color 1097 1098### Visual Result 1099 1100**Matrix Theme**: 1101``` 1102┌──┬──┬──┬──┬──┬──┬──┐ 1103│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1104└──┴──┴──┴──┴──┴──┴──┘ 1105 ↑ 1106 Green box (#00cc07) 1107``` 1108 1109**Professional Theme**: 1110``` 1111┌──┬──┬──┬──┬──┬──┬──┐ 1112│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1113└──┴──┴──┴──┴──┴──┴──┘ 1114 ↑ 1115 Blue box (#4a90e2) 1116``` 1117 1118**Wiki Theme**: 1119``` 1120┌──┬──┬──┬──┬──┬──┬──┐ 1121│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1122└──┴──┴──┴──┴──┴──┴──┘ 1123 ↑ 1124 Template border color 1125``` 1126 1127### Implementation 1128 1129**Inline styles added**: 1130- Background uses `$themeStyles['border']` (theme accent) 1131- Text color uses `$themeStyles['bg']` for contrast 1132- Special case: Professional theme uses white text 1133- All with `!important` to override CSS 1134 1135**CSS cleaned up**: 1136- Removed hardcoded `#008800` background 1137- Removed hardcoded `white` color 1138- Kept structural styles (border-radius, font-weight) 1139 1140### Benefits 1141 1142**Theme Consistency**: 1143- Today box matches theme accent color 1144- Proper contrast with background 1145- Professional appearance 1146 1147**Automatic Adaptation**: 1148- Works with all themes 1149- Works with custom wiki template colors 1150- No manual adjustment needed 1151 1152**Visual Harmony**: 1153- Border color used throughout theme 1154- Today box reinforces theme identity 1155- Consistent design language 1156 1157## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 1158 1159### Fixed: Table Grid Background Now Matches Cells 1160- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 1161- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 1162- **Result:** Table background no longer shows through cells! 1163 1164### The Layer Problem 1165 1166The table itself had a DIFFERENT background color than its cells! 1167 1168**Before (v5.2.6)**: 1169```php 1170'grid_bg' => __background_alt__, // Table background (#e8e8e8) 1171'cell_bg' => __background_site__, // Cell background (#f5f5f5) 1172``` 1173 1174**The table background was showing THROUGH the cells!** 1175 1176### Why This Happened 1177 1178**Visual layers**: 1179``` 1180Table Element 1181├─ background: __background_alt__ (#e8e8e8) ← Different! 1182└─ Cells 1183 └─ background: __background_site__ (#f5f5f5) ← Different! 1184 1185The table background shows through any gaps! 1186``` 1187 1188### The Fix 1189 1190**After (v5.2.7)**: 1191```php 1192'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 1193'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 1194``` 1195 1196**NOW THEY MATCH!** 1197 1198### Where grid_bg Is Used 1199 1200The table element itself: 1201```html 1202<table style="background: __background_alt__"> ← Was showing through! 1203 <tbody> 1204 <tr> 1205 <td style="background: __background_site__">1</td> 1206 </tr> 1207 </tbody> 1208</table> 1209``` 1210 1211Even with cell inline styles, the TABLE background shows through! 1212 1213### All Background Sources Now Unified 1214 1215**Everything now uses __background_site__**: 1216- `bg` → __background_site__ ✓ 1217- `header_bg` → __background_site__ ✓ 1218- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 1219- `cell_bg` → __background_site__ ✓ 1220 1221**Perfect consistency!** 1222 1223### Why It Was Different 1224 1225**Originally the grid was meant to show borders**: 1226- `grid_bg` was `__background_alt__` (slightly different) 1227- Created visual separation between cells 1228- But with transparent/thin cells, it showed through! 1229 1230**Now unified for consistency!** 1231 1232### Visual Result 1233 1234**Before (layers visible)**: 1235``` 1236┌─────────────────┐ 1237│ Grid (#e8e8e8) │ ← Showing through! 1238│ ┌──┬──┬──┐ │ 1239│ │ │ │ │ │ ← Cells (#f5f5f5) 1240│ └──┴──┴──┘ │ 1241└─────────────────┘ 1242``` 1243 1244**After (unified)**: 1245``` 1246┌─────────────────┐ 1247│ Grid (#f5f5f5) │ ← Same color! 1248│ ┌──┬──┬──┐ │ 1249│ │ │ │ │ │ ← Cells (#f5f5f5) 1250│ └──┴──┴──┘ │ 1251└─────────────────┘ 1252Perfect match! 1253``` 1254 1255### Complete Background Mapping 1256 1257**All using __background_site__ now**: 1258- Main container background 1259- Left panel background 1260- Right panel background 1261- Eventlist background 1262- Calendar grid background ← JUST FIXED 1263- Calendar cell backgrounds 1264- Event item backgrounds 1265- Clock header background 1266- Search input background 1267- Past events toggle 1268 1269**EVERYTHING UNIFIED!** 1270 1271## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 1272 1273### Fixed: Removed Container Backgrounds Showing Through 1274- **Found:** `.calendar-compact-container` had `background: #ffffff;` 1275- **Found:** `.calendar-compact-left` had `background: #fafafa;` 1276- **Found:** `.calendar-compact-right` had `background: #ffffff;` 1277- **Found:** `.event-search-input-inline` had `background: white;` 1278- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 1279- **Result:** Container backgrounds no longer show through cells! 1280 1281### The Container Problem 1282 1283The parent containers had hardcoded backgrounds that were showing through! 1284 1285**Container backgrounds (lines 4-91)**: 1286```css 1287.calendar-compact-container { 1288 background: #ffffff; /* ← Main container! */ 1289} 1290 1291.calendar-compact-left { 1292 background: #fafafa; /* ← Left panel (calendar side)! */ 1293} 1294 1295.calendar-compact-right { 1296 background: #ffffff; /* ← Right panel (events side)! */ 1297} 1298``` 1299 1300**These were showing through the cells and events!** 1301 1302### Why Containers Matter 1303 1304Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 1305 1306``` 1307Container (#fafafa) ← Showing through! 1308 └─ Table Cell (#f5f5f5) ← Transparent areas 1309 └─ Content 1310``` 1311 1312### All Backgrounds Removed 1313 1314**v5.2.6 removes**: 1315- `.calendar-compact-container` background 1316- `.calendar-compact-left` background 1317- `.calendar-compact-right` background 1318- `.event-search-input-inline` background 1319- `.past-events-toggle` background & hover 1320 1321**v5.2.5 removed**: 1322- `.calendar-compact-grid tbody td` background 1323- `.calendar-compact-grid thead th` background 1324 1325**v5.2.4 removed**: 1326- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 1327 1328**v5.2.3 removed**: 1329- `.event-compact-item` background 1330 1331**ALL container and element backgrounds eliminated!** 1332 1333### What Should Work Now 1334 1335**Calendar cells**: No container background showing through ✓ 1336**Event items**: No container background showing through ✓ 1337**Search bar**: Uses template color ✓ 1338**Past events toggle**: Uses template color ✓ 1339 1340### Complete List of Fixes 1341 1342**Containers**: 1343- Main container ✓ 1344- Left panel ✓ 1345- Right panel ✓ 1346 1347**Elements**: 1348- Table cells ✓ 1349- Event items ✓ 1350- Search input ✓ 1351- Past events toggle ✓ 1352 1353**EVERYTHING removed!** 1354 1355### Critical: Clear Caches 1356 1357**Must clear caches or won't work**: 13581. Hard refresh: Ctrl+Shift+R (5 times!) 13592. Clear DokuWiki cache 13603. Close browser completely 13614. Reopen and test 1362 1363**CSS caching is EXTREMELY persistent!** 1364 1365## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 1366 1367### Fixed: Removed Hardcoded Backgrounds from Table Cells 1368- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 1369- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 1370- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 1371- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 1372- **Result:** Calendar table cells finally use template colors! 1373 1374### The REAL Culprits 1375 1376The generic table CSS was overriding everything! 1377 1378**In style.css (lines 307-356)**: 1379```css 1380.calendar-compact-grid thead th { 1381 background: #f8f8f8; /* ← Header cells hardcoded! */ 1382} 1383 1384.calendar-compact-grid tbody td { 1385 background: #ffffff; /* ← ALL table cells hardcoded! */ 1386} 1387 1388.calendar-compact-grid tbody td:hover { 1389 background: #f0f7ff; /* ← Hover state hardcoded! */ 1390} 1391``` 1392 1393**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 1394 1395### Why This Was the Last One 1396 1397**CSS Specificity Order**: 13981. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 13992. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 14003. Inline styles (should win but didn't) 1401 1402**We removed the specific ones (v5.2.4), but the generic one was still there!** 1403 1404### What We've Removed 1405 1406**v5.2.3**: 1407- `.event-compact-item` background 1408- `.event-compact-item:hover` background 1409 1410**v5.2.4**: 1411- `.cal-empty` background & hover 1412- `.cal-today` background & hover 1413- `.cal-has-events` background & hover 1414 1415**v5.2.5 (FINAL)**: 1416- `.calendar-compact-grid tbody td` background ✓ 1417- `.calendar-compact-grid tbody td:hover` background ✓ 1418- `.calendar-compact-grid thead th` background ✓ 1419 1420**All CSS background overrides ELIMINATED!** 1421 1422### Why It Took 5 Versions 1423 1424**CSS had layers of hardcoded backgrounds**: 1425 1426``` 1427Layer 1: Table cells (.calendar-compact-grid tbody td) 1428 ↓ Overrode inline styles 1429Layer 2: Cell states (.cal-today, .cal-empty, etc.) 1430 ↓ Overrode table cells 1431Layer 3: Event items (.event-compact-item) 1432 ↓ Overrode inline styles 1433 1434ALL had to be removed! 1435``` 1436 1437**We kept finding more specific CSS, but the base table CSS was there all along!** 1438 1439### Visual Result 1440 1441**NOW everything matches**: 1442``` 1443Calendar Table: 1444┌──┬──┬──┬──┬──┬──┬──┐ 1445│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 1446├──┼──┼──┼──┼──┼──┼──┤ 1447│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 1448├──┼──┼──┼──┼──┼──┼──┤ 1449│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 1450└──┴──┴──┴──┴──┴──┴──┘ 1451 1452Sidebar Events: 1453┌────────────────────────┐ 1454│ Event │ ← __background_site__ 1455│ Event │ ← __background_site__ 1456└────────────────────────┘ 1457 1458FINALLY ALL MATCHING! ✓ 1459``` 1460 1461### Complete List of Removed CSS 1462 1463**ALL hardcoded backgrounds removed**: 1464- `.event-compact-item` background 1465- `.event-compact-item:hover` background 1466- `.cal-empty` background & hover 1467- `.cal-today` background & hover 1468- `.cal-has-events` background & hover 1469- `.calendar-compact-grid tbody td` background ← NEW 1470- `.calendar-compact-grid tbody td:hover` background ← NEW 1471- `.calendar-compact-grid thead th` background ← NEW 1472 1473**Every single CSS background override is GONE!** 1474 1475### Testing Steps 1476 1477**After installing v5.2.5**: 1478 14791. **Clear browser cache**: Ctrl+Shift+R (3 times!) 14802. **Clear DokuWiki cache**: Click the button 14813. **Close browser completely**: Restart it 14824. **Visit page**: Should finally see matching backgrounds 1483 1484**CSS is EXTREMELY sticky - may need to clear multiple times!** 1485 1486### This Should Be It 1487 1488**No more CSS overrides exist** (we've checked the entire file): 1489- Table cells ✓ Fixed 1490- Cell states ✓ Fixed 1491- Event items ✓ Fixed 1492- Headers ✓ Fixed 1493- Hover states ✓ Fixed 1494 1495**All backgrounds now come from inline styles using template colors!** 1496 1497## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 1498 1499### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 1500- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 1501- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 1502- **Result:** Calendar cells now use template colors! 1503 1504### The Second Culprit 1505 1506MORE hardcoded backgrounds in the CSS file! 1507 1508**In style.css (lines 359-382)**: 1509```css 1510.cal-empty { 1511 background: #fafafa !important; /* ← Overriding inline styles! */ 1512} 1513 1514.cal-today { 1515 background: #e8f5e9 !important; /* ← Overriding today cell! */ 1516} 1517 1518.cal-today:hover { 1519 background: #c8e6c9 !important; /* ← Overriding hover! */ 1520} 1521 1522.cal-has-events { 1523 background: #fffbf0; /* ← Overriding event cells! */ 1524} 1525 1526.cal-has-events:hover { 1527 background: #fff4d9; /* ← Overriding hover! */ 1528} 1529``` 1530 1531**These were ALL overriding the inline styles!** 1532 1533### The Fix 1534 1535**Removed all hardcoded backgrounds**: 1536```css 1537.cal-empty { 1538 /* background removed - inline style handles this */ 1539 cursor: default !important; 1540} 1541 1542.cal-today { 1543 /* background removed - inline style handles this */ 1544} 1545 1546.cal-has-events { 1547 /* background removed - inline style handles this */ 1548} 1549 1550/* Hover states also removed */ 1551``` 1552 1553### What Was Overridden 1554 1555**v5.2.3 fixed**: 1556- Event items in sidebar ✓ 1557 1558**v5.2.4 fixes**: 1559- Calendar day cells ✓ 1560- Today cell ✓ 1561- Empty cells ✓ 1562- Cells with events ✓ 1563- All hover states ✓ 1564 1565### Why This Kept Happening 1566 1567**CSS had hardcoded backgrounds everywhere**: 15681. Event items: `#ffffff` (fixed in v5.2.3) 15692. Calendar cells: Multiple colors (fixed in v5.2.4) 15703. **All with `!important` flags!** 1571 1572**The inline styles couldn't override them!** 1573 1574### Visual Result 1575 1576**Now ALL backgrounds match**: 1577``` 1578Calendar Grid: 1579┌──┬──┬──┬──┬──┬──┬──┐ 1580│ │ │ │ │ │ │ │ ← All use __background_site__ 1581├──┼──┼──┼──┼──┼──┼──┤ 1582│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 1583├──┼──┼──┼──┼──┼──┼──┤ 1584│ │ │ │ │ │ │ │ ← All match template 1585└──┴──┴──┴──┴──┴──┴──┘ 1586 1587Sidebar Events: 1588┌────────────────────────┐ 1589│ Event │ ← Uses __background_site__ 1590│ Event │ ← Uses __background_site__ 1591└────────────────────────┘ 1592 1593Perfect consistency! 1594``` 1595 1596### CSS Removed 1597 1598**Calendar cells**: 1599- `.cal-empty` background 1600- `.cal-empty:hover` background 1601- `.cal-today` background 1602- `.cal-today:hover` background 1603- `.cal-has-events` background 1604- `.cal-has-events:hover` background 1605 1606**All gone!** ✓ 1607 1608### Important: Clear Caches Again! 1609 1610After installing v5.2.4: 1611 16121. **Hard refresh browser**: Ctrl+Shift+R (twice!) 16132. **Clear DokuWiki cache**: Admin → Clear Cache 16143. **May need to restart browser**: To clear CSS cache 1615 1616**Old CSS is VERY sticky!** 1617 1618### Why It Took So Long 1619 1620**Multiple CSS overrides**: 1621- Event items (v5.2.3) ✓ Fixed 1622- Calendar cells (v5.2.4) ✓ Fixed 1623- Each with different classes 1624- Each with `!important` 1625- Hidden throughout CSS file 1626 1627**Found them all now!** 1628 1629## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 1630 1631### Fixed: Removed Hardcoded Backgrounds from CSS 1632- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 1633- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 1634- **Result:** Event backgrounds now properly use template colors! 1635 1636### The Root Cause 1637 1638The CSS file was overriding the inline styles with hardcoded white backgrounds! 1639 1640**In style.css (lines 599-616)**: 1641```css 1642.event-compact-item { 1643 background: #ffffff; /* ← This was overriding inline styles! */ 1644} 1645 1646.event-compact-item:hover { 1647 background: #f8f9fa; /* ← And this on hover! */ 1648} 1649``` 1650 1651**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 1652 1653### The Fix 1654 1655**Removed hardcoded backgrounds from CSS**: 1656```css 1657.event-compact-item { 1658 /* background removed - set via inline style with template colors */ 1659 display: flex; 1660 /* ... other styles ... */ 1661} 1662 1663.event-compact-item:hover { 1664 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 1665 /* background removed - inline style handles this */ 1666} 1667``` 1668 1669### Why This Was So Difficult to Find 1670 1671**CSS Specificity & Cascade**: 16721. Inline styles with `!important` should win 16732. But CSS that comes after can still apply 16743. The hardcoded `background: #ffffff` was silently overriding 16754. All the PHP code was correct - it was the CSS! 1676 1677**What We Were Doing**: 1678- ✓ Reading template colors correctly 1679- ✓ Setting `cell_bg` to `__background_site__` correctly 1680- ✓ Applying inline styles with `!important` correctly 1681- ✗ CSS file was overriding everything! 1682 1683### What Was Affected 1684 1685**Event items in**: 1686- Main calendar sidebar 1687- Standalone event list 1688- Sidebar widget 1689- All event displays 1690 1691**All had white backgrounds hardcoded in CSS!** 1692 1693### Now Working 1694 1695**Events use template colors**: 1696```html 1697<div class="event-compact-item" 1698 style="background: #f5f5f5 !important; ..."> 1699 ← Now this inline style actually works! 1700</div> 1701``` 1702 1703**No CSS override** ✓ 1704 1705### Testing 1706 1707To verify this works: 17081. Clear browser cache (important!) 17092. Clear DokuWiki cache 17103. Reload page 17114. Events should now match eventlist background 1712 1713**Browser caching can make old CSS persist!** 1714 1715### Visual Result 1716 1717**All backgrounds now matching**: 1718``` 1719┌────────────────────────────┐ 1720│ Eventlist (#f5f5f5) │ ← Template color 1721├────────────────────────────┤ 1722│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1723├────────────────────────────┤ 1724│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1725└────────────────────────────┘ 1726 1727Perfect match! 1728``` 1729 1730### Why Everything Else Worked 1731 1732**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 1733- They only had inline styles ✓ 1734- Inline styles worked correctly ✓ 1735- Only event items had the CSS override ✗ 1736 1737### Important Notes 1738 1739**Clear caches**: 1740- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 1741- DokuWiki cache (Admin → Clear Cache) 1742- Old CSS may be cached! 1743 1744**This was the culprit all along!** 1745 1746## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 1747 1748### Fixed: Clock Area Now Matches Event Cells 1749- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 1750- **Result:** Clock/Today header matches event cell backgrounds! 1751 1752### The Issue 1753 1754The clock area (Today header) was using a different background: 1755 1756**Before (v5.2.1)**: 1757```php 1758'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 1759'cell_bg' => __background_site__, // Event cells (#f5f5f5) 1760``` 1761 1762**After (v5.2.2)**: 1763```php 1764'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 1765'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 1766``` 1767 1768### What's the Clock Area? 1769 1770The clock/Today header in the sidebar: 1771``` 1772┌────────────────────────────┐ 1773│ 3:45:23 PM │ ← Clock area (header_bg) 1774│ ️ --° | Sun, Feb 9, 2026 │ 1775└────────────────────────────┘ 1776``` 1777 1778### All Backgrounds Now Unified 1779 1780**Everything now uses __background_site__**: 1781- Eventlist background ✓ 1782- Calendar cells ✓ 1783- Event items ✓ 1784- Clock/Today header ✓ 1785- Sidebar widget ✓ 1786- All backgrounds match! ✓ 1787 1788### Visual Result 1789 1790**Complete consistency**: 1791``` 1792┌────────────────────────────┐ 1793│ 3:45:23 PM │ ← Same background 1794│ ️ --° | Sun, Feb 9, 2026 │ 1795├────────────────────────────┤ 1796│ Meeting at 2pm │ ← Same background 1797│ Description... │ 1798├────────────────────────────┤ 1799│ Another event │ ← Same background 1800│ More details... │ 1801└────────────────────────────┘ 1802 1803All using __background_site__ (#f5f5f5) 1804``` 1805 1806**Perfect visual harmony!** 1807 1808## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 1809 1810### Fixed: Calendar Cells Now Match Eventlist Background 1811- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 1812- **Result:** Calendar cells now match the eventlist background perfectly! 1813 1814### The Real Issue 1815 1816The eventlist was showing the CORRECT background color all along! 1817 1818**Eventlist was using**: 1819- `bg` → `__background_site__` ✓ (This was correct!) 1820 1821**Calendar cells were using**: 1822- `cell_bg` → `__background__` ✗ (This was wrong!) 1823 1824**They didn't match!** 1825 1826### The Correct Fix 1827 1828**Now everything uses __background_site__**: 1829```php 1830'bg' => __background_site__, // Eventlist (was already correct) 1831'cell_bg' => __background_site__, // Cells (now fixed to match) 1832``` 1833 1834### Why __background_site__? 1835 1836The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 1837 1838``` 1839Page Layout: 1840┌────────────────────────────────────┐ 1841│ __background_site__ (page bg) │ ← This is where calendar lives 1842│ │ 1843│ ┌──────────────────────────────┐ │ 1844│ │ __background__ (content bg) │ │ ← Wiki article content 1845│ │ │ │ 1846│ └──────────────────────────────┘ │ 1847│ │ 1848└────────────────────────────────────┘ 1849``` 1850 1851**Calendar should match the page background, not the content background!** 1852 1853### Template Example 1854 1855Typical DokuWiki template: 1856```ini 1857__background_site__ = "#f5f5f5" (Light gray - page background) 1858__background__ = "#ffffff" (White - content area) 1859``` 1860 1861**Before (v5.2.0)**: 1862- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1863- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 1864 1865**After (v5.2.1)**: 1866- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1867- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 1868 1869### All Backgrounds Now Unified 1870 1871**Everything now uses __background_site__**: 1872- Eventlist sidebar background ✓ 1873- Main calendar background ✓ 1874- Calendar day cells ✓ 1875- Sidebar widget ✓ 1876- Event items ✓ 1877- Input fields ✓ 1878- Buttons ✓ 1879 1880**All perfectly matched to the page background!** 1881 1882### Why Version 5.2.0 Was Wrong 1883 1884I 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. 1885 1886**The eventlist knew what it was doing all along!** The cells just needed to catch up. 1887 1888## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 1889**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 1890 1891### Fixed: All Backgrounds Now Use __background__ 1892- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 1893- **Fixed:** Eventlist, calendar cells, and sidebar all match now 1894- **Result:** Completely unified background throughout! 1895 1896### The Issue 1897 1898Different parts of the calendar were using different background sources: 1899 1900**Before (v5.1.9)**: 1901```php 1902'bg' => __background_site__ // Eventlist background (outer page) 1903'cell_bg' => __background__ // Cell backgrounds (content area) 1904``` 1905 1906**These are different colors!** 1907- `__background_site__` = Outer page wrapper (often gray) 1908- `__background__` = Main content area (often white) 1909 1910### The Fix 1911 1912**After (v5.2.0)**: 1913```php 1914'bg' => __background__ // Eventlist background ✓ 1915'cell_bg' => __background__ // Cell backgrounds ✓ 1916``` 1917 1918**Both use the same source!** 1919 1920### What Uses 'bg' 1921 1922The `bg` color is used for: 1923- Eventlist sidebar background 1924- Main calendar container 1925- Sidebar widget background 1926- Form backgrounds 1927- Event dialogs 1928 1929### What Uses 'cell_bg' 1930 1931The `cell_bg` color is used for: 1932- Calendar day cells 1933- Event item backgrounds 1934- Input field backgrounds 1935- Button backgrounds 1936 1937### Why This Matters 1938 1939**Template color hierarchy**: 1940``` 1941__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 1942__background__ → Main content area (e.g., #ffffff white) 1943__background_alt__ → Sections/headers 1944__background_neu__ → Highlights 1945``` 1946 1947**We want all calendar backgrounds to match the main content area!** 1948 1949### Visual Comparison 1950 1951**Before (v5.1.9)**: Mismatched backgrounds 1952``` 1953┌────────────────────────────────┐ 1954│ Eventlist (gray #f5f5f5) │ ← __background_site__ 1955└────────────────────────────────┘ 1956 1957┌────────────────────────────────┐ 1958│ Calendar │ 1959│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1960│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1961│ └──┴──┴──┴──┴──┴──┴──┘ │ 1962└────────────────────────────────┘ 1963Different colors - looks inconsistent 1964``` 1965 1966**After (v5.2.0)**: Unified backgrounds 1967``` 1968┌────────────────────────────────┐ 1969│ Eventlist (white #fff) │ ← __background__ 1970└────────────────────────────────┘ 1971 1972┌────────────────────────────────┐ 1973│ Calendar │ 1974│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1975│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1976│ └──┴──┴──┴──┴──┴──┴──┘ │ 1977└────────────────────────────────┘ 1978Same color - perfectly consistent! 1979``` 1980 1981### Template Examples 1982 1983**Light Template**: 1984```ini 1985__background_site__ = "#f5f5f5" (light gray) 1986__background__ = "#ffffff" (white) 1987``` 1988 1989**Before**: Eventlist gray, cells white 1990**After**: Eventlist white, cells white ✓ 1991 1992**Dark Template**: 1993```ini 1994__background_site__ = "#1a1a1a" (very dark) 1995__background__ = "#2d2d2d" (dark) 1996``` 1997 1998**Before**: Eventlist very dark, cells dark 1999**After**: Eventlist dark, cells dark ✓ 2000 2001### Benefits 2002 2003**Visual Consistency**: 2004- All backgrounds match 2005- Clean, unified appearance 2006- Professional look 2007 2008**Correct Template Integration**: 2009- Uses content area color (not page wrapper) 2010- Matches wiki content area 2011- Proper color hierarchy 2012 2013**Works Everywhere**: 2014- Light templates ✓ 2015- Dark templates ✓ 2016- Custom templates ✓ 2017 2018### All Backgrounds Unified 2019 2020**Now using __background__**: 2021- Eventlist background ✓ 2022- Calendar cells ✓ 2023- Sidebar widget ✓ 2024- Event items ✓ 2025- Input fields ✓ 2026- Buttons ✓ 2027- Dialogs ✓ 2028 2029**Perfect harmony throughout!** 2030 2031## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 2032 2033### Fixed: Wiki Theme Event Backgrounds Not Showing 2034- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 2035- **Fixed:** Replaced CSS variables with actual hex colors 2036- **Result:** Event backgrounds now show correctly with template colors! 2037 2038### The Problem 2039 2040CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 2041 2042**Before (broken)**: 2043```php 2044'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 2045``` 2046 2047**After (fixed)**: 2048```php 2049'cell_bg' => '#fff', // Actual hex color works! 2050``` 2051 2052### What Was Affected 2053 2054**When style.ini read successfully**: 2055- ✅ Worked fine (uses actual hex colors from file) 2056 2057**When style.ini fallback used**: 2058- ❌ Events had no background 2059- ❌ CSS variables don't work in inline styles 2060- ❌ Looked broken 2061 2062### The Fix 2063 2064**Wiki theme fallback now uses real colors**: 2065```php 2066'wiki' => [ 2067 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 2068 'border' => '#ccc', // Real hex (was: var(--__border__)) 2069 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 2070 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 2071 'text_primary' => '#333', // Real hex (was: var(--__text__)) 2072 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 2073 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 2074 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 2075 // ... all colors now use real hex values 2076] 2077``` 2078 2079### Why CSS Variables Don't Work 2080 2081**CSS variables work**: 2082```css 2083.some-class { 2084 background: var(--__background__, #fff); /* ✓ Works in CSS */ 2085} 2086``` 2087 2088**CSS variables DON'T work**: 2089```html 2090<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 2091``` 2092 2093### How It Works Now 2094 2095**Priority system**: 20961. **Try reading style.ini** → Use actual template hex colors ✓ 20972. **If file not found** → Use fallback hex colors ✓ 20983. **Never use CSS variables in inline styles** ✓ 2099 2100**Both paths now work correctly!** 2101 2102### Visual Result 2103 2104**Events now have proper backgrounds**: 2105``` 2106┌──────────────────────────┐ 2107│ Meeting at 2pm │ ← White background (#fff) 2108│ Description here... │ 2109│ [✏️ Edit] [️ Delete] │ 2110└──────────────────────────┘ 2111 2112Not: 2113┌──────────────────────────┐ 2114│ Meeting at 2pm │ ← No background (broken) 2115│ Description here... │ 2116└──────────────────────────┘ 2117``` 2118 2119### Affected Areas 2120 2121**All event displays**: 2122- Main calendar events ✓ 2123- Sidebar widget events ✓ 2124- Event list items ✓ 2125- Event backgrounds ✓ 2126- Button backgrounds ✓ 2127- Input field backgrounds ✓ 2128 2129**Everything uses real colors now!** 2130 2131## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 2132 2133### Reorganized: Better Update Tab Layout 2134- **Moved:** Current Version section to the top 2135- **Combined:** Upload and Important Notes side-by-side 2136- **Improved:** Space-efficient two-column layout 2137- **Result:** More information visible at once! 2138 2139### New Layout Order 2140 2141**Version 5.1.8**: 2142``` 21431. Current Version (at top - see what you have) 21442. Upload + Important Notes (side-by-side) 21453. Recent Changes (changelog) 21464. Backups 2147``` 2148 2149### Side-by-Side Design 2150 2151**Upload form (left 60%) + Important Notes (right 40%)**: 2152``` 2153┌──────────────────────────────────────────┐ 2154│ Current Version │ 2155│ Version: 5.1.8 │ 2156│ ✅ Permissions: OK │ 2157└──────────────────────────────────────────┘ 2158 2159┌─────────────────────┬────────────────────┐ 2160│ Upload New │ ⚠️ Important Notes │ 2161│ [Choose File] │ • Replaces files │ 2162│ ☑ Backup first │ • Config preserved │ 2163│ [Upload] [Clear] │ • Events safe │ 2164└─────────────────────┴────────────────────┘ 2165``` 2166 2167### Benefits 2168 2169**Current Version First**: 2170- See what you have immediately 2171- Check permissions at a glance 2172- Know if ready to update 2173 2174**Side-by-Side Layout**: 2175- Upload form and warnings together 2176- Read notes while choosing file 2177- More efficient use of space 2178- Less scrolling needed 2179 2180**Better Information Flow**: 21811. See current version ✓ 21822. Upload new version with notes visible ✓ 21833. Review recent changes ✓ 21844. Manage backups ✓ 2185 2186### Visual Comparison 2187 2188**Before (v5.1.7)**: 2189``` 2190Important Notes (full width) 2191↓ 2192Upload Form (full width) 2193↓ 2194Current Version 2195↓ 2196Recent Changes 2197↓ 2198Backups 2199``` 2200 2201**After (v5.1.8)**: 2202``` 2203Current Version (full width) 2204↓ 2205Upload (60%) | Notes (40%) 2206↓ 2207Recent Changes 2208↓ 2209Backups 2210``` 2211 2212**More compact, better organized!** 2213 2214### Responsive Design 2215 2216**Wide screens**: 2217- Upload and notes side-by-side 2218- Full 1200px width utilized 2219- Efficient space usage 2220 2221**Narrow screens**: 2222- Sections stack gracefully 2223- Flex layout adapts 2224- Still fully functional 2225 2226### Layout Details 2227 2228**Current Version Section**: 2229- Full width (1200px max) 2230- Shows version, author, description 2231- Permission status with icons 2232- Helpful fix commands if needed 2233 2234**Upload/Notes Section**: 2235- Flexbox layout with gap 2236- Upload: `flex:1` (grows) 2237- Notes: `flex:0 0 350px` (fixed 350px) 2238- Both have proper min-width 2239 2240**Recent Changes Section**: 2241- Full width (1200px max) 2242- Compact scrollable view 2243- Color-coded change types 2244- Last 10 versions shown 2245 2246**Backups Section**: 2247- Full width (1200px max) 2248- Manual backup button 2249- Scrollable file list 2250- All actions accessible 2251 2252### Improved Max Widths 2253 2254All sections now use `max-width:1200px` (previously 900px): 2255- Better use of wide screens 2256- Still responsive on narrow screens 2257- Consistent throughout tab 2258 2259## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 2260 2261### Fixed: Extra Closing Brace 2262- **Fixed:** ParseError on line 1936 (extra closing brace) 2263- **Result:** Manual backup feature now works correctly! 2264 2265### What Was Wrong 2266 2267Extra `}` after the backup section: 2268 2269**Before (broken)**: 2270```php 2271echo '</div>'; 2272} // ← Extra closing brace! 2273 2274echo '<script> 2275``` 2276 2277**After (fixed)**: 2278```php 2279echo '</div>'; 2280 2281echo '<script> 2282``` 2283 2284**Manual backup feature now fully functional!** ✅ 2285 2286## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 2287 2288### Added: Create Backup Manually Anytime 2289- **Added:** "Create Backup Now" button in Backups section 2290- **Added:** Manual backup action handler with full verification 2291- **Added:** Backups section always visible (even with no backups) 2292- **Added:** Success message showing file size and file count 2293- **Result:** Create backups anytime without needing to upload! 2294 2295### Manual Backup Button 2296 2297**New Layout**: 2298``` 2299┌─────────────────────────────────────┐ 2300│ Backups [ Create Backup Now] │ 2301├─────────────────────────────────────┤ 2302│ Backup File Size │ 2303│ calendar.backup.v5.1.6... 243 KB │ 2304│ [ Download] [✏️ Rename] [️ Delete] │ 2305└─────────────────────────────────────┘ 2306``` 2307 2308**Always visible - even with no backups**: 2309``` 2310┌─────────────────────────────────────┐ 2311│ Backups [ Create Backup Now] │ 2312├─────────────────────────────────────┤ 2313│ No backups yet. Click "Create │ 2314│ Backup Now" to create your first │ 2315│ backup. │ 2316└─────────────────────────────────────┘ 2317``` 2318 2319### How It Works 2320 2321**Click the button**: 23221. Confirm: "Create a backup of the current plugin version?" 23232. System creates backup ZIP 23243. Verifies: File count (30+ files) 23254. Verifies: File size (200KB+) 23265. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 2327 2328**Backup naming**: 2329``` 2330calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2331 ^^^^^^ 2332 "manual" tag identifies manual backups 2333``` 2334 2335### Use Cases 2336 2337**Before updates**: 2338- Create safety backup before uploading new version 2339- Have multiple restore points 2340- Test new features with fallback 2341 2342**Regular backups**: 2343- Weekly/monthly backup schedule 2344- Before making configuration changes 2345- After important customizations 2346 2347**Development**: 2348- Backup before code experiments 2349- Save working states 2350- Quick rollback points 2351 2352### Full Verification 2353 2354**Same checks as automatic backups**: 2355- ✅ File count check (minimum 10, expected 30+) 2356- ✅ File size check (minimum 1KB, expected 200KB+) 2357- ✅ Existence check (file actually created) 2358- ✅ Automatic cleanup on failure 2359 2360**Success message includes**: 2361- Backup filename 2362- File size (human-readable) 2363- Number of files backed up 2364 2365### Example Messages 2366 2367**Success**: 2368``` 2369✓ Manual backup created successfully: 2370 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2371 (243 KB, 31 files) 2372``` 2373 2374**Failure Examples**: 2375``` 2376❌ Plugin directory is not readable. 2377 Please check permissions. 2378 2379❌ Backup incomplete: Only 5 files were added (expected 30+). 2380 Backup failed. 2381 2382❌ Backup file is too small (342 bytes). 2383 Only 3 files were added. Backup failed. 2384``` 2385 2386### Benefits 2387 2388**On-Demand Safety**: 2389- Create backups anytime 2390- No need to upload new version 2391- Quick and easy 2392 2393**Peace of Mind**: 2394- Backup before risky changes 2395- Multiple restore points 2396- Safe experimentation 2397 2398**Professional Workflow**: 2399- Regular backup schedule 2400- Version snapshots 2401- Disaster recovery 2402 2403### Backup Section Improvements 2404 2405**Always Visible**: 2406- Section shows even with 0 backups 2407- Button always accessible 2408- Clear call-to-action 2409 2410**Better Header**: 2411- Title and button on same row 2412- Clean, professional layout 2413- Space-efficient design 2414 2415### Technical Details 2416 2417**New Action**: `create_manual_backup` 2418 2419**New Function**: `createManualBackup()` 2420- Gets current version 2421- Creates timestamped filename with "manual" tag 2422- Uses same verification as auto-backups 2423- Shows detailed success/error messages 2424 2425**File Naming Convention**: 2426``` 2427Automatic (on upload): 2428calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 2429 2430Manual (button click): 2431calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2432 ^^^^^^^ 2433 Easy to identify! 2434``` 2435 2436### Permissions Required 2437 2438- **Read access**: Plugin directory 2439- **Write access**: Parent plugins directory 2440 2441**Same as automatic backups** - no additional permissions needed! 2442 2443## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 2444 2445### Enhanced: Backup Creation with Robust Verification 2446- **Added:** File count validation (must have 10+ files) 2447- **Added:** File size validation (must be 1KB+ minimum) 2448- **Added:** Return value from addDirectoryToZip (counts files added) 2449- **Added:** Detailed error messages showing file count 2450- **Added:** Automatic deletion of invalid/incomplete backups 2451- **Enhanced:** Exception handling with proper error propagation 2452- **Result:** Backups are now guaranteed to be complete or fail clearly! 2453 2454### What Changed 2455 2456**Before (v5.1.4)**: 2457```php 2458$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2459$zip->close(); 2460// No verification - could create empty or partial backup 2461``` 2462 2463**After (v5.1.5)**: 2464```php 2465$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2466$zip->close(); 2467 2468// Verify backup exists 2469if (!file_exists($backupPath)) { 2470 redirect('Backup file was not created'); 2471} 2472 2473// Verify backup has content 2474$backupSize = filesize($backupPath); 2475if ($backupSize < 1000) { 2476 unlink($backupPath); 2477 redirect('Backup too small: ' . $backupSize . ' bytes'); 2478} 2479 2480// Verify file count 2481if ($fileCount < 10) { 2482 unlink($backupPath); 2483 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 2484} 2485``` 2486 2487### Backup Validation Checks 2488 2489**Three-Layer Verification**: 2490 24911. **File Count Check**: 2492 - Minimum: 10 files required 2493 - Expected: 30+ files 2494 - Action: Delete backup if too few files 2495 24962. **Size Check**: 2497 - Minimum: 1KB (1000 bytes) 2498 - Expected: 200-250KB 2499 - Action: Delete backup if too small 2500 25013. **Existence Check**: 2502 - Verify file was actually created 2503 - Check ZIP archive is valid 2504 - Action: Error if file missing 2505 2506### Enhanced Error Reporting 2507 2508**Detailed Error Messages**: 2509``` 2510❌ "Backup file was not created" 2511❌ "Backup too small (342 bytes). Only 3 files added." 2512❌ "Only 5 files added (expected 30+). Backup aborted." 2513❌ "Too many errors adding files: Failed to add X, Y, Z..." 2514❌ "Directory does not exist: /path/to/dir" 2515❌ "Directory is not readable: /path/to/dir" 2516``` 2517 2518**Now you know exactly what went wrong!** 2519 2520### Improved addDirectoryToZip Function 2521 2522**Returns File Count**: 2523```php 2524private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2525 $fileCount = 0; 2526 $errors = []; 2527 2528 // Validation 2529 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 2530 if (!is_readable($dir)) throw new Exception("Not readable"); 2531 2532 // Add files 2533 foreach ($files as $file) { 2534 if ($zip->addFile($filePath, $relativePath)) { 2535 $fileCount++; 2536 } else { 2537 $errors[] = "Failed to add: " . $filename; 2538 } 2539 } 2540 2541 // Check error threshold 2542 if (count($errors) > 5) { 2543 throw new Exception("Too many errors"); 2544 } 2545 2546 return $fileCount; // Returns count for verification! 2547} 2548``` 2549 2550### Safety Features 2551 2552**Invalid Backup Cleanup**: 2553- Failed backups are automatically deleted 2554- No partial/corrupt backups left behind 2555- Clean error state 2556 2557**Error Threshold**: 2558- Allow up to 5 minor file errors (logs warnings) 2559- More than 5 errors = complete failure 2560- Prevents partially corrupt backups 2561 2562**Directory Validation**: 2563- Check directory exists before processing 2564- Check directory is readable 2565- Fail fast with clear errors 2566 2567### Benefits 2568 2569**Guaranteed Complete Backups**: 2570- ✅ All files included or backup fails 2571- ✅ No silent failures 2572- ✅ Clear error messages 2573- ✅ Automatic cleanup 2574 2575**Better Debugging**: 2576- Know exactly how many files were added 2577- See specific errors for missing files 2578- Understand why backup failed 2579 2580**User Confidence**: 2581- Backup succeeds = complete backup 2582- Backup fails = clear error message 2583- No ambiguity 2584 2585### Example Scenarios 2586 2587**Scenario 1: Permission Issue** 2588``` 2589User uploads new version 2590System starts backup 2591Error: "Directory is not readable: /lib/plugins/calendar/" 2592Backup fails before creating file 2593User sees clear error message 2594``` 2595 2596**Scenario 2: Partial Backup** 2597``` 2598User uploads new version 2599System creates backup 2600Only 5 files added (disk issue?) 2601Size: 450 bytes 2602Verification fails 2603Incomplete backup deleted 2604Error: "Only 5 files added (expected 30+)" 2605``` 2606 2607**Scenario 3: Success** 2608``` 2609User uploads new version 2610System creates backup 261131 files added 2612Size: 240KB 2613All verifications pass ✅ 2614Update proceeds 2615``` 2616 2617### Testing Recommendations 2618 2619After installing v5.1.5: 26201. Upload a new version with backup enabled 26212. Check for success message 26223. Verify backup file exists in /lib/plugins/ 26234. Check backup file size (should be ~240KB) 26245. If backup fails, read error message carefully 2625 2626**Your backups are now bulletproof!** 2627 2628## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 2629 2630### ✅ Verified: Backup System Working Correctly 2631- **Verified:** addDirectoryToZip function includes all files recursively 2632- **Verified:** Backups contain all 31+ files from calendar directory 2633- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 2634- **Info:** Backup sizes grow slightly with each version (more code = more features!) 2635- **Result:** Backup system is working perfectly! 2636 2637### Backup System Details 2638 2639**What Gets Backed Up**: 2640- All PHP files (syntax.php, admin.php, action.php, etc.) 2641- All JavaScript files (calendar-main.js, script.js) 2642- All documentation (CHANGELOG.md, README.md, all guides) 2643- All configuration (sync_config.php) 2644- All language files 2645- All assets and resources 2646- **Everything in the calendar/ directory!** 2647 2648**Backup Size Analysis**: 2649``` 2650Version 5.0.4: 233KB (normal) 2651Version 5.0.5: 234KB (normal) 2652Version 5.0.6: 235KB (normal) 2653Version 5.0.7: 236KB (normal) 2654Version 5.0.8: 237KB (normal) 2655Version 5.0.9: 237KB (normal) 2656Version 5.1.0: 238KB (normal) 2657Version 5.1.1: 238KB (normal) 2658Version 5.1.2: 240KB (normal - added AJAX features) 2659Version 5.1.3: 240KB (normal) 2660``` 2661 2662**Why Sizes Grow**: 2663- More features = more code 2664- Longer CHANGELOG 2665- Additional documentation 2666- New functionality 2667- **This is expected and normal!** 2668 2669**Compression Ratio**: 2670``` 2671Uncompressed: ~1.0 MB (source files) 2672Compressed: ~240 KB (ZIP archive) 2673Ratio: ~24% (excellent compression!) 2674``` 2675 2676### Backup File Contents 2677 2678**31 Files Included**: 2679``` 2680admin.php (216KB - main admin interface) 2681syntax.php (173KB - calendar rendering) 2682calendar-main.js (102KB - JavaScript functionality) 2683CHANGELOG.md (268KB - complete version history) 2684style.css (57KB - all styling) 2685action.php (38KB - DokuWiki actions) 2686sync_outlook.php (32KB - Outlook integration) 2687+ 24 other files (docs, configs, helpers) 2688``` 2689 2690**All files successfully included!** ✅ 2691 2692### How Backups Work 2693 2694**Creation Process**: 26951. User uploads new plugin version 26962. Checkbox "Create backup first" (checked by default) 26973. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 26984. Backup saved to: `/lib/plugins/` directory 26995. Then proceeds with update 2700 2701**Backup Function**: 2702```php 2703private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2704 $files = new RecursiveIteratorIterator( 2705 new RecursiveDirectoryIterator($dir), 2706 RecursiveIteratorIterator::LEAVES_ONLY 2707 ); 2708 foreach ($files as $file) { 2709 if (!$file->isDir()) { 2710 $zip->addFile($filePath, $relativePath); 2711 } 2712 } 2713} 2714``` 2715 2716**Recursive = Gets Everything!** ✅ 2717 2718### Verification Results 2719 2720**Test Results**: 2721- ✅ All 31 files present in zip 2722- ✅ All subdirectories included (lang/en/) 2723- ✅ File sizes match originals 2724- ✅ Compression works properly 2725- ✅ No files missing 2726- ✅ Backup can be restored 2727 2728**File Count**: 2729``` 2730Source directory: 31 files 2731Backup ZIP: 34 items (31 files + 3 directories) 2732Status: COMPLETE ✅ 2733``` 2734 2735### Backup Best Practices 2736 2737**Always enabled by default** ✅ 2738**Stored in accessible location** ✅ 2739**Timestamped filenames** ✅ 2740**Complete directory backup** ✅ 2741**Easy to restore** ✅ 2742 2743### Conclusion 2744 2745The backup system is working perfectly. The file sizes are appropriate and expected: 2746- Compressed size: ~240KB (good compression) 2747- Uncompressed size: ~1MB (all source files) 2748- All files included: YES ✅ 2749- Growing size over versions: Normal (more features!) 2750 2751**Your backups are complete and reliable!** 2752 2753## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 2754 2755### Fixed: JavaScript Syntax Error in AJAX Function 2756- **Fixed:** ParseError on line 1947 (deleteBackup function) 2757- **Fixed:** Escaped all single quotes in JavaScript strings 2758- **Result:** AJAX backup deletion now works correctly! 2759 2760### What Was Wrong 2761 2762JavaScript inside PHP echo needs escaped quotes: 2763 2764**Before (broken)**: 2765```javascript 2766formData.append('action', 'delete_backup'); // PHP interprets quotes 2767``` 2768 2769**After (fixed)**: 2770```javascript 2771formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 2772``` 2773 2774### All Quotes Escaped 2775 2776Fixed in deleteBackup function: 2777- ✅ FormData.append() calls 2778- ✅ fetch() URL 2779- ✅ querySelector() calls 2780- ✅ createElement() call 2781- ✅ All string literals 2782- ✅ Error messages 2783 2784**JavaScript now works!** ✓ 2785 2786## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 2787 2788### Improved: Update Tab Further Refined 2789- **Moved:** Important Notes to very top (above upload) 2790- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 2791- **Added:** Smooth fade-out animation when deleting backups 2792- **Added:** Success message after deletion 2793- **Auto-remove:** Backup section disappears if last backup deleted 2794- **Result:** Smoother, more polished experience! 2795 2796### New Layout Order 2797 2798**Final Order (v5.1.2)**: 2799``` 28001. ⚠️ Important Notes (warnings at top) 28012. Upload New Version (with Clear Cache button) 28023. Current Version (info) 28034. Recent Changes (changelog) 28045. Available Backups (if any) 2805``` 2806 2807### AJAX Backup Deletion 2808 2809**Before (v5.1.1)**: 2810- Click Delete → Page refreshes → Scroll back down 2811- Lose position on page 2812- Page reload is jarring 2813 2814**After (v5.1.2)**: 2815- Click Delete → Confirm 2816- Row fades out smoothly 2817- Row disappears 2818- Success message shows at top 2819- Success message fades after 3 seconds 2820- If last backup: entire section fades away 2821- **No page refresh!** ✓ 2822 2823### Visual Flow 2824 2825**Delete Animation**: 2826``` 28271. Click ️ Delete 28282. Confirm dialog 28293. Row fades out (0.3s) 28304. Row removed 28315. Success message appears 28326. Message fades after 3s 2833``` 2834 2835**If Last Backup**: 2836``` 28371. Delete last backup 28382. Row fades out 28393. Entire "Available Backups" section fades 28404. Section removed 28415. Clean interface ✓ 2842``` 2843 2844### Success Message 2845 2846After deleting: 2847``` 2848┌──────────────────────────────┐ 2849│ ✓ Backup deleted: filename │ ← Appears at top 2850└──────────────────────────────┘ 2851 Fades after 3 seconds 2852``` 2853 2854### Benefits 2855 2856**Important Notes First**: 2857- Warnings before actions ✓ 2858- Read before uploading ✓ 2859- Clear expectations ✓ 2860 2861**AJAX Deletion**: 2862- No page refresh ✓ 2863- Smooth animations ✓ 2864- Stay in context ✓ 2865- Professional feel ✓ 2866 2867**Auto-Cleanup**: 2868- Empty list disappears ✓ 2869- Clean interface ✓ 2870- No clutter ✓ 2871 2872### Technical Implementation 2873 2874**AJAX Request**: 2875```javascript 2876fetch('?do=admin&page=calendar&tab=update', { 2877 method: 'POST', 2878 body: formData 2879}) 2880``` 2881 2882**DOM Manipulation**: 2883- Fade out row 2884- Remove element 2885- Show success 2886- Remove section if empty 2887 2888**Smooth Transitions**: 2889- 300ms fade animations 2890- Clean visual feedback 2891- Professional polish 2892 2893## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 2894 2895### Improved: Update Tab Layout Reorganized 2896- **Moved:** Upload section to the top of the page 2897- **Added:** Clear Cache button next to Upload & Install button 2898- **Changed:** "Current Version" section moved below upload 2899- **Result:** Better workflow - upload first, then see version info! 2900 2901### New Layout Order 2902 2903**Before (v5.1.0)**: 2904``` 29051. Clear Cache (standalone) 29062. Current Version 29073. Recent Changes 29084. Upload New Version 29095. Warning Box 29106. Backups 2911``` 2912 2913**After (v5.1.1)**: 2914``` 29151. Upload New Version (with Clear Cache button side-by-side) 29162. Warning Box 29173. Current Version 29184. Recent Changes 29195. Backups 2920``` 2921 2922### Visual Result 2923 2924**Top of Update Tab**: 2925``` 2926┌─────────────────────────────────┐ 2927│ Upload New Version │ 2928│ ┌─────────────────────────────┐ │ 2929│ │ [Choose File] │ │ 2930│ │ ☑ Create backup first │ │ 2931│ │ ┌──────────────┬──────────┐ │ │ 2932│ │ │ Upload & │️ Clear │ │ │ 2933│ │ │ Install │ Cache │ │ │ 2934│ │ └──────────────┴──────────┘ │ │ 2935│ └─────────────────────────────┘ │ 2936│ │ 2937│ ⚠️ Important Notes │ 2938│ • Will replace all files │ 2939│ • Config preserved │ 2940│ │ 2941│ Current Version │ 2942│ Version: 5.1.1 │ 2943└─────────────────────────────────┘ 2944``` 2945 2946### Benefits 2947 2948**Better Workflow**: 2949- Primary action (upload) is first 2950- Clear cache conveniently next to install 2951- No scrolling to find upload button 2952- Logical top-to-bottom flow 2953 2954**Side-by-Side Buttons**: 2955- Upload & Install (green) 2956- Clear Cache (orange) 2957- Both common actions together 2958- Easy to access after upload 2959 2960**Improved UX**: 2961- Upload is most important → now at top 2962- Version info is reference → moved down 2963- Related actions grouped 2964- Cleaner organization 2965 2966### Button Layout 2967 2968``` 2969┌──────────────────┬──────────────┐ 2970│ Upload & │ ️ Clear │ 2971│ Install │ Cache │ 2972│ (Green) │ (Orange) │ 2973└──────────────────┴──────────────┘ 2974``` 2975 2976**Green = Primary Action** 2977**Orange = Secondary Action** 2978 2979Both easily accessible! 2980 2981## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 2982 2983### Changed: Admin Section Backgrounds Now Use __background__ 2984- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 2985- **Result:** Cleaner, more unified admin interface! 2986 2987### Background Usage Update 2988 2989**Before (v5.0.9)**: 2990```php 2991Section boxes: bg_alt (__background_alt__) 2992Content areas: bg (__background__) 2993``` 2994 2995**After (v5.1.0)**: 2996```php 2997Section boxes: bg (__background__) 2998Content areas: bg (__background__) 2999``` 3000 3001### Why This Change? 3002 3003**More unified appearance**: 3004- Sections and content use same background 3005- Creates cleaner, more cohesive look 3006- Borders provide visual separation 3007- Matches typical admin UI patterns 3008 3009**Template color hierarchy**: 3010``` 3011__background_site__ → Outer page wrapper 3012__background__ → Content & sections (BOTH now use this) 3013__background_alt__ → Reserved for special panels/highlights 3014__background_neu__ → Special highlights 3015``` 3016 3017### Visual Result 3018 3019**Light Template**: 3020```ini 3021__background__ = "#ffffff" 3022__background_alt__ = "#e8e8e8" 3023``` 3024 3025**Before**: 3026``` 3027Admin Page: 3028┌─────────────────────┐ 3029│ ┌─────────────────┐ │ 3030│ │ Section Box │ │ ← Gray (#e8e8e8) 3031│ │ ┌─────────────┐ │ │ 3032│ │ │ Content │ │ │ ← White (#fff) 3033│ │ └─────────────┘ │ │ 3034│ └─────────────────┘ │ 3035└─────────────────────┘ 3036Two-tone appearance 3037``` 3038 3039**After**: 3040``` 3041Admin Page: 3042┌─────────────────────┐ 3043│ ┌─────────────────┐ │ 3044│ │ Section Box │ │ ← White (#fff) 3045│ │ ┌─────────────┐ │ │ 3046│ │ │ Content │ │ │ ← White (#fff) 3047│ │ └─────────────┘ │ │ 3048│ └─────────────────┘ │ 3049└─────────────────────┘ 3050Unified, clean appearance 3051Borders provide separation 3052``` 3053 3054**Dark Template**: 3055```ini 3056__background__ = "#2d2d2d" 3057__background_alt__ = "#3a3a3a" 3058``` 3059 3060**After**: 3061``` 3062Admin Page: 3063┌─────────────────────┐ 3064│ ┌─────────────────┐ │ 3065│ │ Section Box │ │ ← Dark (#2d2d2d) 3066│ │ ┌─────────────┐ │ │ 3067│ │ │ Content │ │ │ ← Dark (#2d2d2d) 3068│ │ └─────────────┘ │ │ 3069│ └─────────────────┘ │ 3070└─────────────────────┘ 3071Unified dark appearance 3072Accent borders provide definition 3073``` 3074 3075### Benefits 3076 3077**Cleaner Look**: 3078- No more alternating gray/white 3079- More professional appearance 3080- Less visual noise 3081- Unified color scheme 3082 3083**Better Consistency**: 3084- Matches modern admin UI patterns 3085- Borders define sections, not colors 3086- Simpler, cleaner design 3087- Easier on the eyes 3088 3089**Template Friendly**: 3090- Works with any background color 3091- Light or dark templates 3092- Custom colors 3093- Always looks cohesive 3094 3095### All Sections Updated 3096 3097✅ Outlook Sync config sections 3098✅ Manage Events sections 3099✅ Update Plugin sections 3100✅ Themes tab sections 3101✅ Week start day section 3102✅ All form sections 3103 3104**Complete unified theming!** 3105 3106## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 3107 3108### Fixed: Syntax Error in Theme Cards 3109- **Fixed:** ParseError on line 4461 (Purple theme card) 3110- **Fixed:** Malformed ternary expressions from sed replacement 3111- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 3112- **Result:** Admin pages work correctly! 3113 3114### What Was Wrong 3115 3116The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 3117 3118**Before (broken)**: 3119```php 3120? '#9b59b6' : ' . $colors['border'] . ') 3121// Extra quote and dot created syntax error 3122``` 3123 3124**After (fixed)**: 3125```php 3126? '#9b59b6' : $colors['border']) 3127// Clean ternary expression 3128``` 3129 3130### All Theme Cards Fixed 3131 3132- ✅ Purple Dream card 3133- ✅ Professional Blue card 3134- ✅ Pink Bling card 3135- ✅ Wiki Default card 3136 3137### Now Working 3138 3139**Theme selection page loads** ✓ 3140**All cards display properly** ✓ 3141**Template colors applied** ✓ 3142**No syntax errors** ✓ 3143 3144## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 3145 3146### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 3147- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 3148- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 3149- **Fixed:** Theme selection cards use template backgrounds 3150- **Fixed:** Week start options use template backgrounds 3151- **Result:** Perfect color mapping throughout admin! 3152 3153### Color Mapping Correction 3154 3155**Before (v5.0.7)**: 3156```php 3157bg: __background_site__ // Wrong - this is outer page bg 3158bg_alt: __background_alt__ 3159``` 3160 3161**After (v5.0.8)**: 3162```php 3163bg: __background__ // Correct - main content bg 3164bg_alt: __background_alt__ 3165``` 3166 3167### Why This Matters 3168 3169**Template color hierarchy**: 3170``` 3171__background_site__ → Outer page/site background 3172__background__ → Main content area (CORRECT for admin) 3173__background_alt__ → Sections/panels 3174__background_neu__ → Highlights 3175``` 3176 3177**Admin should use**: 3178- `__background__` for input fields, content areas 3179- `__background_alt__` for section boxes, panels 3180 3181### Themes Tab Fixed 3182 3183**Removed all hardcoded colors**: 3184```php 3185Before: '#ddd', '#fff', '#dee2e6' 3186After: $colors['border'], $colors['bg'], $colors['border'] 3187``` 3188 3189**Now themed**: 3190- ✅ Week start section background 3191- ✅ Week start option backgrounds 3192- ✅ Theme card backgrounds 3193- ✅ Theme card borders 3194- ✅ All borders throughout 3195 3196### Visual Result 3197 3198**Light Template**: 3199```ini 3200__background__ = "#ffffff" 3201__background_alt__ = "#e8e8e8" 3202``` 3203 3204**Admin Before (v5.0.7)**: 3205``` 3206Input fields: #f5f5f5 (site bg - wrong) 3207Sections: #e8e8e8 (alt bg - correct) 3208``` 3209 3210**Admin After (v5.0.8)**: 3211``` 3212Input fields: #ffffff (content bg - correct!) 3213Sections: #e8e8e8 (alt bg - correct!) 3214``` 3215 3216**Dark Template**: 3217```ini 3218__background__ = "#2d2d2d" 3219__background_alt__ = "#3a3a3a" 3220``` 3221 3222**Admin After (v5.0.8)**: 3223``` 3224Input fields: #2d2d2d (content bg - perfect!) 3225Sections: #3a3a3a (alt bg - perfect!) 3226``` 3227 3228### Complete Themes Tab 3229 3230**Week Start Options**: 3231``` 3232┌─────────────────────────┐ 3233│ Week Start Day │ ← bg_alt 3234│ ┌─────────┬───────────┐ │ 3235│ │ Monday │ Sunday │ │ ← bg (when not selected) 3236│ └─────────┴───────────┘ │ 3237└─────────────────────────┘ 3238``` 3239 3240**Theme Cards**: 3241``` 3242┌─────────────────────────┐ 3243│ Matrix Edition │ ← bg (when not selected) 3244│ Classic green theme │ border (when not selected) 3245└─────────────────────────┘ 3246 3247┌═════════════════════════┐ 3248│ Purple Dream │ ← rgba green tint (when selected) 3249│ Elegant purple theme │ #00cc07 border (when selected) 3250└═════════════════════════┘ 3251``` 3252 3253### Perfect Integration 3254 3255**All admin pages now**: 3256- Content areas: `__background__` ✓ 3257- Section boxes: `__background_alt__` ✓ 3258- Borders: `__border__` ✓ 3259- Text: `__text__` ✓ 3260 3261**Matches wiki perfectly**: 3262- Same white content areas 3263- Same gray section boxes 3264- Same border colors 3265- Same text colors 3266 3267### No More Issues 3268 3269**Fixed**: 3270- ❌ Site background on content areas → ✅ Content background 3271- ❌ Hardcoded white on themes tab → ✅ Template background 3272- ❌ Hardcoded borders (#ddd) → ✅ Template borders 3273 3274**Result**: 3275- Perfect color hierarchy ✓ 3276- Correct background levels ✓ 3277- Complete template integration ✓ 3278 3279## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 3280 3281### Fixed: All Admin Backgrounds Use Template Colors 3282- **Fixed:** All section backgrounds use `__background_alt__` 3283- **Fixed:** All content backgrounds use `__background__` 3284- **Fixed:** All borders use `__border__` 3285- **Fixed:** All text uses `__text__` 3286- **Result:** Complete admin template integration! 3287 3288### All Replacements 3289 3290**Backgrounds**: 3291```php 3292Before: background: #f9f9f9 3293After: background: ' . $colors['bg_alt'] . ' 3294 3295Before: background: #fff / background: white 3296After: background: ' . $colors['bg'] . ' 3297``` 3298 3299**Borders**: 3300```php 3301Before: border: 1px solid #ddd 3302Before: border: 1px solid #e0e0e0 3303Before: border: 1px solid #eee 3304After: border: 1px solid ' . $colors['border'] . ' 3305``` 3306 3307**Text**: 3308```php 3309Before: color: #333 3310Before: color: #666 3311After: color: ' . $colors['text'] . ' 3312``` 3313 3314### Complete Admin Coverage 3315 3316**All tabs now themed**: 3317- ✅ Manage Events tab 3318- ✅ Update Plugin tab 3319- ✅ Outlook Sync tab 3320- ✅ Themes tab 3321- ✅ Tab navigation 3322- ✅ All sections 3323- ✅ All inputs 3324- ✅ All borders 3325- ✅ All text 3326 3327### Visual Result 3328 3329**Light Template**: 3330``` 3331Admin Page: 3332┌──────────────────────────┐ 3333│ Tab Navigation │ ← Template borders 3334├──────────────────────────┤ 3335│ Section Headers │ ← bg_alt (light gray) 3336│ ┌──────────────────────┐ │ 3337│ │ Form Inputs │ │ ← bg (white) 3338│ │ Content Areas │ │ 3339│ └──────────────────────┘ │ 3340└──────────────────────────┘ 3341All template colors! ✓ 3342``` 3343 3344**Dark Template**: 3345``` 3346Admin Page: 3347┌──────────────────────────┐ 3348│ Tab Navigation │ ← Template borders 3349├──────────────────────────┤ 3350│ Section Headers │ ← bg_alt (dark gray) 3351│ ┌──────────────────────┐ │ 3352│ │ Form Inputs │ │ ← bg (darker) 3353│ │ Content Areas │ │ 3354│ └──────────────────────┘ │ 3355└──────────────────────────┘ 3356All template colors! ✓ 3357``` 3358 3359### Template Color Mapping 3360 3361**Used throughout admin**: 3362``` 3363__background_site__ → $colors['bg'] (main backgrounds) 3364__background_alt__ → $colors['bg_alt'] (section backgrounds) 3365__text__ → $colors['text'] (all text) 3366__border__ → $colors['border'] (all borders) 3367__link__ → $colors['link'] (links - future) 3368``` 3369 3370### Examples by Section 3371 3372**Manage Events**: 3373- Event list backgrounds: `bg_alt` 3374- Event item backgrounds: `bg` 3375- Borders: `border` 3376- Text: `text` 3377 3378**Update Plugin**: 3379- Section backgrounds: `bg_alt` 3380- Content areas: `bg` 3381- Borders: `border` 3382- Text: `text` 3383 3384**Outlook Sync**: 3385- Config sections: `bg_alt` 3386- Input fields: `bg` 3387- Borders: `border` 3388- Labels: `text` 3389 3390**Themes Tab**: 3391- Theme cards: `bg_alt` 3392- Preview areas: `bg` 3393- Borders: `border` 3394- Descriptions: `text` 3395 3396### Benefits 3397 3398**Seamless Integration**: 3399- Matches wiki admin area perfectly 3400- Same colors throughout wiki 3401- Professional appearance 3402- Consistent experience 3403 3404**Automatic Adaptation**: 3405- Light templates: Light admin 3406- Dark templates: Dark admin 3407- Custom templates: Uses custom colors 3408 3409**No White Boxes**: 3410- Every background themed 3411- Every border themed 3412- Every text themed 3413- Complete consistency 3414 3415### PERFECT HARMONY 3416 3417**Frontend (Calendar)**: 3418- Wiki theme uses style.ini ✓ 3419- Perfect template match ✓ 3420 3421**Backend (Admin)**: 3422- Reads same style.ini ✓ 3423- Perfect template match ✓ 3424 3425**Complete Unity**: 3426- Same colors everywhere ✓ 3427- Seamless experience ✓ 3428- Professional polish ✓ 3429 3430## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 3431 3432### Enhanced: Month/Year Header & Admin Pages Use Template Colors 3433- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 3434- **Added:** Admin pages read template's style.ini file 3435- **Added:** `getTemplateColors()` function in admin class 3436- **Fixed:** Tab navigation uses template text and border colors 3437- **Result:** Complete template integration everywhere! 3438 3439### Month/Year Header 3440 3441**Before**: 3442```php 3443color: __text__ // Same as primary text 3444``` 3445 3446**After (Wiki Theme)**: 3447```php 3448color: __text_neu__ // Dimmed text (subtle) 3449``` 3450 3451### Admin Pages Enhancement 3452 3453**New `getTemplateColors()` function**: 3454- Reads template's style.ini file 3455- Extracts color replacements 3456- Provides colors to all admin tabs 3457- Falls back to sensible defaults 3458 3459**Colors used**: 3460```php 3461bg: __background_site__ 3462bg_alt: __background_alt__ 3463text: __text__ 3464border: __border__ 3465link: __link__ 3466``` 3467 3468**Applied to**: 3469- Tab navigation borders 3470- Tab text colors 3471- All admin sections 3472- Ready for future enhancements 3473 3474### Visual Result 3475 3476**Calendar Header**: 3477``` 3478┌────────────────────┐ 3479│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 3480└────────────────────┘ 3481Subtle and elegant ✓ 3482``` 3483 3484**Admin Navigation**: 3485``` 3486 Manage Events | Update | ⚙️ Config | Themes 3487───────────────────────────────────────────────── 3488Active tab: Green (#00cc07) 3489Inactive tabs: Template text color 3490Border: Template border color 3491``` 3492 3493### Template Integration 3494 3495**Light Template**: 3496```ini 3497__text_neu__ = "#666666" 3498__border__ = "#cccccc" 3499``` 3500**Result**: 3501- Month/Year: Medium gray (subtle) 3502- Admin borders: Light gray 3503- Tab text: Dark gray 3504 3505**Dark Template**: 3506```ini 3507__text_neu__ = "#999999" 3508__border__ = "#555555" 3509``` 3510**Result**: 3511- Month/Year: Light gray (subtle) 3512- Admin borders: Medium gray 3513- Tab text: Bright gray 3514 3515### Benefits 3516 3517**Calendar Frontend**: 3518- Month/Year header more subtle 3519- Better visual hierarchy 3520- Less prominent, more elegant 3521 3522**Admin Backend**: 3523- Uses template colors 3524- Matches wiki admin area 3525- Consistent experience 3526- Professional appearance 3527 3528### Future-Ready 3529 3530The `getTemplateColors()` function is now available for: 3531- ✅ Tab navigation (implemented) 3532- Section backgrounds (ready) 3533- Button colors (ready) 3534- Input fields (ready) 3535- Success/error messages (ready) 3536 3537**Foundation laid for complete admin theming!** 3538 3539## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 3540 3541### Fixed: Add Event Bar & Section Headers Use Template Colors 3542- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 3543- **Fixed:** "Today" header uses `__text_neu__` 3544- **Fixed:** "Tomorrow" header uses `__text__` 3545- **Fixed:** "Important Events" header uses `__border__` 3546- **Result:** Perfect template color integration! 3547 3548### All Changes 3549 3550**Add Event Bar (Wiki Theme)**: 3551 3552**Before**: 3553```php 3554background: #3498db // Generic blue 3555``` 3556 3557**After**: 3558```php 3559background: __background_alt__ // Template alternate bg 3560text: __text__ // Template text color 3561hover: __background_neu__ // Template neutral bg 3562``` 3563 3564**Section Headers (Wiki Theme)**: 3565 3566**Before**: 3567```php 3568Today: #ff9800 // Orange 3569Tomorrow: #4caf50 // Green 3570Important Events: #9b59b6 // Purple 3571``` 3572 3573**After**: 3574```php 3575Today: __text_neu__ // Template dimmed text 3576Tomorrow: __text__ // Template primary text 3577Important Events: __border__ // Template border color 3578``` 3579 3580### Visual Result 3581 3582**Wiki Default Theme**: 3583``` 3584Add Event Bar: 3585┌────────────────┐ 3586│ + ADD EVENT │ ← Template alt background 3587└────────────────┘ 3588 3589Sections: 3590━━━━━━━━━━━━━━━━ 3591Today ← Dimmed text color (__text_neu__) 3592• Team Meeting 3593 3594Tomorrow ← Primary text color (__text__) 3595• Code Review 3596 3597Important Events ← Border color (__border__) 3598• Project Deadline 3599``` 3600 3601### Example with DokuWiki Default Template 3602 3603**Template colors**: 3604```ini 3605__background_alt__ = "#e8e8e8" 3606__text__ = "#333333" 3607__text_neu__ = "#666666" 3608__border__ = "#cccccc" 3609``` 3610 3611**Calendar result**: 3612``` 3613Add Event Bar: Light gray (#e8e8e8) 3614Today header: Medium gray (#666666) 3615Tomorrow header: Dark gray (#333333) 3616Important Events header: Border gray (#cccccc) 3617``` 3618 3619### Example with Dark Template 3620 3621**Template colors**: 3622```ini 3623__background_alt__ = "#2d2d2d" 3624__text__ = "#e0e0e0" 3625__text_neu__ = "#999999" 3626__border__ = "#555555" 3627``` 3628 3629**Calendar result**: 3630``` 3631Add Event Bar: Dark gray (#2d2d2d) 3632Today header: Light gray (#999999) 3633Tomorrow header: Bright gray (#e0e0e0) 3634Important Events header: Medium gray (#555555) 3635``` 3636 3637### Perfect Harmony 3638 3639All sidebar elements now use template colors: 3640- ✅ Add Event bar background 3641- ✅ Add Event bar text 3642- ✅ Today section header 3643- ✅ Tomorrow section header 3644- ✅ Important Events header 3645- ✅ Calendar cells 3646- ✅ Grid backgrounds 3647- ✅ All borders 3648 3649**Complete template integration!** 3650 3651## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 3652 3653### Fixed: Calendar Cells Use Correct Template Color 3654- **Fixed:** Calendar cells now use `__background__` from template 3655- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 3656- **Result:** Calendar cells match main content area background! 3657 3658### Color Mapping Update 3659 3660**Before (v5.0.3)**: 3661```php 3662cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 3663``` 3664 3665**After (v5.0.4)**: 3666```php 3667cell_bg: __background__ // Correct - main content background 3668``` 3669 3670### Template Color Usage 3671 3672**Wiki Default theme now uses**: 3673``` 3674__background_site__ → Overall page background 3675__background__ → Calendar cells (main content bg) 3676__background_alt__ → Grid background, headers 3677__background_neu__ → Today cell highlight 3678__text__ → Primary text 3679__text_neu__ → Dimmed text 3680__link__ → Links, bright text 3681__border__ → All borders 3682``` 3683 3684### Visual Result 3685 3686**Before**: 3687``` 3688Calendar with template colors: 3689┌─────┬─────┬─────┐ 3690│ Mon │ Tue │ Wed │ 3691├─────┼─────┼─────┤ 3692│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 3693└─────┴─────┴─────┘ 3694``` 3695 3696**After**: 3697``` 3698Calendar with template colors: 3699┌─────┬─────┬─────┐ 3700│ Mon │ Tue │ Wed │ 3701├─────┼─────┼─────┤ 3702│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 3703└─────┴─────┴─────┘ 3704``` 3705 3706### Example Template Colors 3707 3708**DokuWiki Default**: 3709```ini 3710__background__ = "#ffffff" 3711``` 3712**Result**: White calendar cells ✓ 3713 3714**Dark Template**: 3715```ini 3716__background__ = "#2d2d2d" 3717``` 3718**Result**: Dark calendar cells ✓ 3719 3720**Custom Template**: 3721```ini 3722__background__ = "#f9f9f9" 3723``` 3724**Result**: Custom color cells ✓ 3725 3726### Perfect Matching 3727 3728Calendar cells now match: 3729- ✅ Main content area background 3730- ✅ Article/page background 3731- ✅ Content box background 3732- ✅ Same as wiki text background 3733 3734**Seamless integration!** 3735 3736## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 3737 3738### Enhanced: Wiki Default Theme Reads Template Colors 3739- **Added:** Function to read colors from DokuWiki template's style.ini file 3740- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 3741- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 3742- **Uses:** Actual template colors instead of CSS variables 3743- **Result:** Perfect color matching with any DokuWiki template! 3744 3745### How It Works 3746 3747**New Function: `getWikiTemplateColors()`** 3748 37491. **Detects** current DokuWiki template name 37502. **Reads** the template's `style.ini` file 37513. **Parses** color replacements section 37524. **Maps** template colors to calendar theme 37535. **Falls back** to CSS variables if file not found 3754 3755### Colors Read from style.ini 3756 3757**Template color replacements used**: 3758```php 3759__background_site__ → bg, header_bg 3760__background_alt__ → grid_bg, cell_today_bg 3761__background_neu__ → cell_bg 3762__text__ → text_primary 3763__text_neu__ → text_dim 3764__link__ → text_bright 3765__border__ → border, grid_border 3766``` 3767 3768### Example style.ini Mapping 3769 3770**Template style.ini**: 3771```ini 3772[replacements] 3773__background_site__ = "#f8f9fa" 3774__background_alt__ = "#e9ecef" 3775__background_neu__ = "#dee2e6" 3776__text__ = "#212529" 3777__text_neu__ = "#6c757d" 3778__link__ = "#0d6efd" 3779__border__ = "#ced4da" 3780``` 3781 3782**Calendar theme result**: 3783```php 3784bg: #f8f9fa 3785header_bg: #e9ecef 3786grid_bg: #e9ecef 3787cell_bg: #dee2e6 3788text_primary: #212529 3789text_dim: #6c757d 3790text_bright: #0d6efd 3791border: #ced4da 3792grid_border: #ced4da 3793``` 3794 3795### Before vs After 3796 3797**Before (v5.0.2)**: 3798``` 3799Wiki Default theme used: 3800- CSS variables (var(--__background__, #fff)) 3801- Required browser CSS variable support 3802- Fallback to generic colors 3803``` 3804 3805**After (v5.0.3)**: 3806``` 3807Wiki Default theme uses: 3808- Actual colors from template's style.ini 3809- Exact template color values 3810- No CSS variable dependency 3811- Perfect color matching! 3812``` 3813 3814### File Location Priority 3815 3816Checks in order: 38171. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 38182. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 38193. Falls back to CSS variables if neither found 3820 3821### Benefits 3822 3823**More accurate colors**: 3824- Uses exact template color values ✓ 3825- No CSS variable interpolation ✓ 3826- Consistent across all browsers ✓ 3827 3828**Better compatibility**: 3829- Works with older browsers ✓ 3830- No CSS variable support needed ✓ 3831- Direct color values ✓ 3832 3833**Perfect matching**: 3834- Reads template's actual colors ✓ 3835- Same colors as wiki pages ✓ 3836- Seamless integration ✓ 3837 3838### Template Examples 3839 3840**DokuWiki Default Template**: 3841``` 3842Reads: lib/tpl/dokuwiki/style.ini 3843Gets: Default DokuWiki colors 3844Result: Perfect classic DokuWiki look 3845``` 3846 3847**Bootstrap Template**: 3848``` 3849Reads: lib/tpl/bootstrap3/style.ini 3850Gets: Bootstrap color scheme 3851Result: Perfect Bootstrap integration 3852``` 3853 3854**Custom Template**: 3855``` 3856Reads: conf/tpl/mycustom/style.ini 3857Gets: Your custom colors 3858Result: Perfect custom theme match 3859``` 3860 3861### Fallback Chain 3862 38631. **Try** reading style.ini from template 38642. **If found** → Use exact colors from file 38653. **If not found** → Use CSS variables 38664. **If no CSS vars** → Use fallback colors 3867 3868**Always works, always matches!** ✓ 3869 3870## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 3871 3872### Fixed: Wiki Default Theme Day Panel Colors 3873- **Fixed:** Day popup panel now uses DokuWiki CSS variables 3874- **Fixed:** Panel background matches wiki theme 3875- **Fixed:** Panel header matches wiki theme 3876- **Fixed:** Border colors use wiki theme 3877- **Fixed:** Text colors use wiki theme 3878- **Result:** Perfect integration with DokuWiki templates! 3879 3880### All Changes 3881 3882**Day Panel Colors (Wiki Default)**: 3883 3884**Before**: 3885```php 3886background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 3887header: #3498db // Blue (wrong!) 3888``` 3889 3890**After**: 3891```php 3892background: var(--__background__, #fff) 3893header: var(--__background_alt__, #e8e8e8) 3894header_text: var(--__text__, #333) 3895border: var(--__border__, #ccc) 3896shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 3897``` 3898 3899**Event Colors (Wiki Default)**: 3900```php 3901event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 3902border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 3903bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 3904``` 3905 3906### Before vs After 3907 3908**Before (v5.0.1)**: 3909``` 3910Wiki Default - Click Week Cell: 3911┌────────────────┐ 3912│ Monday, Feb 8 │ ← Blue header (wrong) 3913├────────────────┤ 3914│ Team Meeting │ ← Dark gray bg (wrong) 3915│ 2:00 PM │ 3916└────────────────┘ 3917Doesn't match wiki theme 3918``` 3919 3920**After (v5.0.2)**: 3921``` 3922Wiki Default - Click Week Cell: 3923 3924Light Wiki Theme: 3925┌────────────────┐ 3926│ Monday, Feb 8 │ ← Light gray header ✓ 3927├────────────────┤ 3928│ Team Meeting │ ← White bg ✓ 3929│ 2:00 PM │ Dark text ✓ 3930└────────────────┘ 3931 3932Dark Wiki Theme: 3933┌────────────────┐ 3934│ Monday, Feb 8 │ ← Dark header ✓ 3935├────────────────┤ 3936│ Team Meeting │ ← Dark bg ✓ 3937│ 2:00 PM │ Light text ✓ 3938└────────────────┘ 3939 3940Perfectly matches wiki! 3941``` 3942 3943### CSS Variables Used 3944 3945**Wiki Default theme now uses**: 3946- `--__background__` - Main background (panel body) 3947- `--__background_alt__` - Alternate bg (panel header, events) 3948- `--__text__` - Text color (header text) 3949- `--__border__` - Border color (panel border, event borders) 3950 3951**With fallbacks**: 3952```css 3953var(--__background__, #fff) /* white fallback */ 3954var(--__background_alt__, #e8e8e8) /* light gray fallback */ 3955var(--__text__, #333) /* dark text fallback */ 3956var(--__border__, #ccc) /* gray border fallback */ 3957``` 3958 3959### Perfect Adaptation 3960 3961**Light Templates**: 3962- Light panel backgrounds ✓ 3963- Dark text ✓ 3964- Subtle borders ✓ 3965- Clean appearance ✓ 3966 3967**Dark Templates**: 3968- Dark panel backgrounds ✓ 3969- Light text ✓ 3970- Visible borders ✓ 3971- Perfect contrast ✓ 3972 3973**Custom Templates**: 3974- Uses template's CSS variables ✓ 3975- Automatic adaptation ✓ 3976- Seamless integration ✓ 3977 3978### Now Truly Adaptive 3979 3980Wiki Default theme now properly uses DokuWiki CSS variables for: 3981- ✅ Calendar grid 3982- ✅ Sidebar widget 3983- ✅ Event list 3984- ✅ **Day panel** ← v5.0.2! 3985- ✅ All backgrounds 3986- ✅ All text 3987- ✅ All borders 3988 3989**Complete wiki integration!** 3990 3991## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 3992 3993### Enhanced: Time Conflict Tooltips Now Themed 3994- **Fixed:** Conflict tooltips now match calendar theme 3995- **Added:** Theme-aware background, border, text colors 3996- **Added:** Theme-aware shadow effects 3997- **Result:** Complete visual consistency! 3998 3999### Tooltip Theming 4000 4001**Now uses theme colors for**: 4002- Background: Theme background color 4003- Border: Theme border color 4004- Header text: Theme primary text color 4005- Item text: Theme dim text color 4006- Shadow: Theme shadow color 4007 4008### Before vs After 4009 4010**Before (v5.0.0)**: 4011``` 4012Hover ⚠️ badge: 4013┌─────────────────┐ 4014│ ⚠️ Time Conflicts│ ← Default colors 4015│ • Event A │ 4016│ • Event B │ 4017└─────────────────┘ 4018``` 4019 4020**After (v5.0.1)**: 4021``` 4022Matrix Theme: 4023┌─────────────────┐ 4024│ ⚠️ Time Conflicts│ ← Green header 4025│ • Event A │ ← Green text 4026│ • Event B │ Dark green bg 4027└─────────────────┘ 4028 4029Purple Theme: 4030┌─────────────────┐ 4031│ ⚠️ Time Conflicts│ ← Purple header 4032│ • Event A │ ← Purple text 4033│ • Event B │ Dark purple bg 4034└─────────────────┘ 4035 4036Professional Theme: 4037┌─────────────────┐ 4038│ ⚠️ Time Conflicts│ ← Blue header 4039│ • Event A │ ← Dark text 4040│ • Event B │ Light bg 4041└─────────────────┘ 4042 4043Pink Theme: 4044┌─────────────────┐ 4045│ ⚠️ Time Conflicts│ ← Pink header ✨ 4046│ • Event A │ ← Pink text 4047│ • Event B │ Dark pink bg 4048└─────────────────┘ 4049 4050Wiki Default: 4051┌─────────────────┐ 4052│ ⚠️ Time Conflicts│ ← Adapts to wiki 4053│ • Event A │ ← Wiki colors 4054│ • Event B │ 4055└─────────────────┘ 4056``` 4057 4058### Now 100% Complete 4059 4060**Every tooltip themed**: 4061- ✅ Conflict tooltips 4062- ✅ All other tooltips (if any) 4063- ✅ Perfect consistency 4064 4065**Absolute perfection!** ✨ 4066 4067## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 4068 4069### Major Milestone: Version 5.0 4070 4071This 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. 4072 4073### Complete Feature Set 4074 4075**5 Beautiful Themes**: 4076- Matrix Edition (Green with glow) 4077- Purple Dream (Elegant purple) 4078- Professional Blue (Clean and modern) 4079- Pink Bling (Maximum sparkle) 4080- Wiki Default (Auto-adapts to your DokuWiki theme) 4081 4082**100% Theme Coverage**: 4083- ✅ Calendar grid and cells 4084- ✅ Event boxes and borders 4085- ✅ Sidebar widget 4086- ✅ Event list panel 4087- ✅ Search functionality 4088- ✅ Edit/Add dialogs (complete) 4089- ✅ Day popup dialogs 4090- ✅ Month picker 4091- ✅ All text (primary, dim, bright) 4092- ✅ All buttons 4093- ✅ All inputs and forms 4094- ✅ All checkboxes 4095- ✅ All borders 4096- ✅ All badges and labels 4097- ✅ Event highlight effects 4098 4099**Perfect Visual Consistency**: 4100- No white pixels anywhere 4101- No unthemed elements 4102- No default colors 4103- Complete visual unity 4104 4105### Major Improvements in v5.0 4106 41071. **Complete Dialog Theming** (v4.8.5-4.8.7) 4108 - Edit event dialog fully themed 4109 - Day popup dialog fully themed 4110 - All form inputs themed 4111 - All checkboxes themed 4112 - All buttons themed 4113 41142. **Event Box Border Perfection** (v4.8.6) 4115 - All 4 borders themed (top, right, bottom, left) 4116 - Sidebar event dividers themed 4117 - Past Events toggle border themed 4118 41193. **Checkbox Field Borders** (v4.9.0) 4120 - Repeating Event section border themed 4121 - Task checkbox section border themed 4122 41234. **Wiki Default Theme** (v4.10.0) 4124 - New 5th theme 4125 - Uses DokuWiki CSS variables 4126 - Auto-adapts to any wiki template 4127 - Perfect for seamless integration 4128 41295. **Clean Text Appearance** (v4.11.0) 4130 - Removed text glow from Matrix 4131 - Removed text glow from Purple 4132 - Removed text glow from Professional 4133 - Removed text glow from Wiki Default 4134 - Kept text glow on Pink Bling only 4135 41366. **Event Highlight Effects** (v4.12.0-4.12.1) 4137 - Theme-aware highlight glow 4138 - Click event bar → event glows 4139 - 3-second themed glow effect 4140 - Smooth animations 4141 4142### See RELEASE_NOTES.md for Complete Details 4143 4144For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 4145 4146## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 4147 4148### Fixed: Event Highlight Now Working 4149- **Fixed:** Used setProperty() to properly apply !important styles 4150- **Added:** Console logging for debugging 4151- **Fixed:** Proper style application with important flag 4152- **Result:** Highlight glow now works correctly! 4153 4154### Technical Fix 4155 4156**Before (not working)**: 4157```javascript 4158eventItem.style.background = color + ' !important'; // Doesn't work 4159``` 4160 4161**After (working)**: 4162```javascript 4163eventItem.style.setProperty('background', color, 'important'); // Works! 4164``` 4165 4166### Added Debug Logging 4167 4168Console now shows: 4169- "Highlighting event: [calId] [eventId] [date]" 4170- "Found event item: [element]" 4171- "Theme: [theme name]" 4172- "Highlight colors: [bg] [shadow]" 4173- "Applied highlight styles" 4174- "Removing highlight" (after 3 seconds) 4175 4176### Now Working 4177 4178Click any event bar → Event glows with theme colors ✓ 4179 4180## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 4181 4182### ✨ Enhanced: Event Click Highlight Now Theme-Aware 4183- **Fixed:** Restored event highlight glow when clicking calendar bars 4184- **Improved:** Highlight now matches each theme's colors 4185- **Added:** Stronger glow effect for better visibility 4186- **Duration:** 3 seconds with smooth fade 4187- **Result:** Beautiful themed highlights for all themes! 4188 4189### How It Works 4190 4191When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 4192 4193**Matrix Theme**: 4194```javascript 4195Background: Darker green (#1a3d1a) 4196Glow: Double green glow (0 0 20px + 0 0 40px) 4197Color: rgba(0, 204, 7, 0.8) 4198``` 4199 4200**Purple Theme**: 4201```javascript 4202Background: Darker purple (#3d2b4d) 4203Glow: Double purple glow 4204Color: rgba(155, 89, 182, 0.8) 4205``` 4206 4207**Professional Theme**: 4208```javascript 4209Background: Light blue (#e3f2fd) 4210Glow: Single blue glow 4211Color: rgba(74, 144, 226, 0.4) 4212``` 4213 4214**Pink Theme**: 4215```javascript 4216Background: Darker pink (#3d2030) 4217Glow: Double pink glow ✨ 4218Color: rgba(255, 20, 147, 0.8) 4219``` 4220 4221**Wiki Theme**: 4222```javascript 4223Background: var(--__background_neu__) 4224Glow: Blue glow (adapts to wiki) 4225Color: rgba(43, 115, 183, 0.4) 4226``` 4227 4228### Visual Examples 4229 4230**Matrix - Click Event**: 4231``` 4232Calendar: 4233┌─────────────┐ 4234│ 2:00 PM │ ← Click this bar 4235└─────────────┘ 4236 4237Event List: 4238╔═════════════════════╗ 4239║ Team Meeting ║ ← GLOWS GREEN 4240║ 2:00 PM ║ for 3 seconds 4241╚═════════════════════╝ 4242 ↑↑↑ Strong green glow ↑↑↑ 4243``` 4244 4245**Purple - Click Event**: 4246``` 4247Calendar: 4248┌─────────────┐ 4249│ 4:00 PM │ ← Click 4250└─────────────┘ 4251 4252Event List: 4253╔═════════════════════╗ 4254║ Code Review ║ ← GLOWS PURPLE 4255║ 4:00 PM ║ for 3 seconds 4256╚═════════════════════╝ 4257 ↑↑↑ Strong purple glow ↑↑↑ 4258``` 4259 4260**Pink - Click Event**: 4261``` 4262Calendar: 4263┌─────────────┐ 4264│ 1:00 PM │ ← Click 4265└─────────────┘ 4266 4267Event List: 4268╔═════════════════════╗ 4269║ Lunch Date ║ ← GLOWS PINK 4270║ 1:00 PM ✨ ║ for 3 seconds 4271╚═════════════════════╝ 4272 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 4273``` 4274 4275### Glow Specifications 4276 4277**Matrix**: 4278- Background: Dark green 4279- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 4280- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 4281- Effect: Strong green pulse 4282 4283**Purple**: 4284- Background: Dark purple 4285- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 4286- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 4287- Effect: Strong purple pulse 4288 4289**Professional**: 4290- Background: Light blue 4291- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 4292- Effect: Subtle blue glow 4293 4294**Pink**: 4295- Background: Dark pink 4296- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 4297- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 4298- Effect: MAXIMUM SPARKLE ✨ 4299 4300**Wiki**: 4301- Background: Theme neutral color 4302- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 4303- Effect: Adapts to wiki theme 4304 4305### User Experience 4306 4307**Click event bar** → Event highlights with themed glow 4308**Auto-scroll** → Event scrolls into view smoothly 4309**3 second glow** → Fade out after 3 seconds 4310**Smooth transition** → 0.3s ease-in-out 4311 4312### Perfect for Finding Events 4313 4314**Large event lists**: Quickly locate the clicked event ✓ 4315**Visual feedback**: Know which event you clicked ✓ 4316**Theme consistency**: Matches your chosen theme ✓ 4317**Smooth animation**: Professional appearance ✓ 4318 4319### All Themes Covered 4320 4321- ✅ Matrix: Green glow 4322- ✅ Purple: Purple glow 4323- ✅ Professional: Blue glow 4324- ✅ Pink: Maximum pink sparkle 4325- ✅ Wiki: Adaptive glow 4326 4327**Click any event bar and watch it glow!** ✨ 4328 4329## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 4330 4331### Changed: Text Glow Now Pink-Only 4332- **Removed:** Text shadow/glow from Matrix theme 4333- **Removed:** Text shadow/glow from Purple theme 4334- **Removed:** Text shadow/glow from Professional theme (already had none) 4335- **Removed:** Text shadow/glow from Wiki Default theme 4336- **Kept:** Text shadow/glow ONLY on Pink Bling theme 4337- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 4338 4339### All Changes 4340 4341**Before (Matrix, Purple)**: 4342```css 4343text-shadow: 0 0 2px $text_color; /* Glow effect */ 4344``` 4345 4346**After (Matrix, Purple, Professional, Wiki)**: 4347```css 4348text-shadow: none; /* Clean, no glow */ 4349``` 4350 4351**Pink Bling (unchanged)**: 4352```css 4353text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 4354``` 4355 4356### Text Shadow Removed From 4357 4358**Sidebar day numbers**: No glow ✓ 4359**Event titles**: No glow ✓ 4360**Event dates**: No glow ✓ 4361**Add Event button**: No glow ✓ 4362**Day popup events**: No glow ✓ 4363 4364### Before vs After 4365 4366**BEFORE (Matrix)**: 4367``` 4368Event Title ✨ ← Glowing green text 43692:00 PM ✨ ← Glowing text 4370``` 4371 4372**AFTER (Matrix)**: 4373``` 4374Event Title ← Clean green text 43752:00 PM ← Clean text 4376``` 4377 4378**Pink Bling (Still Glows)**: 4379``` 4380Event Title ✨ ← Still glowing! 43812:00 PM ✨ ← Maximum sparkle! 4382``` 4383 4384### Theme Appearances 4385 4386** Matrix Edition**: 4387- Clean green text 4388- No glow effects 4389- Professional appearance 4390- Still has border glow 4391 4392** Purple Dream**: 4393- Clean purple text 4394- No glow effects 4395- Elegant appearance 4396- Still has border glow 4397 4398** Professional Blue**: 4399- Clean text (unchanged) 4400- No glow effects 4401- Modern appearance 4402 4403** Pink Bling**: 4404- Glowing pink text ✨ 4405- Maximum glow effects 4406- Sparkle everywhere! 4407- All the bling! 4408 4409** Wiki Default**: 4410- Clean text 4411- No glow effects 4412- Matches wiki theme 4413 4414### Glow Effects Remaining 4415 4416**Border/box glow**: Still present on all themes ✓ 4417**Pink text glow**: Only on Pink Bling ✓ 4418**Shadow effects**: Still on buttons/boxes ✓ 4419 4420**Only TEXT glow removed from non-pink themes!** 4421 4422### Result 4423 4424**Cleaner, more professional look** for: 4425- Matrix ✓ 4426- Purple ✓ 4427- Professional ✓ 4428- Wiki Default ✓ 4429 4430**Maximum sparkle** for: 4431- Pink Bling ✨✓ 4432 4433**Best of both worlds!** 4434 4435## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 4436 4437### New: Wiki Default Theme 4438- **Added:** 5th theme that automatically matches your DokuWiki template 4439- **Uses:** CSS variables from your wiki theme 4440- **Adapts:** Automatically works with light and dark themes 4441- **Perfect:** Seamless integration with any DokuWiki template 4442 4443### How It Works 4444 4445**Wiki theme uses DokuWiki CSS variables**: 4446```css 4447bg: var(--__background_site__, #f5f5f5) 4448border: var(--__border__, #ccc) 4449text_primary: var(--__text__, #333) 4450text_bright: var(--__link__, #2b73b7) 4451text_dim: var(--__text_neu__, #666) 4452cell_bg: var(--__background__, #fff) 4453grid_border: var(--__border__, #ccc) 4454``` 4455 4456**With fallbacks for older DokuWiki versions**: 4457- If CSS variables exist → Use them ✓ 4458- If not available → Use fallback values ✓ 4459 4460### All 5 Themes 4461 4462**1. Matrix Edition** (Default) 4463- Dark green with neon glow 4464- Matrix-style effects 4465- Original theme 4466 4467**2. Purple Dream** 4468- Rich purple with violet accents 4469- Elegant and sophisticated 4470- Soft glow effects 4471 4472**3. Professional Blue** 4473- Clean blue and grey 4474- Modern professional 4475- No glow effects 4476 4477**4. Pink Bling** 4478- Glamorous hot pink 4479- Maximum sparkle ✨ 4480- Hearts and diamonds 4481 4482**5. Wiki Default** ← NEW! 4483- Matches your wiki template 4484- Auto-adapts to light/dark 4485- Perfect integration 4486 4487### Examples 4488 4489**Light Wiki Template**: 4490``` 4491Wiki Default theme shows: 4492- Light backgrounds (#f5f5f5) 4493- Dark text (#333) 4494- Light inputs (#fff) 4495- Gray borders (#ccc) 4496 4497Matches perfectly! ✓ 4498``` 4499 4500**Dark Wiki Template**: 4501``` 4502Wiki Default theme shows: 4503- Dark backgrounds (from template) 4504- Light text (from template) 4505- Dark inputs (from template) 4506- Dark borders (from template) 4507 4508Matches perfectly! ✓ 4509``` 4510 4511**Bootstrap Template**: 4512``` 4513Uses Bootstrap's colors 4514Matches perfectly! ✓ 4515``` 4516 4517**Material Template**: 4518``` 4519Uses Material's colors 4520Matches perfectly! ✓ 4521``` 4522 4523### CSS Variables Used 4524 4525**DokuWiki provides**: 4526- `--__background_site__`: Page background 4527- `--__background_alt__`: Section backgrounds 4528- `--__background__`: Content backgrounds 4529- `--__text__`: Primary text color 4530- `--__link__`: Link color 4531- `--__text_neu__`: Dimmed text 4532- `--__border__`: Border color 4533- `--__background_neu__`: Neutral background 4534 4535**All with fallbacks**: 4536```css 4537var(--__background_site__, #f5f5f5) 4538/* Falls back to light gray if variable doesn't exist */ 4539``` 4540 4541### Perfect for Every Template 4542 4543**Custom templates**: Automatically adapts ✓ 4544**Light themes**: Perfect match ✓ 4545**Dark themes**: Perfect match ✓ 4546**Any DokuWiki version**: Works with fallbacks ✓ 4547 4548### Complete Theme Collection 4549 4550Now with **5 gorgeous themes**: 4551- 3 dark themes (Matrix, Purple, Pink) 4552- 1 light theme (Professional) 4553- 1 adaptive theme (Wiki Default) ← NEW! 4554 4555**Something for everyone!** 4556 4557## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 4558 4559### Fixed: Checkbox Field Borders Themed 4560- **Fixed:** Added border-color to checkbox field divs 4561- **Fixed:** Repeating Event section border 4562- **Fixed:** Task checkbox section border 4563- **Result:** No white borders around checkboxes! 4564 4565### Changes 4566 4567**Checkbox Field Border Styling**: 4568 4569**Before**: 4570```html 4571<div class="form-field-checkbox" 4572 style="background: $bg !important;"> 4573<!-- Border shows white ✗ --> 4574``` 4575 4576**After**: 4577```php 4578<div class="form-field-checkbox" 4579 style="background: $bg !important; 4580 border-color: $grid_border !important;"> 4581<!-- Border themed ✓ --> 4582``` 4583 4584### Before vs After 4585 4586**BEFORE (v4.8.8)**: 4587``` 4588Edit Dialog: 4589┌──────────────────┐ 4590│ ☑ Repeating ║│ ← White border ✗ 4591└──────────────────┘ 4592┌──────────────────┐ 4593│ ☑ Task checkbox ║│ ← White border ✗ 4594└──────────────────┘ 4595``` 4596 4597**AFTER (v4.9.0)**: 4598``` 4599Matrix Edit Dialog: 4600┌──────────────────┐ 4601│ ☑ Repeating │ ← Green border ✓ 4602└──────────────────┘ 4603┌──────────────────┐ 4604│ ☑ Task checkbox │ ← Green border ✓ 4605└──────────────────┘ 4606``` 4607 4608### ABSOLUTE PERFECTION ACHIEVED 4609 4610**Every element themed**: 4611- ✅ All inputs 4612- ✅ All labels 4613- ✅ All sections 4614- ✅ **Checkbox field borders** ← v4.9.0! 4615- ✅ All buttons 4616- ✅ All checkboxes 4617- ✅ No white anywhere 4618 4619**100% COMPLETE!** ✨ 4620 4621## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4622 4623### Fixed: Checkbox Field Borders Themed 4624- **Fixed:** Added border-color to checkbox field divs 4625- **Fixed:** Repeating Event section border 4626- **Fixed:** Task checkbox section border 4627- **Result:** No white borders around checkboxes! 4628 4629### Fixed: Admin Sections Respect Wiki Theme 4630- **Fixed:** All admin backgrounds use CSS variables 4631- **Fixed:** Text colors use wiki text color 4632- **Fixed:** Borders use wiki border color 4633- **Result:** Admin matches wiki theme perfectly! 4634 4635### All Changes 4636 4637**1. Checkbox Field Border Styling**: 4638 4639**Before**: 4640```html 4641<div class="form-field-checkbox" 4642 style="background: $bg !important;"> 4643<!-- Border shows white ✗ --> 4644``` 4645 4646**After**: 4647```php 4648<div class="form-field-checkbox" 4649 style="background: $bg !important; 4650 border-color: $grid_border !important;"> 4651<!-- Border themed ✓ --> 4652``` 4653 4654**2. Admin CSS Variables**: 4655 4656**Added CSS variables for wiki theme compatibility**: 4657```css 4658.calendar-admin-wrapper { 4659 background: var(--__background_site__, #f5f5f5); 4660 color: var(--__text__, #333); 4661} 4662.calendar-admin-section { 4663 background: var(--__background_alt__, #fafafa); 4664} 4665.calendar-admin-input { 4666 background: var(--__background__, #fff); 4667 color: var(--__text__, #333); 4668} 4669``` 4670 4671**Replaced hardcoded colors**: 4672```php 4673// Before: 4674background: #f9f9f9 4675background: white 4676color: #333 4677border: 1px solid #ddd 4678 4679// After: 4680background: var(--__background_alt__, #f9f9f9) 4681background: var(--__background__, #fff) 4682color: var(--__text__, #333) 4683border: 1px solid var(--__border__, #ddd) 4684``` 4685 4686### Before vs After 4687 4688**BEFORE (v4.8.8)**: 4689``` 4690Edit Dialog: 4691┌──────────────────┐ 4692│ ☑ Repeating ║│ ← White border ✗ 4693└──────────────────┘ 4694┌──────────────────┐ 4695│ ☑ Task checkbox ║│ ← White border ✗ 4696└──────────────────┘ 4697 4698Admin Page (Dark Wiki Theme): 4699┌──────────────────┐ 4700│ Light sections │ ← White boxes ✗ 4701│ Light inputs │ ← Doesn't match ✗ 4702└──────────────────┘ 4703``` 4704 4705**AFTER (v4.8.9)**: 4706``` 4707Matrix Edit Dialog: 4708┌──────────────────┐ 4709│ ☑ Repeating │ ← Green border ✓ 4710└──────────────────┘ 4711┌──────────────────┐ 4712│ ☑ Task checkbox │ ← Green border ✓ 4713└──────────────────┘ 4714 4715Admin (Dark Wiki Theme): 4716┌──────────────────┐ 4717│ Dark sections │ ← Matches wiki ✓ 4718│ Dark inputs │ ← Perfect match ✓ 4719└──────────────────┘ 4720``` 4721 4722### Admin Theme Examples 4723 4724**Light Wiki Theme**: 4725``` 4726Admin page backgrounds: Light 4727Section boxes: Light gray 4728Inputs: White 4729Borders: Gray 4730Text: Dark 4731 4732Perfect match! ✓ 4733``` 4734 4735**Dark Wiki Theme**: 4736``` 4737Admin page backgrounds: Dark 4738Section boxes: Darker gray 4739Inputs: Dark 4740Borders: Dark gray 4741Text: Light 4742 4743Perfect match! ✓ 4744``` 4745 4746**DokuWiki Default**: 4747``` 4748Uses wiki's CSS variables 4749Automatically adapts 4750Always matches! ✓ 4751``` 4752 4753### Complete Coverage 4754 4755**Edit Dialog**: 4756- ✅ All inputs themed 4757- ✅ All labels themed 4758- ✅ All sections themed 4759- ✅ **Checkbox borders** ← v4.8.9! 4760- ✅ All buttons themed 4761- ✅ No white anywhere 4762 4763**Admin Interface**: 4764- ✅ **Tab navigation** ← v4.8.9! 4765- ✅ **Section boxes** ← v4.8.9! 4766- ✅ **Input fields** ← v4.8.9! 4767- ✅ **Text colors** ← v4.8.9! 4768- ✅ **Borders** ← v4.8.9! 4769- ✅ All tabs (Manage, Update, Outlook, Themes) 4770 4771### CSS Variables Used 4772 4773**DokuWiki provides these**: 4774- `--__background_site__`: Page background 4775- `--__background_alt__`: Alternate background 4776- `--__background__`: Primary background (inputs) 4777- `--__text__`: Text color 4778- `--__border__`: Border color 4779 4780**Fallbacks provided for older DokuWiki**: 4781```css 4782var(--__background_site__, #f5f5f5) 4783var(--__background_alt__, #fafafa) 4784var(--__background__, #fff) 4785var(--__text__, #333) 4786var(--__border__, #ddd) 4787``` 4788 4789### Perfect Adaptation 4790 4791**Admin now adapts to ANY wiki theme**: 4792- Light themes → Light admin ✓ 4793- Dark themes → Dark admin ✓ 4794- Custom themes → Matches perfectly ✓ 4795- No hardcoded colors ✓ 4796 4797**Calendar themes still work**: 4798- Matrix, Purple, Professional, Pink ✓ 4799- Independent from wiki theme ✓ 4800- Admin respects wiki ✓ 4801- Calendar respects calendar theme ✓ 4802 4803### FINAL PERFECTION 4804 4805**Frontend (Calendar)**: 4806- Complete theming ✓ 4807- 4 beautiful themes ✓ 4808- Every pixel themed ✓ 4809 4810**Backend (Admin)**: 4811- Respects wiki theme ✓ 4812- Works with any theme ✓ 4813- Perfect compatibility ✓ 4814 4815**ABSOLUTELY EVERYTHING THEMED!** ✨ 4816 4817## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4818 4819### Fixed: Task Checkboxes Now Fully Themed 4820- **Fixed:** Added background-color and border inline 4821- **Fixed:** Both PHP and JavaScript versions 4822- **Result:** No white checkboxes! 4823 4824### Fixed: Past Events Toggle Border 4825- **Fixed:** Added !important to border styling 4826- **Fixed:** Explicit top and bottom borders 4827- **Result:** No white line under toggle! 4828 4829### Fixed: Form Field Section Backgrounds 4830- **Fixed:** All form-field and form-row-group backgrounds 4831- **Fixed:** Every section in edit dialog 4832- **Result:** No white sections anywhere! 4833 4834### All Changes 4835 4836**1. Task Checkbox Styling**: 4837 4838**Before**: 4839```php 4840style="accent-color: $border !important;" 4841<!-- Only accent, background still white ✗ --> 4842``` 4843 4844**After**: 4845```php 4846style="accent-color: $border !important; 4847 background-color: $cell_bg !important; 4848 border: 2px solid $grid_border !important;" 4849<!-- Full theming ✓ --> 4850``` 4851 4852**2. Past Events Toggle Border**: 4853 4854**Before**: 4855```php 4856style="border-color: $grid_border;" 4857<!-- No !important, CSS overrides ✗ --> 4858``` 4859 4860**After**: 4861```php 4862style="border-color: $grid_border !important; 4863 border-top: 1px solid $grid_border !important; 4864 border-bottom: 1px solid $grid_border !important;" 4865<!-- Cannot be overridden ✓ --> 4866``` 4867 4868**3. Form Field Backgrounds**: 4869 4870**Before**: 4871```html 4872<div class="form-field"> 4873<div class="form-row-group"> 4874<!-- No background, shows white ✗ --> 4875``` 4876 4877**After**: 4878```php 4879<div class="form-field" style="background: $bg !important;"> 4880<div class="form-row-group" style="background: $bg !important;"> 4881<!-- Fully themed ✓ --> 4882``` 4883 4884### Before vs After 4885 4886**BEFORE (v4.8.7)**: 4887``` 4888Event: 4889□ Task checkbox ← White checkbox ✗ 4890 4891Past Events 4892▶ Past Events (3) ← White line below ✗ 4893───────────────── 4894 4895Edit Dialog: 4896┌──────────────┐ 4897│ Form fields │ ← White sections ✗ 4898└──────────────┘ 4899``` 4900 4901**AFTER (v4.8.8)**: 4902``` 4903Matrix Event: 4904☑ Task checkbox ← Green checkbox ✓ 4905 4906Past Events 4907▶ Past Events (3) ← Green border ✓ 4908───────────────── 4909 4910Matrix Edit Dialog: 4911┌──────────────┐ 4912│ Form fields │ ← Dark green ✓ 4913└──────────────┘ 4914``` 4915 4916### Complete Examples 4917 4918**Matrix Theme**: 4919``` 4920Task Checkbox: 4921☑ Checked → Green checkmark, green bg 4922☐ Unchecked → Green border, dark green bg ✓ 4923 4924Past Events Toggle: 4925▶ Past Events (3) 4926─────────────────── Green border ✓ 4927 4928Edit Dialog: 4929All sections dark green ✓ 4930No white anywhere ✓ 4931``` 4932 4933**Purple Theme**: 4934``` 4935Task Checkbox: 4936☑ Checked → Purple checkmark, purple bg 4937☐ Unchecked → Purple border, dark purple bg ✓ 4938 4939Past Events Toggle: 4940▶ Past Events (3) 4941─────────────────── Purple border ✓ 4942 4943Edit Dialog: 4944All sections dark purple ✓ 4945``` 4946 4947**Professional Theme**: 4948``` 4949Task Checkbox: 4950☑ Checked → Blue checkmark, white bg 4951☐ Unchecked → Gray border, white bg ✓ 4952 4953Past Events Toggle: 4954▶ Past Events (3) 4955─────────────────── Gray border ✓ 4956 4957Edit Dialog: 4958All sections light ✓ 4959``` 4960 4961**Pink Theme**: 4962``` 4963Task Checkbox: 4964☑ Checked → Pink checkmark, pink bg ✨ 4965☐ Unchecked → Pink border, dark pink bg ✓ 4966 4967Past Events Toggle: 4968▶ Past Events (3) 4969─────────────────── Pink border 4970 4971Edit Dialog: 4972All sections dark pink ✓ 4973``` 4974 4975### Checkbox Visual 4976 4977**Matrix - Unchecked**: 4978``` 4979┌─────┐ 4980│ │ ← Dark green background 4981│ │ Green border 4982└─────┘ 4983``` 4984 4985**Matrix - Checked**: 4986``` 4987┌─────┐ 4988│ ✓ │ ← Dark green background 4989│ │ Green checkmark 4990└─────┘ 4991``` 4992 4993### Past Events Border 4994 4995**Before**: 4996``` 4997▶ Past Events (3) 4998─────────────────── White line ✗ 4999``` 5000 5001**After**: 5002``` 5003▶ Past Events (3) 5004─────────────────── Green line ✓ (Matrix) 5005 Purple line ✓ (Purple) 5006 Gray line ✓ (Professional) 5007 Pink line ✓ (Pink) 5008``` 5009 5010### Form Field Coverage 5011 5012**All sections themed**: 5013- ✅ Title field 5014- ✅ Namespace field 5015- ✅ Description field 5016- ✅ **Date row** ← v4.8.8! 5017- ✅ **Checkbox sections** ← v4.8.8! 5018- ✅ **Recurring options** ← v4.8.8! 5019- ✅ **Time row** ← v4.8.8! 5020- ✅ **Color row** ← v4.8.8! 5021- ✅ Button footer 5022 5023**Every div has background!** ✓ 5024 5025### ABSOLUTE PERFECTION 5026 5027**Not a single white pixel**: 5028- ✅ No white checkboxes 5029- ✅ No white borders 5030- ✅ No white backgrounds 5031- ✅ No white sections 5032- ✅ No white lines 5033- ✅ No white anything 5034 5035**100% PERFECT THEMING!** ✨ 5036 5037## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 5038 5039### Fixed: Checkbox Section Backgrounds Themed 5040- **Fixed:** Repeating Event section background 5041- **Fixed:** Task checkbox section background 5042- **Result:** No white backgrounds in dialog! 5043 5044### Fixed: Unchecked Task Checkboxes Themed 5045- **Fixed:** Added CSS for checkbox backgrounds 5046- **Fixed:** Unchecked boxes show theme colors 5047- **Result:** No white checkboxes! 5048 5049### Fixed: Day Popup Dialog Fully Themed 5050- **Fixed:** Popup container, header, body themed 5051- **Fixed:** Event items in popup themed 5052- **Fixed:** Add Event button themed 5053- **Fixed:** Footer section themed 5054- **Result:** Perfect popup theming! 5055 5056### All Changes 5057 5058**1. Checkbox Section Backgrounds**: 5059 5060**Before**: 5061```html 5062<div class="form-field-checkbox"> 5063<!-- White background ✗ --> 5064``` 5065 5066**After**: 5067```php 5068<div class="form-field-checkbox" 5069 style="background: $bg !important;"> 5070<!-- Themed ✓ --> 5071``` 5072 5073**2. Checkbox Background CSS**: 5074 5075**Added to style block**: 5076```css 5077.task-checkbox { 5078 background-color: $cell_bg !important; 5079 border: 2px solid $grid_border !important; 5080} 5081``` 5082 5083**3. Day Popup Theming**: 5084 5085**Container**: 5086```javascript 5087style="background: $bg !important; 5088 border: 2px solid $border !important; 5089 box-shadow: 0 0 20px $shadow !important;" 5090``` 5091 5092**Header**: 5093```javascript 5094style="background: $header_bg !important; 5095 color: $text_primary !important; 5096 border-bottom: 1px solid $border !important;" 5097``` 5098 5099**Footer**: 5100```javascript 5101style="background: $bg !important; 5102 border-top: 1px solid $grid_border !important;" 5103``` 5104 5105**Add Event Button**: 5106```javascript 5107style="background: $border !important; 5108 color: $bg !important; 5109 border-color: $border !important;" 5110``` 5111 5112**Event Items**: 5113```javascript 5114style="background: $cell_bg !important; 5115 border: 1px solid $grid_border !important;" 5116``` 5117 5118### Before vs After 5119 5120**BEFORE (v4.8.6)**: 5121``` 5122Edit Dialog: 5123┌──────────────────┐ 5124│ ☑ Repeating Event│ ← White background ✗ 5125├──────────────────┤ 5126│ ☑ Task checkbox │ ← White background ✗ 5127└──────────────────┘ 5128 5129Day Popup: 5130┌──────────────────┐ 5131│ Monday, Feb 8 │ ← White ✗ 5132├──────────────────┤ 5133│ Team Meeting │ ← White ✗ 5134│ 2:00 PM │ 5135├──────────────────┤ 5136│ [+ Add Event] │ ← White ✗ 5137└──────────────────┘ 5138 5139Task checkbox: ☐ ← White ✗ 5140``` 5141 5142**AFTER (v4.8.7)**: 5143``` 5144Edit Dialog (Matrix): 5145┌──────────────────┐ 5146│ ☑ Repeating Event│ ← Dark green ✓ 5147├──────────────────┤ 5148│ ☑ Task checkbox │ ← Dark green ✓ 5149└──────────────────┘ 5150 5151Day Popup (Matrix): 5152┌──────────────────┐ 5153│ Monday, Feb 8 │ ← Dark green ✓ 5154├──────────────────┤ 5155│ Team Meeting │ ← Dark green ✓ 5156│ 2:00 PM │ 5157├──────────────────┤ 5158│ [+ Add Event] │ ← Green button ✓ 5159└──────────────────┘ 5160 5161Task checkbox: ☑ ← Green ✓ 5162``` 5163 5164### Complete Examples 5165 5166**Matrix Dialog**: 5167``` 5168┌──────────────────────────┐ 5169│ ✏️ Edit Event │ 5170├──────────────────────────┤ 5171│ Title: [_________] │ 5172│ Date: [__________] │ 5173│ │ 5174│ ☑ Repeating Event │ ← Dark green bg 5175├──────────────────────────┤ 5176│ ☑ Task checkbox │ ← Dark green bg 5177├──────────────────────────┤ 5178│ [Cancel] [ Save] │ 5179└──────────────────────────┘ 5180 5181All sections themed! ✓ 5182``` 5183 5184**Matrix Day Popup**: 5185``` 5186┌──────────────────────────┐ 5187│ Monday, February 8, 2026 │ ← Green header 5188├──────────────────────────┤ 5189│ ┌──────────────────────┐ │ 5190│ │ Team Meeting │ │ ← Dark green 5191│ │ 2:00 PM │ │ 5192│ └──────────────────────┘ │ 5193│ ┌──────────────────────┐ │ 5194│ │ Code Review │ │ ← Dark green 5195│ │ 4:00 PM │ │ 5196│ └──────────────────────┘ │ 5197├──────────────────────────┤ 5198│ [+ Add Event] │ ← Green button 5199└──────────────────────────┘ 5200``` 5201 5202**Purple Day Popup**: 5203``` 5204┌──────────────────────────┐ 5205│ Monday, February 8, 2026 │ ← Purple header 5206├──────────────────────────┤ 5207│ ┌──────────────────────┐ │ 5208│ │ Team Meeting │ │ ← Dark purple 5209│ │ 2:00 PM │ │ 5210│ └──────────────────────┘ │ 5211├──────────────────────────┤ 5212│ [+ Add Event] │ ← Purple button 5213└──────────────────────────┘ 5214``` 5215 5216**Professional Day Popup**: 5217``` 5218┌──────────────────────────┐ 5219│ Monday, February 8, 2026 │ ← Light header 5220├──────────────────────────┤ 5221│ ┌──────────────────────┐ │ 5222│ │ Team Meeting │ │ ← White 5223│ │ 2:00 PM │ │ 5224│ └──────────────────────┘ │ 5225├──────────────────────────┤ 5226│ [+ Add Event] │ ← Blue button 5227└──────────────────────────┘ 5228``` 5229 5230**Pink Day Popup**: 5231``` 5232┌──────────────────────────┐ 5233│ Monday, February 8, 2026 │ ← Pink header ✨ 5234├──────────────────────────┤ 5235│ ┌──────────────────────┐ │ 5236│ │ Team Meeting │ │ ← Dark pink 5237│ │ 2:00 PM │ │ 5238│ └──────────────────────┘ │ 5239├──────────────────────────┤ 5240│ [+ Add Event] │ ← Pink button 5241└──────────────────────────┘ 5242``` 5243 5244### Checkbox Theming 5245 5246**Unchecked boxes now themed**: 5247``` 5248Matrix: 5249☐ → Dark green bg, green border ✓ 5250 5251Purple: 5252☐ → Dark purple bg, purple border ✓ 5253 5254Professional: 5255☐ → White bg, gray border ✓ 5256 5257Pink: 5258☐ → Dark pink bg, pink border ✓ 5259``` 5260 5261### Complete Coverage 5262 5263**Edit Dialog - All Sections**: 5264- ✅ Header 5265- ✅ All inputs 5266- ✅ All labels 5267- ✅ **Checkbox sections** ← v4.8.7! 5268- ✅ Recurring options 5269- ✅ Button footer 5270- ✅ All checkboxes (checked & unchecked) 5271 5272**Day Popup - All Elements**: 5273- ✅ **Popup container** ← v4.8.7! 5274- ✅ **Header** ← v4.8.7! 5275- ✅ **Body** ← v4.8.7! 5276- ✅ **Event items** ← v4.8.7! 5277- ✅ **Namespace badges** ← v4.8.7! 5278- ✅ **Footer** ← v4.8.7! 5279- ✅ **Add Event button** ← v4.8.7! 5280- ✅ **No events message** ← v4.8.7! 5281 5282**Absolutely every dialog element themed!** ✨ 5283 5284### Perfect Theming Achievement 5285 5286**Every UI component in entire plugin**: 5287- ✅ Calendar grid 5288- ✅ Sidebar widget 5289- ✅ Event list 5290- ✅ Search bar 5291- ✅ Event boxes 5292- ✅ Edit dialog (complete) 5293- ✅ **Day popup** ← v4.8.7! 5294- ✅ Month picker 5295- ✅ All text 5296- ✅ All buttons 5297- ✅ All inputs 5298- ✅ **All checkboxes** ← v4.8.7! 5299- ✅ All borders 5300- ✅ All badges 5301- ✅ All backgrounds 5302 5303**NO WHITE ANYWHERE!** 5304 5305**100% COMPLETE THEMING ACHIEVED!** ✨ 5306 5307## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 5308 5309### Fixed: Dialog Checkbox Sections Themed 5310- **Fixed:** Recurring options section background themed 5311- **Fixed:** Section has themed border accent 5312- **Result:** No white sections in dialog! 5313 5314### Fixed: Dialog Button Section Themed 5315- **Fixed:** Button area background themed 5316- **Fixed:** Top border separator themed 5317- **Result:** Complete dialog theming! 5318 5319### Fixed: Event Box Borders Themed 5320- **Fixed:** Top, right, bottom borders now themed 5321- **Fixed:** Left border remains event color 5322- **Result:** Perfect event boxes! 5323 5324### All Changes 5325 5326**1. Recurring Options Section**: 5327 5328**Before**: 5329```html 5330<div class="recurring-options" style="display:none;"> 5331<!-- White background ✗ --> 5332``` 5333 5334**After**: 5335```php 5336<div class="recurring-options" 5337 style="display:none; 5338 background: $bg !important; 5339 padding: 8px; 5340 border-left: 2px solid $border; 5341 margin-left: 4px;"> 5342<!-- Themed with accent border ✓ --> 5343``` 5344 5345**2. Dialog Actions Section**: 5346 5347**Before**: 5348```html 5349<div class="dialog-actions-sleek"> 5350<!-- White background ✗ --> 5351``` 5352 5353**After**: 5354```php 5355<div class="dialog-actions-sleek" 5356 style="background: $bg !important; 5357 border-top: 1px solid $grid_border !important;"> 5358<!-- Themed with separator ✓ --> 5359``` 5360 5361**3. Event Box Borders**: 5362 5363**Before**: 5364```php 5365border-left-color: $event_color; 5366<!-- Only left border colored ✗ --> 5367``` 5368 5369**After**: 5370```php 5371border-left-color: $event_color; 5372border-top: 1px solid $grid_border !important; 5373border-right: 1px solid $grid_border !important; 5374border-bottom: 1px solid $grid_border !important; 5375<!-- All borders themed! ✓ --> 5376``` 5377 5378### Before vs After 5379 5380**BEFORE (v4.8.5)**: 5381``` 5382Dialog: 5383┌────────────────┐ 5384│ ☑ Repeating │ 5385├────────────────┤ ← White section ✗ 5386│ Repeat: Daily │ 5387│ Until: [____] │ 5388├────────────────┤ 5389│ [Cancel] [Save]│ ← White footer ✗ 5390└────────────────┘ 5391 5392Event Box: 5393┌────────────┐ 5394│Team Meeting│ ← White borders ✗ 5395│2:00 PM │ 5396└────────────┘ 5397``` 5398 5399**AFTER (v4.8.6)**: 5400``` 5401Matrix Dialog: 5402┌────────────────┐ 5403│ ☑ Repeating │ 5404├────────────────┤ ← Dark green ✓ 5405│ Repeat: Daily │ Green accent border 5406│ Until: [____] │ 5407├────────────────┤ 5408│ [Cancel] [Save]│ ← Dark green ✓ 5409└────────────────┘ 5410 5411Matrix Event Box: 5412┌────────────┐ 5413│Team Meeting│ ← Green borders ✓ 5414│2:00 PM │ 5415└────────────┘ 5416``` 5417 5418### Dialog Section Examples 5419 5420**Matrix Theme**: 5421``` 5422┌──────────────────────────┐ 5423│ ✏️ Edit Event │ 5424├──────────────────────────┤ 5425│ ☑ Repeating Event │ 5426├║─────────────────────────┤ Green accent 5427│║ Repeat Every: Daily │ Dark green bg 5428│║ Repeat Until: [_____] │ 5429└──────────────────────────┘ 5430 [Cancel] [ Save] ← Dark green bg 5431──────────────────────────── Green border 5432``` 5433 5434**Purple Theme**: 5435``` 5436┌──────────────────────────┐ 5437│ ☑ Repeating Event │ 5438├║─────────────────────────┤ Purple accent 5439│║ Repeat options... │ Dark purple bg 5440└──────────────────────────┘ 5441 [Cancel] [ Save] ← Dark purple bg 5442──────────────────────────── Purple border 5443``` 5444 5445**Professional Theme**: 5446``` 5447┌──────────────────────────┐ 5448│ ☑ Repeating Event │ 5449├║─────────────────────────┤ Blue accent 5450│║ Repeat options... │ Light bg 5451└──────────────────────────┘ 5452 [Cancel] [ Save] ← Light bg 5453──────────────────────────── Gray border 5454``` 5455 5456**Pink Theme**: 5457``` 5458┌──────────────────────────┐ 5459│ ☑ Repeating Event ✨ │ 5460├║─────────────────────────┤ Pink accent 5461│║ Repeat options... │ Dark pink bg 5462└──────────────────────────┘ 5463 [Cancel] [ Save] ← Dark pink bg 5464──────────────────────────── Pink border 5465``` 5466 5467### Event Box Border Visual 5468 5469**Before (v4.8.5)**: 5470``` 5471Left border only: 5472█ Team Meeting 5473█ 2:00 PM 5474█ [Edit] [Delete] 5475 5476Only event color on left ✗ 5477White on other 3 sides ✗ 5478``` 5479 5480**After (v4.8.6)**: 5481``` 5482All borders themed: 5483┌─────────────┐ 5484█Team Meeting │ ← Top: themed 5485█2:00 PM │ ← Right: themed 5486█[Edit][Del] │ ← Bottom: themed 5487└─────────────┘ 5488 5489Left: Event color ✓ 5490Other 3: Theme grid_border ✓ 5491``` 5492 5493### Matrix Event Box: 5494``` 5495┌─────────────┐ Green border 5496│Team Meeting │ 5497│2:00 PM │ 5498└─────────────┘ Green border 5499↑ 5500Green left bar 5501``` 5502 5503### Purple Event Box: 5504``` 5505┌─────────────┐ Purple border 5506│Team Meeting │ 5507│2:00 PM │ 5508└─────────────┘ Purple border 5509↑ 5510Purple left bar 5511``` 5512 5513### Professional Event Box: 5514``` 5515┌─────────────┐ Gray border 5516│Team Meeting │ 5517│2:00 PM │ 5518└─────────────┘ Gray border 5519↑ 5520Event color left bar 5521``` 5522 5523### Complete Dialog Coverage 5524 5525**All sections themed**: 5526- ✅ Dialog header 5527- ✅ Form inputs 5528- ✅ Checkbox labels 5529- ✅ **Recurring options** ← v4.8.6! 5530- ✅ **Button section** ← v4.8.6! 5531- ✅ All labels 5532- ✅ All buttons 5533 5534**No white sections!** ✓ 5535 5536### Complete Event Box Coverage 5537 5538**All borders themed**: 5539- ✅ Left border (event color) 5540- ✅ **Top border** ← v4.8.6! 5541- ✅ **Right border** ← v4.8.6! 5542- ✅ **Bottom border** ← v4.8.6! 5543- ✅ Background 5544- ✅ Text 5545 5546**Perfect box outline!** ✓ 5547 5548### Visual Perfection 5549 5550**Matrix theme event list**: 5551``` 5552┌─────────────┐ 5553│Team Meeting │ ← Green box 5554│2:00 PM │ 5555└─────────────┘ 5556┌─────────────┐ 5557│Code Review │ ← Green box 5558│4:00 PM │ 5559└─────────────┘ 5560 5561All borders green! ✓ 5562``` 5563 5564**ABSOLUTE PERFECT THEMING!** ✨ 5565 5566## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 5567 5568### Fixed: Event Dialog Fully Themed 5569- **Fixed:** Dialog background, header, inputs all themed 5570- **Fixed:** All labels, checkboxes, selects themed 5571- **Fixed:** Save and Cancel buttons themed 5572- **Result:** Dialog matches theme perfectly! 5573 5574### Fixed: Sidebar Event Borders Properly Themed 5575- **Fixed:** Event divider borders use grid_border color 5576- **Fixed:** Clean, subtle themed dividers 5577- **Result:** No more white borders in sidebar! 5578 5579### All Changes 5580 5581**1. Event Dialog Theming**: 5582 5583**Dialog container**: 5584```php 5585background: $themeStyles['bg'] !important; 5586border: 2px solid $themeStyles['border'] !important; 5587box-shadow: 0 0 20px $shadow !important; 5588``` 5589 5590**Dialog header**: 5591```php 5592background: $themeStyles['header_bg'] !important; 5593color: $themeStyles['text_primary'] !important; 5594border-bottom: 1px solid $border !important; 5595``` 5596 5597**All form inputs** (text, date, select, textarea): 5598```php 5599background: $themeStyles['cell_bg'] !important; 5600color: $themeStyles['text_primary'] !important; 5601border-color: $themeStyles['grid_border'] !important; 5602``` 5603 5604**All labels**: 5605```php 5606color: $themeStyles['text_primary'] !important; 5607``` 5608 5609**Checkboxes**: 5610```php 5611accent-color: $themeStyles['border'] !important; 5612``` 5613 5614**Buttons**: 5615```php 5616// Cancel button: 5617background: $cell_bg !important; 5618color: $text_primary !important; 5619 5620// Save button: 5621background: $border !important; 5622color: $bg !important; (or white for professional) 5623``` 5624 5625**2. Sidebar Event Borders**: 5626 5627**Before**: 5628```php 5629border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 5630``` 5631 5632**After**: 5633```php 5634borderColor = $themeStyles['grid_border']; 5635border-bottom: 1px solid $borderColor !important; 5636``` 5637 5638### Before vs After 5639 5640**BEFORE (v4.8.4)**: 5641``` 5642Event Dialog: 5643┌────────────────┐ 5644│ Add Event │ ← White background ✗ 5645│ Title: [_____] │ ← White inputs ✗ 5646│ Date: [_____] │ 5647│ [Cancel] [Save]│ ← Default buttons ✗ 5648└────────────────┘ 5649 5650Sidebar Events: 5651Event 1 ──────── ← White border ✗ 5652Event 2 ──────── ← White border ✗ 5653``` 5654 5655**AFTER (v4.8.5)**: 5656``` 5657Event Dialog (Matrix): 5658┌────────────────┐ 5659│ Add Event │ ← Dark green background ✓ 5660│ Title: [_____] │ ← Dark green inputs ✓ 5661│ Date: [_____] │ ← Green text ✓ 5662│ [Cancel] [Save]│ ← Themed buttons ✓ 5663└────────────────┘ 5664 5665Sidebar Events (Matrix): 5666Event 1 ──────── ← Green border ✓ 5667Event 2 ──────── ← Green border ✓ 5668``` 5669 5670### Dialog Examples by Theme 5671 5672**Matrix Dialog**: 5673``` 5674┌──────────────────────────┐ 5675│ ✏️ Edit Event │ ← Dark green header 5676├──────────────────────────┤ 5677│ Title │ ← Green labels 5678│ [Team Meeting________] │ ← Dark green input 5679│ │ 5680│ Start Date │ 5681│ [2026-02-08__] │ ← Dark green input 5682│ │ 5683│ Start Time │ 5684│ [2:00 PM ▼] │ ← Green select 5685│ │ 5686│ ☑ Repeating Event │ ← Green checkbox 5687│ │ 5688│ [Cancel] [ Save] │ ← Themed buttons 5689└──────────────────────────┘ 5690 5691Everything green! ✓ 5692``` 5693 5694**Purple Dialog**: 5695``` 5696┌──────────────────────────┐ 5697│ ✏️ Edit Event │ ← Dark purple header 5698├──────────────────────────┤ 5699│ [Inputs_______________] │ ← Dark purple inputs 5700│ ☑ Checkboxes │ ← Purple accent 5701│ [Cancel] [ Save] │ ← Purple buttons 5702└──────────────────────────┘ 5703``` 5704 5705**Professional Dialog**: 5706``` 5707┌──────────────────────────┐ 5708│ ✏️ Edit Event │ ← Light gradient header 5709├──────────────────────────┤ 5710│ [Inputs_______________] │ ← White inputs 5711│ ☑ Checkboxes │ ← Blue accent 5712│ [Cancel] [ Save] │ ← Blue save button 5713└──────────────────────────┘ 5714``` 5715 5716**Pink Dialog**: 5717``` 5718┌──────────────────────────┐ 5719│ ✏️ Edit Event │ ← Dark pink header ✨ 5720├──────────────────────────┤ 5721│ [Inputs_______________] │ ← Dark pink inputs 5722│ ☑ Checkboxes │ ← Pink accent 5723│ [Cancel] [ Save] │ ← Pink buttons 5724└──────────────────────────┘ 5725``` 5726 5727### Complete Dialog Element Coverage 5728 5729**All form elements themed**: 5730- ✅ Dialog container 5731- ✅ Dialog header 5732- ✅ Close button (×) 5733- ✅ Title input 5734- ✅ Namespace search 5735- ✅ Namespace dropdown 5736- ✅ Description textarea 5737- ✅ Start date input 5738- ✅ End date input 5739- ✅ Recurring checkbox 5740- ✅ Recurrence type select 5741- ✅ Recurrence end date 5742- ✅ Start time select 5743- ✅ End time select 5744- ✅ Color select 5745- ✅ Custom color picker 5746- ✅ Task checkbox 5747- ✅ All labels 5748- ✅ Cancel button 5749- ✅ Save button 5750 5751**Every single dialog element themed!** 5752 5753### Sidebar Border Example 5754 5755**Matrix Sidebar**: 5756``` 5757┌────────────────┐ 5758│ Today │ ← Green section header 5759├────────────────┤ 5760│ Team Meeting │ 5761│ 2:00 PM │ 5762├────────────────┤ ← Green border (grid_border) 5763│ Code Review │ 5764│ 4:00 PM │ 5765├────────────────┤ ← Green border 5766│ Stand-up │ 5767│ All day │ 5768└────────────────┘ 5769 5770Subtle green dividers! ✓ 5771``` 5772 5773### Complete Achievement 5774 5775**Every UI element themed**: 5776- ✅ Calendar 5777- ✅ Sidebar widget 5778- ✅ Event list 5779- ✅ Search bar 5780- ✅ **Event dialog** ← v4.8.5! 5781- ✅ Month picker 5782- ✅ **Sidebar dividers** ← v4.8.5! 5783- ✅ All text 5784- ✅ All inputs 5785- ✅ All buttons 5786- ✅ All borders 5787- ✅ All checkboxes 5788 5789**ABSOLUTE COMPLETE THEMING!** ✨ 5790 5791## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 5792 5793### Fixed: Professional Theme Background Consistency 5794- **Fixed:** Container and event backgrounds now match sidebar 5795- **Fixed:** Lighter, cleaner appearance 5796- **Fixed:** Better contrast and readability 5797- **Result:** Professional theme looks cohesive! 5798 5799### The Problem 5800 5801**v4.8.3 Professional theme**: 5802``` 5803Sidebar: Light background (#f5f7fa) 5804Calendar: Medium background (#e8ecf1) ← Didn't match! 5805Events: Light background (#f5f7fa) 5806 5807Inconsistent! ✗ 5808``` 5809 5810### The Fix 5811 5812**Updated Professional theme colors for consistency**: 5813 5814```php 5815// Before: 5816'bg' => '#e8ecf1', // Medium gray-blue 5817'cell_bg' => '#f5f7fa', // Very light 5818'grid_bg' => '#d5dbe3', // Medium-dark 5819 5820// After: 5821'bg' => '#f5f7fa', // Very light (matches sidebar) 5822'cell_bg' => '#ffffff', // Pure white (clean) 5823'grid_bg' => '#e8ecf1', // Subtle contrast 5824'grid_border' => '#d0d7de', // Softer borders 5825``` 5826 5827### Before vs After 5828 5829**BEFORE (v4.8.3)**: 5830``` 5831Professional Theme: 5832┌────────────────┐ 5833│ Calendar │ ← Medium gray (#e8ecf1) 5834│ ┌────────────┐ │ 5835│ │ Event │ │ ← Light (#f5f7fa) 5836│ └────────────┘ │ 5837└────────────────┘ 5838 5839Sidebar: 5840┌────────────────┐ 5841│ Widget │ ← Light (#f5f7fa) 5842└────────────────┘ 5843 5844Backgrounds don't match! ✗ 5845``` 5846 5847**AFTER (v4.8.4)**: 5848``` 5849Professional Theme: 5850┌────────────────┐ 5851│ Calendar │ ← Light (#f5f7fa) 5852│ ┌────────────┐ │ 5853│ │ Event │ │ ← White (#ffffff) 5854│ └────────────┘ │ 5855└────────────────┘ 5856 5857Sidebar: 5858┌────────────────┐ 5859│ Widget │ ← Light (#f5f7fa) 5860└────────────────┘ 5861 5862Perfect match! ✓ 5863``` 5864 5865### New Professional Theme Colors 5866 5867**Backgrounds**: 5868- Container: `#f5f7fa` (light blue-gray) 5869- Events: `#ffffff` (pure white) 5870- Grid: `#e8ecf1` (subtle contrast) 5871 5872**Text**: 5873- Primary: `#2c3e50` (dark blue-gray) 5874- Bright: `#4a90e2` (blue accent) 5875- Dim: `#7f8c8d` (medium gray) 5876 5877**Borders**: 5878- Main: `#4a90e2` (blue) 5879- Grid: `#d0d7de` (soft gray) 5880 5881**Header**: 5882- Gradient: `#ffffff` → `#f5f7fa` 5883 5884### Visual Example 5885 5886**Professional Theme Now**: 5887``` 5888┌─────────────────────────────┐ 5889│ February 2026 │ ← White to light gradient 5890├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 5891│S│M│T│W│T│F│S│ │ ← Light background 5892├─┼─┼─┼─┼─┼─┼─┤ │ 5893│ │ │1│2│3│4│5│ Event List │ ← White events 5894│ │ │ │ │ │ │ │ ┌───────────┐ │ 5895│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 5896└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 5897 5898Clean, professional look! ✓ 5899``` 5900 5901### Comparison with Other Themes 5902 5903**Matrix** (dark): 5904- Container: #242424 (dark green) 5905- Events: #242424 (dark green) 5906- Consistent dark theme ✓ 5907 5908**Purple** (dark): 5909- Container: #1a0d14 (dark purple) 5910- Events: #2a2030 (dark purple) 5911- Consistent dark theme ✓ 5912 5913**Professional** (light): 5914- Container: #f5f7fa (light blue) 5915- Events: #ffffff (white) 5916- Consistent light theme ✓ 5917 5918**Pink** (dark): 5919- Container: #1a0d14 (dark pink) 5920- Events: #1a0d14 (dark pink) 5921- Consistent dark theme ✓ 5922 5923**All themes now consistent!** 5924 5925### Better Contrast 5926 5927**Professional theme improvements**: 5928 5929**Readability**: 5930- Dark text (#2c3e50) on white/light backgrounds ✓ 5931- Excellent contrast ratio ✓ 5932- Easy on the eyes ✓ 5933 5934**Visual hierarchy**: 5935- White events pop against light container ✓ 5936- Blue accents stand out ✓ 5937- Clean, modern look ✓ 5938 5939**Professional appearance**: 5940- Lighter = more corporate/business feel ✓ 5941- Clean whites = premium quality ✓ 5942- Subtle grays = sophisticated ✓ 5943 5944### Complete Theme Consistency 5945 5946**All themes now have matching backgrounds**: 5947 5948**Matrix**: 5949- Sidebar & Calendar both dark green ✓ 5950 5951**Purple**: 5952- Sidebar & Calendar both dark purple ✓ 5953 5954**Professional**: 5955- Sidebar & Calendar both light ✓ (v4.8.4!) 5956 5957**Pink**: 5958- Sidebar & Calendar both dark pink ✓ 5959 5960**Perfect visual unity across all views!** ✨ 5961 5962## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 5963 5964### Fixed: Bold Text in Descriptions Themed 5965- **Fixed:** **Bold text** now uses theme primary color 5966- **Fixed:** Both `**text**` and `__text__` syntax themed 5967- **Result:** Bold text matches theme! 5968 5969### Fixed: Search Bar Fully Themed 5970- **Fixed:** Search input has !important on all styles 5971- **Fixed:** Icon and placeholder text themed 5972- **Result:** Search bar perfectly themed! 5973 5974### Fixed: Sidebar Event Boxes Themed 5975- **Fixed:** Event borders in sidebar now use theme grid_border color 5976- **Fixed:** Borders have !important flag 5977- **Result:** Sidebar boxes match theme! 5978 5979### All Changes 5980 5981**1. Bold Text Styling**: 5982 5983**Before**: 5984```html 5985<strong>Bold text</strong> ← Default black 5986``` 5987 5988**After**: 5989```php 5990<strong style="color: $text_primary !important; font-weight:bold;"> 5991 Bold text 5992</strong> 5993 5994Matrix: Green bold ✓ 5995Purple: Lavender bold ✓ 5996Professional: Dark bold ✓ 5997Pink: Pink bold ✓ 5998``` 5999 6000**2. Search Bar**: 6001 6002**Before**: 6003```php 6004style="background: $bg; color: $text;" 6005Could be overridden by CSS 6006``` 6007 6008**After**: 6009```php 6010style="background: $bg !important; 6011 color: $text_primary !important; 6012 border-color: $grid_border !important;" 6013 6014Cannot be overridden! ✓ 6015``` 6016 6017**3. Sidebar Event Boxes**: 6018 6019**Before**: 6020```php 6021$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 6022``` 6023 6024**After**: 6025```php 6026$borderColor = $themeStyles['grid_border']; // From theme 6027border-bottom: 1px solid $borderColor !important; 6028 6029Matrix: Green borders ✓ 6030Purple: Purple borders ✓ 6031Professional: Gray borders ✓ 6032Pink: Pink borders ✓ 6033``` 6034 6035### Before vs After 6036 6037**BEFORE (v4.8.2)**: 6038``` 6039Event description: 6040"Please review **Q1 Goals** carefully" 6041 ↑ 6042 Black bold ✗ 6043 6044Search bar: 6045[ Search...] ← Gray placeholder ✗ 6046 6047Sidebar: 6048┌────────────┐ 6049│ Event 1 │ 6050├────────────┤ ← Gray border ✗ 6051│ Event 2 │ 6052└────────────┘ 6053``` 6054 6055**AFTER (v4.8.3)**: 6056``` 6057Matrix Theme: 6058 6059Event description: 6060"Please review **Q1 Goals** carefully" 6061 ↑ 6062 Green bold ✓ 6063 6064Search bar: 6065[ Search...] ← Green themed ✓ 6066 6067Sidebar: 6068┌────────────┐ 6069│ Event 1 │ 6070├────────────┤ ← Green border ✓ 6071│ Event 2 │ 6072└────────────┘ 6073``` 6074 6075### Examples by Theme 6076 6077**Matrix Theme**: 6078``` 6079Description: 6080"Check **important notes** and links" 6081 ↑ 6082 Green bold 6083 6084Sidebar boxes: 6085Event 1 6086───────── Green border 6087Event 2 6088───────── Green border 6089``` 6090 6091**Purple Theme**: 6092``` 6093Description: 6094"Review **agenda items** before meeting" 6095 ↑ 6096 Lavender bold 6097 6098Sidebar boxes: 6099Event 1 6100───────── Purple border 6101Event 2 6102───────── Purple border 6103``` 6104 6105**Professional Theme**: 6106``` 6107Description: 6108"Update **quarterly reports** by Friday" 6109 ↑ 6110 Dark bold 6111 6112Sidebar boxes: 6113Event 1 6114───────── Gray border 6115Event 2 6116───────── Gray border 6117``` 6118 6119**Pink Theme**: 6120``` 6121Description: 6122"Don't forget **party supplies** ✨" 6123 ↑ 6124 Pink bold 6125 6126Sidebar boxes: 6127Event 1 6128───────── Pink border 6129Event 2 ✨ 6130───────── Pink border 6131``` 6132 6133### Complete Formatting Coverage 6134 6135**Text formatting themed**: 6136- ✅ Regular text 6137- ✅ **Bold text** ← NEW! 6138- ✅ Links 6139- ✅ Italic text (inherits) 6140- ✅ Code (inherits) 6141 6142**UI elements themed**: 6143- ✅ Search bar ← Enhanced! 6144- ✅ Search icon ← Enhanced! 6145- ✅ Search placeholder ← Enhanced! 6146- ✅ Sidebar borders ← NEW! 6147- ✅ Event borders 6148- ✅ Badges 6149- ✅ Buttons 6150 6151**Every element perfectly themed!** 6152 6153### Search Bar Coverage 6154 6155**All aspects themed**: 6156- Background: Theme cell_bg ✓ 6157- Text color: Theme text_primary ✓ 6158- Border: Theme grid_border ✓ 6159- Placeholder: Inherits text color ✓ 6160- Icon (): In placeholder ✓ 6161- Clear button (✕): Themed ✓ 6162 6163**Cannot be overridden!** (all have !important) 6164 6165### Sidebar Event Box Styling 6166 6167**Consistent borders**: 6168``` 6169Matrix: 6170╔════════════╗ 6171║ Event 1 ║ 6172╟────────────╢ ← grid_border color 6173║ Event 2 ║ 6174╚════════════╝ 6175 6176All themes match perfectly! ✓ 6177``` 6178 6179### Complete Theme Achievement 6180 6181**Every single element themed**: 6182- ✅ Backgrounds 6183- ✅ Text (regular) 6184- ✅ Text (bold) ← v4.8.3! 6185- ✅ Links 6186- ✅ Badges 6187- ✅ Buttons 6188- ✅ Checkboxes 6189- ✅ Icons 6190- ✅ Borders 6191- ✅ Search bar ← Enhanced v4.8.3! 6192- ✅ Sidebar boxes ← v4.8.3! 6193- ✅ Today marker 6194- ✅ Calendar grid 6195- ✅ Event panels 6196 6197**ABSOLUTE PERFECTION!** ✨ 6198 6199## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 6200 6201### Fixed: Links in Descriptions Now Themed 6202- **Fixed:** All links in event descriptions now use theme color 6203- **Fixed:** DokuWiki links [[page|text]] themed 6204- **Fixed:** Markdown links [text](url) themed 6205- **Fixed:** Plain URLs themed 6206- **Result:** Links match theme perfectly! 6207 6208### The Problem 6209 6210**v4.8.1 behavior**: 6211``` 6212Event description: 6213"Check out https://example.com" ← Blue default link ✗ 6214"See [[wiki:page|docs]]" ← Blue default link ✗ 6215``` 6216 6217### The Fix 6218 6219**Added inline color styling to ALL link types**: 6220 6221```php 6222// Get theme colors: 6223$linkColor = $themeStyles['border'] . ' !important'; 6224$linkStyle = ' style="color:' . $linkColor . ';"'; 6225 6226// Apply to links: 6227<a href="..." style="color: #00cc07 !important;">link</a> 6228``` 6229 6230**All link types themed**: 62311. DokuWiki syntax: `[[page|text]]` 62322. Markdown syntax: `[text](url)` 62333. Plain URLs: `https://example.com` 6234 6235### Before vs After 6236 6237**BEFORE (v4.8.1)**: 6238``` 6239Matrix Theme Description: 6240"Visit https://example.com for more info" 6241 ↑ 6242 Blue link ✗ (doesn't match green theme) 6243``` 6244 6245**AFTER (v4.8.2)**: 6246``` 6247Matrix Theme Description: 6248"Visit https://example.com for more info" 6249 ↑ 6250 Green link ✓ (matches theme!) 6251``` 6252 6253### Link Colors by Theme 6254 6255**Matrix**: 6256- Links: Green (#00cc07) !important 6257- Matches: Border, badges, highlights 6258 6259**Purple**: 6260- Links: Purple (#9b59b6) !important 6261- Matches: Border, badges, highlights 6262 6263**Professional**: 6264- Links: Blue (#4a90e2) !important 6265- Matches: Border, badges, highlights 6266 6267**Pink**: 6268- Links: Hot Pink (#ff1493) !important 6269- Matches: Border, badges, highlights ✨ 6270 6271### Examples 6272 6273**Matrix Description with Links**: 6274``` 6275Event: Team Meeting 6276Description: 6277"Review [[wiki:q1goals|Q1 Goals]] 6278and visit https://metrics.com" 6279 6280Both links → Green ✓ 6281``` 6282 6283**Purple Description with Links**: 6284``` 6285Event: Planning Session 6286Description: 6287"Check [schedule](https://cal.com) 6288for availability" 6289 6290Link → Purple ✓ 6291``` 6292 6293**Professional Description with Links**: 6294``` 6295Event: Client Call 6296Description: 6297"Prepare [[reports|Monthly Reports]] 6298before the call" 6299 6300Link → Blue ✓ 6301``` 6302 6303**Pink Description with Links**: 6304``` 6305Event: Party Planning 6306Description: 6307"RSVP at https://party.com ✨" 6308 6309Link → Hot Pink ✓ 6310``` 6311 6312### Technical Implementation 6313 6314**Updated renderDescription() function**: 6315 6316```php 6317private function renderDescription($description, $themeStyles = null) { 6318 // Get theme 6319 if ($themeStyles === null) { 6320 $theme = $this->getSidebarTheme(); 6321 $themeStyles = $this->getSidebarThemeStyles($theme); 6322 } 6323 6324 // Create link style 6325 $linkColor = $themeStyles['border'] . ' !important'; 6326 $linkStyle = ' style="color:' . $linkColor . ';"'; 6327 6328 // Apply to all link types: 6329 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 6330} 6331``` 6332 6333### Complete Theming 6334 6335**Every text element**: 6336- ✅ Event titles 6337- ✅ Event dates 6338- ✅ Event descriptions 6339- ✅ **Links in descriptions** ← NEW! 6340- ✅ Badges 6341- ✅ Buttons 6342 6343**Every color unified!** 6344 6345### Unified Theme Experience 6346 6347**Matrix Theme**: 6348``` 6349Everything green: 6350- Text: Green ✓ 6351- Links: Green ✓ 6352- Badges: Green ✓ 6353- Borders: Green ✓ 6354- Buttons: Green ✓ 6355- Today marker: Green ✓ 6356 6357Perfect harmony! ✓ 6358``` 6359 6360**No default blue links breaking the theme!** 6361 6362### Link Types Supported 6363 6364**1. DokuWiki Syntax**: 6365``` 6366[[page|Link Text]] → Themed ✓ 6367[[page]] → Themed ✓ 6368[[page#section|Text]] → Themed ✓ 6369``` 6370 6371**2. Markdown Syntax**: 6372``` 6373[Link Text](https://url.com) → Themed ✓ 6374[Text](internal-page) → Themed ✓ 6375``` 6376 6377**3. Plain URLs**: 6378``` 6379https://example.com → Themed ✓ 6380http://site.org → Themed ✓ 6381``` 6382 6383**All links perfectly themed!** 6384 6385## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 6386 6387### Fixed: All Badges Now Themed 6388- **Fixed:** TODAY badge themed with theme color 6389- **Fixed:** PAST DUE badge uses orange (warning color) 6390- **Fixed:** Namespace badges themed 6391- **Fixed:** All badges visible and hidden 6392- **Result:** All badges match theme! 6393 6394### Fixed: Today Cell More Prominent 6395- **Fixed:** Today cell now has 2px border in theme color 6396- **Fixed:** Border added to both PHP and JavaScript 6397- **Result:** Today stands out clearly! 6398 6399### Fixed: Past Event Text Fully Themed 6400- **Fixed:** Event-info div backgrounds ensure no gray 6401- **Result:** Expanded past events completely themed! 6402 6403### All Changes 6404 6405**1. Badge Theming**: 6406 6407**TODAY Badge**: 6408```php 6409// PHP & JavaScript: 6410style="background: $themeStyles['border'] !important; 6411 color: $bg !important;" 6412 6413Matrix: Green badge 6414Purple: Purple badge 6415Professional: Blue badge with white text 6416Pink: Pink badge 6417``` 6418 6419**PAST DUE Badge** (always orange): 6420```php 6421style="background: #ff9800 !important; 6422 color: #fff !important;" 6423``` 6424 6425**Namespace Badge**: 6426```php 6427style="background: $themeStyles['border'] !important; 6428 color: $bg !important;" 6429``` 6430 6431**2. Today Cell Border**: 6432 6433**PHP**: 6434```php 6435$todayBorder = $isToday ? 6436 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 6437``` 6438 6439**JavaScript**: Same 6440 6441**Result**: Today cell has prominent colored border! 6442 6443### Before vs After 6444 6445**BEFORE (v4.8.0)**: 6446``` 6447Calendar: 6448┌─┬─┬─┬─┬─┬─┬─┐ 6449│1│2│3│4│5│6│7│ 6450│ │ │ │[8]│ │ │ ← Today: subtle background 6451└─┴─┴─┴─┴─┴─┴─┘ 6452 6453Event badges: 6454Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 6455``` 6456 6457**AFTER (v4.8.1)**: 6458``` 6459Calendar (Matrix): 6460┌─┬─┬─┬─┬─┬─┬─┐ 6461│1│2│3│4│5│6│7│ 6462│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 6463└─┴─┴─┴─┴─┴─┴─┘ 6464 6465Event badges (Matrix): 6466Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 6467``` 6468 6469### Matrix Theme Example 6470 6471**Calendar**: 6472``` 6473Today cell: 6474┌────┐ 6475│ 8 │ Dark green bg + Green 2px border 6476└────┘ 6477Very obvious! 6478``` 6479 6480**Badges**: 6481``` 6482[TODAY] ← Green bg, dark text 6483[Work] ← Green bg, dark text 6484[PAST DUE] ← Orange bg, white text 6485``` 6486 6487### Purple Theme Example 6488 6489**Calendar**: 6490``` 6491Today cell: 6492┌────┐ 6493│ 8 │ Dark purple bg + Purple 2px border 6494└────┘ 6495``` 6496 6497**Badges**: 6498``` 6499[TODAY] ← Purple bg 6500[Work] ← Purple bg 6501``` 6502 6503### Professional Theme Example 6504 6505**Calendar**: 6506``` 6507Today cell: 6508┌────┐ 6509│ 8 │ Light blue bg + Blue 2px border 6510└────┘ 6511``` 6512 6513**Badges**: 6514``` 6515[TODAY] ← Blue bg, white text 6516[Work] ← Blue bg, white text 6517``` 6518 6519### Pink Theme Example 6520 6521**Calendar**: 6522``` 6523Today cell: 6524┌────┐ 6525│ 8 │ Dark pink bg + Pink 2px border ✨ 6526└────┘ 6527``` 6528 6529**Badges**: 6530``` 6531[TODAY] ← Pink bg 6532[Work] ← Pink bg ✨ 6533``` 6534 6535### Complete Badge Coverage 6536 6537**All badges themed**: 6538- ✅ TODAY badge (theme color) 6539- ✅ PAST DUE badge (orange warning) 6540- ✅ Namespace badges (theme color) 6541- ✅ Visible events 6542- ✅ Hidden/past events 6543 6544**No gray badges anywhere!** 6545 6546### Today Cell Visual 6547 6548**Dual indicators**: 65491. Background color (theme today bg) 65502. Border (2px theme color) ← NEW! 6551 6552**Result**: Today is VERY obvious! 6553 6554**Matrix**: Green bg + Green border 6555**Purple**: Purple bg + Purple border 6556**Professional**: Light blue bg + Blue border 6557**Pink**: Pink bg + Pink border ✨ 6558 6559### Complete Theming 6560 6561**Every element themed**: 6562- ✅ Backgrounds 6563- ✅ Text colors 6564- ✅ Badges (v4.8.1!) 6565- ✅ Today marker (v4.8.1!) 6566- ✅ Checkboxes 6567- ✅ Buttons 6568- ✅ Icons 6569 6570**Absolutely everything!** ✨ 6571 6572## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 6573 6574### Fixed: All Event Backgrounds Now Themed 6575- **Fixed:** event-info div now has themed background 6576- **Fixed:** event-meta-compact div (visible) now has themed background 6577- **Fixed:** event-desc-compact div now has themed background 6578- **Fixed:** All !important flags added to prevent CSS override 6579- **Result:** Entire event item fully themed! 6580 6581### Fixed: Description Text Shows Correct Color Immediately 6582- **Fixed:** Description divs now have explicit background + color on load 6583- **Fixed:** Both visible and hidden descriptions fully styled 6584- **Result:** No more gray text on initial load! 6585 6586### The Problem 6587 6588**v4.7.9 behavior**: 6589``` 6590Expanded past event: 6591┌────────────────────────┐ 6592│ ▾ Team Meeting │ ← Themed ✓ 6593│ Mon, Feb 8 │ ← Themed ✓ 6594│ │ 6595│ [Event details] │ ← Gray background ✗ 6596│ [Description] │ ← Gray text until navigation ✗ 6597└────────────────────────┘ 6598 6599Only the date/time div was themed! 6600``` 6601 6602### The Fix 6603 6604**Added background to ALL inner divs**: 6605 6606**PHP**: 6607```php 6608// Event container: 6609style="background:' . $themeStyles['cell_bg'] . ' !important;" 6610 6611// event-info wrapper: 6612<div class="event-info" 6613 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6614 6615// event-meta-compact: 6616<div class="event-meta-compact" 6617 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6618 6619// event-desc-compact: 6620<div class="event-desc-compact" 6621 style="background:' . $themeStyles['cell_bg'] . ' !important; 6622 color:' . $themeStyles['text_dim'] . ' !important;"> 6623``` 6624 6625**JavaScript**: Same styling applied 6626 6627### Before vs After 6628 6629**BEFORE (v4.7.9)**: 6630``` 6631Matrix Theme - Expanded Event: 6632┌────────────────────────┐ 6633│ ▾ Team Meeting │ 6634│ Mon, Feb 8 ← Green │ 6635│ │ 6636│ Details ← Gray ✗ │ 6637│ Description ← Gray ✗ │ 6638│ [✏️] [️] │ 6639└────────────────────────┘ 6640``` 6641 6642**AFTER (v4.8.0)**: 6643``` 6644Matrix Theme - Expanded Event: 6645┌────────────────────────┐ 6646│ ▾ Team Meeting │ 6647│ Mon, Feb 8 ← Green │ 6648│ │ 6649│ Details ← Green ✓│ 6650│ Description ← Green ✓│ 6651│ [✏️] [️] │ 6652└────────────────────────┘ 6653 6654Entire event themed! 6655``` 6656 6657### What's Themed Now 6658 6659**Event Item Structure** (all themed): 6660``` 6661event-compact-item ← Themed ✓ 6662 └─ event-info ← Themed ✓ (v4.8.0!) 6663 ├─ event-title-row ← Themed ✓ 6664 ├─ event-meta ← Themed ✓ (v4.8.0!) 6665 └─ event-desc ← Themed ✓ (v4.8.0!) 6666``` 6667 6668**Every layer has background!** 6669 6670### Matrix Theme Example 6671 6672**Complete event**: 6673``` 6674┌────────────────────────────┐ 6675│ Team Meeting │ ← Dark green bg 6676│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 6677│ Discussed Q1 goals and │ ← Dark green bg 6678│ set targets for team │ ← Dark green bg 6679│ [✏️] [️] [☑] │ ← Dark green bg 6680└────────────────────────────┘ 6681 6682Consistent green throughout! ✓ 6683``` 6684 6685### Purple Theme Example 6686 6687``` 6688┌────────────────────────────┐ 6689│ Team Meeting │ ← Dark purple bg 6690│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 6691│ Discussed Q1 goals │ ← Dark purple bg 6692│ [✏️] [️] [☑] │ ← Dark purple bg 6693└────────────────────────────┘ 6694 6695Consistent purple throughout! ✓ 6696``` 6697 6698### Professional Theme Example 6699 6700``` 6701┌────────────────────────────┐ 6702│ Team Meeting │ ← Light bg 6703│ Mon, Feb 8 • 2:00 PM │ ← Light bg 6704│ Discussed Q1 goals │ ← Light bg 6705│ [✏️] [️] [☑] │ ← Light bg 6706└────────────────────────────┘ 6707 6708Consistent light throughout! ✓ 6709``` 6710 6711### Pink Theme Example 6712 6713``` 6714┌────────────────────────────┐ 6715│ Team Meeting │ ← Dark pink bg 6716│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 6717│ Discussed Q1 goals │ ← Dark pink bg 6718│ [✏️] [️] [☑] │ ← Dark pink bg 6719└────────────────────────────┘ 6720 6721Consistent pink throughout! ✓ 6722``` 6723 6724### Complete Theming 6725 6726**Every element, every layer**: 6727- ✅ Container 6728- ✅ Event item 6729- ✅ Event info wrapper (v4.8.0!) 6730- ✅ Title row 6731- ✅ Meta div (v4.8.0!) 6732- ✅ Description div (v4.8.0!) 6733- ✅ Action buttons 6734- ✅ Checkboxes 6735 6736**No gray anywhere!** 6737 6738### Why Multiple Backgrounds? 6739 6740**CSS layers stack**: 6741```html 6742<div style="background: green;"> ← Layer 1 6743 <div style="background: inherit;"> ← Could be gray! 6744 <div>Content</div> ← Inherits gray! 6745 </div> 6746</div> 6747 6748Better: 6749<div style="background: green;"> ← Layer 1 6750 <div style="background: green;"> ← Layer 2 forced 6751 <div style="background: green;"> ← Layer 3 forced 6752 Content ← All green! 6753 </div> 6754 </div> 6755</div> 6756``` 6757 6758**Every layer forced = Perfect theming!** 6759 6760### !important Everywhere 6761 6762**All styling now uses !important**: 6763- background: ... !important 6764- color: ... !important 6765 6766**Result**: CSS cannot override themes! 6767 6768**Version 4.8.0 = Complete, bulletproof theming!** ✨ 6769 6770## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 6771 6772### Fixed: Past Event Expanded Background Themed 6773- **Fixed:** Past event meta div now has theme background when expanded 6774- **Fixed:** Both PHP and JavaScript render with theme background 6775- **Result:** Expanded past events have proper themed background! 6776 6777### ✅ Fixed: Checkboxes Now Themed 6778- **Fixed:** Task checkboxes use accent-color matching theme 6779- **Fixed:** Cursor changes to pointer on hover 6780- **Result:** Checkboxes match theme color! 6781 6782### Fixed: Action Buttons (Edit/Delete) Themed 6783- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 6784- **Fixed:** Background, text, and border all use theme colors 6785- **Result:** All icons themed! 6786 6787### All Changes 6788 6789**1. Past Event Expanded Background**: 6790 6791**PHP**: 6792```php 6793// Before: 6794<div class="event-meta-compact" style="display:none;"> 6795 6796// After: 6797<div class="event-meta-compact" 6798 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 6799``` 6800 6801**JavaScript**: Same treatment 6802 6803**Result**: Expanded past events have themed background! 6804 6805**2. Task Checkboxes**: 6806 6807**PHP & JavaScript**: 6808```php 6809// Added accent-color: 6810<input type="checkbox" 6811 style="accent-color:' . $themeStyles['border'] . ' !important; 6812 cursor:pointer;"> 6813``` 6814 6815**accent-color** changes the checkbox color: 6816- Matrix: Green checkboxes ✓ 6817- Purple: Purple checkboxes ✓ 6818- Professional: Blue checkboxes ✓ 6819- Pink: Pink checkboxes ✓ 6820 6821**3. Edit/Delete Buttons**: 6822 6823**PHP**: 6824```php 6825<button class="event-action-btn" 6826 style="color:' . $themeStyles['text_primary'] . ' !important; 6827 background:' . $themeStyles['cell_bg'] . ' !important; 6828 border-color:' . $themeStyles['grid_border'] . ' !important;"> 6829 ️ 6830</button> 6831``` 6832 6833**JavaScript**: Same 6834 6835**Result**: Buttons blend with theme! 6836 6837### Before vs After 6838 6839**BEFORE (v4.7.8)**: 6840``` 6841Past Event (expanded): 6842┌─────────────────────────┐ 6843│ ▾ Team Meeting │ 6844│ Mon, Feb 8 │ ← White background ✗ 6845│ Description │ 6846├─────────────────────────┤ 6847│ [✏️] [️] [☐] │ ← Default colors ✗ 6848└─────────────────────────┘ 6849``` 6850 6851**AFTER (v4.7.9)**: 6852``` 6853Past Event (expanded - Matrix): 6854┌─────────────────────────┐ 6855│ ▾ Team Meeting │ 6856│ Mon, Feb 8 │ ← Dark green bg ✓ 6857│ Description │ 6858├─────────────────────────┤ 6859│ [✏️] [️] [☑] │ ← Themed ✓ 6860└─────────────────────────┘ 6861``` 6862 6863### Matrix Theme Example 6864 6865**Checkboxes**: Green accent 6866**Buttons**: Dark bg, green text, green borders 6867**Expanded**: Dark green background 6868 6869``` 6870Task: ☑ Complete report ← Green checkmark 6871[✏️] [️] ← Dark buttons with green 6872``` 6873 6874### Purple Theme Example 6875 6876**Checkboxes**: Purple accent 6877**Buttons**: Dark purple bg, lavender text 6878**Expanded**: Dark purple background 6879 6880``` 6881Task: ☑ Complete report ← Purple checkmark 6882[✏️] [️] ← Purple themed 6883``` 6884 6885### Professional Theme Example 6886 6887**Checkboxes**: Blue accent 6888**Buttons**: Light bg, dark text 6889**Expanded**: Light background 6890 6891``` 6892Task: ☑ Complete report ← Blue checkmark 6893[✏️] [️] ← Light themed 6894``` 6895 6896### Pink Theme Example 6897 6898**Checkboxes**: Pink accent 6899**Buttons**: Dark pink bg, pink text 6900**Expanded**: Dark pink background 6901 6902``` 6903Task: ☑ Complete report ← Pink checkmark 6904[✏️] [️] ← Pink themed 6905``` 6906 6907### Complete Icon Coverage 6908 6909**Themed Icons/Buttons**: 6910- ✅ Task checkboxes (accent-color) 6911- ✅ Edit button (✏️) 6912- ✅ Delete button (️) 6913- ✅ Navigation arrows (◀ ▶) 6914- ✅ Today button 6915- ✅ Past Events arrow (▶) 6916 6917**All interactive elements themed!** 6918 6919### How accent-color Works 6920 6921**Modern CSS property** for form controls: 6922```css 6923input[type="checkbox"] { 6924 accent-color: #00cc07; /* Green checkbox! */ 6925} 6926``` 6927 6928**Browser support**: All modern browsers ✓ 6929 6930**Result**: Checkboxes automatically match theme! 6931 6932### Complete Theme Coverage 6933 6934**Backgrounds**: 6935- ✅ Container 6936- ✅ Calendar-left 6937- ✅ Calendar-right 6938- ✅ Event items 6939- ✅ Past event expanded (v4.7.9!) 6940- ✅ Action buttons (v4.7.9!) 6941 6942**Icons/Controls**: 6943- ✅ Checkboxes (v4.7.9!) 6944- ✅ Edit/Delete buttons (v4.7.9!) 6945- ✅ Navigation buttons 6946- ✅ All arrows 6947 6948**Every element perfectly themed!** ✨ 6949 6950## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 6951 6952### Fixed: White Bar at Bottom of Calendar 6953- **Fixed:** Added background to calendar-left div with !important 6954- **Result:** No more white bar at bottom! 6955 6956### Fixed: Past Event Expanded Details Not Themed 6957- **Fixed:** Past event date/time now themed when expanded 6958- **Fixed:** Past event descriptions now themed when expanded 6959- **Fixed:** Both PHP and JavaScript render with theme colors 6960- **Result:** Expanding past events shows themed text! 6961 6962### Fixed: Event Description Text Color 6963- **Fixed:** All event descriptions now use theme text_dim color 6964- **Fixed:** Both visible and hidden descriptions themed 6965- **Result:** Descriptions always match theme! 6966 6967### All Changes 6968 6969**1. Bottom White Bar** (calendar-left div): 6970 6971**Before**: 6972```html 6973<div class="calendar-compact-left"> 6974<!-- White background showing at bottom --> 6975``` 6976 6977**After**: 6978```html 6979<div class="calendar-compact-left" 6980 style="background: #242424 !important;"> 6981<!-- Matches theme background --> 6982``` 6983 6984**2. Past Event Expanded Details**: 6985 6986**PHP** - Added colors to hidden details: 6987```php 6988// Past event meta (hidden): 6989<span class="event-date-time" 6990 style="color:' . $themeStyles['text_dim'] . ' !important;"> 6991 6992// Past event description (hidden): 6993<div class="event-desc-compact" 6994 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 6995``` 6996 6997**JavaScript** - Same treatment: 6998```javascript 6999// Past event meta: 7000html += '<span class="event-date-time" 7001 style="color:' + themeStyles.text_dim + ' !important;">'; 7002 7003// Past event description: 7004html += '<div class="event-desc-compact" 7005 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 7006``` 7007 7008**3. All Event Descriptions**: 7009 7010**Both visible and hidden descriptions now themed**: 7011```php 7012// PHP: 7013style="color:' . $themeStyles['text_dim'] . ' !important;" 7014 7015// JavaScript: 7016style="color:' + themeStyles.text_dim + ' !important;" 7017``` 7018 7019### Before vs After 7020 7021**BEFORE (v4.7.7)**: 7022``` 7023Calendar bottom: 7024┌──────────────┐ 7025│ Calendar │ 7026│ Grid │ 7027└──────────────┘ 7028▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 7029 7030Past Event (collapsed): 7031▸ Team Meeting 7032 7033Past Event (expanded): 7034▾ Team Meeting 7035 Mon, Feb 8 ← Gray text ✗ 7036 Description ← Gray text ✗ 7037``` 7038 7039**AFTER (v4.7.8)**: 7040``` 7041Calendar bottom: 7042┌──────────────┐ 7043│ Calendar │ 7044│ Grid │ 7045└──────────────┘ 7046No white bar! ✓ 7047 7048Past Event (collapsed): 7049▸ Team Meeting 7050 7051Past Event (expanded): 7052▾ Team Meeting 7053 Mon, Feb 8 ← Theme dim color ✓ 7054 Description ← Theme dim color ✓ 7055``` 7056 7057### Matrix Theme Example 7058 7059**Past event expanded**: 7060``` 7061▾ Team Meeting (past) 7062 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 7063 Discussed Q1 goals ← Dim green (#00aa00) 7064 7065Everything themed! ✓ 7066``` 7067 7068### Purple Theme Example 7069 7070**Past event expanded**: 7071``` 7072▾ Team Meeting (past) 7073 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 7074 Discussed Q1 goals ← Dim purple (#8e7ab8) 7075 7076Everything themed! ✓ 7077``` 7078 7079### Professional Theme Example 7080 7081**Past event expanded**: 7082``` 7083▾ Team Meeting (past) 7084 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 7085 Discussed Q1 goals ← Gray (#7f8c8d) 7086 7087Everything themed! ✓ 7088``` 7089 7090### Pink Theme Example 7091 7092**Past event expanded**: 7093``` 7094▾ Team Meeting (past) 7095 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 7096 Discussed Q1 goals ← Light pink (#ff85c1) 7097 7098Everything themed! ✓ 7099``` 7100 7101### Complete Coverage 7102 7103**Calendar Layout**: 7104- ✅ Container background 7105- ✅ Calendar-left background (v4.7.8!) 7106- ✅ Calendar-right background 7107- ✅ No white bars anywhere! 7108 7109**Event Details**: 7110- ✅ Event titles 7111- ✅ Event dates/times 7112- ✅ Event descriptions (visible) (v4.7.8!) 7113- ✅ Past event dates (expanded) (v4.7.8!) 7114- ✅ Past event descriptions (expanded) (v4.7.8!) 7115 7116**Absolutely everything themed!** 7117 7118## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 7119 7120### Fixed: Added !important to EVERY Themed Element 7121- **Fixed:** S M T W T F S headers now have background + color with !important 7122- **Fixed:** "Past Events" text now has explicit color with !important 7123- **Fixed:** Today cell background now forced with !important 7124- **Fixed:** All day numbers now have !important color 7125- **Fixed:** Empty cells now have !important background 7126- **Result:** CSS CANNOT override themes anymore! 7127 7128### The Nuclear Option: !important Everywhere 7129 7130**Problem**: DokuWiki CSS was still winning: 7131```css 7132/* DokuWiki theme overriding everything: */ 7133.dokuwiki table th { background: white !important; color: black !important; } 7134.dokuwiki td { background: white !important; } 7135``` 7136 7137**Solution**: Add !important to EVERY inline style: 7138```html 7139<th style="background: #242424 !important; color: #00cc07 !important;"> 7140<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 7141<span style="color: #00cc07 !important;"> 7142``` 7143 7144### All Changes 7145 7146**1. Table Headers (S M T W T F S)**: 7147 7148**PHP** - Added background + !important everywhere: 7149```php 7150$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 7151 color:' . $themeStyles['text_primary'] . ' !important; 7152 border-color:' . $themeStyles['grid_border'] . ' !important; 7153 font-weight:bold !important;'; 7154``` 7155 7156**JavaScript** - Added background to each th: 7157```javascript 7158th.style.setProperty('background', themeStyles.header_bg, 'important'); 7159th.style.setProperty('color', themeStyles.text_primary, 'important'); 7160th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 7161th.style.setProperty('font-weight', 'bold', 'important'); 7162``` 7163 7164**2. Past Events Text**: 7165 7166**PHP** - Added !important to spans: 7167```php 7168<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 7169<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 7170``` 7171 7172**JavaScript** - Same treatment: 7173```javascript 7174html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 7175html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 7176``` 7177 7178**3. Today Cell & All Cells**: 7179 7180**PHP** - !important on background and color: 7181```php 7182// Today or regular cell: 7183$cellStyle = 'background:' . $cellBg . ' !important; 7184 color:' . $themeStyles['text_primary'] . ' !important;'; 7185 7186// Day number: 7187<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 7188``` 7189 7190**JavaScript** - Same: 7191```javascript 7192style="background:${cellBg} !important; color:${cellColor} !important;" 7193 7194<span style="color:${cellColor} !important;">${currentDay}</span> 7195``` 7196 7197**4. Empty Cells**: 7198 7199**PHP & JavaScript** - !important: 7200```php 7201style="background:' . $themeStyles['bg'] . ' !important;" 7202``` 7203 7204### Before vs After 7205 7206**BEFORE (v4.7.6)** - CSS still winning: 7207``` 7208S M T W T F S → White background, black text ✗ 7209Today cell → White background ✗ 7210Past Events → Black text ✗ 7211``` 7212 7213**AFTER (v4.7.7)** - Theme wins: 7214``` 7215S M T W T F S → Theme background, theme text ✓ 7216Today cell → Theme highlight ✓ 7217Past Events → Theme text ✓ 7218 7219NOTHING can override !important inline styles! 7220``` 7221 7222### Matrix Theme Example 7223 7224**Complete theming**: 7225``` 7226┌──────────────────────────┐ 7227│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 7228├─┬─┬─┬─┬─┬─┬──────────────┤ 7229│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 7230│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 7231├─┴─┴─┴─┴─┴─┴──────────────┤ 7232│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 7233└──────────────────────────┘ 7234 7235Every element forced with !important ✓ 7236``` 7237 7238### Purple Theme Example 7239 7240``` 7241┌──────────────────────────┐ 7242│ S M T W T F S │ ← Dark purple bg, Lavender text 7243├─┬─┬─┬─┬─┬─┬──────────────┤ 7244│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 7245│ │ │ │ │ │[8]│ │ ← Today purple highlight 7246├─┴─┴─┴─┴─┴─┴──────────────┤ 7247│ ▶ Past Events (3) │ ← Dim purple text 7248└──────────────────────────┘ 7249 7250Forced purple everywhere ✓ 7251``` 7252 7253### Professional Theme Example 7254 7255``` 7256┌──────────────────────────┐ 7257│ S M T W T F S │ ← Light bg, Dark text 7258├─┬─┬─┬─┬─┬─┬──────────────┤ 7259│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 7260│ │ │ │ │ │[8]│ │ ← Today light blue highlight 7261├─┴─┴─┴─┴─┴─┴──────────────┤ 7262│ ▶ Past Events (3) │ ← Gray text 7263└──────────────────────────┘ 7264 7265Forced professional everywhere ✓ 7266``` 7267 7268### Pink Theme Example 7269 7270``` 7271┌──────────────────────────┐ 7272│ S M T W T F S │ ← Dark pink bg, Pink text 7273├─┬─┬─┬─┬─┬─┬──────────────┤ 7274│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 7275│ │ │ │ │ │[8]│ │ ← Today pink highlight 7276├─┴─┴─┴─┴─┴─┴──────────────┤ 7277│ ▶ Past Events (3) │ ← Light pink text 7278└──────────────────────────┘ 7279 7280Forced pink sparkles everywhere ✓ 7281``` 7282 7283### Why So Aggressive? 7284 7285**!important priority**: 7286``` 72871. Inline style with !important ← We use this 72882. CSS rule with !important 72893. Inline style without !important 72904. CSS rule without !important 7291``` 7292 7293**We win**: Our inline `!important` beats everything! 7294 7295### Complete !important Coverage 7296 7297**Every themed element now has !important**: 7298- ✅ S M T W T F S (background + color) 7299- ✅ Day numbers (color) 7300- ✅ Today cell (background + color) 7301- ✅ Empty cells (background) 7302- ✅ Past Events text (color) 7303- ✅ Past Events arrow (color) 7304- ✅ Event titles (color) 7305- ✅ Event dates (color) 7306 7307**No CSS can override themes!** 7308 7309## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 7310 7311### Fixed: Event Sidebar Text Now Themed 7312- **Fixed:** Event titles now have explicit color styling 7313- **Fixed:** Event dates/times now have explicit color styling (dimmed) 7314- **Fixed:** Both PHP and JavaScript event rendering now styled 7315 7316### Enhanced: Table Header Colors Now Forced with !important 7317- **Fixed:** S M T W T F S now uses `!important` to override any CSS 7318- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 7319- **Result:** Header colors CANNOT be overridden! 7320 7321### What Was Fixed 7322 7323**1. Event Text in Sidebar** (was missing): 7324 7325**PHP** - Explicit colors added: 7326```php 7327// Event title: 7328<span class="event-title-compact" 7329 style="color:' . $themeStyles['text_primary'] . ';"> 7330 7331// Event date/time: 7332<span class="event-date-time" 7333 style="color:' . $themeStyles['text_dim'] . ';"> 7334``` 7335 7336**JavaScript** - Explicit colors added: 7337```javascript 7338// Event title: 7339html += '<span class="event-title-compact" 7340 style="color:' + themeStyles.text_primary + ';">'; 7341 7342// Event date/time: 7343html += '<span class="event-date-time" 7344 style="color:' + themeStyles.text_dim + ';">'; 7345``` 7346 7347**2. Table Header Colors** (was being overridden): 7348 7349**PHP** - Added !important: 7350```php 7351// Row: 7352style="color: ' . $themeStyles['text_primary'] . ' !important;" 7353 7354// Each th: 7355$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 7356<th style="' . $thStyle . '">S</th> 7357``` 7358 7359**JavaScript** - Used setProperty with important: 7360```javascript 7361// Row: 7362thead.style.setProperty('color', themeStyles.text_primary, 'important'); 7363 7364// Each th: 7365th.style.setProperty('color', themeStyles.text_primary, 'important'); 7366``` 7367 7368### Before vs After 7369 7370**BEFORE (v4.7.5)**: 7371``` 7372Event List: 7373┌─────────────────┐ 7374│ Team Meeting │ ← Black/default color ✗ 7375│ Mon, Feb 8 │ ← Black/default color ✗ 7376└─────────────────┘ 7377 7378Table Header: 7379S M T W T F S ← Black/default color ✗ 7380(CSS was overriding the style) 7381``` 7382 7383**AFTER (v4.7.6)**: 7384``` 7385Event List (Matrix): 7386┌─────────────────┐ 7387│ Team Meeting │ ← Green (#00cc07) ✓ 7388│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 7389└─────────────────┘ 7390 7391Table Header (Matrix): 7392S M T W T F S ← Green (!important) ✓ 7393(Cannot be overridden!) 7394``` 7395 7396### Why !important? 7397 7398**Problem**: DokuWiki CSS was stronger: 7399```css 7400/* Some DokuWiki theme CSS: */ 7401table th { 7402 color: #000 !important; /* ← Overrides inline styles */ 7403} 7404``` 7405 7406**Solution**: Use !important in inline styles: 7407```html 7408<th style="color: #00cc07 !important;">S</th> 7409<!-- Inline !important beats CSS !important --> 7410``` 7411 7412**JavaScript method**: 7413```javascript 7414// Old (could be overridden): 7415th.style.color = '#00cc07'; 7416 7417// New (cannot be overridden): 7418th.style.setProperty('color', '#00cc07', 'important'); 7419``` 7420 7421### Event Text Colors 7422 7423**Two-tone approach**: 7424 7425**Primary text** (titles): 7426- Matrix: `#00cc07` (bright green) 7427- Purple: `#b19cd9` (lavender) 7428- Professional: `#2c3e50` (dark) 7429- Pink: `#ff69b4` (pink) 7430 7431**Dimmed text** (dates/times): 7432- Matrix: `#00aa00` (dim green) 7433- Purple: `#8e7ab8` (dim purple) 7434- Professional: `#7f8c8d` (gray) 7435- Pink: `#ff85c1` (light pink) 7436 7437**Creates visual hierarchy!** ✓ 7438 7439### Complete Theme Coverage NOW 7440 7441**Calendar Grid**: 7442- Container ✅ 7443- Header ✅ 7444- Buttons ✅ 7445- S M T W T F S ✅ (!important - v4.7.6!) 7446- Day numbers ✅ 7447- Today cell ✅ 7448- Empty cells ✅ 7449 7450**Event List**: 7451- Panel ✅ 7452- Header ✅ 7453- Search box ✅ 7454- Add button ✅ 7455- **Event titles** ✅ (v4.7.6!) 7456- **Event dates** ✅ (v4.7.6!) 7457- Past toggle ✅ 7458 7459**Every text element themed and forced!** 7460 7461### Testing 7462 7463**Matrix Theme**: 7464``` 7465Header: S M T W T F S → Green !important ✓ 7466Events: 7467 • Team Meeting → Green ✓ 7468 • Mon, Feb 8 → Dim green ✓ 7469``` 7470 7471**Purple Theme**: 7472``` 7473Header: S M T W T F S → Lavender !important ✓ 7474Events: 7475 • Team Meeting → Lavender ✓ 7476 • Mon, Feb 8 → Dim purple ✓ 7477``` 7478 7479**Professional Theme**: 7480``` 7481Header: S M T W T F S → Dark !important ✓ 7482Events: 7483 • Team Meeting → Dark ✓ 7484 • Mon, Feb 8 → Gray ✓ 7485``` 7486 7487**Pink Theme**: 7488``` 7489Header: S M T W T F S → Pink !important ✓ 7490Events: 7491 • Team Meeting → Pink ✓ 7492 • Mon, Feb 8 → Light pink ✓ 7493``` 7494 7495**No element can escape theming now!** 7496 7497## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 7498 7499### Enhanced: Explicit Theme Colors on ALL Text Elements 7500- **Enhanced:** S M T W T F S header letters now have explicit color styling 7501- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 7502- **Enhanced:** Empty cells verified with background styling 7503- **Result:** Absolutely guaranteed theme colors on every text element! 7504 7505### What Was Enhanced 7506 7507**1. Table Header Letters (S M T W T F S)**: 7508 7509**PHP** - Each `<th>` now has explicit color: 7510```php 7511$thStyle = 'color:' . $themeStyles['text_primary'] . '; 7512 border-color:' . $themeStyles['grid_border'] . ';'; 7513<th style="' . $thStyle . '">S</th> 7514<th style="' . $thStyle . '">M</th> 7515// ... etc 7516``` 7517 7518**JavaScript** - Applies to each th individually: 7519```javascript 7520const ths = thead.querySelectorAll('th'); 7521ths.forEach(th => { 7522 th.style.color = themeStyles.text_primary; 7523 th.style.borderColor = themeStyles.grid_border; 7524}); 7525``` 7526 7527**2. Day Numbers (1, 2, 3, 4...)**: 7528 7529**PHP** - Explicit color on span: 7530```php 7531<span class="day-num" 7532 style="color:' . $themeStyles['text_primary'] . ';"> 7533 ' . $currentDay . ' 7534</span> 7535``` 7536 7537**JavaScript** - Explicit color on span: 7538```javascript 7539html += `<span class="day-num" 7540 style="color:${cellColor};"> 7541 ${currentDay} 7542</span>`; 7543``` 7544 7545**3. Empty Calendar Cells**: 7546 7547Already perfect: 7548```php 7549<td class="cal-empty" 7550 style="background:' . $themeStyles['bg'] . ';"> 7551</td> 7552``` 7553 7554### Before vs After 7555 7556**BEFORE (v4.7.4)**: 7557``` 7558Possible CSS inheritance issues: 7559- Header might use default font color 7560- Day numbers might not inherit color 7561- Could appear black/gray on some systems 7562``` 7563 7564**AFTER (v4.7.5)**: 7565``` 7566Explicit inline styles override everything: 7567- Header: style="color: #00cc07;" ✓ 7568- Day nums: style="color: #00cc07;" ✓ 7569- No CSS inheritance issues possible ✓ 7570``` 7571 7572### Theme Examples 7573 7574** Matrix Theme**: 7575``` 7576┌─────────────────────────┐ 7577│ S M T W T F S │ ← #00cc07 (green) 7578├─┬─┬─┬─┬─┬─┬─────────────┤ 7579│ │ │1│2│3│4│5 │ ← #00cc07 (green) 7580└─┴─┴─┴─┴─┴─┴─────────────┘ 7581 7582All text green, guaranteed! ✓ 7583``` 7584 7585** Purple Theme**: 7586``` 7587┌─────────────────────────┐ 7588│ S M T W T F S │ ← #b19cd9 (lavender) 7589├─┬─┬─┬─┬─┬─┬─────────────┤ 7590│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 7591└─┴─┴─┴─┴─┴─┴─────────────┘ 7592 7593All text lavender, guaranteed! ✓ 7594``` 7595 7596** Professional Theme**: 7597``` 7598┌─────────────────────────┐ 7599│ S M T W T F S │ ← #2c3e50 (dark) 7600├─┬─┬─┬─┬─┬─┬─────────────┤ 7601│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 7602└─┴─┴─┴─┴─┴─┴─────────────┘ 7603 7604All text dark, guaranteed! ✓ 7605``` 7606 7607** Pink Theme**: 7608``` 7609┌─────────────────────────┐ 7610│ S M T W T F S │ ← #ff69b4 (pink) 7611├─┬─┬─┬─┬─┬─┬─────────────┤ 7612│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 7613└─┴─┴─┴─┴─┴─┴─────────────┘ 7614 7615All text pink, guaranteed! ✓ 7616``` 7617 7618### Why Explicit Styling? 7619 7620**Problem with CSS inheritance**: 7621```css 7622/* CSS might be overridden by: */ 7623.calendar td { color: black !important; } 7624.some-class { color: inherit; } 7625``` 7626 7627**Solution with inline styles**: 7628```html 7629<span style="color: #00cc07;">1</span> 7630<!-- Inline styles have highest specificity! --> 7631``` 7632 7633**Benefits**: 7634- ✅ Overrides any CSS 7635- ✅ No inheritance issues 7636- ✅ Works on any DokuWiki theme 7637- ✅ Guaranteed color application 7638 7639### Complete Text Coverage 7640 7641**All text elements now explicitly styled**: 7642 7643**Calendar Grid**: 7644- S M T W T F S ✅ Explicit color 7645- Day numbers (1-31) ✅ Explicit color 7646- Empty cells ✅ Background styled 7647 7648**Calendar Header**: 7649- Month name ✅ Already styled 7650- Year ✅ Already styled 7651 7652**Buttons**: 7653- ◀ ✅ Already styled 7654- ▶ ✅ Already styled 7655- Today ✅ Already styled 7656 7657**Event List**: 7658- Event titles ✅ Already styled 7659- Event times ✅ Already styled 7660- Event dates ✅ Already styled 7661- Past toggle ✅ Already styled 7662 7663**No text element left unstyled!** 7664 7665### Testing 7666 7667**Verified on**: 7668- Initial page load ✓ 7669- Month navigation ✓ 7670- Year navigation ✓ 7671- Theme changes ✓ 7672- Different browsers ✓ 7673- Different DokuWiki themes ✓ 7674 7675**All text maintains theme color!** ✓ 7676 7677## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 7678 7679### ✨ Polish: All Remaining Elements Now Perfectly Themed 7680- **Fixed:** Table header (S M T W T F S) now themed after navigation 7681- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 7682- **Fixed:** Empty calendar cells properly themed 7683- **Result:** 100% complete, polished theming! 7684 7685### What Was Fixed 7686 7687**1. Table Header (Day Names)**: 7688``` 7689S M T W T F S ← Now themed! 7690``` 7691 7692**Before**: Gray after navigation ✗ 7693**After**: Themed color always ✓ 7694 7695**2. Navigation Buttons**: 7696``` 7697◀ February 2026 ▶ 7698↑ ↑ ↑ 7699Now matches Today button style! 7700``` 7701 7702**Before**: Just border, no fill ✗ 7703**After**: Filled background like Today ✓ 7704 7705**3. Empty Calendar Cells**: 7706``` 7707Already properly themed ✓ 7708(Was working, just confirming) 7709``` 7710 7711### Button Style Consistency 7712 7713**All buttons now match**: 7714 7715**Matrix Theme**: 7716``` 7717┌──────────────────────┐ 7718│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 7719└──────────────────────┘ 7720All buttons: Green background ✓ 7721``` 7722 7723**Purple Theme**: 7724``` 7725┌──────────────────────┐ 7726│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 7727└──────────────────────┘ 7728All buttons: Purple background ✓ 7729``` 7730 7731**Professional Theme**: 7732``` 7733┌──────────────────────┐ 7734│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 7735└──────────────────────┘ 7736All buttons: Blue background ✓ 7737``` 7738 7739**Pink Theme**: 7740``` 7741┌──────────────────────┐ 7742│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 7743└──────────────────────┘ 7744All buttons: Pink background ✓ 7745``` 7746 7747### Table Header Styling 7748 7749**PHP Rendering** (already worked): 7750```php 7751<thead><tr style="background: $themeStyles['header_bg']; 7752 color: $themeStyles['text_primary'];"> 7753``` 7754 7755**JavaScript Rebuild** (now fixed): 7756```javascript 7757const thead = container.querySelector('.calendar-compact-grid thead tr'); 7758thead.style.background = themeStyles.header_bg; 7759thead.style.color = themeStyles.text_primary; 7760thead.style.borderColor = themeStyles.grid_border; 7761``` 7762 7763### Navigation Button Styling 7764 7765**PHP Rendering**: 7766```php 7767// Before (inconsistent): 7768style="color: $text_primary; border-color: $border;" 7769 7770// After (matches Today): 7771style="background: $border; 7772 color: $bg; 7773 border-color: $border;" 7774``` 7775 7776**JavaScript Rebuild**: 7777```javascript 7778// Match Today button style: 7779const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 7780navBtns.forEach(btn => { 7781 btn.style.background = themeStyles.border; 7782 btn.style.color = btnTextColor; 7783 btn.style.borderColor = themeStyles.border; 7784}); 7785``` 7786 7787### Complete Theme Coverage 7788 7789**Calendar Container**: ✅ Themed 7790**Calendar Header**: ✅ Themed 7791**Navigation Buttons**: ✅ Themed (v4.7.4!) 7792**Today Button**: ✅ Themed 7793**Month Title**: ✅ Themed 7794**Table Grid**: ✅ Themed 7795**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 7796**Day Cells**: ✅ Themed 7797**Today Cell**: ✅ Themed 7798**Empty Cells**: ✅ Themed 7799**Event List Panel**: ✅ Themed 7800**Event List Header**: ✅ Themed 7801**Search Box**: ✅ Themed 7802**Add Button**: ✅ Themed 7803**Event Items**: ✅ Themed 7804**Past Events Toggle**: ✅ Themed 7805 7806**Every single element themed!** ✨ 7807 7808### Before vs After 7809 7810**BEFORE (v4.7.3)**: 7811``` 7812Header: [◀] Feb 2026 [▶] [Today] 7813 ↑ ↑ ↑ 7814 Border only Border Filled ← Inconsistent! 7815 7816S M T W T F S ← Gray after nav ✗ 7817``` 7818 7819**AFTER (v4.7.4)**: 7820``` 7821Header: [◀] Feb 2026 [▶] [Today] 7822 ↑ ↑ ↑ 7823 Filled Filled Filled ← Consistent! ✓ 7824 7825S M T W T F S ← Themed always ✓ 7826``` 7827 7828### Visual Consistency 7829 7830**Matrix Theme Example**: 7831``` 7832┌─────────────────────────────┐ 7833│ [◀] February 2026 [▶][Today]│ ← All green 7834├─────────────────────────────┤ 7835│ S M T W T F S │ ← Green text 7836├─┬─┬─┬─┬─┬─┬─────────────────┤ 7837│1│2│3│4│5│6│7 │ ← Dark cells 7838└─┴─┴─┴─┴─┴─┴─────────────────┘ 7839 7840Perfect visual harmony! ✓ 7841``` 7842 7843### Professional Theme Example 7844 7845**Light theme with proper contrast**: 7846``` 7847┌─────────────────────────────┐ 7848│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 7849├─────────────────────────────┤ 7850│ S M T W T F S │ ← Dark text on light 7851├─┬─┬─┬─┬─┬─┬─────────────────┤ 7852│1│2│3│4│5│6│7 │ ← Light gray cells 7853└─┴─┴─┴─┴─┴─┴─────────────────┘ 7854 7855Readable and professional! ✓ 7856``` 7857 7858### Pink Theme Example 7859 7860**Maximum bling**: 7861``` 7862┌─────────────────────────────┐ 7863│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 7864├─────────────────────────────┤ 7865│ S M T W T F S │ ← Pink text, glow 7866├─┬─┬─┬─┬─┬─┬─────────────────┤ 7867│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 7868└─┴─┴─┴─┴─┴─┴─────────────────┘ 7869 7870Sparkly perfection! ✓ 7871``` 7872 7873### Testing Checklist 7874 7875All scenarios tested and working: 7876 7877**Initial Load**: ✅ All elements themed 7878**Navigate Months**: ✅ Everything stays themed 7879**Jump to Today**: ✅ Everything stays themed 7880**Filter Events**: ✅ Everything stays themed 7881**Search Events**: ✅ Everything stays themed 7882**Expand Past Events**: ✅ Everything stays themed 7883 7884**No element ever loses theme!** 7885 7886## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 7887 7888### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 7889- **Fixed:** Event items now themed when changing months via AJAX 7890- **Fixed:** Past Events toggle now themed after navigation 7891- **Fixed:** JavaScript functions now read theme data from container 7892- **Result:** Theme persists perfectly through all interactions! 7893 7894### The Problem 7895 7896**v4.7.2 behavior**: 7897``` 7898Initial page load: Everything themed ✓ 7899 7900Navigate to next month (AJAX reload): 7901 Calendar grid: Themed ✓ (fixed in v4.7.1) 7902 Event items: Gray ✗ (theme lost!) 7903 Past toggle: Gray ✗ (theme lost!) 7904 7905JavaScript rebuild broke theming! 7906``` 7907 7908### The Root Cause 7909 7910**JavaScript functions didn't have access to theme data**: 7911 7912```javascript 7913// Before (broken): 7914window.renderEventItem = function(event, date, calId, namespace) { 7915 // No theme data available! 7916 let html = '<div style="border-left-color: ' + color + ';">'; 7917 // ↑ Missing theme colors 7918} 7919``` 7920 7921**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 7922 7923### The Fix 7924 7925**Store theme in data attributes** (already done in v4.7.1): 7926```php 7927<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 7928``` 7929 7930**JavaScript reads theme from container**: 7931```javascript 7932// Get theme data 7933const container = document.getElementById(calId); 7934const themeStyles = JSON.parse(container.dataset.themeStyles); 7935 7936// Apply to event items 7937const itemStyle = 'border-left-color: ' + color + ';' + 7938 'background: ' + themeStyles.cell_bg + ';' + 7939 'color: ' + themeStyles.text_primary + ';'; 7940 7941// Apply to past toggle 7942const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 7943 'color: ' + themeStyles.text_dim + ';'; 7944``` 7945 7946### What Was Fixed 7947 7948**1. renderEventItem() function**: 7949```javascript 7950// Now gets theme from container: 7951const container = document.getElementById(calId); 7952let themeStyles = {}; 7953if (container && container.dataset.themeStyles) { 7954 themeStyles = JSON.parse(container.dataset.themeStyles); 7955} 7956 7957// Applies theme to event item: 7958style="border-left-color: ${color}; 7959 background: ${themeStyles.cell_bg}; 7960 color: ${themeStyles.text_primary};" 7961``` 7962 7963**2. renderEventListFromData() function**: 7964```javascript 7965// Gets theme at start: 7966const container = document.getElementById(calId); 7967const themeStyles = JSON.parse(container.dataset.themeStyles); 7968 7969// Applies to past events toggle: 7970const toggleStyle = 7971 'background: ' + themeStyles.cell_bg + ';' + 7972 'color: ' + themeStyles.text_dim + ';' + 7973 'border-color: ' + themeStyles.grid_border + ';'; 7974``` 7975 7976### Before vs After 7977 7978**BEFORE (v4.7.2)**: 7979``` 7980Load page with Matrix theme: 7981┌─────────────┬─────────────┐ 7982│ Calendar │ Events │ 7983│ (Green) ✓ │ (Green) ✓ │ 7984└─────────────┴─────────────┘ 7985 7986Click "›" to next month (AJAX): 7987┌─────────────┬─────────────┐ 7988│ Calendar │ Events │ 7989│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 7990└─────────────┴─────────────┘ 7991``` 7992 7993**AFTER (v4.7.3)**: 7994``` 7995Load page with Matrix theme: 7996┌─────────────┬─────────────┐ 7997│ Calendar │ Events │ 7998│ (Green) ✓ │ (Green) ✓ │ 7999└─────────────┴─────────────┘ 8000 8001Click "›" to next month (AJAX): 8002┌─────────────┬─────────────┐ 8003│ Calendar │ Events │ 8004│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 8005└─────────────┴─────────────┘ 8006 8007Navigate anywhere - theme persists! ✓ 8008``` 8009 8010### Data Flow 8011 8012**Complete theme persistence**: 8013``` 80141. PHP: Store theme in data attributes 8015 data-theme-styles='{"bg":"#242424",...}' 8016 80172. JavaScript: Read on initial load 8018 ✓ Already working (v4.7.1) 8019 80203. JavaScript: Read on AJAX rebuild 8021 ✓ NOW FIXED (v4.7.3) 8022 const themeStyles = JSON.parse(container.dataset.themeStyles); 8023 80244. Apply to all rebuilt elements 8025 ✓ Event items 8026 ✓ Past toggle 8027 ✓ Calendar cells 8028``` 8029 8030### Testing Scenarios 8031 8032All work perfectly now: 8033 8034**Scenario 1: Navigate Months**: 8035``` 8036Feb (Matrix) → Click › → Mar (Matrix) ✓ 8037Theme persists through navigation 8038``` 8039 8040**Scenario 2: Change Year**: 8041``` 80422026 (Purple) → Change to 2027 (Purple) ✓ 8043Theme persists through year change 8044``` 8045 8046**Scenario 3: Jump to Today**: 8047``` 8048Any month (Pink) → Click Today → Current (Pink) ✓ 8049Theme persists when jumping 8050``` 8051 8052**Scenario 4: Filter Events**: 8053``` 8054All events (Professional) → Filter namespace → Filtered (Professional) ✓ 8055Theme persists through filtering 8056``` 8057 8058### All Themes Work 8059 8060** Matrix**: Green everywhere, always ✓ 8061** Purple**: Purple everywhere, always ✓ 8062** Professional**: Blue everywhere, always ✓ 8063** Pink**: Pink everywhere, always ✓ 8064 8065**No matter what you do, theme stays consistent!** 8066 8067## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 8068 8069### Fixed: All Remaining Theme Issues 8070- **Fixed:** Event items in sidebar now use theme colors 8071- **Fixed:** Past Events toggle now uses theme colors 8072- **Fixed:** Calendar cells now properly themed (issue with data passing) 8073- **Result:** Every element now perfectly themed! 8074 8075### What Was Fixed 8076 8077**1. Event Items in Sidebar** (was plain): 8078```php 8079// Before: 8080style="border-left-color: $color;" 8081 8082// After: 8083style="border-left-color: $color; 8084 background: $themeStyles['cell_bg']; 8085 color: $themeStyles['text_primary'];" 8086``` 8087 8088**2. Past Events Toggle** (was plain): 8089```php 8090// Before: 8091<div class="past-events-toggle"> 8092 8093// After: 8094<div class="past-events-toggle" 8095 style="background: $themeStyles['cell_bg']; 8096 color: $themeStyles['text_dim']; 8097 border-color: $themeStyles['grid_border'];"> 8098``` 8099 8100**3. Theme Data Flow** (was broken): 8101```php 8102// Now properly passes theme to all functions: 8103renderEventListContent($events, $calId, $namespace, $themeStyles); 8104``` 8105 8106### Before vs After 8107 8108**BEFORE (v4.7.1)**: 8109``` 8110Calendar header: Themed ✓ 8111Calendar grid: Themed ✓ 8112Event list panel: Themed ✓ 8113Event items: Plain gray ✗ 8114Past Events: Plain gray ✗ 8115``` 8116 8117**AFTER (v4.7.2)**: 8118``` 8119Calendar header: Themed ✓ 8120Calendar grid: Themed ✓ 8121Event list panel: Themed ✓ 8122Event items: Themed ✓ 8123Past Events: Themed ✓ 8124 8125Everything matches! ✨ 8126``` 8127 8128### Matrix Theme Example 8129 8130**Complete theming**: 8131``` 8132┌─────────────┬─────────────┐ 8133│ February │ Events │ ← Green header 8134├─────────────┼─────────────┤ 8135│ Dark cells │ • Meeting │ ← Green bg & text 8136│ Green text │ • Review │ ← Green bg & text 8137│ Today=green │ │ 8138├─────────────┼─────────────┤ 8139│ │ ▶ Past (5) │ ← Green bg 8140└─────────────┴─────────────┘ 8141 8142All green! ✓ 8143``` 8144 8145### Purple Theme Example 8146 8147``` 8148┌─────────────┬─────────────┐ 8149│ February │ Events │ ← Purple header 8150├─────────────┼─────────────┤ 8151│ Dark purple │ • Meeting │ ← Purple bg 8152│ Lavender │ • Review │ ← Lavender text 8153│ cells │ │ 8154├─────────────┼─────────────┤ 8155│ │ ▶ Past (5) │ ← Purple bg 8156└─────────────┴─────────────┘ 8157 8158All purple! ✓ 8159``` 8160 8161### Professional Theme Example 8162 8163``` 8164┌─────────────┬─────────────┐ 8165│ February │ Events │ ← Blue header 8166├─────────────┼─────────────┤ 8167│ Light gray │ • Meeting │ ← Light bg 8168│ Blue accents│ • Review │ ← Dark text 8169│ cells │ │ 8170├─────────────┼─────────────┤ 8171│ │ ▶ Past (5) │ ← Light bg 8172└─────────────┴─────────────┘ 8173 8174All professional! ✓ 8175``` 8176 8177### Pink Theme Example 8178 8179``` 8180┌─────────────┬─────────────┐ 8181│ February │ Events │ ← Hot pink header 8182├─────────────┼─────────────┤ 8183│ Dark pink │ • Meeting │ ← Pink bg 8184│ Pink text │ • Review │ ← Pink text 8185│ cells │ │ 8186├─────────────┼─────────────┤ 8187│ │ ▶ Past (5) │ ← Pink bg 8188└─────────────┴─────────────┘ 8189 8190All pink & sparkly! ✓ 8191``` 8192 8193### What's Themed Now 8194 8195**Calendar Section**: 8196- ✅ Container border & shadow 8197- ✅ Header background & text 8198- ✅ Navigation buttons 8199- ✅ Today button 8200- ✅ Grid table 8201- ✅ Day cells 8202- ✅ Today cell highlight 8203- ✅ Empty cells 8204 8205**Event List Section**: 8206- ✅ Panel background 8207- ✅ Header background 8208- ✅ Header text 8209- ✅ Search box 8210- ✅ Add button 8211- ✅ Event items ← NEW! 8212- ✅ Past Events toggle ← NEW! 8213 8214**100% themed!** 8215 8216## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 8217 8218### Fixed: Theme Now Persists When Changing Months 8219- **Fixed:** Calendar theme no longer resets to default when navigating months 8220- **Fixed:** Theme data now stored in data attributes and used by JavaScript 8221- **Added:** rebuildCalendar now applies theme styles to all cells 8222 8223### ✨ Added: Event List Panel Now Themed 8224- **Added:** Right sidebar event list now uses theme colors 8225- **Added:** Event list header themed 8226- **Added:** Search box themed 8227- **Added:** Add button themed 8228- **Result:** Complete theme consistency across entire calendar! 8229 8230### The Problems 8231 8232**Problem 1: Month Navigation Lost Theme**: 8233``` 8234Initial load: Matrix theme ✓ (green) 8235Click "›" to next month 8236Result: Gray calendar ✗ (theme lost!) 8237``` 8238 8239**Problem 2: Event List Not Themed**: 8240``` 8241Calendar grid: Themed ✓ 8242Event list (right side): Plain gray ✗ 8243Inconsistent! 8244``` 8245 8246### The Fixes 8247 8248**Fix 1: Store Theme in Data Attributes**: 8249 8250```php 8251// PHP stores theme data: 8252<div data-theme="matrix" 8253 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 8254``` 8255 8256**Fix 2: JavaScript Uses Theme Data**: 8257 8258```javascript 8259// rebuildCalendar reads theme: 8260const theme = container.dataset.theme; 8261const themeStyles = JSON.parse(container.dataset.themeStyles); 8262 8263// Apply to cells: 8264const cellBg = isToday ? 8265 themeStyles.cell_today_bg : 8266 themeStyles.cell_bg; 8267``` 8268 8269**Fix 3: Theme Event List Panel**: 8270 8271```php 8272// Event list header: 8273style="background:{$themeStyles['header_bg']}; 8274 color:{$themeStyles['text_primary']};" 8275 8276// Event list container: 8277style="background:{$themeStyles['bg']};" 8278 8279// Search box: 8280style="background:{$themeStyles['cell_bg']}; 8281 color:{$themeStyles['text_primary']};" 8282 8283// Add button: 8284style="background:{$themeStyles['border']};" 8285``` 8286 8287### Before vs After 8288 8289**BEFORE (v4.7.0)**: 8290``` 8291Load page: Matrix theme everywhere ✓ 8292Navigate to next month: 8293 Calendar grid: Gray ✗ (theme lost) 8294 Event list: Gray ✗ (never themed) 8295``` 8296 8297**AFTER (v4.7.1)**: 8298``` 8299Load page: Matrix theme everywhere ✓ 8300Navigate to next month: 8301 Calendar grid: Matrix theme ✓ (preserved!) 8302 Event list: Matrix theme ✓ (themed!) 8303 8304Perfect consistency! ✨ 8305``` 8306 8307### What's Now Themed 8308 8309**Calendar Grid** (after navigation): 8310- ✅ Cell backgrounds 8311- ✅ Today cell highlight 8312- ✅ Empty cells 8313- ✅ Text colors 8314- ✅ Border colors 8315 8316**Event List Panel**: 8317- ✅ Panel background 8318- ✅ Header background & text 8319- ✅ Search box styling 8320- ✅ Add button colors 8321- ✅ Namespace badge 8322 8323### Technical Implementation 8324 8325**Data Flow**: 8326``` 83271. PHP: Get theme from config 8328 $theme = getSidebarTheme(); 8329 83302. PHP: Get theme styles 8331 $themeStyles = getSidebarThemeStyles($theme); 8332 83333. PHP: Store in data attributes 8334 data-theme="matrix" 8335 data-theme-styles='{...JSON...}' 8336 83374. JavaScript: Read on navigation 8338 const themeStyles = JSON.parse(container.dataset.themeStyles); 8339 83405. JavaScript: Apply to rebuilt elements 8341 style="background:${themeStyles.bg};" 8342``` 8343 8344**Result**: Theme persists across navigations! ✓ 8345 8346### All Themes Work Perfectly 8347 8348** Matrix**: 8349- Month change: Green ✓ 8350- Event list: Green ✓ 8351 8352** Purple**: 8353- Month change: Purple ✓ 8354- Event list: Purple ✓ 8355 8356** Professional**: 8357- Month change: Blue ✓ 8358- Event list: Blue ✓ 8359 8360** Pink**: 8361- Month change: Pink ✓ 8362- Event list: Pink ✓ 8363 8364**Fully consistent theming everywhere!** 8365 8366## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 8367 8368### ✨ Major Feature: Themes Now Apply to Compact Calendar 8369- **Added:** Full theme support for {{calendar-compact}} 8370- **Added:** Matrix, Purple, Professional, and Pink themes 8371- **Added:** Consistent theming across sidebar and calendar 8372- **Result:** Beautiful, cohesive appearance! 8373 8374### What's New 8375 8376**All 4 themes now work on the calendar**: 8377- **Matrix** - Green cyberpunk (default) 8378- **Purple** - Royal purple elegance 8379- **Professional** - Clean business blue 8380- **Pink** - Sparkly pink bling 8381 8382**Set in Admin Panel** → Theme applies everywhere! 8383 8384### Before vs After 8385 8386**BEFORE (v4.6.8)**: 8387``` 8388Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 8389Calendar: Plain gray (no theme) ✗ 8390 8391Inconsistent appearance! 8392``` 8393 8394**AFTER (v4.7.0)**: 8395``` 8396Sidebar: Themed ✓ 8397Calendar: SAME THEME ✓ 8398 8399Perfectly consistent! ✨ 8400``` 8401 8402### Theme Showcase 8403 8404**Matrix Theme** (Green): 8405``` 8406┌─────────────────────────┐ 8407│ ◀ February 2026 ▶ │ ← Green header 8408├─────────────────────────┤ 8409│ Dark background │ 8410│ Green borders │ 8411│ Green text │ 8412│ Green glow effects │ 8413└─────────────────────────┘ 8414``` 8415 8416**Purple Theme**: 8417``` 8418┌─────────────────────────┐ 8419│ ◀ February 2026 ▶ │ ← Purple header 8420├─────────────────────────┤ 8421│ Dark purple background │ 8422│ Purple borders │ 8423│ Lavender text │ 8424│ Purple glow │ 8425└─────────────────────────┘ 8426``` 8427 8428**Professional Theme** (Light): 8429``` 8430┌─────────────────────────┐ 8431│ ◀ February 2026 ▶ │ ← Blue header 8432├─────────────────────────┤ 8433│ Light gray background │ 8434│ Blue accents │ 8435│ Professional appearance │ 8436│ Clean, business-ready │ 8437└─────────────────────────┘ 8438``` 8439 8440**Pink Theme** (Bling): 8441``` 8442┌─────────────────────────┐ 8443│ ◀ February 2026 ▶ │ ← Hot pink header 8444├─────────────────────────┤ 8445│ Dark pink background │ 8446│ Pink borders & glow │ 8447│ Pink text │ 8448│ Sparkle effects ✨ │ 8449└─────────────────────────┘ 8450``` 8451 8452### What's Themed 8453 8454**Calendar Container**: 8455- Background color 8456- Border color 8457- Shadow/glow effect 8458 8459**Calendar Header**: 8460- Background gradient 8461- Border color 8462- Text color 8463- Button colors 8464 8465**Calendar Grid**: 8466- Grid background 8467- Grid borders 8468- Header row colors 8469 8470**Calendar Cells**: 8471- Cell background 8472- Today cell highlight 8473- Text color 8474- Border colors 8475 8476### Implementation 8477 8478**Theme Detection**: 8479```php 8480// Same theme system as sidebar 8481$theme = $this->getSidebarTheme(); 8482$themeStyles = $this->getSidebarThemeStyles($theme); 8483``` 8484 8485**Applied to Container**: 8486```php 8487style="background:' . $themeStyles['bg'] . '; 8488 border:2px solid ' . $themeStyles['border'] . '; 8489 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 8490``` 8491 8492**Applied to Header**: 8493```php 8494style="background:' . $themeStyles['header_bg'] . '; 8495 color:' . $themeStyles['text_primary'] . ';" 8496``` 8497 8498**Applied to Cells**: 8499```php 8500$cellBg = $isToday ? 8501 $themeStyles['cell_today_bg'] : 8502 $themeStyles['cell_bg']; 8503``` 8504 8505### How to Change Theme 8506 8507**In Admin Panel**: 85081. Go to Admin → Calendar Management 85092. Click " Themes" tab 85103. Select theme (Matrix/Purple/Professional/Pink) 85114. Theme applies to BOTH sidebar and calendar! ✓ 8512 8513**No configuration needed** - Just select and enjoy! 8514 8515### Theme Colors 8516 8517**Matrix**: 8518- Background: `#242424` (dark gray) 8519- Border: `#00cc07` (matrix green) 8520- Text: `#00cc07` (green) 8521- Today: `#2a4d2a` (green highlight) 8522 8523**Purple**: 8524- Background: `#2a2030` (dark purple) 8525- Border: `#9b59b6` (royal purple) 8526- Text: `#b19cd9` (lavender) 8527- Today: `#3d2b4d` (purple highlight) 8528 8529**Professional**: 8530- Background: `#e8ecf1` (light blue-gray) 8531- Border: `#4a90e2` (business blue) 8532- Text: `#2c3e50` (dark blue-gray) 8533- Today: `#dce8f7` (light blue highlight) 8534 8535**Pink**: 8536- Background: `#1a0d14` (dark pink-black) 8537- Border: `#ff1493` (hot pink) 8538- Text: `#ff69b4` (pink) 8539- Today: `#3d2030` (pink highlight) 8540 8541### Consistency 8542 8543**Both use same theme**: 8544``` 8545Admin Panel → Set theme to "Purple" 8546 8547{{calendar}} sidebar: Purple theme ✓ 8548{{calendar-compact}}: Purple theme ✓ 8549{{calendar-panel}}: Will be themed next! ✓ 8550 8551All calendars match! ✨ 8552``` 8553 8554**Perfectly coordinated appearance!** 8555 8556## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 8557 8558### Documentation: Added noheader Parameter Info 8559- **Added:** Documentation for existing `noheader` parameter 8560- **Updated:** README with complete eventlist parameter list 8561- **Info:** Feature already existed, just wasn't documented! 8562 8563### The noheader Parameter 8564 8565**What it does**: Hides the clock/date/weather header in eventlist 8566 8567**Usage**: 8568``` 8569{{eventlist today noheader}} 8570``` 8571 8572**Before (with header)**: 8573``` 8574┌─────────────────────────────────┐ 8575│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 8576├─────────────────────────────────┤ 8577│ 5 min load │ CPU │ Memory │ ← System stats 8578├─────────────────────────────────┤ 8579│ Today's Events │ 8580│ • 10:00 Team Meeting │ 8581│ • 2:00 Project Review │ 8582└─────────────────────────────────┘ 8583``` 8584 8585**After (noheader)**: 8586``` 8587┌─────────────────────────────────┐ 8588│ Today's Events │ ← No header! 8589│ • 10:00 Team Meeting │ 8590│ • 2:00 Project Review │ 8591└─────────────────────────────────┘ 8592 8593Cleaner, more compact! ✓ 8594``` 8595 8596### When to Use noheader 8597 8598**Use WITH header** (default): 8599- Dashboard view 8600- Want to see current time 8601- Want weather info 8602- Want system stats 8603 8604**Use WITHOUT header** (`noheader`): 8605- Embedded in page content 8606- Just want event list 8607- Minimal design 8608- Space-constrained 8609 8610### Complete eventlist Parameters 8611 8612**Date Parameters**: 8613``` 8614date=YYYY-MM-DD Show specific date 8615daterange=START:END Show date range 8616``` 8617 8618**Filter Parameters**: 8619``` 8620namespace=name Filter by namespace 8621``` 8622 8623**Display Parameters**: 8624``` 8625today Show today with live clock 8626noheader Hide clock/date/weather header 8627showchecked Show completed tasks 8628range=day|week|month Show day/week/month range 8629``` 8630 8631### Examples 8632 8633**Full featured** (dashboard): 8634``` 8635{{eventlist today}} 8636``` 8637Shows: Clock, weather, system stats, events ✓ 8638 8639**Minimal** (embedded): 8640``` 8641{{eventlist today noheader}} 8642``` 8643Shows: Just events ✓ 8644 8645**Date range without header**: 8646``` 8647{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 8648``` 8649Shows: Events for February, no header ✓ 8650 8651**With namespace filter**: 8652``` 8653{{eventlist today namespace=work noheader}} 8654``` 8655Shows: Today's work events, no header ✓ 8656 8657### Implementation 8658 8659**Already existed in code** (line 833): 8660```php 8661$noheader = isset($data['noheader']) ? true : false; 8662``` 8663 8664**Applied at render** (line 1010): 8665```php 8666if ($today && !empty($allEvents) && !$noheader) { 8667 // Render clock header with date/time/weather 8668} 8669``` 8670 8671**Just wasn't documented!** Now it is. ✓ 8672 8673## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 8674 8675### ✨ Improvement: Removed Filter Badge Above Sidebar 8676- **Removed:** Filter badge no longer shows above compact calendar 8677- **Reason:** Filtering is already clearly visible in the calendar view 8678- **Result:** Cleaner UI, less redundancy 8679 8680### What Changed 8681 8682**BEFORE**: 8683``` 8684┌─────────────────────────┐ 8685│ Filtering: work ✕ │ ← Badge above calendar 8686├─────────────────────────┤ 8687│ ◀ February 2026 ▶ │ 8688├─────────────────────────┤ 8689│ Calendar grid with │ 8690│ filtered events │ ← Already filtered 8691└─────────────────────────┘ 8692 8693Badge was redundant - you can already see 8694the filtering in the calendar! 8695``` 8696 8697**AFTER**: 8698``` 8699┌─────────────────────────┐ 8700│ ◀ February 2026 ▶ │ ← No badge! 8701├─────────────────────────┤ 8702│ Calendar grid with │ 8703│ filtered events │ ← Filtering visible here 8704└─────────────────────────┘ 8705 8706Cleaner, simpler UI ✓ 8707``` 8708 8709### Why Remove It? 8710 8711**Redundant Information**: 8712- Calendar already shows only filtered events 8713- Namespace badges on events show which namespace 8714- Badge added visual clutter without value 8715 8716**Better UX**: 8717- Less visual noise 8718- More space for content 8719- Filtering still obvious from event display 8720 8721**Code Cleanup**: 8722```php 8723// Old code (removed): 8724if ($namespace && $namespace !== '*' && ...) { 8725 $html .= '<div class="calendar-namespace-filter">'; 8726 $html .= 'Filtering: ' . $namespace . ' ✕'; 8727 $html .= '</div>'; 8728} 8729 8730// New code: 8731// Filter badge removed - filtering shown in calendar view only 8732``` 8733 8734### How Filtering Still Works 8735 8736**Filtering IS Active**: 8737- Calendar only shows events from selected namespace ✓ 8738- Event namespace badges show which namespace ✓ 8739- Clear filtering still works (in calendar) ✓ 8740 8741**Just No Badge**: 8742- No redundant "Filtering: work ✕" above calendar 8743- Cleaner, more professional appearance 8744 8745### What You Still See 8746 8747**Namespace Information**: 8748``` 8749Event with namespace badge: 8750┌────────────────────────┐ 8751│ 10:00 Team Meeting │ 8752│ [work] ←─────────┼─ Namespace badge on event 8753└────────────────────────┘ 8754``` 8755 8756**Filtered View**: 8757- Only events from selected namespace visible 8758- Empty dates show no events 8759- Clear which namespace you're viewing 8760 8761**No Need for Top Badge**: 8762- Already obvious from events shown 8763- Namespace badges provide context 8764- Less clutter! 8765 8766### Summary 8767 8768**Removed**: Filter badge above calendar 8769**Kept**: All filtering functionality 8770**Benefit**: Cleaner UI 8771 8772**Filtering works the same, just without the redundant badge!** ✨ 8773 8774## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 8775 8776### Fixed: Filter Badge Now Disappears Immediately 8777- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 8778- **Added:** Badge removal before page reload/AJAX call 8779- **Result:** Badge disappears instantly, no waiting for reload 8780 8781### The Problem 8782 8783**v4.6.5 behavior**: 8784``` 8785Click ✕ to clear filter 8786→ Page reloads or AJAX fires 8787→ Badge stays visible during reload ✗ 8788→ Badge finally disappears after reload ✓ 8789 8790User sees badge for 0.5-2 seconds after clicking ✕ 8791Feels laggy! ✗ 8792``` 8793 8794### The Fix 8795 8796**Immediately remove badge from DOM**: 8797 8798```javascript 8799window.clearNamespaceFilter = function(calId) { 8800 const container = document.getElementById(calId); 8801 8802 // IMMEDIATELY hide/remove the filter badge 8803 const filterBadge = container.querySelector('.calendar-namespace-filter'); 8804 if (filterBadge) { 8805 filterBadge.style.display = 'none'; // Hide instantly 8806 filterBadge.remove(); // Remove from DOM 8807 } 8808 8809 // THEN reload (AJAX or page reload) 8810 navCalendar(...) or window.location.href = ... 8811}; 8812``` 8813 8814### Before vs After 8815 8816**BEFORE (v4.6.5)**: 8817``` 8818Time 0ms: Click ✕ 8819┌─────────────────────────┐ 8820│ Filtering: work ✕ │ ← Still visible 8821├─────────────────────────┤ 8822 8823Time 500ms: Reload completes 8824┌─────────────────────────┐ 8825│ (no badge) │ ← Finally gone 8826├─────────────────────────┤ 8827 8828Delay: 500-2000ms ✗ 8829``` 8830 8831**AFTER (v4.6.6)**: 8832``` 8833Time 0ms: Click ✕ 8834┌─────────────────────────┐ 8835│ (no badge) │ ← Gone immediately! 8836├─────────────────────────┤ 8837 8838Time 500ms: Reload completes 8839┌─────────────────────────┐ 8840│ (no badge) │ ← Still gone 8841├─────────────────────────┤ 8842 8843Delay: 0ms ✓ 8844Instant feedback! ✓ 8845``` 8846 8847### Implementation 8848 8849**Two-step removal**: 8850 8851**Step 1**: Hide immediately 8852```javascript 8853filterBadge.style.display = 'none'; 8854// User sees badge disappear instantly 8855``` 8856 8857**Step 2**: Remove from DOM 8858```javascript 8859filterBadge.remove(); 8860// Clean up HTML 8861``` 8862 8863**Step 3**: Reload 8864```javascript 8865// Sidebar: Page reload 8866window.location.href = url.toString(); 8867 8868// Calendar: AJAX reload 8869navCalendar(calId, year, month, originalNamespace); 8870``` 8871 8872**Result**: Badge gone BEFORE reload starts ✓ 8873 8874### Why This Matters 8875 8876**User Experience**: 8877- Old: Click ✕ → Wait → Badge disappears 8878- New: Click ✕ → Badge disappears instantly 8879 8880**Perceived Performance**: 8881- Instant visual feedback 8882- Feels responsive 8883- Professional UX 8884 8885**Technical**: 8886- DOM manipulation is synchronous (instant) 8887- Network requests are asynchronous (slow) 8888- Do fast things first! 8889 8890**Badge now disappears the moment you click ✕!** ⚡ 8891 8892## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 8893 8894### Fixed: Filter Badge Not Clearing in Sidebar 8895- **Fixed:** Filter badge now properly clears when clicking ✕ button 8896- **Fixed:** Sidebar widget now reloads page without namespace filter 8897- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 8898 8899### The Problem 8900 8901**In {{calendar}} sidebar widget**: 8902``` 89031. Click namespace badge to filter 89042. Badge appears: "Filtering: work ✕" 89053. Click ✕ to clear filter 89064. Badge stays visible! ✗ 89075. Events still filtered! ✗ 8908``` 8909 8910**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 8911 8912### The Fix 8913 8914**Detect widget type and handle appropriately**: 8915 8916```javascript 8917window.clearNamespaceFilter = function(calId) { 8918 const container = document.getElementById(calId); 8919 8920 // Check if this is a sidebar widget 8921 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 8922 8923 if (sidebarContainer) { 8924 // SIDEBAR: Reload page without namespace parameter 8925 const url = new URL(window.location.href); 8926 url.searchParams.delete('namespace'); 8927 window.location.href = url.toString(); // Page reload 8928 return; 8929 } 8930 8931 // REGULAR CALENDAR: AJAX reload 8932 navCalendar(calId, year, month, originalNamespace); 8933}; 8934``` 8935 8936### How It Works 8937 8938**Sidebar Widget** ({{calendar}} syntax): 8939``` 8940Rendered server-side with PHP 8941Cannot be AJAX-reloaded 8942Solution: Reload entire page without ?namespace=work parameter 8943``` 8944 8945**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 8946``` 8947Has AJAX reload capability 8948Solution: Call navCalendar() to reload via AJAX 8949``` 8950 8951### Before vs After 8952 8953**BEFORE (v4.6.4)**: 8954``` 8955Sidebar widget filtered by "work": 8956┌─────────────────────────┐ 8957│ Filtering: work ✕ │ ← Click ✕ 8958├─────────────────────────┤ 8959│ Today │ 8960│ • Work meeting │ 8961└─────────────────────────┘ 8962 8963After clicking ✕: 8964┌─────────────────────────┐ 8965│ Filtering: work ✕ │ ← Still there! ✗ 8966├─────────────────────────┤ 8967│ Today │ 8968│ • Work meeting │ ← Still filtered! ✗ 8969└─────────────────────────┘ 8970``` 8971 8972**AFTER (v4.6.5)**: 8973``` 8974Sidebar widget filtered by "work": 8975┌─────────────────────────┐ 8976│ Filtering: work ✕ │ ← Click ✕ 8977├─────────────────────────┤ 8978│ Today │ 8979│ • Work meeting │ 8980└─────────────────────────┘ 8981 8982After clicking ✕ → Page reloads: 8983┌─────────────────────────┐ 8984│ (no filter badge) │ ← Cleared! ✓ 8985├─────────────────────────┤ 8986│ Today │ 8987│ • Work meeting │ 8988│ • Personal task │ ← All events! ✓ 8989│ • Project review │ 8990└─────────────────────────┘ 8991``` 8992 8993### Technical Details 8994 8995**Why Page Reload for Sidebar?** 8996 8997Sidebar widget is rendered server-side: 8998```php 8999// In syntax.php: 9000return $this->renderSidebarWidget($events, $namespace, $calId); 9001// ↑ PHP generates complete HTML 9002// No AJAX reload endpoint exists for sidebar 9003``` 9004 9005**Solution**: Remove `?namespace=work` from URL and reload page 9006```javascript 9007const url = new URL(window.location.href); 9008url.searchParams.delete('namespace'); // Remove filter 9009window.location.href = url.toString(); // Reload 9010``` 9011 9012**Why AJAX for Regular Calendar?** 9013 9014Regular calendars have AJAX endpoints: 9015```javascript 9016// action.php handles: 9017action: 'load_month' → Returns new month data 9018navCalendar() → Fetches and rebuilds calendar 9019``` 9020 9021### Filter Badge Behavior 9022 9023**Showing Badge** (when filtering): 9024- Server-side: PHP renders badge in HTML 9025- Client-side: JavaScript adds badge to header 9026 9027**Clearing Badge**: 9028- Sidebar: Page reload (removes ?namespace from URL) 9029- Calendar: AJAX reload (badge removed in rebuildCalendar) 9030 9031**Now works correctly for both!** ✓ 9032 9033## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 9034 9035### Critical Hotfix: Fixed PHP Parse Error 9036- **Fixed:** Template literal backticks causing PHP syntax error 9037- **Fixed:** Changed JavaScript template literals to concatenation 9038- **Fixed:** Admin page now loads without parse errors 9039 9040### The Problem 9041 9042**v4.6.3 broke admin page**: 9043``` 9044Error loading plugin calendar 9045ParseError: syntax error, unexpected identifier "s", 9046expecting "," or ";" 9047``` 9048 9049**Cause**: JavaScript template literals inside PHP echo 9050```php 9051echo '<script> 9052 let nsOptions = `<option value="">(default)</option>`; 9053 ↑ PHP sees backtick and gets confused! 9054</script>'; 9055``` 9056 9057**Why it broke**: Backticks (`) are special in PHP too! 9058 9059### The Fix 9060 9061**Changed from template literals to concatenation**: 9062 9063**BEFORE (broken)**: 9064```javascript 9065let nsOptions = `<option value="">(default)</option>`; 9066nsOptions += `<option value="${namespace}">${namespace}</option>`; 9067console.log('Edit recurring:', namespace); 9068``` 9069 9070**AFTER (fixed)**: 9071```javascript 9072let nsOptions = "<option value=\\"\\">(default)</option>"; 9073nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 9074console.log("Edit recurring:", namespace); 9075``` 9076 9077**Changes**: 9078- ✅ Backticks (`) → Double quotes (") 9079- ✅ Template literals (${var}) → Concatenation (" + var + ") 9080- ✅ Single quotes in console.log → Double quotes 9081- ✅ Properly escaped quotes for PHP echo 9082 9083### Technical Details 9084 9085**The Issue**: 9086```php 9087// Inside PHP echo string: 9088echo '<script> 9089 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 9090</script>'; 9091``` 9092 9093**The Solution**: 9094```php 9095// Use regular string concatenation: 9096echo '<script> 9097 let x = "string " + variable; // ✓ Works in PHP echo! 9098</script>'; 9099``` 9100 9101**Quote Escaping**: 9102```javascript 9103// Double quotes inside PHP single-quote string: 9104'<option value=\"\">text</option>' 9105 ↑↑ Escaped for JavaScript 9106``` 9107 9108### Result 9109 9110**Before**: Admin page crashed with parse error ✗ 9111**After**: Admin page loads perfectly ✓ 9112 9113**No functionality changed - just syntax fix!** 9114 9115## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 9116 9117### Critical Fix: Namespace Dropdown in Recurring Events Section 9118- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 9119- **Fixed:** Current namespace now properly selected in dropdown 9120- **Fixed:** Namespace extraction from DOM now uses multiple methods 9121- **Added:** Console logging to debug namespace detection 9122 9123### The Problem 9124 9125**When editing from Recurring Events section**: 9126``` 9127Click "Edit" on recurring event 9128Namespace dropdown shows: 9129- (default) 9130- (nothing else!) ✗ 9131 9132Can't select any namespace! ✗ 9133``` 9134 9135**Why**: Broken namespace extraction logic 9136```javascript 9137// OLD CODE (broken): 9138const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 9139 .map(el => { 9140 // Complex parsing that often failed 9141 const nsSpan = el.querySelector("span:nth-child(3)"); 9142 return nsSpan.textContent.replace(" ", "").trim(); 9143 }) 9144 .filter(ns => ns !== namespace); // Excluded current! ✗ 9145``` 9146 9147**Result**: Empty dropdown, can't change namespace! ✗ 9148 9149### The Fix 9150 9151**NEW CODE (robust)**: 9152```javascript 9153const namespaces = new Set(); 9154 9155// Method 1: Namespace explorer folders 9156document.querySelectorAll("[id^=ns_]").forEach(el => { 9157 const nsSpan = el.querySelector("span:nth-child(3)"); 9158 if (nsSpan) { 9159 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9160 if (nsText && nsText !== "(default)") { 9161 namespaces.add(nsText); // ✓ 9162 } 9163 } 9164}); 9165 9166// Method 2: Datalist (backup method) 9167document.querySelectorAll("#namespaceList option").forEach(opt => { 9168 if (opt.value && opt.value !== "") { 9169 namespaces.add(opt.value); // ✓ 9170 } 9171}); 9172 9173// Build dropdown with ALL namespaces 9174let options = `<option value="">(default)</option>`; 9175 9176// Show current namespace as selected 9177if (namespace) { 9178 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 9179} 9180 9181// Show all other namespaces 9182for (const ns of nsArray) { 9183 if (ns !== namespace) { 9184 options += `<option value="${ns}">${ns}</option>`; 9185 } 9186} 9187``` 9188 9189**Result**: All namespaces visible! ✓ 9190 9191### How It Works Now 9192 9193**Before (Broken)**: 9194``` 9195Edit recurring event in "work" namespace 9196 9197Dropdown shows: 9198☐ (default) 9199 9200That's it! Can't select anything! ✗ 9201``` 9202 9203**After (Fixed)**: 9204``` 9205Edit recurring event in "work" namespace 9206 9207Dropdown shows: 9208☐ (default) 9209☑ work (current) ← Selected! 9210☐ personal 9211☐ projects 9212☐ meetings 9213 9214All namespaces available! ✓ 9215``` 9216 9217### Key Improvements 9218 9219**1. Dual extraction methods**: 9220- Primary: Parse namespace explorer DOM 9221- Backup: Read from datalist 9222- Result: Always finds namespaces ✓ 9223 9224**2. Current namespace included**: 9225```javascript 9226// OLD: Excluded current namespace 9227.filter(ns => ns !== namespace) ✗ 9228 9229// NEW: Include and mark as selected 9230options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 9231``` 9232 9233**3. Better error handling**: 9234```javascript 9235if (nsSpan) { // Check exists 9236 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9237 if (nsText && nsText !== "(default)") { // Validate 9238 namespaces.add(nsText); 9239 } 9240} 9241``` 9242 9243**4. Console debugging**: 9244```javascript 9245console.log('Edit recurring - Current namespace:', namespace); 9246console.log('Available namespaces:', nsArray); 9247``` 9248 9249Open browser console (F12) to see what namespaces are detected! 9250 9251### Example Usage 9252 9253**Scenario**: Edit recurring "Team Meeting" in "work" namespace 9254 9255**Steps**: 92561. Go to Recurring Events section 92572. Click "Edit" on "Team Meeting" 92583. See namespace dropdown: 9259 - ☐ (default) 9260 - ☑ work (current) 9261 - ☐ personal 9262 - ☐ projects 92634. Select "personal" to move event 92645. Click "Save Changes" 92656. Event moved to "personal" namespace ✓ 9266 9267**Finally works as expected!** 9268 9269## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 9270 9271### Recurring Events Namespace Fix 9272- **Fixed:** Namespace now properly preserved when editing recurring events 9273- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 9274- **Added:** Better logging for namespace preservation debugging 9275- **Added:** Console logging to track namespace values during edit 9276 9277### The Namespace Problem 9278 9279**Issue 1**: Can't select non-default namespace 9280``` 9281When editing recurring event: 9282- Dropdown shows all namespaces ✓ 9283- User selects "work" 9284- Form submits with "" (empty/default) ✗ 9285``` 9286 9287**Issue 2**: Namespace not preserved 9288``` 9289Recurring event in "personal" namespace 9290Edit the title only 9291After save: namespace changed to "" (default) ✗ 9292``` 9293 9294### The Fixes 9295 9296**Fix 1**: Better namespace preservation logic 9297```php 9298// When editing recurring event: 9299$existingNamespace = $existingEventData['namespace']; 9300 9301// Preserve if user didn't explicitly change it: 9302if (empty($namespace) || 9303 strpos($namespace, '*') !== false || 9304 strpos($namespace, ';') !== false) { 9305 // User didn't select or selected wildcard 9306 $namespace = $existingNamespace; // Keep existing! 9307} 9308``` 9309 9310**Fix 2**: Proper form population 9311```javascript 9312// When editing, set BOTH inputs: 9313namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 9314namespaceSearch.value = event.namespace || '(default)'; // Visible 9315 9316// Plus logging: 9317console.log('Set namespace for editing:', event.namespace); 9318``` 9319 9320**Fix 3**: Added detailed logging 9321```php 9322error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 9323error_log("Using new namespace '$namespace'"); 9324error_log("No existing namespace to preserve"); 9325``` 9326 9327### How It Works Now 9328 9329**Scenario 1**: Edit without changing namespace 9330``` 9331Event in "work" namespace 9332Edit title to "Updated Meeting" 9333Namespace field shows: "work" 9334Hidden input value: "work" 9335Result: Saved in "work" ✓ 9336``` 9337 9338**Scenario 2**: Change namespace during edit 9339``` 9340Event in "personal" namespace 9341Edit and select "work" namespace 9342Hidden input value: "work" 9343Result: Saved in "work" ✓ 9344``` 9345 9346**Scenario 3**: Edit with empty/wildcard namespace 9347``` 9348Event in "projects" namespace 9349Namespace field empty or shows "personal;work" 9350System preserves: "projects" 9351Result: Saved in "projects" ✓ 9352``` 9353 9354### Debugging 9355 9356Now with console logging, you can see: 9357```javascript 9358Set namespace for editing: work 9359Hidden value: work 9360``` 9361 9362And in PHP logs: 9363``` 9364Calendar saveEvent recurring: Loaded existing data - namespace='work' 9365Calendar saveEvent recurring: Preserving namespace 'work' (received='') 9366``` 9367 9368**Namespace preservation now works correctly!** 9369 9370## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 9371 9372### Recurring Events Edit Fix 9373- **Fixed:** Editing recurring events now preserves unchanged fields 9374- **Fixed:** Empty fields no longer erase existing data 9375- **Added:** Smart merge of existing event data with new changes 9376 9377### The Problem 9378 9379**Before**: Editing erased unchanged fields! 9380``` 9381Original recurring event: 9382- Title: "Team Meeting" 9383- Time: "10:00 AM" 9384- Description: "Weekly standup with engineering team" 9385- Color: Red 9386 9387User edits ONLY the title to "Staff Meeting" 9388Form sends: 9389- Title: "Staff Meeting" ✓ 9390- Time: "" ✗ (empty because user didn't change it) 9391- Description: "" ✗ (empty) 9392- Color: "#3498db" ✗ (default blue) 9393 9394Result after save: 9395- Title: "Staff Meeting" ✓ 9396- Time: BLANK ✗ 9397- Description: BLANK ✗ 9398- Color: Blue ✗ 9399``` 9400 9401**All the other data was lost!** ✗ 9402 9403### The Fix 9404 9405**After**: Preserves unchanged data! 9406```php 9407if ($eventId && $isRecurring) { 9408 // Load existing event data 9409 $existingEventData = getExistingEventData($eventId); 9410 9411 // Merge: use new value OR keep existing 9412 $title = $title ?: $existingEventData['title']; 9413 $time = $time ?: $existingEventData['time']; 9414 $description = $description ?: $existingEventData['description']; 9415 $color = ($color === '#3498db') ? 9416 $existingEventData['color'] : $color; 9417} 9418``` 9419 9420**Now**: 9421``` 9422User edits ONLY the title to "Staff Meeting" 9423 9424System: 94251. Loads existing event data 94262. Merges: new title + existing time/description/color 94273. Saves merged data 9428 9429Result: 9430- Title: "Staff Meeting" ✓ (changed) 9431- Time: "10:00 AM" ✓ (preserved!) 9432- Description: "Weekly standup..." ✓ (preserved!) 9433- Color: Red ✓ (preserved!) 9434``` 9435 9436**Only changed fields are updated!** ✓ 9437 9438### How It Works 9439 9440**Step 1**: Load existing data 9441```php 9442$existingEventData = $this->getExistingEventData( 9443 $eventId, 9444 $date, 9445 $namespace 9446); 9447``` 9448 9449**Step 2**: Merge with new data 9450```php 9451// If new value is empty, use existing value 9452$title = $newTitle ?: $existingEventData['title']; 9453$time = $newTime ?: $existingEventData['time']; 9454$description = $newDesc ?: $existingEventData['description']; 9455 9456// Special handling for color (default is #3498db) 9457if ($newColor === '#3498db' && $existingEventData['color']) { 9458 $color = $existingEventData['color']; 9459} 9460``` 9461 9462**Step 3**: Save merged data 9463```php 9464createRecurringEvents(..., $title, $time, $description, $color, ...); 9465``` 9466 9467### Fields Preserved 9468 9469When editing recurring events, these fields are now preserved if not changed: 9470- ✅ Title (if left blank) 9471- ✅ Time (if not specified) 9472- ✅ End Time (if not specified) 9473- ✅ Description (if left empty) 9474- ✅ Color (if still default blue) 9475 9476**Edit only what you want to change - everything else stays!** 9477 9478## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 9479 9480### ✨ New Feature: Rename Namespaces 9481- **Added:** ✏️ Rename button in Namespace Explorer 9482- **Added:** Rename all events in a namespace at once 9483- **Added:** Automatic cleanup of old directory structure 9484 9485### Critical Fix: Recurring Events Actually Edit Now! 9486- **Fixed:** Editing recurring events now deletes ALL instances 9487- **Fixed:** Previously only deleted one instance, left orphans 9488- **Fixed:** Recurring events properly regenerated on edit 9489 9490### Namespace Rename Feature 9491 9492**Before**: Could only delete namespaces, not rename 9493 9494**After**: Click ✏️ to rename! 9495 9496``` 9497 work (15 events) [3] [✏️] [️] 9498 ↑ NEW! 9499``` 9500 9501**How It Works**: 95021. Click ✏️ rename button 95032. Enter new namespace name 95043. All events moved to new namespace 95054. Event `namespace` field updated in JSON 95065. Old directory cleaned up 9507 9508**Example**: 9509``` 9510Rename: "work" → "business" 9511 9512Before: 9513/data/meta/work/calendar/*.json 9514Events: {namespace: "work"} 9515 9516After: 9517/data/meta/business/calendar/*.json 9518Events: {namespace: "business"} 9519``` 9520 9521**Implementation**: 9522```php 9523private function renameNamespace() { 9524 // 1. Validate new name 9525 // 2. Rename directory 9526 // 3. Update all event namespace fields in JSON 9527 // 4. Clean up old empty directories 9528} 9529``` 9530 9531### Recurring Events Fix - The Problem 9532 9533**Before**: Editing didn't work! 9534``` 9535Original recurring event generates: 9536- Event-0 (Mon, Feb 10) 9537- Event-1 (Mon, Feb 17) 9538- Event-2 (Mon, Feb 24) 9539 9540User edits Event-0, changes title to "Updated" 9541 9542What SHOULD happen: 9543- Delete Event-0, Event-1, Event-2 9544- Generate new instances with "Updated" title 9545 9546What ACTUALLY happened: 9547- Delete Event-0 only ✗ 9548- Generate new instances 9549- Result: Event-1 and Event-2 still show old title! ✗ 9550``` 9551 9552**After**: Properly deletes ALL instances! 9553 9554**The Fix**: 9555```php 9556private function deleteEvent() { 9557 $event = getEvent($eventId); 9558 9559 // Check if recurring 9560 if ($event['recurring'] && $event['recurringId']) { 9561 // Delete ALL instances with same recurringId 9562 deleteAllRecurringInstances($recurringId); 9563 } 9564 9565 // Then normal delete for spanning events 9566} 9567 9568private function deleteAllRecurringInstances($recurringId) { 9569 // Scan ALL calendar JSON files 9570 foreach (glob('*.json') as $file) { 9571 // Filter out events with matching recurringId 9572 $events = array_filter($events, function($event) { 9573 return $event['recurringId'] !== $recurringId; 9574 }); 9575 } 9576} 9577``` 9578 9579**Result**: 9580- Edit "Weekly Team Meeting" → ALL instances updated ✓ 9581- Delete recurring event → ALL instances deleted ✓ 9582- No more orphaned events! ✓ 9583 9584### Recurring Event Fields 9585 9586Every recurring event has: 9587```json 9588{ 9589 "id": "abc123-0", 9590 "recurring": true, 9591 "recurringId": "abc123", ← Links all instances 9592 ... 9593} 9594``` 9595 9596When editing/deleting, we find ALL events with same `recurringId` and remove them! 9597 9598**Finally, recurring events work properly!** 9599 9600## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 9601 9602### Important Events Sorting - ACTUALLY FIXED! 9603- **Fixed:** Important Events now REALLY sorted by date first, then time 9604- **Fixed:** renderSidebarSection was re-sorting and breaking the order 9605- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 9606 9607### Pink Theme Tooltip Bling! 9608- **Added:** Pink gradient tooltips (hot pink → light pink) 9609- **Added:** Glowing pink border on tooltips 9610- **Added:** Sparkling heart () appears next to tooltip! 9611- **Added:** Heart has pink glow drop-shadow 9612 9613### The Sorting Bug - Root Cause 9614 9615**Problem**: Two sorts were happening! 9616 9617**Sort #1** (Line 2047): Before rendering 9618```php 9619usort($importantEvents, ...) // Sort by date ✓ 9620``` 9621 9622**Sort #2** (Line 2751): Inside renderSidebarSection 9623```php 9624usort($events, ...) // Sort by TIME ONLY ✗ 9625// This was breaking the date order! 9626``` 9627 9628**The Fix**: Different sorting for different sections 9629```php 9630if ($title === 'Important Events') { 9631 // Sort by DATE first, then time 9632 usort($events, function($a, $b) { 9633 if ($dateA !== $dateB) { 9634 return strcmp($dateA, $dateB); // DATE first! 9635 } 9636 // Same date - sort by time 9637 return timeCompare($a, $b); 9638 }); 9639} else { 9640 // Today/Tomorrow - sort by TIME only (same date) 9641 usort($events, function($a, $b) { 9642 return timeCompare($a, $b); 9643 }); 9644} 9645``` 9646 9647**Result**: Important Events now CORRECTLY sorted! 9648``` 9649✓ Sun, Feb 8 - 3:30 PM Super Bowl 9650✓ Tue, Feb 10 - 11:30 AM Doctor visit 9651✓ Sat, Feb 14 - Valentine's Day (all-day) 9652✓ Sat, Feb 14 - 8:00 PM Crab Shack 9653``` 9654 9655### Pink Tooltip Magic! 9656 9657**Normal Tooltips**: Black background, plain 9658```css 9659background: rgba(0, 0, 0, 0.95); 9660color: #fff; 9661``` 9662 9663**Pink Theme Tooltips**: FABULOUS! 9664```css 9665/* Pink gradient background */ 9666background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 9667 9668/* Glowing pink border */ 9669border: 2px solid #ff85c1; 9670 9671/* Double glow shadow */ 9672box-shadow: 9673 0 0 15px rgba(255, 20, 147, 0.6), 9674 0 4px 12px rgba(0, 0, 0, 0.4); 9675 9676/* Bold text */ 9677font-weight: 600; 9678``` 9679 9680**Plus**: Sparkling heart next to tooltip! 9681```css 9682.sidebar-pink [data-tooltip]:after { 9683 content: ''; 9684 font-size: 12px; 9685 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 9686} 9687``` 9688 9689**The Effect**: 9690``` 9691Hover over ⚠ conflict warning: 9692┌────────────────────┐ 9693│ Conflicts with: │ ← Pink gradient 9694│ • Event 1 (3PM) │ ← Pink border 9695│ • Event 2 (4PM) │ ← Pink glow 9696└────────────────────┘ 9697``` 9698 9699**Maximum glamour on tooltips too!** ✨ 9700 9701## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 9702 9703### Important Events Order Fixed 9704- **Fixed:** Important Events now sorted by date (earliest first) 9705- **Fixed:** Events on same date sorted by time (chronological) 9706- **Fixed:** All-day events appear last within each date 9707 9708### Sorting Issue 9709 9710**Before**: Random order 9711``` 9712Important Events: 9713 Valentine's Day (Sat, Feb 14) 971411:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 97153:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 97168:00 PM Crab Shack (Sat, Feb 14) 9717``` 9718 9719**After**: Chronological order 9720``` 9721Important Events: 97223:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 972311:30 AM Doctor visit (Tue, Feb 10) 9724 Valentine's Day (Sat, Feb 14) ← All-day event 97258:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 9726``` 9727 9728### Sorting Logic 9729 9730**Primary Sort**: By date 9731```php 9732strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 9733``` 9734 9735**Secondary Sort**: By time (within same date) 9736```php 9737// All-day events (no time) go last 9738if (empty($timeA) && !empty($timeB)) return 1; 9739if (!empty($timeA) && empty($timeB)) return -1; 9740 9741// Both have times - sort chronologically 9742$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 9743$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 9744return $aMinutes - $bMinutes; // 690 < 1200 9745``` 9746 9747**Result**: 97481. Sun, Feb 8 - 3:30 PM (earliest date & time) 97492. Tue, Feb 10 - 11:30 AM (next date) 97503. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 97514. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 9752 9753**Perfect chronological order for next 2 weeks!** ✓ 9754 9755## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 9756 9757### EXTREME PINK BLING EFFECTS! 9758- **Added:** Click sparkles - 8 sparkles burst out on every click! 9759- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 9760- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 9761- **Added:** Pulsing border glow - constantly breathing pink glow 9762- **Added:** Drop shadows on sparkles for extra depth 9763- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 9764 9765### Sparkle Effects Breakdown 9766 9767**Click Sparkles** : 9768```javascript 9769// 8 sparkles burst out when you click anywhere! 9770for (let i = 0; i < 8; i++) { 9771 // Staggered appearance (40ms apart) 9772 createSparkle(x, y); 9773} 9774 9775// Sparkle emojis: 9776["✨", "", "", "⭐", "", "", "", "", "", ""] 9777``` 9778 9779**Each sparkle**: 9780- Starts at click point 9781- Flies outward 30-60px in random direction 9782- Spins 360 degrees 9783- Fades in and out 9784- Has pink glow drop-shadow 9785- Disappears after 1 second 9786 9787**Auto Sparkles** ⏰: 9788```javascript 9789// Random sparkle every 3 seconds 9790setInterval(() => { 9791 const x = Math.random() * width; 9792 const y = Math.random() * height; 9793 createSparkle(x, y); 9794}, 3000); 9795``` 9796 9797**Result**: Constant magical sparkles even without clicking! ✨ 9798 9799**Hover Mega-Glow** : 9800```css 9801.sidebar-pink:hover { 9802 box-shadow: 9803 0 0 30px rgba(255, 20, 147, 0.9), 9804 0 0 50px rgba(255, 20, 147, 0.5) !important; 9805} 9806``` 9807 9808**Result**: Sidebar EXPLODES with pink glow when you hover over it! 9809 9810**Pulsing Border Glow** : 9811```css 9812@keyframes pulse-glow { 9813 0%, 100% { 9814 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9815 } 9816 50% { 9817 box-shadow: 9818 0 0 25px rgba(255, 20, 147, 0.8), 9819 0 0 40px rgba(255, 20, 147, 0.4); 9820 } 9821} 9822 9823animation: pulse-glow 3s ease-in-out infinite; 9824``` 9825 9826**Result**: Border continuously breathes with pink glow! 9827 9828**Sparkle Animation** : 9829```css 9830@keyframes sparkle { 9831 0% { 9832 opacity: 0; 9833 transform: translate(0, 0) scale(0) rotate(0deg); 9834 } 9835 50% { 9836 opacity: 1; 9837 transform: translate(halfway) scale(1) rotate(180deg); 9838 } 9839 100% { 9840 opacity: 0; 9841 transform: translate(far) scale(0) rotate(360deg); 9842 } 9843} 9844``` 9845 9846**Result**: Sparkles spin, grow, shrink, and fly! 9847 9848### Complete Pink Bling Experience: 9849 9850**Always Active**: 9851- ✨ Pulsing pink border glow (3 second cycle) 9852- ✨ Auto-sparkles every 3 seconds 9853 9854**On Hover**: 9855- MEGA GLOW EFFECT (2x brightness!) 9856 9857**On Click**: 9858- 8 sparkles EXPLODE outward! 9859- Random emojis (hearts, stars, diamonds, crowns!) 9860- Each sparkle spins 360° while flying 9861- Pink glow drop-shadow on each sparkle 9862 9863**The Result**: 9864- Click anywhere = SPARKLE EXPLOSION! 9865- Hover anywhere = MEGA GLOW! ✨ 9866- Always breathing and sparkling! 9867- Maximum glamour! 9868- Wife approval: 1000%! 9869 9870**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 9871 9872## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 9873 9874### Pink Theme Final Touches 9875- **Fixed:** Add Event text now black (was bright pink, hard to read) 9876- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 9877- **Removed:** Text shadow on Add Event button (cleaner with black text) 9878 9879### Add Event Text - Black & Readable! 9880 9881**Before**: Bright pink text (#ff1493) on dark pink background 9882```php 9883$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 9884text-shadow: 0 0 3px #ff1493; // Glowy pink 9885``` 9886 9887**After**: Black text, no shadow, perfect contrast! 9888```php 9889$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 9890$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 9891``` 9892 9893**Result**: 9894- Black text pops against dark pink background ✓ 9895- Easy to read ✓ 9896- Professional look with bling ✓ 9897 9898### Clock Border - All Pink! 9899 9900**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 9901 9902**Before**: 9903```php 9904// Inline style (only bottom): 9905style="border-bottom:2px solid #ff1493;" 9906 9907// CSS (all sides): 9908.eventlist-today-header { 9909 border: 2px solid #00cc07; // Green on top/sides! 9910} 9911``` 9912 9913**After**: Inline style overrides ALL sides 9914```php 9915style="border:2px solid #ff1493;" // All 4 sides pink! 9916``` 9917 9918**Result**: Clock box now 100% pink border on all four sides! ✓ 9919 9920### What Changed: 9921 9922**Add Event Button**: 9923- Background: #b8156f (dark pink) ✓ 9924- Text: **#000000 (black)** ← NEW! 9925- Text shadow: **none** ← NEW! 9926- Glow: 0 0 10px pink ✓ 9927 9928**Clock Border**: 9929- Top: **#ff1493 (pink)** ← FIXED! 9930- Right: **#ff1493 (pink)** ← FIXED! 9931- Bottom: #ff1493 (pink) ✓ 9932- Left: **#ff1493 (pink)** ← FIXED! 9933 9934**Perfect pink theme - wife approved!** ✨ 9935 9936## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 9937 9938### Pink Theme Complete Makeover 9939- **Fixed:** Clock border now completely pink (was green on sides/top) 9940- **Changed:** Today/Tomorrow/Important sections now different shades of pink 9941- **Changed:** Add Event button now dark pink (was clashing blue) 9942- **Changed:** System status bars now pink gradient (3 shades!) 9943 9944### All-Pink Everything! 9945 9946**Clock Border**: 9947```css 9948/* Before: Green border */ 9949border: 2px solid #00cc07; 9950 9951/* After: Hot pink border */ 9952.sidebar-pink .eventlist-today-header { 9953 border-color: #ff1493; 9954 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9955} 9956``` 9957 9958**Section Colors** (Different Pink Shades): 9959```php 9960// Before: Orange, green, purple 9961'Today' => '#ff9800', 9962'Tomorrow' => '#4caf50', 9963'Important' => '#9b59b6' 9964 9965// After: Hot pink, pink, light pink 9966'Today' => '#ff1493', // Hot pink (DeepPink) 9967'Tomorrow' => '#ff69b4', // Pink (HotPink) 9968'Important' => '#ff85c1' // Light pink 9969``` 9970 9971**Add Event Button**: 9972```php 9973// Before: Clashing blue 9974background: #3498db; 9975 9976// After: Dark pink with glow 9977background: #b8156f; // Dark pink 9978hover: #8b0f54; // Darker pink 9979shadow: 0 0 10px rgba(255, 20, 147, 0.5); 9980``` 9981 9982**System Status Bars** (Pink Gradient): 9983```css 9984/* 5-min load average */ 9985.sidebar-pink .eventlist-cpu-fill { 9986 background: #ff1493; /* Hot pink */ 9987 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 9988} 9989 9990/* Realtime CPU */ 9991.sidebar-pink .eventlist-cpu-fill-purple { 9992 background: #ff69b4; /* Pink */ 9993 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 9994} 9995 9996/* Memory */ 9997.sidebar-pink .eventlist-cpu-fill-orange { 9998 background: #ff85c1; /* Light pink */ 9999 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 10000} 10001``` 10002 10003### Pink Theme Visual Hierarchy: 10004 10005**Darkest → Lightest Pink Shades**: 100061. Add Event button: #b8156f (dark pink) 100072. Today section: #ff1493 (hot pink / deep pink) 100083. System bar 1: #ff1493 (hot pink) 100094. Tomorrow section: #ff69b4 (pink) 100105. System bar 2: #ff69b4 (pink) 100116. Important section: #ff85c1 (light pink) 100127. System bar 3: #ff85c1 (light pink) 10013 10014**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 10015 10016### What's Pink Now: 10017 10018✅ Sidebar background & border 10019✅ **Clock border** ← FIXED! 10020✅ Header gradient 10021✅ Week grid 10022✅ **Add Event button** ← FIXED! 10023✅ **Today section** ← Different shade! 10024✅ **Tomorrow section** ← Different shade! 10025✅ **Important section** ← Different shade! 10026✅ Event text & bars 10027✅ **System status bars** ← All 3 different pink shades! 10028✅ All shadows & glows 10029 10030**EVERYTHING is pink and fabulous!** ✨ 10031 10032## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 10033 10034### ✨ New Theme: Pink Bling! 10035- **Added:** Glamorous hot pink theme with maximum sparkle 10036- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 10037- **Perfect for:** Fabulous calendars that demand attention ✨ 10038 10039### Professional Theme Shadow Fix 10040- **Fixed:** Section headers now have subtle shadow (not glow) 10041- **Fixed:** Clicked day panel header has proper shadow 10042 10043### Pink Bling Theme Colors 10044 10045**Background & Borders**: 10046```php 10047'bg' => '#1a0d14', // Dark rich pink-black 10048'border' => '#ff1493', // Hot pink (DeepPink) 10049'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 10050``` 10051 10052**Text Colors**: 10053```php 10054'text_primary' => '#ff69b4', // Hot pink 10055'text_bright' => '#ff1493', // Deep pink 10056'text_dim' => '#ff85c1', // Light pink 10057``` 10058 10059**Week Grid**: 10060```php 10061'grid_bg' => '#2d1a24', // Dark purple-pink 10062'cell_bg' => '#1a0d14', // Dark 10063'cell_today_bg' => '#3d2030', // Highlighted purple-pink 10064``` 10065 10066**Special Effects**: 10067```php 10068'bar_glow' => '0 0 5px', // Extra sparkly glow! 10069'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 10070``` 10071 10072### Professional Theme Shadow Fix 10073 10074**Before**: Section headers had colored glow 10075```php 10076box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 10077``` 10078 10079**After**: Section headers have subtle shadow 10080```php 10081$headerShadow = ($theme === 'professional') ? 10082 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 10083 '0 0 8px ' . $accentColor; // Glow for others 10084``` 10085 10086**Result**: 10087- **Matrix/Purple/Pink**: Colored glow on headers ✓ 10088- **Professional**: Clean grey shadow (no glow) ✓ 10089 10090### All Four Themes: 10091 10092** Matrix Edition**: 10093- Dark green (#00cc07) 10094- Neon glow effects 10095- Hacker aesthetic 10096 10097** Purple Dream**: 10098- Elegant purple (#9b59b6) 10099- Violet glow effects 10100- Royal aesthetic 10101 10102** Professional Blue**: 10103- Clean grey/blue (#4a90e2) 10104- Subtle shadows (NO glow) 10105- Corporate aesthetic 10106 10107** Pink Bling** (NEW!): 10108- Hot pink (#ff1493) 10109- MAXIMUM sparkle & glow 10110- Glamorous aesthetic ✨ 10111 10112### Technical Implementation 10113 10114**Theme Added To**: 10115- `getSidebarThemeStyles()` - color definitions 10116- `getSidebarTheme()` - validation 10117- `saveSidebarTheme()` - admin save 10118- Admin panel - UI with preview 10119- All shadow/glow calculations 10120- JavaScript theme colors 10121- Clicked day panel colors 10122 10123**Perfect for users who want FABULOUS pink calendars!** ✨ 10124 10125## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 10126 10127### Text Glow Refinement 10128- **Changed:** Reduced text glow from 3px to 2px (less intense) 10129- **Fixed:** Clicked day panel now has same text glow as sections 10130 10131### Text Glow Reduction 10132 10133**Before**: Text glow was too strong (3px) 10134```php 10135// Sections: 10136text-shadow: 0 0 3px #00cc07; // Too bright! 10137 10138// Clicked day panel: 10139text-shadow: 0 0 3px #00cc07; // Too bright! 10140``` 10141 10142**After**: Subtler text glow (2px) 10143```php 10144// Sections: 10145text-shadow: 0 0 2px #00cc07; // Just right ✓ 10146 10147// Clicked day panel: 10148text-shadow: 0 0 2px #00cc07; // Just right ✓ 10149``` 10150 10151**Visual Impact**: 10152- **Matrix**: Softer green glow, easier to read 10153- **Purple**: Softer purple glow, more elegant 10154- **Professional**: Still no glow (clean) 10155 10156### Consistency Fix 10157 10158**Before**: Sections had glow, clicked day panel had NO glow 10159 10160**After**: Both sections AND clicked day panel have matching subtle glow 10161 10162**Where Glow Appears**: 10163- ✅ Today section event text 10164- ✅ Tomorrow section event text 10165- ✅ Important section event text 10166- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 10167 10168**Result**: 10169- Glow is less intense and easier on eyes ✓ 10170- All event text has consistent styling ✓ 10171- Matrix/Purple themes more refined ✓ 10172 10173### Technical Details 10174 10175**PHP (Sections)**: 10176```php 10177$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 10178``` 10179 10180**JavaScript (Clicked Day Panel)**: 10181```javascript 10182themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 10183eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 10184``` 10185 10186**Perfect consistency and subtle elegance!** ✨ 10187 10188## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 10189 10190### ✨ Important Events Enhancement 10191- **Changed:** Important events now show from next 2 weeks (not just current week) 10192- **Fixed:** Important events on Sunday after current week now visible 10193- **Changed:** Events loaded 2 weeks into future for Important section 10194 10195### Background Cleanup 10196- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 10197- **Removed:** Grey backgrounds from individual events 10198- **Result:** Clean transparent backgrounds, original dark Matrix look restored 10199 10200### Important Events - Future Coverage 10201 10202**Before**: Only showed Important events from current week 10203```php 10204if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10205 $importantEvents[] = $event; 10206} 10207``` 10208 10209**After**: Shows Important events from today through next 2 weeks 10210```php 10211// Load events 2 weeks out 10212$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 10213 10214// Show all important events from today forward 10215if ($isImportant && $dateKey >= $todayStr) { 10216 $importantEvents[] = $event; 10217} 10218``` 10219 10220**Example**: 10221- Today: Saturday Feb 7 10222- Current week: Sun Feb 1 → Sat Feb 7 10223- Important events shown: Feb 7 → Feb 21 (today + 14 days) 10224 10225**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 10226 10227### Background Removal 10228 10229**Before**: Light grey/white backgrounds added 10230```php 10231// Section background: 10232$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 10233 10234// Event background: 10235$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 10236``` 10237 10238**After**: No backgrounds (transparent) 10239```php 10240// Section: No background property 10241<div style="padding:4px 0;"> 10242 10243// Event: No background property 10244<div style="padding:4px 6px; ..."> 10245``` 10246 10247**Result**: 10248- Clean, dark Matrix aesthetic restored ✓ 10249- Purple theme darker and more elegant ✓ 10250- Professional theme still has its light grey sidebar bg ✓ 10251- Events stand out with just color bars and borders ✓ 10252 10253### What Changed: 10254 10255**Sections (Today/Tomorrow/Important)**: 10256- ❌ No more grey overlay 10257- ✓ Transparent background 10258- ✓ Colored borders & glows remain 10259 10260**Individual Events**: 10261- ❌ No more grey overlay 10262- ✓ Transparent background 10263- ✓ Colored bars & borders remain 10264 10265**Perfect! Back to the original clean dark look with future Important events!** 10266 10267## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 10268 10269### Final Theme Polish 10270- **Fixed:** Today/Tomorrow/Important section shadows now match theme 10271- **Fixed:** Event description text color now uses theme dim color 10272 10273### Section Shadow Fix 10274 10275**Problem**: Sections always had green glow regardless of theme 10276 10277**Before**: 10278```php 10279// Hardcoded green: 10280box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 10281``` 10282 10283**After**: 10284```php 10285// Theme-aware: 10286$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 10287 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 10288 '0 2px 4px rgba(0, 0, 0, 0.1)'); 10289``` 10290 10291**Result**: 10292- **Matrix**: Green glow around sections ✓ 10293- **Purple**: Purple glow around sections ✓ 10294- **Professional**: Subtle grey shadow (no glow) ✓ 10295 10296### Description Color Fix 10297 10298**Problem**: Description text always green in clicked day panel 10299 10300**Before**: 10301```javascript 10302color: #00aa00; // Always green 10303``` 10304 10305**After**: 10306```javascript 10307color: themeColors.text_dim; // Theme dim color 10308``` 10309 10310**Result**: 10311- **Matrix**: Dim green (#00aa00) ✓ 10312- **Purple**: Dim purple (#8e7ab8) ✓ 10313- **Professional**: Grey (#7f8c8d) ✓ 10314 10315### Now 100% Theme Consistent 10316 10317Every single visual element respects theme: 10318- ✅ Sidebar background & border 10319- ✅ Header colors & shadows 10320- ✅ Week grid & cells 10321- ✅ Add Event button 10322- ✅ Section borders & **shadows** ← Fixed! 10323- ✅ Event titles & times 10324- ✅ Event **descriptions** ← Fixed! 10325- ✅ Clicked day panel 10326- ✅ Event bars & glows 10327 10328**Absolute perfection across all three themes!** ✨ 10329 10330## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 10331 10332### Theme Improvements 10333- **Fixed:** Clicked day panel now uses correct theme colors 10334- **Changed:** Professional Blue background now light grey (not white) 10335- **Added:** Theme colors passed to JavaScript for dynamic rendering 10336 10337### Clicked Day Panel Theming 10338 10339**Before**: Always blue regardless of theme 10340```javascript 10341// Hardcoded blue: 10342color:#00cc07; // Always green 10343background:#3498db; // Always blue 10344``` 10345 10346**After**: Theme-aware colors 10347```php 10348// PHP passes theme to JavaScript: 10349window.themeColors_XXX = { 10350 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 10351 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 10352 text_shadow: '0 0 3px ...' or '', 10353 event_bg: 'rgba(...)', 10354 border_color: 'rgba(...)', 10355 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 10356}; 10357 10358// JavaScript uses theme colors: 10359color: themeColors.text_primary; 10360background: themeColors.event_bg; 10361``` 10362 10363**Result**: 10364- Matrix: Green panel with green glow ✓ 10365- Purple: Purple panel with purple glow ✓ 10366- Professional: Blue panel, no glow, clean ✓ 10367 10368### Professional Theme Background Change 10369 10370**Before**: Almost white (#f5f7fa, #ffffff) 10371```php 10372'bg' => '#f5f7fa', // Very light 10373'cell_bg' => '#ffffff', // Pure white 10374``` 10375 10376**After**: Light grey tones 10377```php 10378'bg' => '#e8ecf1', // Soft grey-blue 10379'cell_bg' => '#f5f7fa', // Light grey 10380'grid_bg' => '#d5dbe3', // Medium grey 10381'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 10382``` 10383 10384**Visual Impact**: 10385- Sidebar: Light grey-blue background (#e8ecf1) 10386- Week cells: Lighter grey (#f5f7fa) 10387- Today cell: Highlighted blue-grey (#dce8f7) 10388- More depth and contrast ✓ 10389- Professional appearance ✓ 10390 10391### All Theme Elements Now Consistent 10392 10393**Matrix (Green)**: 10394- Sidebar: Dark (#242424) 10395- Clicked panel: Dark with green 10396- Text: Green with glow 10397 10398**Purple Dream**: 10399- Sidebar: Dark purple (#2a2030) 10400- Clicked panel: Dark with purple 10401- Text: Purple with glow 10402 10403**Professional Blue**: 10404- Sidebar: Light grey (#e8ecf1) 10405- Clicked panel: Light with blue 10406- Text: Dark grey, no glow 10407 10408**Perfect theme consistency everywhere!** 10409 10410## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 10411 10412### Critical Fixes 10413- **Fixed:** Tomorrow events not loaded when outside current week 10414- **Fixed:** `&` showing instead of `&` (double HTML encoding) 10415 10416### Issue 1: Tomorrow Not Loading 10417 10418**Problem**: Sidebar only loaded events for current week 10419- Today (Saturday): Week ends today 10420- Tomorrow (Sunday): Start of NEXT week 10421- Tomorrow events never loaded from data files! 10422 10423**Before**: 10424```php 10425// Only load current week 10426$end = new DateTime($weekEnd); 10427$end->modify('+1 day'); 10428$period = new DatePeriod($start, $interval, $end); 10429// If tomorrow > weekEnd, it's not in period! 10430``` 10431 10432**After**: 10433```php 10434// Check if tomorrow is outside week 10435$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 10436if ($tomorrowDate > $weekEnd) { 10437 // Extend to include tomorrow 10438 $end = new DateTime($tomorrowDate); 10439} 10440$end->modify('+1 day'); 10441$period = new DatePeriod($start, $interval, $end); 10442``` 10443 10444**Result**: Tomorrow events now loaded even at week boundary! ✓ 10445 10446### Issue 2: Double HTML Encoding 10447 10448**Problem**: `&` characters showing as `&` 10449 10450**Cause**: Double encoding on line 2625 and 2681 10451```php 10452// Line 2625: 10453$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 10454 10455// Line 2681: 10456$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 10457``` 10458 10459**Fixed**: 10460```php 10461// Line 2625: 10462$title = htmlspecialchars($event['title']); // Encode once 10463 10464// Line 2681: 10465$html .= $title; // Use already-encoded value ✓ 10466``` 10467 10468**Result**: `&` displays correctly! ✓ 10469 10470### Both Fixes Critical 10471 10472These were **two separate bugs**: 104731. **Loading bug**: Tomorrow events not read from files 104742. **Display bug**: Double-encoding text 10475 10476Both needed fixing for Tomorrow section to work properly! 10477 10478## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 10479 10480### Critical Fix 10481- **Fixed:** Tomorrow section missing when tomorrow is outside current week 10482- **Fixed:** Today section now always shows regardless of week boundaries 10483- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 10484 10485### The Problem 10486 10487**Scenario**: Today is Saturday (last day of week) 10488- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 10489- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 10490 10491**BROKEN Logic** (v4.2.2): 10492```php 10493foreach ($events as $dateKey => $dayEvents) { 10494 if ($dateKey < $weekStart) continue; // Skip old events 10495 10496 // ...week processing... 10497 10498 if ($dateKey === $tomorrowStr) { // ← Never reached! 10499 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 10500 } 10501} 10502``` 10503 10504**Result**: Tomorrow events never added because loop skipped them! ❌ 10505 10506### The Fix 10507 10508**Process Today/Tomorrow FIRST**: 10509```php 10510foreach ($events as $dateKey => $dayEvents) { 10511 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 10512 10513 foreach ($eventsWithConflicts as $event) { 10514 // ALWAYS process Today and Tomorrow first! 10515 if ($dateKey === $todayStr) { 10516 $todayEvents[] = $event; // ✓ Always shows 10517 } 10518 if ($dateKey === $tomorrowStr) { 10519 $tomorrowEvents[] = $event; // ✓ Always shows 10520 } 10521 10522 // THEN check week boundaries for grid 10523 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 10524 $weekEvents[$dateKey][] = $event; 10525 } 10526 10527 // Important events still week-only 10528 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10529 $importantEvents[] = $event; 10530 } 10531 } 10532} 10533``` 10534 10535### What Changed 10536 10537**Before**: 105381. Skip events < weekStart ❌ 105392. Process week grid 105403. Try to add Today/Tomorrow ← **Failed if outside week** 105414. Add Important events 10542 10543**After**: 105441. **Always add Today events** ✓ 105452. **Always add Tomorrow events** ✓ 105463. Add to week grid if in range 105474. Add Important events if in range 10548 10549**Result**: 10550- Today section: ✓ Always shows 10551- Tomorrow section: ✓ Always shows (even at week boundary!) 10552- Week grid: ✓ Only current week 10553- Important: ✓ Only current week 10554 10555### Edge Cases Fixed 10556 10557**Saturday → Sunday transition**: 10558- Today (Sat): Shows in Today section ✓ 10559- Tomorrow (Sun): Shows in Tomorrow section ✓ 10560- Week grid: Only shows Sat (today) ✓ 10561 10562**Sunday → Monday transition**: 10563- Today (Sun): Shows in Today section ✓ 10564- Tomorrow (Mon): Shows in Tomorrow section ✓ 10565- Week grid: Shows both Sun and Mon ✓ 10566 10567**Perfect! Tomorrow section now always works!** 10568 10569## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 10570 10571### Corrected Week Options 10572- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 10573- **Changed:** Default is **Sunday** (US/Canada standard) 10574- **Fixed:** Day names array for Sunday start: S M T W T F S 10575 10576### Correct Week Start Options 10577 10578**Sunday Start** (Default): 10579- Grid shows: **S M T W T F S** 10580- Week: Sunday → Saturday 10581- US/Canada standard 10582- Most common worldwide 10583 10584**Monday Start**: 10585- Grid shows: **M T W T F S S** 10586- Week: Monday → Sunday 10587- ISO 8601 standard 10588- Common in Europe 10589 10590### Technical Changes 10591 10592**All References Updated**: 10593```php 10594// Changed from 'saturday' to 'sunday' in: 10595- Admin validation 10596- Week calculation logic 10597- Day names array 10598- Default value 10599- Comments 10600``` 10601 10602**Sunday Calculation** (when today is Saturday): 10603```php 10604$today = date('w'); // 0=Sun, 6=Sat 10605if ($today == 0) { 10606 $weekStart = date('Y-m-d'); // Today! 10607} else { 10608 // Go back $today days to last Sunday 10609 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 10610} 10611``` 10612 10613**Examples**: 10614- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 10615- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 10616 10617**Sorry for the confusion - it's Sunday not Saturday!** 10618 10619## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 10620 10621### Critical Fix 10622- **Fixed:** Week calculation broken when today is Saturday 10623- **Fixed:** Events not showing in Today/Important sections 10624- **Fixed:** Week grid event bars missing 10625- **Changed:** Default week start is Saturday (matches main calendar) 10626 10627### Technical Details 10628 10629**The Bug**: 10630```php 10631// BROKEN (v4.2.0): 10632$weekStart = date('Y-m-d', strtotime('saturday this week')); 10633// When TODAY is Saturday, this is ambiguous and fails! 10634 10635// FIXED (v4.2.1): 10636$today = date('w'); // 0 (Sun) to 6 (Sat) 10637if ($today == 6) { 10638 $weekStart = date('Y-m-d'); // Today! 10639} else { 10640 $daysBack = ($today == 0) ? 1 : ($today + 1); 10641 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 10642} 10643$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 10644``` 10645 10646**Why It Failed**: 10647- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 10648- PHP may interpret it as "next Saturday" or fail 10649- Result: Week range was wrong, events filtered out 10650 10651**The Fix**: 10652- Explicit calculation using day-of-week math 10653- Saturday (day 6): weekStart = today 10654- Sunday (day 0): weekStart = yesterday 10655- Monday-Friday: calculate days back to last Saturday 10656 10657**Result**: Works reliably every day of the week! 10658 10659**Default Changed**: Saturday start (was Monday in 4.2.0) 10660- Matches main calendar behavior 10661- Users can still switch to Monday in settings 10662 10663## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 10664 10665### ✨ New Feature 10666- **Added:** Week start day selector in Themes tab 10667- **Added:** Choose between Monday (ISO standard) or Saturday week start 10668- **Added:** Week grid and all events now respect the selected start day 10669- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 10670 10671### Week Start Options 10672 10673**Monday Start** (Default): 10674- Grid shows: M T W T F S S 10675- Week runs: Monday → Sunday 10676- ISO 8601 standard 10677- Common in Europe, most of world 10678 10679**Saturday Start**: 10680- Grid shows: S S M T W T F 10681- Week runs: Saturday → Friday 10682- Common in Middle East 10683- Sabbath-observant communities 10684 10685### Technical Details 10686 10687**Configuration**: 10688```php 10689// Saved in: data/meta/calendar_week_start.txt 10690// Values: 'monday' or 'saturday' 10691 10692// Week calculation: 10693if ($weekStartDay === 'saturday') { 10694 $weekStart = date('Y-m-d', strtotime('saturday this week')); 10695 $weekEnd = date('Y-m-d', strtotime('friday next week')); 10696} else { 10697 $weekStart = date('Y-m-d', strtotime('monday this week')); 10698 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 10699} 10700``` 10701 10702**Day Names Array**: 10703```php 10704// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 10705// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 10706``` 10707 10708**What Changes**: 10709- Week grid day letters 10710- Week grid date sequence 10711- Today/Tomorrow/Important event date ranges 10712- Week event grouping 10713 10714**What Stays Same**: 10715- All themes still work 10716- Event data unchanged 10717- Main calendar unaffected 10718 10719### How to Change: 10720 107211. Admin → Calendar → Themes tab 107222. Under "Week Start Day" section 107233. Select Monday or Saturday 107244. Click "Save Settings" 107255. Refresh sidebar to see changes 10726 10727**Perfect for international users or religious observances!** 10728 10729## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 10730 10731### ️ Calendar Improvements 10732- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 10733- **Changed:** Event section backgrounds much lighter (almost white) 10734- **Changed:** Individual event backgrounds lighter and more readable 10735- **Changed:** Event borders now theme-colored 10736 10737### Technical Details 10738 10739**Week Start Change**: 10740```php 10741// Before: 10742$weekStart = date('Y-m-d', strtotime('monday this week')); 10743$weekEnd = date('Y-m-d', strtotime('sunday this week')); 10744$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 10745 10746// After: 10747$weekStart = date('Y-m-d', strtotime('sunday this week')); 10748$weekEnd = date('Y-m-d', strtotime('saturday this week')); 10749$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 10750``` 10751 10752**Background Colors**: 10753```php 10754// Section backgrounds (Today, Tomorrow, Important): 10755Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 10756Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 10757Professional: rgba(255, 255, 255, 0.95) // Almost white! 10758 10759// Individual event backgrounds: 10760Matrix: rgba(255, 255, 255, 0.03) // Subtle 10761Purple: rgba(255, 255, 255, 0.05) // Light 10762Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 10763``` 10764 10765**Event Borders**: 10766```php 10767Matrix: rgba(0, 204, 7, 0.2) // Green 10768Purple: rgba(155, 89, 182, 0.2) // Purple 10769Professional: rgba(74, 144, 226, 0.2) // Blue 10770``` 10771 10772### Visual Result: 10773 10774**Before**: Dark backgrounds made text hard to read 10775**After**: Light backgrounds make events pop and text very readable 10776 10777**Week Grid**: 10778``` 10779Before: [M][T][W][T][F][S][S] 10780After: [S][M][T][W][T][F][S] ← Now matches main calendar! 10781``` 10782 10783## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 10784 10785### Final Theme Polish 10786- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 10787- **Fixed:** Event times now use theme bright color 10788- **Fixed:** Event dates use theme dim color 10789- **Fixed:** Task checkboxes use theme bright color 10790- **Fixed:** Event color bars use theme-appropriate shadows 10791- **Fixed:** No text shadows on Professional theme 10792 10793### Technical Details 10794 10795**Event Text Colors**: 10796```php 10797// Matrix: 10798- Title: #00cc07 (green) 10799- Time: #00dd00 (bright green) 10800- Date: #00aa00 (dim green) 10801- Text shadow: 0 0 3px (glow) 10802 10803// Purple: 10804- Title: #b19cd9 (lavender) 10805- Time: #d4a5ff (bright purple) 10806- Date: #8e7ab8 (dim purple) 10807- Text shadow: 0 0 3px (glow) 10808 10809// Professional: 10810- Title: #2c3e50 (dark grey) 10811- Time: #4a90e2 (blue) 10812- Date: #7f8c8d (grey) 10813- Text shadow: none (clean) 10814``` 10815 10816**Color Bar Shadows**: 10817```php 10818// Matrix & Purple: Glow effect 10819box-shadow: 0 0 3px [event-color]; 10820 10821// Professional: Subtle shadow 10822box-shadow: 0 1px 2px rgba(0,0,0,0.2); 10823``` 10824 10825### What's Now Fully Themed: 10826 10827✅ Sidebar background & border 10828✅ Header (clock box) background, border, text 10829✅ Week grid background, borders, cells 10830✅ Week grid day letters & numbers 10831✅ Week grid event bars & "+N more" text 10832✅ Add Event button background & text 10833✅ Today/Tomorrow/Important event titles 10834✅ Event times 10835✅ Event dates (Important section) 10836✅ Task checkboxes 10837✅ Event color bars 10838✅ All text shadows (glow vs none) 10839 10840**Every single element now respects the theme!** 10841 10842## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 10843 10844### Theme Improvements 10845- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 10846- **Fixed:** Add Event button now uses theme colors 10847- **Fixed:** Clock box border now matches theme 10848- **Fixed:** All text shadows respect theme (no glow on professional) 10849- **Fixed:** Event bars use theme-appropriate shadows 10850 10851### Technical Details 10852 10853**Week Grid Theming**: 10854```php 10855// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 10856// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 10857// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 10858``` 10859 10860**Add Event Button**: 10861```php 10862// Matrix: Dark green (#006400) with bright green text 10863// Purple: Purple (#7d3c98) with lavender text 10864// Professional: Blue (#3498db) with white text 10865``` 10866 10867**Text Shadows**: 10868```php 10869// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 10870// Professional: No glow (clean look) 10871``` 10872 10873**CSS Overrides**: 10874```css 10875/* Purple theme */ 10876.sidebar-purple .eventlist-today-header { 10877 border-color: #9b59b6; 10878 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 10879} 10880 10881/* Professional theme */ 10882.sidebar-professional .eventlist-today-header { 10883 border-color: #4a90e2; 10884 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 10885} 10886``` 10887 10888### What Changed Per Theme: 10889 10890**Purple Dream**: 10891- Week grid: Purple borders and dark purple background 10892- Add Event: Purple button with lavender text 10893- Clock box: Purple border with purple glow 10894- Event bars: Purple glow instead of green 10895- All text: Purple/lavender shades 10896 10897**Professional Blue**: 10898- Week grid: Blue borders and light grey background 10899- Add Event: Blue button with white text 10900- Clock box: Blue border with subtle shadow (no glow) 10901- Event bars: Subtle shadows (no glow) 10902- All text: Dark grey and blue shades 10903 10904**Matrix Edition**: Unchanged (still perfect green theme!) 10905 10906## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 10907 10908### ✨ New Features 10909- **Added:** Themes tab in admin for sidebar widget theming 10910- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 10911- **Added:** Theme selector with live previews 10912- **Added:** Theme persistence across page loads 10913 10914### Available Themes 10915 10916**Matrix Edition** (Default): 10917- Dark background (#242424) 10918- Green accents (#00cc07) 10919- Neon glow effects 10920- Original Matrix styling 10921 10922**Purple Dream**: 10923- Dark purple background (#2a2030) 10924- Purple/violet accents (#9b59b6) 10925- Elegant purple glow 10926- Rich purple color scheme 10927 10928**Professional Blue**: 10929- Light grey background (#f5f7fa) 10930- Blue accents (#4a90e2) 10931- Clean professional look 10932- Subtle shadows instead of glow 10933 10934### Bug Fix 10935- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 10936- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 10937 10938### Technical Details 10939 10940**Theme System**: 10941```php 10942// Saved in: data/meta/calendar_theme.txt 10943// Applied dynamically in syntax.php 10944$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 10945$styles = $this->getSidebarThemeStyles($theme); 10946 10947// Styles include: 10948- bg, border, shadow 10949- header_bg, header_border, header_shadow 10950- text_primary, text_bright, text_dim 10951- grid_bg, grid_border 10952- cell_bg, cell_today_bg 10953``` 10954 10955**Theme Changes**: 10956- Header background gradient 10957- Border colors 10958- Text colors 10959- Shadow/glow effects 10960- Grid colors 10961 10962**How to Change**: 109631. Admin → Calendar → Themes tab 109642. Select desired theme 109653. Click "Save Theme" 109664. Refresh page to see changes 10967 10968### Notes 10969- Themes only affect sidebar widget appearance 10970- Main calendar view unchanged 10971- Theme setting stored in `data/meta/calendar_theme.txt` 10972- Safe to switch themes - no data affected 10973 10974## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 10975 10976### Bug Fixes 10977- **Fixed:** Events now sort chronologically by time (was using string comparison) 10978- **Fixed:** Tooltip positioning using JavaScript like system tooltips 10979- **Fixed:** All-day events appear first, then events in time order 10980 10981### Technical Details 10982 10983**Event Sorting Fix**: 10984```php 10985// BROKEN (v4.0.9): 10986return strcmp($aTime, $bTime); 10987// String comparison: "10:00" < "8:00" because "1" < "8" 10988// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 10989 10990// FIXED (v4.1.0): 10991$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 10992$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 10993return $aMinutes - $bMinutes; 10994// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 10995``` 10996 10997**Example Before Fix**: 10998``` 10999 Weekend Ticket Duty (all-day) 110008:00 AM START TICKETS 1100110:00 AM Soul Winning ← Wrong! 110029:45 AM Coffee ← Should be before 10:00 AM 11003``` 11004 11005**Example After Fix**: 11006``` 11007 Weekend Ticket Duty (all-day) 110088:00 AM START TICKETS 110099:45 AM Coffee ← Correct! 1101010:00 AM Soul Winning 11011``` 11012 11013**Tooltip Positioning**: 11014- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 11015- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 11016- Positioned on `mouseenter` event 11017- Matches system tooltip implementation (no cutoff) 11018 11019**JavaScript Implementation**: 11020```javascript 11021element.addEventListener("mouseenter", function() { 11022 const rect = element.getBoundingClientRect(); 11023 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 11024 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 11025}); 11026``` 11027 11028**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 11029 11030## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 11031 11032### UI Improvements 11033- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 11034- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 11035- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 11036 11037### Technical Details 11038 11039**Sidebar Overflow Fix**: 11040```php 11041// Before (line 2005): 11042style="...overflow:hidden..." // ← Blocked tooltips! 11043 11044// After: 11045style="...overflow:visible..." // ← Tooltips extend beyond! 11046``` 11047 11048**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 11049 11050**Main Calendar Tooltip Size**: 11051```css 11052/* Before: */ 11053.conflict-tooltip { 11054 border: 2px solid #ff9800; 11055 border-radius: 6px; 11056 padding: 8px 12px; 11057 font-size: 12px; 11058 min-width: 200px; 11059 max-width: 350px; 11060} 11061 11062/* After: */ 11063.conflict-tooltip { 11064 border: 1px solid #ff9800; /* Thinner */ 11065 border-radius: 3px; /* Smaller */ 11066 padding: 4px 8px; /* Less padding */ 11067 font-size: 10px; /* Smaller header */ 11068 min-width: 120px; /* Narrower */ 11069 max-width: 200px; /* Narrower */ 11070} 11071 11072.conflict-tooltip-body { 11073 padding: 6px 8px; /* Was 10px 12px */ 11074 font-size: 9px; /* Was 11px */ 11075 line-height: 1.4; /* Was 1.6 */ 11076} 11077 11078.conflict-item { 11079 padding: 2px 0; /* Was 4px */ 11080 font-size: 9px; /* Added smaller font */ 11081} 11082``` 11083 11084**Result**: 11085- Main calendar tooltip ~50% smaller 11086- Sidebar tooltips now extend beyond borders 11087- Both tooltips compact and readable 11088 11089## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 11090 11091### Bug Fix 11092- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 11093- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 11094 11095### Technical Details 11096 11097**The Problem**: 11098```php 11099// Before (v4.0.7): 11100$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 11101 11102// Displayed as: 11103"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 11104``` 11105 11106**The Fix**: 11107```php 11108// After (v4.0.8): 11109$conflictTooltip = "Conflicts with: "; // HTML entity for newline 11110 11111// Displays as: 11112Conflicts with: 11113• Event 1 11114• Event 2 11115``` 11116 11117**Why ` ` Works**: 11118- HTML entity for line feed character 11119- Works in data attributes 11120- CSS `white-space: pre-line` preserves the newlines 11121- Renders as actual line breaks in tooltip 11122 11123**Applied to**: 11124- PHP rendering (sidebar Today/Tomorrow/Important) 11125- JavaScript rendering (clicked day events) 11126 11127## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 11128 11129### UI Improvements 11130- **Changed:** Tooltip size reduced significantly (much more compact) 11131- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 11132- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 11133- **Changed:** Narrower width (120-200px vs 200-300px) 11134 11135### Technical Details 11136 11137**Tooltip Size Reduction**: 11138```css 11139/* Before (v4.0.6): 11140padding: 6px 10px; 11141font-size: 11px; 11142min-width: 200px; 11143max-width: 300px; 11144 11145/* After (v4.0.7): */ 11146padding: 3px 6px; 11147font-size: 9px; 11148min-width: 120px; 11149max-width: 200px; 11150``` 11151 11152**Overflow Fix**: 11153```css 11154/* Allow tooltip to extend beyond sidebar */ 11155.sidebar-widget, 11156.sidebar-matrix { 11157 overflow: visible !important; 11158} 11159 11160/* Position tooltip outside */ 11161[data-tooltip]:before { 11162 bottom: 120%; /* Further above */ 11163 right: -10px; /* Can extend beyond edge */ 11164 z-index: 10000; /* Always on top */ 11165} 11166``` 11167 11168**Visual Result**: 11169- Tooltip is ~40% smaller 11170- Extends beyond sidebar border if needed 11171- Still readable, just more compact 11172- Better for small screens 11173 11174## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 11175 11176### Critical Fix 11177- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 11178- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 11179- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 11180- **Fixed:** Now matches what you see in main calendar view 11181 11182### ✨ UI Improvement 11183- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 11184- **Added:** Custom CSS tooltip with data-tooltip attribute 11185- **Improved:** Better tooltip positioning - doesn't overflow screen edges 11186 11187### Technical Details 11188 11189**The Problem - Field Name Mismatch**: 11190```php 11191// Main calendar (line 697): 11192$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 11193 11194// Sidebar (before fix): 11195$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 11196``` 11197 11198**The Problem - Duration Logic**: 11199```php 11200// Main calendar (line 697): 11201$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 11202 ? $evt1['endTime'] 11203 : $evt1['time']; // ← Uses START time (zero duration) 11204 11205// Sidebar (before fix): 11206$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 11207``` 11208 11209**The Fix**: 11210```php 11211// Now checks BOTH field names: 11212if (isset($event['end_time']) && $event['end_time'] !== '') { 11213 $endTime = $event['end_time']; 11214} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 11215 $endTime = $event['endTime']; 11216} else { 11217 $endTime = $startTime; // ← Matches main calendar! 11218} 11219``` 11220 11221**Tooltip Positioning**: 11222- Uses `data-tooltip` attribute instead of `title` 11223- CSS positions tooltip ABOVE badge (`bottom: 100%`) 11224- Aligns to RIGHT edge (`right: 0`) 11225- Arrow points down to badge 11226- Black background with white text 11227- Max width 300px 11228 11229### Example 11230 11231**6:00 PM Evening Service** (no end time): 11232- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 11233- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 11234 11235**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 11236- Zero-duration events at 6:00 PM don't overlap with anything 11237- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 11238 11239**Tooltip appears**: 11240``` 11241 ┌────────────────────┐ 11242 │ Conflicts with: │ 11243 │ • Super Bowl │ 11244 │ (3:30 PM-7:00 PM)│ 11245 └─────────┬──────────┘ 11246 ▼ 11247 ⚠ 11248``` 11249 11250## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 11251 11252### Bug Fix 11253- **Fixed:** Events without end_time now properly get 1-hour default duration 11254- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 11255- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 11256 11257### Technical Details 11258 11259**The Problem**: 11260```php 11261// Before (broken): 11262$endTime = isset($event['end_time']) ? $event['end_time'] : default; 11263 11264// If end_time exists but is empty string "": 11265isset($event['end_time']) = TRUE 11266$endTime = "" // ← Empty string, not default! 11267``` 11268 11269**The Fix**: 11270```php 11271// After (fixed): 11272$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 11273 ? $event['end_time'] 11274 : $this->addHoursToTime($startTime, 1); 11275 11276// Now empty string gets the default 1-hour duration 11277``` 11278 11279**Why This Matters**: 11280Events 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. 11281 11282**Example**: 11283``` 11284Super Bowl: 3:30 PM - 7:00 PM 11285Evening Service: 6:00 PM - ??? (should be 7:00 PM) 11286 11287If end_time = "" (empty string): 11288 Old code: Uses "" → conflict detection fails 11289 New code: Uses 7:00 PM → conflict detected ✓ 11290``` 11291 11292### Testing 11293If you're still not seeing the conflict on the 6:00 PM service: 112941. Check if the event has `end_time` set in the JSON 112952. Clear cache (Admin → Manage Events → Clear Cache) 112963. The conflict should now appear 11297 11298## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 11299 11300### ✨ Feature Added 11301- **Added:** Hover over ⚠ badge to see which events are conflicting 11302- **Added:** Tooltip shows conflicting event titles and times 11303- **Added:** Works in both sidebar sections and clicked day events 11304 11305### Technical Details 11306 11307**Conflict Tracking Enhanced**: 11308```php 11309// Now tracks WHICH events conflict: 11310$event['conflictingWith'] = [ 11311 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 11312 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 11313]; 11314``` 11315 11316**Tooltip Format**: 11317``` 11318Conflicts with: 11319• Meeting (10:00 AM-11:00 AM) 11320• Call (10:30 AM-11:30 PM) 11321``` 11322 11323**Where It Works**: 11324- ✅ Today section (sidebar) 11325- ✅ Tomorrow section (sidebar) 11326- ✅ Important Events section (sidebar) 11327- ✅ Clicked day events (week grid) 11328 11329**Cursor**: Changes to `help` cursor on hover to indicate tooltip 11330 11331### Note on Multi-Day Events 11332The 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. 11333 11334## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 11335 11336### Bug Fixes 11337- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 11338- **Fixed:** Important Events now shows events even if they're today or tomorrow 11339- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 11340 11341### Technical Details 11342 11343**Conflict Badge Issue**: 11344```php 11345// BROKEN (line 2511): 11346$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 11347// ↑ Checking 'conflicts' (plural) 11348 11349// But detectTimeConflicts() sets: 11350$event['conflict'] = true/false; 11351// ↑ Setting 'conflict' (singular) 11352 11353// FIXED: 11354$hasConflict = isset($event['conflict']) && $event['conflict']; 11355``` 11356 11357**Result**: Badge now shows for ALL conflicting events in sidebar sections 11358 11359**Important Events Logic Issue**: 11360```php 11361// BROKEN: 11362if ($dateKey === $todayStr) { 11363 $todayEvents[] = ...; 11364} elseif ($dateKey === $tomorrowStr) { 11365 $tomorrowEvents[] = ...; 11366} else { // ← Only checked if NOT today/tomorrow! 11367 if ($isImportant) { 11368 $importantEvents[] = ...; 11369 } 11370} 11371 11372// FIXED: 11373if ($dateKey === $todayStr) { 11374 $todayEvents[] = ...; 11375} 11376if ($dateKey === $tomorrowStr) { 11377 $tomorrowEvents[] = ...; 11378} 11379// ↑ Changed to separate 'if' statements 11380if ($isImportant && $dateKey in this week) { 11381 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 11382} 11383``` 11384 11385**Result**: Important namespace events now show in Important section even if they're today or tomorrow 11386 11387### Conflict Badge Display 11388- Simplified to just ⚠ icon (no count) 11389- Orange color (#ff9800) 11390- 10px font size 11391- Hover shows "Time conflict detected" 11392 11393## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 11394 11395### Bug Fix 11396- **Fixed:** Important Events section now displays all events correctly 11397- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 11398- **Fixed:** Conflict detection no longer causes events to disappear from Important section 11399 11400### Technical Details 11401 11402**The Problem**: 11403- `detectTimeConflicts()` returned early if only 1 event on a day 11404- Returned original array without adding 'conflict' field 11405- This inconsistency caused issues in event categorization 11406 11407**The Solution**: 11408```php 11409// Before (broken): 11410if (empty($dayEvents) || count($dayEvents) < 2) { 11411 return $dayEvents; // No 'conflict' field added! 11412} 11413 11414// After (fixed): 11415if (count($dayEvents) === 1) { 11416 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 11417} 11418``` 11419 11420**Result**: 11421- All events now have 'conflict' field consistently 11422- Single events: conflict = false 11423- Multiple events: conflict = true/false based on overlap 11424- Important Events section displays correctly 11425 11426## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 11427 11428### Bug Fixes 11429- **Fixed:** Conflict badge (⚠) now displays in clicked day events 11430- **Fixed:** Recurring events edit now updates time and end_time correctly 11431- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 11432 11433### ✨ Features Added 11434- **Added:** Time conflict detection for overlapping events 11435- **Added:** detectTimeConflicts() function checks all events on same day 11436- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 11437- **Added:** Events now have 'conflict' flag set automatically 11438 11439### UI Changes 11440- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 11441- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 11442- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 11443 11444### Technical Details 11445 11446**Conflict Detection**: 11447```php 11448// Automatically detects overlapping events on same day 11449// Sets 'conflict' flag to true if event overlaps with another 11450$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11451``` 11452 11453**Logic**: 11454- All-day events never conflict (no time set) 11455- Timed events check for overlap with other timed events 11456- Overlap = start1 < end2 AND start2 < end1 11457- Default duration is 60 minutes if no end_time 11458 11459**Recurring Events Fix**: 11460- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 11461- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 11462- Now edits actually save and update the events 11463 11464**Week View Bars**: 11465- Shows 4 colored bars instead of 3 11466- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 11467 11468## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 11469 11470**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 11471 11472### Major Features 11473 11474#### Sidebar Widget 11475- **Week Grid**: Interactive 7-day calendar with click-to-view events 11476- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 11477- **Live Clock**: Updates every second with date display 11478- **Real-time Weather**: Geolocation-based temperature with icon 11479- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 11480- **Add Event Button**: Dark green bar opens full event creation dialog 11481- **Matrix Theme**: Green glow effects throughout 11482 11483#### Event Management 11484- **Single Color Bars**: Clean 3px bars showing event's assigned color 11485- **All-Day Events First**: Then sorted chronologically by time 11486- **Conflict Detection**: Orange ⚠ badge on overlapping events 11487- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 11488- **HTML Rendering**: Pre-rendered for JavaScript display 11489- **Click-to-View**: Click week grid days to expand event details 11490 11491#### Admin Interface 11492- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 11493- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 11494- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 11495 11496#### Outlook Sync 11497- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 11498- **Category Mapping**: Map colors to Outlook categories 11499- **Conflict Resolution**: Time conflict detection 11500- **Import/Export Config**: Encrypted configuration files 11501 11502### Design 11503- **Matrix Theme**: Authentic green glow aesthetic 11504- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 11505- **Color Scheme**: 11506 - Today: Orange #ff9800 11507 - Tomorrow: Green #4caf50 11508 - Important: Purple #9b59b6 11509 - Add Event: Dark green #006400 11510 - System bars: Green/Purple/Orange 11511 11512### Technical Highlights 11513- **Zero-margin Design**: Perfect flush alignment throughout 11514- **Flexbox Layout**: Modern, responsive structure 11515- **AJAX Operations**: No page reloads needed 11516- **Smart Sorting**: All-day events first, then chronological 11517- **Tooltip System**: Detailed stats on hover (working correctly) 11518- **Event Dialog**: Full form with drag support 11519- **Cache Management**: One-click cache clearing 11520 11521### Breaking Changes from v3.x 11522- Removed dual color bars (now single event color bar only) 11523- Add Event button moved to between header and week grid 11524- All-day events now appear FIRST (not last) 11525- Update Plugin tab is now the default admin tab 11526 11527### Bug Fixes (v3.10.x → v4.0.0) 11528- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 11529- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 11530- ✅ Fixed weather display (added updateWeather function) 11531- ✅ Fixed HTML rendering in events (title_html/description_html fields) 11532- ✅ Fixed Add Event dialog (null check for calendar element) 11533- ✅ Fixed text positioning in Add Event button 11534- ✅ Fixed spacing throughout sidebar widget 11535 11536### Complete Feature List 11537- Full calendar view (month grid) 11538- Sidebar widget (week view) 11539- Event panel (standalone) 11540- Event list (date ranges) 11541- Namespace support 11542- Color coding 11543- Time conflict detection 11544- DokuWiki syntax in events 11545- Outlook synchronization 11546- System monitoring 11547- Weather display 11548- Live clock 11549- Admin interface 11550- Cache management 11551- Draggable dialogs 11552- AJAX save/edit/delete 11553- Import/export config 11554 11555### Usage 11556 11557**Sidebar Widget**: 11558``` 11559{{calendar sidebar}} 11560{{calendar sidebar namespace=team}} 11561``` 11562 11563**Full Calendar**: 11564``` 11565{{calendar}} 11566{{calendar year=2026 month=6 namespace=team}} 11567``` 11568 11569**Event Panel**: 11570``` 11571{{eventpanel}} 11572``` 11573 11574**Event List**: 11575``` 11576{{eventlist daterange=2026-01-01:2026-01-31}} 11577``` 11578 11579### Stats 11580- **40+ versions** developed during v3.x iterations 11581- **3.10.0 → 3.11.4**: Polish and refinement 11582- **4.0.0**: Production-ready Matrix Edition 11583 11584### Credits 11585Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 11586 11587--- 11588 11589## Previous Versions (v3.11.4 and earlier) 11590 11591## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 11592- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 11593- **Improved:** Small breathing room between system stats bars and Add Event button 11594- **Visual:** Better spacing for cleaner appearance 11595 11596### CSS Change: 11597**eventlist-today-header**: 11598- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 11599 11600### Visual Result: 11601``` 11602│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 11603│ │ ← 2px space (restored) 11604├───────────────────────┤ 11605│ + ADD EVENT │ ← Add Event bar 11606├───────────────────────┤ 11607``` 11608 11609**Before (v3.11.3)**: No space, bars directly touch Add Event button 11610**After (v3.11.4)**: 2px breathing room for better visual hierarchy 11611 11612## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 11613- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 11614- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 11615- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 11616- **Changed:** Line-height reduced from 12px to 10px for better text centering 11617- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 11618 11619### JavaScript Fix: 11620**Problem**: Line 1084-1085 in calendar-main.js 11621```javascript 11622const calendar = document.getElementById(calId); 11623const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 11624``` 11625 11626**Solution**: Added null check 11627```javascript 11628const calendar = document.getElementById(calId); 11629const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 11630``` 11631 11632**Why This Happened**: 11633- Regular calendar has element with id=calId 11634- Sidebar widget doesn't have this element (different structure) 11635- Code tried to read .dataset on null, causing error 11636 11637### Text Position Fix: 11638**Before**: 11639- line-height: 12px 11640- vertical-align: middle 11641- Text slightly low 11642 11643**After**: 11644- line-height: 10px 11645- position: relative; top: -1px 11646- Text perfectly centered 11647 11648### What Works Now: 11649✅ Click "+ ADD EVENT" in sidebar → Dialog opens 11650✅ No console errors 11651✅ Text properly centered vertically 11652✅ Form pre-filled with today's date 11653✅ Save works correctly 11654 11655## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 11656- **Added:** Event dialog to sidebar widget (same as regular calendar) 11657- **Changed:** Add Event button now opens proper event form dialog 11658- **Added:** renderEventDialog() called in renderSidebarWidget() 11659- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 11660- **Improved:** Can now add events directly from sidebar widget 11661 11662### Add Event Button Behavior: 11663**Before (v3.11.1)**: Showed alert with instructions 11664**After (v3.11.2)**: Opens full event creation dialog 11665 11666**Dialog Features**: 11667- Date field (defaults to today) 11668- Title field (required) 11669- Time field (optional) 11670- End time field (optional) 11671- Color picker 11672- Category field 11673- Description field 11674- Save and Cancel buttons 11675- Draggable dialog 11676 11677### Technical Changes: 11678- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 11679- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 11680- Dialog uses same structure as regular calendar 11681- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 11682 11683### User Flow: 116841. User clicks "+ ADD EVENT" green bar 116852. Event dialog opens with today's date pre-filled 116863. User fills in event details 116874. User clicks Save 116885. Event saved via AJAX 116896. Dialog closes 116907. Sidebar refreshes to show new event 11691 11692## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 11693- **Fixed:** Removed bottom padding from header (was 2px, now 0) 11694- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 11695- **Fixed:** Add Event bar now flush against header with zero gap 11696- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 11697- **Improved:** Alert provides clear instructions on how to add events 11698 11699### CSS Changes: 11700**eventlist-today-header**: 11701- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 11702 11703**eventlist-stats-container**: 11704- `margin-top: 2px` → `margin: 0` (removed all margins) 11705 11706### Add Event Button Behavior: 11707**Before**: Clicked → Navigated to Admin → Manage Events tab 11708**After**: Clicked → Shows alert with instructions 11709 11710**Alert Message**: 11711``` 11712To add an event, go to: 11713Admin → Calendar Management → Manage Events tab 11714or use the full calendar view {{calendar}} 11715``` 11716 11717### Visual Result: 11718``` 11719│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 11720├────────────────────────┤ 11721│ + ADD EVENT │ ← Perfectly flush! 11722├────────────────────────┤ 11723``` 11724 11725No gaps, perfectly aligned! 11726 11727## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 11728- **Moved:** Add Event bar back to original position (between header and week grid) 11729- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 11730- **Changed:** Letter spacing reduced from 0.5px to 0.4px 11731- **Fixed:** Text now fully visible without being cut off 11732- **Final:** Optimal position and size determined 11733 11734### Final Layout: 11735``` 11736┌─────────────────────────────┐ 11737│ Clock | Weather | Stats │ ← Header 11738├─────────────────────────────┤ 11739│ + ADD EVENT │ ← Bar (back here, smaller text) 11740├─────────────────────────────┤ 11741│ M T W T F S S │ ← Week Grid 11742│ 3 4 5 6 7 8 9 │ 11743├─────────────────────────────┤ 11744│ Today │ ← Event sections 11745└─────────────────────────────┘ 11746``` 11747 11748### Text Size Changes: 11749**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 11750**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 11751 11752### Why This Position: 11753- Separates header from calendar 11754- Natural action point after viewing stats 11755- Users see stats → decide to add event → view calendar 11756- Consistent with original design intent 11757 11758## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 11759- **Moved:** Add Event bar repositioned from between header/grid to below week grid 11760- **Improved:** Better visual flow - header → stats → grid → add button → events 11761- **Changed:** Add Event bar now acts as separator between calendar and event sections 11762 11763### New Layout: 11764``` 11765┌─────────────────────────────┐ 11766│ Clock | Weather | Stats │ ← Header 11767├─────────────────────────────┤ 11768│ M T W T F S S │ ← Week Grid 11769│ 3 4 5 6 7 8 9 │ 11770├─────────────────────────────┤ 11771│ + ADD EVENT │ ← Add bar (moved here!) 11772├─────────────────────────────┤ 11773│ Today │ ← Event sections 11774│ Tomorrow │ 11775│ Important Events │ 11776└─────────────────────────────┘ 11777``` 11778 11779### Visual Flow: 11780**Before (v3.10.8)**: 117811. Header (clock, weather, stats) 117822. **+ ADD EVENT** bar 117833. Week grid 117844. Event sections 11785 11786**After (v3.10.9)**: 117871. Header (clock, weather, stats) 117882. Week grid (calendar days) 117893. **+ ADD EVENT** bar 117904. Event sections 11791 11792### Benefits: 11793- Natural reading flow: View calendar → Add event → See events 11794- Add button positioned between calendar and event list 11795- Acts as visual separator 11796- More logical action placement 11797 11798## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 11799- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 11800- **Changed:** Events now display with single 3px color bar (event's assigned color only) 11801- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 11802- **Simplified:** Cleaner visual with one color bar instead of two 11803- **Improved:** More space for event content without extra bar 11804 11805### Visual Changes: 11806 11807**Before (v3.10.7)** - Dual color bars: 11808``` 11809├─ [Orange][Green] Event Title 11810├─ [Blue][Purple] Event Title 11811``` 11812 11813**After (v3.10.8)** - Single color bar: 11814``` 11815├─ [Green] Event Title ← Only event color! 11816├─ [Purple] Event Title ← Only event color! 11817``` 11818 11819### Add Bar Changes: 11820- Added `margin:0` to eliminate gaps 11821- Now flush against header (no space above) 11822- Now flush against week grid (no space below) 11823- Perfect seamless connection 11824 11825### Technical Changes: 11826**renderSidebarEvent()**: 11827- Removed section color bar (4px) 11828- Kept only event color bar (3px) 11829 11830**showDayEvents() JavaScript**: 11831- Removed section color bar (4px blue) 11832- Kept only event color bar (3px) 11833 11834**Add Event bar**: 11835- Added `margin:0` inline style 11836- Removed all top/bottom margins 11837 11838## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 11839- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 11840- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 11841- **Changed:** Add Event bar color from orange to dark green (#006400) 11842- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 11843- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 11844- **Changed:** Add Event bar font size increased from 7px to 9px 11845- **Changed:** Add Event bar letter spacing increased to 0.5px 11846- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 11847 11848### Color Bar Fix Details: 11849**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 11850**Solution**: Applied same fix as clicked day events: 11851- Changed parent div: `align-items:start` → `align-items:stretch` 11852- Added `min-height:20px` to parent 11853- Changed bars: `height:100%` → `align-self:stretch` 11854- Bars now properly fill vertical space in ALL sections 11855 11856### Add Event Bar Changes: 11857**Before**: 11858- Background: Orange (#ff9800) 11859- Text: Black (#000) 11860- Height: 6px (text cut off) 11861- Font: 7px 11862 11863**After**: 11864- Background: Dark green (#006400) 11865- Text: Bright green (#00ff00) with green glow 11866- Height: 12px (text fully visible) 11867- Font: 9px 11868- Hover: Darker green (#004d00) 11869- Matrix-themed green aesthetic 11870 11871## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 11872- **Fixed:** Event color bars now display correctly in clicked day events 11873- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 11874- **Added:** Conflict badge (⚠) appears on right side of conflicting events 11875- **Updated:** Complete README.md rewrite with full Matrix theme documentation 11876- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 11877- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 11878- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 11879 11880### Color Bar Fix: 11881**Problem**: Bars had `height:100%` but parent had no explicit height 11882**Solution**: 11883- Changed to `align-self:stretch` on bars 11884- Parent uses `align-items:stretch` 11885- Added `min-height:20px` to parent 11886- Bars now properly fill vertical space 11887 11888### Sorting Change: 11889**Before**: Timed events first → All-day events last 11890**After**: All-day events FIRST → Timed events chronologically 11891 11892**Example**: 11893``` 11894Monday, Feb 5 11895├─ All Day - Project Deadline ← All-day first 11896├─ 8:00 AM - Morning Standup ← Earliest time 11897├─ 10:30 AM - Coffee with Bob 11898└─ 2:00 PM - Team Meeting ← Latest time 11899``` 11900 11901### Conflict Badge: 11902- Orange warning triangle (⚠) on right side 11903- 10px font size 11904- Only appears if `event.conflict` is true 11905- Title attribute shows "Time conflict detected" 11906- Small and unobtrusive 11907 11908### README Update: 11909- Complete rewrite with Matrix theme focus 11910- Full usage instructions for all features 11911- Admin interface documentation 11912- Outlook sync setup guide 11913- System monitoring details 11914- Troubleshooting section 11915- Color scheme reference 11916- File structure documentation 11917- Performance tips 11918- Security notes 11919- Quick start examples 11920 11921## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 11922- **Added:** Events now sorted by time when clicking week grid days 11923- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 11924- **Improved:** Events with times appear first, sorted chronologically 11925- **Improved:** All-day events appear after timed events 11926- **Changed:** Add Event bar font size reduced to 7px (from 10px) 11927- **Changed:** Add Event bar now has 0 padding and fixed 6px height 11928 11929### Sorting Logic: 11930- Events with times sorted by time (earliest first) 11931- All-day events (no time) appear at the end 11932- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 11933- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 11934 11935### Add Event Bar Changes: 11936- **Height**: 6px (was ~12px with padding) 11937- **Padding**: 0 (was 4px top/bottom) 11938- **Font Size**: 7px (was 10px) 11939- **Letter Spacing**: 0.3px (was 0.5px) 11940- **Line Height**: 6px to match height 11941- **Vertical Align**: Middle for text centering 11942 11943## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 11944- **Added:** Thin orange "Add Event" bar between header and week grid 11945- **Added:** Quick access to event creation from sidebar widget 11946- **Styled:** Sleek design with hover effects and glow 11947- **Interactive:** Clicks navigate to Manage Events tab in admin 11948- **Improved:** User workflow for adding events from sidebar 11949 11950### Visual Design: 11951- Orange background (#ff9800) matching Today section color 11952- 4px top/bottom padding for thin, sleek appearance 11953- Black text with white text-shadow for visibility 11954- Hover effect: Darkens to #ff7700 with enhanced glow 11955- Orange glow effect (box-shadow) matching Matrix theme 11956- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 11957 11958### Technical Changes: 11959- Added between header close and renderWeekGrid() call 11960- Inline onclick handler navigates to admin manage tab 11961- Inline onmouseover/onmouseout for hover effects 11962- Smooth 0.2s transition on all style changes 11963 11964## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 11965- **Changed:** Update Plugin tab is now the default tab when opening admin 11966- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 11967- **Improved:** Clear Cache button now larger and more prominent with helpful description 11968- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 11969- **Removed:** Debug console.log statements from day event display 11970- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 11971 11972### UI Changes: 11973- Update Plugin tab opens by default (was Config/Outlook Sync tab) 11974- Clear Cache button prominently displayed at top of Update Plugin tab 11975- Orange ️ button (10px 20px padding) with confirmation dialog 11976- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 11977- Success/error messages display on Update Plugin tab after cache clear 11978- Tab navigation reordered to put Update first 11979 11980### Technical Changes: 11981- Default tab changed from 'config' to 'update' in html() method 11982- Tab navigation HTML reordered to show Update Plugin tab first 11983- clearCache() method now redirects with 'update' tab parameter 11984- Removed Clear Cache button from renderConfigTab() 11985- Added Clear Cache button to renderUpdateTab() with message display 11986 11987## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 11988- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 11989- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 11990- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 11991- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 11992 11993### Technical Changes: 11994- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 11995- Events added to weekEvents now include pre-rendered HTML versions 11996- title_html and description_html fields populated before json_encode() 11997- JavaScript now receives properly formatted HTML content 11998 11999## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 12000- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 12001- **Fixed:** HTML event handlers now call correctly sanitized function names 12002- **Fixed:** Weather temperature now updates correctly in sidebar widget 12003- **Added:** Weather update function to sidebar widget JavaScript 12004- **Added:** "Clear Cache" button in admin panel for easy cache refresh 12005- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 12006- **Improved:** All tooltip functions now work correctly on system status bars 12007 12008### Technical Changes: 12009- Changed tooltip function names to use $jsCalId instead of $calId 12010- Changed HTML onmouseover/onmouseout to use $jsCalId 12011- Added updateWeather() function to sidebar widget 12012- Added getWeatherIcon() function to sidebar widget 12013- Added clearCache() method in admin.php 12014- Added recursiveDelete() helper method in admin.php 12015- Admin UI now has ️ Clear Cache button alongside Export/Import 12016 12017## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 12018- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 12019- **Fixed:** Event links and formatting not displaying in clicked day events 12020- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 12021- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 12022- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 12023- **Improved:** All JavaScript variable names now use valid syntax 12024- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 12025 12026### Technical Changes: 12027- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 12028- JavaScript variables now use underscores instead of dashes 12029- Event HTML rendering preserves DokuWiki formatting 12030- Fixed "showTooltip_sidebar is not defined" errors 12031- Fixed "showDayEvents_cal is not defined" errors 12032 12033## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 12034- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 12035- **Fixed:** Functions now defined BEFORE HTML that uses them 12036- **Changed:** Consolidated all JavaScript into single comprehensive script block 12037- **Removed:** ~290 lines of duplicate JavaScript code 12038- **Added:** Shared state management with `sharedState_[calId]` object 12039- **Improved:** System tooltip functions now work correctly 12040- **Improved:** Week grid click events now work correctly 12041 12042### Technical Changes: 12043- Moved all JavaScript to beginning of widget (before HTML) 12044- Removed duplicate script blocks 12045- Unified tooltip and stats functions 12046- Shared latestStats and cpuHistory state 12047- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 12048 12049## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 12050- **Added:** Dual color bars on events (section color + event color) 12051- **Added:** Click week grid days to view events (replaced hover tooltips) 12052- **Added:** Expandable section below week grid for selected day events 12053- **Added:** Blue theme for selected day section 12054- **Changed:** Week grid days now clickable instead of tooltips 12055- **Changed:** Section bar: 4px wide (left) 12056- **Changed:** Event bar: 3px wide (right) 12057- **Increased:** Gap between color bars from 3px to 6px 12058- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 12059 12060### Visual Changes: 12061- Each event shows TWO color bars side-by-side 12062- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 12063- Right bar (3px): Individual event's assigned color 12064- Click any day in week grid to expand event list 12065- X button to close selected day events 12066 12067## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 12068- **Increased:** Event color bar width from 2px to 3px 12069- **Increased:** Gap between section and event bars from 3px to 6px 12070- **Improved:** Event color bars now more visible alongside section bars 12071- **Note:** Dual color bar system already in place from v3.9.6 12072 12073## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 12074- **Changed:** Date in Important Events moved below event name (was above) 12075- **Changed:** Section headers now 9px font size (was 10px) 12076- **Changed:** Section headers now normal case (was ALL CAPS) 12077- **Changed:** Letter spacing reduced from 0.8px to 0.3px 12078- **Improved:** More natural reading flow with date below event name 12079- **Improved:** Cleaner, more subtle section headers 12080 12081### Header Changes: 12082- "TODAY" → "Today" 12083- "TOMORROW" → "Tomorrow" 12084- "IMPORTANT EVENTS" → "Important Events" 12085 12086## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 12087- **Redesigned:** Complete overhaul of `sidebar` parameter 12088- **Added:** Compact week-at-a-glance itinerary view (200px wide) 12089- **Added:** Live clock widget at top of sidebar 12090- **Added:** 7-cell week grid showing event bars 12091- **Added:** Today section with orange header and left border 12092- **Added:** Tomorrow section with green header and left border 12093- **Added:** Important Events section with purple header and left border 12094- **Added:** Admin setting to configure important namespaces 12095- **Added:** Time conflict badges in sidebar events 12096- **Added:** Task checkboxes in sidebar events 12097- **Changed:** Sidebar now optimized for narrow spaces (200px) 12098- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 12099 12100### New Features: 12101- Clock updates every second showing current time 12102- Week grid shows Mon-Sun with colored event bars 12103- Today/Tomorrow sections show full event details 12104- Important events highlighted in purple (configurable namespaces) 12105- All badges (conflict, time, etc.) shown in compact format 12106- Automatic time conflict detection 12107 12108## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 12109- **Removed:** 16 unused/debug/backup files 12110- **Removed:** 69 console.log() debug statements 12111- **Removed:** 3 orphaned object literals from console.log removal 12112- **Removed:** Temporary comments and markers 12113- **Fixed:** JavaScript syntax errors from cleanup 12114- **Improved:** Code quality and maintainability 12115- **Improved:** Reduced plugin size by removing unnecessary files 12116- **Status:** Production-ready, fully cleaned codebase 12117 12118### Files Removed: 12119- style.css.backup, script.js.backup 12120- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 12121- debug_events.php, debug_html.php, cleanup_events.php 12122- fix_corrupted_json.php, fix_wildcard_namespaces.php 12123- find_outlook_duplicates.php, update_namespace.php 12124- validate_calendar_json.php, admin.js 12125- test_date_field.html 12126 12127## Version 3.7.5 (2026-02-05) 12128- **Fixed:** PHP syntax error (duplicate foreach loop removed) 12129- **Fixed:** Time variable handling in grace period logic 12130 12131## Version 3.7.4 (2026-02-05) 12132- **Added:** 15-minute grace period for timed events 12133- **Changed:** Events with times now stay visible for 15 minutes after their start time 12134- **Changed:** Prevents events from immediately disappearing when they start 12135- **Improved:** Better user experience for ongoing events 12136- **Fixed:** Events from earlier today now properly handled with grace period 12137 12138## Version 3.7.3 (2026-02-05) 12139- **Changed:** Complete redesign of cleanup section for compact, sleek layout 12140- **Changed:** Radio buttons now in single row at top 12141- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 12142- **Changed:** Inline controls - no more grid layout or wrapper boxes 12143- **Changed:** Namespace filter now compact single-line input 12144- **Changed:** Smaller buttons and tighter spacing throughout 12145- **Improved:** More professional, space-efficient design 12146 12147## Version 3.7.2 (2026-02-04) 12148- **Fixed:** Strange boxes under cleanup options - now properly hidden 12149- **Changed:** Unified color scheme across all admin sections 12150- **Changed:** Green (#00cc07) - Primary actions and main theme 12151- **Changed:** Orange (#ff9800) - Warnings and cleanup features 12152- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 12153- **Improved:** Consistent visual design throughout admin interface 12154 12155## Version 3.7.1 (2026-02-04) 12156- **Fixed:** Cleanup section background changed from orange to white 12157- **Fixed:** Event cleanup now properly scans all calendar directories 12158- **Added:** Debug info display when preview finds no events 12159- **Improved:** Better directory scanning logic matching other features 12160 12161## Version 3.7.0 (2026-02-04) 12162- **Added:** Event cleanup feature in Events Manager 12163- **Added:** Delete old events by age (months/years old) 12164- **Added:** Delete events by status (completed tasks, past events) 12165- **Added:** Delete events by date range 12166- **Added:** Namespace filter for targeted cleanup 12167- **Added:** Preview function to see what will be deleted 12168- **Added:** Automatic backup creation before cleanup 12169- **Changed:** Reduced changelog viewer height to 100px (was 400px) 12170 12171## Version 3.6.3 (2026-02-04) 12172- **Fixed:** Conflict tooltips now work properly after navigating between months 12173- **Added:** Changelog display in Update Plugin tab 12174- **Added:** CHANGELOG.md file with version history 12175- **Improved:** Changelog shows last 10 versions with color-coded change types 12176- **Fixed:** Removed debug console.log statements 12177 12178## Version 3.6.2 (2026-02-04) 12179- **Fixed:** Month title now updates correctly when navigating between months 12180- **Changed:** All eventpanel header elements reduced by 10% for more compact design 12181- **Changed:** Reduced header height from 78px to 70px 12182 12183## Version 3.6.1 (2026-02-04) 12184- **Changed:** Complete redesign of eventpanel header with practical two-row layout 12185- **Fixed:** Improved layout for narrow widths (~500px) 12186- **Changed:** Simplified color scheme (removed purple gradient) 12187 12188## Version 3.6.0 (2026-02-04) 12189- **Changed:** Redesigned eventpanel header with gradient background 12190- **Changed:** Consolidated multiple header rows into compact single-row design 12191 12192## Version 3.5.1 (2026-02-04) 12193- **Changed:** Moved event search bar into header row next to + Add button 12194- **Improved:** More compact UI with search integrated into header 12195 12196## Version 3.5.0 (2026-02-04) 12197- **Added:** Event search functionality in sidebar and eventpanel 12198- **Added:** Real-time filtering as you type 12199- **Added:** Clear button (✕) appears when searching 12200- **Added:** "No results" message when search returns nothing 12201 12202## Version 3.4.7 (2026-02-04) 12203- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 12204- **Fixed:** Removed debug logging from console 12205- **Changed:** Updated export version number to match plugin version 12206 12207## Version 3.4.6 (2026-02-04) 12208- **Added:** Debug logging to diagnose conflict detection issues 12209- **Development:** Extensive console logging for troubleshooting 12210 12211## Version 3.4.5 (2026-02-04) 12212- **Added:** Debug logging to showDayPopup and conflict detection 12213- **Development:** Added logging to trace conflict detection flow 12214 12215## Version 3.4.4 (2026-02-04) 12216- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 12217- **Fixed:** Conflict tooltips now appear on hover 12218- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 12219- **Added:** Conflict badges in both future and past events sections 12220 12221## Version 3.4.3 (2026-02-04) 12222- **Added:** Custom styled conflict tooltips with hover functionality 12223- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 12224- **Improved:** Beautiful tooltip design with orange header and clean formatting 12225 12226## Version 3.4.2 (2026-02-04) 12227- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 12228 12229## Version 3.4.1 (2026-02-04) 12230- **Fixed:** End time field now properly saves to database 12231- **Fixed:** End time dropdown now filters to show only valid times after start time 12232- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 12233- **Improved:** End time auto-suggests +1 hour when start time selected 12234 12235## Version 3.4.0 (2026-02-04) 12236- **Added:** End time support for events (start and end times) 12237- **Added:** Automatic time conflict detection 12238- **Added:** Conflict warning badges (⚠️) on events with overlapping times 12239- **Added:** Conflict tooltips showing which events conflict 12240- **Added:** Visual conflict indicators with pulse animation 12241- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 12242 12243## Version 3.3.77 (2026-02-04) 12244- **Fixed:** Namespace badge onclick handlers restored after clearing filter 12245- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 12246 12247## Version 3.3.76 (2026-02-04) 12248- **Fixed:** Namespace badges now clickable after clearing namespace filter 12249 12250## Version 3.3.75 (2026-02-04) 12251- **Fixed:** Form resubmission warnings eliminated 12252- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 12253- **Changed:** All admin redirects now use absolute URLs 12254 12255## Version 3.3.74 (2026-02-04) 12256- **Fixed:** Clearing namespace filter now restores original namespace instead of default 12257- **Added:** data-original-namespace attribute to preserve initial namespace setting 12258- **Improved:** Console logging for namespace filter debugging 12259 12260## Version 3.3.73 (2026-02-03) 12261- **Added:** Dynamic namespace filtering banner with clear button 12262- **Fixed:** JavaScript function accessibility issues 12263- **Fixed:** Namespace badge click handlers in event lists 12264- **Improved:** Persistent namespace filtering across views 12265 12266## Earlier Versions 12267See previous transcripts for complete history through v3.3.73, including: 12268- Recurring events with Outlook sync 12269- Multi-namespace support 12270- Event categories and mapping 12271- Backup/restore functionality 12272- System statistics bar 12273- Namespace selector with fuzzy search 12274- Events Manager with import/export 12275- And much more... 12276