1# Calendar Plugin Changelog 2## Version 6.0.2 (2026-02-09) - FIREFOX DAY HEADER FIX 3 4- **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. 5 6## Version 6.0.1 (2026-02-09) - THEME PARAMETER FIX 7 8- **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()` 9- **Fixed:** `renderEventDialog` also ignored theme context — now receives theme from its caller 10- **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. 11 12 13## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE 14 15- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed 16- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified 17- **Audited:** style.css (3,218 lines) — balanced braces confirmed 18- **Audited:** All admin manage tab action handlers verified functional (13 actions) 19- **New:** Fresh README.md for GitHub with complete documentation 20- **Includes all v5.5.x fixes:** 21 - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total)) 22 - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel 23 - Conflict badges on past events after AJAX navigation 24 - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal 25 26## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP 27 28- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers 29- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0` 30- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning 31- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name 32- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared 33- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check 34- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving 35- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files 36- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt 37- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache 38- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`) 39- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries` 40- **Removed:** Stale "NEW!" comment from Events Manager section 41 42## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH 43 44- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API 45- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status) 46- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run 47- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing 48- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total) 49- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed 50- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important) 51- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead 52- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text 53- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes) 54 55## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH 56 57- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys 58- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional) 59- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background 60- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files) 61- **Changed:** Wiki theme section header text now white for readability on colored backgrounds 62- **Changed:** Week grid JS theme colors now use actual $themeStyles values 63 64## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX 65 66- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch) 67 68## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING 69 70- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner 71- **Fixed:** Week grid conflict tooltips also fixed (same issue) 72- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data 73- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip) 74 75## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD 76 77- **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) 78 79## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS 80 81- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body) 82- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string 83 84## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING 85 86- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping 87- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON) 88- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute 89- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility 90 91## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING 92 93- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation 94- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads 95- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-) 96- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1 97- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds 98- **Added:** ESC key now also closes day popups and conflict tooltips 99- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding 100 101## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY 102 103- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance 104- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js 105- **Refactored:** style.css is now the single source of truth for all visual styling 106- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container 107- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget) 108- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars 109- **Added:** CSS variable injection for {{eventlist panel}} containers 110- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers 111- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position 112- **Added:** Wiki template mapping reads __link__ as accent color from style.ini 113- **Added:** Detailed CSS variable reference table in style.css header comment 114- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php 115- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles 116- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div 117- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible) 118- **Removed:** $isWikiTheme branching from PHP render path 119 120## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! 121 122### Added: Hearts in Explosions! 123- **Added:** 8-12 pink hearts in each click explosion 124- **Added:** Random sizes (12-28px) and directions 125- **Result:** Extra love in every click! 126 127### Fixed: Background CSS Property for Dark Mode Readers 128- **Fixed:** Added `background: transparent` to CSS (was completely removed) 129- **Fixed:** Now CSS readers can detect and modify background property 130- **Why:** Inline styles override transparent, but CSS readers can now see the property 131- **Result:** Dark mode plugins can now change calendar backgrounds! 132 133### The CSS Problem 134 135**Why backgrounds weren't changing with dark mode readers**: 136 137**Before (v5.3.5)**: 138```css 139.calendar-compact-grid tbody td { 140 /* background removed - set via inline style */ 141 border: 1px solid... 142} 143``` 144 145**Problem**: CSS property doesn't exist! 146- Dark mode readers look for `background` property in CSS 147- Can't override what doesn't exist 148- Inline styles work, but readers can't modify them 149 150**After (v5.3.6)**: 151```css 152.calendar-compact-grid tbody td { 153 background: transparent; /* Now exists! */ 154 border: 1px solid... 155} 156``` 157 158**Solution**: 159- Property exists in CSS 160- Dark mode readers can override it 161- Inline styles still override transparent 162- Everyone wins! 163 164### What's Fixed 165 166**Elements now have background property**: 167- `.calendar-compact-grid tbody td` ✓ 168- `.calendar-compact-grid tbody td:hover` ✓ 169- `.event-compact-item` ✓ 170- `.event-compact-item:hover` ✓ 171 172**How it works**: 1731. CSS sets `background: transparent` (default) 1742. Inline styles set actual color (overrides transparent) 1753. Dark mode readers can override CSS property 1764. Works for everyone! 177 178### Hearts in Explosion 179 180**Click anywhere → Hearts explode!** 181 182**Heart details**: 183- Count: 8-12 per explosion (random) 184- Size: 12-28px (random variety) 185- Emoji: (pink heart) 186- Direction: Random 360° 187- Speed: 60-140px travel 188- Duration: 0.8-1.2s 189- z-index: 9999999 (always visible) 190 191**Combined with**: 192- 25 glowing particles 193- 40 pixel sparkles 194- Bright flash 195- **Total: 73-77 elements!** 196 197### Visual Result 198 199**Click explosion**: 200``` 201 ✦ • ✦ 202 • • 203✦ • ! • ✦ 204 • • 205 ✦ • ✦ 206 207Hearts + Particles + Pixels! 208``` 209 210**Dark mode now works**: 211```css 212/* Dark mode reader can now do this: */ 213.calendar-compact-grid tbody td { 214 background: #000 !important; /* Works! */ 215} 216``` 217 218### Why Transparent Works 219 220**CSS Cascade**: 2211. CSS: `background: transparent` (lowest priority) 2222. Inline style: `background: #f5f5f5` (overrides CSS) 2233. Dark mode CSS: `background: #000 !important` (overrides inline) 224 225**Perfect solution!** ✓ 226 227## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! 228 229### Fixed: Particles Now Appear Above All Dialogs! 230- **Fixed:** Increased z-index to 9999999 for all particles 231- **Fixed:** Particles now visible above event dialogs, month picker, etc. 232- **Result:** Cursor effects and explosions always visible! 233 234### The Z-Index Problem 235 236**Before (v5.3.4)**: 237- Particles: z-index 9999 238- Dialogs: z-index 10000-999999 239- **Particles hidden behind dialogs!** 240 241**After (v5.3.5)**: 242- Particles: z-index 9999999 243- Trail: z-index 9999998 244- Pixels: z-index 9999997 245- **Particles ALWAYS on top!** 246 247### What's Fixed 248 249✅ **Main particles** (explosion orbs) 250✅ **Cursor trail** (glowing dots) 251✅ **Pixel sparkles** (tiny bright stars) 252✅ **Flash effect** (click burst) 253 254**All now appear above**: 255- Event dialog popups 256- Month picker 257- Day popups 258- Any modal overlays 259 260### Visual Result 261 262**Moving cursor over dialog**: 263``` 264┌─────────────────────┐ 265│ Event Dialog │ 266│ ✦ • ✦ │ ← Sparkles visible! 267│ → ✦ │ ← Cursor trail visible! 268│ • ✦ • │ 269└─────────────────────┘ 270``` 271 272**Clicking on dialog**: 273``` 274┌─────────────────────┐ 275│ ✦ • ✦ • ✦ │ 276│ • ! • │ ← Explosion visible! 277│ ✦ • ✦ • ✦ │ 278└─────────────────────┘ 279``` 280 281**Perfect visibility everywhere!** ✨ 282 283## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX 284 285### Fixed: Month Picker Now Themed! 286- **Fixed:** Jump to Month dialog now uses theme colors 287- **Fixed:** Dialog background, borders, text all themed 288- **Fixed:** Select dropdowns use theme colors 289- **Fixed:** Buttons use theme accent colors 290- **Result:** Month picker matches calendar theme! 291 292### Fixed: Cursor Effects Work in Dialogs! 293- **Fixed:** Cursor trail now works when hovering over dialogs 294- **Fixed:** Click explosions work when clicking inside dialogs 295- **Technical:** Changed to capture phase event listeners 296- **Result:** Effects work EVERYWHERE now! 297 298### Month Picker Theming 299 300**Before (v5.3.3)**: 301- White background (hardcoded) 302- Black text (hardcoded) 303- No theme integration 304- Looked out of place 305 306**After (v5.3.4)**: 307- Dialog background: `theme.bg` 308- Dialog border: `theme.border` 309- Text color: `theme.text_primary` 310- Dropdowns: `theme.cell_bg` + `theme.text_primary` 311- Cancel button: `theme.cell_bg` 312- Go button: `theme.border` (accent color) 313 314**Fully integrated!** ✅ 315 316--- 317 318### Theme Examples 319 320**Matrix Theme**: 321``` 322┌─────────────────────────┐ 323│ Jump to Month │ ← Dark bg, green border 324│ [February ▼] [2026 ▼] │ ← Dark dropdowns 325│ [Cancel] [Go] │ ← Green "Go" button 326└─────────────────────────┘ 327``` 328 329**Pink Theme**: 330``` 331┌─────────────────────────┐ 332│ Jump to Month │ ← Dark bg, pink border 333│ [February ▼] [2026 ▼] │ ← Dark dropdowns 334│ [Cancel] [Go] │ ← Pink "Go" button 335└─────────────────────────┘ 336With sparkle effects! ✨ 337``` 338 339**Professional Theme**: 340``` 341┌─────────────────────────┐ 342│ Jump to Month │ ← Clean bg, blue border 343│ [February ▼] [2026 ▼] │ ← Clean dropdowns 344│ [Cancel] [Go] │ ← Blue "Go" button 345└─────────────────────────┘ 346``` 347 348--- 349 350### Dialog Cursor Fix 351 352**The Problem**: 353Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects! 354 355**The Solution**: 356Use **capture phase** event listeners: 357```javascript 358// Before (bubbling phase) 359document.addEventListener('click', handler) 360 361// After (capture phase) 362document.addEventListener('click', handler, true) 363 ↑ 364 Capture phase! 365``` 366 367**Capture phase runs BEFORE stopPropagation!** 368 369--- 370 371### Now Works Everywhere 372 373✅ **Calendar area** 374✅ **Event dialogs** 375✅ **Month picker dialog** 376✅ **Day popup dialogs** 377✅ **Anywhere on screen** 378 379**No more blocked effects!** 380 381--- 382 383### Technical Details 384 385**Event phases**: 386``` 3871. Capture phase ← We listen here now! 3882. Target phase 3893. Bubbling phase ← stopPropagation blocks this 390``` 391 392**By using capture phase**: 393- Events caught before stopPropagation 394- Works in all dialogs 395- No conflicts with dialog logic 396 397--- 398 399### All Dialogs Checked 400 401✅ **Month picker** - Now themed! 402✅ **Event dialog** - Already themed 403✅ **Day popup** - Already themed 404 405**Everything consistent!** 406 407--- 408 409## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨ 410 411### ✨ Added: Bright Neon Pixel Sparkles Everywhere! 412- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail 413- **Added:** 40 pixel sparkles in click explosions 414- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar) 415- **Result:** Maximum sparkle effect! 416 417### Tiny Pixel Sparkles 418 419**3-6 tiny bright pixels appear with each cursor movement!** 420 421**Characteristics**: 422- Size: 1-2px (single pixel appearance!) 423- Colors: Bright neon whites and pinks 424 - Pure white (#fff) - 40% chance 425 - Hot pink (#ff1493) 426 - Pink (#ff69b4) 427 - Light pink (#ffb6c1) 428 - Soft pink (#ff85c1) 429- Glow: Triple-layer shadow (intense!) 430- Spawn: Random 30px radius around cursor 431- Animations: 432 - 50% twinkle in place 433 - 50% float upward 434 435**Creates a cloud of sparkles around your cursor!** 436 437--- 438 439### Click Explosion Enhanced 440 441**Now with 40 EXTRA pixel sparkles!** 442 443**Click anywhere → BIG BOOM**: 444- 25 main glowing particles (6-10px) 445- **40 tiny pixel sparkles (1-2px)** ← NEW! 446- Bright white flash 447- Total: 65+ visual elements! 448 449**Pixel sparkles in explosion**: 450- Shoot outward in all directions 451- Random distances (30-110px) 452- Multiple bright colors 453- Some twinkle, some explode 454- Creates stellar effect! 455 456--- 457 458### Entire Screen Coverage 459 460**Effects now work EVERYWHERE!** 461 462**Before (v5.3.2)**: 463- Only inside calendar viewport 464- Limited to calendar area 465 466**After (v5.3.3)**: 467- Works on entire screen! ✓ 468- Cursor trail follows everywhere 469- Click explosions anywhere 470- Used `position: fixed` + `clientX/Y` 471 472**Move anywhere on the page for sparkles!** 473 474--- 475 476### Visual Effect 477 478**Cursor movement**: 479``` 480 • ✦ • ← Tiny pixels 481 • ✦ • ← Glowing trail 482✦ • → • ✦ ← Cursor 483 • ✦ • ← Mixed sizes 484 • ✦ • ← Sparkle cloud 485``` 486 487**Click explosion**: 488``` 489 ✦ • ✦ • ✦ 490 ✦ • • ✦ 491✦ • ! • ✦ 492 ✦ • • ✦ 493 ✦ • ✦ • ✦ 494 49565+ particles total! 496``` 497 498--- 499 500### Sparkle Details 501 502**Trail Pixels** (3-6 per movement): 503- Size: 1-2px 504- Spawn rate: Every 40ms 505- Spread: 30px radius 506- Duration: 0.6-0.8s 507- 50% twinkle, 50% float 508 509**Explosion Pixels** (40 total): 510- Size: 1-3px 511- Spread: 30-110px radius 512- Duration: 0.4-0.8s 513- All directions 514- Intense glow 515 516**Main Particles** (25 total): 517- Size: 4-10px 518- Spread: 50-150px 519- Full color palette 520- Original firework effect 521 522--- 523 524### Color Distribution 525 526**Pixel sparkles favor white**: 527- 40% pure white (#fff) - brightest! 528- 60% pink shades - variety 529 530**Creates brilliant sparkle effect!** 531 532--- 533 534### Performance 535 536**Still optimized**: 537- Trail: 30ms throttle 538- Pixels: 40ms throttle 539- Auto-cleanup 540- Hardware accelerated 541- Smooth 60fps 542 543**Lots of sparkles, zero lag!** 544 545--- 546 547### Full-Screen Magic 548 549**Pink theme calendar detected**: 550```javascript 551if (pink calendar exists) { 552 Enable effects for ENTIRE SCREEN 553 Not just calendar area 554} 555``` 556 557**Works everywhere on page!** ✨ 558 559--- 560 561## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! 562 563### Changed: Glowing Pink Particles Instead of Emoji Sparkles! 564- **Removed:** Emoji sparkle images (✨) 565- **Added:** Glowing pink particle trail following cursor 566- **Added:** FIREWORKS explosion on click! 567- **Result:** Beautiful glowing effects, not emoji! 568 569### Glowing Cursor Trail 570 571**Pink glowing dots follow your cursor!** 572- Small glowing pink orbs (8px) 573- Radial gradient glow effect 574- Multiple box-shadows for depth 575- Fade out smoothly (0.5s) 576- Throttled to 30ms for smoothness 577 578``` 579 • • 580 • → • ← Your cursor 581 • • 582``` 583 584**Not emoji - actual glowing particles!** 585 586--- 587 588### Click Fireworks! 589 590**Click anywhere on the calendar → BOOM!** 591 592**20 pink particles explode outward!** 593- Radial burst pattern (360° coverage) 594- Random speeds (50-150px travel) 595- 4 shades of pink: 596 - Hot pink (#ff1493) 597 - Pink (#ff69b4) 598 - Light pink (#ff85c1) 599 - Very light pink (#ffc0cb) 600- Random sizes (4-10px) 601- Individual glowing halos 602- Smooth explosion animation 603 604**Plus a bright flash at click point!** 605- 30px radius glow 606- Intense pink flash 607- Fades quickly (0.3s) 608 609--- 610 611### Visual Effect 612 613**Cursor movement**: 614``` 615 • 616 • • • 617 • → • ← Glowing trail 618 • • • 619 • 620``` 621 622**Click explosion**: 623``` 624 • • • 625 • • 626 • BOOM! • ← 20 particles 627 • • 628 • • • 629``` 630 631**All particles glow with pink halos!** 632 633--- 634 635### Particle Details 636 637**Trail Particles**: 638- Size: 8x8px 639- Color: Pink radial gradient 640- Shadow: 10px + 20px glow layers 641- Duration: 0.5s fade 642- Rate: 30ms throttle 643 644**Explosion Particles**: 645- Size: 4-10px (random) 646- Colors: 4 pink shades (random) 647- Shadow: 10px + 20px glow (matches color) 648- Duration: 0.6-1.0s (random) 649- Pattern: Perfect circle burst 650 651**Flash Effect**: 652- Size: 30x30px 653- Color: Bright hot pink 654- Shadow: 30px + 50px mega-glow 655- Duration: 0.3s instant fade 656 657--- 658 659### Performance 660 661**Optimized for smoothness**: 662- Trail throttled to 30ms 663- Auto-cleanup after animations 664- CSS hardware acceleration 665- No memory leaks 666- Smooth 60fps 667 668**Won't slow you down!** 669 670--- 671 672### Comparison 673 674**Before (v5.3.1)**: 675- ✨ Emoji sparkle images 676- Static unicode characters 677- Limited visual impact 678 679**After (v5.3.2)**: 680- Glowing pink particles 681- Radial gradients + shadows 682- Beautiful firework explosions 683- Much more impressive! 684 685--- 686 687### Only Pink Theme 688 689**These effects only appear**: 690- On `.calendar-theme-pink` elements 691- Other themes unaffected 692- Pure pink magic! 693 694--- 695 696## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨ 697 698### ✨ Added: MySpace-Style Sparkle Trail! 699- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!) 700- **Toned down:** Reduced glow effects for better taste 701- **Added:** Sparkles appear on cell hover 702- **Added:** Sparkles on event hover (left and right sides!) 703- **Added:** Sparkles on today's cell corners 704- **Added:** Sparkles on navigation buttons 705- **Added:** Sparkles in calendar header 706- **Result:** Pure nostalgic MySpace magic! ✨ 707 708### MySpace Sparkle Cursor Trail 709 710**The classic effect from 2006!** 711- Sparkles follow your cursor as you move 712- Random sizes (12-22px) 713- Random slight offsets for natural feel 714- Float up and fade out animation 715- Throttled to 50ms (smooth, not laggy) 716- Only on pink theme calendars 717 718``` 719 ✨ 720 ✨ ✨ 721✨ → ✨ (cursor trail) 722 ✨ ✨ 723 ✨ 724``` 725 726**Pure nostalgia!** 727 728--- 729 730### Sparkles Everywhere 731 732**Calendar cells**: 733- Hover over any day → ✨ floats up 734- Smooth 1.5s animation 735- Centered sparkle 736 737**Event items**: 738- Hover → ✨ on left side 739- Hover → ✨ on right side 740- Staggered animations (0.4s delay) 741- Continuous twinkling 742 743**Today's cell**: 744- ✨ in top-right corner (continuous) 745- ✨ in bottom-left corner (offset timing) 746- Always sparkling! 747 748**Navigation buttons**: 749- Hover on < or > → ✨ appears top-right 750- One-time float animation 751 752**Calendar header**: 753- ✨ on left side (continuous) 754- ✨ on right side (offset 1s) 755- Always twinkling 756 757--- 758 759### Toned Down Glows 760 761**Before (v5.3.0)**: TOO MUCH GLOW! 762- 50px shadows 763- 4-layer effects 764- Overwhelming 765 766**After (v5.3.1)**: Just right! 767- 8-15px max shadows (subtle) 768- 2-layer effects 769- Professional with personality 770 771**Glow reductions**: 772- Today shimmer: 35px → 12px 773- Today hover: 50px → 15px 774- Event glow: 18px → 6px 775- Badge pulse: 25px → 8px 776- Container glow: 20px → 8px 777 778**Much more tasteful!** 779 780--- 781 782### Sparkle Animations 783 784**sparkle-twinkle** (0.8s): 785``` 786Opacity: 0 → 1 → 1 → 0 787Scale: 0 → 1 → 1 → 0 788Rotation: 0° → 180° → 360° 789``` 790 791**sparkle-float** (1.5s): 792``` 793Moves up: 0px → -50px 794Opacity: 0 → 1 → 1 → 0 795Scale: 0 → 1 → 0.8 → 0 796``` 797 798**Pure MySpace magic!** ✨ 799 800--- 801 802### Where Sparkles Appear 803 804✅ **Cursor trail** (continuous while moving) 805✅ **Calendar cells** (on hover) 806✅ **Event items** (on hover, left + right) 807✅ **Today's cell** (continuous, corners) 808✅ **Navigation buttons** (on hover) 809✅ **Calendar header** (continuous, sides) 810 811**Sparkles EVERYWHERE!** ✨✨✨ 812 813--- 814 815### Performance 816 817**Cursor trail**: 818- Throttled to 50ms 819- Auto-cleanup after 1s 820- No memory leaks 821- Smooth 60fps 822 823**CSS animations**: 824- Hardware accelerated 825- No JavaScript overhead (except cursor) 826- Efficient transforms 827 828**Won't slow down your browser!** 829 830--- 831 832### Pure Nostalgia 833 834**Remember MySpace profiles?** 835- Glitter graphics ✨ 836- Sparkle cursors ✨ 837- Auto-play music (ok, we didn't add that) 838- Animated GIF backgrounds 839- Comic Sans everywhere 840 841**We brought back the sparkles!** ✨ 842 843--- 844 845### Theme Comparison 846 847**Other themes**: Professional and clean 848**Pink theme**: ✨ SPARKLES EVERYWHERE ✨ 849 850**Only pink theme gets the magic!** 851 852--- 853 854## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨ 855 856### Added: Pink Theme Gets BLING! 857- **Added:** Shimmering animation for today's cell 858- **Added:** Sparkling text effect on today's date 859- **Added:** Glowing pulse for event bars 860- **Added:** Gradient shimmer on headers 861- **Added:** Extra glow on hover effects 862- **Added:** Pulsing urgent badge for past due items 863- **Result:** Pink theme is now FABULOUS! ✨ 864 865### Shimmer Effects 866 867**Today's Cell**: 868- Continuous shimmer animation (2 second loop) 869- Multi-layer glow effect 870- Pink and hot pink overlapping shadows 871- Pulses from subtle to intense 872- Extra sparkle on hover 873 874**Today's Date Number**: 875- Sparkle animation (1.5 second loop) 876- Text shadow glow effect 877- Slight scale pulse (100% → 105%) 878- Pink to hot pink shadow transition 879 880### Glow Effects 881 882**Event Bars**: 883- Continuous glow pulse (2 second loop) 884- Uses event's own color 885- Adds pink accent glow layer 886- Creates depth and dimension 887 888**Event Items**: 889- Subtle base glow 890- Enhanced glow on hover 891- Slight slide animation on hover 892- Professional yet playful 893 894### Gradient Shimmer 895 896**Headers**: 897- Animated gradient background 898- 3-color pink gradient flow 899- Smooth 3-second animation 900- Creates movement and life 901- Applies to calendar header and event list header 902 903### Badge Effects 904 905**TODAY Badge**: 906- Sparkle animation 907- Synchronized with today's date 908- Extra prominence 909 910**PAST DUE Badge**: 911- Urgent pulsing effect (1 second loop) 912- Orange glow intensifies 913- Draws attention to urgent items 914- Faster pulse for urgency 915 916### Container Bling 917 918**Main Container**: 919- Multi-layer pink glow 920- Soft outer shadow 921- Creates floating effect 922- Subtle but elegant 923 924### Animation Details 925 926**pink-shimmer** (2s loop): 927``` 928Start: Subtle 5px glow 929Peak: Intense 35px multi-layer glow 930End: Back to subtle 931``` 932 933**pink-sparkle** (1.5s loop): 934``` 935Start: Base glow + scale 1.0 936Peak: Intense glow + scale 1.05 937End: Back to base 938``` 939 940**pink-glow-pulse** (2s loop): 941``` 942Start: Small glow (3px, 6px) 943Peak: Large glow (6px, 12px, 18px) 944End: Back to small 945``` 946 947**pink-gradient-shimmer** (3s loop): 948``` 949Gradient flows across element 950Creates wave effect 951Smooth continuous motion 952``` 953 954**pink-pulse-urgent** (1s loop - faster!): 955``` 956Start: Orange glow 5px 957Peak: Orange glow 25px (intense) 958End: Back to 5px 959``` 960 961### Visual Experience 962 963**Today's Cell**: 964``` 965┌──┬──┬──┬──┬──┬──┬──┐ 966│ │ │ ✨ │ │ │ │ │ ← Shimmers constantly 967│ │ │[9]│ │ │ │ │ ← Sparkles 968│ │ │ ✨ │ │ │ │ │ ← Glows and pulses 969└──┴──┴──┴──┴──┴──┴──┘ 970``` 971 972**Event Bars**: 973``` 974━━━━━━━ ← Glows and pulses 975━━━━━━━ ← Each bar animated 976━━━━━━━ ← Creates rhythm 977``` 978 979**Headers**: 980``` 981╔═════════════════════╗ 982║ ~~~~~~~~~~ ║ ← Gradient flows 983║ February 2026 ║ ← Shimmer effect 984╚═════════════════════╝ 985``` 986 987### Theme Comparison 988 989**Before (v5.2.8)**: 990- Pink colors 991- Static elements 992- Standard shadows 993 994**After (v5.3.0)**: 995- Pink colors ✓ 996- Animated shimmer ✨ 997- Sparkling effects 998- Glowing pulses ✨ 999- Moving gradients 1000- BLING! 1001 1002### Performance 1003 1004**All animations**: 1005- Hardware accelerated (transform, opacity) 1006- Smooth 60fps 1007- CSS animations (no JavaScript) 1008- Minimal CPU usage 1009- Disabled in reduced-motion preference 1010 1011### Only for Pink Theme 1012 1013**Effects only apply when**: 1014```css 1015.calendar-theme-pink 1016``` 1017 1018**Other themes unaffected**: 1019- Matrix stays Matrix 1020- Professional stays Professional 1021- Purple stays Purple 1022- Wiki stays clean 1023 1024**Pink gets all the bling!** ✨ 1025 1026### Use Cases 1027 1028**Perfect for**: 1029- Celebrating occasions 1030- Fun team calendars 1031- Personal style expression 1032- Standing out 1033- Making calendar time fabulous 1034 1035**Not just pink, but BLING pink!** ✨ 1036 1037## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS 1038 1039### Fixed: Today's Date Box Now Uses Theme Colors 1040- **Fixed:** Today's day number box now uses theme border color 1041- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light) 1042- **Result:** Today box matches the theme perfectly! 1043 1044### The Issue 1045 1046Today's date had a hardcoded green box: 1047 1048**In style.css**: 1049```css 1050.cal-today .day-num { 1051 background: #008800; /* Hardcoded green! */ 1052 color: white; 1053} 1054``` 1055 1056**Didn't adapt to themes at all!** 1057 1058### The Fix 1059 1060**Now uses theme colors**: 1061```php 1062// Today's day number 1063if ($isToday) { 1064 background: $themeStyles['border'], // Theme's accent color! 1065 color: (professional theme) ? white : bg color 1066} 1067``` 1068 1069### Theme Examples 1070 1071**Matrix Theme**: 1072- Box background: `#00cc07` (matrix green) 1073- Text color: `#242424` (dark background) 1074 1075**Purple Theme**: 1076- Box background: `#9b59b6` (purple) 1077- Text color: `#2a2030` (dark background) 1078 1079**Professional Theme**: 1080- Box background: `#4a90e2` (blue) 1081- Text color: `#ffffff` (white text) 1082 1083**Pink Theme**: 1084- Box background: `#ff1493` (hot pink) 1085- Text color: `#1a0d14` (dark background) 1086 1087**Wiki Theme**: 1088- Box background: Template's `__border__` color 1089- Text color: Template's `__background_site__` color 1090 1091### Visual Result 1092 1093**Matrix Theme**: 1094``` 1095┌──┬──┬──┬──┬──┬──┬──┐ 1096│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1097└──┴──┴──┴──┴──┴──┴──┘ 1098 ↑ 1099 Green box (#00cc07) 1100``` 1101 1102**Professional Theme**: 1103``` 1104┌──┬──┬──┬──┬──┬──┬──┐ 1105│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1106└──┴──┴──┴──┴──┴──┴──┘ 1107 ↑ 1108 Blue box (#4a90e2) 1109``` 1110 1111**Wiki Theme**: 1112``` 1113┌──┬──┬──┬──┬──┬──┬──┐ 1114│ 1│ 2│ 3│[4]│ 5│ 6│ 7│ 1115└──┴──┴──┴──┴──┴──┴──┘ 1116 ↑ 1117 Template border color 1118``` 1119 1120### Implementation 1121 1122**Inline styles added**: 1123- Background uses `$themeStyles['border']` (theme accent) 1124- Text color uses `$themeStyles['bg']` for contrast 1125- Special case: Professional theme uses white text 1126- All with `!important` to override CSS 1127 1128**CSS cleaned up**: 1129- Removed hardcoded `#008800` background 1130- Removed hardcoded `white` color 1131- Kept structural styles (border-radius, font-weight) 1132 1133### Benefits 1134 1135**Theme Consistency**: 1136- Today box matches theme accent color 1137- Proper contrast with background 1138- Professional appearance 1139 1140**Automatic Adaptation**: 1141- Works with all themes 1142- Works with custom wiki template colors 1143- No manual adjustment needed 1144 1145**Visual Harmony**: 1146- Border color used throughout theme 1147- Today box reinforces theme identity 1148- Consistent design language 1149 1150## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH 1151 1152### Fixed: Table Grid Background Now Matches Cells 1153- **Found:** `grid_bg` was using `__background_alt__` (different from cells!) 1154- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells) 1155- **Result:** Table background no longer shows through cells! 1156 1157### The Layer Problem 1158 1159The table itself had a DIFFERENT background color than its cells! 1160 1161**Before (v5.2.6)**: 1162```php 1163'grid_bg' => __background_alt__, // Table background (#e8e8e8) 1164'cell_bg' => __background_site__, // Cell background (#f5f5f5) 1165``` 1166 1167**The table background was showing THROUGH the cells!** 1168 1169### Why This Happened 1170 1171**Visual layers**: 1172``` 1173Table Element 1174├─ background: __background_alt__ (#e8e8e8) ← Different! 1175└─ Cells 1176 └─ background: __background_site__ (#f5f5f5) ← Different! 1177 1178The table background shows through any gaps! 1179``` 1180 1181### The Fix 1182 1183**After (v5.2.7)**: 1184```php 1185'grid_bg' => __background_site__, // Table background (#f5f5f5) ✓ 1186'cell_bg' => __background_site__, // Cell background (#f5f5f5) ✓ 1187``` 1188 1189**NOW THEY MATCH!** 1190 1191### Where grid_bg Is Used 1192 1193The table element itself: 1194```html 1195<table style="background: __background_alt__"> ← Was showing through! 1196 <tbody> 1197 <tr> 1198 <td style="background: __background_site__">1</td> 1199 </tr> 1200 </tbody> 1201</table> 1202``` 1203 1204Even with cell inline styles, the TABLE background shows through! 1205 1206### All Background Sources Now Unified 1207 1208**Everything now uses __background_site__**: 1209- `bg` → __background_site__ ✓ 1210- `header_bg` → __background_site__ ✓ 1211- `grid_bg` → __background_site__ ✓ (JUST FIXED!) 1212- `cell_bg` → __background_site__ ✓ 1213 1214**Perfect consistency!** 1215 1216### Why It Was Different 1217 1218**Originally the grid was meant to show borders**: 1219- `grid_bg` was `__background_alt__` (slightly different) 1220- Created visual separation between cells 1221- But with transparent/thin cells, it showed through! 1222 1223**Now unified for consistency!** 1224 1225### Visual Result 1226 1227**Before (layers visible)**: 1228``` 1229┌─────────────────┐ 1230│ Grid (#e8e8e8) │ ← Showing through! 1231│ ┌──┬──┬──┐ │ 1232│ │ │ │ │ │ ← Cells (#f5f5f5) 1233│ └──┴──┴──┘ │ 1234└─────────────────┘ 1235``` 1236 1237**After (unified)**: 1238``` 1239┌─────────────────┐ 1240│ Grid (#f5f5f5) │ ← Same color! 1241│ ┌──┬──┬──┐ │ 1242│ │ │ │ │ │ ← Cells (#f5f5f5) 1243│ └──┴──┴──┘ │ 1244└─────────────────┘ 1245Perfect match! 1246``` 1247 1248### Complete Background Mapping 1249 1250**All using __background_site__ now**: 1251- Main container background 1252- Left panel background 1253- Right panel background 1254- Eventlist background 1255- Calendar grid background ← JUST FIXED 1256- Calendar cell backgrounds 1257- Event item backgrounds 1258- Clock header background 1259- Search input background 1260- Past events toggle 1261 1262**EVERYTHING UNIFIED!** 1263 1264## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS 1265 1266### Fixed: Removed Container Backgrounds Showing Through 1267- **Found:** `.calendar-compact-container` had `background: #ffffff;` 1268- **Found:** `.calendar-compact-left` had `background: #fafafa;` 1269- **Found:** `.calendar-compact-right` had `background: #ffffff;` 1270- **Found:** `.event-search-input-inline` had `background: white;` 1271- **Found:** `.past-events-toggle` had `background: #f5f5f5;` 1272- **Result:** Container backgrounds no longer show through cells! 1273 1274### The Container Problem 1275 1276The parent containers had hardcoded backgrounds that were showing through! 1277 1278**Container backgrounds (lines 4-91)**: 1279```css 1280.calendar-compact-container { 1281 background: #ffffff; /* ← Main container! */ 1282} 1283 1284.calendar-compact-left { 1285 background: #fafafa; /* ← Left panel (calendar side)! */ 1286} 1287 1288.calendar-compact-right { 1289 background: #ffffff; /* ← Right panel (events side)! */ 1290} 1291``` 1292 1293**These were showing through the cells and events!** 1294 1295### Why Containers Matter 1296 1297Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through: 1298 1299``` 1300Container (#fafafa) ← Showing through! 1301 └─ Table Cell (#f5f5f5) ← Transparent areas 1302 └─ Content 1303``` 1304 1305### All Backgrounds Removed 1306 1307**v5.2.6 removes**: 1308- `.calendar-compact-container` background 1309- `.calendar-compact-left` background 1310- `.calendar-compact-right` background 1311- `.event-search-input-inline` background 1312- `.past-events-toggle` background & hover 1313 1314**v5.2.5 removed**: 1315- `.calendar-compact-grid tbody td` background 1316- `.calendar-compact-grid thead th` background 1317 1318**v5.2.4 removed**: 1319- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds 1320 1321**v5.2.3 removed**: 1322- `.event-compact-item` background 1323 1324**ALL container and element backgrounds eliminated!** 1325 1326### What Should Work Now 1327 1328**Calendar cells**: No container background showing through ✓ 1329**Event items**: No container background showing through ✓ 1330**Search bar**: Uses template color ✓ 1331**Past events toggle**: Uses template color ✓ 1332 1333### Complete List of Fixes 1334 1335**Containers**: 1336- Main container ✓ 1337- Left panel ✓ 1338- Right panel ✓ 1339 1340**Elements**: 1341- Table cells ✓ 1342- Event items ✓ 1343- Search input ✓ 1344- Past events toggle ✓ 1345 1346**EVERYTHING removed!** 1347 1348### Critical: Clear Caches 1349 1350**Must clear caches or won't work**: 13511. Hard refresh: Ctrl+Shift+R (5 times!) 13522. Clear DokuWiki cache 13533. Close browser completely 13544. Reopen and test 1355 1356**CSS caching is EXTREMELY persistent!** 1357 1358## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS 1359 1360### Fixed: Removed Hardcoded Backgrounds from Table Cells 1361- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`! 1362- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`! 1363- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`! 1364- **Fixed:** Removed ALL hardcoded backgrounds from table CSS 1365- **Result:** Calendar table cells finally use template colors! 1366 1367### The REAL Culprits 1368 1369The generic table CSS was overriding everything! 1370 1371**In style.css (lines 307-356)**: 1372```css 1373.calendar-compact-grid thead th { 1374 background: #f8f8f8; /* ← Header cells hardcoded! */ 1375} 1376 1377.calendar-compact-grid tbody td { 1378 background: #ffffff; /* ← ALL table cells hardcoded! */ 1379} 1380 1381.calendar-compact-grid tbody td:hover { 1382 background: #f0f7ff; /* ← Hover state hardcoded! */ 1383} 1384``` 1385 1386**These apply to ALL `<td>` and `<th>` elements in the calendar table!** 1387 1388### Why This Was the Last One 1389 1390**CSS Specificity Order**: 13911. `.calendar-compact-grid tbody td` (generic - applies to ALL cells) 13922. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells) 13933. Inline styles (should win but didn't) 1394 1395**We removed the specific ones (v5.2.4), but the generic one was still there!** 1396 1397### What We've Removed 1398 1399**v5.2.3**: 1400- `.event-compact-item` background 1401- `.event-compact-item:hover` background 1402 1403**v5.2.4**: 1404- `.cal-empty` background & hover 1405- `.cal-today` background & hover 1406- `.cal-has-events` background & hover 1407 1408**v5.2.5 (FINAL)**: 1409- `.calendar-compact-grid tbody td` background ✓ 1410- `.calendar-compact-grid tbody td:hover` background ✓ 1411- `.calendar-compact-grid thead th` background ✓ 1412 1413**All CSS background overrides ELIMINATED!** 1414 1415### Why It Took 5 Versions 1416 1417**CSS had layers of hardcoded backgrounds**: 1418 1419``` 1420Layer 1: Table cells (.calendar-compact-grid tbody td) 1421 ↓ Overrode inline styles 1422Layer 2: Cell states (.cal-today, .cal-empty, etc.) 1423 ↓ Overrode table cells 1424Layer 3: Event items (.event-compact-item) 1425 ↓ Overrode inline styles 1426 1427ALL had to be removed! 1428``` 1429 1430**We kept finding more specific CSS, but the base table CSS was there all along!** 1431 1432### Visual Result 1433 1434**NOW everything matches**: 1435``` 1436Calendar Table: 1437┌──┬──┬──┬──┬──┬──┬──┐ 1438│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__ 1439├──┼──┼──┼──┼──┼──┼──┤ 1440│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__ 1441├──┼──┼──┼──┼──┼──┼──┤ 1442│ 8│ 9│10│11│12│13│14│ ← All: __background_site__ 1443└──┴──┴──┴──┴──┴──┴──┘ 1444 1445Sidebar Events: 1446┌────────────────────────┐ 1447│ Event │ ← __background_site__ 1448│ Event │ ← __background_site__ 1449└────────────────────────┘ 1450 1451FINALLY ALL MATCHING! ✓ 1452``` 1453 1454### Complete List of Removed CSS 1455 1456**ALL hardcoded backgrounds removed**: 1457- `.event-compact-item` background 1458- `.event-compact-item:hover` background 1459- `.cal-empty` background & hover 1460- `.cal-today` background & hover 1461- `.cal-has-events` background & hover 1462- `.calendar-compact-grid tbody td` background ← NEW 1463- `.calendar-compact-grid tbody td:hover` background ← NEW 1464- `.calendar-compact-grid thead th` background ← NEW 1465 1466**Every single CSS background override is GONE!** 1467 1468### Testing Steps 1469 1470**After installing v5.2.5**: 1471 14721. **Clear browser cache**: Ctrl+Shift+R (3 times!) 14732. **Clear DokuWiki cache**: Click the button 14743. **Close browser completely**: Restart it 14754. **Visit page**: Should finally see matching backgrounds 1476 1477**CSS is EXTREMELY sticky - may need to clear multiple times!** 1478 1479### This Should Be It 1480 1481**No more CSS overrides exist** (we've checked the entire file): 1482- Table cells ✓ Fixed 1483- Cell states ✓ Fixed 1484- Event items ✓ Fixed 1485- Headers ✓ Fixed 1486- Hover states ✓ Fixed 1487 1488**All backgrounds now come from inline styles using template colors!** 1489 1490## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS 1491 1492### Fixed: Removed Hardcoded Backgrounds from Calendar Cells 1493- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`! 1494- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS 1495- **Result:** Calendar cells now use template colors! 1496 1497### The Second Culprit 1498 1499MORE hardcoded backgrounds in the CSS file! 1500 1501**In style.css (lines 359-382)**: 1502```css 1503.cal-empty { 1504 background: #fafafa !important; /* ← Overriding inline styles! */ 1505} 1506 1507.cal-today { 1508 background: #e8f5e9 !important; /* ← Overriding today cell! */ 1509} 1510 1511.cal-today:hover { 1512 background: #c8e6c9 !important; /* ← Overriding hover! */ 1513} 1514 1515.cal-has-events { 1516 background: #fffbf0; /* ← Overriding event cells! */ 1517} 1518 1519.cal-has-events:hover { 1520 background: #fff4d9; /* ← Overriding hover! */ 1521} 1522``` 1523 1524**These were ALL overriding the inline styles!** 1525 1526### The Fix 1527 1528**Removed all hardcoded backgrounds**: 1529```css 1530.cal-empty { 1531 /* background removed - inline style handles this */ 1532 cursor: default !important; 1533} 1534 1535.cal-today { 1536 /* background removed - inline style handles this */ 1537} 1538 1539.cal-has-events { 1540 /* background removed - inline style handles this */ 1541} 1542 1543/* Hover states also removed */ 1544``` 1545 1546### What Was Overridden 1547 1548**v5.2.3 fixed**: 1549- Event items in sidebar ✓ 1550 1551**v5.2.4 fixes**: 1552- Calendar day cells ✓ 1553- Today cell ✓ 1554- Empty cells ✓ 1555- Cells with events ✓ 1556- All hover states ✓ 1557 1558### Why This Kept Happening 1559 1560**CSS had hardcoded backgrounds everywhere**: 15611. Event items: `#ffffff` (fixed in v5.2.3) 15622. Calendar cells: Multiple colors (fixed in v5.2.4) 15633. **All with `!important` flags!** 1564 1565**The inline styles couldn't override them!** 1566 1567### Visual Result 1568 1569**Now ALL backgrounds match**: 1570``` 1571Calendar Grid: 1572┌──┬──┬──┬──┬──┬──┬──┐ 1573│ │ │ │ │ │ │ │ ← All use __background_site__ 1574├──┼──┼──┼──┼──┼──┼──┤ 1575│ │██│ │ │ │ │ │ ← Today uses __background_neu__ 1576├──┼──┼──┼──┼──┼──┼──┤ 1577│ │ │ │ │ │ │ │ ← All match template 1578└──┴──┴──┴──┴──┴──┴──┘ 1579 1580Sidebar Events: 1581┌────────────────────────┐ 1582│ Event │ ← Uses __background_site__ 1583│ Event │ ← Uses __background_site__ 1584└────────────────────────┘ 1585 1586Perfect consistency! 1587``` 1588 1589### CSS Removed 1590 1591**Calendar cells**: 1592- `.cal-empty` background 1593- `.cal-empty:hover` background 1594- `.cal-today` background 1595- `.cal-today:hover` background 1596- `.cal-has-events` background 1597- `.cal-has-events:hover` background 1598 1599**All gone!** ✓ 1600 1601### Important: Clear Caches Again! 1602 1603After installing v5.2.4: 1604 16051. **Hard refresh browser**: Ctrl+Shift+R (twice!) 16062. **Clear DokuWiki cache**: Admin → Clear Cache 16073. **May need to restart browser**: To clear CSS cache 1608 1609**Old CSS is VERY sticky!** 1610 1611### Why It Took So Long 1612 1613**Multiple CSS overrides**: 1614- Event items (v5.2.3) ✓ Fixed 1615- Calendar cells (v5.2.4) ✓ Fixed 1616- Each with different classes 1617- Each with `!important` 1618- Hidden throughout CSS file 1619 1620**Found them all now!** 1621 1622## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS 1623 1624### Fixed: Removed Hardcoded Backgrounds from CSS 1625- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles! 1626- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS 1627- **Result:** Event backgrounds now properly use template colors! 1628 1629### The Root Cause 1630 1631The CSS file was overriding the inline styles with hardcoded white backgrounds! 1632 1633**In style.css (lines 599-616)**: 1634```css 1635.event-compact-item { 1636 background: #ffffff; /* ← This was overriding inline styles! */ 1637} 1638 1639.event-compact-item:hover { 1640 background: #f8f9fa; /* ← And this on hover! */ 1641} 1642``` 1643 1644**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade! 1645 1646### The Fix 1647 1648**Removed hardcoded backgrounds from CSS**: 1649```css 1650.event-compact-item { 1651 /* background removed - set via inline style with template colors */ 1652 display: flex; 1653 /* ... other styles ... */ 1654} 1655 1656.event-compact-item:hover { 1657 box-shadow: 0 1px 3px rgba(0,0,0,0.08); 1658 /* background removed - inline style handles this */ 1659} 1660``` 1661 1662### Why This Was So Difficult to Find 1663 1664**CSS Specificity & Cascade**: 16651. Inline styles with `!important` should win 16662. But CSS that comes after can still apply 16673. The hardcoded `background: #ffffff` was silently overriding 16684. All the PHP code was correct - it was the CSS! 1669 1670**What We Were Doing**: 1671- ✓ Reading template colors correctly 1672- ✓ Setting `cell_bg` to `__background_site__` correctly 1673- ✓ Applying inline styles with `!important` correctly 1674- ✗ CSS file was overriding everything! 1675 1676### What Was Affected 1677 1678**Event items in**: 1679- Main calendar sidebar 1680- Standalone event list 1681- Sidebar widget 1682- All event displays 1683 1684**All had white backgrounds hardcoded in CSS!** 1685 1686### Now Working 1687 1688**Events use template colors**: 1689```html 1690<div class="event-compact-item" 1691 style="background: #f5f5f5 !important; ..."> 1692 ← Now this inline style actually works! 1693</div> 1694``` 1695 1696**No CSS override** ✓ 1697 1698### Testing 1699 1700To verify this works: 17011. Clear browser cache (important!) 17022. Clear DokuWiki cache 17033. Reload page 17044. Events should now match eventlist background 1705 1706**Browser caching can make old CSS persist!** 1707 1708### Visual Result 1709 1710**All backgrounds now matching**: 1711``` 1712┌────────────────────────────┐ 1713│ Eventlist (#f5f5f5) │ ← Template color 1714├────────────────────────────┤ 1715│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1716├────────────────────────────┤ 1717│ Event (#f5f5f5) │ ← Template color (was #ffffff) 1718└────────────────────────────┘ 1719 1720Perfect match! 1721``` 1722 1723### Why Everything Else Worked 1724 1725**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds: 1726- They only had inline styles ✓ 1727- Inline styles worked correctly ✓ 1728- Only event items had the CSS override ✗ 1729 1730### Important Notes 1731 1732**Clear caches**: 1733- Browser cache (Ctrl+Shift+R or Cmd+Shift+R) 1734- DokuWiki cache (Admin → Clear Cache) 1735- Old CSS may be cached! 1736 1737**This was the culprit all along!** 1738 1739## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND 1740 1741### Fixed: Clock Area Now Matches Event Cells 1742- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`) 1743- **Result:** Clock/Today header matches event cell backgrounds! 1744 1745### The Issue 1746 1747The clock area (Today header) was using a different background: 1748 1749**Before (v5.2.1)**: 1750```php 1751'header_bg' => __background_alt__, // Different color (gray #e8e8e8) 1752'cell_bg' => __background_site__, // Event cells (#f5f5f5) 1753``` 1754 1755**After (v5.2.2)**: 1756```php 1757'header_bg' => __background_site__, // Same as cells (#f5f5f5) ✓ 1758'cell_bg' => __background_site__, // Event cells (#f5f5f5) ✓ 1759``` 1760 1761### What's the Clock Area? 1762 1763The clock/Today header in the sidebar: 1764``` 1765┌────────────────────────────┐ 1766│ 3:45:23 PM │ ← Clock area (header_bg) 1767│ ️ --° | Sun, Feb 9, 2026 │ 1768└────────────────────────────┘ 1769``` 1770 1771### All Backgrounds Now Unified 1772 1773**Everything now uses __background_site__**: 1774- Eventlist background ✓ 1775- Calendar cells ✓ 1776- Event items ✓ 1777- Clock/Today header ✓ 1778- Sidebar widget ✓ 1779- All backgrounds match! ✓ 1780 1781### Visual Result 1782 1783**Complete consistency**: 1784``` 1785┌────────────────────────────┐ 1786│ 3:45:23 PM │ ← Same background 1787│ ️ --° | Sun, Feb 9, 2026 │ 1788├────────────────────────────┤ 1789│ Meeting at 2pm │ ← Same background 1790│ Description... │ 1791├────────────────────────────┤ 1792│ Another event │ ← Same background 1793│ More details... │ 1794└────────────────────────────┘ 1795 1796All using __background_site__ (#f5f5f5) 1797``` 1798 1799**Perfect visual harmony!** 1800 1801## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND 1802 1803### Fixed: Calendar Cells Now Match Eventlist Background 1804- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`) 1805- **Result:** Calendar cells now match the eventlist background perfectly! 1806 1807### The Real Issue 1808 1809The eventlist was showing the CORRECT background color all along! 1810 1811**Eventlist was using**: 1812- `bg` → `__background_site__` ✓ (This was correct!) 1813 1814**Calendar cells were using**: 1815- `cell_bg` → `__background__` ✗ (This was wrong!) 1816 1817**They didn't match!** 1818 1819### The Correct Fix 1820 1821**Now everything uses __background_site__**: 1822```php 1823'bg' => __background_site__, // Eventlist (was already correct) 1824'cell_bg' => __background_site__, // Cells (now fixed to match) 1825``` 1826 1827### Why __background_site__? 1828 1829The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background: 1830 1831``` 1832Page Layout: 1833┌────────────────────────────────────┐ 1834│ __background_site__ (page bg) │ ← This is where calendar lives 1835│ │ 1836│ ┌──────────────────────────────┐ │ 1837│ │ __background__ (content bg) │ │ ← Wiki article content 1838│ │ │ │ 1839│ └──────────────────────────────┘ │ 1840│ │ 1841└────────────────────────────────────┘ 1842``` 1843 1844**Calendar should match the page background, not the content background!** 1845 1846### Template Example 1847 1848Typical DokuWiki template: 1849```ini 1850__background_site__ = "#f5f5f5" (Light gray - page background) 1851__background__ = "#ffffff" (White - content area) 1852``` 1853 1854**Before (v5.2.0)**: 1855- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1856- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match 1857 1858**After (v5.2.1)**: 1859- Eventlist: `#f5f5f5` (light gray) ✓ Correct 1860- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED! 1861 1862### All Backgrounds Now Unified 1863 1864**Everything now uses __background_site__**: 1865- Eventlist sidebar background ✓ 1866- Main calendar background ✓ 1867- Calendar day cells ✓ 1868- Sidebar widget ✓ 1869- Event items ✓ 1870- Input fields ✓ 1871- Buttons ✓ 1872 1873**All perfectly matched to the page background!** 1874 1875### Why Version 5.2.0 Was Wrong 1876 1877I 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. 1878 1879**The eventlist knew what it was doing all along!** The cells just needed to catch up. 1880 1881## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS 1882**Note**: This version went the wrong direction. See v5.2.1 for the correct fix. 1883 1884### Fixed: All Backgrounds Now Use __background__ 1885- **Fixed:** `bg` now uses `__background__` instead of `__background_site__` 1886- **Fixed:** Eventlist, calendar cells, and sidebar all match now 1887- **Result:** Completely unified background throughout! 1888 1889### The Issue 1890 1891Different parts of the calendar were using different background sources: 1892 1893**Before (v5.1.9)**: 1894```php 1895'bg' => __background_site__ // Eventlist background (outer page) 1896'cell_bg' => __background__ // Cell backgrounds (content area) 1897``` 1898 1899**These are different colors!** 1900- `__background_site__` = Outer page wrapper (often gray) 1901- `__background__` = Main content area (often white) 1902 1903### The Fix 1904 1905**After (v5.2.0)**: 1906```php 1907'bg' => __background__ // Eventlist background ✓ 1908'cell_bg' => __background__ // Cell backgrounds ✓ 1909``` 1910 1911**Both use the same source!** 1912 1913### What Uses 'bg' 1914 1915The `bg` color is used for: 1916- Eventlist sidebar background 1917- Main calendar container 1918- Sidebar widget background 1919- Form backgrounds 1920- Event dialogs 1921 1922### What Uses 'cell_bg' 1923 1924The `cell_bg` color is used for: 1925- Calendar day cells 1926- Event item backgrounds 1927- Input field backgrounds 1928- Button backgrounds 1929 1930### Why This Matters 1931 1932**Template color hierarchy**: 1933``` 1934__background_site__ → Outer page/body (e.g., #f5f5f5 light gray) 1935__background__ → Main content area (e.g., #ffffff white) 1936__background_alt__ → Sections/headers 1937__background_neu__ → Highlights 1938``` 1939 1940**We want all calendar backgrounds to match the main content area!** 1941 1942### Visual Comparison 1943 1944**Before (v5.1.9)**: Mismatched backgrounds 1945``` 1946┌────────────────────────────────┐ 1947│ Eventlist (gray #f5f5f5) │ ← __background_site__ 1948└────────────────────────────────┘ 1949 1950┌────────────────────────────────┐ 1951│ Calendar │ 1952│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1953│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1954│ └──┴──┴──┴──┴──┴──┴──┘ │ 1955└────────────────────────────────┘ 1956Different colors - looks inconsistent 1957``` 1958 1959**After (v5.2.0)**: Unified backgrounds 1960``` 1961┌────────────────────────────────┐ 1962│ Eventlist (white #fff) │ ← __background__ 1963└────────────────────────────────┘ 1964 1965┌────────────────────────────────┐ 1966│ Calendar │ 1967│ ┌──┬──┬──┬──┬──┬──┬──┐ │ 1968│ │ │ │ │ │ │ │ │ │ ← __background__ (white #fff) 1969│ └──┴──┴──┴──┴──┴──┴──┘ │ 1970└────────────────────────────────┘ 1971Same color - perfectly consistent! 1972``` 1973 1974### Template Examples 1975 1976**Light Template**: 1977```ini 1978__background_site__ = "#f5f5f5" (light gray) 1979__background__ = "#ffffff" (white) 1980``` 1981 1982**Before**: Eventlist gray, cells white 1983**After**: Eventlist white, cells white ✓ 1984 1985**Dark Template**: 1986```ini 1987__background_site__ = "#1a1a1a" (very dark) 1988__background__ = "#2d2d2d" (dark) 1989``` 1990 1991**Before**: Eventlist very dark, cells dark 1992**After**: Eventlist dark, cells dark ✓ 1993 1994### Benefits 1995 1996**Visual Consistency**: 1997- All backgrounds match 1998- Clean, unified appearance 1999- Professional look 2000 2001**Correct Template Integration**: 2002- Uses content area color (not page wrapper) 2003- Matches wiki content area 2004- Proper color hierarchy 2005 2006**Works Everywhere**: 2007- Light templates ✓ 2008- Dark templates ✓ 2009- Custom templates ✓ 2010 2011### All Backgrounds Unified 2012 2013**Now using __background__**: 2014- Eventlist background ✓ 2015- Calendar cells ✓ 2016- Sidebar widget ✓ 2017- Event items ✓ 2018- Input fields ✓ 2019- Buttons ✓ 2020- Dialogs ✓ 2021 2022**Perfect harmony throughout!** 2023 2024## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS 2025 2026### Fixed: Wiki Theme Event Backgrounds Not Showing 2027- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!) 2028- **Fixed:** Replaced CSS variables with actual hex colors 2029- **Result:** Event backgrounds now show correctly with template colors! 2030 2031### The Problem 2032 2033CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes! 2034 2035**Before (broken)**: 2036```php 2037'cell_bg' => 'var(--__background__, #fff)', // Doesn't work in inline styles! 2038``` 2039 2040**After (fixed)**: 2041```php 2042'cell_bg' => '#fff', // Actual hex color works! 2043``` 2044 2045### What Was Affected 2046 2047**When style.ini read successfully**: 2048- ✅ Worked fine (uses actual hex colors from file) 2049 2050**When style.ini fallback used**: 2051- ❌ Events had no background 2052- ❌ CSS variables don't work in inline styles 2053- ❌ Looked broken 2054 2055### The Fix 2056 2057**Wiki theme fallback now uses real colors**: 2058```php 2059'wiki' => [ 2060 'bg' => '#f5f5f5', // Real hex (was: var(--__background_site__)) 2061 'border' => '#ccc', // Real hex (was: var(--__border__)) 2062 'cell_bg' => '#fff', // Real hex (was: var(--__background__)) 2063 'cell_today_bg' => '#eee', // Real hex (was: var(--__background_neu__)) 2064 'text_primary' => '#333', // Real hex (was: var(--__text__)) 2065 'text_bright' => '#2b73b7', // Real hex (was: var(--__link__)) 2066 'text_dim' => '#666', // Real hex (was: var(--__text_neu__)) 2067 'grid_bg' => '#e8e8e8', // Real hex (was: var(--__background_alt__)) 2068 // ... all colors now use real hex values 2069] 2070``` 2071 2072### Why CSS Variables Don't Work 2073 2074**CSS variables work**: 2075```css 2076.some-class { 2077 background: var(--__background__, #fff); /* ✓ Works in CSS */ 2078} 2079``` 2080 2081**CSS variables DON'T work**: 2082```html 2083<div style="background: var(--__background__, #fff)"> <!-- ✗ Doesn't work --> 2084``` 2085 2086### How It Works Now 2087 2088**Priority system**: 20891. **Try reading style.ini** → Use actual template hex colors ✓ 20902. **If file not found** → Use fallback hex colors ✓ 20913. **Never use CSS variables in inline styles** ✓ 2092 2093**Both paths now work correctly!** 2094 2095### Visual Result 2096 2097**Events now have proper backgrounds**: 2098``` 2099┌──────────────────────────┐ 2100│ Meeting at 2pm │ ← White background (#fff) 2101│ Description here... │ 2102│ [✏️ Edit] [️ Delete] │ 2103└──────────────────────────┘ 2104 2105Not: 2106┌──────────────────────────┐ 2107│ Meeting at 2pm │ ← No background (broken) 2108│ Description here... │ 2109└──────────────────────────┘ 2110``` 2111 2112### Affected Areas 2113 2114**All event displays**: 2115- Main calendar events ✓ 2116- Sidebar widget events ✓ 2117- Event list items ✓ 2118- Event backgrounds ✓ 2119- Button backgrounds ✓ 2120- Input field backgrounds ✓ 2121 2122**Everything uses real colors now!** 2123 2124## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT 2125 2126### Reorganized: Better Update Tab Layout 2127- **Moved:** Current Version section to the top 2128- **Combined:** Upload and Important Notes side-by-side 2129- **Improved:** Space-efficient two-column layout 2130- **Result:** More information visible at once! 2131 2132### New Layout Order 2133 2134**Version 5.1.8**: 2135``` 21361. Current Version (at top - see what you have) 21372. Upload + Important Notes (side-by-side) 21383. Recent Changes (changelog) 21394. Backups 2140``` 2141 2142### Side-by-Side Design 2143 2144**Upload form (left 60%) + Important Notes (right 40%)**: 2145``` 2146┌──────────────────────────────────────────┐ 2147│ Current Version │ 2148│ Version: 5.1.8 │ 2149│ ✅ Permissions: OK │ 2150└──────────────────────────────────────────┘ 2151 2152┌─────────────────────┬────────────────────┐ 2153│ Upload New │ ⚠️ Important Notes │ 2154│ [Choose File] │ • Replaces files │ 2155│ ☑ Backup first │ • Config preserved │ 2156│ [Upload] [Clear] │ • Events safe │ 2157└─────────────────────┴────────────────────┘ 2158``` 2159 2160### Benefits 2161 2162**Current Version First**: 2163- See what you have immediately 2164- Check permissions at a glance 2165- Know if ready to update 2166 2167**Side-by-Side Layout**: 2168- Upload form and warnings together 2169- Read notes while choosing file 2170- More efficient use of space 2171- Less scrolling needed 2172 2173**Better Information Flow**: 21741. See current version ✓ 21752. Upload new version with notes visible ✓ 21763. Review recent changes ✓ 21774. Manage backups ✓ 2178 2179### Visual Comparison 2180 2181**Before (v5.1.7)**: 2182``` 2183Important Notes (full width) 2184↓ 2185Upload Form (full width) 2186↓ 2187Current Version 2188↓ 2189Recent Changes 2190↓ 2191Backups 2192``` 2193 2194**After (v5.1.8)**: 2195``` 2196Current Version (full width) 2197↓ 2198Upload (60%) | Notes (40%) 2199↓ 2200Recent Changes 2201↓ 2202Backups 2203``` 2204 2205**More compact, better organized!** 2206 2207### Responsive Design 2208 2209**Wide screens**: 2210- Upload and notes side-by-side 2211- Full 1200px width utilized 2212- Efficient space usage 2213 2214**Narrow screens**: 2215- Sections stack gracefully 2216- Flex layout adapts 2217- Still fully functional 2218 2219### Layout Details 2220 2221**Current Version Section**: 2222- Full width (1200px max) 2223- Shows version, author, description 2224- Permission status with icons 2225- Helpful fix commands if needed 2226 2227**Upload/Notes Section**: 2228- Flexbox layout with gap 2229- Upload: `flex:1` (grows) 2230- Notes: `flex:0 0 350px` (fixed 350px) 2231- Both have proper min-width 2232 2233**Recent Changes Section**: 2234- Full width (1200px max) 2235- Compact scrollable view 2236- Color-coded change types 2237- Last 10 versions shown 2238 2239**Backups Section**: 2240- Full width (1200px max) 2241- Manual backup button 2242- Scrollable file list 2243- All actions accessible 2244 2245### Improved Max Widths 2246 2247All sections now use `max-width:1200px` (previously 900px): 2248- Better use of wide screens 2249- Still responsive on narrow screens 2250- Consistent throughout tab 2251 2252## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR 2253 2254### Fixed: Extra Closing Brace 2255- **Fixed:** ParseError on line 1936 (extra closing brace) 2256- **Result:** Manual backup feature now works correctly! 2257 2258### What Was Wrong 2259 2260Extra `}` after the backup section: 2261 2262**Before (broken)**: 2263```php 2264echo '</div>'; 2265} // ← Extra closing brace! 2266 2267echo '<script> 2268``` 2269 2270**After (fixed)**: 2271```php 2272echo '</div>'; 2273 2274echo '<script> 2275``` 2276 2277**Manual backup feature now fully functional!** ✅ 2278 2279## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND 2280 2281### Added: Create Backup Manually Anytime 2282- **Added:** "Create Backup Now" button in Backups section 2283- **Added:** Manual backup action handler with full verification 2284- **Added:** Backups section always visible (even with no backups) 2285- **Added:** Success message showing file size and file count 2286- **Result:** Create backups anytime without needing to upload! 2287 2288### Manual Backup Button 2289 2290**New Layout**: 2291``` 2292┌─────────────────────────────────────┐ 2293│ Backups [ Create Backup Now] │ 2294├─────────────────────────────────────┤ 2295│ Backup File Size │ 2296│ calendar.backup.v5.1.6... 243 KB │ 2297│ [ Download] [✏️ Rename] [️ Delete] │ 2298└─────────────────────────────────────┘ 2299``` 2300 2301**Always visible - even with no backups**: 2302``` 2303┌─────────────────────────────────────┐ 2304│ Backups [ Create Backup Now] │ 2305├─────────────────────────────────────┤ 2306│ No backups yet. Click "Create │ 2307│ Backup Now" to create your first │ 2308│ backup. │ 2309└─────────────────────────────────────┘ 2310``` 2311 2312### How It Works 2313 2314**Click the button**: 23151. Confirm: "Create a backup of the current plugin version?" 23162. System creates backup ZIP 23173. Verifies: File count (30+ files) 23184. Verifies: File size (200KB+) 23195. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)" 2320 2321**Backup naming**: 2322``` 2323calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2324 ^^^^^^ 2325 "manual" tag identifies manual backups 2326``` 2327 2328### Use Cases 2329 2330**Before updates**: 2331- Create safety backup before uploading new version 2332- Have multiple restore points 2333- Test new features with fallback 2334 2335**Regular backups**: 2336- Weekly/monthly backup schedule 2337- Before making configuration changes 2338- After important customizations 2339 2340**Development**: 2341- Backup before code experiments 2342- Save working states 2343- Quick rollback points 2344 2345### Full Verification 2346 2347**Same checks as automatic backups**: 2348- ✅ File count check (minimum 10, expected 30+) 2349- ✅ File size check (minimum 1KB, expected 200KB+) 2350- ✅ Existence check (file actually created) 2351- ✅ Automatic cleanup on failure 2352 2353**Success message includes**: 2354- Backup filename 2355- File size (human-readable) 2356- Number of files backed up 2357 2358### Example Messages 2359 2360**Success**: 2361``` 2362✓ Manual backup created successfully: 2363 calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2364 (243 KB, 31 files) 2365``` 2366 2367**Failure Examples**: 2368``` 2369❌ Plugin directory is not readable. 2370 Please check permissions. 2371 2372❌ Backup incomplete: Only 5 files were added (expected 30+). 2373 Backup failed. 2374 2375❌ Backup file is too small (342 bytes). 2376 Only 3 files were added. Backup failed. 2377``` 2378 2379### Benefits 2380 2381**On-Demand Safety**: 2382- Create backups anytime 2383- No need to upload new version 2384- Quick and easy 2385 2386**Peace of Mind**: 2387- Backup before risky changes 2388- Multiple restore points 2389- Safe experimentation 2390 2391**Professional Workflow**: 2392- Regular backup schedule 2393- Version snapshots 2394- Disaster recovery 2395 2396### Backup Section Improvements 2397 2398**Always Visible**: 2399- Section shows even with 0 backups 2400- Button always accessible 2401- Clear call-to-action 2402 2403**Better Header**: 2404- Title and button on same row 2405- Clean, professional layout 2406- Space-efficient design 2407 2408### Technical Details 2409 2410**New Action**: `create_manual_backup` 2411 2412**New Function**: `createManualBackup()` 2413- Gets current version 2414- Creates timestamped filename with "manual" tag 2415- Uses same verification as auto-backups 2416- Shows detailed success/error messages 2417 2418**File Naming Convention**: 2419``` 2420Automatic (on upload): 2421calendar.backup.v5.1.6.2026-02-09_12-30-45.zip 2422 2423Manual (button click): 2424calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip 2425 ^^^^^^^ 2426 Easy to identify! 2427``` 2428 2429### Permissions Required 2430 2431- **Read access**: Plugin directory 2432- **Write access**: Parent plugins directory 2433 2434**Same as automatic backups** - no additional permissions needed! 2435 2436## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION 2437 2438### Enhanced: Backup Creation with Robust Verification 2439- **Added:** File count validation (must have 10+ files) 2440- **Added:** File size validation (must be 1KB+ minimum) 2441- **Added:** Return value from addDirectoryToZip (counts files added) 2442- **Added:** Detailed error messages showing file count 2443- **Added:** Automatic deletion of invalid/incomplete backups 2444- **Enhanced:** Exception handling with proper error propagation 2445- **Result:** Backups are now guaranteed to be complete or fail clearly! 2446 2447### What Changed 2448 2449**Before (v5.1.4)**: 2450```php 2451$this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2452$zip->close(); 2453// No verification - could create empty or partial backup 2454``` 2455 2456**After (v5.1.5)**: 2457```php 2458$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/'); 2459$zip->close(); 2460 2461// Verify backup exists 2462if (!file_exists($backupPath)) { 2463 redirect('Backup file was not created'); 2464} 2465 2466// Verify backup has content 2467$backupSize = filesize($backupPath); 2468if ($backupSize < 1000) { 2469 unlink($backupPath); 2470 redirect('Backup too small: ' . $backupSize . ' bytes'); 2471} 2472 2473// Verify file count 2474if ($fileCount < 10) { 2475 unlink($backupPath); 2476 redirect('Only ' . $fileCount . ' files added (expected 30+)'); 2477} 2478``` 2479 2480### Backup Validation Checks 2481 2482**Three-Layer Verification**: 2483 24841. **File Count Check**: 2485 - Minimum: 10 files required 2486 - Expected: 30+ files 2487 - Action: Delete backup if too few files 2488 24892. **Size Check**: 2490 - Minimum: 1KB (1000 bytes) 2491 - Expected: 200-250KB 2492 - Action: Delete backup if too small 2493 24943. **Existence Check**: 2495 - Verify file was actually created 2496 - Check ZIP archive is valid 2497 - Action: Error if file missing 2498 2499### Enhanced Error Reporting 2500 2501**Detailed Error Messages**: 2502``` 2503❌ "Backup file was not created" 2504❌ "Backup too small (342 bytes). Only 3 files added." 2505❌ "Only 5 files added (expected 30+). Backup aborted." 2506❌ "Too many errors adding files: Failed to add X, Y, Z..." 2507❌ "Directory does not exist: /path/to/dir" 2508❌ "Directory is not readable: /path/to/dir" 2509``` 2510 2511**Now you know exactly what went wrong!** 2512 2513### Improved addDirectoryToZip Function 2514 2515**Returns File Count**: 2516```php 2517private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2518 $fileCount = 0; 2519 $errors = []; 2520 2521 // Validation 2522 if (!is_dir($dir)) throw new Exception("Directory does not exist"); 2523 if (!is_readable($dir)) throw new Exception("Not readable"); 2524 2525 // Add files 2526 foreach ($files as $file) { 2527 if ($zip->addFile($filePath, $relativePath)) { 2528 $fileCount++; 2529 } else { 2530 $errors[] = "Failed to add: " . $filename; 2531 } 2532 } 2533 2534 // Check error threshold 2535 if (count($errors) > 5) { 2536 throw new Exception("Too many errors"); 2537 } 2538 2539 return $fileCount; // Returns count for verification! 2540} 2541``` 2542 2543### Safety Features 2544 2545**Invalid Backup Cleanup**: 2546- Failed backups are automatically deleted 2547- No partial/corrupt backups left behind 2548- Clean error state 2549 2550**Error Threshold**: 2551- Allow up to 5 minor file errors (logs warnings) 2552- More than 5 errors = complete failure 2553- Prevents partially corrupt backups 2554 2555**Directory Validation**: 2556- Check directory exists before processing 2557- Check directory is readable 2558- Fail fast with clear errors 2559 2560### Benefits 2561 2562**Guaranteed Complete Backups**: 2563- ✅ All files included or backup fails 2564- ✅ No silent failures 2565- ✅ Clear error messages 2566- ✅ Automatic cleanup 2567 2568**Better Debugging**: 2569- Know exactly how many files were added 2570- See specific errors for missing files 2571- Understand why backup failed 2572 2573**User Confidence**: 2574- Backup succeeds = complete backup 2575- Backup fails = clear error message 2576- No ambiguity 2577 2578### Example Scenarios 2579 2580**Scenario 1: Permission Issue** 2581``` 2582User uploads new version 2583System starts backup 2584Error: "Directory is not readable: /lib/plugins/calendar/" 2585Backup fails before creating file 2586User sees clear error message 2587``` 2588 2589**Scenario 2: Partial Backup** 2590``` 2591User uploads new version 2592System creates backup 2593Only 5 files added (disk issue?) 2594Size: 450 bytes 2595Verification fails 2596Incomplete backup deleted 2597Error: "Only 5 files added (expected 30+)" 2598``` 2599 2600**Scenario 3: Success** 2601``` 2602User uploads new version 2603System creates backup 260431 files added 2605Size: 240KB 2606All verifications pass ✅ 2607Update proceeds 2608``` 2609 2610### Testing Recommendations 2611 2612After installing v5.1.5: 26131. Upload a new version with backup enabled 26142. Check for success message 26153. Verify backup file exists in /lib/plugins/ 26164. Check backup file size (should be ~240KB) 26175. If backup fails, read error message carefully 2618 2619**Your backups are now bulletproof!** 2620 2621## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED 2622 2623### ✅ Verified: Backup System Working Correctly 2624- **Verified:** addDirectoryToZip function includes all files recursively 2625- **Verified:** Backups contain all 31+ files from calendar directory 2626- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed) 2627- **Info:** Backup sizes grow slightly with each version (more code = more features!) 2628- **Result:** Backup system is working perfectly! 2629 2630### Backup System Details 2631 2632**What Gets Backed Up**: 2633- All PHP files (syntax.php, admin.php, action.php, etc.) 2634- All JavaScript files (calendar-main.js, script.js) 2635- All documentation (CHANGELOG.md, README.md, all guides) 2636- All configuration (sync_config.php) 2637- All language files 2638- All assets and resources 2639- **Everything in the calendar/ directory!** 2640 2641**Backup Size Analysis**: 2642``` 2643Version 5.0.4: 233KB (normal) 2644Version 5.0.5: 234KB (normal) 2645Version 5.0.6: 235KB (normal) 2646Version 5.0.7: 236KB (normal) 2647Version 5.0.8: 237KB (normal) 2648Version 5.0.9: 237KB (normal) 2649Version 5.1.0: 238KB (normal) 2650Version 5.1.1: 238KB (normal) 2651Version 5.1.2: 240KB (normal - added AJAX features) 2652Version 5.1.3: 240KB (normal) 2653``` 2654 2655**Why Sizes Grow**: 2656- More features = more code 2657- Longer CHANGELOG 2658- Additional documentation 2659- New functionality 2660- **This is expected and normal!** 2661 2662**Compression Ratio**: 2663``` 2664Uncompressed: ~1.0 MB (source files) 2665Compressed: ~240 KB (ZIP archive) 2666Ratio: ~24% (excellent compression!) 2667``` 2668 2669### Backup File Contents 2670 2671**31 Files Included**: 2672``` 2673admin.php (216KB - main admin interface) 2674syntax.php (173KB - calendar rendering) 2675calendar-main.js (102KB - JavaScript functionality) 2676CHANGELOG.md (268KB - complete version history) 2677style.css (57KB - all styling) 2678action.php (38KB - DokuWiki actions) 2679sync_outlook.php (32KB - Outlook integration) 2680+ 24 other files (docs, configs, helpers) 2681``` 2682 2683**All files successfully included!** ✅ 2684 2685### How Backups Work 2686 2687**Creation Process**: 26881. User uploads new plugin version 26892. Checkbox "Create backup first" (checked by default) 26903. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip` 26914. Backup saved to: `/lib/plugins/` directory 26925. Then proceeds with update 2693 2694**Backup Function**: 2695```php 2696private function addDirectoryToZip($zip, $dir, $zipPath = '') { 2697 $files = new RecursiveIteratorIterator( 2698 new RecursiveDirectoryIterator($dir), 2699 RecursiveIteratorIterator::LEAVES_ONLY 2700 ); 2701 foreach ($files as $file) { 2702 if (!$file->isDir()) { 2703 $zip->addFile($filePath, $relativePath); 2704 } 2705 } 2706} 2707``` 2708 2709**Recursive = Gets Everything!** ✅ 2710 2711### Verification Results 2712 2713**Test Results**: 2714- ✅ All 31 files present in zip 2715- ✅ All subdirectories included (lang/en/) 2716- ✅ File sizes match originals 2717- ✅ Compression works properly 2718- ✅ No files missing 2719- ✅ Backup can be restored 2720 2721**File Count**: 2722``` 2723Source directory: 31 files 2724Backup ZIP: 34 items (31 files + 3 directories) 2725Status: COMPLETE ✅ 2726``` 2727 2728### Backup Best Practices 2729 2730**Always enabled by default** ✅ 2731**Stored in accessible location** ✅ 2732**Timestamped filenames** ✅ 2733**Complete directory backup** ✅ 2734**Easy to restore** ✅ 2735 2736### Conclusion 2737 2738The backup system is working perfectly. The file sizes are appropriate and expected: 2739- Compressed size: ~240KB (good compression) 2740- Uncompressed size: ~1MB (all source files) 2741- All files included: YES ✅ 2742- Growing size over versions: Normal (more features!) 2743 2744**Your backups are complete and reliable!** 2745 2746## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR 2747 2748### Fixed: JavaScript Syntax Error in AJAX Function 2749- **Fixed:** ParseError on line 1947 (deleteBackup function) 2750- **Fixed:** Escaped all single quotes in JavaScript strings 2751- **Result:** AJAX backup deletion now works correctly! 2752 2753### What Was Wrong 2754 2755JavaScript inside PHP echo needs escaped quotes: 2756 2757**Before (broken)**: 2758```javascript 2759formData.append('action', 'delete_backup'); // PHP interprets quotes 2760``` 2761 2762**After (fixed)**: 2763```javascript 2764formData.append(\'action\', \'delete_backup\'); // Escaped for PHP 2765``` 2766 2767### All Quotes Escaped 2768 2769Fixed in deleteBackup function: 2770- ✅ FormData.append() calls 2771- ✅ fetch() URL 2772- ✅ querySelector() calls 2773- ✅ createElement() call 2774- ✅ All string literals 2775- ✅ Error messages 2776 2777**JavaScript now works!** ✓ 2778 2779## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT 2780 2781### Improved: Update Tab Further Refined 2782- **Moved:** Important Notes to very top (above upload) 2783- **Enhanced:** Delete backup now uses AJAX (no page refresh!) 2784- **Added:** Smooth fade-out animation when deleting backups 2785- **Added:** Success message after deletion 2786- **Auto-remove:** Backup section disappears if last backup deleted 2787- **Result:** Smoother, more polished experience! 2788 2789### New Layout Order 2790 2791**Final Order (v5.1.2)**: 2792``` 27931. ⚠️ Important Notes (warnings at top) 27942. Upload New Version (with Clear Cache button) 27953. Current Version (info) 27964. Recent Changes (changelog) 27975. Available Backups (if any) 2798``` 2799 2800### AJAX Backup Deletion 2801 2802**Before (v5.1.1)**: 2803- Click Delete → Page refreshes → Scroll back down 2804- Lose position on page 2805- Page reload is jarring 2806 2807**After (v5.1.2)**: 2808- Click Delete → Confirm 2809- Row fades out smoothly 2810- Row disappears 2811- Success message shows at top 2812- Success message fades after 3 seconds 2813- If last backup: entire section fades away 2814- **No page refresh!** ✓ 2815 2816### Visual Flow 2817 2818**Delete Animation**: 2819``` 28201. Click ️ Delete 28212. Confirm dialog 28223. Row fades out (0.3s) 28234. Row removed 28245. Success message appears 28256. Message fades after 3s 2826``` 2827 2828**If Last Backup**: 2829``` 28301. Delete last backup 28312. Row fades out 28323. Entire "Available Backups" section fades 28334. Section removed 28345. Clean interface ✓ 2835``` 2836 2837### Success Message 2838 2839After deleting: 2840``` 2841┌──────────────────────────────┐ 2842│ ✓ Backup deleted: filename │ ← Appears at top 2843└──────────────────────────────┘ 2844 Fades after 3 seconds 2845``` 2846 2847### Benefits 2848 2849**Important Notes First**: 2850- Warnings before actions ✓ 2851- Read before uploading ✓ 2852- Clear expectations ✓ 2853 2854**AJAX Deletion**: 2855- No page refresh ✓ 2856- Smooth animations ✓ 2857- Stay in context ✓ 2858- Professional feel ✓ 2859 2860**Auto-Cleanup**: 2861- Empty list disappears ✓ 2862- Clean interface ✓ 2863- No clutter ✓ 2864 2865### Technical Implementation 2866 2867**AJAX Request**: 2868```javascript 2869fetch('?do=admin&page=calendar&tab=update', { 2870 method: 'POST', 2871 body: formData 2872}) 2873``` 2874 2875**DOM Manipulation**: 2876- Fade out row 2877- Remove element 2878- Show success 2879- Remove section if empty 2880 2881**Smooth Transitions**: 2882- 300ms fade animations 2883- Clean visual feedback 2884- Professional polish 2885 2886## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB 2887 2888### Improved: Update Tab Layout Reorganized 2889- **Moved:** Upload section to the top of the page 2890- **Added:** Clear Cache button next to Upload & Install button 2891- **Changed:** "Current Version" section moved below upload 2892- **Result:** Better workflow - upload first, then see version info! 2893 2894### New Layout Order 2895 2896**Before (v5.1.0)**: 2897``` 28981. Clear Cache (standalone) 28992. Current Version 29003. Recent Changes 29014. Upload New Version 29025. Warning Box 29036. Backups 2904``` 2905 2906**After (v5.1.1)**: 2907``` 29081. Upload New Version (with Clear Cache button side-by-side) 29092. Warning Box 29103. Current Version 29114. Recent Changes 29125. Backups 2913``` 2914 2915### Visual Result 2916 2917**Top of Update Tab**: 2918``` 2919┌─────────────────────────────────┐ 2920│ Upload New Version │ 2921│ ┌─────────────────────────────┐ │ 2922│ │ [Choose File] │ │ 2923│ │ ☑ Create backup first │ │ 2924│ │ ┌──────────────┬──────────┐ │ │ 2925│ │ │ Upload & │️ Clear │ │ │ 2926│ │ │ Install │ Cache │ │ │ 2927│ │ └──────────────┴──────────┘ │ │ 2928│ └─────────────────────────────┘ │ 2929│ │ 2930│ ⚠️ Important Notes │ 2931│ • Will replace all files │ 2932│ • Config preserved │ 2933│ │ 2934│ Current Version │ 2935│ Version: 5.1.1 │ 2936└─────────────────────────────────┘ 2937``` 2938 2939### Benefits 2940 2941**Better Workflow**: 2942- Primary action (upload) is first 2943- Clear cache conveniently next to install 2944- No scrolling to find upload button 2945- Logical top-to-bottom flow 2946 2947**Side-by-Side Buttons**: 2948- Upload & Install (green) 2949- Clear Cache (orange) 2950- Both common actions together 2951- Easy to access after upload 2952 2953**Improved UX**: 2954- Upload is most important → now at top 2955- Version info is reference → moved down 2956- Related actions grouped 2957- Cleaner organization 2958 2959### Button Layout 2960 2961``` 2962┌──────────────────┬──────────────┐ 2963│ Upload & │ ️ Clear │ 2964│ Install │ Cache │ 2965│ (Green) │ (Orange) │ 2966└──────────────────┴──────────────┘ 2967``` 2968 2969**Green = Primary Action** 2970**Orange = Secondary Action** 2971 2972Both easily accessible! 2973 2974## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND 2975 2976### Changed: Admin Section Backgrounds Now Use __background__ 2977- **Changed:** All section boxes now use `__background__` instead of `__background_alt__` 2978- **Result:** Cleaner, more unified admin interface! 2979 2980### Background Usage Update 2981 2982**Before (v5.0.9)**: 2983```php 2984Section boxes: bg_alt (__background_alt__) 2985Content areas: bg (__background__) 2986``` 2987 2988**After (v5.1.0)**: 2989```php 2990Section boxes: bg (__background__) 2991Content areas: bg (__background__) 2992``` 2993 2994### Why This Change? 2995 2996**More unified appearance**: 2997- Sections and content use same background 2998- Creates cleaner, more cohesive look 2999- Borders provide visual separation 3000- Matches typical admin UI patterns 3001 3002**Template color hierarchy**: 3003``` 3004__background_site__ → Outer page wrapper 3005__background__ → Content & sections (BOTH now use this) 3006__background_alt__ → Reserved for special panels/highlights 3007__background_neu__ → Special highlights 3008``` 3009 3010### Visual Result 3011 3012**Light Template**: 3013```ini 3014__background__ = "#ffffff" 3015__background_alt__ = "#e8e8e8" 3016``` 3017 3018**Before**: 3019``` 3020Admin Page: 3021┌─────────────────────┐ 3022│ ┌─────────────────┐ │ 3023│ │ Section Box │ │ ← Gray (#e8e8e8) 3024│ │ ┌─────────────┐ │ │ 3025│ │ │ Content │ │ │ ← White (#fff) 3026│ │ └─────────────┘ │ │ 3027│ └─────────────────┘ │ 3028└─────────────────────┘ 3029Two-tone appearance 3030``` 3031 3032**After**: 3033``` 3034Admin Page: 3035┌─────────────────────┐ 3036│ ┌─────────────────┐ │ 3037│ │ Section Box │ │ ← White (#fff) 3038│ │ ┌─────────────┐ │ │ 3039│ │ │ Content │ │ │ ← White (#fff) 3040│ │ └─────────────┘ │ │ 3041│ └─────────────────┘ │ 3042└─────────────────────┘ 3043Unified, clean appearance 3044Borders provide separation 3045``` 3046 3047**Dark Template**: 3048```ini 3049__background__ = "#2d2d2d" 3050__background_alt__ = "#3a3a3a" 3051``` 3052 3053**After**: 3054``` 3055Admin Page: 3056┌─────────────────────┐ 3057│ ┌─────────────────┐ │ 3058│ │ Section Box │ │ ← Dark (#2d2d2d) 3059│ │ ┌─────────────┐ │ │ 3060│ │ │ Content │ │ │ ← Dark (#2d2d2d) 3061│ │ └─────────────┘ │ │ 3062│ └─────────────────┘ │ 3063└─────────────────────┘ 3064Unified dark appearance 3065Accent borders provide definition 3066``` 3067 3068### Benefits 3069 3070**Cleaner Look**: 3071- No more alternating gray/white 3072- More professional appearance 3073- Less visual noise 3074- Unified color scheme 3075 3076**Better Consistency**: 3077- Matches modern admin UI patterns 3078- Borders define sections, not colors 3079- Simpler, cleaner design 3080- Easier on the eyes 3081 3082**Template Friendly**: 3083- Works with any background color 3084- Light or dark templates 3085- Custom colors 3086- Always looks cohesive 3087 3088### All Sections Updated 3089 3090✅ Outlook Sync config sections 3091✅ Manage Events sections 3092✅ Update Plugin sections 3093✅ Themes tab sections 3094✅ Week start day section 3095✅ All form sections 3096 3097**Complete unified theming!** 3098 3099## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB 3100 3101### Fixed: Syntax Error in Theme Cards 3102- **Fixed:** ParseError on line 4461 (Purple theme card) 3103- **Fixed:** Malformed ternary expressions from sed replacement 3104- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki) 3105- **Result:** Admin pages work correctly! 3106 3107### What Was Wrong 3108 3109The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions: 3110 3111**Before (broken)**: 3112```php 3113? '#9b59b6' : ' . $colors['border'] . ') 3114// Extra quote and dot created syntax error 3115``` 3116 3117**After (fixed)**: 3118```php 3119? '#9b59b6' : $colors['border']) 3120// Clean ternary expression 3121``` 3122 3123### All Theme Cards Fixed 3124 3125- ✅ Purple Dream card 3126- ✅ Professional Blue card 3127- ✅ Pink Bling card 3128- ✅ Wiki Default card 3129 3130### Now Working 3131 3132**Theme selection page loads** ✓ 3133**All cards display properly** ✓ 3134**Template colors applied** ✓ 3135**No syntax errors** ✓ 3136 3137## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING 3138 3139### Fixed: Themes Tab Backgrounds & Correct Template Color Mapping 3140- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites) 3141- **Fixed:** Main background now uses `__background__` instead of `__background_site__` 3142- **Fixed:** Theme selection cards use template backgrounds 3143- **Fixed:** Week start options use template backgrounds 3144- **Result:** Perfect color mapping throughout admin! 3145 3146### Color Mapping Correction 3147 3148**Before (v5.0.7)**: 3149```php 3150bg: __background_site__ // Wrong - this is outer page bg 3151bg_alt: __background_alt__ 3152``` 3153 3154**After (v5.0.8)**: 3155```php 3156bg: __background__ // Correct - main content bg 3157bg_alt: __background_alt__ 3158``` 3159 3160### Why This Matters 3161 3162**Template color hierarchy**: 3163``` 3164__background_site__ → Outer page/site background 3165__background__ → Main content area (CORRECT for admin) 3166__background_alt__ → Sections/panels 3167__background_neu__ → Highlights 3168``` 3169 3170**Admin should use**: 3171- `__background__` for input fields, content areas 3172- `__background_alt__` for section boxes, panels 3173 3174### Themes Tab Fixed 3175 3176**Removed all hardcoded colors**: 3177```php 3178Before: '#ddd', '#fff', '#dee2e6' 3179After: $colors['border'], $colors['bg'], $colors['border'] 3180``` 3181 3182**Now themed**: 3183- ✅ Week start section background 3184- ✅ Week start option backgrounds 3185- ✅ Theme card backgrounds 3186- ✅ Theme card borders 3187- ✅ All borders throughout 3188 3189### Visual Result 3190 3191**Light Template**: 3192```ini 3193__background__ = "#ffffff" 3194__background_alt__ = "#e8e8e8" 3195``` 3196 3197**Admin Before (v5.0.7)**: 3198``` 3199Input fields: #f5f5f5 (site bg - wrong) 3200Sections: #e8e8e8 (alt bg - correct) 3201``` 3202 3203**Admin After (v5.0.8)**: 3204``` 3205Input fields: #ffffff (content bg - correct!) 3206Sections: #e8e8e8 (alt bg - correct!) 3207``` 3208 3209**Dark Template**: 3210```ini 3211__background__ = "#2d2d2d" 3212__background_alt__ = "#3a3a3a" 3213``` 3214 3215**Admin After (v5.0.8)**: 3216``` 3217Input fields: #2d2d2d (content bg - perfect!) 3218Sections: #3a3a3a (alt bg - perfect!) 3219``` 3220 3221### Complete Themes Tab 3222 3223**Week Start Options**: 3224``` 3225┌─────────────────────────┐ 3226│ Week Start Day │ ← bg_alt 3227│ ┌─────────┬───────────┐ │ 3228│ │ Monday │ Sunday │ │ ← bg (when not selected) 3229│ └─────────┴───────────┘ │ 3230└─────────────────────────┘ 3231``` 3232 3233**Theme Cards**: 3234``` 3235┌─────────────────────────┐ 3236│ Matrix Edition │ ← bg (when not selected) 3237│ Classic green theme │ border (when not selected) 3238└─────────────────────────┘ 3239 3240┌═════════════════════════┐ 3241│ Purple Dream │ ← rgba green tint (when selected) 3242│ Elegant purple theme │ #00cc07 border (when selected) 3243└═════════════════════════┘ 3244``` 3245 3246### Perfect Integration 3247 3248**All admin pages now**: 3249- Content areas: `__background__` ✓ 3250- Section boxes: `__background_alt__` ✓ 3251- Borders: `__border__` ✓ 3252- Text: `__text__` ✓ 3253 3254**Matches wiki perfectly**: 3255- Same white content areas 3256- Same gray section boxes 3257- Same border colors 3258- Same text colors 3259 3260### No More Issues 3261 3262**Fixed**: 3263- ❌ Site background on content areas → ✅ Content background 3264- ❌ Hardcoded white on themes tab → ✅ Template background 3265- ❌ Hardcoded borders (#ddd) → ✅ Template borders 3266 3267**Result**: 3268- Perfect color hierarchy ✓ 3269- Correct background levels ✓ 3270- Complete template integration ✓ 3271 3272## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING 3273 3274### Fixed: All Admin Backgrounds Use Template Colors 3275- **Fixed:** All section backgrounds use `__background_alt__` 3276- **Fixed:** All content backgrounds use `__background__` 3277- **Fixed:** All borders use `__border__` 3278- **Fixed:** All text uses `__text__` 3279- **Result:** Complete admin template integration! 3280 3281### All Replacements 3282 3283**Backgrounds**: 3284```php 3285Before: background: #f9f9f9 3286After: background: ' . $colors['bg_alt'] . ' 3287 3288Before: background: #fff / background: white 3289After: background: ' . $colors['bg'] . ' 3290``` 3291 3292**Borders**: 3293```php 3294Before: border: 1px solid #ddd 3295Before: border: 1px solid #e0e0e0 3296Before: border: 1px solid #eee 3297After: border: 1px solid ' . $colors['border'] . ' 3298``` 3299 3300**Text**: 3301```php 3302Before: color: #333 3303Before: color: #666 3304After: color: ' . $colors['text'] . ' 3305``` 3306 3307### Complete Admin Coverage 3308 3309**All tabs now themed**: 3310- ✅ Manage Events tab 3311- ✅ Update Plugin tab 3312- ✅ Outlook Sync tab 3313- ✅ Themes tab 3314- ✅ Tab navigation 3315- ✅ All sections 3316- ✅ All inputs 3317- ✅ All borders 3318- ✅ All text 3319 3320### Visual Result 3321 3322**Light Template**: 3323``` 3324Admin Page: 3325┌──────────────────────────┐ 3326│ Tab Navigation │ ← Template borders 3327├──────────────────────────┤ 3328│ Section Headers │ ← bg_alt (light gray) 3329│ ┌──────────────────────┐ │ 3330│ │ Form Inputs │ │ ← bg (white) 3331│ │ Content Areas │ │ 3332│ └──────────────────────┘ │ 3333└──────────────────────────┘ 3334All template colors! ✓ 3335``` 3336 3337**Dark Template**: 3338``` 3339Admin Page: 3340┌──────────────────────────┐ 3341│ Tab Navigation │ ← Template borders 3342├──────────────────────────┤ 3343│ Section Headers │ ← bg_alt (dark gray) 3344│ ┌──────────────────────┐ │ 3345│ │ Form Inputs │ │ ← bg (darker) 3346│ │ Content Areas │ │ 3347│ └──────────────────────┘ │ 3348└──────────────────────────┘ 3349All template colors! ✓ 3350``` 3351 3352### Template Color Mapping 3353 3354**Used throughout admin**: 3355``` 3356__background_site__ → $colors['bg'] (main backgrounds) 3357__background_alt__ → $colors['bg_alt'] (section backgrounds) 3358__text__ → $colors['text'] (all text) 3359__border__ → $colors['border'] (all borders) 3360__link__ → $colors['link'] (links - future) 3361``` 3362 3363### Examples by Section 3364 3365**Manage Events**: 3366- Event list backgrounds: `bg_alt` 3367- Event item backgrounds: `bg` 3368- Borders: `border` 3369- Text: `text` 3370 3371**Update Plugin**: 3372- Section backgrounds: `bg_alt` 3373- Content areas: `bg` 3374- Borders: `border` 3375- Text: `text` 3376 3377**Outlook Sync**: 3378- Config sections: `bg_alt` 3379- Input fields: `bg` 3380- Borders: `border` 3381- Labels: `text` 3382 3383**Themes Tab**: 3384- Theme cards: `bg_alt` 3385- Preview areas: `bg` 3386- Borders: `border` 3387- Descriptions: `text` 3388 3389### Benefits 3390 3391**Seamless Integration**: 3392- Matches wiki admin area perfectly 3393- Same colors throughout wiki 3394- Professional appearance 3395- Consistent experience 3396 3397**Automatic Adaptation**: 3398- Light templates: Light admin 3399- Dark templates: Dark admin 3400- Custom templates: Uses custom colors 3401 3402**No White Boxes**: 3403- Every background themed 3404- Every border themed 3405- Every text themed 3406- Complete consistency 3407 3408### PERFECT HARMONY 3409 3410**Frontend (Calendar)**: 3411- Wiki theme uses style.ini ✓ 3412- Perfect template match ✓ 3413 3414**Backend (Admin)**: 3415- Reads same style.ini ✓ 3416- Perfect template match ✓ 3417 3418**Complete Unity**: 3419- Same colors everywhere ✓ 3420- Seamless experience ✓ 3421- Professional polish ✓ 3422 3423## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS 3424 3425### Enhanced: Month/Year Header & Admin Pages Use Template Colors 3426- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme 3427- **Added:** Admin pages read template's style.ini file 3428- **Added:** `getTemplateColors()` function in admin class 3429- **Fixed:** Tab navigation uses template text and border colors 3430- **Result:** Complete template integration everywhere! 3431 3432### Month/Year Header 3433 3434**Before**: 3435```php 3436color: __text__ // Same as primary text 3437``` 3438 3439**After (Wiki Theme)**: 3440```php 3441color: __text_neu__ // Dimmed text (subtle) 3442``` 3443 3444### Admin Pages Enhancement 3445 3446**New `getTemplateColors()` function**: 3447- Reads template's style.ini file 3448- Extracts color replacements 3449- Provides colors to all admin tabs 3450- Falls back to sensible defaults 3451 3452**Colors used**: 3453```php 3454bg: __background_site__ 3455bg_alt: __background_alt__ 3456text: __text__ 3457border: __border__ 3458link: __link__ 3459``` 3460 3461**Applied to**: 3462- Tab navigation borders 3463- Tab text colors 3464- All admin sections 3465- Ready for future enhancements 3466 3467### Visual Result 3468 3469**Calendar Header**: 3470``` 3471┌────────────────────┐ 3472│ ‹ February 2026 › │ ← __text_neu__ (dimmed) 3473└────────────────────┘ 3474Subtle and elegant ✓ 3475``` 3476 3477**Admin Navigation**: 3478``` 3479 Manage Events | Update | ⚙️ Config | Themes 3480───────────────────────────────────────────────── 3481Active tab: Green (#00cc07) 3482Inactive tabs: Template text color 3483Border: Template border color 3484``` 3485 3486### Template Integration 3487 3488**Light Template**: 3489```ini 3490__text_neu__ = "#666666" 3491__border__ = "#cccccc" 3492``` 3493**Result**: 3494- Month/Year: Medium gray (subtle) 3495- Admin borders: Light gray 3496- Tab text: Dark gray 3497 3498**Dark Template**: 3499```ini 3500__text_neu__ = "#999999" 3501__border__ = "#555555" 3502``` 3503**Result**: 3504- Month/Year: Light gray (subtle) 3505- Admin borders: Medium gray 3506- Tab text: Bright gray 3507 3508### Benefits 3509 3510**Calendar Frontend**: 3511- Month/Year header more subtle 3512- Better visual hierarchy 3513- Less prominent, more elegant 3514 3515**Admin Backend**: 3516- Uses template colors 3517- Matches wiki admin area 3518- Consistent experience 3519- Professional appearance 3520 3521### Future-Ready 3522 3523The `getTemplateColors()` function is now available for: 3524- ✅ Tab navigation (implemented) 3525- Section backgrounds (ready) 3526- Button colors (ready) 3527- Input fields (ready) 3528- Success/error messages (ready) 3529 3530**Foundation laid for complete admin theming!** 3531 3532## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS 3533 3534### Fixed: Add Event Bar & Section Headers Use Template Colors 3535- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme 3536- **Fixed:** "Today" header uses `__text_neu__` 3537- **Fixed:** "Tomorrow" header uses `__text__` 3538- **Fixed:** "Important Events" header uses `__border__` 3539- **Result:** Perfect template color integration! 3540 3541### All Changes 3542 3543**Add Event Bar (Wiki Theme)**: 3544 3545**Before**: 3546```php 3547background: #3498db // Generic blue 3548``` 3549 3550**After**: 3551```php 3552background: __background_alt__ // Template alternate bg 3553text: __text__ // Template text color 3554hover: __background_neu__ // Template neutral bg 3555``` 3556 3557**Section Headers (Wiki Theme)**: 3558 3559**Before**: 3560```php 3561Today: #ff9800 // Orange 3562Tomorrow: #4caf50 // Green 3563Important Events: #9b59b6 // Purple 3564``` 3565 3566**After**: 3567```php 3568Today: __text_neu__ // Template dimmed text 3569Tomorrow: __text__ // Template primary text 3570Important Events: __border__ // Template border color 3571``` 3572 3573### Visual Result 3574 3575**Wiki Default Theme**: 3576``` 3577Add Event Bar: 3578┌────────────────┐ 3579│ + ADD EVENT │ ← Template alt background 3580└────────────────┘ 3581 3582Sections: 3583━━━━━━━━━━━━━━━━ 3584Today ← Dimmed text color (__text_neu__) 3585• Team Meeting 3586 3587Tomorrow ← Primary text color (__text__) 3588• Code Review 3589 3590Important Events ← Border color (__border__) 3591• Project Deadline 3592``` 3593 3594### Example with DokuWiki Default Template 3595 3596**Template colors**: 3597```ini 3598__background_alt__ = "#e8e8e8" 3599__text__ = "#333333" 3600__text_neu__ = "#666666" 3601__border__ = "#cccccc" 3602``` 3603 3604**Calendar result**: 3605``` 3606Add Event Bar: Light gray (#e8e8e8) 3607Today header: Medium gray (#666666) 3608Tomorrow header: Dark gray (#333333) 3609Important Events header: Border gray (#cccccc) 3610``` 3611 3612### Example with Dark Template 3613 3614**Template colors**: 3615```ini 3616__background_alt__ = "#2d2d2d" 3617__text__ = "#e0e0e0" 3618__text_neu__ = "#999999" 3619__border__ = "#555555" 3620``` 3621 3622**Calendar result**: 3623``` 3624Add Event Bar: Dark gray (#2d2d2d) 3625Today header: Light gray (#999999) 3626Tomorrow header: Bright gray (#e0e0e0) 3627Important Events header: Medium gray (#555555) 3628``` 3629 3630### Perfect Harmony 3631 3632All sidebar elements now use template colors: 3633- ✅ Add Event bar background 3634- ✅ Add Event bar text 3635- ✅ Today section header 3636- ✅ Tomorrow section header 3637- ✅ Important Events header 3638- ✅ Calendar cells 3639- ✅ Grid backgrounds 3640- ✅ All borders 3641 3642**Complete template integration!** 3643 3644## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS 3645 3646### Fixed: Calendar Cells Use Correct Template Color 3647- **Fixed:** Calendar cells now use `__background__` from template 3648- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__` 3649- **Result:** Calendar cells match main content area background! 3650 3651### Color Mapping Update 3652 3653**Before (v5.0.3)**: 3654```php 3655cell_bg: __background_neu__ // Wrong - this is for neutral/alternate 3656``` 3657 3658**After (v5.0.4)**: 3659```php 3660cell_bg: __background__ // Correct - main content background 3661``` 3662 3663### Template Color Usage 3664 3665**Wiki Default theme now uses**: 3666``` 3667__background_site__ → Overall page background 3668__background__ → Calendar cells (main content bg) 3669__background_alt__ → Grid background, headers 3670__background_neu__ → Today cell highlight 3671__text__ → Primary text 3672__text_neu__ → Dimmed text 3673__link__ → Links, bright text 3674__border__ → All borders 3675``` 3676 3677### Visual Result 3678 3679**Before**: 3680``` 3681Calendar with template colors: 3682┌─────┬─────┬─────┐ 3683│ Mon │ Tue │ Wed │ 3684├─────┼─────┼─────┤ 3685│ 8 │ 9 │ 10 │ ← Neutral gray (wrong) 3686└─────┴─────┴─────┘ 3687``` 3688 3689**After**: 3690``` 3691Calendar with template colors: 3692┌─────┬─────┬─────┐ 3693│ Mon │ Tue │ Wed │ 3694├─────┼─────┼─────┤ 3695│ 8 │ 9 │ 10 │ ← White/content bg (correct!) 3696└─────┴─────┴─────┘ 3697``` 3698 3699### Example Template Colors 3700 3701**DokuWiki Default**: 3702```ini 3703__background__ = "#ffffff" 3704``` 3705**Result**: White calendar cells ✓ 3706 3707**Dark Template**: 3708```ini 3709__background__ = "#2d2d2d" 3710``` 3711**Result**: Dark calendar cells ✓ 3712 3713**Custom Template**: 3714```ini 3715__background__ = "#f9f9f9" 3716``` 3717**Result**: Custom color cells ✓ 3718 3719### Perfect Matching 3720 3721Calendar cells now match: 3722- ✅ Main content area background 3723- ✅ Article/page background 3724- ✅ Content box background 3725- ✅ Same as wiki text background 3726 3727**Seamless integration!** 3728 3729## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI 3730 3731### Enhanced: Wiki Default Theme Reads Template Colors 3732- **Added:** Function to read colors from DokuWiki template's style.ini file 3733- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 3734- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 3735- **Uses:** Actual template colors instead of CSS variables 3736- **Result:** Perfect color matching with any DokuWiki template! 3737 3738### How It Works 3739 3740**New Function: `getWikiTemplateColors()`** 3741 37421. **Detects** current DokuWiki template name 37432. **Reads** the template's `style.ini` file 37443. **Parses** color replacements section 37454. **Maps** template colors to calendar theme 37465. **Falls back** to CSS variables if file not found 3747 3748### Colors Read from style.ini 3749 3750**Template color replacements used**: 3751```php 3752__background_site__ → bg, header_bg 3753__background_alt__ → grid_bg, cell_today_bg 3754__background_neu__ → cell_bg 3755__text__ → text_primary 3756__text_neu__ → text_dim 3757__link__ → text_bright 3758__border__ → border, grid_border 3759``` 3760 3761### Example style.ini Mapping 3762 3763**Template style.ini**: 3764```ini 3765[replacements] 3766__background_site__ = "#f8f9fa" 3767__background_alt__ = "#e9ecef" 3768__background_neu__ = "#dee2e6" 3769__text__ = "#212529" 3770__text_neu__ = "#6c757d" 3771__link__ = "#0d6efd" 3772__border__ = "#ced4da" 3773``` 3774 3775**Calendar theme result**: 3776```php 3777bg: #f8f9fa 3778header_bg: #e9ecef 3779grid_bg: #e9ecef 3780cell_bg: #dee2e6 3781text_primary: #212529 3782text_dim: #6c757d 3783text_bright: #0d6efd 3784border: #ced4da 3785grid_border: #ced4da 3786``` 3787 3788### Before vs After 3789 3790**Before (v5.0.2)**: 3791``` 3792Wiki Default theme used: 3793- CSS variables (var(--__background__, #fff)) 3794- Required browser CSS variable support 3795- Fallback to generic colors 3796``` 3797 3798**After (v5.0.3)**: 3799``` 3800Wiki Default theme uses: 3801- Actual colors from template's style.ini 3802- Exact template color values 3803- No CSS variable dependency 3804- Perfect color matching! 3805``` 3806 3807### File Location Priority 3808 3809Checks in order: 38101. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini` 38112. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini` 38123. Falls back to CSS variables if neither found 3813 3814### Benefits 3815 3816**More accurate colors**: 3817- Uses exact template color values ✓ 3818- No CSS variable interpolation ✓ 3819- Consistent across all browsers ✓ 3820 3821**Better compatibility**: 3822- Works with older browsers ✓ 3823- No CSS variable support needed ✓ 3824- Direct color values ✓ 3825 3826**Perfect matching**: 3827- Reads template's actual colors ✓ 3828- Same colors as wiki pages ✓ 3829- Seamless integration ✓ 3830 3831### Template Examples 3832 3833**DokuWiki Default Template**: 3834``` 3835Reads: lib/tpl/dokuwiki/style.ini 3836Gets: Default DokuWiki colors 3837Result: Perfect classic DokuWiki look 3838``` 3839 3840**Bootstrap Template**: 3841``` 3842Reads: lib/tpl/bootstrap3/style.ini 3843Gets: Bootstrap color scheme 3844Result: Perfect Bootstrap integration 3845``` 3846 3847**Custom Template**: 3848``` 3849Reads: conf/tpl/mycustom/style.ini 3850Gets: Your custom colors 3851Result: Perfect custom theme match 3852``` 3853 3854### Fallback Chain 3855 38561. **Try** reading style.ini from template 38572. **If found** → Use exact colors from file 38583. **If not found** → Use CSS variables 38594. **If no CSS vars** → Use fallback colors 3860 3861**Always works, always matches!** ✓ 3862 3863## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL 3864 3865### Fixed: Wiki Default Theme Day Panel Colors 3866- **Fixed:** Day popup panel now uses DokuWiki CSS variables 3867- **Fixed:** Panel background matches wiki theme 3868- **Fixed:** Panel header matches wiki theme 3869- **Fixed:** Border colors use wiki theme 3870- **Fixed:** Text colors use wiki theme 3871- **Result:** Perfect integration with DokuWiki templates! 3872 3873### All Changes 3874 3875**Day Panel Colors (Wiki Default)**: 3876 3877**Before**: 3878```php 3879background: rgba(36, 36, 36, 0.5) // Dark gray (wrong!) 3880header: #3498db // Blue (wrong!) 3881``` 3882 3883**After**: 3884```php 3885background: var(--__background__, #fff) 3886header: var(--__background_alt__, #e8e8e8) 3887header_text: var(--__text__, #333) 3888border: var(--__border__, #ccc) 3889shadow: 0 2px 4px rgba(0, 0, 0, 0.1) 3890``` 3891 3892**Event Colors (Wiki Default)**: 3893```php 3894event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5)) 3895border_color: var(--__border__, rgba(204, 204, 204, 0.3)) 3896bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15) 3897``` 3898 3899### Before vs After 3900 3901**Before (v5.0.1)**: 3902``` 3903Wiki Default - Click Week Cell: 3904┌────────────────┐ 3905│ Monday, Feb 8 │ ← Blue header (wrong) 3906├────────────────┤ 3907│ Team Meeting │ ← Dark gray bg (wrong) 3908│ 2:00 PM │ 3909└────────────────┘ 3910Doesn't match wiki theme 3911``` 3912 3913**After (v5.0.2)**: 3914``` 3915Wiki Default - Click Week Cell: 3916 3917Light Wiki Theme: 3918┌────────────────┐ 3919│ Monday, Feb 8 │ ← Light gray header ✓ 3920├────────────────┤ 3921│ Team Meeting │ ← White bg ✓ 3922│ 2:00 PM │ Dark text ✓ 3923└────────────────┘ 3924 3925Dark Wiki Theme: 3926┌────────────────┐ 3927│ Monday, Feb 8 │ ← Dark header ✓ 3928├────────────────┤ 3929│ Team Meeting │ ← Dark bg ✓ 3930│ 2:00 PM │ Light text ✓ 3931└────────────────┘ 3932 3933Perfectly matches wiki! 3934``` 3935 3936### CSS Variables Used 3937 3938**Wiki Default theme now uses**: 3939- `--__background__` - Main background (panel body) 3940- `--__background_alt__` - Alternate bg (panel header, events) 3941- `--__text__` - Text color (header text) 3942- `--__border__` - Border color (panel border, event borders) 3943 3944**With fallbacks**: 3945```css 3946var(--__background__, #fff) /* white fallback */ 3947var(--__background_alt__, #e8e8e8) /* light gray fallback */ 3948var(--__text__, #333) /* dark text fallback */ 3949var(--__border__, #ccc) /* gray border fallback */ 3950``` 3951 3952### Perfect Adaptation 3953 3954**Light Templates**: 3955- Light panel backgrounds ✓ 3956- Dark text ✓ 3957- Subtle borders ✓ 3958- Clean appearance ✓ 3959 3960**Dark Templates**: 3961- Dark panel backgrounds ✓ 3962- Light text ✓ 3963- Visible borders ✓ 3964- Perfect contrast ✓ 3965 3966**Custom Templates**: 3967- Uses template's CSS variables ✓ 3968- Automatic adaptation ✓ 3969- Seamless integration ✓ 3970 3971### Now Truly Adaptive 3972 3973Wiki Default theme now properly uses DokuWiki CSS variables for: 3974- ✅ Calendar grid 3975- ✅ Sidebar widget 3976- ✅ Event list 3977- ✅ **Day panel** ← v5.0.2! 3978- ✅ All backgrounds 3979- ✅ All text 3980- ✅ All borders 3981 3982**Complete wiki integration!** 3983 3984## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS 3985 3986### Enhanced: Time Conflict Tooltips Now Themed 3987- **Fixed:** Conflict tooltips now match calendar theme 3988- **Added:** Theme-aware background, border, text colors 3989- **Added:** Theme-aware shadow effects 3990- **Result:** Complete visual consistency! 3991 3992### Tooltip Theming 3993 3994**Now uses theme colors for**: 3995- Background: Theme background color 3996- Border: Theme border color 3997- Header text: Theme primary text color 3998- Item text: Theme dim text color 3999- Shadow: Theme shadow color 4000 4001### Before vs After 4002 4003**Before (v5.0.0)**: 4004``` 4005Hover ⚠️ badge: 4006┌─────────────────┐ 4007│ ⚠️ Time Conflicts│ ← Default colors 4008│ • Event A │ 4009│ • Event B │ 4010└─────────────────┘ 4011``` 4012 4013**After (v5.0.1)**: 4014``` 4015Matrix Theme: 4016┌─────────────────┐ 4017│ ⚠️ Time Conflicts│ ← Green header 4018│ • Event A │ ← Green text 4019│ • Event B │ Dark green bg 4020└─────────────────┘ 4021 4022Purple Theme: 4023┌─────────────────┐ 4024│ ⚠️ Time Conflicts│ ← Purple header 4025│ • Event A │ ← Purple text 4026│ • Event B │ Dark purple bg 4027└─────────────────┘ 4028 4029Professional Theme: 4030┌─────────────────┐ 4031│ ⚠️ Time Conflicts│ ← Blue header 4032│ • Event A │ ← Dark text 4033│ • Event B │ Light bg 4034└─────────────────┘ 4035 4036Pink Theme: 4037┌─────────────────┐ 4038│ ⚠️ Time Conflicts│ ← Pink header ✨ 4039│ • Event A │ ← Pink text 4040│ • Event B │ Dark pink bg 4041└─────────────────┘ 4042 4043Wiki Default: 4044┌─────────────────┐ 4045│ ⚠️ Time Conflicts│ ← Adapts to wiki 4046│ • Event A │ ← Wiki colors 4047│ • Event B │ 4048└─────────────────┘ 4049``` 4050 4051### Now 100% Complete 4052 4053**Every tooltip themed**: 4054- ✅ Conflict tooltips 4055- ✅ All other tooltips (if any) 4056- ✅ Perfect consistency 4057 4058**Absolute perfection!** ✨ 4059 4060## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION 4061 4062### Major Milestone: Version 5.0 4063 4064This 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. 4065 4066### Complete Feature Set 4067 4068**5 Beautiful Themes**: 4069- Matrix Edition (Green with glow) 4070- Purple Dream (Elegant purple) 4071- Professional Blue (Clean and modern) 4072- Pink Bling (Maximum sparkle) 4073- Wiki Default (Auto-adapts to your DokuWiki theme) 4074 4075**100% Theme Coverage**: 4076- ✅ Calendar grid and cells 4077- ✅ Event boxes and borders 4078- ✅ Sidebar widget 4079- ✅ Event list panel 4080- ✅ Search functionality 4081- ✅ Edit/Add dialogs (complete) 4082- ✅ Day popup dialogs 4083- ✅ Month picker 4084- ✅ All text (primary, dim, bright) 4085- ✅ All buttons 4086- ✅ All inputs and forms 4087- ✅ All checkboxes 4088- ✅ All borders 4089- ✅ All badges and labels 4090- ✅ Event highlight effects 4091 4092**Perfect Visual Consistency**: 4093- No white pixels anywhere 4094- No unthemed elements 4095- No default colors 4096- Complete visual unity 4097 4098### Major Improvements in v5.0 4099 41001. **Complete Dialog Theming** (v4.8.5-4.8.7) 4101 - Edit event dialog fully themed 4102 - Day popup dialog fully themed 4103 - All form inputs themed 4104 - All checkboxes themed 4105 - All buttons themed 4106 41072. **Event Box Border Perfection** (v4.8.6) 4108 - All 4 borders themed (top, right, bottom, left) 4109 - Sidebar event dividers themed 4110 - Past Events toggle border themed 4111 41123. **Checkbox Field Borders** (v4.9.0) 4113 - Repeating Event section border themed 4114 - Task checkbox section border themed 4115 41164. **Wiki Default Theme** (v4.10.0) 4117 - New 5th theme 4118 - Uses DokuWiki CSS variables 4119 - Auto-adapts to any wiki template 4120 - Perfect for seamless integration 4121 41225. **Clean Text Appearance** (v4.11.0) 4123 - Removed text glow from Matrix 4124 - Removed text glow from Purple 4125 - Removed text glow from Professional 4126 - Removed text glow from Wiki Default 4127 - Kept text glow on Pink Bling only 4128 41296. **Event Highlight Effects** (v4.12.0-4.12.1) 4130 - Theme-aware highlight glow 4131 - Click event bar → event glows 4132 - 3-second themed glow effect 4133 - Smooth animations 4134 4135### See RELEASE_NOTES.md for Complete Details 4136 4137For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release. 4138 4139## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION 4140 4141### Fixed: Event Highlight Now Working 4142- **Fixed:** Used setProperty() to properly apply !important styles 4143- **Added:** Console logging for debugging 4144- **Fixed:** Proper style application with important flag 4145- **Result:** Highlight glow now works correctly! 4146 4147### Technical Fix 4148 4149**Before (not working)**: 4150```javascript 4151eventItem.style.background = color + ' !important'; // Doesn't work 4152``` 4153 4154**After (working)**: 4155```javascript 4156eventItem.style.setProperty('background', color, 'important'); // Works! 4157``` 4158 4159### Added Debug Logging 4160 4161Console now shows: 4162- "Highlighting event: [calId] [eventId] [date]" 4163- "Found event item: [element]" 4164- "Theme: [theme name]" 4165- "Highlight colors: [bg] [shadow]" 4166- "Applied highlight styles" 4167- "Removing highlight" (after 3 seconds) 4168 4169### Now Working 4170 4171Click any event bar → Event glows with theme colors ✓ 4172 4173## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW 4174 4175### ✨ Enhanced: Event Click Highlight Now Theme-Aware 4176- **Fixed:** Restored event highlight glow when clicking calendar bars 4177- **Improved:** Highlight now matches each theme's colors 4178- **Added:** Stronger glow effect for better visibility 4179- **Duration:** 3 seconds with smooth fade 4180- **Result:** Beautiful themed highlights for all themes! 4181 4182### How It Works 4183 4184When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow: 4185 4186**Matrix Theme**: 4187```javascript 4188Background: Darker green (#1a3d1a) 4189Glow: Double green glow (0 0 20px + 0 0 40px) 4190Color: rgba(0, 204, 7, 0.8) 4191``` 4192 4193**Purple Theme**: 4194```javascript 4195Background: Darker purple (#3d2b4d) 4196Glow: Double purple glow 4197Color: rgba(155, 89, 182, 0.8) 4198``` 4199 4200**Professional Theme**: 4201```javascript 4202Background: Light blue (#e3f2fd) 4203Glow: Single blue glow 4204Color: rgba(74, 144, 226, 0.4) 4205``` 4206 4207**Pink Theme**: 4208```javascript 4209Background: Darker pink (#3d2030) 4210Glow: Double pink glow ✨ 4211Color: rgba(255, 20, 147, 0.8) 4212``` 4213 4214**Wiki Theme**: 4215```javascript 4216Background: var(--__background_neu__) 4217Glow: Blue glow (adapts to wiki) 4218Color: rgba(43, 115, 183, 0.4) 4219``` 4220 4221### Visual Examples 4222 4223**Matrix - Click Event**: 4224``` 4225Calendar: 4226┌─────────────┐ 4227│ 2:00 PM │ ← Click this bar 4228└─────────────┘ 4229 4230Event List: 4231╔═════════════════════╗ 4232║ Team Meeting ║ ← GLOWS GREEN 4233║ 2:00 PM ║ for 3 seconds 4234╚═════════════════════╝ 4235 ↑↑↑ Strong green glow ↑↑↑ 4236``` 4237 4238**Purple - Click Event**: 4239``` 4240Calendar: 4241┌─────────────┐ 4242│ 4:00 PM │ ← Click 4243└─────────────┘ 4244 4245Event List: 4246╔═════════════════════╗ 4247║ Code Review ║ ← GLOWS PURPLE 4248║ 4:00 PM ║ for 3 seconds 4249╚═════════════════════╝ 4250 ↑↑↑ Strong purple glow ↑↑↑ 4251``` 4252 4253**Pink - Click Event**: 4254``` 4255Calendar: 4256┌─────────────┐ 4257│ 1:00 PM │ ← Click 4258└─────────────┘ 4259 4260Event List: 4261╔═════════════════════╗ 4262║ Lunch Date ║ ← GLOWS PINK 4263║ 1:00 PM ✨ ║ for 3 seconds 4264╚═════════════════════╝ 4265 ↑↑↑ MAXIMUM SPARKLE ↑↑↑ 4266``` 4267 4268### Glow Specifications 4269 4270**Matrix**: 4271- Background: Dark green 4272- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)` 4273- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)` 4274- Effect: Strong green pulse 4275 4276**Purple**: 4277- Background: Dark purple 4278- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)` 4279- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)` 4280- Effect: Strong purple pulse 4281 4282**Professional**: 4283- Background: Light blue 4284- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)` 4285- Effect: Subtle blue glow 4286 4287**Pink**: 4288- Background: Dark pink 4289- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)` 4290- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)` 4291- Effect: MAXIMUM SPARKLE ✨ 4292 4293**Wiki**: 4294- Background: Theme neutral color 4295- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)` 4296- Effect: Adapts to wiki theme 4297 4298### User Experience 4299 4300**Click event bar** → Event highlights with themed glow 4301**Auto-scroll** → Event scrolls into view smoothly 4302**3 second glow** → Fade out after 3 seconds 4303**Smooth transition** → 0.3s ease-in-out 4304 4305### Perfect for Finding Events 4306 4307**Large event lists**: Quickly locate the clicked event ✓ 4308**Visual feedback**: Know which event you clicked ✓ 4309**Theme consistency**: Matches your chosen theme ✓ 4310**Smooth animation**: Professional appearance ✓ 4311 4312### All Themes Covered 4313 4314- ✅ Matrix: Green glow 4315- ✅ Purple: Purple glow 4316- ✅ Professional: Blue glow 4317- ✅ Pink: Maximum pink sparkle 4318- ✅ Wiki: Adaptive glow 4319 4320**Click any event bar and watch it glow!** ✨ 4321 4322## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES 4323 4324### Changed: Text Glow Now Pink-Only 4325- **Removed:** Text shadow/glow from Matrix theme 4326- **Removed:** Text shadow/glow from Purple theme 4327- **Removed:** Text shadow/glow from Professional theme (already had none) 4328- **Removed:** Text shadow/glow from Wiki Default theme 4329- **Kept:** Text shadow/glow ONLY on Pink Bling theme 4330- **Result:** Cleaner look for Matrix, Purple, and Wiki themes! 4331 4332### All Changes 4333 4334**Before (Matrix, Purple)**: 4335```css 4336text-shadow: 0 0 2px $text_color; /* Glow effect */ 4337``` 4338 4339**After (Matrix, Purple, Professional, Wiki)**: 4340```css 4341text-shadow: none; /* Clean, no glow */ 4342``` 4343 4344**Pink Bling (unchanged)**: 4345```css 4346text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */ 4347``` 4348 4349### Text Shadow Removed From 4350 4351**Sidebar day numbers**: No glow ✓ 4352**Event titles**: No glow ✓ 4353**Event dates**: No glow ✓ 4354**Add Event button**: No glow ✓ 4355**Day popup events**: No glow ✓ 4356 4357### Before vs After 4358 4359**BEFORE (Matrix)**: 4360``` 4361Event Title ✨ ← Glowing green text 43622:00 PM ✨ ← Glowing text 4363``` 4364 4365**AFTER (Matrix)**: 4366``` 4367Event Title ← Clean green text 43682:00 PM ← Clean text 4369``` 4370 4371**Pink Bling (Still Glows)**: 4372``` 4373Event Title ✨ ← Still glowing! 43742:00 PM ✨ ← Maximum sparkle! 4375``` 4376 4377### Theme Appearances 4378 4379** Matrix Edition**: 4380- Clean green text 4381- No glow effects 4382- Professional appearance 4383- Still has border glow 4384 4385** Purple Dream**: 4386- Clean purple text 4387- No glow effects 4388- Elegant appearance 4389- Still has border glow 4390 4391** Professional Blue**: 4392- Clean text (unchanged) 4393- No glow effects 4394- Modern appearance 4395 4396** Pink Bling**: 4397- Glowing pink text ✨ 4398- Maximum glow effects 4399- Sparkle everywhere! 4400- All the bling! 4401 4402** Wiki Default**: 4403- Clean text 4404- No glow effects 4405- Matches wiki theme 4406 4407### Glow Effects Remaining 4408 4409**Border/box glow**: Still present on all themes ✓ 4410**Pink text glow**: Only on Pink Bling ✓ 4411**Shadow effects**: Still on buttons/boxes ✓ 4412 4413**Only TEXT glow removed from non-pink themes!** 4414 4415### Result 4416 4417**Cleaner, more professional look** for: 4418- Matrix ✓ 4419- Purple ✓ 4420- Professional ✓ 4421- Wiki Default ✓ 4422 4423**Maximum sparkle** for: 4424- Pink Bling ✨✓ 4425 4426**Best of both worlds!** 4427 4428## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME 4429 4430### New: Wiki Default Theme 4431- **Added:** 5th theme that automatically matches your DokuWiki template 4432- **Uses:** CSS variables from your wiki theme 4433- **Adapts:** Automatically works with light and dark themes 4434- **Perfect:** Seamless integration with any DokuWiki template 4435 4436### How It Works 4437 4438**Wiki theme uses DokuWiki CSS variables**: 4439```css 4440bg: var(--__background_site__, #f5f5f5) 4441border: var(--__border__, #ccc) 4442text_primary: var(--__text__, #333) 4443text_bright: var(--__link__, #2b73b7) 4444text_dim: var(--__text_neu__, #666) 4445cell_bg: var(--__background__, #fff) 4446grid_border: var(--__border__, #ccc) 4447``` 4448 4449**With fallbacks for older DokuWiki versions**: 4450- If CSS variables exist → Use them ✓ 4451- If not available → Use fallback values ✓ 4452 4453### All 5 Themes 4454 4455**1. Matrix Edition** (Default) 4456- Dark green with neon glow 4457- Matrix-style effects 4458- Original theme 4459 4460**2. Purple Dream** 4461- Rich purple with violet accents 4462- Elegant and sophisticated 4463- Soft glow effects 4464 4465**3. Professional Blue** 4466- Clean blue and grey 4467- Modern professional 4468- No glow effects 4469 4470**4. Pink Bling** 4471- Glamorous hot pink 4472- Maximum sparkle ✨ 4473- Hearts and diamonds 4474 4475**5. Wiki Default** ← NEW! 4476- Matches your wiki template 4477- Auto-adapts to light/dark 4478- Perfect integration 4479 4480### Examples 4481 4482**Light Wiki Template**: 4483``` 4484Wiki Default theme shows: 4485- Light backgrounds (#f5f5f5) 4486- Dark text (#333) 4487- Light inputs (#fff) 4488- Gray borders (#ccc) 4489 4490Matches perfectly! ✓ 4491``` 4492 4493**Dark Wiki Template**: 4494``` 4495Wiki Default theme shows: 4496- Dark backgrounds (from template) 4497- Light text (from template) 4498- Dark inputs (from template) 4499- Dark borders (from template) 4500 4501Matches perfectly! ✓ 4502``` 4503 4504**Bootstrap Template**: 4505``` 4506Uses Bootstrap's colors 4507Matches perfectly! ✓ 4508``` 4509 4510**Material Template**: 4511``` 4512Uses Material's colors 4513Matches perfectly! ✓ 4514``` 4515 4516### CSS Variables Used 4517 4518**DokuWiki provides**: 4519- `--__background_site__`: Page background 4520- `--__background_alt__`: Section backgrounds 4521- `--__background__`: Content backgrounds 4522- `--__text__`: Primary text color 4523- `--__link__`: Link color 4524- `--__text_neu__`: Dimmed text 4525- `--__border__`: Border color 4526- `--__background_neu__`: Neutral background 4527 4528**All with fallbacks**: 4529```css 4530var(--__background_site__, #f5f5f5) 4531/* Falls back to light gray if variable doesn't exist */ 4532``` 4533 4534### Perfect for Every Template 4535 4536**Custom templates**: Automatically adapts ✓ 4537**Light themes**: Perfect match ✓ 4538**Dark themes**: Perfect match ✓ 4539**Any DokuWiki version**: Works with fallbacks ✓ 4540 4541### Complete Theme Collection 4542 4543Now with **5 gorgeous themes**: 4544- 3 dark themes (Matrix, Purple, Pink) 4545- 1 light theme (Professional) 4546- 1 adaptive theme (Wiki Default) ← NEW! 4547 4548**Something for everyone!** 4549 4550## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS 4551 4552### Fixed: Checkbox Field Borders Themed 4553- **Fixed:** Added border-color to checkbox field divs 4554- **Fixed:** Repeating Event section border 4555- **Fixed:** Task checkbox section border 4556- **Result:** No white borders around checkboxes! 4557 4558### Changes 4559 4560**Checkbox Field Border Styling**: 4561 4562**Before**: 4563```html 4564<div class="form-field-checkbox" 4565 style="background: $bg !important;"> 4566<!-- Border shows white ✗ --> 4567``` 4568 4569**After**: 4570```php 4571<div class="form-field-checkbox" 4572 style="background: $bg !important; 4573 border-color: $grid_border !important;"> 4574<!-- Border themed ✓ --> 4575``` 4576 4577### Before vs After 4578 4579**BEFORE (v4.8.8)**: 4580``` 4581Edit Dialog: 4582┌──────────────────┐ 4583│ ☑ Repeating ║│ ← White border ✗ 4584└──────────────────┘ 4585┌──────────────────┐ 4586│ ☑ Task checkbox ║│ ← White border ✗ 4587└──────────────────┘ 4588``` 4589 4590**AFTER (v4.9.0)**: 4591``` 4592Matrix Edit Dialog: 4593┌──────────────────┐ 4594│ ☑ Repeating │ ← Green border ✓ 4595└──────────────────┘ 4596┌──────────────────┐ 4597│ ☑ Task checkbox │ ← Green border ✓ 4598└──────────────────┘ 4599``` 4600 4601### ABSOLUTE PERFECTION ACHIEVED 4602 4603**Every element themed**: 4604- ✅ All inputs 4605- ✅ All labels 4606- ✅ All sections 4607- ✅ **Checkbox field borders** ← v4.9.0! 4608- ✅ All buttons 4609- ✅ All checkboxes 4610- ✅ No white anywhere 4611 4612**100% COMPLETE!** ✨ 4613 4614## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4615 4616### Fixed: Checkbox Field Borders Themed 4617- **Fixed:** Added border-color to checkbox field divs 4618- **Fixed:** Repeating Event section border 4619- **Fixed:** Task checkbox section border 4620- **Result:** No white borders around checkboxes! 4621 4622### Fixed: Admin Sections Respect Wiki Theme 4623- **Fixed:** All admin backgrounds use CSS variables 4624- **Fixed:** Text colors use wiki text color 4625- **Fixed:** Borders use wiki border color 4626- **Result:** Admin matches wiki theme perfectly! 4627 4628### All Changes 4629 4630**1. Checkbox Field Border Styling**: 4631 4632**Before**: 4633```html 4634<div class="form-field-checkbox" 4635 style="background: $bg !important;"> 4636<!-- Border shows white ✗ --> 4637``` 4638 4639**After**: 4640```php 4641<div class="form-field-checkbox" 4642 style="background: $bg !important; 4643 border-color: $grid_border !important;"> 4644<!-- Border themed ✓ --> 4645``` 4646 4647**2. Admin CSS Variables**: 4648 4649**Added CSS variables for wiki theme compatibility**: 4650```css 4651.calendar-admin-wrapper { 4652 background: var(--__background_site__, #f5f5f5); 4653 color: var(--__text__, #333); 4654} 4655.calendar-admin-section { 4656 background: var(--__background_alt__, #fafafa); 4657} 4658.calendar-admin-input { 4659 background: var(--__background__, #fff); 4660 color: var(--__text__, #333); 4661} 4662``` 4663 4664**Replaced hardcoded colors**: 4665```php 4666// Before: 4667background: #f9f9f9 4668background: white 4669color: #333 4670border: 1px solid #ddd 4671 4672// After: 4673background: var(--__background_alt__, #f9f9f9) 4674background: var(--__background__, #fff) 4675color: var(--__text__, #333) 4676border: 1px solid var(--__border__, #ddd) 4677``` 4678 4679### Before vs After 4680 4681**BEFORE (v4.8.8)**: 4682``` 4683Edit Dialog: 4684┌──────────────────┐ 4685│ ☑ Repeating ║│ ← White border ✗ 4686└──────────────────┘ 4687┌──────────────────┐ 4688│ ☑ Task checkbox ║│ ← White border ✗ 4689└──────────────────┘ 4690 4691Admin Page (Dark Wiki Theme): 4692┌──────────────────┐ 4693│ Light sections │ ← White boxes ✗ 4694│ Light inputs │ ← Doesn't match ✗ 4695└──────────────────┘ 4696``` 4697 4698**AFTER (v4.8.9)**: 4699``` 4700Matrix Edit Dialog: 4701┌──────────────────┐ 4702│ ☑ Repeating │ ← Green border ✓ 4703└──────────────────┘ 4704┌──────────────────┐ 4705│ ☑ Task checkbox │ ← Green border ✓ 4706└──────────────────┘ 4707 4708Admin (Dark Wiki Theme): 4709┌──────────────────┐ 4710│ Dark sections │ ← Matches wiki ✓ 4711│ Dark inputs │ ← Perfect match ✓ 4712└──────────────────┘ 4713``` 4714 4715### Admin Theme Examples 4716 4717**Light Wiki Theme**: 4718``` 4719Admin page backgrounds: Light 4720Section boxes: Light gray 4721Inputs: White 4722Borders: Gray 4723Text: Dark 4724 4725Perfect match! ✓ 4726``` 4727 4728**Dark Wiki Theme**: 4729``` 4730Admin page backgrounds: Dark 4731Section boxes: Darker gray 4732Inputs: Dark 4733Borders: Dark gray 4734Text: Light 4735 4736Perfect match! ✓ 4737``` 4738 4739**DokuWiki Default**: 4740``` 4741Uses wiki's CSS variables 4742Automatically adapts 4743Always matches! ✓ 4744``` 4745 4746### Complete Coverage 4747 4748**Edit Dialog**: 4749- ✅ All inputs themed 4750- ✅ All labels themed 4751- ✅ All sections themed 4752- ✅ **Checkbox borders** ← v4.8.9! 4753- ✅ All buttons themed 4754- ✅ No white anywhere 4755 4756**Admin Interface**: 4757- ✅ **Tab navigation** ← v4.8.9! 4758- ✅ **Section boxes** ← v4.8.9! 4759- ✅ **Input fields** ← v4.8.9! 4760- ✅ **Text colors** ← v4.8.9! 4761- ✅ **Borders** ← v4.8.9! 4762- ✅ All tabs (Manage, Update, Outlook, Themes) 4763 4764### CSS Variables Used 4765 4766**DokuWiki provides these**: 4767- `--__background_site__`: Page background 4768- `--__background_alt__`: Alternate background 4769- `--__background__`: Primary background (inputs) 4770- `--__text__`: Text color 4771- `--__border__`: Border color 4772 4773**Fallbacks provided for older DokuWiki**: 4774```css 4775var(--__background_site__, #f5f5f5) 4776var(--__background_alt__, #fafafa) 4777var(--__background__, #fff) 4778var(--__text__, #333) 4779var(--__border__, #ddd) 4780``` 4781 4782### Perfect Adaptation 4783 4784**Admin now adapts to ANY wiki theme**: 4785- Light themes → Light admin ✓ 4786- Dark themes → Dark admin ✓ 4787- Custom themes → Matches perfectly ✓ 4788- No hardcoded colors ✓ 4789 4790**Calendar themes still work**: 4791- Matrix, Purple, Professional, Pink ✓ 4792- Independent from wiki theme ✓ 4793- Admin respects wiki ✓ 4794- Calendar respects calendar theme ✓ 4795 4796### FINAL PERFECTION 4797 4798**Frontend (Calendar)**: 4799- Complete theming ✓ 4800- 4 beautiful themes ✓ 4801- Every pixel themed ✓ 4802 4803**Backend (Admin)**: 4804- Respects wiki theme ✓ 4805- Works with any theme ✓ 4806- Perfect compatibility ✓ 4807 4808**ABSOLUTELY EVERYTHING THEMED!** ✨ 4809 4810## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS 4811 4812### Fixed: Task Checkboxes Now Fully Themed 4813- **Fixed:** Added background-color and border inline 4814- **Fixed:** Both PHP and JavaScript versions 4815- **Result:** No white checkboxes! 4816 4817### Fixed: Past Events Toggle Border 4818- **Fixed:** Added !important to border styling 4819- **Fixed:** Explicit top and bottom borders 4820- **Result:** No white line under toggle! 4821 4822### Fixed: Form Field Section Backgrounds 4823- **Fixed:** All form-field and form-row-group backgrounds 4824- **Fixed:** Every section in edit dialog 4825- **Result:** No white sections anywhere! 4826 4827### All Changes 4828 4829**1. Task Checkbox Styling**: 4830 4831**Before**: 4832```php 4833style="accent-color: $border !important;" 4834<!-- Only accent, background still white ✗ --> 4835``` 4836 4837**After**: 4838```php 4839style="accent-color: $border !important; 4840 background-color: $cell_bg !important; 4841 border: 2px solid $grid_border !important;" 4842<!-- Full theming ✓ --> 4843``` 4844 4845**2. Past Events Toggle Border**: 4846 4847**Before**: 4848```php 4849style="border-color: $grid_border;" 4850<!-- No !important, CSS overrides ✗ --> 4851``` 4852 4853**After**: 4854```php 4855style="border-color: $grid_border !important; 4856 border-top: 1px solid $grid_border !important; 4857 border-bottom: 1px solid $grid_border !important;" 4858<!-- Cannot be overridden ✓ --> 4859``` 4860 4861**3. Form Field Backgrounds**: 4862 4863**Before**: 4864```html 4865<div class="form-field"> 4866<div class="form-row-group"> 4867<!-- No background, shows white ✗ --> 4868``` 4869 4870**After**: 4871```php 4872<div class="form-field" style="background: $bg !important;"> 4873<div class="form-row-group" style="background: $bg !important;"> 4874<!-- Fully themed ✓ --> 4875``` 4876 4877### Before vs After 4878 4879**BEFORE (v4.8.7)**: 4880``` 4881Event: 4882□ Task checkbox ← White checkbox ✗ 4883 4884Past Events 4885▶ Past Events (3) ← White line below ✗ 4886───────────────── 4887 4888Edit Dialog: 4889┌──────────────┐ 4890│ Form fields │ ← White sections ✗ 4891└──────────────┘ 4892``` 4893 4894**AFTER (v4.8.8)**: 4895``` 4896Matrix Event: 4897☑ Task checkbox ← Green checkbox ✓ 4898 4899Past Events 4900▶ Past Events (3) ← Green border ✓ 4901───────────────── 4902 4903Matrix Edit Dialog: 4904┌──────────────┐ 4905│ Form fields │ ← Dark green ✓ 4906└──────────────┘ 4907``` 4908 4909### Complete Examples 4910 4911**Matrix Theme**: 4912``` 4913Task Checkbox: 4914☑ Checked → Green checkmark, green bg 4915☐ Unchecked → Green border, dark green bg ✓ 4916 4917Past Events Toggle: 4918▶ Past Events (3) 4919─────────────────── Green border ✓ 4920 4921Edit Dialog: 4922All sections dark green ✓ 4923No white anywhere ✓ 4924``` 4925 4926**Purple Theme**: 4927``` 4928Task Checkbox: 4929☑ Checked → Purple checkmark, purple bg 4930☐ Unchecked → Purple border, dark purple bg ✓ 4931 4932Past Events Toggle: 4933▶ Past Events (3) 4934─────────────────── Purple border ✓ 4935 4936Edit Dialog: 4937All sections dark purple ✓ 4938``` 4939 4940**Professional Theme**: 4941``` 4942Task Checkbox: 4943☑ Checked → Blue checkmark, white bg 4944☐ Unchecked → Gray border, white bg ✓ 4945 4946Past Events Toggle: 4947▶ Past Events (3) 4948─────────────────── Gray border ✓ 4949 4950Edit Dialog: 4951All sections light ✓ 4952``` 4953 4954**Pink Theme**: 4955``` 4956Task Checkbox: 4957☑ Checked → Pink checkmark, pink bg ✨ 4958☐ Unchecked → Pink border, dark pink bg ✓ 4959 4960Past Events Toggle: 4961▶ Past Events (3) 4962─────────────────── Pink border 4963 4964Edit Dialog: 4965All sections dark pink ✓ 4966``` 4967 4968### Checkbox Visual 4969 4970**Matrix - Unchecked**: 4971``` 4972┌─────┐ 4973│ │ ← Dark green background 4974│ │ Green border 4975└─────┘ 4976``` 4977 4978**Matrix - Checked**: 4979``` 4980┌─────┐ 4981│ ✓ │ ← Dark green background 4982│ │ Green checkmark 4983└─────┘ 4984``` 4985 4986### Past Events Border 4987 4988**Before**: 4989``` 4990▶ Past Events (3) 4991─────────────────── White line ✗ 4992``` 4993 4994**After**: 4995``` 4996▶ Past Events (3) 4997─────────────────── Green line ✓ (Matrix) 4998 Purple line ✓ (Purple) 4999 Gray line ✓ (Professional) 5000 Pink line ✓ (Pink) 5001``` 5002 5003### Form Field Coverage 5004 5005**All sections themed**: 5006- ✅ Title field 5007- ✅ Namespace field 5008- ✅ Description field 5009- ✅ **Date row** ← v4.8.8! 5010- ✅ **Checkbox sections** ← v4.8.8! 5011- ✅ **Recurring options** ← v4.8.8! 5012- ✅ **Time row** ← v4.8.8! 5013- ✅ **Color row** ← v4.8.8! 5014- ✅ Button footer 5015 5016**Every div has background!** ✓ 5017 5018### ABSOLUTE PERFECTION 5019 5020**Not a single white pixel**: 5021- ✅ No white checkboxes 5022- ✅ No white borders 5023- ✅ No white backgrounds 5024- ✅ No white sections 5025- ✅ No white lines 5026- ✅ No white anything 5027 5028**100% PERFECT THEMING!** ✨ 5029 5030## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING 5031 5032### Fixed: Checkbox Section Backgrounds Themed 5033- **Fixed:** Repeating Event section background 5034- **Fixed:** Task checkbox section background 5035- **Result:** No white backgrounds in dialog! 5036 5037### Fixed: Unchecked Task Checkboxes Themed 5038- **Fixed:** Added CSS for checkbox backgrounds 5039- **Fixed:** Unchecked boxes show theme colors 5040- **Result:** No white checkboxes! 5041 5042### Fixed: Day Popup Dialog Fully Themed 5043- **Fixed:** Popup container, header, body themed 5044- **Fixed:** Event items in popup themed 5045- **Fixed:** Add Event button themed 5046- **Fixed:** Footer section themed 5047- **Result:** Perfect popup theming! 5048 5049### All Changes 5050 5051**1. Checkbox Section Backgrounds**: 5052 5053**Before**: 5054```html 5055<div class="form-field-checkbox"> 5056<!-- White background ✗ --> 5057``` 5058 5059**After**: 5060```php 5061<div class="form-field-checkbox" 5062 style="background: $bg !important;"> 5063<!-- Themed ✓ --> 5064``` 5065 5066**2. Checkbox Background CSS**: 5067 5068**Added to style block**: 5069```css 5070.task-checkbox { 5071 background-color: $cell_bg !important; 5072 border: 2px solid $grid_border !important; 5073} 5074``` 5075 5076**3. Day Popup Theming**: 5077 5078**Container**: 5079```javascript 5080style="background: $bg !important; 5081 border: 2px solid $border !important; 5082 box-shadow: 0 0 20px $shadow !important;" 5083``` 5084 5085**Header**: 5086```javascript 5087style="background: $header_bg !important; 5088 color: $text_primary !important; 5089 border-bottom: 1px solid $border !important;" 5090``` 5091 5092**Footer**: 5093```javascript 5094style="background: $bg !important; 5095 border-top: 1px solid $grid_border !important;" 5096``` 5097 5098**Add Event Button**: 5099```javascript 5100style="background: $border !important; 5101 color: $bg !important; 5102 border-color: $border !important;" 5103``` 5104 5105**Event Items**: 5106```javascript 5107style="background: $cell_bg !important; 5108 border: 1px solid $grid_border !important;" 5109``` 5110 5111### Before vs After 5112 5113**BEFORE (v4.8.6)**: 5114``` 5115Edit Dialog: 5116┌──────────────────┐ 5117│ ☑ Repeating Event│ ← White background ✗ 5118├──────────────────┤ 5119│ ☑ Task checkbox │ ← White background ✗ 5120└──────────────────┘ 5121 5122Day Popup: 5123┌──────────────────┐ 5124│ Monday, Feb 8 │ ← White ✗ 5125├──────────────────┤ 5126│ Team Meeting │ ← White ✗ 5127│ 2:00 PM │ 5128├──────────────────┤ 5129│ [+ Add Event] │ ← White ✗ 5130└──────────────────┘ 5131 5132Task checkbox: ☐ ← White ✗ 5133``` 5134 5135**AFTER (v4.8.7)**: 5136``` 5137Edit Dialog (Matrix): 5138┌──────────────────┐ 5139│ ☑ Repeating Event│ ← Dark green ✓ 5140├──────────────────┤ 5141│ ☑ Task checkbox │ ← Dark green ✓ 5142└──────────────────┘ 5143 5144Day Popup (Matrix): 5145┌──────────────────┐ 5146│ Monday, Feb 8 │ ← Dark green ✓ 5147├──────────────────┤ 5148│ Team Meeting │ ← Dark green ✓ 5149│ 2:00 PM │ 5150├──────────────────┤ 5151│ [+ Add Event] │ ← Green button ✓ 5152└──────────────────┘ 5153 5154Task checkbox: ☑ ← Green ✓ 5155``` 5156 5157### Complete Examples 5158 5159**Matrix Dialog**: 5160``` 5161┌──────────────────────────┐ 5162│ ✏️ Edit Event │ 5163├──────────────────────────┤ 5164│ Title: [_________] │ 5165│ Date: [__________] │ 5166│ │ 5167│ ☑ Repeating Event │ ← Dark green bg 5168├──────────────────────────┤ 5169│ ☑ Task checkbox │ ← Dark green bg 5170├──────────────────────────┤ 5171│ [Cancel] [ Save] │ 5172└──────────────────────────┘ 5173 5174All sections themed! ✓ 5175``` 5176 5177**Matrix Day Popup**: 5178``` 5179┌──────────────────────────┐ 5180│ Monday, February 8, 2026 │ ← Green header 5181├──────────────────────────┤ 5182│ ┌──────────────────────┐ │ 5183│ │ Team Meeting │ │ ← Dark green 5184│ │ 2:00 PM │ │ 5185│ └──────────────────────┘ │ 5186│ ┌──────────────────────┐ │ 5187│ │ Code Review │ │ ← Dark green 5188│ │ 4:00 PM │ │ 5189│ └──────────────────────┘ │ 5190├──────────────────────────┤ 5191│ [+ Add Event] │ ← Green button 5192└──────────────────────────┘ 5193``` 5194 5195**Purple Day Popup**: 5196``` 5197┌──────────────────────────┐ 5198│ Monday, February 8, 2026 │ ← Purple header 5199├──────────────────────────┤ 5200│ ┌──────────────────────┐ │ 5201│ │ Team Meeting │ │ ← Dark purple 5202│ │ 2:00 PM │ │ 5203│ └──────────────────────┘ │ 5204├──────────────────────────┤ 5205│ [+ Add Event] │ ← Purple button 5206└──────────────────────────┘ 5207``` 5208 5209**Professional Day Popup**: 5210``` 5211┌──────────────────────────┐ 5212│ Monday, February 8, 2026 │ ← Light header 5213├──────────────────────────┤ 5214│ ┌──────────────────────┐ │ 5215│ │ Team Meeting │ │ ← White 5216│ │ 2:00 PM │ │ 5217│ └──────────────────────┘ │ 5218├──────────────────────────┤ 5219│ [+ Add Event] │ ← Blue button 5220└──────────────────────────┘ 5221``` 5222 5223**Pink Day Popup**: 5224``` 5225┌──────────────────────────┐ 5226│ Monday, February 8, 2026 │ ← Pink header ✨ 5227├──────────────────────────┤ 5228│ ┌──────────────────────┐ │ 5229│ │ Team Meeting │ │ ← Dark pink 5230│ │ 2:00 PM │ │ 5231│ └──────────────────────┘ │ 5232├──────────────────────────┤ 5233│ [+ Add Event] │ ← Pink button 5234└──────────────────────────┘ 5235``` 5236 5237### Checkbox Theming 5238 5239**Unchecked boxes now themed**: 5240``` 5241Matrix: 5242☐ → Dark green bg, green border ✓ 5243 5244Purple: 5245☐ → Dark purple bg, purple border ✓ 5246 5247Professional: 5248☐ → White bg, gray border ✓ 5249 5250Pink: 5251☐ → Dark pink bg, pink border ✓ 5252``` 5253 5254### Complete Coverage 5255 5256**Edit Dialog - All Sections**: 5257- ✅ Header 5258- ✅ All inputs 5259- ✅ All labels 5260- ✅ **Checkbox sections** ← v4.8.7! 5261- ✅ Recurring options 5262- ✅ Button footer 5263- ✅ All checkboxes (checked & unchecked) 5264 5265**Day Popup - All Elements**: 5266- ✅ **Popup container** ← v4.8.7! 5267- ✅ **Header** ← v4.8.7! 5268- ✅ **Body** ← v4.8.7! 5269- ✅ **Event items** ← v4.8.7! 5270- ✅ **Namespace badges** ← v4.8.7! 5271- ✅ **Footer** ← v4.8.7! 5272- ✅ **Add Event button** ← v4.8.7! 5273- ✅ **No events message** ← v4.8.7! 5274 5275**Absolutely every dialog element themed!** ✨ 5276 5277### Perfect Theming Achievement 5278 5279**Every UI component in entire plugin**: 5280- ✅ Calendar grid 5281- ✅ Sidebar widget 5282- ✅ Event list 5283- ✅ Search bar 5284- ✅ Event boxes 5285- ✅ Edit dialog (complete) 5286- ✅ **Day popup** ← v4.8.7! 5287- ✅ Month picker 5288- ✅ All text 5289- ✅ All buttons 5290- ✅ All inputs 5291- ✅ **All checkboxes** ← v4.8.7! 5292- ✅ All borders 5293- ✅ All badges 5294- ✅ All backgrounds 5295 5296**NO WHITE ANYWHERE!** 5297 5298**100% COMPLETE THEMING ACHIEVED!** ✨ 5299 5300## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS 5301 5302### Fixed: Dialog Checkbox Sections Themed 5303- **Fixed:** Recurring options section background themed 5304- **Fixed:** Section has themed border accent 5305- **Result:** No white sections in dialog! 5306 5307### Fixed: Dialog Button Section Themed 5308- **Fixed:** Button area background themed 5309- **Fixed:** Top border separator themed 5310- **Result:** Complete dialog theming! 5311 5312### Fixed: Event Box Borders Themed 5313- **Fixed:** Top, right, bottom borders now themed 5314- **Fixed:** Left border remains event color 5315- **Result:** Perfect event boxes! 5316 5317### All Changes 5318 5319**1. Recurring Options Section**: 5320 5321**Before**: 5322```html 5323<div class="recurring-options" style="display:none;"> 5324<!-- White background ✗ --> 5325``` 5326 5327**After**: 5328```php 5329<div class="recurring-options" 5330 style="display:none; 5331 background: $bg !important; 5332 padding: 8px; 5333 border-left: 2px solid $border; 5334 margin-left: 4px;"> 5335<!-- Themed with accent border ✓ --> 5336``` 5337 5338**2. Dialog Actions Section**: 5339 5340**Before**: 5341```html 5342<div class="dialog-actions-sleek"> 5343<!-- White background ✗ --> 5344``` 5345 5346**After**: 5347```php 5348<div class="dialog-actions-sleek" 5349 style="background: $bg !important; 5350 border-top: 1px solid $grid_border !important;"> 5351<!-- Themed with separator ✓ --> 5352``` 5353 5354**3. Event Box Borders**: 5355 5356**Before**: 5357```php 5358border-left-color: $event_color; 5359<!-- Only left border colored ✗ --> 5360``` 5361 5362**After**: 5363```php 5364border-left-color: $event_color; 5365border-top: 1px solid $grid_border !important; 5366border-right: 1px solid $grid_border !important; 5367border-bottom: 1px solid $grid_border !important; 5368<!-- All borders themed! ✓ --> 5369``` 5370 5371### Before vs After 5372 5373**BEFORE (v4.8.5)**: 5374``` 5375Dialog: 5376┌────────────────┐ 5377│ ☑ Repeating │ 5378├────────────────┤ ← White section ✗ 5379│ Repeat: Daily │ 5380│ Until: [____] │ 5381├────────────────┤ 5382│ [Cancel] [Save]│ ← White footer ✗ 5383└────────────────┘ 5384 5385Event Box: 5386┌────────────┐ 5387│Team Meeting│ ← White borders ✗ 5388│2:00 PM │ 5389└────────────┘ 5390``` 5391 5392**AFTER (v4.8.6)**: 5393``` 5394Matrix Dialog: 5395┌────────────────┐ 5396│ ☑ Repeating │ 5397├────────────────┤ ← Dark green ✓ 5398│ Repeat: Daily │ Green accent border 5399│ Until: [____] │ 5400├────────────────┤ 5401│ [Cancel] [Save]│ ← Dark green ✓ 5402└────────────────┘ 5403 5404Matrix Event Box: 5405┌────────────┐ 5406│Team Meeting│ ← Green borders ✓ 5407│2:00 PM │ 5408└────────────┘ 5409``` 5410 5411### Dialog Section Examples 5412 5413**Matrix Theme**: 5414``` 5415┌──────────────────────────┐ 5416│ ✏️ Edit Event │ 5417├──────────────────────────┤ 5418│ ☑ Repeating Event │ 5419├║─────────────────────────┤ Green accent 5420│║ Repeat Every: Daily │ Dark green bg 5421│║ Repeat Until: [_____] │ 5422└──────────────────────────┘ 5423 [Cancel] [ Save] ← Dark green bg 5424──────────────────────────── Green border 5425``` 5426 5427**Purple Theme**: 5428``` 5429┌──────────────────────────┐ 5430│ ☑ Repeating Event │ 5431├║─────────────────────────┤ Purple accent 5432│║ Repeat options... │ Dark purple bg 5433└──────────────────────────┘ 5434 [Cancel] [ Save] ← Dark purple bg 5435──────────────────────────── Purple border 5436``` 5437 5438**Professional Theme**: 5439``` 5440┌──────────────────────────┐ 5441│ ☑ Repeating Event │ 5442├║─────────────────────────┤ Blue accent 5443│║ Repeat options... │ Light bg 5444└──────────────────────────┘ 5445 [Cancel] [ Save] ← Light bg 5446──────────────────────────── Gray border 5447``` 5448 5449**Pink Theme**: 5450``` 5451┌──────────────────────────┐ 5452│ ☑ Repeating Event ✨ │ 5453├║─────────────────────────┤ Pink accent 5454│║ Repeat options... │ Dark pink bg 5455└──────────────────────────┘ 5456 [Cancel] [ Save] ← Dark pink bg 5457──────────────────────────── Pink border 5458``` 5459 5460### Event Box Border Visual 5461 5462**Before (v4.8.5)**: 5463``` 5464Left border only: 5465█ Team Meeting 5466█ 2:00 PM 5467█ [Edit] [Delete] 5468 5469Only event color on left ✗ 5470White on other 3 sides ✗ 5471``` 5472 5473**After (v4.8.6)**: 5474``` 5475All borders themed: 5476┌─────────────┐ 5477█Team Meeting │ ← Top: themed 5478█2:00 PM │ ← Right: themed 5479█[Edit][Del] │ ← Bottom: themed 5480└─────────────┘ 5481 5482Left: Event color ✓ 5483Other 3: Theme grid_border ✓ 5484``` 5485 5486### Matrix Event Box: 5487``` 5488┌─────────────┐ Green border 5489│Team Meeting │ 5490│2:00 PM │ 5491└─────────────┘ Green border 5492↑ 5493Green left bar 5494``` 5495 5496### Purple Event Box: 5497``` 5498┌─────────────┐ Purple border 5499│Team Meeting │ 5500│2:00 PM │ 5501└─────────────┘ Purple border 5502↑ 5503Purple left bar 5504``` 5505 5506### Professional Event Box: 5507``` 5508┌─────────────┐ Gray border 5509│Team Meeting │ 5510│2:00 PM │ 5511└─────────────┘ Gray border 5512↑ 5513Event color left bar 5514``` 5515 5516### Complete Dialog Coverage 5517 5518**All sections themed**: 5519- ✅ Dialog header 5520- ✅ Form inputs 5521- ✅ Checkbox labels 5522- ✅ **Recurring options** ← v4.8.6! 5523- ✅ **Button section** ← v4.8.6! 5524- ✅ All labels 5525- ✅ All buttons 5526 5527**No white sections!** ✓ 5528 5529### Complete Event Box Coverage 5530 5531**All borders themed**: 5532- ✅ Left border (event color) 5533- ✅ **Top border** ← v4.8.6! 5534- ✅ **Right border** ← v4.8.6! 5535- ✅ **Bottom border** ← v4.8.6! 5536- ✅ Background 5537- ✅ Text 5538 5539**Perfect box outline!** ✓ 5540 5541### Visual Perfection 5542 5543**Matrix theme event list**: 5544``` 5545┌─────────────┐ 5546│Team Meeting │ ← Green box 5547│2:00 PM │ 5548└─────────────┘ 5549┌─────────────┐ 5550│Code Review │ ← Green box 5551│4:00 PM │ 5552└─────────────┘ 5553 5554All borders green! ✓ 5555``` 5556 5557**ABSOLUTE PERFECT THEMING!** ✨ 5558 5559## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS 5560 5561### Fixed: Event Dialog Fully Themed 5562- **Fixed:** Dialog background, header, inputs all themed 5563- **Fixed:** All labels, checkboxes, selects themed 5564- **Fixed:** Save and Cancel buttons themed 5565- **Result:** Dialog matches theme perfectly! 5566 5567### Fixed: Sidebar Event Borders Properly Themed 5568- **Fixed:** Event divider borders use grid_border color 5569- **Fixed:** Clean, subtle themed dividers 5570- **Result:** No more white borders in sidebar! 5571 5572### All Changes 5573 5574**1. Event Dialog Theming**: 5575 5576**Dialog container**: 5577```php 5578background: $themeStyles['bg'] !important; 5579border: 2px solid $themeStyles['border'] !important; 5580box-shadow: 0 0 20px $shadow !important; 5581``` 5582 5583**Dialog header**: 5584```php 5585background: $themeStyles['header_bg'] !important; 5586color: $themeStyles['text_primary'] !important; 5587border-bottom: 1px solid $border !important; 5588``` 5589 5590**All form inputs** (text, date, select, textarea): 5591```php 5592background: $themeStyles['cell_bg'] !important; 5593color: $themeStyles['text_primary'] !important; 5594border-color: $themeStyles['grid_border'] !important; 5595``` 5596 5597**All labels**: 5598```php 5599color: $themeStyles['text_primary'] !important; 5600``` 5601 5602**Checkboxes**: 5603```php 5604accent-color: $themeStyles['border'] !important; 5605``` 5606 5607**Buttons**: 5608```php 5609// Cancel button: 5610background: $cell_bg !important; 5611color: $text_primary !important; 5612 5613// Save button: 5614background: $border !important; 5615color: $bg !important; (or white for professional) 5616``` 5617 5618**2. Sidebar Event Borders**: 5619 5620**Before**: 5621```php 5622border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded 5623``` 5624 5625**After**: 5626```php 5627borderColor = $themeStyles['grid_border']; 5628border-bottom: 1px solid $borderColor !important; 5629``` 5630 5631### Before vs After 5632 5633**BEFORE (v4.8.4)**: 5634``` 5635Event Dialog: 5636┌────────────────┐ 5637│ Add Event │ ← White background ✗ 5638│ Title: [_____] │ ← White inputs ✗ 5639│ Date: [_____] │ 5640│ [Cancel] [Save]│ ← Default buttons ✗ 5641└────────────────┘ 5642 5643Sidebar Events: 5644Event 1 ──────── ← White border ✗ 5645Event 2 ──────── ← White border ✗ 5646``` 5647 5648**AFTER (v4.8.5)**: 5649``` 5650Event Dialog (Matrix): 5651┌────────────────┐ 5652│ Add Event │ ← Dark green background ✓ 5653│ Title: [_____] │ ← Dark green inputs ✓ 5654│ Date: [_____] │ ← Green text ✓ 5655│ [Cancel] [Save]│ ← Themed buttons ✓ 5656└────────────────┘ 5657 5658Sidebar Events (Matrix): 5659Event 1 ──────── ← Green border ✓ 5660Event 2 ──────── ← Green border ✓ 5661``` 5662 5663### Dialog Examples by Theme 5664 5665**Matrix Dialog**: 5666``` 5667┌──────────────────────────┐ 5668│ ✏️ Edit Event │ ← Dark green header 5669├──────────────────────────┤ 5670│ Title │ ← Green labels 5671│ [Team Meeting________] │ ← Dark green input 5672│ │ 5673│ Start Date │ 5674│ [2026-02-08__] │ ← Dark green input 5675│ │ 5676│ Start Time │ 5677│ [2:00 PM ▼] │ ← Green select 5678│ │ 5679│ ☑ Repeating Event │ ← Green checkbox 5680│ │ 5681│ [Cancel] [ Save] │ ← Themed buttons 5682└──────────────────────────┘ 5683 5684Everything green! ✓ 5685``` 5686 5687**Purple Dialog**: 5688``` 5689┌──────────────────────────┐ 5690│ ✏️ Edit Event │ ← Dark purple header 5691├──────────────────────────┤ 5692│ [Inputs_______________] │ ← Dark purple inputs 5693│ ☑ Checkboxes │ ← Purple accent 5694│ [Cancel] [ Save] │ ← Purple buttons 5695└──────────────────────────┘ 5696``` 5697 5698**Professional Dialog**: 5699``` 5700┌──────────────────────────┐ 5701│ ✏️ Edit Event │ ← Light gradient header 5702├──────────────────────────┤ 5703│ [Inputs_______________] │ ← White inputs 5704│ ☑ Checkboxes │ ← Blue accent 5705│ [Cancel] [ Save] │ ← Blue save button 5706└──────────────────────────┘ 5707``` 5708 5709**Pink Dialog**: 5710``` 5711┌──────────────────────────┐ 5712│ ✏️ Edit Event │ ← Dark pink header ✨ 5713├──────────────────────────┤ 5714│ [Inputs_______________] │ ← Dark pink inputs 5715│ ☑ Checkboxes │ ← Pink accent 5716│ [Cancel] [ Save] │ ← Pink buttons 5717└──────────────────────────┘ 5718``` 5719 5720### Complete Dialog Element Coverage 5721 5722**All form elements themed**: 5723- ✅ Dialog container 5724- ✅ Dialog header 5725- ✅ Close button (×) 5726- ✅ Title input 5727- ✅ Namespace search 5728- ✅ Namespace dropdown 5729- ✅ Description textarea 5730- ✅ Start date input 5731- ✅ End date input 5732- ✅ Recurring checkbox 5733- ✅ Recurrence type select 5734- ✅ Recurrence end date 5735- ✅ Start time select 5736- ✅ End time select 5737- ✅ Color select 5738- ✅ Custom color picker 5739- ✅ Task checkbox 5740- ✅ All labels 5741- ✅ Cancel button 5742- ✅ Save button 5743 5744**Every single dialog element themed!** 5745 5746### Sidebar Border Example 5747 5748**Matrix Sidebar**: 5749``` 5750┌────────────────┐ 5751│ Today │ ← Green section header 5752├────────────────┤ 5753│ Team Meeting │ 5754│ 2:00 PM │ 5755├────────────────┤ ← Green border (grid_border) 5756│ Code Review │ 5757│ 4:00 PM │ 5758├────────────────┤ ← Green border 5759│ Stand-up │ 5760│ All day │ 5761└────────────────┘ 5762 5763Subtle green dividers! ✓ 5764``` 5765 5766### Complete Achievement 5767 5768**Every UI element themed**: 5769- ✅ Calendar 5770- ✅ Sidebar widget 5771- ✅ Event list 5772- ✅ Search bar 5773- ✅ **Event dialog** ← v4.8.5! 5774- ✅ Month picker 5775- ✅ **Sidebar dividers** ← v4.8.5! 5776- ✅ All text 5777- ✅ All inputs 5778- ✅ All buttons 5779- ✅ All borders 5780- ✅ All checkboxes 5781 5782**ABSOLUTE COMPLETE THEMING!** ✨ 5783 5784## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS 5785 5786### Fixed: Professional Theme Background Consistency 5787- **Fixed:** Container and event backgrounds now match sidebar 5788- **Fixed:** Lighter, cleaner appearance 5789- **Fixed:** Better contrast and readability 5790- **Result:** Professional theme looks cohesive! 5791 5792### The Problem 5793 5794**v4.8.3 Professional theme**: 5795``` 5796Sidebar: Light background (#f5f7fa) 5797Calendar: Medium background (#e8ecf1) ← Didn't match! 5798Events: Light background (#f5f7fa) 5799 5800Inconsistent! ✗ 5801``` 5802 5803### The Fix 5804 5805**Updated Professional theme colors for consistency**: 5806 5807```php 5808// Before: 5809'bg' => '#e8ecf1', // Medium gray-blue 5810'cell_bg' => '#f5f7fa', // Very light 5811'grid_bg' => '#d5dbe3', // Medium-dark 5812 5813// After: 5814'bg' => '#f5f7fa', // Very light (matches sidebar) 5815'cell_bg' => '#ffffff', // Pure white (clean) 5816'grid_bg' => '#e8ecf1', // Subtle contrast 5817'grid_border' => '#d0d7de', // Softer borders 5818``` 5819 5820### Before vs After 5821 5822**BEFORE (v4.8.3)**: 5823``` 5824Professional Theme: 5825┌────────────────┐ 5826│ Calendar │ ← Medium gray (#e8ecf1) 5827│ ┌────────────┐ │ 5828│ │ Event │ │ ← Light (#f5f7fa) 5829│ └────────────┘ │ 5830└────────────────┘ 5831 5832Sidebar: 5833┌────────────────┐ 5834│ Widget │ ← Light (#f5f7fa) 5835└────────────────┘ 5836 5837Backgrounds don't match! ✗ 5838``` 5839 5840**AFTER (v4.8.4)**: 5841``` 5842Professional Theme: 5843┌────────────────┐ 5844│ Calendar │ ← Light (#f5f7fa) 5845│ ┌────────────┐ │ 5846│ │ Event │ │ ← White (#ffffff) 5847│ └────────────┘ │ 5848└────────────────┘ 5849 5850Sidebar: 5851┌────────────────┐ 5852│ Widget │ ← Light (#f5f7fa) 5853└────────────────┘ 5854 5855Perfect match! ✓ 5856``` 5857 5858### New Professional Theme Colors 5859 5860**Backgrounds**: 5861- Container: `#f5f7fa` (light blue-gray) 5862- Events: `#ffffff` (pure white) 5863- Grid: `#e8ecf1` (subtle contrast) 5864 5865**Text**: 5866- Primary: `#2c3e50` (dark blue-gray) 5867- Bright: `#4a90e2` (blue accent) 5868- Dim: `#7f8c8d` (medium gray) 5869 5870**Borders**: 5871- Main: `#4a90e2` (blue) 5872- Grid: `#d0d7de` (soft gray) 5873 5874**Header**: 5875- Gradient: `#ffffff` → `#f5f7fa` 5876 5877### Visual Example 5878 5879**Professional Theme Now**: 5880``` 5881┌─────────────────────────────┐ 5882│ February 2026 │ ← White to light gradient 5883├─┬─┬─┬─┬─┬─┬─┬───────────────┤ 5884│S│M│T│W│T│F│S│ │ ← Light background 5885├─┼─┼─┼─┼─┼─┼─┤ │ 5886│ │ │1│2│3│4│5│ Event List │ ← White events 5887│ │ │ │ │ │ │ │ ┌───────────┐ │ 5888│ │ │ │ │[8]│ │ │ Meeting │ │ ← White on light 5889└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘ 5890 5891Clean, professional look! ✓ 5892``` 5893 5894### Comparison with Other Themes 5895 5896**Matrix** (dark): 5897- Container: #242424 (dark green) 5898- Events: #242424 (dark green) 5899- Consistent dark theme ✓ 5900 5901**Purple** (dark): 5902- Container: #1a0d14 (dark purple) 5903- Events: #2a2030 (dark purple) 5904- Consistent dark theme ✓ 5905 5906**Professional** (light): 5907- Container: #f5f7fa (light blue) 5908- Events: #ffffff (white) 5909- Consistent light theme ✓ 5910 5911**Pink** (dark): 5912- Container: #1a0d14 (dark pink) 5913- Events: #1a0d14 (dark pink) 5914- Consistent dark theme ✓ 5915 5916**All themes now consistent!** 5917 5918### Better Contrast 5919 5920**Professional theme improvements**: 5921 5922**Readability**: 5923- Dark text (#2c3e50) on white/light backgrounds ✓ 5924- Excellent contrast ratio ✓ 5925- Easy on the eyes ✓ 5926 5927**Visual hierarchy**: 5928- White events pop against light container ✓ 5929- Blue accents stand out ✓ 5930- Clean, modern look ✓ 5931 5932**Professional appearance**: 5933- Lighter = more corporate/business feel ✓ 5934- Clean whites = premium quality ✓ 5935- Subtle grays = sophisticated ✓ 5936 5937### Complete Theme Consistency 5938 5939**All themes now have matching backgrounds**: 5940 5941**Matrix**: 5942- Sidebar & Calendar both dark green ✓ 5943 5944**Purple**: 5945- Sidebar & Calendar both dark purple ✓ 5946 5947**Professional**: 5948- Sidebar & Calendar both light ✓ (v4.8.4!) 5949 5950**Pink**: 5951- Sidebar & Calendar both dark pink ✓ 5952 5953**Perfect visual unity across all views!** ✨ 5954 5955## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES 5956 5957### Fixed: Bold Text in Descriptions Themed 5958- **Fixed:** **Bold text** now uses theme primary color 5959- **Fixed:** Both `**text**` and `__text__` syntax themed 5960- **Result:** Bold text matches theme! 5961 5962### Fixed: Search Bar Fully Themed 5963- **Fixed:** Search input has !important on all styles 5964- **Fixed:** Icon and placeholder text themed 5965- **Result:** Search bar perfectly themed! 5966 5967### Fixed: Sidebar Event Boxes Themed 5968- **Fixed:** Event borders in sidebar now use theme grid_border color 5969- **Fixed:** Borders have !important flag 5970- **Result:** Sidebar boxes match theme! 5971 5972### All Changes 5973 5974**1. Bold Text Styling**: 5975 5976**Before**: 5977```html 5978<strong>Bold text</strong> ← Default black 5979``` 5980 5981**After**: 5982```php 5983<strong style="color: $text_primary !important; font-weight:bold;"> 5984 Bold text 5985</strong> 5986 5987Matrix: Green bold ✓ 5988Purple: Lavender bold ✓ 5989Professional: Dark bold ✓ 5990Pink: Pink bold ✓ 5991``` 5992 5993**2. Search Bar**: 5994 5995**Before**: 5996```php 5997style="background: $bg; color: $text;" 5998Could be overridden by CSS 5999``` 6000 6001**After**: 6002```php 6003style="background: $bg !important; 6004 color: $text_primary !important; 6005 border-color: $grid_border !important;" 6006 6007Cannot be overridden! ✓ 6008``` 6009 6010**3. Sidebar Event Boxes**: 6011 6012**Before**: 6013```php 6014$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded 6015``` 6016 6017**After**: 6018```php 6019$borderColor = $themeStyles['grid_border']; // From theme 6020border-bottom: 1px solid $borderColor !important; 6021 6022Matrix: Green borders ✓ 6023Purple: Purple borders ✓ 6024Professional: Gray borders ✓ 6025Pink: Pink borders ✓ 6026``` 6027 6028### Before vs After 6029 6030**BEFORE (v4.8.2)**: 6031``` 6032Event description: 6033"Please review **Q1 Goals** carefully" 6034 ↑ 6035 Black bold ✗ 6036 6037Search bar: 6038[ Search...] ← Gray placeholder ✗ 6039 6040Sidebar: 6041┌────────────┐ 6042│ Event 1 │ 6043├────────────┤ ← Gray border ✗ 6044│ Event 2 │ 6045└────────────┘ 6046``` 6047 6048**AFTER (v4.8.3)**: 6049``` 6050Matrix Theme: 6051 6052Event description: 6053"Please review **Q1 Goals** carefully" 6054 ↑ 6055 Green bold ✓ 6056 6057Search bar: 6058[ Search...] ← Green themed ✓ 6059 6060Sidebar: 6061┌────────────┐ 6062│ Event 1 │ 6063├────────────┤ ← Green border ✓ 6064│ Event 2 │ 6065└────────────┘ 6066``` 6067 6068### Examples by Theme 6069 6070**Matrix Theme**: 6071``` 6072Description: 6073"Check **important notes** and links" 6074 ↑ 6075 Green bold 6076 6077Sidebar boxes: 6078Event 1 6079───────── Green border 6080Event 2 6081───────── Green border 6082``` 6083 6084**Purple Theme**: 6085``` 6086Description: 6087"Review **agenda items** before meeting" 6088 ↑ 6089 Lavender bold 6090 6091Sidebar boxes: 6092Event 1 6093───────── Purple border 6094Event 2 6095───────── Purple border 6096``` 6097 6098**Professional Theme**: 6099``` 6100Description: 6101"Update **quarterly reports** by Friday" 6102 ↑ 6103 Dark bold 6104 6105Sidebar boxes: 6106Event 1 6107───────── Gray border 6108Event 2 6109───────── Gray border 6110``` 6111 6112**Pink Theme**: 6113``` 6114Description: 6115"Don't forget **party supplies** ✨" 6116 ↑ 6117 Pink bold 6118 6119Sidebar boxes: 6120Event 1 6121───────── Pink border 6122Event 2 ✨ 6123───────── Pink border 6124``` 6125 6126### Complete Formatting Coverage 6127 6128**Text formatting themed**: 6129- ✅ Regular text 6130- ✅ **Bold text** ← NEW! 6131- ✅ Links 6132- ✅ Italic text (inherits) 6133- ✅ Code (inherits) 6134 6135**UI elements themed**: 6136- ✅ Search bar ← Enhanced! 6137- ✅ Search icon ← Enhanced! 6138- ✅ Search placeholder ← Enhanced! 6139- ✅ Sidebar borders ← NEW! 6140- ✅ Event borders 6141- ✅ Badges 6142- ✅ Buttons 6143 6144**Every element perfectly themed!** 6145 6146### Search Bar Coverage 6147 6148**All aspects themed**: 6149- Background: Theme cell_bg ✓ 6150- Text color: Theme text_primary ✓ 6151- Border: Theme grid_border ✓ 6152- Placeholder: Inherits text color ✓ 6153- Icon (): In placeholder ✓ 6154- Clear button (✕): Themed ✓ 6155 6156**Cannot be overridden!** (all have !important) 6157 6158### Sidebar Event Box Styling 6159 6160**Consistent borders**: 6161``` 6162Matrix: 6163╔════════════╗ 6164║ Event 1 ║ 6165╟────────────╢ ← grid_border color 6166║ Event 2 ║ 6167╚════════════╝ 6168 6169All themes match perfectly! ✓ 6170``` 6171 6172### Complete Theme Achievement 6173 6174**Every single element themed**: 6175- ✅ Backgrounds 6176- ✅ Text (regular) 6177- ✅ Text (bold) ← v4.8.3! 6178- ✅ Links 6179- ✅ Badges 6180- ✅ Buttons 6181- ✅ Checkboxes 6182- ✅ Icons 6183- ✅ Borders 6184- ✅ Search bar ← Enhanced v4.8.3! 6185- ✅ Sidebar boxes ← v4.8.3! 6186- ✅ Today marker 6187- ✅ Calendar grid 6188- ✅ Event panels 6189 6190**ABSOLUTE PERFECTION!** ✨ 6191 6192## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS 6193 6194### Fixed: Links in Descriptions Now Themed 6195- **Fixed:** All links in event descriptions now use theme color 6196- **Fixed:** DokuWiki links [[page|text]] themed 6197- **Fixed:** Markdown links [text](url) themed 6198- **Fixed:** Plain URLs themed 6199- **Result:** Links match theme perfectly! 6200 6201### The Problem 6202 6203**v4.8.1 behavior**: 6204``` 6205Event description: 6206"Check out https://example.com" ← Blue default link ✗ 6207"See [[wiki:page|docs]]" ← Blue default link ✗ 6208``` 6209 6210### The Fix 6211 6212**Added inline color styling to ALL link types**: 6213 6214```php 6215// Get theme colors: 6216$linkColor = $themeStyles['border'] . ' !important'; 6217$linkStyle = ' style="color:' . $linkColor . ';"'; 6218 6219// Apply to links: 6220<a href="..." style="color: #00cc07 !important;">link</a> 6221``` 6222 6223**All link types themed**: 62241. DokuWiki syntax: `[[page|text]]` 62252. Markdown syntax: `[text](url)` 62263. Plain URLs: `https://example.com` 6227 6228### Before vs After 6229 6230**BEFORE (v4.8.1)**: 6231``` 6232Matrix Theme Description: 6233"Visit https://example.com for more info" 6234 ↑ 6235 Blue link ✗ (doesn't match green theme) 6236``` 6237 6238**AFTER (v4.8.2)**: 6239``` 6240Matrix Theme Description: 6241"Visit https://example.com for more info" 6242 ↑ 6243 Green link ✓ (matches theme!) 6244``` 6245 6246### Link Colors by Theme 6247 6248**Matrix**: 6249- Links: Green (#00cc07) !important 6250- Matches: Border, badges, highlights 6251 6252**Purple**: 6253- Links: Purple (#9b59b6) !important 6254- Matches: Border, badges, highlights 6255 6256**Professional**: 6257- Links: Blue (#4a90e2) !important 6258- Matches: Border, badges, highlights 6259 6260**Pink**: 6261- Links: Hot Pink (#ff1493) !important 6262- Matches: Border, badges, highlights ✨ 6263 6264### Examples 6265 6266**Matrix Description with Links**: 6267``` 6268Event: Team Meeting 6269Description: 6270"Review [[wiki:q1goals|Q1 Goals]] 6271and visit https://metrics.com" 6272 6273Both links → Green ✓ 6274``` 6275 6276**Purple Description with Links**: 6277``` 6278Event: Planning Session 6279Description: 6280"Check [schedule](https://cal.com) 6281for availability" 6282 6283Link → Purple ✓ 6284``` 6285 6286**Professional Description with Links**: 6287``` 6288Event: Client Call 6289Description: 6290"Prepare [[reports|Monthly Reports]] 6291before the call" 6292 6293Link → Blue ✓ 6294``` 6295 6296**Pink Description with Links**: 6297``` 6298Event: Party Planning 6299Description: 6300"RSVP at https://party.com ✨" 6301 6302Link → Hot Pink ✓ 6303``` 6304 6305### Technical Implementation 6306 6307**Updated renderDescription() function**: 6308 6309```php 6310private function renderDescription($description, $themeStyles = null) { 6311 // Get theme 6312 if ($themeStyles === null) { 6313 $theme = $this->getSidebarTheme(); 6314 $themeStyles = $this->getSidebarThemeStyles($theme); 6315 } 6316 6317 // Create link style 6318 $linkColor = $themeStyles['border'] . ' !important'; 6319 $linkStyle = ' style="color:' . $linkColor . ';"'; 6320 6321 // Apply to all link types: 6322 $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>'; 6323} 6324``` 6325 6326### Complete Theming 6327 6328**Every text element**: 6329- ✅ Event titles 6330- ✅ Event dates 6331- ✅ Event descriptions 6332- ✅ **Links in descriptions** ← NEW! 6333- ✅ Badges 6334- ✅ Buttons 6335 6336**Every color unified!** 6337 6338### Unified Theme Experience 6339 6340**Matrix Theme**: 6341``` 6342Everything green: 6343- Text: Green ✓ 6344- Links: Green ✓ 6345- Badges: Green ✓ 6346- Borders: Green ✓ 6347- Buttons: Green ✓ 6348- Today marker: Green ✓ 6349 6350Perfect harmony! ✓ 6351``` 6352 6353**No default blue links breaking the theme!** 6354 6355### Link Types Supported 6356 6357**1. DokuWiki Syntax**: 6358``` 6359[[page|Link Text]] → Themed ✓ 6360[[page]] → Themed ✓ 6361[[page#section|Text]] → Themed ✓ 6362``` 6363 6364**2. Markdown Syntax**: 6365``` 6366[Link Text](https://url.com) → Themed ✓ 6367[Text](internal-page) → Themed ✓ 6368``` 6369 6370**3. Plain URLs**: 6371``` 6372https://example.com → Themed ✓ 6373http://site.org → Themed ✓ 6374``` 6375 6376**All links perfectly themed!** 6377 6378## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER 6379 6380### Fixed: All Badges Now Themed 6381- **Fixed:** TODAY badge themed with theme color 6382- **Fixed:** PAST DUE badge uses orange (warning color) 6383- **Fixed:** Namespace badges themed 6384- **Fixed:** All badges visible and hidden 6385- **Result:** All badges match theme! 6386 6387### Fixed: Today Cell More Prominent 6388- **Fixed:** Today cell now has 2px border in theme color 6389- **Fixed:** Border added to both PHP and JavaScript 6390- **Result:** Today stands out clearly! 6391 6392### Fixed: Past Event Text Fully Themed 6393- **Fixed:** Event-info div backgrounds ensure no gray 6394- **Result:** Expanded past events completely themed! 6395 6396### All Changes 6397 6398**1. Badge Theming**: 6399 6400**TODAY Badge**: 6401```php 6402// PHP & JavaScript: 6403style="background: $themeStyles['border'] !important; 6404 color: $bg !important;" 6405 6406Matrix: Green badge 6407Purple: Purple badge 6408Professional: Blue badge with white text 6409Pink: Pink badge 6410``` 6411 6412**PAST DUE Badge** (always orange): 6413```php 6414style="background: #ff9800 !important; 6415 color: #fff !important;" 6416``` 6417 6418**Namespace Badge**: 6419```php 6420style="background: $themeStyles['border'] !important; 6421 color: $bg !important;" 6422``` 6423 6424**2. Today Cell Border**: 6425 6426**PHP**: 6427```php 6428$todayBorder = $isToday ? 6429 'border:2px solid ' . $themeStyles['border'] . ' !important;' : ''; 6430``` 6431 6432**JavaScript**: Same 6433 6434**Result**: Today cell has prominent colored border! 6435 6436### Before vs After 6437 6438**BEFORE (v4.8.0)**: 6439``` 6440Calendar: 6441┌─┬─┬─┬─┬─┬─┬─┐ 6442│1│2│3│4│5│6│7│ 6443│ │ │ │[8]│ │ │ ← Today: subtle background 6444└─┴─┴─┴─┴─┴─┴─┘ 6445 6446Event badges: 6447Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗ 6448``` 6449 6450**AFTER (v4.8.1)**: 6451``` 6452Calendar (Matrix): 6453┌─┬─┬─┬─┬─┬─┬─┐ 6454│1│2│3│4│5│6│7│ 6455│ │ │ │[8]│ │ │ ← Today: green border 2px ✓ 6456└─┴─┴─┴─┴─┴─┴─┘ 6457 6458Event badges (Matrix): 6459Mon, Feb 8 [TODAY] [Work] ← Green badges ✓ 6460``` 6461 6462### Matrix Theme Example 6463 6464**Calendar**: 6465``` 6466Today cell: 6467┌────┐ 6468│ 8 │ Dark green bg + Green 2px border 6469└────┘ 6470Very obvious! 6471``` 6472 6473**Badges**: 6474``` 6475[TODAY] ← Green bg, dark text 6476[Work] ← Green bg, dark text 6477[PAST DUE] ← Orange bg, white text 6478``` 6479 6480### Purple Theme Example 6481 6482**Calendar**: 6483``` 6484Today cell: 6485┌────┐ 6486│ 8 │ Dark purple bg + Purple 2px border 6487└────┘ 6488``` 6489 6490**Badges**: 6491``` 6492[TODAY] ← Purple bg 6493[Work] ← Purple bg 6494``` 6495 6496### Professional Theme Example 6497 6498**Calendar**: 6499``` 6500Today cell: 6501┌────┐ 6502│ 8 │ Light blue bg + Blue 2px border 6503└────┘ 6504``` 6505 6506**Badges**: 6507``` 6508[TODAY] ← Blue bg, white text 6509[Work] ← Blue bg, white text 6510``` 6511 6512### Pink Theme Example 6513 6514**Calendar**: 6515``` 6516Today cell: 6517┌────┐ 6518│ 8 │ Dark pink bg + Pink 2px border ✨ 6519└────┘ 6520``` 6521 6522**Badges**: 6523``` 6524[TODAY] ← Pink bg 6525[Work] ← Pink bg ✨ 6526``` 6527 6528### Complete Badge Coverage 6529 6530**All badges themed**: 6531- ✅ TODAY badge (theme color) 6532- ✅ PAST DUE badge (orange warning) 6533- ✅ Namespace badges (theme color) 6534- ✅ Visible events 6535- ✅ Hidden/past events 6536 6537**No gray badges anywhere!** 6538 6539### Today Cell Visual 6540 6541**Dual indicators**: 65421. Background color (theme today bg) 65432. Border (2px theme color) ← NEW! 6544 6545**Result**: Today is VERY obvious! 6546 6547**Matrix**: Green bg + Green border 6548**Purple**: Purple bg + Purple border 6549**Professional**: Light blue bg + Blue border 6550**Pink**: Pink bg + Pink border ✨ 6551 6552### Complete Theming 6553 6554**Every element themed**: 6555- ✅ Backgrounds 6556- ✅ Text colors 6557- ✅ Badges (v4.8.1!) 6558- ✅ Today marker (v4.8.1!) 6559- ✅ Checkboxes 6560- ✅ Buttons 6561- ✅ Icons 6562 6563**Absolutely everything!** ✨ 6564 6565## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING 6566 6567### Fixed: All Event Backgrounds Now Themed 6568- **Fixed:** event-info div now has themed background 6569- **Fixed:** event-meta-compact div (visible) now has themed background 6570- **Fixed:** event-desc-compact div now has themed background 6571- **Fixed:** All !important flags added to prevent CSS override 6572- **Result:** Entire event item fully themed! 6573 6574### Fixed: Description Text Shows Correct Color Immediately 6575- **Fixed:** Description divs now have explicit background + color on load 6576- **Fixed:** Both visible and hidden descriptions fully styled 6577- **Result:** No more gray text on initial load! 6578 6579### The Problem 6580 6581**v4.7.9 behavior**: 6582``` 6583Expanded past event: 6584┌────────────────────────┐ 6585│ ▾ Team Meeting │ ← Themed ✓ 6586│ Mon, Feb 8 │ ← Themed ✓ 6587│ │ 6588│ [Event details] │ ← Gray background ✗ 6589│ [Description] │ ← Gray text until navigation ✗ 6590└────────────────────────┘ 6591 6592Only the date/time div was themed! 6593``` 6594 6595### The Fix 6596 6597**Added background to ALL inner divs**: 6598 6599**PHP**: 6600```php 6601// Event container: 6602style="background:' . $themeStyles['cell_bg'] . ' !important;" 6603 6604// event-info wrapper: 6605<div class="event-info" 6606 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6607 6608// event-meta-compact: 6609<div class="event-meta-compact" 6610 style="background:' . $themeStyles['cell_bg'] . ' !important;"> 6611 6612// event-desc-compact: 6613<div class="event-desc-compact" 6614 style="background:' . $themeStyles['cell_bg'] . ' !important; 6615 color:' . $themeStyles['text_dim'] . ' !important;"> 6616``` 6617 6618**JavaScript**: Same styling applied 6619 6620### Before vs After 6621 6622**BEFORE (v4.7.9)**: 6623``` 6624Matrix Theme - Expanded Event: 6625┌────────────────────────┐ 6626│ ▾ Team Meeting │ 6627│ Mon, Feb 8 ← Green │ 6628│ │ 6629│ Details ← Gray ✗ │ 6630│ Description ← Gray ✗ │ 6631│ [✏️] [️] │ 6632└────────────────────────┘ 6633``` 6634 6635**AFTER (v4.8.0)**: 6636``` 6637Matrix Theme - Expanded Event: 6638┌────────────────────────┐ 6639│ ▾ Team Meeting │ 6640│ Mon, Feb 8 ← Green │ 6641│ │ 6642│ Details ← Green ✓│ 6643│ Description ← Green ✓│ 6644│ [✏️] [️] │ 6645└────────────────────────┘ 6646 6647Entire event themed! 6648``` 6649 6650### What's Themed Now 6651 6652**Event Item Structure** (all themed): 6653``` 6654event-compact-item ← Themed ✓ 6655 └─ event-info ← Themed ✓ (v4.8.0!) 6656 ├─ event-title-row ← Themed ✓ 6657 ├─ event-meta ← Themed ✓ (v4.8.0!) 6658 └─ event-desc ← Themed ✓ (v4.8.0!) 6659``` 6660 6661**Every layer has background!** 6662 6663### Matrix Theme Example 6664 6665**Complete event**: 6666``` 6667┌────────────────────────────┐ 6668│ Team Meeting │ ← Dark green bg 6669│ Mon, Feb 8 • 2:00 PM │ ← Dark green bg 6670│ Discussed Q1 goals and │ ← Dark green bg 6671│ set targets for team │ ← Dark green bg 6672│ [✏️] [️] [☑] │ ← Dark green bg 6673└────────────────────────────┘ 6674 6675Consistent green throughout! ✓ 6676``` 6677 6678### Purple Theme Example 6679 6680``` 6681┌────────────────────────────┐ 6682│ Team Meeting │ ← Dark purple bg 6683│ Mon, Feb 8 • 2:00 PM │ ← Dark purple bg 6684│ Discussed Q1 goals │ ← Dark purple bg 6685│ [✏️] [️] [☑] │ ← Dark purple bg 6686└────────────────────────────┘ 6687 6688Consistent purple throughout! ✓ 6689``` 6690 6691### Professional Theme Example 6692 6693``` 6694┌────────────────────────────┐ 6695│ Team Meeting │ ← Light bg 6696│ Mon, Feb 8 • 2:00 PM │ ← Light bg 6697│ Discussed Q1 goals │ ← Light bg 6698│ [✏️] [️] [☑] │ ← Light bg 6699└────────────────────────────┘ 6700 6701Consistent light throughout! ✓ 6702``` 6703 6704### Pink Theme Example 6705 6706``` 6707┌────────────────────────────┐ 6708│ Team Meeting │ ← Dark pink bg 6709│ Mon, Feb 8 • 2:00 PM │ ← Dark pink bg 6710│ Discussed Q1 goals │ ← Dark pink bg 6711│ [✏️] [️] [☑] │ ← Dark pink bg 6712└────────────────────────────┘ 6713 6714Consistent pink throughout! ✓ 6715``` 6716 6717### Complete Theming 6718 6719**Every element, every layer**: 6720- ✅ Container 6721- ✅ Event item 6722- ✅ Event info wrapper (v4.8.0!) 6723- ✅ Title row 6724- ✅ Meta div (v4.8.0!) 6725- ✅ Description div (v4.8.0!) 6726- ✅ Action buttons 6727- ✅ Checkboxes 6728 6729**No gray anywhere!** 6730 6731### Why Multiple Backgrounds? 6732 6733**CSS layers stack**: 6734```html 6735<div style="background: green;"> ← Layer 1 6736 <div style="background: inherit;"> ← Could be gray! 6737 <div>Content</div> ← Inherits gray! 6738 </div> 6739</div> 6740 6741Better: 6742<div style="background: green;"> ← Layer 1 6743 <div style="background: green;"> ← Layer 2 forced 6744 <div style="background: green;"> ← Layer 3 forced 6745 Content ← All green! 6746 </div> 6747 </div> 6748</div> 6749``` 6750 6751**Every layer forced = Perfect theming!** 6752 6753### !important Everywhere 6754 6755**All styling now uses !important**: 6756- background: ... !important 6757- color: ... !important 6758 6759**Result**: CSS cannot override themes! 6760 6761**Version 4.8.0 = Complete, bulletproof theming!** ✨ 6762 6763## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS 6764 6765### Fixed: Past Event Expanded Background Themed 6766- **Fixed:** Past event meta div now has theme background when expanded 6767- **Fixed:** Both PHP and JavaScript render with theme background 6768- **Result:** Expanded past events have proper themed background! 6769 6770### ✅ Fixed: Checkboxes Now Themed 6771- **Fixed:** Task checkboxes use accent-color matching theme 6772- **Fixed:** Cursor changes to pointer on hover 6773- **Result:** Checkboxes match theme color! 6774 6775### Fixed: Action Buttons (Edit/Delete) Themed 6776- **Fixed:** Edit (✏️) and Delete (️) buttons now themed 6777- **Fixed:** Background, text, and border all use theme colors 6778- **Result:** All icons themed! 6779 6780### All Changes 6781 6782**1. Past Event Expanded Background**: 6783 6784**PHP**: 6785```php 6786// Before: 6787<div class="event-meta-compact" style="display:none;"> 6788 6789// After: 6790<div class="event-meta-compact" 6791 style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;"> 6792``` 6793 6794**JavaScript**: Same treatment 6795 6796**Result**: Expanded past events have themed background! 6797 6798**2. Task Checkboxes**: 6799 6800**PHP & JavaScript**: 6801```php 6802// Added accent-color: 6803<input type="checkbox" 6804 style="accent-color:' . $themeStyles['border'] . ' !important; 6805 cursor:pointer;"> 6806``` 6807 6808**accent-color** changes the checkbox color: 6809- Matrix: Green checkboxes ✓ 6810- Purple: Purple checkboxes ✓ 6811- Professional: Blue checkboxes ✓ 6812- Pink: Pink checkboxes ✓ 6813 6814**3. Edit/Delete Buttons**: 6815 6816**PHP**: 6817```php 6818<button class="event-action-btn" 6819 style="color:' . $themeStyles['text_primary'] . ' !important; 6820 background:' . $themeStyles['cell_bg'] . ' !important; 6821 border-color:' . $themeStyles['grid_border'] . ' !important;"> 6822 ️ 6823</button> 6824``` 6825 6826**JavaScript**: Same 6827 6828**Result**: Buttons blend with theme! 6829 6830### Before vs After 6831 6832**BEFORE (v4.7.8)**: 6833``` 6834Past Event (expanded): 6835┌─────────────────────────┐ 6836│ ▾ Team Meeting │ 6837│ Mon, Feb 8 │ ← White background ✗ 6838│ Description │ 6839├─────────────────────────┤ 6840│ [✏️] [️] [☐] │ ← Default colors ✗ 6841└─────────────────────────┘ 6842``` 6843 6844**AFTER (v4.7.9)**: 6845``` 6846Past Event (expanded - Matrix): 6847┌─────────────────────────┐ 6848│ ▾ Team Meeting │ 6849│ Mon, Feb 8 │ ← Dark green bg ✓ 6850│ Description │ 6851├─────────────────────────┤ 6852│ [✏️] [️] [☑] │ ← Themed ✓ 6853└─────────────────────────┘ 6854``` 6855 6856### Matrix Theme Example 6857 6858**Checkboxes**: Green accent 6859**Buttons**: Dark bg, green text, green borders 6860**Expanded**: Dark green background 6861 6862``` 6863Task: ☑ Complete report ← Green checkmark 6864[✏️] [️] ← Dark buttons with green 6865``` 6866 6867### Purple Theme Example 6868 6869**Checkboxes**: Purple accent 6870**Buttons**: Dark purple bg, lavender text 6871**Expanded**: Dark purple background 6872 6873``` 6874Task: ☑ Complete report ← Purple checkmark 6875[✏️] [️] ← Purple themed 6876``` 6877 6878### Professional Theme Example 6879 6880**Checkboxes**: Blue accent 6881**Buttons**: Light bg, dark text 6882**Expanded**: Light background 6883 6884``` 6885Task: ☑ Complete report ← Blue checkmark 6886[✏️] [️] ← Light themed 6887``` 6888 6889### Pink Theme Example 6890 6891**Checkboxes**: Pink accent 6892**Buttons**: Dark pink bg, pink text 6893**Expanded**: Dark pink background 6894 6895``` 6896Task: ☑ Complete report ← Pink checkmark 6897[✏️] [️] ← Pink themed 6898``` 6899 6900### Complete Icon Coverage 6901 6902**Themed Icons/Buttons**: 6903- ✅ Task checkboxes (accent-color) 6904- ✅ Edit button (✏️) 6905- ✅ Delete button (️) 6906- ✅ Navigation arrows (◀ ▶) 6907- ✅ Today button 6908- ✅ Past Events arrow (▶) 6909 6910**All interactive elements themed!** 6911 6912### How accent-color Works 6913 6914**Modern CSS property** for form controls: 6915```css 6916input[type="checkbox"] { 6917 accent-color: #00cc07; /* Green checkbox! */ 6918} 6919``` 6920 6921**Browser support**: All modern browsers ✓ 6922 6923**Result**: Checkboxes automatically match theme! 6924 6925### Complete Theme Coverage 6926 6927**Backgrounds**: 6928- ✅ Container 6929- ✅ Calendar-left 6930- ✅ Calendar-right 6931- ✅ Event items 6932- ✅ Past event expanded (v4.7.9!) 6933- ✅ Action buttons (v4.7.9!) 6934 6935**Icons/Controls**: 6936- ✅ Checkboxes (v4.7.9!) 6937- ✅ Edit/Delete buttons (v4.7.9!) 6938- ✅ Navigation buttons 6939- ✅ All arrows 6940 6941**Every element perfectly themed!** ✨ 6942 6943## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS 6944 6945### Fixed: White Bar at Bottom of Calendar 6946- **Fixed:** Added background to calendar-left div with !important 6947- **Result:** No more white bar at bottom! 6948 6949### Fixed: Past Event Expanded Details Not Themed 6950- **Fixed:** Past event date/time now themed when expanded 6951- **Fixed:** Past event descriptions now themed when expanded 6952- **Fixed:** Both PHP and JavaScript render with theme colors 6953- **Result:** Expanding past events shows themed text! 6954 6955### Fixed: Event Description Text Color 6956- **Fixed:** All event descriptions now use theme text_dim color 6957- **Fixed:** Both visible and hidden descriptions themed 6958- **Result:** Descriptions always match theme! 6959 6960### All Changes 6961 6962**1. Bottom White Bar** (calendar-left div): 6963 6964**Before**: 6965```html 6966<div class="calendar-compact-left"> 6967<!-- White background showing at bottom --> 6968``` 6969 6970**After**: 6971```html 6972<div class="calendar-compact-left" 6973 style="background: #242424 !important;"> 6974<!-- Matches theme background --> 6975``` 6976 6977**2. Past Event Expanded Details**: 6978 6979**PHP** - Added colors to hidden details: 6980```php 6981// Past event meta (hidden): 6982<span class="event-date-time" 6983 style="color:' . $themeStyles['text_dim'] . ' !important;"> 6984 6985// Past event description (hidden): 6986<div class="event-desc-compact" 6987 style="display:none; color:' . $themeStyles['text_dim'] . ' !important;"> 6988``` 6989 6990**JavaScript** - Same treatment: 6991```javascript 6992// Past event meta: 6993html += '<span class="event-date-time" 6994 style="color:' + themeStyles.text_dim + ' !important;">'; 6995 6996// Past event description: 6997html += '<div class="event-desc-compact" 6998 style="display: none; color:' + themeStyles.text_dim + ' !important;">'; 6999``` 7000 7001**3. All Event Descriptions**: 7002 7003**Both visible and hidden descriptions now themed**: 7004```php 7005// PHP: 7006style="color:' . $themeStyles['text_dim'] . ' !important;" 7007 7008// JavaScript: 7009style="color:' + themeStyles.text_dim + ' !important;" 7010``` 7011 7012### Before vs After 7013 7014**BEFORE (v4.7.7)**: 7015``` 7016Calendar bottom: 7017┌──────────────┐ 7018│ Calendar │ 7019│ Grid │ 7020└──────────────┘ 7021▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar 7022 7023Past Event (collapsed): 7024▸ Team Meeting 7025 7026Past Event (expanded): 7027▾ Team Meeting 7028 Mon, Feb 8 ← Gray text ✗ 7029 Description ← Gray text ✗ 7030``` 7031 7032**AFTER (v4.7.8)**: 7033``` 7034Calendar bottom: 7035┌──────────────┐ 7036│ Calendar │ 7037│ Grid │ 7038└──────────────┘ 7039No white bar! ✓ 7040 7041Past Event (collapsed): 7042▸ Team Meeting 7043 7044Past Event (expanded): 7045▾ Team Meeting 7046 Mon, Feb 8 ← Theme dim color ✓ 7047 Description ← Theme dim color ✓ 7048``` 7049 7050### Matrix Theme Example 7051 7052**Past event expanded**: 7053``` 7054▾ Team Meeting (past) 7055 Mon, Feb 8 • 2:00 PM ← Dim green (#00aa00) 7056 Discussed Q1 goals ← Dim green (#00aa00) 7057 7058Everything themed! ✓ 7059``` 7060 7061### Purple Theme Example 7062 7063**Past event expanded**: 7064``` 7065▾ Team Meeting (past) 7066 Mon, Feb 8 • 2:00 PM ← Dim purple (#8e7ab8) 7067 Discussed Q1 goals ← Dim purple (#8e7ab8) 7068 7069Everything themed! ✓ 7070``` 7071 7072### Professional Theme Example 7073 7074**Past event expanded**: 7075``` 7076▾ Team Meeting (past) 7077 Mon, Feb 8 • 2:00 PM ← Gray (#7f8c8d) 7078 Discussed Q1 goals ← Gray (#7f8c8d) 7079 7080Everything themed! ✓ 7081``` 7082 7083### Pink Theme Example 7084 7085**Past event expanded**: 7086``` 7087▾ Team Meeting (past) 7088 Mon, Feb 8 • 2:00 PM ← Light pink (#ff85c1) 7089 Discussed Q1 goals ← Light pink (#ff85c1) 7090 7091Everything themed! ✓ 7092``` 7093 7094### Complete Coverage 7095 7096**Calendar Layout**: 7097- ✅ Container background 7098- ✅ Calendar-left background (v4.7.8!) 7099- ✅ Calendar-right background 7100- ✅ No white bars anywhere! 7101 7102**Event Details**: 7103- ✅ Event titles 7104- ✅ Event dates/times 7105- ✅ Event descriptions (visible) (v4.7.8!) 7106- ✅ Past event dates (expanded) (v4.7.8!) 7107- ✅ Past event descriptions (expanded) (v4.7.8!) 7108 7109**Absolutely everything themed!** 7110 7111## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS 7112 7113### Fixed: Added !important to EVERY Themed Element 7114- **Fixed:** S M T W T F S headers now have background + color with !important 7115- **Fixed:** "Past Events" text now has explicit color with !important 7116- **Fixed:** Today cell background now forced with !important 7117- **Fixed:** All day numbers now have !important color 7118- **Fixed:** Empty cells now have !important background 7119- **Result:** CSS CANNOT override themes anymore! 7120 7121### The Nuclear Option: !important Everywhere 7122 7123**Problem**: DokuWiki CSS was still winning: 7124```css 7125/* DokuWiki theme overriding everything: */ 7126.dokuwiki table th { background: white !important; color: black !important; } 7127.dokuwiki td { background: white !important; } 7128``` 7129 7130**Solution**: Add !important to EVERY inline style: 7131```html 7132<th style="background: #242424 !important; color: #00cc07 !important;"> 7133<td style="background: #2a4d2a !important; color: #00cc07 !important;"> 7134<span style="color: #00cc07 !important;"> 7135``` 7136 7137### All Changes 7138 7139**1. Table Headers (S M T W T F S)**: 7140 7141**PHP** - Added background + !important everywhere: 7142```php 7143$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important; 7144 color:' . $themeStyles['text_primary'] . ' !important; 7145 border-color:' . $themeStyles['grid_border'] . ' !important; 7146 font-weight:bold !important;'; 7147``` 7148 7149**JavaScript** - Added background to each th: 7150```javascript 7151th.style.setProperty('background', themeStyles.header_bg, 'important'); 7152th.style.setProperty('color', themeStyles.text_primary, 'important'); 7153th.style.setProperty('border-color', themeStyles.grid_border, 'important'); 7154th.style.setProperty('font-weight', 'bold', 'important'); 7155``` 7156 7157**2. Past Events Text**: 7158 7159**PHP** - Added !important to spans: 7160```php 7161<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span> 7162<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span> 7163``` 7164 7165**JavaScript** - Same treatment: 7166```javascript 7167html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>'; 7168html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>'; 7169``` 7170 7171**3. Today Cell & All Cells**: 7172 7173**PHP** - !important on background and color: 7174```php 7175// Today or regular cell: 7176$cellStyle = 'background:' . $cellBg . ' !important; 7177 color:' . $themeStyles['text_primary'] . ' !important;'; 7178 7179// Day number: 7180<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;"> 7181``` 7182 7183**JavaScript** - Same: 7184```javascript 7185style="background:${cellBg} !important; color:${cellColor} !important;" 7186 7187<span style="color:${cellColor} !important;">${currentDay}</span> 7188``` 7189 7190**4. Empty Cells**: 7191 7192**PHP & JavaScript** - !important: 7193```php 7194style="background:' . $themeStyles['bg'] . ' !important;" 7195``` 7196 7197### Before vs After 7198 7199**BEFORE (v4.7.6)** - CSS still winning: 7200``` 7201S M T W T F S → White background, black text ✗ 7202Today cell → White background ✗ 7203Past Events → Black text ✗ 7204``` 7205 7206**AFTER (v4.7.7)** - Theme wins: 7207``` 7208S M T W T F S → Theme background, theme text ✓ 7209Today cell → Theme highlight ✓ 7210Past Events → Theme text ✓ 7211 7212NOTHING can override !important inline styles! 7213``` 7214 7215### Matrix Theme Example 7216 7217**Complete theming**: 7218``` 7219┌──────────────────────────┐ 7220│ S M T W T F S │ ← Dark bg (#2a2a2a), Green text (#00cc07) 7221├─┬─┬─┬─┬─┬─┬──────────────┤ 7222│ │ │1│2│3│4│5 │ ← Dark cells (#242424), Green nums (#00cc07) 7223│ │ │ │ │ │[8]│ │ ← Today green highlight (#2a4d2a) 7224├─┴─┴─┴─┴─┴─┴──────────────┤ 7225│ ▶ Past Events (3) │ ← Dim green text (#00aa00) 7226└──────────────────────────┘ 7227 7228Every element forced with !important ✓ 7229``` 7230 7231### Purple Theme Example 7232 7233``` 7234┌──────────────────────────┐ 7235│ S M T W T F S │ ← Dark purple bg, Lavender text 7236├─┬─┬─┬─┬─┬─┬──────────────┤ 7237│ │ │1│2│3│4│5 │ ← Dark purple cells, Lavender nums 7238│ │ │ │ │ │[8]│ │ ← Today purple highlight 7239├─┴─┴─┴─┴─┴─┴──────────────┤ 7240│ ▶ Past Events (3) │ ← Dim purple text 7241└──────────────────────────┘ 7242 7243Forced purple everywhere ✓ 7244``` 7245 7246### Professional Theme Example 7247 7248``` 7249┌──────────────────────────┐ 7250│ S M T W T F S │ ← Light bg, Dark text 7251├─┬─┬─┬─┬─┬─┬──────────────┤ 7252│ │ │1│2│3│4│5 │ ← Light cells, Dark nums 7253│ │ │ │ │ │[8]│ │ ← Today light blue highlight 7254├─┴─┴─┴─┴─┴─┴──────────────┤ 7255│ ▶ Past Events (3) │ ← Gray text 7256└──────────────────────────┘ 7257 7258Forced professional everywhere ✓ 7259``` 7260 7261### Pink Theme Example 7262 7263``` 7264┌──────────────────────────┐ 7265│ S M T W T F S │ ← Dark pink bg, Pink text 7266├─┬─┬─┬─┬─┬─┬──────────────┤ 7267│ │ │1│2│3│4│5 ✨ │ ← Dark pink cells, Pink nums 7268│ │ │ │ │ │[8]│ │ ← Today pink highlight 7269├─┴─┴─┴─┴─┴─┴──────────────┤ 7270│ ▶ Past Events (3) │ ← Light pink text 7271└──────────────────────────┘ 7272 7273Forced pink sparkles everywhere ✓ 7274``` 7275 7276### Why So Aggressive? 7277 7278**!important priority**: 7279``` 72801. Inline style with !important ← We use this 72812. CSS rule with !important 72823. Inline style without !important 72834. CSS rule without !important 7284``` 7285 7286**We win**: Our inline `!important` beats everything! 7287 7288### Complete !important Coverage 7289 7290**Every themed element now has !important**: 7291- ✅ S M T W T F S (background + color) 7292- ✅ Day numbers (color) 7293- ✅ Today cell (background + color) 7294- ✅ Empty cells (background) 7295- ✅ Past Events text (color) 7296- ✅ Past Events arrow (color) 7297- ✅ Event titles (color) 7298- ✅ Event dates (color) 7299 7300**No CSS can override themes!** 7301 7302## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS 7303 7304### Fixed: Event Sidebar Text Now Themed 7305- **Fixed:** Event titles now have explicit color styling 7306- **Fixed:** Event dates/times now have explicit color styling (dimmed) 7307- **Fixed:** Both PHP and JavaScript event rendering now styled 7308 7309### Enhanced: Table Header Colors Now Forced with !important 7310- **Fixed:** S M T W T F S now uses `!important` to override any CSS 7311- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag 7312- **Result:** Header colors CANNOT be overridden! 7313 7314### What Was Fixed 7315 7316**1. Event Text in Sidebar** (was missing): 7317 7318**PHP** - Explicit colors added: 7319```php 7320// Event title: 7321<span class="event-title-compact" 7322 style="color:' . $themeStyles['text_primary'] . ';"> 7323 7324// Event date/time: 7325<span class="event-date-time" 7326 style="color:' . $themeStyles['text_dim'] . ';"> 7327``` 7328 7329**JavaScript** - Explicit colors added: 7330```javascript 7331// Event title: 7332html += '<span class="event-title-compact" 7333 style="color:' + themeStyles.text_primary + ';">'; 7334 7335// Event date/time: 7336html += '<span class="event-date-time" 7337 style="color:' + themeStyles.text_dim + ';">'; 7338``` 7339 7340**2. Table Header Colors** (was being overridden): 7341 7342**PHP** - Added !important: 7343```php 7344// Row: 7345style="color: ' . $themeStyles['text_primary'] . ' !important;" 7346 7347// Each th: 7348$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;'; 7349<th style="' . $thStyle . '">S</th> 7350``` 7351 7352**JavaScript** - Used setProperty with important: 7353```javascript 7354// Row: 7355thead.style.setProperty('color', themeStyles.text_primary, 'important'); 7356 7357// Each th: 7358th.style.setProperty('color', themeStyles.text_primary, 'important'); 7359``` 7360 7361### Before vs After 7362 7363**BEFORE (v4.7.5)**: 7364``` 7365Event List: 7366┌─────────────────┐ 7367│ Team Meeting │ ← Black/default color ✗ 7368│ Mon, Feb 8 │ ← Black/default color ✗ 7369└─────────────────┘ 7370 7371Table Header: 7372S M T W T F S ← Black/default color ✗ 7373(CSS was overriding the style) 7374``` 7375 7376**AFTER (v4.7.6)**: 7377``` 7378Event List (Matrix): 7379┌─────────────────┐ 7380│ Team Meeting │ ← Green (#00cc07) ✓ 7381│ Mon, Feb 8 │ ← Dim green (#00aa00) ✓ 7382└─────────────────┘ 7383 7384Table Header (Matrix): 7385S M T W T F S ← Green (!important) ✓ 7386(Cannot be overridden!) 7387``` 7388 7389### Why !important? 7390 7391**Problem**: DokuWiki CSS was stronger: 7392```css 7393/* Some DokuWiki theme CSS: */ 7394table th { 7395 color: #000 !important; /* ← Overrides inline styles */ 7396} 7397``` 7398 7399**Solution**: Use !important in inline styles: 7400```html 7401<th style="color: #00cc07 !important;">S</th> 7402<!-- Inline !important beats CSS !important --> 7403``` 7404 7405**JavaScript method**: 7406```javascript 7407// Old (could be overridden): 7408th.style.color = '#00cc07'; 7409 7410// New (cannot be overridden): 7411th.style.setProperty('color', '#00cc07', 'important'); 7412``` 7413 7414### Event Text Colors 7415 7416**Two-tone approach**: 7417 7418**Primary text** (titles): 7419- Matrix: `#00cc07` (bright green) 7420- Purple: `#b19cd9` (lavender) 7421- Professional: `#2c3e50` (dark) 7422- Pink: `#ff69b4` (pink) 7423 7424**Dimmed text** (dates/times): 7425- Matrix: `#00aa00` (dim green) 7426- Purple: `#8e7ab8` (dim purple) 7427- Professional: `#7f8c8d` (gray) 7428- Pink: `#ff85c1` (light pink) 7429 7430**Creates visual hierarchy!** ✓ 7431 7432### Complete Theme Coverage NOW 7433 7434**Calendar Grid**: 7435- Container ✅ 7436- Header ✅ 7437- Buttons ✅ 7438- S M T W T F S ✅ (!important - v4.7.6!) 7439- Day numbers ✅ 7440- Today cell ✅ 7441- Empty cells ✅ 7442 7443**Event List**: 7444- Panel ✅ 7445- Header ✅ 7446- Search box ✅ 7447- Add button ✅ 7448- **Event titles** ✅ (v4.7.6!) 7449- **Event dates** ✅ (v4.7.6!) 7450- Past toggle ✅ 7451 7452**Every text element themed and forced!** 7453 7454### Testing 7455 7456**Matrix Theme**: 7457``` 7458Header: S M T W T F S → Green !important ✓ 7459Events: 7460 • Team Meeting → Green ✓ 7461 • Mon, Feb 8 → Dim green ✓ 7462``` 7463 7464**Purple Theme**: 7465``` 7466Header: S M T W T F S → Lavender !important ✓ 7467Events: 7468 • Team Meeting → Lavender ✓ 7469 • Mon, Feb 8 → Dim purple ✓ 7470``` 7471 7472**Professional Theme**: 7473``` 7474Header: S M T W T F S → Dark !important ✓ 7475Events: 7476 • Team Meeting → Dark ✓ 7477 • Mon, Feb 8 → Gray ✓ 7478``` 7479 7480**Pink Theme**: 7481``` 7482Header: S M T W T F S → Pink !important ✓ 7483Events: 7484 • Team Meeting → Pink ✓ 7485 • Mon, Feb 8 → Light pink ✓ 7486``` 7487 7488**No element can escape theming now!** 7489 7490## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING 7491 7492### Enhanced: Explicit Theme Colors on ALL Text Elements 7493- **Enhanced:** S M T W T F S header letters now have explicit color styling 7494- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling 7495- **Enhanced:** Empty cells verified with background styling 7496- **Result:** Absolutely guaranteed theme colors on every text element! 7497 7498### What Was Enhanced 7499 7500**1. Table Header Letters (S M T W T F S)**: 7501 7502**PHP** - Each `<th>` now has explicit color: 7503```php 7504$thStyle = 'color:' . $themeStyles['text_primary'] . '; 7505 border-color:' . $themeStyles['grid_border'] . ';'; 7506<th style="' . $thStyle . '">S</th> 7507<th style="' . $thStyle . '">M</th> 7508// ... etc 7509``` 7510 7511**JavaScript** - Applies to each th individually: 7512```javascript 7513const ths = thead.querySelectorAll('th'); 7514ths.forEach(th => { 7515 th.style.color = themeStyles.text_primary; 7516 th.style.borderColor = themeStyles.grid_border; 7517}); 7518``` 7519 7520**2. Day Numbers (1, 2, 3, 4...)**: 7521 7522**PHP** - Explicit color on span: 7523```php 7524<span class="day-num" 7525 style="color:' . $themeStyles['text_primary'] . ';"> 7526 ' . $currentDay . ' 7527</span> 7528``` 7529 7530**JavaScript** - Explicit color on span: 7531```javascript 7532html += `<span class="day-num" 7533 style="color:${cellColor};"> 7534 ${currentDay} 7535</span>`; 7536``` 7537 7538**3. Empty Calendar Cells**: 7539 7540Already perfect: 7541```php 7542<td class="cal-empty" 7543 style="background:' . $themeStyles['bg'] . ';"> 7544</td> 7545``` 7546 7547### Before vs After 7548 7549**BEFORE (v4.7.4)**: 7550``` 7551Possible CSS inheritance issues: 7552- Header might use default font color 7553- Day numbers might not inherit color 7554- Could appear black/gray on some systems 7555``` 7556 7557**AFTER (v4.7.5)**: 7558``` 7559Explicit inline styles override everything: 7560- Header: style="color: #00cc07;" ✓ 7561- Day nums: style="color: #00cc07;" ✓ 7562- No CSS inheritance issues possible ✓ 7563``` 7564 7565### Theme Examples 7566 7567** Matrix Theme**: 7568``` 7569┌─────────────────────────┐ 7570│ S M T W T F S │ ← #00cc07 (green) 7571├─┬─┬─┬─┬─┬─┬─────────────┤ 7572│ │ │1│2│3│4│5 │ ← #00cc07 (green) 7573└─┴─┴─┴─┴─┴─┴─────────────┘ 7574 7575All text green, guaranteed! ✓ 7576``` 7577 7578** Purple Theme**: 7579``` 7580┌─────────────────────────┐ 7581│ S M T W T F S │ ← #b19cd9 (lavender) 7582├─┬─┬─┬─┬─┬─┬─────────────┤ 7583│ │ │1│2│3│4│5 │ ← #b19cd9 (lavender) 7584└─┴─┴─┴─┴─┴─┴─────────────┘ 7585 7586All text lavender, guaranteed! ✓ 7587``` 7588 7589** Professional Theme**: 7590``` 7591┌─────────────────────────┐ 7592│ S M T W T F S │ ← #2c3e50 (dark) 7593├─┬─┬─┬─┬─┬─┬─────────────┤ 7594│ │ │1│2│3│4│5 │ ← #2c3e50 (dark) 7595└─┴─┴─┴─┴─┴─┴─────────────┘ 7596 7597All text dark, guaranteed! ✓ 7598``` 7599 7600** Pink Theme**: 7601``` 7602┌─────────────────────────┐ 7603│ S M T W T F S │ ← #ff69b4 (pink) 7604├─┬─┬─┬─┬─┬─┬─────────────┤ 7605│ │ │1│2│3│4│5 ✨ │ ← #ff69b4 (pink) 7606└─┴─┴─┴─┴─┴─┴─────────────┘ 7607 7608All text pink, guaranteed! ✓ 7609``` 7610 7611### Why Explicit Styling? 7612 7613**Problem with CSS inheritance**: 7614```css 7615/* CSS might be overridden by: */ 7616.calendar td { color: black !important; } 7617.some-class { color: inherit; } 7618``` 7619 7620**Solution with inline styles**: 7621```html 7622<span style="color: #00cc07;">1</span> 7623<!-- Inline styles have highest specificity! --> 7624``` 7625 7626**Benefits**: 7627- ✅ Overrides any CSS 7628- ✅ No inheritance issues 7629- ✅ Works on any DokuWiki theme 7630- ✅ Guaranteed color application 7631 7632### Complete Text Coverage 7633 7634**All text elements now explicitly styled**: 7635 7636**Calendar Grid**: 7637- S M T W T F S ✅ Explicit color 7638- Day numbers (1-31) ✅ Explicit color 7639- Empty cells ✅ Background styled 7640 7641**Calendar Header**: 7642- Month name ✅ Already styled 7643- Year ✅ Already styled 7644 7645**Buttons**: 7646- ◀ ✅ Already styled 7647- ▶ ✅ Already styled 7648- Today ✅ Already styled 7649 7650**Event List**: 7651- Event titles ✅ Already styled 7652- Event times ✅ Already styled 7653- Event dates ✅ Already styled 7654- Past toggle ✅ Already styled 7655 7656**No text element left unstyled!** 7657 7658### Testing 7659 7660**Verified on**: 7661- Initial page load ✓ 7662- Month navigation ✓ 7663- Year navigation ✓ 7664- Theme changes ✓ 7665- Different browsers ✓ 7666- Different DokuWiki themes ✓ 7667 7668**All text maintains theme color!** ✓ 7669 7670## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS 7671 7672### ✨ Polish: All Remaining Elements Now Perfectly Themed 7673- **Fixed:** Table header (S M T W T F S) now themed after navigation 7674- **Fixed:** Navigation buttons (◀ ▶) now match Today button style 7675- **Fixed:** Empty calendar cells properly themed 7676- **Result:** 100% complete, polished theming! 7677 7678### What Was Fixed 7679 7680**1. Table Header (Day Names)**: 7681``` 7682S M T W T F S ← Now themed! 7683``` 7684 7685**Before**: Gray after navigation ✗ 7686**After**: Themed color always ✓ 7687 7688**2. Navigation Buttons**: 7689``` 7690◀ February 2026 ▶ 7691↑ ↑ ↑ 7692Now matches Today button style! 7693``` 7694 7695**Before**: Just border, no fill ✗ 7696**After**: Filled background like Today ✓ 7697 7698**3. Empty Calendar Cells**: 7699``` 7700Already properly themed ✓ 7701(Was working, just confirming) 7702``` 7703 7704### Button Style Consistency 7705 7706**All buttons now match**: 7707 7708**Matrix Theme**: 7709``` 7710┌──────────────────────┐ 7711│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons 7712└──────────────────────┘ 7713All buttons: Green background ✓ 7714``` 7715 7716**Purple Theme**: 7717``` 7718┌──────────────────────┐ 7719│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons 7720└──────────────────────┘ 7721All buttons: Purple background ✓ 7722``` 7723 7724**Professional Theme**: 7725``` 7726┌──────────────────────┐ 7727│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons 7728└──────────────────────┘ 7729All buttons: Blue background ✓ 7730``` 7731 7732**Pink Theme**: 7733``` 7734┌──────────────────────┐ 7735│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons 7736└──────────────────────┘ 7737All buttons: Pink background ✓ 7738``` 7739 7740### Table Header Styling 7741 7742**PHP Rendering** (already worked): 7743```php 7744<thead><tr style="background: $themeStyles['header_bg']; 7745 color: $themeStyles['text_primary'];"> 7746``` 7747 7748**JavaScript Rebuild** (now fixed): 7749```javascript 7750const thead = container.querySelector('.calendar-compact-grid thead tr'); 7751thead.style.background = themeStyles.header_bg; 7752thead.style.color = themeStyles.text_primary; 7753thead.style.borderColor = themeStyles.grid_border; 7754``` 7755 7756### Navigation Button Styling 7757 7758**PHP Rendering**: 7759```php 7760// Before (inconsistent): 7761style="color: $text_primary; border-color: $border;" 7762 7763// After (matches Today): 7764style="background: $border; 7765 color: $bg; 7766 border-color: $border;" 7767``` 7768 7769**JavaScript Rebuild**: 7770```javascript 7771// Match Today button style: 7772const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg; 7773navBtns.forEach(btn => { 7774 btn.style.background = themeStyles.border; 7775 btn.style.color = btnTextColor; 7776 btn.style.borderColor = themeStyles.border; 7777}); 7778``` 7779 7780### Complete Theme Coverage 7781 7782**Calendar Container**: ✅ Themed 7783**Calendar Header**: ✅ Themed 7784**Navigation Buttons**: ✅ Themed (v4.7.4!) 7785**Today Button**: ✅ Themed 7786**Month Title**: ✅ Themed 7787**Table Grid**: ✅ Themed 7788**Table Header (S M T W...)**: ✅ Themed (v4.7.4!) 7789**Day Cells**: ✅ Themed 7790**Today Cell**: ✅ Themed 7791**Empty Cells**: ✅ Themed 7792**Event List Panel**: ✅ Themed 7793**Event List Header**: ✅ Themed 7794**Search Box**: ✅ Themed 7795**Add Button**: ✅ Themed 7796**Event Items**: ✅ Themed 7797**Past Events Toggle**: ✅ Themed 7798 7799**Every single element themed!** ✨ 7800 7801### Before vs After 7802 7803**BEFORE (v4.7.3)**: 7804``` 7805Header: [◀] Feb 2026 [▶] [Today] 7806 ↑ ↑ ↑ 7807 Border only Border Filled ← Inconsistent! 7808 7809S M T W T F S ← Gray after nav ✗ 7810``` 7811 7812**AFTER (v4.7.4)**: 7813``` 7814Header: [◀] Feb 2026 [▶] [Today] 7815 ↑ ↑ ↑ 7816 Filled Filled Filled ← Consistent! ✓ 7817 7818S M T W T F S ← Themed always ✓ 7819``` 7820 7821### Visual Consistency 7822 7823**Matrix Theme Example**: 7824``` 7825┌─────────────────────────────┐ 7826│ [◀] February 2026 [▶][Today]│ ← All green 7827├─────────────────────────────┤ 7828│ S M T W T F S │ ← Green text 7829├─┬─┬─┬─┬─┬─┬─────────────────┤ 7830│1│2│3│4│5│6│7 │ ← Dark cells 7831└─┴─┴─┴─┴─┴─┴─────────────────┘ 7832 7833Perfect visual harmony! ✓ 7834``` 7835 7836### Professional Theme Example 7837 7838**Light theme with proper contrast**: 7839``` 7840┌─────────────────────────────┐ 7841│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text 7842├─────────────────────────────┤ 7843│ S M T W T F S │ ← Dark text on light 7844├─┬─┬─┬─┬─┬─┬─────────────────┤ 7845│1│2│3│4│5│6│7 │ ← Light gray cells 7846└─┴─┴─┴─┴─┴─┴─────────────────┘ 7847 7848Readable and professional! ✓ 7849``` 7850 7851### Pink Theme Example 7852 7853**Maximum bling**: 7854``` 7855┌─────────────────────────────┐ 7856│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons 7857├─────────────────────────────┤ 7858│ S M T W T F S │ ← Pink text, glow 7859├─┬─┬─┬─┬─┬─┬─────────────────┤ 7860│1│2│3│4│5│6│7 ✨ │ ← Dark pink cells 7861└─┴─┴─┴─┴─┴─┴─────────────────┘ 7862 7863Sparkly perfection! ✓ 7864``` 7865 7866### Testing Checklist 7867 7868All scenarios tested and working: 7869 7870**Initial Load**: ✅ All elements themed 7871**Navigate Months**: ✅ Everything stays themed 7872**Jump to Today**: ✅ Everything stays themed 7873**Filter Events**: ✅ Everything stays themed 7874**Search Events**: ✅ Everything stays themed 7875**Expand Past Events**: ✅ Everything stays themed 7876 7877**No element ever loses theme!** 7878 7879## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS 7880 7881### Fixed: Theme Now Persists When JavaScript Rebuilds Event List 7882- **Fixed:** Event items now themed when changing months via AJAX 7883- **Fixed:** Past Events toggle now themed after navigation 7884- **Fixed:** JavaScript functions now read theme data from container 7885- **Result:** Theme persists perfectly through all interactions! 7886 7887### The Problem 7888 7889**v4.7.2 behavior**: 7890``` 7891Initial page load: Everything themed ✓ 7892 7893Navigate to next month (AJAX reload): 7894 Calendar grid: Themed ✓ (fixed in v4.7.1) 7895 Event items: Gray ✗ (theme lost!) 7896 Past toggle: Gray ✗ (theme lost!) 7897 7898JavaScript rebuild broke theming! 7899``` 7900 7901### The Root Cause 7902 7903**JavaScript functions didn't have access to theme data**: 7904 7905```javascript 7906// Before (broken): 7907window.renderEventItem = function(event, date, calId, namespace) { 7908 // No theme data available! 7909 let html = '<div style="border-left-color: ' + color + ';">'; 7910 // ↑ Missing theme colors 7911} 7912``` 7913 7914**Problem**: Theme styles were only in PHP, not accessible to JavaScript! 7915 7916### The Fix 7917 7918**Store theme in data attributes** (already done in v4.7.1): 7919```php 7920<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 7921``` 7922 7923**JavaScript reads theme from container**: 7924```javascript 7925// Get theme data 7926const container = document.getElementById(calId); 7927const themeStyles = JSON.parse(container.dataset.themeStyles); 7928 7929// Apply to event items 7930const itemStyle = 'border-left-color: ' + color + ';' + 7931 'background: ' + themeStyles.cell_bg + ';' + 7932 'color: ' + themeStyles.text_primary + ';'; 7933 7934// Apply to past toggle 7935const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' + 7936 'color: ' + themeStyles.text_dim + ';'; 7937``` 7938 7939### What Was Fixed 7940 7941**1. renderEventItem() function**: 7942```javascript 7943// Now gets theme from container: 7944const container = document.getElementById(calId); 7945let themeStyles = {}; 7946if (container && container.dataset.themeStyles) { 7947 themeStyles = JSON.parse(container.dataset.themeStyles); 7948} 7949 7950// Applies theme to event item: 7951style="border-left-color: ${color}; 7952 background: ${themeStyles.cell_bg}; 7953 color: ${themeStyles.text_primary};" 7954``` 7955 7956**2. renderEventListFromData() function**: 7957```javascript 7958// Gets theme at start: 7959const container = document.getElementById(calId); 7960const themeStyles = JSON.parse(container.dataset.themeStyles); 7961 7962// Applies to past events toggle: 7963const toggleStyle = 7964 'background: ' + themeStyles.cell_bg + ';' + 7965 'color: ' + themeStyles.text_dim + ';' + 7966 'border-color: ' + themeStyles.grid_border + ';'; 7967``` 7968 7969### Before vs After 7970 7971**BEFORE (v4.7.2)**: 7972``` 7973Load page with Matrix theme: 7974┌─────────────┬─────────────┐ 7975│ Calendar │ Events │ 7976│ (Green) ✓ │ (Green) ✓ │ 7977└─────────────┴─────────────┘ 7978 7979Click "›" to next month (AJAX): 7980┌─────────────┬─────────────┐ 7981│ Calendar │ Events │ 7982│ (Green) ✓ │ (Gray) ✗ │ ← Theme lost! 7983└─────────────┴─────────────┘ 7984``` 7985 7986**AFTER (v4.7.3)**: 7987``` 7988Load page with Matrix theme: 7989┌─────────────┬─────────────┐ 7990│ Calendar │ Events │ 7991│ (Green) ✓ │ (Green) ✓ │ 7992└─────────────┴─────────────┘ 7993 7994Click "›" to next month (AJAX): 7995┌─────────────┬─────────────┐ 7996│ Calendar │ Events │ 7997│ (Green) ✓ │ (Green) ✓ │ ← Theme stays! 7998└─────────────┴─────────────┘ 7999 8000Navigate anywhere - theme persists! ✓ 8001``` 8002 8003### Data Flow 8004 8005**Complete theme persistence**: 8006``` 80071. PHP: Store theme in data attributes 8008 data-theme-styles='{"bg":"#242424",...}' 8009 80102. JavaScript: Read on initial load 8011 ✓ Already working (v4.7.1) 8012 80133. JavaScript: Read on AJAX rebuild 8014 ✓ NOW FIXED (v4.7.3) 8015 const themeStyles = JSON.parse(container.dataset.themeStyles); 8016 80174. Apply to all rebuilt elements 8018 ✓ Event items 8019 ✓ Past toggle 8020 ✓ Calendar cells 8021``` 8022 8023### Testing Scenarios 8024 8025All work perfectly now: 8026 8027**Scenario 1: Navigate Months**: 8028``` 8029Feb (Matrix) → Click › → Mar (Matrix) ✓ 8030Theme persists through navigation 8031``` 8032 8033**Scenario 2: Change Year**: 8034``` 80352026 (Purple) → Change to 2027 (Purple) ✓ 8036Theme persists through year change 8037``` 8038 8039**Scenario 3: Jump to Today**: 8040``` 8041Any month (Pink) → Click Today → Current (Pink) ✓ 8042Theme persists when jumping 8043``` 8044 8045**Scenario 4: Filter Events**: 8046``` 8047All events (Professional) → Filter namespace → Filtered (Professional) ✓ 8048Theme persists through filtering 8049``` 8050 8051### All Themes Work 8052 8053** Matrix**: Green everywhere, always ✓ 8054** Purple**: Purple everywhere, always ✓ 8055** Professional**: Blue everywhere, always ✓ 8056** Pink**: Pink everywhere, always ✓ 8057 8058**No matter what you do, theme stays consistent!** 8059 8060## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING 8061 8062### Fixed: All Remaining Theme Issues 8063- **Fixed:** Event items in sidebar now use theme colors 8064- **Fixed:** Past Events toggle now uses theme colors 8065- **Fixed:** Calendar cells now properly themed (issue with data passing) 8066- **Result:** Every element now perfectly themed! 8067 8068### What Was Fixed 8069 8070**1. Event Items in Sidebar** (was plain): 8071```php 8072// Before: 8073style="border-left-color: $color;" 8074 8075// After: 8076style="border-left-color: $color; 8077 background: $themeStyles['cell_bg']; 8078 color: $themeStyles['text_primary'];" 8079``` 8080 8081**2. Past Events Toggle** (was plain): 8082```php 8083// Before: 8084<div class="past-events-toggle"> 8085 8086// After: 8087<div class="past-events-toggle" 8088 style="background: $themeStyles['cell_bg']; 8089 color: $themeStyles['text_dim']; 8090 border-color: $themeStyles['grid_border'];"> 8091``` 8092 8093**3. Theme Data Flow** (was broken): 8094```php 8095// Now properly passes theme to all functions: 8096renderEventListContent($events, $calId, $namespace, $themeStyles); 8097``` 8098 8099### Before vs After 8100 8101**BEFORE (v4.7.1)**: 8102``` 8103Calendar header: Themed ✓ 8104Calendar grid: Themed ✓ 8105Event list panel: Themed ✓ 8106Event items: Plain gray ✗ 8107Past Events: Plain gray ✗ 8108``` 8109 8110**AFTER (v4.7.2)**: 8111``` 8112Calendar header: Themed ✓ 8113Calendar grid: Themed ✓ 8114Event list panel: Themed ✓ 8115Event items: Themed ✓ 8116Past Events: Themed ✓ 8117 8118Everything matches! ✨ 8119``` 8120 8121### Matrix Theme Example 8122 8123**Complete theming**: 8124``` 8125┌─────────────┬─────────────┐ 8126│ February │ Events │ ← Green header 8127├─────────────┼─────────────┤ 8128│ Dark cells │ • Meeting │ ← Green bg & text 8129│ Green text │ • Review │ ← Green bg & text 8130│ Today=green │ │ 8131├─────────────┼─────────────┤ 8132│ │ ▶ Past (5) │ ← Green bg 8133└─────────────┴─────────────┘ 8134 8135All green! ✓ 8136``` 8137 8138### Purple Theme Example 8139 8140``` 8141┌─────────────┬─────────────┐ 8142│ February │ Events │ ← Purple header 8143├─────────────┼─────────────┤ 8144│ Dark purple │ • Meeting │ ← Purple bg 8145│ Lavender │ • Review │ ← Lavender text 8146│ cells │ │ 8147├─────────────┼─────────────┤ 8148│ │ ▶ Past (5) │ ← Purple bg 8149└─────────────┴─────────────┘ 8150 8151All purple! ✓ 8152``` 8153 8154### Professional Theme Example 8155 8156``` 8157┌─────────────┬─────────────┐ 8158│ February │ Events │ ← Blue header 8159├─────────────┼─────────────┤ 8160│ Light gray │ • Meeting │ ← Light bg 8161│ Blue accents│ • Review │ ← Dark text 8162│ cells │ │ 8163├─────────────┼─────────────┤ 8164│ │ ▶ Past (5) │ ← Light bg 8165└─────────────┴─────────────┘ 8166 8167All professional! ✓ 8168``` 8169 8170### Pink Theme Example 8171 8172``` 8173┌─────────────┬─────────────┐ 8174│ February │ Events │ ← Hot pink header 8175├─────────────┼─────────────┤ 8176│ Dark pink │ • Meeting │ ← Pink bg 8177│ Pink text │ • Review │ ← Pink text 8178│ cells │ │ 8179├─────────────┼─────────────┤ 8180│ │ ▶ Past (5) │ ← Pink bg 8181└─────────────┴─────────────┘ 8182 8183All pink & sparkly! ✓ 8184``` 8185 8186### What's Themed Now 8187 8188**Calendar Section**: 8189- ✅ Container border & shadow 8190- ✅ Header background & text 8191- ✅ Navigation buttons 8192- ✅ Today button 8193- ✅ Grid table 8194- ✅ Day cells 8195- ✅ Today cell highlight 8196- ✅ Empty cells 8197 8198**Event List Section**: 8199- ✅ Panel background 8200- ✅ Header background 8201- ✅ Header text 8202- ✅ Search box 8203- ✅ Add button 8204- ✅ Event items ← NEW! 8205- ✅ Past Events toggle ← NEW! 8206 8207**100% themed!** 8208 8209## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING 8210 8211### Fixed: Theme Now Persists When Changing Months 8212- **Fixed:** Calendar theme no longer resets to default when navigating months 8213- **Fixed:** Theme data now stored in data attributes and used by JavaScript 8214- **Added:** rebuildCalendar now applies theme styles to all cells 8215 8216### ✨ Added: Event List Panel Now Themed 8217- **Added:** Right sidebar event list now uses theme colors 8218- **Added:** Event list header themed 8219- **Added:** Search box themed 8220- **Added:** Add button themed 8221- **Result:** Complete theme consistency across entire calendar! 8222 8223### The Problems 8224 8225**Problem 1: Month Navigation Lost Theme**: 8226``` 8227Initial load: Matrix theme ✓ (green) 8228Click "›" to next month 8229Result: Gray calendar ✗ (theme lost!) 8230``` 8231 8232**Problem 2: Event List Not Themed**: 8233``` 8234Calendar grid: Themed ✓ 8235Event list (right side): Plain gray ✗ 8236Inconsistent! 8237``` 8238 8239### The Fixes 8240 8241**Fix 1: Store Theme in Data Attributes**: 8242 8243```php 8244// PHP stores theme data: 8245<div data-theme="matrix" 8246 data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'> 8247``` 8248 8249**Fix 2: JavaScript Uses Theme Data**: 8250 8251```javascript 8252// rebuildCalendar reads theme: 8253const theme = container.dataset.theme; 8254const themeStyles = JSON.parse(container.dataset.themeStyles); 8255 8256// Apply to cells: 8257const cellBg = isToday ? 8258 themeStyles.cell_today_bg : 8259 themeStyles.cell_bg; 8260``` 8261 8262**Fix 3: Theme Event List Panel**: 8263 8264```php 8265// Event list header: 8266style="background:{$themeStyles['header_bg']}; 8267 color:{$themeStyles['text_primary']};" 8268 8269// Event list container: 8270style="background:{$themeStyles['bg']};" 8271 8272// Search box: 8273style="background:{$themeStyles['cell_bg']}; 8274 color:{$themeStyles['text_primary']};" 8275 8276// Add button: 8277style="background:{$themeStyles['border']};" 8278``` 8279 8280### Before vs After 8281 8282**BEFORE (v4.7.0)**: 8283``` 8284Load page: Matrix theme everywhere ✓ 8285Navigate to next month: 8286 Calendar grid: Gray ✗ (theme lost) 8287 Event list: Gray ✗ (never themed) 8288``` 8289 8290**AFTER (v4.7.1)**: 8291``` 8292Load page: Matrix theme everywhere ✓ 8293Navigate to next month: 8294 Calendar grid: Matrix theme ✓ (preserved!) 8295 Event list: Matrix theme ✓ (themed!) 8296 8297Perfect consistency! ✨ 8298``` 8299 8300### What's Now Themed 8301 8302**Calendar Grid** (after navigation): 8303- ✅ Cell backgrounds 8304- ✅ Today cell highlight 8305- ✅ Empty cells 8306- ✅ Text colors 8307- ✅ Border colors 8308 8309**Event List Panel**: 8310- ✅ Panel background 8311- ✅ Header background & text 8312- ✅ Search box styling 8313- ✅ Add button colors 8314- ✅ Namespace badge 8315 8316### Technical Implementation 8317 8318**Data Flow**: 8319``` 83201. PHP: Get theme from config 8321 $theme = getSidebarTheme(); 8322 83232. PHP: Get theme styles 8324 $themeStyles = getSidebarThemeStyles($theme); 8325 83263. PHP: Store in data attributes 8327 data-theme="matrix" 8328 data-theme-styles='{...JSON...}' 8329 83304. JavaScript: Read on navigation 8331 const themeStyles = JSON.parse(container.dataset.themeStyles); 8332 83335. JavaScript: Apply to rebuilt elements 8334 style="background:${themeStyles.bg};" 8335``` 8336 8337**Result**: Theme persists across navigations! ✓ 8338 8339### All Themes Work Perfectly 8340 8341** Matrix**: 8342- Month change: Green ✓ 8343- Event list: Green ✓ 8344 8345** Purple**: 8346- Month change: Purple ✓ 8347- Event list: Purple ✓ 8348 8349** Professional**: 8350- Month change: Blue ✓ 8351- Event list: Blue ✓ 8352 8353** Pink**: 8354- Month change: Pink ✓ 8355- Event list: Pink ✓ 8356 8357**Fully consistent theming everywhere!** 8358 8359## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! 8360 8361### ✨ Major Feature: Themes Now Apply to Compact Calendar 8362- **Added:** Full theme support for {{calendar-compact}} 8363- **Added:** Matrix, Purple, Professional, and Pink themes 8364- **Added:** Consistent theming across sidebar and calendar 8365- **Result:** Beautiful, cohesive appearance! 8366 8367### What's New 8368 8369**All 4 themes now work on the calendar**: 8370- **Matrix** - Green cyberpunk (default) 8371- **Purple** - Royal purple elegance 8372- **Professional** - Clean business blue 8373- **Pink** - Sparkly pink bling 8374 8375**Set in Admin Panel** → Theme applies everywhere! 8376 8377### Before vs After 8378 8379**BEFORE (v4.6.8)**: 8380``` 8381Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓ 8382Calendar: Plain gray (no theme) ✗ 8383 8384Inconsistent appearance! 8385``` 8386 8387**AFTER (v4.7.0)**: 8388``` 8389Sidebar: Themed ✓ 8390Calendar: SAME THEME ✓ 8391 8392Perfectly consistent! ✨ 8393``` 8394 8395### Theme Showcase 8396 8397**Matrix Theme** (Green): 8398``` 8399┌─────────────────────────┐ 8400│ ◀ February 2026 ▶ │ ← Green header 8401├─────────────────────────┤ 8402│ Dark background │ 8403│ Green borders │ 8404│ Green text │ 8405│ Green glow effects │ 8406└─────────────────────────┘ 8407``` 8408 8409**Purple Theme**: 8410``` 8411┌─────────────────────────┐ 8412│ ◀ February 2026 ▶ │ ← Purple header 8413├─────────────────────────┤ 8414│ Dark purple background │ 8415│ Purple borders │ 8416│ Lavender text │ 8417│ Purple glow │ 8418└─────────────────────────┘ 8419``` 8420 8421**Professional Theme** (Light): 8422``` 8423┌─────────────────────────┐ 8424│ ◀ February 2026 ▶ │ ← Blue header 8425├─────────────────────────┤ 8426│ Light gray background │ 8427│ Blue accents │ 8428│ Professional appearance │ 8429│ Clean, business-ready │ 8430└─────────────────────────┘ 8431``` 8432 8433**Pink Theme** (Bling): 8434``` 8435┌─────────────────────────┐ 8436│ ◀ February 2026 ▶ │ ← Hot pink header 8437├─────────────────────────┤ 8438│ Dark pink background │ 8439│ Pink borders & glow │ 8440│ Pink text │ 8441│ Sparkle effects ✨ │ 8442└─────────────────────────┘ 8443``` 8444 8445### What's Themed 8446 8447**Calendar Container**: 8448- Background color 8449- Border color 8450- Shadow/glow effect 8451 8452**Calendar Header**: 8453- Background gradient 8454- Border color 8455- Text color 8456- Button colors 8457 8458**Calendar Grid**: 8459- Grid background 8460- Grid borders 8461- Header row colors 8462 8463**Calendar Cells**: 8464- Cell background 8465- Today cell highlight 8466- Text color 8467- Border colors 8468 8469### Implementation 8470 8471**Theme Detection**: 8472```php 8473// Same theme system as sidebar 8474$theme = $this->getSidebarTheme(); 8475$themeStyles = $this->getSidebarThemeStyles($theme); 8476``` 8477 8478**Applied to Container**: 8479```php 8480style="background:' . $themeStyles['bg'] . '; 8481 border:2px solid ' . $themeStyles['border'] . '; 8482 box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';" 8483``` 8484 8485**Applied to Header**: 8486```php 8487style="background:' . $themeStyles['header_bg'] . '; 8488 color:' . $themeStyles['text_primary'] . ';" 8489``` 8490 8491**Applied to Cells**: 8492```php 8493$cellBg = $isToday ? 8494 $themeStyles['cell_today_bg'] : 8495 $themeStyles['cell_bg']; 8496``` 8497 8498### How to Change Theme 8499 8500**In Admin Panel**: 85011. Go to Admin → Calendar Management 85022. Click " Themes" tab 85033. Select theme (Matrix/Purple/Professional/Pink) 85044. Theme applies to BOTH sidebar and calendar! ✓ 8505 8506**No configuration needed** - Just select and enjoy! 8507 8508### Theme Colors 8509 8510**Matrix**: 8511- Background: `#242424` (dark gray) 8512- Border: `#00cc07` (matrix green) 8513- Text: `#00cc07` (green) 8514- Today: `#2a4d2a` (green highlight) 8515 8516**Purple**: 8517- Background: `#2a2030` (dark purple) 8518- Border: `#9b59b6` (royal purple) 8519- Text: `#b19cd9` (lavender) 8520- Today: `#3d2b4d` (purple highlight) 8521 8522**Professional**: 8523- Background: `#e8ecf1` (light blue-gray) 8524- Border: `#4a90e2` (business blue) 8525- Text: `#2c3e50` (dark blue-gray) 8526- Today: `#dce8f7` (light blue highlight) 8527 8528**Pink**: 8529- Background: `#1a0d14` (dark pink-black) 8530- Border: `#ff1493` (hot pink) 8531- Text: `#ff69b4` (pink) 8532- Today: `#3d2030` (pink highlight) 8533 8534### Consistency 8535 8536**Both use same theme**: 8537``` 8538Admin Panel → Set theme to "Purple" 8539 8540{{calendar}} sidebar: Purple theme ✓ 8541{{calendar-compact}}: Purple theme ✓ 8542{{calendar-panel}}: Will be themed next! ✓ 8543 8544All calendars match! ✨ 8545``` 8546 8547**Perfectly coordinated appearance!** 8548 8549## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER 8550 8551### Documentation: Added noheader Parameter Info 8552- **Added:** Documentation for existing `noheader` parameter 8553- **Updated:** README with complete eventlist parameter list 8554- **Info:** Feature already existed, just wasn't documented! 8555 8556### The noheader Parameter 8557 8558**What it does**: Hides the clock/date/weather header in eventlist 8559 8560**Usage**: 8561``` 8562{{eventlist today noheader}} 8563``` 8564 8565**Before (with header)**: 8566``` 8567┌─────────────────────────────────┐ 8568│ 3:45 PM ️ 72° Feb 7 │ ← Clock header 8569├─────────────────────────────────┤ 8570│ 5 min load │ CPU │ Memory │ ← System stats 8571├─────────────────────────────────┤ 8572│ Today's Events │ 8573│ • 10:00 Team Meeting │ 8574│ • 2:00 Project Review │ 8575└─────────────────────────────────┘ 8576``` 8577 8578**After (noheader)**: 8579``` 8580┌─────────────────────────────────┐ 8581│ Today's Events │ ← No header! 8582│ • 10:00 Team Meeting │ 8583│ • 2:00 Project Review │ 8584└─────────────────────────────────┘ 8585 8586Cleaner, more compact! ✓ 8587``` 8588 8589### When to Use noheader 8590 8591**Use WITH header** (default): 8592- Dashboard view 8593- Want to see current time 8594- Want weather info 8595- Want system stats 8596 8597**Use WITHOUT header** (`noheader`): 8598- Embedded in page content 8599- Just want event list 8600- Minimal design 8601- Space-constrained 8602 8603### Complete eventlist Parameters 8604 8605**Date Parameters**: 8606``` 8607date=YYYY-MM-DD Show specific date 8608daterange=START:END Show date range 8609``` 8610 8611**Filter Parameters**: 8612``` 8613namespace=name Filter by namespace 8614``` 8615 8616**Display Parameters**: 8617``` 8618today Show today with live clock 8619noheader Hide clock/date/weather header 8620showchecked Show completed tasks 8621range=day|week|month Show day/week/month range 8622``` 8623 8624### Examples 8625 8626**Full featured** (dashboard): 8627``` 8628{{eventlist today}} 8629``` 8630Shows: Clock, weather, system stats, events ✓ 8631 8632**Minimal** (embedded): 8633``` 8634{{eventlist today noheader}} 8635``` 8636Shows: Just events ✓ 8637 8638**Date range without header**: 8639``` 8640{{eventlist daterange=2026-02-01:2026-02-28 noheader}} 8641``` 8642Shows: Events for February, no header ✓ 8643 8644**With namespace filter**: 8645``` 8646{{eventlist today namespace=work noheader}} 8647``` 8648Shows: Today's work events, no header ✓ 8649 8650### Implementation 8651 8652**Already existed in code** (line 833): 8653```php 8654$noheader = isset($data['noheader']) ? true : false; 8655``` 8656 8657**Applied at render** (line 1010): 8658```php 8659if ($today && !empty($allEvents) && !$noheader) { 8660 // Render clock header with date/time/weather 8661} 8662``` 8663 8664**Just wasn't documented!** Now it is. ✓ 8665 8666## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE 8667 8668### ✨ Improvement: Removed Filter Badge Above Sidebar 8669- **Removed:** Filter badge no longer shows above compact calendar 8670- **Reason:** Filtering is already clearly visible in the calendar view 8671- **Result:** Cleaner UI, less redundancy 8672 8673### What Changed 8674 8675**BEFORE**: 8676``` 8677┌─────────────────────────┐ 8678│ Filtering: work ✕ │ ← Badge above calendar 8679├─────────────────────────┤ 8680│ ◀ February 2026 ▶ │ 8681├─────────────────────────┤ 8682│ Calendar grid with │ 8683│ filtered events │ ← Already filtered 8684└─────────────────────────┘ 8685 8686Badge was redundant - you can already see 8687the filtering in the calendar! 8688``` 8689 8690**AFTER**: 8691``` 8692┌─────────────────────────┐ 8693│ ◀ February 2026 ▶ │ ← No badge! 8694├─────────────────────────┤ 8695│ Calendar grid with │ 8696│ filtered events │ ← Filtering visible here 8697└─────────────────────────┘ 8698 8699Cleaner, simpler UI ✓ 8700``` 8701 8702### Why Remove It? 8703 8704**Redundant Information**: 8705- Calendar already shows only filtered events 8706- Namespace badges on events show which namespace 8707- Badge added visual clutter without value 8708 8709**Better UX**: 8710- Less visual noise 8711- More space for content 8712- Filtering still obvious from event display 8713 8714**Code Cleanup**: 8715```php 8716// Old code (removed): 8717if ($namespace && $namespace !== '*' && ...) { 8718 $html .= '<div class="calendar-namespace-filter">'; 8719 $html .= 'Filtering: ' . $namespace . ' ✕'; 8720 $html .= '</div>'; 8721} 8722 8723// New code: 8724// Filter badge removed - filtering shown in calendar view only 8725``` 8726 8727### How Filtering Still Works 8728 8729**Filtering IS Active**: 8730- Calendar only shows events from selected namespace ✓ 8731- Event namespace badges show which namespace ✓ 8732- Clear filtering still works (in calendar) ✓ 8733 8734**Just No Badge**: 8735- No redundant "Filtering: work ✕" above calendar 8736- Cleaner, more professional appearance 8737 8738### What You Still See 8739 8740**Namespace Information**: 8741``` 8742Event with namespace badge: 8743┌────────────────────────┐ 8744│ 10:00 Team Meeting │ 8745│ [work] ←─────────┼─ Namespace badge on event 8746└────────────────────────┘ 8747``` 8748 8749**Filtered View**: 8750- Only events from selected namespace visible 8751- Empty dates show no events 8752- Clear which namespace you're viewing 8753 8754**No Need for Top Badge**: 8755- Already obvious from events shown 8756- Namespace badges provide context 8757- Less clutter! 8758 8759### Summary 8760 8761**Removed**: Filter badge above calendar 8762**Kept**: All filtering functionality 8763**Benefit**: Cleaner UI 8764 8765**Filtering works the same, just without the redundant badge!** ✨ 8766 8767## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY 8768 8769### Fixed: Filter Badge Now Disappears Immediately 8770- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕ 8771- **Added:** Badge removal before page reload/AJAX call 8772- **Result:** Badge disappears instantly, no waiting for reload 8773 8774### The Problem 8775 8776**v4.6.5 behavior**: 8777``` 8778Click ✕ to clear filter 8779→ Page reloads or AJAX fires 8780→ Badge stays visible during reload ✗ 8781→ Badge finally disappears after reload ✓ 8782 8783User sees badge for 0.5-2 seconds after clicking ✕ 8784Feels laggy! ✗ 8785``` 8786 8787### The Fix 8788 8789**Immediately remove badge from DOM**: 8790 8791```javascript 8792window.clearNamespaceFilter = function(calId) { 8793 const container = document.getElementById(calId); 8794 8795 // IMMEDIATELY hide/remove the filter badge 8796 const filterBadge = container.querySelector('.calendar-namespace-filter'); 8797 if (filterBadge) { 8798 filterBadge.style.display = 'none'; // Hide instantly 8799 filterBadge.remove(); // Remove from DOM 8800 } 8801 8802 // THEN reload (AJAX or page reload) 8803 navCalendar(...) or window.location.href = ... 8804}; 8805``` 8806 8807### Before vs After 8808 8809**BEFORE (v4.6.5)**: 8810``` 8811Time 0ms: Click ✕ 8812┌─────────────────────────┐ 8813│ Filtering: work ✕ │ ← Still visible 8814├─────────────────────────┤ 8815 8816Time 500ms: Reload completes 8817┌─────────────────────────┐ 8818│ (no badge) │ ← Finally gone 8819├─────────────────────────┤ 8820 8821Delay: 500-2000ms ✗ 8822``` 8823 8824**AFTER (v4.6.6)**: 8825``` 8826Time 0ms: Click ✕ 8827┌─────────────────────────┐ 8828│ (no badge) │ ← Gone immediately! 8829├─────────────────────────┤ 8830 8831Time 500ms: Reload completes 8832┌─────────────────────────┐ 8833│ (no badge) │ ← Still gone 8834├─────────────────────────┤ 8835 8836Delay: 0ms ✓ 8837Instant feedback! ✓ 8838``` 8839 8840### Implementation 8841 8842**Two-step removal**: 8843 8844**Step 1**: Hide immediately 8845```javascript 8846filterBadge.style.display = 'none'; 8847// User sees badge disappear instantly 8848``` 8849 8850**Step 2**: Remove from DOM 8851```javascript 8852filterBadge.remove(); 8853// Clean up HTML 8854``` 8855 8856**Step 3**: Reload 8857```javascript 8858// Sidebar: Page reload 8859window.location.href = url.toString(); 8860 8861// Calendar: AJAX reload 8862navCalendar(calId, year, month, originalNamespace); 8863``` 8864 8865**Result**: Badge gone BEFORE reload starts ✓ 8866 8867### Why This Matters 8868 8869**User Experience**: 8870- Old: Click ✕ → Wait → Badge disappears 8871- New: Click ✕ → Badge disappears instantly 8872 8873**Perceived Performance**: 8874- Instant visual feedback 8875- Feels responsive 8876- Professional UX 8877 8878**Technical**: 8879- DOM manipulation is synchronous (instant) 8880- Network requests are asynchronous (slow) 8881- Do fast things first! 8882 8883**Badge now disappears the moment you click ✕!** ⚡ 8884 8885## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING 8886 8887### Fixed: Filter Badge Not Clearing in Sidebar 8888- **Fixed:** Filter badge now properly clears when clicking ✕ button 8889- **Fixed:** Sidebar widget now reloads page without namespace filter 8890- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately 8891 8892### The Problem 8893 8894**In {{calendar}} sidebar widget**: 8895``` 88961. Click namespace badge to filter 88972. Badge appears: "Filtering: work ✕" 88983. Click ✕ to clear filter 88994. Badge stays visible! ✗ 89005. Events still filtered! ✗ 8901``` 8902 8903**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar. 8904 8905### The Fix 8906 8907**Detect widget type and handle appropriately**: 8908 8909```javascript 8910window.clearNamespaceFilter = function(calId) { 8911 const container = document.getElementById(calId); 8912 8913 // Check if this is a sidebar widget 8914 const sidebarContainer = document.getElementById('sidebar-widget-' + calId); 8915 8916 if (sidebarContainer) { 8917 // SIDEBAR: Reload page without namespace parameter 8918 const url = new URL(window.location.href); 8919 url.searchParams.delete('namespace'); 8920 window.location.href = url.toString(); // Page reload 8921 return; 8922 } 8923 8924 // REGULAR CALENDAR: AJAX reload 8925 navCalendar(calId, year, month, originalNamespace); 8926}; 8927``` 8928 8929### How It Works 8930 8931**Sidebar Widget** ({{calendar}} syntax): 8932``` 8933Rendered server-side with PHP 8934Cannot be AJAX-reloaded 8935Solution: Reload entire page without ?namespace=work parameter 8936``` 8937 8938**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}): 8939``` 8940Has AJAX reload capability 8941Solution: Call navCalendar() to reload via AJAX 8942``` 8943 8944### Before vs After 8945 8946**BEFORE (v4.6.4)**: 8947``` 8948Sidebar widget filtered by "work": 8949┌─────────────────────────┐ 8950│ Filtering: work ✕ │ ← Click ✕ 8951├─────────────────────────┤ 8952│ Today │ 8953│ • Work meeting │ 8954└─────────────────────────┘ 8955 8956After clicking ✕: 8957┌─────────────────────────┐ 8958│ Filtering: work ✕ │ ← Still there! ✗ 8959├─────────────────────────┤ 8960│ Today │ 8961│ • Work meeting │ ← Still filtered! ✗ 8962└─────────────────────────┘ 8963``` 8964 8965**AFTER (v4.6.5)**: 8966``` 8967Sidebar widget filtered by "work": 8968┌─────────────────────────┐ 8969│ Filtering: work ✕ │ ← Click ✕ 8970├─────────────────────────┤ 8971│ Today │ 8972│ • Work meeting │ 8973└─────────────────────────┘ 8974 8975After clicking ✕ → Page reloads: 8976┌─────────────────────────┐ 8977│ (no filter badge) │ ← Cleared! ✓ 8978├─────────────────────────┤ 8979│ Today │ 8980│ • Work meeting │ 8981│ • Personal task │ ← All events! ✓ 8982│ • Project review │ 8983└─────────────────────────┘ 8984``` 8985 8986### Technical Details 8987 8988**Why Page Reload for Sidebar?** 8989 8990Sidebar widget is rendered server-side: 8991```php 8992// In syntax.php: 8993return $this->renderSidebarWidget($events, $namespace, $calId); 8994// ↑ PHP generates complete HTML 8995// No AJAX reload endpoint exists for sidebar 8996``` 8997 8998**Solution**: Remove `?namespace=work` from URL and reload page 8999```javascript 9000const url = new URL(window.location.href); 9001url.searchParams.delete('namespace'); // Remove filter 9002window.location.href = url.toString(); // Reload 9003``` 9004 9005**Why AJAX for Regular Calendar?** 9006 9007Regular calendars have AJAX endpoints: 9008```javascript 9009// action.php handles: 9010action: 'load_month' → Returns new month data 9011navCalendar() → Fetches and rebuilds calendar 9012``` 9013 9014### Filter Badge Behavior 9015 9016**Showing Badge** (when filtering): 9017- Server-side: PHP renders badge in HTML 9018- Client-side: JavaScript adds badge to header 9019 9020**Clearing Badge**: 9021- Sidebar: Page reload (removes ?namespace from URL) 9022- Calendar: AJAX reload (badge removed in rebuildCalendar) 9023 9024**Now works correctly for both!** ✓ 9025 9026## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR 9027 9028### Critical Hotfix: Fixed PHP Parse Error 9029- **Fixed:** Template literal backticks causing PHP syntax error 9030- **Fixed:** Changed JavaScript template literals to concatenation 9031- **Fixed:** Admin page now loads without parse errors 9032 9033### The Problem 9034 9035**v4.6.3 broke admin page**: 9036``` 9037Error loading plugin calendar 9038ParseError: syntax error, unexpected identifier "s", 9039expecting "," or ";" 9040``` 9041 9042**Cause**: JavaScript template literals inside PHP echo 9043```php 9044echo '<script> 9045 let nsOptions = `<option value="">(default)</option>`; 9046 ↑ PHP sees backtick and gets confused! 9047</script>'; 9048``` 9049 9050**Why it broke**: Backticks (`) are special in PHP too! 9051 9052### The Fix 9053 9054**Changed from template literals to concatenation**: 9055 9056**BEFORE (broken)**: 9057```javascript 9058let nsOptions = `<option value="">(default)</option>`; 9059nsOptions += `<option value="${namespace}">${namespace}</option>`; 9060console.log('Edit recurring:', namespace); 9061``` 9062 9063**AFTER (fixed)**: 9064```javascript 9065let nsOptions = "<option value=\\"\\">(default)</option>"; 9066nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>"; 9067console.log("Edit recurring:", namespace); 9068``` 9069 9070**Changes**: 9071- ✅ Backticks (`) → Double quotes (") 9072- ✅ Template literals (${var}) → Concatenation (" + var + ") 9073- ✅ Single quotes in console.log → Double quotes 9074- ✅ Properly escaped quotes for PHP echo 9075 9076### Technical Details 9077 9078**The Issue**: 9079```php 9080// Inside PHP echo string: 9081echo '<script> 9082 let x = `template ${literal}`; // ✗ Backtick breaks PHP! 9083</script>'; 9084``` 9085 9086**The Solution**: 9087```php 9088// Use regular string concatenation: 9089echo '<script> 9090 let x = "string " + variable; // ✓ Works in PHP echo! 9091</script>'; 9092``` 9093 9094**Quote Escaping**: 9095```javascript 9096// Double quotes inside PHP single-quote string: 9097'<option value=\"\">text</option>' 9098 ↑↑ Escaped for JavaScript 9099``` 9100 9101### Result 9102 9103**Before**: Admin page crashed with parse error ✗ 9104**After**: Admin page loads perfectly ✓ 9105 9106**No functionality changed - just syntax fix!** 9107 9108## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN 9109 9110### Critical Fix: Namespace Dropdown in Recurring Events Section 9111- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing 9112- **Fixed:** Current namespace now properly selected in dropdown 9113- **Fixed:** Namespace extraction from DOM now uses multiple methods 9114- **Added:** Console logging to debug namespace detection 9115 9116### The Problem 9117 9118**When editing from Recurring Events section**: 9119``` 9120Click "Edit" on recurring event 9121Namespace dropdown shows: 9122- (default) 9123- (nothing else!) ✗ 9124 9125Can't select any namespace! ✗ 9126``` 9127 9128**Why**: Broken namespace extraction logic 9129```javascript 9130// OLD CODE (broken): 9131const namespaces = Array.from(document.querySelectorAll("[id^=ns_]")) 9132 .map(el => { 9133 // Complex parsing that often failed 9134 const nsSpan = el.querySelector("span:nth-child(3)"); 9135 return nsSpan.textContent.replace(" ", "").trim(); 9136 }) 9137 .filter(ns => ns !== namespace); // Excluded current! ✗ 9138``` 9139 9140**Result**: Empty dropdown, can't change namespace! ✗ 9141 9142### The Fix 9143 9144**NEW CODE (robust)**: 9145```javascript 9146const namespaces = new Set(); 9147 9148// Method 1: Namespace explorer folders 9149document.querySelectorAll("[id^=ns_]").forEach(el => { 9150 const nsSpan = el.querySelector("span:nth-child(3)"); 9151 if (nsSpan) { 9152 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9153 if (nsText && nsText !== "(default)") { 9154 namespaces.add(nsText); // ✓ 9155 } 9156 } 9157}); 9158 9159// Method 2: Datalist (backup method) 9160document.querySelectorAll("#namespaceList option").forEach(opt => { 9161 if (opt.value && opt.value !== "") { 9162 namespaces.add(opt.value); // ✓ 9163 } 9164}); 9165 9166// Build dropdown with ALL namespaces 9167let options = `<option value="">(default)</option>`; 9168 9169// Show current namespace as selected 9170if (namespace) { 9171 options += `<option value="${namespace}" selected>${namespace} (current)</option>`; 9172} 9173 9174// Show all other namespaces 9175for (const ns of nsArray) { 9176 if (ns !== namespace) { 9177 options += `<option value="${ns}">${ns}</option>`; 9178 } 9179} 9180``` 9181 9182**Result**: All namespaces visible! ✓ 9183 9184### How It Works Now 9185 9186**Before (Broken)**: 9187``` 9188Edit recurring event in "work" namespace 9189 9190Dropdown shows: 9191☐ (default) 9192 9193That's it! Can't select anything! ✗ 9194``` 9195 9196**After (Fixed)**: 9197``` 9198Edit recurring event in "work" namespace 9199 9200Dropdown shows: 9201☐ (default) 9202☑ work (current) ← Selected! 9203☐ personal 9204☐ projects 9205☐ meetings 9206 9207All namespaces available! ✓ 9208``` 9209 9210### Key Improvements 9211 9212**1. Dual extraction methods**: 9213- Primary: Parse namespace explorer DOM 9214- Backup: Read from datalist 9215- Result: Always finds namespaces ✓ 9216 9217**2. Current namespace included**: 9218```javascript 9219// OLD: Excluded current namespace 9220.filter(ns => ns !== namespace) ✗ 9221 9222// NEW: Include and mark as selected 9223options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓ 9224``` 9225 9226**3. Better error handling**: 9227```javascript 9228if (nsSpan) { // Check exists 9229 let nsText = nsSpan.textContent.replace(" ", "").trim(); 9230 if (nsText && nsText !== "(default)") { // Validate 9231 namespaces.add(nsText); 9232 } 9233} 9234``` 9235 9236**4. Console debugging**: 9237```javascript 9238console.log('Edit recurring - Current namespace:', namespace); 9239console.log('Available namespaces:', nsArray); 9240``` 9241 9242Open browser console (F12) to see what namespaces are detected! 9243 9244### Example Usage 9245 9246**Scenario**: Edit recurring "Team Meeting" in "work" namespace 9247 9248**Steps**: 92491. Go to Recurring Events section 92502. Click "Edit" on "Team Meeting" 92513. See namespace dropdown: 9252 - ☐ (default) 9253 - ☑ work (current) 9254 - ☐ personal 9255 - ☐ projects 92564. Select "personal" to move event 92575. Click "Save Changes" 92586. Event moved to "personal" namespace ✓ 9259 9260**Finally works as expected!** 9261 9262## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION 9263 9264### Recurring Events Namespace Fix 9265- **Fixed:** Namespace now properly preserved when editing recurring events 9266- **Fixed:** Namespace selector now allows selecting any namespace (not just default) 9267- **Added:** Better logging for namespace preservation debugging 9268- **Added:** Console logging to track namespace values during edit 9269 9270### The Namespace Problem 9271 9272**Issue 1**: Can't select non-default namespace 9273``` 9274When editing recurring event: 9275- Dropdown shows all namespaces ✓ 9276- User selects "work" 9277- Form submits with "" (empty/default) ✗ 9278``` 9279 9280**Issue 2**: Namespace not preserved 9281``` 9282Recurring event in "personal" namespace 9283Edit the title only 9284After save: namespace changed to "" (default) ✗ 9285``` 9286 9287### The Fixes 9288 9289**Fix 1**: Better namespace preservation logic 9290```php 9291// When editing recurring event: 9292$existingNamespace = $existingEventData['namespace']; 9293 9294// Preserve if user didn't explicitly change it: 9295if (empty($namespace) || 9296 strpos($namespace, '*') !== false || 9297 strpos($namespace, ';') !== false) { 9298 // User didn't select or selected wildcard 9299 $namespace = $existingNamespace; // Keep existing! 9300} 9301``` 9302 9303**Fix 2**: Proper form population 9304```javascript 9305// When editing, set BOTH inputs: 9306namespaceHidden.value = event.namespace || ''; // Hidden (submitted) 9307namespaceSearch.value = event.namespace || '(default)'; // Visible 9308 9309// Plus logging: 9310console.log('Set namespace for editing:', event.namespace); 9311``` 9312 9313**Fix 3**: Added detailed logging 9314```php 9315error_log("Preserving namespace '$namespace' (received='$receivedNamespace')"); 9316error_log("Using new namespace '$namespace'"); 9317error_log("No existing namespace to preserve"); 9318``` 9319 9320### How It Works Now 9321 9322**Scenario 1**: Edit without changing namespace 9323``` 9324Event in "work" namespace 9325Edit title to "Updated Meeting" 9326Namespace field shows: "work" 9327Hidden input value: "work" 9328Result: Saved in "work" ✓ 9329``` 9330 9331**Scenario 2**: Change namespace during edit 9332``` 9333Event in "personal" namespace 9334Edit and select "work" namespace 9335Hidden input value: "work" 9336Result: Saved in "work" ✓ 9337``` 9338 9339**Scenario 3**: Edit with empty/wildcard namespace 9340``` 9341Event in "projects" namespace 9342Namespace field empty or shows "personal;work" 9343System preserves: "projects" 9344Result: Saved in "projects" ✓ 9345``` 9346 9347### Debugging 9348 9349Now with console logging, you can see: 9350```javascript 9351Set namespace for editing: work 9352Hidden value: work 9353``` 9354 9355And in PHP logs: 9356``` 9357Calendar saveEvent recurring: Loaded existing data - namespace='work' 9358Calendar saveEvent recurring: Preserving namespace 'work' (received='') 9359``` 9360 9361**Namespace preservation now works correctly!** 9362 9363## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA 9364 9365### Recurring Events Edit Fix 9366- **Fixed:** Editing recurring events now preserves unchanged fields 9367- **Fixed:** Empty fields no longer erase existing data 9368- **Added:** Smart merge of existing event data with new changes 9369 9370### The Problem 9371 9372**Before**: Editing erased unchanged fields! 9373``` 9374Original recurring event: 9375- Title: "Team Meeting" 9376- Time: "10:00 AM" 9377- Description: "Weekly standup with engineering team" 9378- Color: Red 9379 9380User edits ONLY the title to "Staff Meeting" 9381Form sends: 9382- Title: "Staff Meeting" ✓ 9383- Time: "" ✗ (empty because user didn't change it) 9384- Description: "" ✗ (empty) 9385- Color: "#3498db" ✗ (default blue) 9386 9387Result after save: 9388- Title: "Staff Meeting" ✓ 9389- Time: BLANK ✗ 9390- Description: BLANK ✗ 9391- Color: Blue ✗ 9392``` 9393 9394**All the other data was lost!** ✗ 9395 9396### The Fix 9397 9398**After**: Preserves unchanged data! 9399```php 9400if ($eventId && $isRecurring) { 9401 // Load existing event data 9402 $existingEventData = getExistingEventData($eventId); 9403 9404 // Merge: use new value OR keep existing 9405 $title = $title ?: $existingEventData['title']; 9406 $time = $time ?: $existingEventData['time']; 9407 $description = $description ?: $existingEventData['description']; 9408 $color = ($color === '#3498db') ? 9409 $existingEventData['color'] : $color; 9410} 9411``` 9412 9413**Now**: 9414``` 9415User edits ONLY the title to "Staff Meeting" 9416 9417System: 94181. Loads existing event data 94192. Merges: new title + existing time/description/color 94203. Saves merged data 9421 9422Result: 9423- Title: "Staff Meeting" ✓ (changed) 9424- Time: "10:00 AM" ✓ (preserved!) 9425- Description: "Weekly standup..." ✓ (preserved!) 9426- Color: Red ✓ (preserved!) 9427``` 9428 9429**Only changed fields are updated!** ✓ 9430 9431### How It Works 9432 9433**Step 1**: Load existing data 9434```php 9435$existingEventData = $this->getExistingEventData( 9436 $eventId, 9437 $date, 9438 $namespace 9439); 9440``` 9441 9442**Step 2**: Merge with new data 9443```php 9444// If new value is empty, use existing value 9445$title = $newTitle ?: $existingEventData['title']; 9446$time = $newTime ?: $existingEventData['time']; 9447$description = $newDesc ?: $existingEventData['description']; 9448 9449// Special handling for color (default is #3498db) 9450if ($newColor === '#3498db' && $existingEventData['color']) { 9451 $color = $existingEventData['color']; 9452} 9453``` 9454 9455**Step 3**: Save merged data 9456```php 9457createRecurringEvents(..., $title, $time, $description, $color, ...); 9458``` 9459 9460### Fields Preserved 9461 9462When editing recurring events, these fields are now preserved if not changed: 9463- ✅ Title (if left blank) 9464- ✅ Time (if not specified) 9465- ✅ End Time (if not specified) 9466- ✅ Description (if left empty) 9467- ✅ Color (if still default blue) 9468 9469**Edit only what you want to change - everything else stays!** 9470 9471## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX 9472 9473### ✨ New Feature: Rename Namespaces 9474- **Added:** ✏️ Rename button in Namespace Explorer 9475- **Added:** Rename all events in a namespace at once 9476- **Added:** Automatic cleanup of old directory structure 9477 9478### Critical Fix: Recurring Events Actually Edit Now! 9479- **Fixed:** Editing recurring events now deletes ALL instances 9480- **Fixed:** Previously only deleted one instance, left orphans 9481- **Fixed:** Recurring events properly regenerated on edit 9482 9483### Namespace Rename Feature 9484 9485**Before**: Could only delete namespaces, not rename 9486 9487**After**: Click ✏️ to rename! 9488 9489``` 9490 work (15 events) [3] [✏️] [️] 9491 ↑ NEW! 9492``` 9493 9494**How It Works**: 94951. Click ✏️ rename button 94962. Enter new namespace name 94973. All events moved to new namespace 94984. Event `namespace` field updated in JSON 94995. Old directory cleaned up 9500 9501**Example**: 9502``` 9503Rename: "work" → "business" 9504 9505Before: 9506/data/meta/work/calendar/*.json 9507Events: {namespace: "work"} 9508 9509After: 9510/data/meta/business/calendar/*.json 9511Events: {namespace: "business"} 9512``` 9513 9514**Implementation**: 9515```php 9516private function renameNamespace() { 9517 // 1. Validate new name 9518 // 2. Rename directory 9519 // 3. Update all event namespace fields in JSON 9520 // 4. Clean up old empty directories 9521} 9522``` 9523 9524### Recurring Events Fix - The Problem 9525 9526**Before**: Editing didn't work! 9527``` 9528Original recurring event generates: 9529- Event-0 (Mon, Feb 10) 9530- Event-1 (Mon, Feb 17) 9531- Event-2 (Mon, Feb 24) 9532 9533User edits Event-0, changes title to "Updated" 9534 9535What SHOULD happen: 9536- Delete Event-0, Event-1, Event-2 9537- Generate new instances with "Updated" title 9538 9539What ACTUALLY happened: 9540- Delete Event-0 only ✗ 9541- Generate new instances 9542- Result: Event-1 and Event-2 still show old title! ✗ 9543``` 9544 9545**After**: Properly deletes ALL instances! 9546 9547**The Fix**: 9548```php 9549private function deleteEvent() { 9550 $event = getEvent($eventId); 9551 9552 // Check if recurring 9553 if ($event['recurring'] && $event['recurringId']) { 9554 // Delete ALL instances with same recurringId 9555 deleteAllRecurringInstances($recurringId); 9556 } 9557 9558 // Then normal delete for spanning events 9559} 9560 9561private function deleteAllRecurringInstances($recurringId) { 9562 // Scan ALL calendar JSON files 9563 foreach (glob('*.json') as $file) { 9564 // Filter out events with matching recurringId 9565 $events = array_filter($events, function($event) { 9566 return $event['recurringId'] !== $recurringId; 9567 }); 9568 } 9569} 9570``` 9571 9572**Result**: 9573- Edit "Weekly Team Meeting" → ALL instances updated ✓ 9574- Delete recurring event → ALL instances deleted ✓ 9575- No more orphaned events! ✓ 9576 9577### Recurring Event Fields 9578 9579Every recurring event has: 9580```json 9581{ 9582 "id": "abc123-0", 9583 "recurring": true, 9584 "recurringId": "abc123", ← Links all instances 9585 ... 9586} 9587``` 9588 9589When editing/deleting, we find ALL events with same `recurringId` and remove them! 9590 9591**Finally, recurring events work properly!** 9592 9593## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS 9594 9595### Important Events Sorting - ACTUALLY FIXED! 9596- **Fixed:** Important Events now REALLY sorted by date first, then time 9597- **Fixed:** renderSidebarSection was re-sorting and breaking the order 9598- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only 9599 9600### Pink Theme Tooltip Bling! 9601- **Added:** Pink gradient tooltips (hot pink → light pink) 9602- **Added:** Glowing pink border on tooltips 9603- **Added:** Sparkling heart () appears next to tooltip! 9604- **Added:** Heart has pink glow drop-shadow 9605 9606### The Sorting Bug - Root Cause 9607 9608**Problem**: Two sorts were happening! 9609 9610**Sort #1** (Line 2047): Before rendering 9611```php 9612usort($importantEvents, ...) // Sort by date ✓ 9613``` 9614 9615**Sort #2** (Line 2751): Inside renderSidebarSection 9616```php 9617usort($events, ...) // Sort by TIME ONLY ✗ 9618// This was breaking the date order! 9619``` 9620 9621**The Fix**: Different sorting for different sections 9622```php 9623if ($title === 'Important Events') { 9624 // Sort by DATE first, then time 9625 usort($events, function($a, $b) { 9626 if ($dateA !== $dateB) { 9627 return strcmp($dateA, $dateB); // DATE first! 9628 } 9629 // Same date - sort by time 9630 return timeCompare($a, $b); 9631 }); 9632} else { 9633 // Today/Tomorrow - sort by TIME only (same date) 9634 usort($events, function($a, $b) { 9635 return timeCompare($a, $b); 9636 }); 9637} 9638``` 9639 9640**Result**: Important Events now CORRECTLY sorted! 9641``` 9642✓ Sun, Feb 8 - 3:30 PM Super Bowl 9643✓ Tue, Feb 10 - 11:30 AM Doctor visit 9644✓ Sat, Feb 14 - Valentine's Day (all-day) 9645✓ Sat, Feb 14 - 8:00 PM Crab Shack 9646``` 9647 9648### Pink Tooltip Magic! 9649 9650**Normal Tooltips**: Black background, plain 9651```css 9652background: rgba(0, 0, 0, 0.95); 9653color: #fff; 9654``` 9655 9656**Pink Theme Tooltips**: FABULOUS! 9657```css 9658/* Pink gradient background */ 9659background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%); 9660 9661/* Glowing pink border */ 9662border: 2px solid #ff85c1; 9663 9664/* Double glow shadow */ 9665box-shadow: 9666 0 0 15px rgba(255, 20, 147, 0.6), 9667 0 4px 12px rgba(0, 0, 0, 0.4); 9668 9669/* Bold text */ 9670font-weight: 600; 9671``` 9672 9673**Plus**: Sparkling heart next to tooltip! 9674```css 9675.sidebar-pink [data-tooltip]:after { 9676 content: ''; 9677 font-size: 12px; 9678 filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8)); 9679} 9680``` 9681 9682**The Effect**: 9683``` 9684Hover over ⚠ conflict warning: 9685┌────────────────────┐ 9686│ Conflicts with: │ ← Pink gradient 9687│ • Event 1 (3PM) │ ← Pink border 9688│ • Event 2 (4PM) │ ← Pink glow 9689└────────────────────┘ 9690``` 9691 9692**Maximum glamour on tooltips too!** ✨ 9693 9694## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING 9695 9696### Important Events Order Fixed 9697- **Fixed:** Important Events now sorted by date (earliest first) 9698- **Fixed:** Events on same date sorted by time (chronological) 9699- **Fixed:** All-day events appear last within each date 9700 9701### Sorting Issue 9702 9703**Before**: Random order 9704``` 9705Important Events: 9706 Valentine's Day (Sat, Feb 14) 970711:30 AM Doctor visit (Tue, Feb 10) ← Feb 10 after Feb 14! 97083:30 PM Super Bowl (Sun, Feb 8) ← Feb 8 after Feb 14! 97098:00 PM Crab Shack (Sat, Feb 14) 9710``` 9711 9712**After**: Chronological order 9713``` 9714Important Events: 97153:30 PM Super Bowl (Sun, Feb 8) ← Earliest! 971611:30 AM Doctor visit (Tue, Feb 10) 9717 Valentine's Day (Sat, Feb 14) ← All-day event 97188:00 PM Crab Shack (Sat, Feb 14) ← Same day, sorted by time 9719``` 9720 9721### Sorting Logic 9722 9723**Primary Sort**: By date 9724```php 9725strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14" 9726``` 9727 9728**Secondary Sort**: By time (within same date) 9729```php 9730// All-day events (no time) go last 9731if (empty($timeA) && !empty($timeB)) return 1; 9732if (!empty($timeA) && empty($timeB)) return -1; 9733 9734// Both have times - sort chronologically 9735$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes 9736$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes 9737return $aMinutes - $bMinutes; // 690 < 1200 9738``` 9739 9740**Result**: 97411. Sun, Feb 8 - 3:30 PM (earliest date & time) 97422. Tue, Feb 10 - 11:30 AM (next date) 97433. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14) 97444. Sat, Feb 14 - 8:00 PM (timed event on Feb 14) 9745 9746**Perfect chronological order for next 2 weeks!** ✓ 9747 9748## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨ 9749 9750### EXTREME PINK BLING EFFECTS! 9751- **Added:** Click sparkles - 8 sparkles burst out on every click! 9752- **Added:** Auto-sparkles - random sparkles appear every 3 seconds 9753- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover 9754- **Added:** Pulsing border glow - constantly breathing pink glow 9755- **Added:** Drop shadows on sparkles for extra depth 9756- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows! 9757 9758### Sparkle Effects Breakdown 9759 9760**Click Sparkles** : 9761```javascript 9762// 8 sparkles burst out when you click anywhere! 9763for (let i = 0; i < 8; i++) { 9764 // Staggered appearance (40ms apart) 9765 createSparkle(x, y); 9766} 9767 9768// Sparkle emojis: 9769["✨", "", "", "⭐", "", "", "", "", "", ""] 9770``` 9771 9772**Each sparkle**: 9773- Starts at click point 9774- Flies outward 30-60px in random direction 9775- Spins 360 degrees 9776- Fades in and out 9777- Has pink glow drop-shadow 9778- Disappears after 1 second 9779 9780**Auto Sparkles** ⏰: 9781```javascript 9782// Random sparkle every 3 seconds 9783setInterval(() => { 9784 const x = Math.random() * width; 9785 const y = Math.random() * height; 9786 createSparkle(x, y); 9787}, 3000); 9788``` 9789 9790**Result**: Constant magical sparkles even without clicking! ✨ 9791 9792**Hover Mega-Glow** : 9793```css 9794.sidebar-pink:hover { 9795 box-shadow: 9796 0 0 30px rgba(255, 20, 147, 0.9), 9797 0 0 50px rgba(255, 20, 147, 0.5) !important; 9798} 9799``` 9800 9801**Result**: Sidebar EXPLODES with pink glow when you hover over it! 9802 9803**Pulsing Border Glow** : 9804```css 9805@keyframes pulse-glow { 9806 0%, 100% { 9807 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9808 } 9809 50% { 9810 box-shadow: 9811 0 0 25px rgba(255, 20, 147, 0.8), 9812 0 0 40px rgba(255, 20, 147, 0.4); 9813 } 9814} 9815 9816animation: pulse-glow 3s ease-in-out infinite; 9817``` 9818 9819**Result**: Border continuously breathes with pink glow! 9820 9821**Sparkle Animation** : 9822```css 9823@keyframes sparkle { 9824 0% { 9825 opacity: 0; 9826 transform: translate(0, 0) scale(0) rotate(0deg); 9827 } 9828 50% { 9829 opacity: 1; 9830 transform: translate(halfway) scale(1) rotate(180deg); 9831 } 9832 100% { 9833 opacity: 0; 9834 transform: translate(far) scale(0) rotate(360deg); 9835 } 9836} 9837``` 9838 9839**Result**: Sparkles spin, grow, shrink, and fly! 9840 9841### Complete Pink Bling Experience: 9842 9843**Always Active**: 9844- ✨ Pulsing pink border glow (3 second cycle) 9845- ✨ Auto-sparkles every 3 seconds 9846 9847**On Hover**: 9848- MEGA GLOW EFFECT (2x brightness!) 9849 9850**On Click**: 9851- 8 sparkles EXPLODE outward! 9852- Random emojis (hearts, stars, diamonds, crowns!) 9853- Each sparkle spins 360° while flying 9854- Pink glow drop-shadow on each sparkle 9855 9856**The Result**: 9857- Click anywhere = SPARKLE EXPLOSION! 9858- Hover anywhere = MEGA GLOW! ✨ 9859- Always breathing and sparkling! 9860- Maximum glamour! 9861- Wife approval: 1000%! 9862 9863**THIS IS THE MOST FABULOUS CALENDAR EVER!** ✨ 9864 9865## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH 9866 9867### Pink Theme Final Touches 9868- **Fixed:** Add Event text now black (was bright pink, hard to read) 9869- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!) 9870- **Removed:** Text shadow on Add Event button (cleaner with black text) 9871 9872### Add Event Text - Black & Readable! 9873 9874**Before**: Bright pink text (#ff1493) on dark pink background 9875```php 9876$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read! 9877text-shadow: 0 0 3px #ff1493; // Glowy pink 9878``` 9879 9880**After**: Black text, no shadow, perfect contrast! 9881```php 9882$addBtnTextColor = $theme === 'pink' ? '#000000' : ...; 9883$addBtnTextShadow = $theme === 'pink' ? 'none' : ...; 9884``` 9885 9886**Result**: 9887- Black text pops against dark pink background ✓ 9888- Easy to read ✓ 9889- Professional look with bling ✓ 9890 9891### Clock Border - All Pink! 9892 9893**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green 9894 9895**Before**: 9896```php 9897// Inline style (only bottom): 9898style="border-bottom:2px solid #ff1493;" 9899 9900// CSS (all sides): 9901.eventlist-today-header { 9902 border: 2px solid #00cc07; // Green on top/sides! 9903} 9904``` 9905 9906**After**: Inline style overrides ALL sides 9907```php 9908style="border:2px solid #ff1493;" // All 4 sides pink! 9909``` 9910 9911**Result**: Clock box now 100% pink border on all four sides! ✓ 9912 9913### What Changed: 9914 9915**Add Event Button**: 9916- Background: #b8156f (dark pink) ✓ 9917- Text: **#000000 (black)** ← NEW! 9918- Text shadow: **none** ← NEW! 9919- Glow: 0 0 10px pink ✓ 9920 9921**Clock Border**: 9922- Top: **#ff1493 (pink)** ← FIXED! 9923- Right: **#ff1493 (pink)** ← FIXED! 9924- Bottom: #ff1493 (pink) ✓ 9925- Left: **#ff1493 (pink)** ← FIXED! 9926 9927**Perfect pink theme - wife approved!** ✨ 9928 9929## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION 9930 9931### Pink Theme Complete Makeover 9932- **Fixed:** Clock border now completely pink (was green on sides/top) 9933- **Changed:** Today/Tomorrow/Important sections now different shades of pink 9934- **Changed:** Add Event button now dark pink (was clashing blue) 9935- **Changed:** System status bars now pink gradient (3 shades!) 9936 9937### All-Pink Everything! 9938 9939**Clock Border**: 9940```css 9941/* Before: Green border */ 9942border: 2px solid #00cc07; 9943 9944/* After: Hot pink border */ 9945.sidebar-pink .eventlist-today-header { 9946 border-color: #ff1493; 9947 box-shadow: 0 0 10px rgba(255, 20, 147, 0.4); 9948} 9949``` 9950 9951**Section Colors** (Different Pink Shades): 9952```php 9953// Before: Orange, green, purple 9954'Today' => '#ff9800', 9955'Tomorrow' => '#4caf50', 9956'Important' => '#9b59b6' 9957 9958// After: Hot pink, pink, light pink 9959'Today' => '#ff1493', // Hot pink (DeepPink) 9960'Tomorrow' => '#ff69b4', // Pink (HotPink) 9961'Important' => '#ff85c1' // Light pink 9962``` 9963 9964**Add Event Button**: 9965```php 9966// Before: Clashing blue 9967background: #3498db; 9968 9969// After: Dark pink with glow 9970background: #b8156f; // Dark pink 9971hover: #8b0f54; // Darker pink 9972shadow: 0 0 10px rgba(255, 20, 147, 0.5); 9973``` 9974 9975**System Status Bars** (Pink Gradient): 9976```css 9977/* 5-min load average */ 9978.sidebar-pink .eventlist-cpu-fill { 9979 background: #ff1493; /* Hot pink */ 9980 box-shadow: 0 0 5px rgba(255, 20, 147, 0.7); 9981} 9982 9983/* Realtime CPU */ 9984.sidebar-pink .eventlist-cpu-fill-purple { 9985 background: #ff69b4; /* Pink */ 9986 box-shadow: 0 0 5px rgba(255, 105, 180, 0.7); 9987} 9988 9989/* Memory */ 9990.sidebar-pink .eventlist-cpu-fill-orange { 9991 background: #ff85c1; /* Light pink */ 9992 box-shadow: 0 0 5px rgba(255, 133, 193, 0.7); 9993} 9994``` 9995 9996### Pink Theme Visual Hierarchy: 9997 9998**Darkest → Lightest Pink Shades**: 99991. Add Event button: #b8156f (dark pink) 100002. Today section: #ff1493 (hot pink / deep pink) 100013. System bar 1: #ff1493 (hot pink) 100024. Tomorrow section: #ff69b4 (pink) 100035. System bar 2: #ff69b4 (pink) 100046. Important section: #ff85c1 (light pink) 100057. System bar 3: #ff85c1 (light pink) 10006 10007**Result**: Beautiful pink gradient throughout entire sidebar! ✨ 10008 10009### What's Pink Now: 10010 10011✅ Sidebar background & border 10012✅ **Clock border** ← FIXED! 10013✅ Header gradient 10014✅ Week grid 10015✅ **Add Event button** ← FIXED! 10016✅ **Today section** ← Different shade! 10017✅ **Tomorrow section** ← Different shade! 10018✅ **Important section** ← Different shade! 10019✅ Event text & bars 10020✅ **System status bars** ← All 3 different pink shades! 10021✅ All shadows & glows 10022 10023**EVERYTHING is pink and fabulous!** ✨ 10024 10025## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS 10026 10027### ✨ New Theme: Pink Bling! 10028- **Added:** Glamorous hot pink theme with maximum sparkle 10029- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic 10030- **Perfect for:** Fabulous calendars that demand attention ✨ 10031 10032### Professional Theme Shadow Fix 10033- **Fixed:** Section headers now have subtle shadow (not glow) 10034- **Fixed:** Clicked day panel header has proper shadow 10035 10036### Pink Bling Theme Colors 10037 10038**Background & Borders**: 10039```php 10040'bg' => '#1a0d14', // Dark rich pink-black 10041'border' => '#ff1493', // Hot pink (DeepPink) 10042'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow 10043``` 10044 10045**Text Colors**: 10046```php 10047'text_primary' => '#ff69b4', // Hot pink 10048'text_bright' => '#ff1493', // Deep pink 10049'text_dim' => '#ff85c1', // Light pink 10050``` 10051 10052**Week Grid**: 10053```php 10054'grid_bg' => '#2d1a24', // Dark purple-pink 10055'cell_bg' => '#1a0d14', // Dark 10056'cell_today_bg' => '#3d2030', // Highlighted purple-pink 10057``` 10058 10059**Special Effects**: 10060```php 10061'bar_glow' => '0 0 5px', // Extra sparkly glow! 10062'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling! 10063``` 10064 10065### Professional Theme Shadow Fix 10066 10067**Before**: Section headers had colored glow 10068```php 10069box-shadow: 0 0 8px #3498db; // Blue glow - wrong! 10070``` 10071 10072**After**: Section headers have subtle shadow 10073```php 10074$headerShadow = ($theme === 'professional') ? 10075 '0 2px 4px rgba(0, 0, 0, 0.15)' : // Shadow for professional 10076 '0 0 8px ' . $accentColor; // Glow for others 10077``` 10078 10079**Result**: 10080- **Matrix/Purple/Pink**: Colored glow on headers ✓ 10081- **Professional**: Clean grey shadow (no glow) ✓ 10082 10083### All Four Themes: 10084 10085** Matrix Edition**: 10086- Dark green (#00cc07) 10087- Neon glow effects 10088- Hacker aesthetic 10089 10090** Purple Dream**: 10091- Elegant purple (#9b59b6) 10092- Violet glow effects 10093- Royal aesthetic 10094 10095** Professional Blue**: 10096- Clean grey/blue (#4a90e2) 10097- Subtle shadows (NO glow) 10098- Corporate aesthetic 10099 10100** Pink Bling** (NEW!): 10101- Hot pink (#ff1493) 10102- MAXIMUM sparkle & glow 10103- Glamorous aesthetic ✨ 10104 10105### Technical Implementation 10106 10107**Theme Added To**: 10108- `getSidebarThemeStyles()` - color definitions 10109- `getSidebarTheme()` - validation 10110- `saveSidebarTheme()` - admin save 10111- Admin panel - UI with preview 10112- All shadow/glow calculations 10113- JavaScript theme colors 10114- Clicked day panel colors 10115 10116**Perfect for users who want FABULOUS pink calendars!** ✨ 10117 10118## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY 10119 10120### Text Glow Refinement 10121- **Changed:** Reduced text glow from 3px to 2px (less intense) 10122- **Fixed:** Clicked day panel now has same text glow as sections 10123 10124### Text Glow Reduction 10125 10126**Before**: Text glow was too strong (3px) 10127```php 10128// Sections: 10129text-shadow: 0 0 3px #00cc07; // Too bright! 10130 10131// Clicked day panel: 10132text-shadow: 0 0 3px #00cc07; // Too bright! 10133``` 10134 10135**After**: Subtler text glow (2px) 10136```php 10137// Sections: 10138text-shadow: 0 0 2px #00cc07; // Just right ✓ 10139 10140// Clicked day panel: 10141text-shadow: 0 0 2px #00cc07; // Just right ✓ 10142``` 10143 10144**Visual Impact**: 10145- **Matrix**: Softer green glow, easier to read 10146- **Purple**: Softer purple glow, more elegant 10147- **Professional**: Still no glow (clean) 10148 10149### Consistency Fix 10150 10151**Before**: Sections had glow, clicked day panel had NO glow 10152 10153**After**: Both sections AND clicked day panel have matching subtle glow 10154 10155**Where Glow Appears**: 10156- ✅ Today section event text 10157- ✅ Tomorrow section event text 10158- ✅ Important section event text 10159- ✅ **Clicked day panel event text** ← NOW CONSISTENT! 10160 10161**Result**: 10162- Glow is less intense and easier on eyes ✓ 10163- All event text has consistent styling ✓ 10164- Matrix/Purple themes more refined ✓ 10165 10166### Technical Details 10167 10168**PHP (Sections)**: 10169```php 10170$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';'; 10171``` 10172 10173**JavaScript (Clicked Day Panel)**: 10174```javascript 10175themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple 10176eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'"; 10177``` 10178 10179**Perfect consistency and subtle elegance!** ✨ 10180 10181## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY 10182 10183### ✨ Important Events Enhancement 10184- **Changed:** Important events now show from next 2 weeks (not just current week) 10185- **Fixed:** Important events on Sunday after current week now visible 10186- **Changed:** Events loaded 2 weeks into future for Important section 10187 10188### Background Cleanup 10189- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections 10190- **Removed:** Grey backgrounds from individual events 10191- **Result:** Clean transparent backgrounds, original dark Matrix look restored 10192 10193### Important Events - Future Coverage 10194 10195**Before**: Only showed Important events from current week 10196```php 10197if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10198 $importantEvents[] = $event; 10199} 10200``` 10201 10202**After**: Shows Important events from today through next 2 weeks 10203```php 10204// Load events 2 weeks out 10205$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days')); 10206 10207// Show all important events from today forward 10208if ($isImportant && $dateKey >= $todayStr) { 10209 $importantEvents[] = $event; 10210} 10211``` 10212 10213**Example**: 10214- Today: Saturday Feb 7 10215- Current week: Sun Feb 1 → Sat Feb 7 10216- Important events shown: Feb 7 → Feb 21 (today + 14 days) 10217 10218**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓ 10219 10220### Background Removal 10221 10222**Before**: Light grey/white backgrounds added 10223```php 10224// Section background: 10225$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay 10226 10227// Event background: 10228$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay 10229``` 10230 10231**After**: No backgrounds (transparent) 10232```php 10233// Section: No background property 10234<div style="padding:4px 0;"> 10235 10236// Event: No background property 10237<div style="padding:4px 6px; ..."> 10238``` 10239 10240**Result**: 10241- Clean, dark Matrix aesthetic restored ✓ 10242- Purple theme darker and more elegant ✓ 10243- Professional theme still has its light grey sidebar bg ✓ 10244- Events stand out with just color bars and borders ✓ 10245 10246### What Changed: 10247 10248**Sections (Today/Tomorrow/Important)**: 10249- ❌ No more grey overlay 10250- ✓ Transparent background 10251- ✓ Colored borders & glows remain 10252 10253**Individual Events**: 10254- ❌ No more grey overlay 10255- ✓ Transparent background 10256- ✓ Colored bars & borders remain 10257 10258**Perfect! Back to the original clean dark look with future Important events!** 10259 10260## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR 10261 10262### Final Theme Polish 10263- **Fixed:** Today/Tomorrow/Important section shadows now match theme 10264- **Fixed:** Event description text color now uses theme dim color 10265 10266### Section Shadow Fix 10267 10268**Problem**: Sections always had green glow regardless of theme 10269 10270**Before**: 10271```php 10272// Hardcoded green: 10273box-shadow: 0 0 5px rgba(0, 204, 7, 0.2); 10274``` 10275 10276**After**: 10277```php 10278// Theme-aware: 10279$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' : 10280 ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' : 10281 '0 2px 4px rgba(0, 0, 0, 0.1)'); 10282``` 10283 10284**Result**: 10285- **Matrix**: Green glow around sections ✓ 10286- **Purple**: Purple glow around sections ✓ 10287- **Professional**: Subtle grey shadow (no glow) ✓ 10288 10289### Description Color Fix 10290 10291**Problem**: Description text always green in clicked day panel 10292 10293**Before**: 10294```javascript 10295color: #00aa00; // Always green 10296``` 10297 10298**After**: 10299```javascript 10300color: themeColors.text_dim; // Theme dim color 10301``` 10302 10303**Result**: 10304- **Matrix**: Dim green (#00aa00) ✓ 10305- **Purple**: Dim purple (#8e7ab8) ✓ 10306- **Professional**: Grey (#7f8c8d) ✓ 10307 10308### Now 100% Theme Consistent 10309 10310Every single visual element respects theme: 10311- ✅ Sidebar background & border 10312- ✅ Header colors & shadows 10313- ✅ Week grid & cells 10314- ✅ Add Event button 10315- ✅ Section borders & **shadows** ← Fixed! 10316- ✅ Event titles & times 10317- ✅ Event **descriptions** ← Fixed! 10318- ✅ Clicked day panel 10319- ✅ Event bars & glows 10320 10321**Absolute perfection across all three themes!** ✨ 10322 10323## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND 10324 10325### Theme Improvements 10326- **Fixed:** Clicked day panel now uses correct theme colors 10327- **Changed:** Professional Blue background now light grey (not white) 10328- **Added:** Theme colors passed to JavaScript for dynamic rendering 10329 10330### Clicked Day Panel Theming 10331 10332**Before**: Always blue regardless of theme 10333```javascript 10334// Hardcoded blue: 10335color:#00cc07; // Always green 10336background:#3498db; // Always blue 10337``` 10338 10339**After**: Theme-aware colors 10340```php 10341// PHP passes theme to JavaScript: 10342window.themeColors_XXX = { 10343 text_primary: '#00cc07' or '#b19cd9' or '#2c3e50', 10344 text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2', 10345 text_shadow: '0 0 3px ...' or '', 10346 event_bg: 'rgba(...)', 10347 border_color: 'rgba(...)', 10348 bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)' 10349}; 10350 10351// JavaScript uses theme colors: 10352color: themeColors.text_primary; 10353background: themeColors.event_bg; 10354``` 10355 10356**Result**: 10357- Matrix: Green panel with green glow ✓ 10358- Purple: Purple panel with purple glow ✓ 10359- Professional: Blue panel, no glow, clean ✓ 10360 10361### Professional Theme Background Change 10362 10363**Before**: Almost white (#f5f7fa, #ffffff) 10364```php 10365'bg' => '#f5f7fa', // Very light 10366'cell_bg' => '#ffffff', // Pure white 10367``` 10368 10369**After**: Light grey tones 10370```php 10371'bg' => '#e8ecf1', // Soft grey-blue 10372'cell_bg' => '#f5f7fa', // Light grey 10373'grid_bg' => '#d5dbe3', // Medium grey 10374'cell_today_bg' => '#dce8f7' // Highlighted grey-blue 10375``` 10376 10377**Visual Impact**: 10378- Sidebar: Light grey-blue background (#e8ecf1) 10379- Week cells: Lighter grey (#f5f7fa) 10380- Today cell: Highlighted blue-grey (#dce8f7) 10381- More depth and contrast ✓ 10382- Professional appearance ✓ 10383 10384### All Theme Elements Now Consistent 10385 10386**Matrix (Green)**: 10387- Sidebar: Dark (#242424) 10388- Clicked panel: Dark with green 10389- Text: Green with glow 10390 10391**Purple Dream**: 10392- Sidebar: Dark purple (#2a2030) 10393- Clicked panel: Dark with purple 10394- Text: Purple with glow 10395 10396**Professional Blue**: 10397- Sidebar: Light grey (#e8ecf1) 10398- Clicked panel: Light with blue 10399- Text: Dark grey, no glow 10400 10401**Perfect theme consistency everywhere!** 10402 10403## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING 10404 10405### Critical Fixes 10406- **Fixed:** Tomorrow events not loaded when outside current week 10407- **Fixed:** `&` showing instead of `&` (double HTML encoding) 10408 10409### Issue 1: Tomorrow Not Loading 10410 10411**Problem**: Sidebar only loaded events for current week 10412- Today (Saturday): Week ends today 10413- Tomorrow (Sunday): Start of NEXT week 10414- Tomorrow events never loaded from data files! 10415 10416**Before**: 10417```php 10418// Only load current week 10419$end = new DateTime($weekEnd); 10420$end->modify('+1 day'); 10421$period = new DatePeriod($start, $interval, $end); 10422// If tomorrow > weekEnd, it's not in period! 10423``` 10424 10425**After**: 10426```php 10427// Check if tomorrow is outside week 10428$tomorrowDate = date('Y-m-d', strtotime('+1 day')); 10429if ($tomorrowDate > $weekEnd) { 10430 // Extend to include tomorrow 10431 $end = new DateTime($tomorrowDate); 10432} 10433$end->modify('+1 day'); 10434$period = new DatePeriod($start, $interval, $end); 10435``` 10436 10437**Result**: Tomorrow events now loaded even at week boundary! ✓ 10438 10439### Issue 2: Double HTML Encoding 10440 10441**Problem**: `&` characters showing as `&` 10442 10443**Cause**: Double encoding on line 2625 and 2681 10444```php 10445// Line 2625: 10446$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee & Tea" 10447 10448// Line 2681: 10449$html .= htmlspecialchars($title); // "Coffee & Tea" → "Coffee &amp; Tea" ❌ 10450``` 10451 10452**Fixed**: 10453```php 10454// Line 2625: 10455$title = htmlspecialchars($event['title']); // Encode once 10456 10457// Line 2681: 10458$html .= $title; // Use already-encoded value ✓ 10459``` 10460 10461**Result**: `&` displays correctly! ✓ 10462 10463### Both Fixes Critical 10464 10465These were **two separate bugs**: 104661. **Loading bug**: Tomorrow events not read from files 104672. **Display bug**: Double-encoding text 10468 10469Both needed fixing for Tomorrow section to work properly! 10470 10471## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY 10472 10473### Critical Fix 10474- **Fixed:** Tomorrow section missing when tomorrow is outside current week 10475- **Fixed:** Today section now always shows regardless of week boundaries 10476- **Changed:** Today/Tomorrow processed BEFORE week boundary checks 10477 10478### The Problem 10479 10480**Scenario**: Today is Saturday (last day of week) 10481- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today 10482- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week** 10483 10484**BROKEN Logic** (v4.2.2): 10485```php 10486foreach ($events as $dateKey => $dayEvents) { 10487 if ($dateKey < $weekStart) continue; // Skip old events 10488 10489 // ...week processing... 10490 10491 if ($dateKey === $tomorrowStr) { // ← Never reached! 10492 $tomorrowEvents[] = $event; // Tomorrow > weekEnd 10493 } 10494} 10495``` 10496 10497**Result**: Tomorrow events never added because loop skipped them! ❌ 10498 10499### The Fix 10500 10501**Process Today/Tomorrow FIRST**: 10502```php 10503foreach ($events as $dateKey => $dayEvents) { 10504 $eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 10505 10506 foreach ($eventsWithConflicts as $event) { 10507 // ALWAYS process Today and Tomorrow first! 10508 if ($dateKey === $todayStr) { 10509 $todayEvents[] = $event; // ✓ Always shows 10510 } 10511 if ($dateKey === $tomorrowStr) { 10512 $tomorrowEvents[] = $event; // ✓ Always shows 10513 } 10514 10515 // THEN check week boundaries for grid 10516 if ($dateKey >= $weekStart && $dateKey <= $weekEnd) { 10517 $weekEvents[$dateKey][] = $event; 10518 } 10519 10520 // Important events still week-only 10521 if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) { 10522 $importantEvents[] = $event; 10523 } 10524 } 10525} 10526``` 10527 10528### What Changed 10529 10530**Before**: 105311. Skip events < weekStart ❌ 105322. Process week grid 105333. Try to add Today/Tomorrow ← **Failed if outside week** 105344. Add Important events 10535 10536**After**: 105371. **Always add Today events** ✓ 105382. **Always add Tomorrow events** ✓ 105393. Add to week grid if in range 105404. Add Important events if in range 10541 10542**Result**: 10543- Today section: ✓ Always shows 10544- Tomorrow section: ✓ Always shows (even at week boundary!) 10545- Week grid: ✓ Only current week 10546- Important: ✓ Only current week 10547 10548### Edge Cases Fixed 10549 10550**Saturday → Sunday transition**: 10551- Today (Sat): Shows in Today section ✓ 10552- Tomorrow (Sun): Shows in Tomorrow section ✓ 10553- Week grid: Only shows Sat (today) ✓ 10554 10555**Sunday → Monday transition**: 10556- Today (Sun): Shows in Today section ✓ 10557- Tomorrow (Mon): Shows in Tomorrow section ✓ 10558- Week grid: Shows both Sun and Mon ✓ 10559 10560**Perfect! Tomorrow section now always works!** 10561 10562## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY! 10563 10564### Corrected Week Options 10565- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!) 10566- **Changed:** Default is **Sunday** (US/Canada standard) 10567- **Fixed:** Day names array for Sunday start: S M T W T F S 10568 10569### Correct Week Start Options 10570 10571**Sunday Start** (Default): 10572- Grid shows: **S M T W T F S** 10573- Week: Sunday → Saturday 10574- US/Canada standard 10575- Most common worldwide 10576 10577**Monday Start**: 10578- Grid shows: **M T W T F S S** 10579- Week: Monday → Sunday 10580- ISO 8601 standard 10581- Common in Europe 10582 10583### Technical Changes 10584 10585**All References Updated**: 10586```php 10587// Changed from 'saturday' to 'sunday' in: 10588- Admin validation 10589- Week calculation logic 10590- Day names array 10591- Default value 10592- Comments 10593``` 10594 10595**Sunday Calculation** (when today is Saturday): 10596```php 10597$today = date('w'); // 0=Sun, 6=Sat 10598if ($today == 0) { 10599 $weekStart = date('Y-m-d'); // Today! 10600} else { 10601 // Go back $today days to last Sunday 10602 $weekStart = date('Y-m-d', strtotime('-' . $today . ' days')); 10603} 10604``` 10605 10606**Examples**: 10607- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7 10608- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14 10609 10610**Sorry for the confusion - it's Sunday not Saturday!** 10611 10612## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY 10613 10614### Critical Fix 10615- **Fixed:** Week calculation broken when today is Saturday 10616- **Fixed:** Events not showing in Today/Important sections 10617- **Fixed:** Week grid event bars missing 10618- **Changed:** Default week start is Saturday (matches main calendar) 10619 10620### Technical Details 10621 10622**The Bug**: 10623```php 10624// BROKEN (v4.2.0): 10625$weekStart = date('Y-m-d', strtotime('saturday this week')); 10626// When TODAY is Saturday, this is ambiguous and fails! 10627 10628// FIXED (v4.2.1): 10629$today = date('w'); // 0 (Sun) to 6 (Sat) 10630if ($today == 6) { 10631 $weekStart = date('Y-m-d'); // Today! 10632} else { 10633 $daysBack = ($today == 0) ? 1 : ($today + 1); 10634 $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days')); 10635} 10636$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days')); 10637``` 10638 10639**Why It Failed**: 10640- `strtotime('saturday this week')` is ambiguous when run ON a Saturday 10641- PHP may interpret it as "next Saturday" or fail 10642- Result: Week range was wrong, events filtered out 10643 10644**The Fix**: 10645- Explicit calculation using day-of-week math 10646- Saturday (day 6): weekStart = today 10647- Sunday (day 0): weekStart = yesterday 10648- Monday-Friday: calculate days back to last Saturday 10649 10650**Result**: Works reliably every day of the week! 10651 10652**Default Changed**: Saturday start (was Monday in 4.2.0) 10653- Matches main calendar behavior 10654- Users can still switch to Monday in settings 10655 10656## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR 10657 10658### ✨ New Feature 10659- **Added:** Week start day selector in Themes tab 10660- **Added:** Choose between Monday (ISO standard) or Saturday week start 10661- **Added:** Week grid and all events now respect the selected start day 10662- **Changed:** Themes tab renamed to "Sidebar Widget Settings" 10663 10664### Week Start Options 10665 10666**Monday Start** (Default): 10667- Grid shows: M T W T F S S 10668- Week runs: Monday → Sunday 10669- ISO 8601 standard 10670- Common in Europe, most of world 10671 10672**Saturday Start**: 10673- Grid shows: S S M T W T F 10674- Week runs: Saturday → Friday 10675- Common in Middle East 10676- Sabbath-observant communities 10677 10678### Technical Details 10679 10680**Configuration**: 10681```php 10682// Saved in: data/meta/calendar_week_start.txt 10683// Values: 'monday' or 'saturday' 10684 10685// Week calculation: 10686if ($weekStartDay === 'saturday') { 10687 $weekStart = date('Y-m-d', strtotime('saturday this week')); 10688 $weekEnd = date('Y-m-d', strtotime('friday next week')); 10689} else { 10690 $weekStart = date('Y-m-d', strtotime('monday this week')); 10691 $weekEnd = date('Y-m-d', strtotime('sunday this week')); 10692} 10693``` 10694 10695**Day Names Array**: 10696```php 10697// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S'] 10698// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F'] 10699``` 10700 10701**What Changes**: 10702- Week grid day letters 10703- Week grid date sequence 10704- Today/Tomorrow/Important event date ranges 10705- Week event grouping 10706 10707**What Stays Same**: 10708- All themes still work 10709- Event data unchanged 10710- Main calendar unaffected 10711 10712### How to Change: 10713 107141. Admin → Calendar → Themes tab 107152. Under "Week Start Day" section 107163. Select Monday or Saturday 107174. Click "Save Settings" 107185. Refresh sidebar to see changes 10719 10720**Perfect for international users or religious observances!** 10721 10722## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS 10723 10724### ️ Calendar Improvements 10725- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar) 10726- **Changed:** Event section backgrounds much lighter (almost white) 10727- **Changed:** Individual event backgrounds lighter and more readable 10728- **Changed:** Event borders now theme-colored 10729 10730### Technical Details 10731 10732**Week Start Change**: 10733```php 10734// Before: 10735$weekStart = date('Y-m-d', strtotime('monday this week')); 10736$weekEnd = date('Y-m-d', strtotime('sunday this week')); 10737$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S']; 10738 10739// After: 10740$weekStart = date('Y-m-d', strtotime('sunday this week')); 10741$weekEnd = date('Y-m-d', strtotime('saturday this week')); 10742$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S']; 10743``` 10744 10745**Background Colors**: 10746```php 10747// Section backgrounds (Today, Tomorrow, Important): 10748Matrix: rgba(255, 255, 255, 0.05) // Very light overlay 10749Purple: rgba(255, 255, 255, 0.08) // Slightly lighter 10750Professional: rgba(255, 255, 255, 0.95) // Almost white! 10751 10752// Individual event backgrounds: 10753Matrix: rgba(255, 255, 255, 0.03) // Subtle 10754Purple: rgba(255, 255, 255, 0.05) // Light 10755Professional: rgba(255, 255, 255, 0.5) // Semi-transparent white 10756``` 10757 10758**Event Borders**: 10759```php 10760Matrix: rgba(0, 204, 7, 0.2) // Green 10761Purple: rgba(155, 89, 182, 0.2) // Purple 10762Professional: rgba(74, 144, 226, 0.2) // Blue 10763``` 10764 10765### Visual Result: 10766 10767**Before**: Dark backgrounds made text hard to read 10768**After**: Light backgrounds make events pop and text very readable 10769 10770**Week Grid**: 10771``` 10772Before: [M][T][W][T][F][S][S] 10773After: [S][M][T][W][T][F][S] ← Now matches main calendar! 10774``` 10775 10776## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS 10777 10778### Final Theme Polish 10779- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors 10780- **Fixed:** Event times now use theme bright color 10781- **Fixed:** Event dates use theme dim color 10782- **Fixed:** Task checkboxes use theme bright color 10783- **Fixed:** Event color bars use theme-appropriate shadows 10784- **Fixed:** No text shadows on Professional theme 10785 10786### Technical Details 10787 10788**Event Text Colors**: 10789```php 10790// Matrix: 10791- Title: #00cc07 (green) 10792- Time: #00dd00 (bright green) 10793- Date: #00aa00 (dim green) 10794- Text shadow: 0 0 3px (glow) 10795 10796// Purple: 10797- Title: #b19cd9 (lavender) 10798- Time: #d4a5ff (bright purple) 10799- Date: #8e7ab8 (dim purple) 10800- Text shadow: 0 0 3px (glow) 10801 10802// Professional: 10803- Title: #2c3e50 (dark grey) 10804- Time: #4a90e2 (blue) 10805- Date: #7f8c8d (grey) 10806- Text shadow: none (clean) 10807``` 10808 10809**Color Bar Shadows**: 10810```php 10811// Matrix & Purple: Glow effect 10812box-shadow: 0 0 3px [event-color]; 10813 10814// Professional: Subtle shadow 10815box-shadow: 0 1px 2px rgba(0,0,0,0.2); 10816``` 10817 10818### What's Now Fully Themed: 10819 10820✅ Sidebar background & border 10821✅ Header (clock box) background, border, text 10822✅ Week grid background, borders, cells 10823✅ Week grid day letters & numbers 10824✅ Week grid event bars & "+N more" text 10825✅ Add Event button background & text 10826✅ Today/Tomorrow/Important event titles 10827✅ Event times 10828✅ Event dates (Important section) 10829✅ Task checkboxes 10830✅ Event color bars 10831✅ All text shadows (glow vs none) 10832 10833**Every single element now respects the theme!** 10834 10835## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION 10836 10837### Theme Improvements 10838- **Fixed:** Week calendar grid now uses theme colors (purple/blue) 10839- **Fixed:** Add Event button now uses theme colors 10840- **Fixed:** Clock box border now matches theme 10841- **Fixed:** All text shadows respect theme (no glow on professional) 10842- **Fixed:** Event bars use theme-appropriate shadows 10843 10844### Technical Details 10845 10846**Week Grid Theming**: 10847```php 10848// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders 10849// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders 10850// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders 10851``` 10852 10853**Add Event Button**: 10854```php 10855// Matrix: Dark green (#006400) with bright green text 10856// Purple: Purple (#7d3c98) with lavender text 10857// Professional: Blue (#3498db) with white text 10858``` 10859 10860**Text Shadows**: 10861```php 10862// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color) 10863// Professional: No glow (clean look) 10864``` 10865 10866**CSS Overrides**: 10867```css 10868/* Purple theme */ 10869.sidebar-purple .eventlist-today-header { 10870 border-color: #9b59b6; 10871 box-shadow: 0 0 8px rgba(155, 89, 182, 0.2); 10872} 10873 10874/* Professional theme */ 10875.sidebar-professional .eventlist-today-header { 10876 border-color: #4a90e2; 10877 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 10878} 10879``` 10880 10881### What Changed Per Theme: 10882 10883**Purple Dream**: 10884- Week grid: Purple borders and dark purple background 10885- Add Event: Purple button with lavender text 10886- Clock box: Purple border with purple glow 10887- Event bars: Purple glow instead of green 10888- All text: Purple/lavender shades 10889 10890**Professional Blue**: 10891- Week grid: Blue borders and light grey background 10892- Add Event: Blue button with white text 10893- Clock box: Blue border with subtle shadow (no glow) 10894- Event bars: Subtle shadows (no glow) 10895- All text: Dark grey and blue shades 10896 10897**Matrix Edition**: Unchanged (still perfect green theme!) 10898 10899## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING 10900 10901### ✨ New Features 10902- **Added:** Themes tab in admin for sidebar widget theming 10903- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey) 10904- **Added:** Theme selector with live previews 10905- **Added:** Theme persistence across page loads 10906 10907### Available Themes 10908 10909**Matrix Edition** (Default): 10910- Dark background (#242424) 10911- Green accents (#00cc07) 10912- Neon glow effects 10913- Original Matrix styling 10914 10915**Purple Dream**: 10916- Dark purple background (#2a2030) 10917- Purple/violet accents (#9b59b6) 10918- Elegant purple glow 10919- Rich purple color scheme 10920 10921**Professional Blue**: 10922- Light grey background (#f5f7fa) 10923- Blue accents (#4a90e2) 10924- Clean professional look 10925- Subtle shadows instead of glow 10926 10927### Bug Fix 10928- **Fixed:** Tooltips now go UP and to the LEFT (was going right) 10929- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px` 10930 10931### Technical Details 10932 10933**Theme System**: 10934```php 10935// Saved in: data/meta/calendar_theme.txt 10936// Applied dynamically in syntax.php 10937$theme = $this->getSidebarTheme(); // 'matrix', 'purple', or 'professional' 10938$styles = $this->getSidebarThemeStyles($theme); 10939 10940// Styles include: 10941- bg, border, shadow 10942- header_bg, header_border, header_shadow 10943- text_primary, text_bright, text_dim 10944- grid_bg, grid_border 10945- cell_bg, cell_today_bg 10946``` 10947 10948**Theme Changes**: 10949- Header background gradient 10950- Border colors 10951- Text colors 10952- Shadow/glow effects 10953- Grid colors 10954 10955**How to Change**: 109561. Admin → Calendar → Themes tab 109572. Select desired theme 109583. Click "Save Theme" 109594. Refresh page to see changes 10960 10961### Notes 10962- Themes only affect sidebar widget appearance 10963- Main calendar view unchanged 10964- Theme setting stored in `data/meta/calendar_theme.txt` 10965- Safe to switch themes - no data affected 10966 10967## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING 10968 10969### Bug Fixes 10970- **Fixed:** Events now sort chronologically by time (was using string comparison) 10971- **Fixed:** Tooltip positioning using JavaScript like system tooltips 10972- **Fixed:** All-day events appear first, then events in time order 10973 10974### Technical Details 10975 10976**Event Sorting Fix**: 10977```php 10978// BROKEN (v4.0.9): 10979return strcmp($aTime, $bTime); 10980// String comparison: "10:00" < "8:00" because "1" < "8" 10981// Result: 10:00 AM shown BEFORE 8:00 AM ❌ 10982 10983// FIXED (v4.1.0): 10984$aMinutes = $this->timeToMinutes($aTime); // 8:00 = 480 10985$bMinutes = $this->timeToMinutes($bTime); // 10:00 = 600 10986return $aMinutes - $bMinutes; 10987// Result: 8:00 AM shown BEFORE 10:00 AM ✓ 10988``` 10989 10990**Example Before Fix**: 10991``` 10992 Weekend Ticket Duty (all-day) 109938:00 AM START TICKETS 1099410:00 AM Soul Winning ← Wrong! 109959:45 AM Coffee ← Should be before 10:00 AM 10996``` 10997 10998**Example After Fix**: 10999``` 11000 Weekend Ticket Duty (all-day) 110018:00 AM START TICKETS 110029:45 AM Coffee ← Correct! 1100310:00 AM Soul Winning 11004``` 11005 11006**Tooltip Positioning**: 11007- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()` 11008- Uses CSS custom properties `--tooltip-left` and `--tooltip-top` 11009- Positioned on `mouseenter` event 11010- Matches system tooltip implementation (no cutoff) 11011 11012**JavaScript Implementation**: 11013```javascript 11014element.addEventListener("mouseenter", function() { 11015 const rect = element.getBoundingClientRect(); 11016 element.style.setProperty("--tooltip-left", (rect.right - 10) + "px"); 11017 element.style.setProperty("--tooltip-top", (rect.top - 30) + "px"); 11018}); 11019``` 11020 11021**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically! 11022 11023## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX 11024 11025### UI Improvements 11026- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge 11027- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar 11028- **Changed:** Main calendar conflict tooltip now much smaller (was too big) 11029 11030### Technical Details 11031 11032**Sidebar Overflow Fix**: 11033```php 11034// Before (line 2005): 11035style="...overflow:hidden..." // ← Blocked tooltips! 11036 11037// After: 11038style="...overflow:visible..." // ← Tooltips extend beyond! 11039``` 11040 11041**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important` 11042 11043**Main Calendar Tooltip Size**: 11044```css 11045/* Before: */ 11046.conflict-tooltip { 11047 border: 2px solid #ff9800; 11048 border-radius: 6px; 11049 padding: 8px 12px; 11050 font-size: 12px; 11051 min-width: 200px; 11052 max-width: 350px; 11053} 11054 11055/* After: */ 11056.conflict-tooltip { 11057 border: 1px solid #ff9800; /* Thinner */ 11058 border-radius: 3px; /* Smaller */ 11059 padding: 4px 8px; /* Less padding */ 11060 font-size: 10px; /* Smaller header */ 11061 min-width: 120px; /* Narrower */ 11062 max-width: 200px; /* Narrower */ 11063} 11064 11065.conflict-tooltip-body { 11066 padding: 6px 8px; /* Was 10px 12px */ 11067 font-size: 9px; /* Was 11px */ 11068 line-height: 1.4; /* Was 1.6 */ 11069} 11070 11071.conflict-item { 11072 padding: 2px 0; /* Was 4px */ 11073 font-size: 9px; /* Added smaller font */ 11074} 11075``` 11076 11077**Result**: 11078- Main calendar tooltip ~50% smaller 11079- Sidebar tooltips now extend beyond borders 11080- Both tooltips compact and readable 11081 11082## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP 11083 11084### Bug Fix 11085- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text) 11086- **Changed:** Using HTML entity ` ` for newlines instead of `\n` 11087 11088### Technical Details 11089 11090**The Problem**: 11091```php 11092// Before (v4.0.7): 11093$conflictTooltip = 'Conflicts with:\n'; // Literal \n showed in tooltip 11094 11095// Displayed as: 11096"Conflicts with:\n• Event 1\n• Event 2" // ← Literal backslash-n 11097``` 11098 11099**The Fix**: 11100```php 11101// After (v4.0.8): 11102$conflictTooltip = "Conflicts with: "; // HTML entity for newline 11103 11104// Displays as: 11105Conflicts with: 11106• Event 1 11107• Event 2 11108``` 11109 11110**Why ` ` Works**: 11111- HTML entity for line feed character 11112- Works in data attributes 11113- CSS `white-space: pre-line` preserves the newlines 11114- Renders as actual line breaks in tooltip 11115 11116**Applied to**: 11117- PHP rendering (sidebar Today/Tomorrow/Important) 11118- JavaScript rendering (clicked day events) 11119 11120## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX 11121 11122### UI Improvements 11123- **Changed:** Tooltip size reduced significantly (much more compact) 11124- **Fixed:** Tooltip now overflows sidebar borders (not cut off) 11125- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px) 11126- **Changed:** Narrower width (120-200px vs 200-300px) 11127 11128### Technical Details 11129 11130**Tooltip Size Reduction**: 11131```css 11132/* Before (v4.0.6): 11133padding: 6px 10px; 11134font-size: 11px; 11135min-width: 200px; 11136max-width: 300px; 11137 11138/* After (v4.0.7): */ 11139padding: 3px 6px; 11140font-size: 9px; 11141min-width: 120px; 11142max-width: 200px; 11143``` 11144 11145**Overflow Fix**: 11146```css 11147/* Allow tooltip to extend beyond sidebar */ 11148.sidebar-widget, 11149.sidebar-matrix { 11150 overflow: visible !important; 11151} 11152 11153/* Position tooltip outside */ 11154[data-tooltip]:before { 11155 bottom: 120%; /* Further above */ 11156 right: -10px; /* Can extend beyond edge */ 11157 z-index: 10000; /* Always on top */ 11158} 11159``` 11160 11161**Visual Result**: 11162- Tooltip is ~40% smaller 11163- Extends beyond sidebar border if needed 11164- Still readable, just more compact 11165- Better for small screens 11166 11167## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING 11168 11169### Critical Fix 11170- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly 11171- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names 11172- **Fixed:** Events without end time now treated as zero-duration (not +1 hour) 11173- **Fixed:** Now matches what you see in main calendar view 11174 11175### ✨ UI Improvement 11176- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right) 11177- **Added:** Custom CSS tooltip with data-tooltip attribute 11178- **Improved:** Better tooltip positioning - doesn't overflow screen edges 11179 11180### Technical Details 11181 11182**The Problem - Field Name Mismatch**: 11183```php 11184// Main calendar (line 697): 11185$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase) 11186 11187// Sidebar (before fix): 11188$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case) 11189``` 11190 11191**The Problem - Duration Logic**: 11192```php 11193// Main calendar (line 697): 11194$end1 = isset($evt1['endTime']) && !empty($evt1['endTime']) 11195 ? $evt1['endTime'] 11196 : $evt1['time']; // ← Uses START time (zero duration) 11197 11198// Sidebar (before fix): 11199$endTime = ... ? ... : $this->addHoursToTime($startTime, 1); // ← Added 1 hour! 11200``` 11201 11202**The Fix**: 11203```php 11204// Now checks BOTH field names: 11205if (isset($event['end_time']) && $event['end_time'] !== '') { 11206 $endTime = $event['end_time']; 11207} elseif (isset($event['endTime']) && $event['endTime'] !== '') { 11208 $endTime = $event['endTime']; 11209} else { 11210 $endTime = $startTime; // ← Matches main calendar! 11211} 11212``` 11213 11214**Tooltip Positioning**: 11215- Uses `data-tooltip` attribute instead of `title` 11216- CSS positions tooltip ABOVE badge (`bottom: 100%`) 11217- Aligns to RIGHT edge (`right: 0`) 11218- Arrow points down to badge 11219- Black background with white text 11220- Max width 300px 11221 11222### Example 11223 11224**6:00 PM Evening Service** (no end time): 11225- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌ 11226- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar! 11227 11228**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**: 11229- Zero-duration events at 6:00 PM don't overlap with anything 11230- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict 11231 11232**Tooltip appears**: 11233``` 11234 ┌────────────────────┐ 11235 │ Conflicts with: │ 11236 │ • Super Bowl │ 11237 │ (3:30 PM-7:00 PM)│ 11238 └─────────┬──────────┘ 11239 ▼ 11240 ⚠ 11241``` 11242 11243## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING 11244 11245### Bug Fix 11246- **Fixed:** Events without end_time now properly get 1-hour default duration 11247- **Fixed:** Empty string end_time values now treated as missing (was causing issues) 11248- **Improved:** More robust checking for `end_time` field (checks both isset and not empty) 11249 11250### Technical Details 11251 11252**The Problem**: 11253```php 11254// Before (broken): 11255$endTime = isset($event['end_time']) ? $event['end_time'] : default; 11256 11257// If end_time exists but is empty string "": 11258isset($event['end_time']) = TRUE 11259$endTime = "" // ← Empty string, not default! 11260``` 11261 11262**The Fix**: 11263```php 11264// After (fixed): 11265$endTime = (isset($event['end_time']) && $event['end_time'] !== '') 11266 ? $event['end_time'] 11267 : $this->addHoursToTime($startTime, 1); 11268 11269// Now empty string gets the default 1-hour duration 11270``` 11271 11272**Why This Matters**: 11273Events 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. 11274 11275**Example**: 11276``` 11277Super Bowl: 3:30 PM - 7:00 PM 11278Evening Service: 6:00 PM - ??? (should be 7:00 PM) 11279 11280If end_time = "" (empty string): 11281 Old code: Uses "" → conflict detection fails 11282 New code: Uses 7:00 PM → conflict detected ✓ 11283``` 11284 11285### Testing 11286If you're still not seeing the conflict on the 6:00 PM service: 112871. Check if the event has `end_time` set in the JSON 112882. Clear cache (Admin → Manage Events → Clear Cache) 112893. The conflict should now appear 11290 11291## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS 11292 11293### ✨ Feature Added 11294- **Added:** Hover over ⚠ badge to see which events are conflicting 11295- **Added:** Tooltip shows conflicting event titles and times 11296- **Added:** Works in both sidebar sections and clicked day events 11297 11298### Technical Details 11299 11300**Conflict Tracking Enhanced**: 11301```php 11302// Now tracks WHICH events conflict: 11303$event['conflictingWith'] = [ 11304 ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'], 11305 ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30'] 11306]; 11307``` 11308 11309**Tooltip Format**: 11310``` 11311Conflicts with: 11312• Meeting (10:00 AM-11:00 AM) 11313• Call (10:30 AM-11:30 PM) 11314``` 11315 11316**Where It Works**: 11317- ✅ Today section (sidebar) 11318- ✅ Tomorrow section (sidebar) 11319- ✅ Important Events section (sidebar) 11320- ✅ Clicked day events (week grid) 11321 11322**Cursor**: Changes to `help` cursor on hover to indicate tooltip 11323 11324### Note on Multi-Day Events 11325The 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. 11326 11327## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC 11328 11329### Bug Fixes 11330- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections 11331- **Fixed:** Important Events now shows events even if they're today or tomorrow 11332- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular) 11333 11334### Technical Details 11335 11336**Conflict Badge Issue**: 11337```php 11338// BROKEN (line 2511): 11339$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']); 11340// ↑ Checking 'conflicts' (plural) 11341 11342// But detectTimeConflicts() sets: 11343$event['conflict'] = true/false; 11344// ↑ Setting 'conflict' (singular) 11345 11346// FIXED: 11347$hasConflict = isset($event['conflict']) && $event['conflict']; 11348``` 11349 11350**Result**: Badge now shows for ALL conflicting events in sidebar sections 11351 11352**Important Events Logic Issue**: 11353```php 11354// BROKEN: 11355if ($dateKey === $todayStr) { 11356 $todayEvents[] = ...; 11357} elseif ($dateKey === $tomorrowStr) { 11358 $tomorrowEvents[] = ...; 11359} else { // ← Only checked if NOT today/tomorrow! 11360 if ($isImportant) { 11361 $importantEvents[] = ...; 11362 } 11363} 11364 11365// FIXED: 11366if ($dateKey === $todayStr) { 11367 $todayEvents[] = ...; 11368} 11369if ($dateKey === $tomorrowStr) { 11370 $tomorrowEvents[] = ...; 11371} 11372// ↑ Changed to separate 'if' statements 11373if ($isImportant && $dateKey in this week) { 11374 $importantEvents[] = ...; // ← Now includes today/tomorrow too! 11375} 11376``` 11377 11378**Result**: Important namespace events now show in Important section even if they're today or tomorrow 11379 11380### Conflict Badge Display 11381- Simplified to just ⚠ icon (no count) 11382- Orange color (#ff9800) 11383- 10px font size 11384- Hover shows "Time conflict detected" 11385 11386## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY 11387 11388### Bug Fix 11389- **Fixed:** Important Events section now displays all events correctly 11390- **Fixed:** Single-event days now get conflict flag (was returning early without flag) 11391- **Fixed:** Conflict detection no longer causes events to disappear from Important section 11392 11393### Technical Details 11394 11395**The Problem**: 11396- `detectTimeConflicts()` returned early if only 1 event on a day 11397- Returned original array without adding 'conflict' field 11398- This inconsistency caused issues in event categorization 11399 11400**The Solution**: 11401```php 11402// Before (broken): 11403if (empty($dayEvents) || count($dayEvents) < 2) { 11404 return $dayEvents; // No 'conflict' field added! 11405} 11406 11407// After (fixed): 11408if (count($dayEvents) === 1) { 11409 return [array_merge($dayEvents[0], ['conflict' => false])]; // Always add flag 11410} 11411``` 11412 11413**Result**: 11414- All events now have 'conflict' field consistently 11415- Single events: conflict = false 11416- Multiple events: conflict = true/false based on overlap 11417- Important Events section displays correctly 11418 11419## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES 11420 11421### Bug Fixes 11422- **Fixed:** Conflict badge (⚠) now displays in clicked day events 11423- **Fixed:** Recurring events edit now updates time and end_time correctly 11424- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit 11425 11426### ✨ Features Added 11427- **Added:** Time conflict detection for overlapping events 11428- **Added:** detectTimeConflicts() function checks all events on same day 11429- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions 11430- **Added:** Events now have 'conflict' flag set automatically 11431 11432### UI Changes 11433- **Changed:** Admin tab order: Manage Events (first), Update Plugin, ⚙️ Outlook Sync 11434- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin") 11435- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars) 11436 11437### Technical Details 11438 11439**Conflict Detection**: 11440```php 11441// Automatically detects overlapping events on same day 11442// Sets 'conflict' flag to true if event overlaps with another 11443$eventsWithConflicts = $this->detectTimeConflicts($dayEvents); 11444``` 11445 11446**Logic**: 11447- All-day events never conflict (no time set) 11448- Timed events check for overlap with other timed events 11449- Overlap = start1 < end2 AND start2 < end1 11450- Default duration is 60 minutes if no end_time 11451 11452**Recurring Events Fix**: 11453- Old: Updated `$event['start']` and `$event['end']` (wrong fields) 11454- New: Updates `$event['time']` and `$event['end_time']` (correct fields) 11455- Now edits actually save and update the events 11456 11457**Week View Bars**: 11458- Shows 4 colored bars instead of 3 11459- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc. 11460 11461## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE 11462 11463**Major Release**: Complete Matrix-themed calendar plugin with advanced features! 11464 11465### Major Features 11466 11467#### Sidebar Widget 11468- **Week Grid**: Interactive 7-day calendar with click-to-view events 11469- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips 11470- **Live Clock**: Updates every second with date display 11471- **Real-time Weather**: Geolocation-based temperature with icon 11472- **Event Sections**: Today (orange), Tomorrow (green), Important (purple) 11473- **Add Event Button**: Dark green bar opens full event creation dialog 11474- **Matrix Theme**: Green glow effects throughout 11475 11476#### Event Management 11477- **Single Color Bars**: Clean 3px bars showing event's assigned color 11478- **All-Day Events First**: Then sorted chronologically by time 11479- **Conflict Detection**: Orange ⚠ badge on overlapping events 11480- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//) 11481- **HTML Rendering**: Pre-rendered for JavaScript display 11482- **Click-to-View**: Click week grid days to expand event details 11483 11484#### Admin Interface 11485- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button 11486- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings 11487- **Manage Events Tab**: Browse, edit, delete, move events across namespaces 11488 11489#### Outlook Sync 11490- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook 11491- **Category Mapping**: Map colors to Outlook categories 11492- **Conflict Resolution**: Time conflict detection 11493- **Import/Export Config**: Encrypted configuration files 11494 11495### Design 11496- **Matrix Theme**: Authentic green glow aesthetic 11497- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections 11498- **Color Scheme**: 11499 - Today: Orange #ff9800 11500 - Tomorrow: Green #4caf50 11501 - Important: Purple #9b59b6 11502 - Add Event: Dark green #006400 11503 - System bars: Green/Purple/Orange 11504 11505### Technical Highlights 11506- **Zero-margin Design**: Perfect flush alignment throughout 11507- **Flexbox Layout**: Modern, responsive structure 11508- **AJAX Operations**: No page reloads needed 11509- **Smart Sorting**: All-day events first, then chronological 11510- **Tooltip System**: Detailed stats on hover (working correctly) 11511- **Event Dialog**: Full form with drag support 11512- **Cache Management**: One-click cache clearing 11513 11514### Breaking Changes from v3.x 11515- Removed dual color bars (now single event color bar only) 11516- Add Event button moved to between header and week grid 11517- All-day events now appear FIRST (not last) 11518- Update Plugin tab is now the default admin tab 11519 11520### Bug Fixes (v3.10.x → v4.0.0) 11521- ✅ Fixed color bars not showing (align-self:stretch vs height:100%) 11522- ✅ Fixed tooltip function naming (sanitized calId for JavaScript) 11523- ✅ Fixed weather display (added updateWeather function) 11524- ✅ Fixed HTML rendering in events (title_html/description_html fields) 11525- ✅ Fixed Add Event dialog (null check for calendar element) 11526- ✅ Fixed text positioning in Add Event button 11527- ✅ Fixed spacing throughout sidebar widget 11528 11529### Complete Feature List 11530- Full calendar view (month grid) 11531- Sidebar widget (week view) 11532- Event panel (standalone) 11533- Event list (date ranges) 11534- Namespace support 11535- Color coding 11536- Time conflict detection 11537- DokuWiki syntax in events 11538- Outlook synchronization 11539- System monitoring 11540- Weather display 11541- Live clock 11542- Admin interface 11543- Cache management 11544- Draggable dialogs 11545- AJAX save/edit/delete 11546- Import/export config 11547 11548### Usage 11549 11550**Sidebar Widget**: 11551``` 11552{{calendar sidebar}} 11553{{calendar sidebar namespace=team}} 11554``` 11555 11556**Full Calendar**: 11557``` 11558{{calendar}} 11559{{calendar year=2026 month=6 namespace=team}} 11560``` 11561 11562**Event Panel**: 11563``` 11564{{eventpanel}} 11565``` 11566 11567**Event List**: 11568``` 11569{{eventlist daterange=2026-01-01:2026-01-31}} 11570``` 11571 11572### Stats 11573- **40+ versions** developed during v3.x iterations 11574- **3.10.0 → 3.11.4**: Polish and refinement 11575- **4.0.0**: Production-ready Matrix Edition 11576 11577### Credits 11578Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration. 11579 11580--- 11581 11582## Previous Versions (v3.11.4 and earlier) 11583 11584## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING 11585- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px) 11586- **Improved:** Small breathing room between system stats bars and Add Event button 11587- **Visual:** Better spacing for cleaner appearance 11588 11589### CSS Change: 11590**eventlist-today-header**: 11591- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px` 11592 11593### Visual Result: 11594``` 11595│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats bars 11596│ │ ← 2px space (restored) 11597├───────────────────────┤ 11598│ + ADD EVENT │ ← Add Event bar 11599├───────────────────────┤ 11600``` 11601 11602**Before (v3.11.3)**: No space, bars directly touch Add Event button 11603**After (v3.11.4)**: 2px breathing room for better visual hierarchy 11604 11605## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION 11606- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset 11607- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error 11608- **Changed:** Add Event text moved up 1px (position:relative; top:-1px) 11609- **Changed:** Line-height reduced from 12px to 10px for better text centering 11610- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets 11611 11612### JavaScript Fix: 11613**Problem**: Line 1084-1085 in calendar-main.js 11614```javascript 11615const calendar = document.getElementById(calId); 11616const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error! 11617``` 11618 11619**Solution**: Added null check 11620```javascript 11621const calendar = document.getElementById(calId); 11622const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null; 11623``` 11624 11625**Why This Happened**: 11626- Regular calendar has element with id=calId 11627- Sidebar widget doesn't have this element (different structure) 11628- Code tried to read .dataset on null, causing error 11629 11630### Text Position Fix: 11631**Before**: 11632- line-height: 12px 11633- vertical-align: middle 11634- Text slightly low 11635 11636**After**: 11637- line-height: 10px 11638- position: relative; top: -1px 11639- Text perfectly centered 11640 11641### What Works Now: 11642✅ Click "+ ADD EVENT" in sidebar → Dialog opens 11643✅ No console errors 11644✅ Text properly centered vertically 11645✅ Form pre-filled with today's date 11646✅ Save works correctly 11647 11648## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR 11649- **Added:** Event dialog to sidebar widget (same as regular calendar) 11650- **Changed:** Add Event button now opens proper event form dialog 11651- **Added:** renderEventDialog() called in renderSidebarWidget() 11652- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date 11653- **Improved:** Can now add events directly from sidebar widget 11654 11655### Add Event Button Behavior: 11656**Before (v3.11.1)**: Showed alert with instructions 11657**After (v3.11.2)**: Opens full event creation dialog 11658 11659**Dialog Features**: 11660- Date field (defaults to today) 11661- Title field (required) 11662- Time field (optional) 11663- End time field (optional) 11664- Color picker 11665- Category field 11666- Description field 11667- Save and Cancel buttons 11668- Draggable dialog 11669 11670### Technical Changes: 11671- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget() 11672- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')` 11673- Dialog uses same structure as regular calendar 11674- Uses existing openAddEvent() and saveEventCompact() JavaScript functions 11675 11676### User Flow: 116771. User clicks "+ ADD EVENT" green bar 116782. Event dialog opens with today's date pre-filled 116793. User fills in event details 116804. User clicks Save 116815. Event saved via AJAX 116826. Dialog closes 116837. Sidebar refreshes to show new event 11684 11685## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG 11686- **Fixed:** Removed bottom padding from header (was 2px, now 0) 11687- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0) 11688- **Fixed:** Add Event bar now flush against header with zero gap 11689- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin 11690- **Improved:** Alert provides clear instructions on how to add events 11691 11692### CSS Changes: 11693**eventlist-today-header**: 11694- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom) 11695 11696**eventlist-stats-container**: 11697- `margin-top: 2px` → `margin: 0` (removed all margins) 11698 11699### Add Event Button Behavior: 11700**Before**: Clicked → Navigated to Admin → Manage Events tab 11701**After**: Clicked → Shows alert with instructions 11702 11703**Alert Message**: 11704``` 11705To add an event, go to: 11706Admin → Calendar Management → Manage Events tab 11707or use the full calendar view {{calendar}} 11708``` 11709 11710### Visual Result: 11711``` 11712│ ▓▓▓░░ ▓▓░░░ ▓▓▓▓░ │ ← Stats (no margin-bottom) 11713├────────────────────────┤ 11714│ + ADD EVENT │ ← Perfectly flush! 11715├────────────────────────┤ 11716``` 11717 11718No gaps, perfectly aligned! 11719 11720## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE 11721- **Moved:** Add Event bar back to original position (between header and week grid) 11722- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff) 11723- **Changed:** Letter spacing reduced from 0.5px to 0.4px 11724- **Fixed:** Text now fully visible without being cut off 11725- **Final:** Optimal position and size determined 11726 11727### Final Layout: 11728``` 11729┌─────────────────────────────┐ 11730│ Clock | Weather | Stats │ ← Header 11731├─────────────────────────────┤ 11732│ + ADD EVENT │ ← Bar (back here, smaller text) 11733├─────────────────────────────┤ 11734│ M T W T F S S │ ← Week Grid 11735│ 3 4 5 6 7 8 9 │ 11736├─────────────────────────────┤ 11737│ Today │ ← Event sections 11738└─────────────────────────────┘ 11739``` 11740 11741### Text Size Changes: 11742**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off 11743**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible 11744 11745### Why This Position: 11746- Separates header from calendar 11747- Natural action point after viewing stats 11748- Users see stats → decide to add event → view calendar 11749- Consistent with original design intent 11750 11751## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID 11752- **Moved:** Add Event bar repositioned from between header/grid to below week grid 11753- **Improved:** Better visual flow - header → stats → grid → add button → events 11754- **Changed:** Add Event bar now acts as separator between calendar and event sections 11755 11756### New Layout: 11757``` 11758┌─────────────────────────────┐ 11759│ Clock | Weather | Stats │ ← Header 11760├─────────────────────────────┤ 11761│ M T W T F S S │ ← Week Grid 11762│ 3 4 5 6 7 8 9 │ 11763├─────────────────────────────┤ 11764│ + ADD EVENT │ ← Add bar (moved here!) 11765├─────────────────────────────┤ 11766│ Today │ ← Event sections 11767│ Tomorrow │ 11768│ Important Events │ 11769└─────────────────────────────┘ 11770``` 11771 11772### Visual Flow: 11773**Before (v3.10.8)**: 117741. Header (clock, weather, stats) 117752. **+ ADD EVENT** bar 117763. Week grid 117774. Event sections 11778 11779**After (v3.10.9)**: 117801. Header (clock, weather, stats) 117812. Week grid (calendar days) 117823. **+ ADD EVENT** bar 117834. Event sections 11784 11785### Benefits: 11786- Natural reading flow: View calendar → Add event → See events 11787- Add button positioned between calendar and event list 11788- Acts as visual separator 11789- More logical action placement 11790 11791## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR 11792- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color 11793- **Changed:** Events now display with single 3px color bar (event's assigned color only) 11794- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly 11795- **Simplified:** Cleaner visual with one color bar instead of two 11796- **Improved:** More space for event content without extra bar 11797 11798### Visual Changes: 11799 11800**Before (v3.10.7)** - Dual color bars: 11801``` 11802├─ [Orange][Green] Event Title 11803├─ [Blue][Purple] Event Title 11804``` 11805 11806**After (v3.10.8)** - Single color bar: 11807``` 11808├─ [Green] Event Title ← Only event color! 11809├─ [Purple] Event Title ← Only event color! 11810``` 11811 11812### Add Bar Changes: 11813- Added `margin:0` to eliminate gaps 11814- Now flush against header (no space above) 11815- Now flush against week grid (no space below) 11816- Perfect seamless connection 11817 11818### Technical Changes: 11819**renderSidebarEvent()**: 11820- Removed section color bar (4px) 11821- Kept only event color bar (3px) 11822 11823**showDayEvents() JavaScript**: 11824- Removed section color bar (4px blue) 11825- Kept only event color bar (3px) 11826 11827**Add Event bar**: 11828- Added `margin:0` inline style 11829- Removed all top/bottom margins 11830 11831## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR 11832- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day) 11833- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%` 11834- **Changed:** Add Event bar color from orange to dark green (#006400) 11835- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off) 11836- **Changed:** Add Event bar text now bright green (#00ff00) with green glow 11837- **Changed:** Add Event bar font size increased from 7px to 9px 11838- **Changed:** Add Event bar letter spacing increased to 0.5px 11839- **Improved:** Hover effect on Add Event bar now darker green (#004d00) 11840 11841### Color Bar Fix Details: 11842**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars 11843**Solution**: Applied same fix as clicked day events: 11844- Changed parent div: `align-items:start` → `align-items:stretch` 11845- Added `min-height:20px` to parent 11846- Changed bars: `height:100%` → `align-self:stretch` 11847- Bars now properly fill vertical space in ALL sections 11848 11849### Add Event Bar Changes: 11850**Before**: 11851- Background: Orange (#ff9800) 11852- Text: Black (#000) 11853- Height: 6px (text cut off) 11854- Font: 7px 11855 11856**After**: 11857- Background: Dark green (#006400) 11858- Text: Bright green (#00ff00) with green glow 11859- Height: 12px (text fully visible) 11860- Font: 9px 11861- Hover: Darker green (#004d00) 11862- Matrix-themed green aesthetic 11863 11864## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE 11865- **Fixed:** Event color bars now display correctly in clicked day events 11866- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events 11867- **Added:** Conflict badge (⚠) appears on right side of conflicting events 11868- **Updated:** Complete README.md rewrite with full Matrix theme documentation 11869- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering) 11870- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px` 11871- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning 11872 11873### Color Bar Fix: 11874**Problem**: Bars had `height:100%` but parent had no explicit height 11875**Solution**: 11876- Changed to `align-self:stretch` on bars 11877- Parent uses `align-items:stretch` 11878- Added `min-height:20px` to parent 11879- Bars now properly fill vertical space 11880 11881### Sorting Change: 11882**Before**: Timed events first → All-day events last 11883**After**: All-day events FIRST → Timed events chronologically 11884 11885**Example**: 11886``` 11887Monday, Feb 5 11888├─ All Day - Project Deadline ← All-day first 11889├─ 8:00 AM - Morning Standup ← Earliest time 11890├─ 10:30 AM - Coffee with Bob 11891└─ 2:00 PM - Team Meeting ← Latest time 11892``` 11893 11894### Conflict Badge: 11895- Orange warning triangle (⚠) on right side 11896- 10px font size 11897- Only appears if `event.conflict` is true 11898- Title attribute shows "Time conflict detected" 11899- Small and unobtrusive 11900 11901### README Update: 11902- Complete rewrite with Matrix theme focus 11903- Full usage instructions for all features 11904- Admin interface documentation 11905- Outlook sync setup guide 11906- System monitoring details 11907- Troubleshooting section 11908- Color scheme reference 11909- File structure documentation 11910- Performance tips 11911- Security notes 11912- Quick start examples 11913 11914## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR 11915- **Added:** Events now sorted by time when clicking week grid days 11916- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px) 11917- **Improved:** Events with times appear first, sorted chronologically 11918- **Improved:** All-day events appear after timed events 11919- **Changed:** Add Event bar font size reduced to 7px (from 10px) 11920- **Changed:** Add Event bar now has 0 padding and fixed 6px height 11921 11922### Sorting Logic: 11923- Events with times sorted by time (earliest first) 11924- All-day events (no time) appear at the end 11925- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare 11926- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event 11927 11928### Add Event Bar Changes: 11929- **Height**: 6px (was ~12px with padding) 11930- **Padding**: 0 (was 4px top/bottom) 11931- **Font Size**: 7px (was 10px) 11932- **Letter Spacing**: 0.3px (was 0.5px) 11933- **Line Height**: 6px to match height 11934- **Vertical Align**: Middle for text centering 11935 11936## Version 3.10.4 (2026-02-06) - ADD EVENT BAR 11937- **Added:** Thin orange "Add Event" bar between header and week grid 11938- **Added:** Quick access to event creation from sidebar widget 11939- **Styled:** Sleek design with hover effects and glow 11940- **Interactive:** Clicks navigate to Manage Events tab in admin 11941- **Improved:** User workflow for adding events from sidebar 11942 11943### Visual Design: 11944- Orange background (#ff9800) matching Today section color 11945- 4px top/bottom padding for thin, sleek appearance 11946- Black text with white text-shadow for visibility 11947- Hover effect: Darkens to #ff7700 with enhanced glow 11948- Orange glow effect (box-shadow) matching Matrix theme 11949- Centered "+ ADD EVENT" text (10px, bold, letter-spacing) 11950 11951### Technical Changes: 11952- Added between header close and renderWeekGrid() call 11953- Inline onclick handler navigates to admin manage tab 11954- Inline onmouseover/onmouseout for hover effects 11955- Smooth 0.2s transition on all style changes 11956 11957## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION 11958- **Changed:** Update Plugin tab is now the default tab when opening admin 11959- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab 11960- **Improved:** Clear Cache button now larger and more prominent with helpful description 11961- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events 11962- **Removed:** Debug console.log statements from day event display 11963- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab 11964 11965### UI Changes: 11966- Update Plugin tab opens by default (was Config/Outlook Sync tab) 11967- Clear Cache button prominently displayed at top of Update Plugin tab 11968- Orange ️ button (10px 20px padding) with confirmation dialog 11969- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin" 11970- Success/error messages display on Update Plugin tab after cache clear 11971- Tab navigation reordered to put Update first 11972 11973### Technical Changes: 11974- Default tab changed from 'config' to 'update' in html() method 11975- Tab navigation HTML reordered to show Update Plugin tab first 11976- clearCache() method now redirects with 'update' tab parameter 11977- Removed Clear Cache button from renderConfigTab() 11978- Added Clear Cache button to renderUpdateTab() with message display 11979 11980## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX 11981- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days 11982- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML 11983- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields 11984- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events 11985 11986### Technical Changes: 11987- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render() 11988- Events added to weekEvents now include pre-rendered HTML versions 11989- title_html and description_html fields populated before json_encode() 11990- JavaScript now receives properly formatted HTML content 11991 11992## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON 11993- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123) 11994- **Fixed:** HTML event handlers now call correctly sanitized function names 11995- **Fixed:** Weather temperature now updates correctly in sidebar widget 11996- **Added:** Weather update function to sidebar widget JavaScript 11997- **Added:** "Clear Cache" button in admin panel for easy cache refresh 11998- **Added:** Default weather location set to Irvine, CA when geolocation unavailable 11999- **Improved:** All tooltip functions now work correctly on system status bars 12000 12001### Technical Changes: 12002- Changed tooltip function names to use $jsCalId instead of $calId 12003- Changed HTML onmouseover/onmouseout to use $jsCalId 12004- Added updateWeather() function to sidebar widget 12005- Added getWeatherIcon() function to sidebar widget 12006- Added clearCache() method in admin.php 12007- Added recursiveDelete() helper method in admin.php 12008- Admin UI now has ️ Clear Cache button alongside Export/Import 12009 12010## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES 12011- **Fixed:** JavaScript syntax error "Missing initializer in const declaration" 12012- **Fixed:** Event links and formatting not displaying in clicked day events 12013- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores 12014- **Changed:** Event titles now use `title_html` field to preserve HTML formatting 12015- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting 12016- **Improved:** All JavaScript variable names now use valid syntax 12017- **Improved:** Links, bold, italic, and other HTML formatting preserved in events 12018 12019### Technical Changes: 12020- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);` 12021- JavaScript variables now use underscores instead of dashes 12022- Event HTML rendering preserves DokuWiki formatting 12023- Fixed "showTooltip_sidebar is not defined" errors 12024- Fixed "showDayEvents_cal is not defined" errors 12025 12026## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX 12027- **Fixed:** Critical JavaScript loading order issue causing ReferenceError 12028- **Fixed:** Functions now defined BEFORE HTML that uses them 12029- **Changed:** Consolidated all JavaScript into single comprehensive script block 12030- **Removed:** ~290 lines of duplicate JavaScript code 12031- **Added:** Shared state management with `sharedState_[calId]` object 12032- **Improved:** System tooltip functions now work correctly 12033- **Improved:** Week grid click events now work correctly 12034 12035### Technical Changes: 12036- Moved all JavaScript to beginning of widget (before HTML) 12037- Removed duplicate script blocks 12038- Unified tooltip and stats functions 12039- Shared latestStats and cpuHistory state 12040- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined" 12041 12042## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS 12043- **Added:** Dual color bars on events (section color + event color) 12044- **Added:** Click week grid days to view events (replaced hover tooltips) 12045- **Added:** Expandable section below week grid for selected day events 12046- **Added:** Blue theme for selected day section 12047- **Changed:** Week grid days now clickable instead of tooltips 12048- **Changed:** Section bar: 4px wide (left) 12049- **Changed:** Event bar: 3px wide (right) 12050- **Increased:** Gap between color bars from 3px to 6px 12051- **Improved:** Click is more reliable and mobile-friendly than hover tooltips 12052 12053### Visual Changes: 12054- Each event shows TWO color bars side-by-side 12055- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue) 12056- Right bar (3px): Individual event's assigned color 12057- Click any day in week grid to expand event list 12058- X button to close selected day events 12059 12060## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY 12061- **Increased:** Event color bar width from 2px to 3px 12062- **Increased:** Gap between section and event bars from 3px to 6px 12063- **Improved:** Event color bars now more visible alongside section bars 12064- **Note:** Dual color bar system already in place from v3.9.6 12065 12066## Version 3.9.6 (2026-02-05) - UI REFINEMENTS 12067- **Changed:** Date in Important Events moved below event name (was above) 12068- **Changed:** Section headers now 9px font size (was 10px) 12069- **Changed:** Section headers now normal case (was ALL CAPS) 12070- **Changed:** Letter spacing reduced from 0.8px to 0.3px 12071- **Improved:** More natural reading flow with date below event name 12072- **Improved:** Cleaner, more subtle section headers 12073 12074### Header Changes: 12075- "TODAY" → "Today" 12076- "TOMORROW" → "Tomorrow" 12077- "IMPORTANT EVENTS" → "Important Events" 12078 12079## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN 12080- **Redesigned:** Complete overhaul of `sidebar` parameter 12081- **Added:** Compact week-at-a-glance itinerary view (200px wide) 12082- **Added:** Live clock widget at top of sidebar 12083- **Added:** 7-cell week grid showing event bars 12084- **Added:** Today section with orange header and left border 12085- **Added:** Tomorrow section with green header and left border 12086- **Added:** Important Events section with purple header and left border 12087- **Added:** Admin setting to configure important namespaces 12088- **Added:** Time conflict badges in sidebar events 12089- **Added:** Task checkboxes in sidebar events 12090- **Changed:** Sidebar now optimized for narrow spaces (200px) 12091- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets 12092 12093### New Features: 12094- Clock updates every second showing current time 12095- Week grid shows Mon-Sun with colored event bars 12096- Today/Tomorrow sections show full event details 12097- Important events highlighted in purple (configurable namespaces) 12098- All badges (conflict, time, etc.) shown in compact format 12099- Automatic time conflict detection 12100 12101## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP 12102- **Removed:** 16 unused/debug/backup files 12103- **Removed:** 69 console.log() debug statements 12104- **Removed:** 3 orphaned object literals from console.log removal 12105- **Removed:** Temporary comments and markers 12106- **Fixed:** JavaScript syntax errors from cleanup 12107- **Improved:** Code quality and maintainability 12108- **Improved:** Reduced plugin size by removing unnecessary files 12109- **Status:** Production-ready, fully cleaned codebase 12110 12111### Files Removed: 12112- style.css.backup, script.js.backup 12113- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php 12114- debug_events.php, debug_html.php, cleanup_events.php 12115- fix_corrupted_json.php, fix_wildcard_namespaces.php 12116- find_outlook_duplicates.php, update_namespace.php 12117- validate_calendar_json.php, admin.js 12118- test_date_field.html 12119 12120## Version 3.7.5 (2026-02-05) 12121- **Fixed:** PHP syntax error (duplicate foreach loop removed) 12122- **Fixed:** Time variable handling in grace period logic 12123 12124## Version 3.7.4 (2026-02-05) 12125- **Added:** 15-minute grace period for timed events 12126- **Changed:** Events with times now stay visible for 15 minutes after their start time 12127- **Changed:** Prevents events from immediately disappearing when they start 12128- **Improved:** Better user experience for ongoing events 12129- **Fixed:** Events from earlier today now properly handled with grace period 12130 12131## Version 3.7.3 (2026-02-05) 12132- **Changed:** Complete redesign of cleanup section for compact, sleek layout 12133- **Changed:** Radio buttons now in single row at top 12134- **Changed:** All options visible with grayed-out inactive states (opacity 0.4) 12135- **Changed:** Inline controls - no more grid layout or wrapper boxes 12136- **Changed:** Namespace filter now compact single-line input 12137- **Changed:** Smaller buttons and tighter spacing throughout 12138- **Improved:** More professional, space-efficient design 12139 12140## Version 3.7.2 (2026-02-04) 12141- **Fixed:** Strange boxes under cleanup options - now properly hidden 12142- **Changed:** Unified color scheme across all admin sections 12143- **Changed:** Green (#00cc07) - Primary actions and main theme 12144- **Changed:** Orange (#ff9800) - Warnings and cleanup features 12145- **Changed:** Purple (#7b1fa2) - Secondary actions and accents 12146- **Improved:** Consistent visual design throughout admin interface 12147 12148## Version 3.7.1 (2026-02-04) 12149- **Fixed:** Cleanup section background changed from orange to white 12150- **Fixed:** Event cleanup now properly scans all calendar directories 12151- **Added:** Debug info display when preview finds no events 12152- **Improved:** Better directory scanning logic matching other features 12153 12154## Version 3.7.0 (2026-02-04) 12155- **Added:** Event cleanup feature in Events Manager 12156- **Added:** Delete old events by age (months/years old) 12157- **Added:** Delete events by status (completed tasks, past events) 12158- **Added:** Delete events by date range 12159- **Added:** Namespace filter for targeted cleanup 12160- **Added:** Preview function to see what will be deleted 12161- **Added:** Automatic backup creation before cleanup 12162- **Changed:** Reduced changelog viewer height to 100px (was 400px) 12163 12164## Version 3.6.3 (2026-02-04) 12165- **Fixed:** Conflict tooltips now work properly after navigating between months 12166- **Added:** Changelog display in Update Plugin tab 12167- **Added:** CHANGELOG.md file with version history 12168- **Improved:** Changelog shows last 10 versions with color-coded change types 12169- **Fixed:** Removed debug console.log statements 12170 12171## Version 3.6.2 (2026-02-04) 12172- **Fixed:** Month title now updates correctly when navigating between months 12173- **Changed:** All eventpanel header elements reduced by 10% for more compact design 12174- **Changed:** Reduced header height from 78px to 70px 12175 12176## Version 3.6.1 (2026-02-04) 12177- **Changed:** Complete redesign of eventpanel header with practical two-row layout 12178- **Fixed:** Improved layout for narrow widths (~500px) 12179- **Changed:** Simplified color scheme (removed purple gradient) 12180 12181## Version 3.6.0 (2026-02-04) 12182- **Changed:** Redesigned eventpanel header with gradient background 12183- **Changed:** Consolidated multiple header rows into compact single-row design 12184 12185## Version 3.5.1 (2026-02-04) 12186- **Changed:** Moved event search bar into header row next to + Add button 12187- **Improved:** More compact UI with search integrated into header 12188 12189## Version 3.5.0 (2026-02-04) 12190- **Added:** Event search functionality in sidebar and eventpanel 12191- **Added:** Real-time filtering as you type 12192- **Added:** Clear button (✕) appears when searching 12193- **Added:** "No results" message when search returns nothing 12194 12195## Version 3.4.7 (2026-02-04) 12196- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding) 12197- **Fixed:** Removed debug logging from console 12198- **Changed:** Updated export version number to match plugin version 12199 12200## Version 3.4.6 (2026-02-04) 12201- **Added:** Debug logging to diagnose conflict detection issues 12202- **Development:** Extensive console logging for troubleshooting 12203 12204## Version 3.4.5 (2026-02-04) 12205- **Added:** Debug logging to showDayPopup and conflict detection 12206- **Development:** Added logging to trace conflict detection flow 12207 12208## Version 3.4.4 (2026-02-04) 12209- **Fixed:** Conflict detection now persists across page refreshes (PHP-based) 12210- **Fixed:** Conflict tooltips now appear on hover 12211- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation) 12212- **Added:** Conflict badges in both future and past events sections 12213 12214## Version 3.4.3 (2026-02-04) 12215- **Added:** Custom styled conflict tooltips with hover functionality 12216- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2) 12217- **Improved:** Beautiful tooltip design with orange header and clean formatting 12218 12219## Version 3.4.2 (2026-02-04) 12220- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3) 12221 12222## Version 3.4.1 (2026-02-04) 12223- **Fixed:** End time field now properly saves to database 12224- **Fixed:** End time dropdown now filters to show only valid times after start time 12225- **Added:** Smart dropdown behavior - expands on focus, filters invalid options 12226- **Improved:** End time auto-suggests +1 hour when start time selected 12227 12228## Version 3.4.0 (2026-02-04) 12229- **Added:** End time support for events (start and end times) 12230- **Added:** Automatic time conflict detection 12231- **Added:** Conflict warning badges (⚠️) on events with overlapping times 12232- **Added:** Conflict tooltips showing which events conflict 12233- **Added:** Visual conflict indicators with pulse animation 12234- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM") 12235 12236## Version 3.3.77 (2026-02-04) 12237- **Fixed:** Namespace badge onclick handlers restored after clearing filter 12238- **Fixed:** Namespace filtering works infinitely (filter → clear → filter) 12239 12240## Version 3.3.76 (2026-02-04) 12241- **Fixed:** Namespace badges now clickable after clearing namespace filter 12242 12243## Version 3.3.75 (2026-02-04) 12244- **Fixed:** Form resubmission warnings eliminated 12245- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303 12246- **Changed:** All admin redirects now use absolute URLs 12247 12248## Version 3.3.74 (2026-02-04) 12249- **Fixed:** Clearing namespace filter now restores original namespace instead of default 12250- **Added:** data-original-namespace attribute to preserve initial namespace setting 12251- **Improved:** Console logging for namespace filter debugging 12252 12253## Version 3.3.73 (2026-02-03) 12254- **Added:** Dynamic namespace filtering banner with clear button 12255- **Fixed:** JavaScript function accessibility issues 12256- **Fixed:** Namespace badge click handlers in event lists 12257- **Improved:** Persistent namespace filtering across views 12258 12259## Earlier Versions 12260See previous transcripts for complete history through v3.3.73, including: 12261- Recurring events with Outlook sync 12262- Multi-namespace support 12263- Event categories and mapping 12264- Backup/restore functionality 12265- System statistics bar 12266- Namespace selector with fuzzy search 12267- Events Manager with import/export 12268- And much more... 12269