xref: /plugin/calendar/CHANGELOG.md (revision 0c3b6e81ea51fcdea713a92bed21d8a9d13849e2)
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)
363364                                   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```
615616      •  •  •
617   •     →     •  ← Glowing trail
618      •  •  •
619620```
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```
719720  ✨    ✨
721✨   →   ✨  (cursor trail)
722  ✨    ✨
723724```
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└──┴──┴──┴──┴──┴──┴──┘
10981099    Green box (#00cc07)
1100```
1101
1102**Professional Theme**:
1103```
1104┌──┬──┬──┬──┬──┬──┬──┐
1105│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1106└──┴──┴──┴──┴──┴──┴──┘
11071108    Blue box (#4a90e2)
1109```
1110
1111**Wiki Theme**:
1112```
1113┌──┬──┬──┬──┬──┬──┬──┐
1114│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1115└──┴──┴──┴──┴──┴──┴──┘
11161117    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)
21842185Upload Form (full width)
21862187Current Version
21882189Recent Changes
21902191Backups
2192```
2193
2194**After (v5.1.8)**:
2195```
2196Current Version (full width)
21972198Upload (60%) | Notes (40%)
21992200Recent Changes
22012202Backups
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     │
2296calendar.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.ini3412- Perfect template match ✓
3413
3414**Backend (Admin)**:
3415- Reads same style.ini3416- 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/boxes4412
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
54925493Green left bar
5494```
5495
5496### Purple Event Box:
5497```
5498┌─────────────┐ Purple border
5499│Team Meeting │
5500│2:00 PM      │
5501└─────────────┘ Purple border
55025503Purple left bar
5504```
5505
5506### Professional Event Box:
5507```
5508┌─────────────┐ Gray border
5509│Team Meeting │
5510│2:00 PM      │
5511└─────────────┘ Gray border
55125513Event 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"
60346035            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"
60546055            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"
60746075   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"
60886089   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"
61026103   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** ✨"
61166117        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"
62346235     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"
62426243     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:** `&amp;` 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 `&amp;`
10442
10443**Cause**: Double encoding on line 2625 and 2681
10444```php
10445// Line 2625:
10446$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
10447
10448// Line 2681:
10449$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;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
10826Today/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 `&#10;` 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:&#10;";  // HTML entity for newline
11103
11104// Displays as:
11105Conflicts with:
11106• Event 1
11107• Event 2
11108```
11109
11110**Why `&#10;` 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        └─────────┬──────────┘
112391124011241```
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