xref: /plugin/calendar/CHANGELOG.md (revision 9ccd446ecbe25932c2e89f7608c11495a1f1dbac)
1# Calendar Plugin Changelog
2
3## Version 6.0.0 (2026-02-09) - CODE AUDIT & v6 RELEASE
4
5- **Audited:** All PHP files (syntax.php, action.php, admin.php, sync_outlook.php) — balanced braces confirmed
6- **Audited:** calendar-main.js (2,840 lines) — Node syntax check passed, 44 global functions verified
7- **Audited:** style.css (3,218 lines) — balanced braces confirmed
8- **Audited:** All admin manage tab action handlers verified functional (13 actions)
9- **New:** Fresh README.md for GitHub with complete documentation
10- **Includes all v5.5.x fixes:**
11  - Delta sync for Outlook (hash-based change tracking, O(changes) not O(total))
12  - Wiki theme sidebar section headers: distinct colors, no glow, themed day-click panel
13  - Conflict badges on past events after AJAX navigation
14  - Admin panel: green cleanup header, fixed broken CSS, endTime field name, cache clearing for all mutations, empty file cleanup, dead code removal
15
16## Version 5.5.9 (2026-02-09) - ADMIN MANAGE TAB CLEANUP
17
18- **Fixed:** Cleanup Old Events section header now green (#00cc07) to match all other section headers
19- **Fixed:** Recurring stat card had broken CSS from `$colors['bg'] . '3e0'` concatenation — now uses proper `#fff3e0`
20- **Fixed:** Same broken CSS pattern in Outlook Sync tab log warning
21- **Fixed:** `editRecurringSeries` wrote `end_time` instead of correct `endTime` field name
22- **Fixed:** `editRecurringSeries` used uninitialized `$firstEventDate` variable — now properly declared
23- **Fixed:** `moveEvents` and `moveSingleEvent` could crash if event date key didn't exist in JSON — added `isset()` check
24- **Fixed:** `moveSingleEvent` now cleans up empty date keys and deletes empty files after moving
25- **Fixed:** `deleteRecurringSeries` now cleans up empty date keys and deletes empty JSON files
26- **Fixed:** Export version was hardcoded as '3.4.6' — now reads dynamically from plugin.info.txt
27- **Added:** `clearStatsCache()` helper method — all 11 mutation functions now properly clear the event stats cache
28- **Removed:** Dead `move_events` action handler (all forms use `move_selected_events`)
29- **Removed:** `console.log` debug statements from `sortRecurringTable` and `editRecurringSeries`
30- **Removed:** Stale "NEW!" comment from Events Manager section
31
32## Version 5.5.8 (2026-02-09) - DELTA SYNC & WIKI THEME SIDEBAR POLISH
33
34- **Added:** Outlook sync now uses hash-based delta tracking — only new, modified, or deleted events hit the API
35- **Added:** computeEventHash() hashes all sync-relevant fields (title, description, time, date, color, namespace, task status)
36- **Added:** Sync state v2 format stores {outlookId, hash} per event; auto-migrates from v1 on first run
37- **Added:** Delta analysis summary shows new/modified/unchanged/deleted counts before syncing
38- **Changed:** Unchanged events are completely skipped (zero API calls) — O(changes) instead of O(total)
39- **Changed:** Removed per-run duplicate scan (was re-querying every event); use --clean-duplicates when needed
40- **Changed:** Wiki theme sidebar section headers now use distinct colors: orange (Today), green (Tomorrow), purple (Important)
41- **Fixed:** Wiki theme sidebar section headers no longer have colored glow — clean shadow instead
42- **Fixed:** Wiki theme week grid day-click panel header now uses accent color with white text
43- **Fixed:** Removed invalid var(--__...__) CSS syntax from inline styles (only works in CSS files, not HTML attributes)
44
45## Version 5.5.7 (2026-02-09) - WIKI THEME SIDEBAR POLISH
46
47- **Fixed:** Sidebar Today/Tomorrow/Important headers now use three distinct colors (orange/green/purple) instead of similar greys
48- **Fixed:** Sidebar section headers no longer glow on wiki theme (clean shadow like professional)
49- **Fixed:** Week grid day-click panel header now uses theme accent color with white text instead of grey background
50- **Fixed:** Removed invalid var(--__...__) CSS variable syntax from inline styles (DokuWiki replacements only work in CSS files)
51- **Changed:** Wiki theme section header text now white for readability on colored backgrounds
52- **Changed:** Week grid JS theme colors now use actual $themeStyles values
53
54## Version 5.5.6 (2026-02-09) - FIX CONFLICT BADGES ON PAST EVENTS AFTER AJAX
55
56- **Fixed:** Conflict badges now render on past events in JS rebuild path (were only in the future events branch)
57
58## Version 5.5.5 (2026-02-09) - FIX SIDEBAR CONFLICT TOOLTIP POSITIONING
59
60- **Fixed:** Sidebar widget conflict tooltips now display next to the badge instead of upper-left corner
61- **Fixed:** Week grid conflict tooltips also fixed (same issue)
62- **Changed:** All conflict badges now use unified showConflictTooltip() system with base64-encoded data
63- **Removed:** data-tooltip CSS pseudo-element approach for conflict badges (replaced with JS tooltip)
64
65## Version 5.5.4 (2026-02-09) - FIX PAST EVENT EXPAND ON FIRST LOAD
66
67- **Fixed:** Past events now expand on click from initial page load (PHP-rendered items were missing onclick="togglePastEventExpand(this)" handler that the JS-rebuilt version had)
68
69## Version 5.5.3 (2026-02-09) - FIX CONFLICT TOOLTIP THEME COLORS
70
71- **Fixed:** Conflict tooltip now finds calendar container even when badge is inside day popup (appended to body)
72- **Fixed:** Empty CSS variable values no longer produce invisible text — fallback defaults applied when var returns empty string
73
74## Version 5.5.2 (2026-02-09) - FIX CONFLICT TOOLTIP JSON PARSING
75
76- **Fixed:** Conflict tooltip data now base64-encoded to eliminate JSON parse errors from attribute quote escaping
77- **Fixed:** Removed double htmlspecialchars encoding on conflict titles in PHP (was escaping titles then re-escaping the JSON)
78- **Changed:** Both PHP and JS conflict badge rendering now use base64 for data-conflicts attribute
79- **Changed:** showConflictTooltip decodes base64 first, falls back to plain JSON for compatibility
80
81## Version 5.5.1 (2026-02-09) - AJAX ROBUSTNESS & DIALOG THEMING
82
83- **Fixed:** Conflict tooltip badges now work after AJAX month navigation via event delegation
84- **Fixed:** All document-level event listeners guarded against duplicate attachment from multiple script loads
85- **Fixed:** showConflictTooltip closest() selector now matches actual container IDs (cal_, panel_, sidebar-widget-)
86- **Fixed:** Description textarea in add/edit dialog now 2 lines tall instead of 1
87- **Added:** Event delegation for conflict badge mouseenter/mouseleave (capture phase) survives DOM rebuilds
88- **Added:** ESC key now also closes day popups and conflict tooltips
89- **Changed:** Namespace click filter handler wrapped in guard to prevent duplicate binding
90
91## Version 5.5.0 (2026-02-09) - CSS VARIABLE REFACTOR & THEME CONSISTENCY
92
93- **Refactored:** All theming now driven by 15 CSS custom properties injected per calendar instance
94- **Refactored:** Removed ~85 inline styles from syntax.php and ~41 from calendar-main.js
95- **Refactored:** style.css is now the single source of truth for all visual styling
96- **Fixed:** Day popup (click cell) now fully themed — CSS vars propagated from container
97- **Fixed:** Add/Edit event dialog now themed in all contexts (main calendar, eventlist panel, sidebar widget)
98- **Fixed:** Popup footer and "+ Add Event" button were using inline themeStyles — now use CSS vars
99- **Added:** CSS variable injection for {{eventlist panel}} containers
100- **Added:** CSS variable injection for {{eventlist sidebar}} widget containers
101- **Added:** propagateThemeVars() helper ensures dialogs/popups always get theme regardless of DOM position
102- **Added:** Wiki template mapping reads __link__ as accent color from style.ini
103- **Added:** Detailed CSS variable reference table in style.css header comment
104- **Added:** Detailed style.ini → CSS variable mapping documentation in syntax.php
105- **Changed:** Conflict tooltip reads CSS vars via getComputedStyle instead of data-themeStyles
106- **Changed:** Admin changelog now uses paginated timeline viewer instead of tiny scrolling div
107- **Removed:** Dark Reader MutationObserver compatibility (CSS vars natively compatible)
108- **Removed:** $isWikiTheme branching from PHP render path
109
110## Version 5.3.6 (2026-02-09) - HEARTS + CSS BACKGROUND FIX! ��
111
112### �� Added: Hearts in Explosions!
113- **Added:** 8-12 pink hearts in each click explosion
114- **Added:** Random sizes (12-28px) and directions
115- **Result:** Extra love in every click! ��
116
117### �� Fixed: Background CSS Property for Dark Mode Readers
118- **Fixed:** Added `background: transparent` to CSS (was completely removed)
119- **Fixed:** Now CSS readers can detect and modify background property
120- **Why:** Inline styles override transparent, but CSS readers can now see the property
121- **Result:** Dark mode plugins can now change calendar backgrounds!
122
123### The CSS Problem
124
125**Why backgrounds weren't changing with dark mode readers**:
126
127**Before (v5.3.5)**:
128```css
129.calendar-compact-grid tbody td {
130    /* background removed - set via inline style */
131    border: 1px solid...
132}
133```
134
135**Problem**: CSS property doesn't exist!
136- Dark mode readers look for `background` property in CSS
137- Can't override what doesn't exist
138- Inline styles work, but readers can't modify them
139
140**After (v5.3.6)**:
141```css
142.calendar-compact-grid tbody td {
143    background: transparent;  /* Now exists! */
144    border: 1px solid...
145}
146```
147
148**Solution**:
149- Property exists in CSS
150- Dark mode readers can override it
151- Inline styles still override transparent
152- Everyone wins!
153
154### What's Fixed
155
156**Elements now have background property**:
157- `.calendar-compact-grid tbody td` ✓
158- `.calendar-compact-grid tbody td:hover` ✓
159- `.event-compact-item` ✓
160- `.event-compact-item:hover` ✓
161
162**How it works**:
1631. CSS sets `background: transparent` (default)
1642. Inline styles set actual color (overrides transparent)
1653. Dark mode readers can override CSS property
1664. Works for everyone!
167
168### Hearts in Explosion
169
170**Click anywhere → Hearts explode!**
171
172**Heart details**:
173- Count: 8-12 per explosion (random)
174- Size: 12-28px (random variety)
175- Emoji: �� (pink heart)
176- Direction: Random 360°
177- Speed: 60-140px travel
178- Duration: 0.8-1.2s
179- z-index: 9999999 (always visible)
180
181**Combined with**:
182- 25 glowing particles
183- 40 pixel sparkles
184- Bright flash
185- **Total: 73-77 elements!**
186
187### Visual Result
188
189**Click explosion**:
190```
191    �� ✦ • ✦ ��
192  �� •         • ��
193✦  •     ��!     •  ✦
194  �� •         • ��
195    �� ✦ • ✦ ��
196
197Hearts + Particles + Pixels!
198```
199
200**Dark mode now works**:
201```css
202/* Dark mode reader can now do this: */
203.calendar-compact-grid tbody td {
204    background: #000 !important;  /* Works! */
205}
206```
207
208### Why Transparent Works
209
210**CSS Cascade**:
2111. CSS: `background: transparent` (lowest priority)
2122. Inline style: `background: #f5f5f5` (overrides CSS)
2133. Dark mode CSS: `background: #000 !important` (overrides inline)
214
215**Perfect solution!** ✓
216
217## Version 5.3.5 (2026-02-09) - PARTICLES ABOVE DIALOGS! ��
218
219### �� Fixed: Particles Now Appear Above All Dialogs!
220- **Fixed:** Increased z-index to 9999999 for all particles
221- **Fixed:** Particles now visible above event dialogs, month picker, etc.
222- **Result:** Cursor effects and explosions always visible!
223
224### The Z-Index Problem
225
226**Before (v5.3.4)**:
227- Particles: z-index 9999
228- Dialogs: z-index 10000-999999
229- **Particles hidden behind dialogs!**
230
231**After (v5.3.5)**:
232- Particles: z-index 9999999
233- Trail: z-index 9999998
234- Pixels: z-index 9999997
235- **Particles ALWAYS on top!**
236
237### What's Fixed
238
239✅ **Main particles** (explosion orbs)
240✅ **Cursor trail** (glowing dots)
241✅ **Pixel sparkles** (tiny bright stars)
242✅ **Flash effect** (click burst)
243
244**All now appear above**:
245- Event dialog popups
246- Month picker
247- Day popups
248- Any modal overlays
249
250### Visual Result
251
252**Moving cursor over dialog**:
253```
254┌─────────────────────┐
255│  Event Dialog       │
256│  ✦ • ✦             │  ← Sparkles visible!
257│    →  ✦             │  ← Cursor trail visible!
258│  • ✦ •              │
259└─────────────────────┘
260```
261
262**Clicking on dialog**:
263```
264┌─────────────────────┐
265│  ✦ • ✦ • ✦         │
266│ •     ��!     •    │  ← Explosion visible!
267│  ✦ • ✦ • ✦         │
268└─────────────────────┘
269```
270
271**Perfect visibility everywhere!** ✨
272
273## Version 5.3.4 (2026-02-09) - THEMED MONTH PICKER + DIALOG CURSOR FIX
274
275### �� Fixed: Month Picker Now Themed!
276- **Fixed:** Jump to Month dialog now uses theme colors
277- **Fixed:** Dialog background, borders, text all themed
278- **Fixed:** Select dropdowns use theme colors
279- **Fixed:** Buttons use theme accent colors
280- **Result:** Month picker matches calendar theme!
281
282### �� Fixed: Cursor Effects Work in Dialogs!
283- **Fixed:** Cursor trail now works when hovering over dialogs
284- **Fixed:** Click explosions work when clicking inside dialogs
285- **Technical:** Changed to capture phase event listeners
286- **Result:** Effects work EVERYWHERE now!
287
288### Month Picker Theming
289
290**Before (v5.3.3)**:
291- White background (hardcoded)
292- Black text (hardcoded)
293- No theme integration
294- Looked out of place
295
296**After (v5.3.4)**:
297- Dialog background: `theme.bg`
298- Dialog border: `theme.border`
299- Text color: `theme.text_primary`
300- Dropdowns: `theme.cell_bg` + `theme.text_primary`
301- Cancel button: `theme.cell_bg`
302- Go button: `theme.border` (accent color)
303
304**Fully integrated!** ✅
305
306---
307
308### Theme Examples
309
310**Matrix Theme**:
311```
312┌─────────────────────────┐
313│ Jump to Month           │ ← Dark bg, green border
314│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
315│ [Cancel] [Go]           │ ← Green "Go" button
316└─────────────────────────┘
317```
318
319**Pink Theme**:
320```
321┌─────────────────────────┐
322│ Jump to Month           │ ← Dark bg, pink border
323│ [February ▼] [2026 ▼]  │ ← Dark dropdowns
324│ [Cancel] [Go]           │ ← Pink "Go" button
325└─────────────────────────┘
326With sparkle effects! ✨
327```
328
329**Professional Theme**:
330```
331┌─────────────────────────┐
332│ Jump to Month           │ ← Clean bg, blue border
333│ [February ▼] [2026 ▼]  │ ← Clean dropdowns
334│ [Cancel] [Go]           │ ← Blue "Go" button
335└─────────────────────────┘
336```
337
338---
339
340### Dialog Cursor Fix
341
342**The Problem**:
343Dialogs use `event.stopPropagation()` to prevent clicks from closing them. This blocked cursor effects!
344
345**The Solution**:
346Use **capture phase** event listeners:
347```javascript
348// Before (bubbling phase)
349document.addEventListener('click', handler)
350
351// After (capture phase)
352document.addEventListener('click', handler, true)
353354                                   Capture phase!
355```
356
357**Capture phase runs BEFORE stopPropagation!**
358
359---
360
361### Now Works Everywhere
362
363✅ **Calendar area**
364✅ **Event dialogs**
365✅ **Month picker dialog**
366✅ **Day popup dialogs**
367✅ **Anywhere on screen**
368
369**No more blocked effects!** ��
370
371---
372
373### Technical Details
374
375**Event phases**:
376```
3771. Capture phase   ← We listen here now!
3782. Target phase
3793. Bubbling phase  ← stopPropagation blocks this
380```
381
382**By using capture phase**:
383- Events caught before stopPropagation
384- Works in all dialogs
385- No conflicts with dialog logic
386
387---
388
389### All Dialogs Checked
390
391✅ **Month picker** - Now themed!
392✅ **Event dialog** - Already themed
393✅ **Day popup** - Already themed
394
395**Everything consistent!** ��
396
397---
398
399## Version 5.3.3 (2026-02-09) - TINY NEON PIXEL SPARKLES! ✨
400
401### ✨ Added: Bright Neon Pixel Sparkles Everywhere!
402- **Added:** Tiny 1-2px bright pixel sparkles alongside cursor trail
403- **Added:** 40 pixel sparkles in click explosions
404- **Changed:** Cursor effects now work on ENTIRE SCREEN (not just calendar)
405- **Result:** Maximum sparkle effect! ��
406
407### Tiny Pixel Sparkles
408
409**3-6 tiny bright pixels appear with each cursor movement!**
410
411**Characteristics**:
412- Size: 1-2px (single pixel appearance!)
413- Colors: Bright neon whites and pinks
414  - Pure white (#fff) - 40% chance
415  - Hot pink (#ff1493)
416  - Pink (#ff69b4)
417  - Light pink (#ffb6c1)
418  - Soft pink (#ff85c1)
419- Glow: Triple-layer shadow (intense!)
420- Spawn: Random 30px radius around cursor
421- Animations:
422  - 50% twinkle in place
423  - 50% float upward
424
425**Creates a cloud of sparkles around your cursor!**
426
427---
428
429### Click Explosion Enhanced
430
431**Now with 40 EXTRA pixel sparkles!**
432
433**Click anywhere → BIG BOOM**:
434- 25 main glowing particles (6-10px)
435- **40 tiny pixel sparkles (1-2px)** ← NEW!
436- Bright white flash
437- Total: 65+ visual elements!
438
439**Pixel sparkles in explosion**:
440- Shoot outward in all directions
441- Random distances (30-110px)
442- Multiple bright colors
443- Some twinkle, some explode
444- Creates stellar effect!
445
446---
447
448### Entire Screen Coverage
449
450**Effects now work EVERYWHERE!**
451
452**Before (v5.3.2)**:
453- Only inside calendar viewport
454- Limited to calendar area
455
456**After (v5.3.3)**:
457- Works on entire screen! ✓
458- Cursor trail follows everywhere
459- Click explosions anywhere
460- Used `position: fixed` + `clientX/Y`
461
462**Move anywhere on the page for sparkles!**
463
464---
465
466### Visual Effect
467
468**Cursor movement**:
469```
470    • ✦ •       ← Tiny pixels
471  •   ✦   •     ← Glowing trail
472✦  •  →  •  ✦   ← Cursor
473  •   ✦   •     ← Mixed sizes
474    • ✦ •       ← Sparkle cloud
475```
476
477**Click explosion**:
478```
479    ✦ • ✦ • ✦
480  ✦ •         • ✦
481✦  •    ��!    •  ✦
482  ✦ •         • ✦
483    ✦ • ✦ • ✦
484
48565+ particles total!
486```
487
488---
489
490### Sparkle Details
491
492**Trail Pixels** (3-6 per movement):
493- Size: 1-2px
494- Spawn rate: Every 40ms
495- Spread: 30px radius
496- Duration: 0.6-0.8s
497- 50% twinkle, 50% float
498
499**Explosion Pixels** (40 total):
500- Size: 1-3px
501- Spread: 30-110px radius
502- Duration: 0.4-0.8s
503- All directions
504- Intense glow
505
506**Main Particles** (25 total):
507- Size: 4-10px
508- Spread: 50-150px
509- Full color palette
510- Original firework effect
511
512---
513
514### Color Distribution
515
516**Pixel sparkles favor white**:
517- 40% pure white (#fff) - brightest!
518- 60% pink shades - variety
519
520**Creates brilliant sparkle effect!**
521
522---
523
524### Performance
525
526**Still optimized**:
527- Trail: 30ms throttle
528- Pixels: 40ms throttle
529- Auto-cleanup
530- Hardware accelerated
531- Smooth 60fps
532
533**Lots of sparkles, zero lag!**
534
535---
536
537### Full-Screen Magic
538
539**Pink theme calendar detected**:
540```javascript
541if (pink calendar exists) {
542    Enable effects for ENTIRE SCREEN
543    Not just calendar area
544}
545```
546
547**Works everywhere on page!** ✨
548
549---
550
551## Version 5.3.2 (2026-02-09) - PINK FIREWORKS! ����
552
553### �� Changed: Glowing Pink Particles Instead of Emoji Sparkles!
554- **Removed:** Emoji sparkle images (✨)
555- **Added:** Glowing pink particle trail following cursor
556- **Added:** FIREWORKS explosion on click!
557- **Result:** Beautiful glowing effects, not emoji!
558
559### Glowing Cursor Trail
560
561**Pink glowing dots follow your cursor!**
562- Small glowing pink orbs (8px)
563- Radial gradient glow effect
564- Multiple box-shadows for depth
565- Fade out smoothly (0.5s)
566- Throttled to 30ms for smoothness
567
568```
569    •  •
570  •  →  •   ← Your cursor
571    •  •
572```
573
574**Not emoji - actual glowing particles!**
575
576---
577
578### Click Fireworks! ��
579
580**Click anywhere on the calendar → BOOM!**
581
582**20 pink particles explode outward!**
583- Radial burst pattern (360° coverage)
584- Random speeds (50-150px travel)
585- 4 shades of pink:
586  - Hot pink (#ff1493)
587  - Pink (#ff69b4)
588  - Light pink (#ff85c1)
589  - Very light pink (#ffc0cb)
590- Random sizes (4-10px)
591- Individual glowing halos
592- Smooth explosion animation
593
594**Plus a bright flash at click point!**
595- 30px radius glow
596- Intense pink flash
597- Fades quickly (0.3s)
598
599---
600
601### Visual Effect
602
603**Cursor movement**:
604```
605606      •  •  •
607   •     →     •  ← Glowing trail
608      •  •  •
609610```
611
612**Click explosion**:
613```
614         •  •  •
615      •           •
616   •      BOOM!      •  ← 20 particles
617      •           •
618         •  •  •
619```
620
621**All particles glow with pink halos!**
622
623---
624
625### Particle Details
626
627**Trail Particles**:
628- Size: 8x8px
629- Color: Pink radial gradient
630- Shadow: 10px + 20px glow layers
631- Duration: 0.5s fade
632- Rate: 30ms throttle
633
634**Explosion Particles**:
635- Size: 4-10px (random)
636- Colors: 4 pink shades (random)
637- Shadow: 10px + 20px glow (matches color)
638- Duration: 0.6-1.0s (random)
639- Pattern: Perfect circle burst
640
641**Flash Effect**:
642- Size: 30x30px
643- Color: Bright hot pink
644- Shadow: 30px + 50px mega-glow
645- Duration: 0.3s instant fade
646
647---
648
649### Performance
650
651**Optimized for smoothness**:
652- Trail throttled to 30ms
653- Auto-cleanup after animations
654- CSS hardware acceleration
655- No memory leaks
656- Smooth 60fps
657
658**Won't slow you down!**
659
660---
661
662### Comparison
663
664**Before (v5.3.1)**:
665- ✨ Emoji sparkle images
666- Static unicode characters
667- Limited visual impact
668
669**After (v5.3.2)**:
670- �� Glowing pink particles
671- Radial gradients + shadows
672- Beautiful firework explosions
673- Much more impressive!
674
675---
676
677### Only Pink Theme
678
679**These effects only appear**:
680- On `.calendar-theme-pink` elements
681- Other themes unaffected
682- Pure pink magic! ��
683
684---
685
686## Version 5.3.1 (2026-02-09) - MYSPACE SPARKLE CURSOR! ✨✨✨
687
688### ✨ Added: MySpace-Style Sparkle Trail!
689- **Added:** Sparkle cursor trail that follows your mouse (pink theme only!)
690- **Toned down:** Reduced glow effects for better taste
691- **Added:** Sparkles appear on cell hover
692- **Added:** Sparkles on event hover (left and right sides!)
693- **Added:** Sparkles on today's cell corners
694- **Added:** Sparkles on navigation buttons
695- **Added:** Sparkles in calendar header
696- **Result:** Pure nostalgic MySpace magic! ✨
697
698### MySpace Sparkle Cursor Trail
699
700**The classic effect from 2006!**
701- Sparkles follow your cursor as you move
702- Random sizes (12-22px)
703- Random slight offsets for natural feel
704- Float up and fade out animation
705- Throttled to 50ms (smooth, not laggy)
706- Only on pink theme calendars
707
708```
709710  ✨    ✨
711✨   →   ✨  (cursor trail)
712  ✨    ✨
713714```
715
716**Pure nostalgia!**
717
718---
719
720### Sparkles Everywhere
721
722**Calendar cells**:
723- Hover over any day → ✨ floats up
724- Smooth 1.5s animation
725- Centered sparkle
726
727**Event items**:
728- Hover → ✨ on left side
729- Hover → ✨ on right side
730- Staggered animations (0.4s delay)
731- Continuous twinkling
732
733**Today's cell**:
734- ✨ in top-right corner (continuous)
735- ✨ in bottom-left corner (offset timing)
736- Always sparkling!
737
738**Navigation buttons**:
739- Hover on < or > → ✨ appears top-right
740- One-time float animation
741
742**Calendar header**:
743- ✨ on left side (continuous)
744- ✨ on right side (offset 1s)
745- Always twinkling
746
747---
748
749### Toned Down Glows
750
751**Before (v5.3.0)**: TOO MUCH GLOW!
752- 50px shadows
753- 4-layer effects
754- Overwhelming
755
756**After (v5.3.1)**: Just right!
757- 8-15px max shadows (subtle)
758- 2-layer effects
759- Professional with personality
760
761**Glow reductions**:
762- Today shimmer: 35px → 12px
763- Today hover: 50px → 15px
764- Event glow: 18px → 6px
765- Badge pulse: 25px → 8px
766- Container glow: 20px → 8px
767
768**Much more tasteful!**
769
770---
771
772### Sparkle Animations
773
774**sparkle-twinkle** (0.8s):
775```
776Opacity: 0 → 1 → 1 → 0
777Scale: 0 → 1 → 1 → 0
778Rotation: 0° → 180° → 360°
779```
780
781**sparkle-float** (1.5s):
782```
783Moves up: 0px → -50px
784Opacity: 0 → 1 → 1 → 0
785Scale: 0 → 1 → 0.8 → 0
786```
787
788**Pure MySpace magic!** ✨
789
790---
791
792### Where Sparkles Appear
793
794✅ **Cursor trail** (continuous while moving)
795✅ **Calendar cells** (on hover)
796✅ **Event items** (on hover, left + right)
797✅ **Today's cell** (continuous, corners)
798✅ **Navigation buttons** (on hover)
799✅ **Calendar header** (continuous, sides)
800
801**Sparkles EVERYWHERE!** ✨✨✨
802
803---
804
805### Performance
806
807**Cursor trail**:
808- Throttled to 50ms
809- Auto-cleanup after 1s
810- No memory leaks
811- Smooth 60fps
812
813**CSS animations**:
814- Hardware accelerated
815- No JavaScript overhead (except cursor)
816- Efficient transforms
817
818**Won't slow down your browser!**
819
820---
821
822### Pure Nostalgia
823
824**Remember MySpace profiles?**
825- Glitter graphics ✨
826- Sparkle cursors ✨
827- Auto-play music �� (ok, we didn't add that)
828- Animated GIF backgrounds
829- Comic Sans everywhere
830
831**We brought back the sparkles!** ✨
832
833---
834
835### Theme Comparison
836
837**Other themes**: Professional and clean
838**Pink theme**: ✨ SPARKLES EVERYWHERE ✨
839
840**Only pink theme gets the magic!**
841
842---
843
844## Version 5.3.0 (2026-02-09) - PINK BLING THEME EFFECTS! ✨��
845
846### �� Added: Pink Theme Gets BLING!
847- **Added:** Shimmering animation for today's cell
848- **Added:** Sparkling text effect on today's date
849- **Added:** Glowing pulse for event bars
850- **Added:** Gradient shimmer on headers
851- **Added:** Extra glow on hover effects
852- **Added:** Pulsing urgent badge for past due items
853- **Result:** Pink theme is now FABULOUS! ✨
854
855### Shimmer Effects
856
857**Today's Cell**:
858- Continuous shimmer animation (2 second loop)
859- Multi-layer glow effect
860- Pink and hot pink overlapping shadows
861- Pulses from subtle to intense
862- Extra sparkle on hover
863
864**Today's Date Number**:
865- Sparkle animation (1.5 second loop)
866- Text shadow glow effect
867- Slight scale pulse (100% → 105%)
868- Pink to hot pink shadow transition
869
870### Glow Effects
871
872**Event Bars**:
873- Continuous glow pulse (2 second loop)
874- Uses event's own color
875- Adds pink accent glow layer
876- Creates depth and dimension
877
878**Event Items**:
879- Subtle base glow
880- Enhanced glow on hover
881- Slight slide animation on hover
882- Professional yet playful
883
884### Gradient Shimmer
885
886**Headers**:
887- Animated gradient background
888- 3-color pink gradient flow
889- Smooth 3-second animation
890- Creates movement and life
891- Applies to calendar header and event list header
892
893### Badge Effects
894
895**TODAY Badge**:
896- Sparkle animation
897- Synchronized with today's date
898- Extra prominence
899
900**PAST DUE Badge**:
901- Urgent pulsing effect (1 second loop)
902- Orange glow intensifies
903- Draws attention to urgent items
904- Faster pulse for urgency
905
906### Container Bling
907
908**Main Container**:
909- Multi-layer pink glow
910- Soft outer shadow
911- Creates floating effect
912- Subtle but elegant
913
914### Animation Details
915
916**pink-shimmer** (2s loop):
917```
918Start: Subtle 5px glow
919Peak:  Intense 35px multi-layer glow
920End:   Back to subtle
921```
922
923**pink-sparkle** (1.5s loop):
924```
925Start: Base glow + scale 1.0
926Peak:  Intense glow + scale 1.05
927End:   Back to base
928```
929
930**pink-glow-pulse** (2s loop):
931```
932Start: Small glow (3px, 6px)
933Peak:  Large glow (6px, 12px, 18px)
934End:   Back to small
935```
936
937**pink-gradient-shimmer** (3s loop):
938```
939Gradient flows across element
940Creates wave effect
941Smooth continuous motion
942```
943
944**pink-pulse-urgent** (1s loop - faster!):
945```
946Start: Orange glow 5px
947Peak:  Orange glow 25px (intense)
948End:   Back to 5px
949```
950
951### Visual Experience
952
953**Today's Cell**:
954```
955┌──┬──┬──┬──┬──┬──┬──┐
956│  │  │ ✨ │  │  │  │  │  ← Shimmers constantly
957│  │  │[9]│  │  │  │  │  ← Sparkles
958│  │  │ ✨ │  │  │  │  │  ← Glows and pulses
959└──┴──┴──┴──┴──┴──┴──┘
960```
961
962**Event Bars**:
963```
964━━━━━━━  ← Glows and pulses
965━━━━━━━  ← Each bar animated
966━━━━━━━  ← Creates rhythm
967```
968
969**Headers**:
970```
971╔═════════════════════╗
972║ ~~~~~~~~~~ ║  ← Gradient flows
973║   February 2026     ║  ← Shimmer effect
974╚═════════════════════╝
975```
976
977### Theme Comparison
978
979**Before (v5.2.8)**:
980- Pink colors
981- Static elements
982- Standard shadows
983
984**After (v5.3.0)**:
985- Pink colors ✓
986- Animated shimmer ✨
987- Sparkling effects ��
988- Glowing pulses ✨
989- Moving gradients ��
990- BLING! ��
991
992### Performance
993
994**All animations**:
995- Hardware accelerated (transform, opacity)
996- Smooth 60fps
997- CSS animations (no JavaScript)
998- Minimal CPU usage
999- Disabled in reduced-motion preference
1000
1001### Only for Pink Theme
1002
1003**Effects only apply when**:
1004```css
1005.calendar-theme-pink
1006```
1007
1008**Other themes unaffected**:
1009- Matrix stays Matrix
1010- Professional stays Professional
1011- Purple stays Purple
1012- Wiki stays clean
1013
1014**Pink gets all the bling!** ✨��
1015
1016### Use Cases
1017
1018**Perfect for**:
1019- Celebrating occasions
1020- Fun team calendars
1021- Personal style expression
1022- Standing out
1023- Making calendar time fabulous
1024
1025**Not just pink, but BLING pink!** ��✨
1026
1027## Version 5.2.8 (2026-02-09) - TODAY BOX USES THEME COLORS
1028
1029### �� Fixed: Today's Date Box Now Uses Theme Colors
1030- **Fixed:** Today's day number box now uses theme border color
1031- **Fixed:** Text color adapts to theme (white for dark themes, bg color for light)
1032- **Result:** Today box matches the theme perfectly!
1033
1034### The Issue
1035
1036Today's date had a hardcoded green box:
1037
1038**In style.css**:
1039```css
1040.cal-today .day-num {
1041    background: #008800;  /* Hardcoded green! */
1042    color: white;
1043}
1044```
1045
1046**Didn't adapt to themes at all!**
1047
1048### The Fix
1049
1050**Now uses theme colors**:
1051```php
1052// Today's day number
1053if ($isToday) {
1054    background: $themeStyles['border'],  // Theme's accent color!
1055    color: (professional theme) ? white : bg color
1056}
1057```
1058
1059### Theme Examples
1060
1061**Matrix Theme**:
1062- Box background: `#00cc07` (matrix green)
1063- Text color: `#242424` (dark background)
1064
1065**Purple Theme**:
1066- Box background: `#9b59b6` (purple)
1067- Text color: `#2a2030` (dark background)
1068
1069**Professional Theme**:
1070- Box background: `#4a90e2` (blue)
1071- Text color: `#ffffff` (white text)
1072
1073**Pink Theme**:
1074- Box background: `#ff1493` (hot pink)
1075- Text color: `#1a0d14` (dark background)
1076
1077**Wiki Theme**:
1078- Box background: Template's `__border__` color
1079- Text color: Template's `__background_site__` color
1080
1081### Visual Result
1082
1083**Matrix Theme**:
1084```
1085┌──┬──┬──┬──┬──┬──┬──┐
1086│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1087└──┴──┴──┴──┴──┴──┴──┘
10881089    Green box (#00cc07)
1090```
1091
1092**Professional Theme**:
1093```
1094┌──┬──┬──┬──┬──┬──┬──┐
1095│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1096└──┴──┴──┴──┴──┴──┴──┘
10971098    Blue box (#4a90e2)
1099```
1100
1101**Wiki Theme**:
1102```
1103┌──┬──┬──┬──┬──┬──┬──┐
1104│ 1│ 2│ 3│[4]│ 5│ 6│ 7│
1105└──┴──┴──┴──┴──┴──┴──┘
11061107    Template border color
1108```
1109
1110### Implementation
1111
1112**Inline styles added**:
1113- Background uses `$themeStyles['border']` (theme accent)
1114- Text color uses `$themeStyles['bg']` for contrast
1115- Special case: Professional theme uses white text
1116- All with `!important` to override CSS
1117
1118**CSS cleaned up**:
1119- Removed hardcoded `#008800` background
1120- Removed hardcoded `white` color
1121- Kept structural styles (border-radius, font-weight)
1122
1123### Benefits
1124
1125**Theme Consistency**:
1126- Today box matches theme accent color
1127- Proper contrast with background
1128- Professional appearance
1129
1130**Automatic Adaptation**:
1131- Works with all themes
1132- Works with custom wiki template colors
1133- No manual adjustment needed
1134
1135**Visual Harmony**:
1136- Border color used throughout theme
1137- Today box reinforces theme identity
1138- Consistent design language
1139
1140## Version 5.2.7 (2026-02-09) - FIX GRID BACKGROUND MISMATCH
1141
1142### �� Fixed: Table Grid Background Now Matches Cells
1143- **Found:** `grid_bg` was using `__background_alt__` (different from cells!)
1144- **Fixed:** Changed `grid_bg` to use `__background_site__` (same as cells)
1145- **Result:** Table background no longer shows through cells!
1146
1147### The Layer Problem
1148
1149The table itself had a DIFFERENT background color than its cells!
1150
1151**Before (v5.2.6)**:
1152```php
1153'grid_bg' => __background_alt__,     // Table background (#e8e8e8)
1154'cell_bg' => __background_site__,    // Cell background (#f5f5f5)
1155```
1156
1157**The table background was showing THROUGH the cells!**
1158
1159### Why This Happened
1160
1161**Visual layers**:
1162```
1163Table Element
1164├─ background: __background_alt__ (#e8e8e8)  ← Different!
1165└─ Cells
1166    └─ background: __background_site__ (#f5f5f5)  ← Different!
1167
1168The table background shows through any gaps!
1169```
1170
1171### The Fix
1172
1173**After (v5.2.7)**:
1174```php
1175'grid_bg' => __background_site__,    // Table background (#f5f5f5) ✓
1176'cell_bg' => __background_site__,    // Cell background (#f5f5f5) ✓
1177```
1178
1179**NOW THEY MATCH!**
1180
1181### Where grid_bg Is Used
1182
1183The table element itself:
1184```html
1185<table style="background: __background_alt__">  ← Was showing through!
1186    <tbody>
1187        <tr>
1188            <td style="background: __background_site__">1</td>
1189        </tr>
1190    </tbody>
1191</table>
1192```
1193
1194Even with cell inline styles, the TABLE background shows through!
1195
1196### All Background Sources Now Unified
1197
1198**Everything now uses __background_site__**:
1199- `bg` → __background_site__ ✓
1200- `header_bg` → __background_site__ ✓
1201- `grid_bg` → __background_site__ ✓ (JUST FIXED!)
1202- `cell_bg` → __background_site__ ✓
1203
1204**Perfect consistency!** ��
1205
1206### Why It Was Different
1207
1208**Originally the grid was meant to show borders**:
1209- `grid_bg` was `__background_alt__` (slightly different)
1210- Created visual separation between cells
1211- But with transparent/thin cells, it showed through!
1212
1213**Now unified for consistency!**
1214
1215### Visual Result
1216
1217**Before (layers visible)**:
1218```
1219┌─────────────────┐
1220│ Grid (#e8e8e8)  │ ← Showing through!
1221│  ┌──┬──┬──┐     │
1222│  │  │  │  │     │ ← Cells (#f5f5f5)
1223│  └──┴──┴──┘     │
1224└─────────────────┘
1225```
1226
1227**After (unified)**:
1228```
1229┌─────────────────┐
1230│ Grid (#f5f5f5)  │ ← Same color!
1231│  ┌──┬──┬──┐     │
1232│  │  │  │  │     │ ← Cells (#f5f5f5)
1233│  └──┴──┴──┘     │
1234└─────────────────┘
1235Perfect match!
1236```
1237
1238### Complete Background Mapping
1239
1240**All using __background_site__ now**:
1241- Main container background
1242- Left panel background
1243- Right panel background
1244- Eventlist background
1245- Calendar grid background ← JUST FIXED
1246- Calendar cell backgrounds
1247- Event item backgrounds
1248- Clock header background
1249- Search input background
1250- Past events toggle
1251
1252**EVERYTHING UNIFIED!** ��
1253
1254## Version 5.2.6 (2026-02-09) - REMOVE CONTAINER BACKGROUNDS
1255
1256### �� Fixed: Removed Container Backgrounds Showing Through
1257- **Found:** `.calendar-compact-container` had `background: #ffffff;`
1258- **Found:** `.calendar-compact-left` had `background: #fafafa;`
1259- **Found:** `.calendar-compact-right` had `background: #ffffff;`
1260- **Found:** `.event-search-input-inline` had `background: white;`
1261- **Found:** `.past-events-toggle` had `background: #f5f5f5;`
1262- **Result:** Container backgrounds no longer show through cells!
1263
1264### The Container Problem
1265
1266The parent containers had hardcoded backgrounds that were showing through!
1267
1268**Container backgrounds (lines 4-91)**:
1269```css
1270.calendar-compact-container {
1271    background: #ffffff;  /* ← Main container! */
1272}
1273
1274.calendar-compact-left {
1275    background: #fafafa;  /* ← Left panel (calendar side)! */
1276}
1277
1278.calendar-compact-right {
1279    background: #ffffff;  /* ← Right panel (events side)! */
1280}
1281```
1282
1283**These were showing through the cells and events!**
1284
1285### Why Containers Matter
1286
1287Even though cells have inline styles, if the CONTAINER behind them has a different background, it can show through:
1288
1289```
1290Container (#fafafa)           ← Showing through!
1291   └─ Table Cell (#f5f5f5)    ← Transparent areas
1292      └─ Content
1293```
1294
1295### All Backgrounds Removed
1296
1297**v5.2.6 removes**:
1298- `.calendar-compact-container` background
1299- `.calendar-compact-left` background
1300- `.calendar-compact-right` background
1301- `.event-search-input-inline` background
1302- `.past-events-toggle` background & hover
1303
1304**v5.2.5 removed**:
1305- `.calendar-compact-grid tbody td` background
1306- `.calendar-compact-grid thead th` background
1307
1308**v5.2.4 removed**:
1309- `.cal-empty`, `.cal-today`, `.cal-has-events` backgrounds
1310
1311**v5.2.3 removed**:
1312- `.event-compact-item` background
1313
1314**ALL container and element backgrounds eliminated!** ��
1315
1316### What Should Work Now
1317
1318**Calendar cells**: No container background showing through ✓
1319**Event items**: No container background showing through ✓
1320**Search bar**: Uses template color ✓
1321**Past events toggle**: Uses template color ✓
1322
1323### Complete List of Fixes
1324
1325**Containers**:
1326- Main container ✓
1327- Left panel ✓
1328- Right panel ✓
1329
1330**Elements**:
1331- Table cells ✓
1332- Event items ✓
1333- Search input ✓
1334- Past events toggle ✓
1335
1336**EVERYTHING removed!** ��
1337
1338### Critical: Clear Caches
1339
1340**Must clear caches or won't work**:
13411. Hard refresh: Ctrl+Shift+R (5 times!)
13422. Clear DokuWiki cache
13433. Close browser completely
13444. Reopen and test
1345
1346**CSS caching is EXTREMELY persistent!**
1347
1348## Version 5.2.5 (2026-02-09) - REMOVE TABLE CELL CSS BACKGROUNDS
1349
1350### �� Fixed: Removed Hardcoded Backgrounds from Table Cells
1351- **Found:** `.calendar-compact-grid tbody td` had `background: #ffffff;`!
1352- **Found:** `.calendar-compact-grid tbody td:hover` had `background: #f0f7ff;`!
1353- **Found:** `.calendar-compact-grid thead th` had `background: #f8f8f8;`!
1354- **Fixed:** Removed ALL hardcoded backgrounds from table CSS
1355- **Result:** Calendar table cells finally use template colors!
1356
1357### The REAL Culprits
1358
1359The generic table CSS was overriding everything!
1360
1361**In style.css (lines 307-356)**:
1362```css
1363.calendar-compact-grid thead th {
1364    background: #f8f8f8;  /* ← Header cells hardcoded! */
1365}
1366
1367.calendar-compact-grid tbody td {
1368    background: #ffffff;  /* ← ALL table cells hardcoded! */
1369}
1370
1371.calendar-compact-grid tbody td:hover {
1372    background: #f0f7ff;  /* ← Hover state hardcoded! */
1373}
1374```
1375
1376**These apply to ALL `<td>` and `<th>` elements in the calendar table!**
1377
1378### Why This Was the Last One
1379
1380**CSS Specificity Order**:
13811. `.calendar-compact-grid tbody td` (generic - applies to ALL cells)
13822. `.cal-empty`, `.cal-today`, `.cal-has-events` (specific - applies to some cells)
13833. Inline styles (should win but didn't)
1384
1385**We removed the specific ones (v5.2.4), but the generic one was still there!**
1386
1387### What We've Removed
1388
1389**v5.2.3**:
1390- `.event-compact-item` background
1391- `.event-compact-item:hover` background
1392
1393**v5.2.4**:
1394- `.cal-empty` background & hover
1395- `.cal-today` background & hover
1396- `.cal-has-events` background & hover
1397
1398**v5.2.5 (FINAL)**:
1399- `.calendar-compact-grid tbody td` background ✓
1400- `.calendar-compact-grid tbody td:hover` background ✓
1401- `.calendar-compact-grid thead th` background ✓
1402
1403**All CSS background overrides ELIMINATED!** ��
1404
1405### Why It Took 5 Versions
1406
1407**CSS had layers of hardcoded backgrounds**:
1408
1409```
1410Layer 1: Table cells (.calendar-compact-grid tbody td)
1411         ↓ Overrode inline styles
1412Layer 2: Cell states (.cal-today, .cal-empty, etc.)
1413         ↓ Overrode table cells
1414Layer 3: Event items (.event-compact-item)
1415         ↓ Overrode inline styles
1416
1417ALL had to be removed!
1418```
1419
1420**We kept finding more specific CSS, but the base table CSS was there all along!**
1421
1422### Visual Result
1423
1424**NOW everything matches**:
1425```
1426Calendar Table:
1427┌──┬──┬──┬──┬──┬──┬──┐
1428│ S│ M│ T│ W│ T│ F│ S│ ← Headers: __background_site__
1429├──┼──┼──┼──┼──┼──┼──┤
1430│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ ← Cells: __background_site__
1431├──┼──┼──┼──┼──┼──┼──┤
1432│ 8│ 9│10│11│12│13│14│ ← All: __background_site__
1433└──┴──┴──┴──┴──┴──┴──┘
1434
1435Sidebar Events:
1436┌────────────────────────┐
1437│ �� Event               │ ← __background_site__
1438│ �� Event               │ ← __background_site__
1439└────────────────────────┘
1440
1441FINALLY ALL MATCHING! ✓
1442```
1443
1444### Complete List of Removed CSS
1445
1446**ALL hardcoded backgrounds removed**:
1447- `.event-compact-item` background
1448- `.event-compact-item:hover` background
1449- `.cal-empty` background & hover
1450- `.cal-today` background & hover
1451- `.cal-has-events` background & hover
1452- `.calendar-compact-grid tbody td` background ← NEW
1453- `.calendar-compact-grid tbody td:hover` background ← NEW
1454- `.calendar-compact-grid thead th` background ← NEW
1455
1456**Every single CSS background override is GONE!** ��
1457
1458### Testing Steps
1459
1460**After installing v5.2.5**:
1461
14621. **Clear browser cache**: Ctrl+Shift+R (3 times!)
14632. **Clear DokuWiki cache**: Click the button
14643. **Close browser completely**: Restart it
14654. **Visit page**: Should finally see matching backgrounds
1466
1467**CSS is EXTREMELY sticky - may need to clear multiple times!**
1468
1469### This Should Be It
1470
1471**No more CSS overrides exist** (we've checked the entire file):
1472- Table cells ✓ Fixed
1473- Cell states ✓ Fixed
1474- Event items ✓ Fixed
1475- Headers ✓ Fixed
1476- Hover states ✓ Fixed
1477
1478**All backgrounds now come from inline styles using template colors!**
1479
1480## Version 5.2.4 (2026-02-09) - REMOVE CALENDAR CELL CSS BACKGROUNDS
1481
1482### �� Fixed: Removed Hardcoded Backgrounds from Calendar Cells
1483- **Found:** Calendar cell CSS had hardcoded backgrounds with `!important`!
1484- **Fixed:** Removed backgrounds from `.cal-today`, `.cal-empty`, `.cal-has-events` CSS
1485- **Result:** Calendar cells now use template colors!
1486
1487### The Second Culprit
1488
1489MORE hardcoded backgrounds in the CSS file!
1490
1491**In style.css (lines 359-382)**:
1492```css
1493.cal-empty {
1494    background: #fafafa !important;  /* ← Overriding inline styles! */
1495}
1496
1497.cal-today {
1498    background: #e8f5e9 !important;  /* ← Overriding today cell! */
1499}
1500
1501.cal-today:hover {
1502    background: #c8e6c9 !important;  /* ← Overriding hover! */
1503}
1504
1505.cal-has-events {
1506    background: #fffbf0;  /* ← Overriding event cells! */
1507}
1508
1509.cal-has-events:hover {
1510    background: #fff4d9;  /* ← Overriding hover! */
1511}
1512```
1513
1514**These were ALL overriding the inline styles!**
1515
1516### The Fix
1517
1518**Removed all hardcoded backgrounds**:
1519```css
1520.cal-empty {
1521    /* background removed - inline style handles this */
1522    cursor: default !important;
1523}
1524
1525.cal-today {
1526    /* background removed - inline style handles this */
1527}
1528
1529.cal-has-events {
1530    /* background removed - inline style handles this */
1531}
1532
1533/* Hover states also removed */
1534```
1535
1536### What Was Overridden
1537
1538**v5.2.3 fixed**:
1539- Event items in sidebar ✓
1540
1541**v5.2.4 fixes**:
1542- Calendar day cells ✓
1543- Today cell ✓
1544- Empty cells ✓
1545- Cells with events ✓
1546- All hover states ✓
1547
1548### Why This Kept Happening
1549
1550**CSS had hardcoded backgrounds everywhere**:
15511. Event items: `#ffffff` (fixed in v5.2.3)
15522. Calendar cells: Multiple colors (fixed in v5.2.4)
15533. **All with `!important` flags!**
1554
1555**The inline styles couldn't override them!**
1556
1557### Visual Result
1558
1559**Now ALL backgrounds match**:
1560```
1561Calendar Grid:
1562┌──┬──┬──┬──┬──┬──┬──┐
1563│  │  │  │  │  │  │  │ ← All use __background_site__
1564├──┼──┼──┼──┼──┼──┼──┤
1565│  │██│  │  │  │  │  │ ← Today uses __background_neu__
1566├──┼──┼──┼──┼──┼──┼──┤
1567│  │  │  │  │  │  │  │ ← All match template
1568└──┴──┴──┴──┴──┴──┴──┘
1569
1570Sidebar Events:
1571┌────────────────────────┐
1572│ �� Event               │ ← Uses __background_site__
1573│ �� Event               │ ← Uses __background_site__
1574└────────────────────────┘
1575
1576Perfect consistency!
1577```
1578
1579### CSS Removed
1580
1581**Calendar cells**:
1582- `.cal-empty` background
1583- `.cal-empty:hover` background
1584- `.cal-today` background
1585- `.cal-today:hover` background
1586- `.cal-has-events` background
1587- `.cal-has-events:hover` background
1588
1589**All gone!** ✓
1590
1591### Important: Clear Caches Again!
1592
1593After installing v5.2.4:
1594
15951. **Hard refresh browser**: Ctrl+Shift+R (twice!)
15962. **Clear DokuWiki cache**: Admin → Clear Cache
15973. **May need to restart browser**: To clear CSS cache
1598
1599**Old CSS is VERY sticky!**
1600
1601### Why It Took So Long
1602
1603**Multiple CSS overrides**:
1604- Event items (v5.2.3) ✓ Fixed
1605- Calendar cells (v5.2.4) ✓ Fixed
1606- Each with different classes
1607- Each with `!important`
1608- Hidden throughout CSS file
1609
1610**Found them all now!** ��
1611
1612## Version 5.2.3 (2026-02-09) - REMOVE HARDCODED CSS BACKGROUNDS
1613
1614### �� Fixed: Removed Hardcoded Backgrounds from CSS
1615- **Found:** CSS file had hardcoded `background: #ffffff;` overriding inline styles!
1616- **Fixed:** Removed hardcoded backgrounds from `.event-compact-item` CSS
1617- **Result:** Event backgrounds now properly use template colors!
1618
1619### The Root Cause
1620
1621The CSS file was overriding the inline styles with hardcoded white backgrounds!
1622
1623**In style.css (lines 599-616)**:
1624```css
1625.event-compact-item {
1626    background: #ffffff;  /* ← This was overriding inline styles! */
1627}
1628
1629.event-compact-item:hover {
1630    background: #f8f9fa;  /* ← And this on hover! */
1631}
1632```
1633
1634**Even though inline styles had `!important`**, the CSS was still being applied because it comes after in the cascade!
1635
1636### The Fix
1637
1638**Removed hardcoded backgrounds from CSS**:
1639```css
1640.event-compact-item {
1641    /* background removed - set via inline style with template colors */
1642    display: flex;
1643    /* ... other styles ... */
1644}
1645
1646.event-compact-item:hover {
1647    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
1648    /* background removed - inline style handles this */
1649}
1650```
1651
1652### Why This Was So Difficult to Find
1653
1654**CSS Specificity & Cascade**:
16551. Inline styles with `!important` should win
16562. But CSS that comes after can still apply
16573. The hardcoded `background: #ffffff` was silently overriding
16584. All the PHP code was correct - it was the CSS!
1659
1660**What We Were Doing**:
1661- ✓ Reading template colors correctly
1662- ✓ Setting `cell_bg` to `__background_site__` correctly
1663- ✓ Applying inline styles with `!important` correctly
1664- ✗ CSS file was overriding everything!
1665
1666### What Was Affected
1667
1668**Event items in**:
1669- Main calendar sidebar
1670- Standalone event list
1671- Sidebar widget
1672- All event displays
1673
1674**All had white backgrounds hardcoded in CSS!**
1675
1676### Now Working
1677
1678**Events use template colors**:
1679```html
1680<div class="event-compact-item"
1681     style="background: #f5f5f5 !important; ...">
1682    ← Now this inline style actually works!
1683</div>
1684```
1685
1686**No CSS override** ✓
1687
1688### Testing
1689
1690To verify this works:
16911. Clear browser cache (important!)
16922. Clear DokuWiki cache
16933. Reload page
16944. Events should now match eventlist background
1695
1696**Browser caching can make old CSS persist!**
1697
1698### Visual Result
1699
1700**All backgrounds now matching**:
1701```
1702┌────────────────────────────┐
1703│ Eventlist (#f5f5f5)        │ ← Template color
1704├────────────────────────────┤
1705│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
1706├────────────────────────────┤
1707│ �� Event (#f5f5f5)         │ ← Template color (was #ffffff)
1708└────────────────────────────┘
1709
1710Perfect match!
1711```
1712
1713### Why Everything Else Worked
1714
1715**Clock area, calendar cells, etc.** didn't have hardcoded CSS backgrounds:
1716- They only had inline styles ✓
1717- Inline styles worked correctly ✓
1718- Only event items had the CSS override ✗
1719
1720### Important Notes
1721
1722**Clear caches**:
1723- Browser cache (Ctrl+Shift+R or Cmd+Shift+R)
1724- DokuWiki cache (Admin → Clear Cache)
1725- Old CSS may be cached!
1726
1727**This was the culprit all along!**
1728
1729## Version 5.2.2 (2026-02-09) - FIX CLOCK AREA BACKGROUND
1730
1731### �� Fixed: Clock Area Now Matches Event Cells
1732- **Fixed:** `header_bg` now uses `__background_site__` (was `__background_alt__`)
1733- **Result:** Clock/Today header matches event cell backgrounds!
1734
1735### The Issue
1736
1737The clock area (Today header) was using a different background:
1738
1739**Before (v5.2.1)**:
1740```php
1741'header_bg' => __background_alt__,   // Different color (gray #e8e8e8)
1742'cell_bg' => __background_site__,    // Event cells (#f5f5f5)
1743```
1744
1745**After (v5.2.2)**:
1746```php
1747'header_bg' => __background_site__,  // Same as cells (#f5f5f5) ✓
1748'cell_bg' => __background_site__,    // Event cells (#f5f5f5) ✓
1749```
1750
1751### What's the Clock Area?
1752
1753The clock/Today header in the sidebar:
1754```
1755┌────────────────────────────┐
1756│ 3:45:23 PM                 │ ← Clock area (header_bg)
1757│ ��️ --° | Sun, Feb 9, 2026 │
1758└────────────────────────────┘
1759```
1760
1761### All Backgrounds Now Unified
1762
1763**Everything now uses __background_site__**:
1764- Eventlist background ✓
1765- Calendar cells ✓
1766- Event items ✓
1767- Clock/Today header ✓
1768- Sidebar widget ✓
1769- All backgrounds match! ✓
1770
1771### Visual Result
1772
1773**Complete consistency**:
1774```
1775┌────────────────────────────┐
1776│ 3:45:23 PM                 │ ← Same background
1777│ ��️ --° | Sun, Feb 9, 2026 │
1778├────────────────────────────┤
1779│ �� Meeting at 2pm          │ ← Same background
1780│ Description...             │
1781├────────────────────────────┤
1782│ �� Another event           │ ← Same background
1783│ More details...            │
1784└────────────────────────────┘
1785
1786All using __background_site__ (#f5f5f5)
1787```
1788
1789**Perfect visual harmony!** ��
1790
1791## Version 5.2.1 (2026-02-09) - FIX: MATCH EVENTLIST BACKGROUND
1792
1793### �� Fixed: Calendar Cells Now Match Eventlist Background
1794- **Fixed:** Changed `cell_bg` to use `__background_site__` (not `__background__`)
1795- **Result:** Calendar cells now match the eventlist background perfectly!
1796
1797### The Real Issue
1798
1799The eventlist was showing the CORRECT background color all along!
1800
1801**Eventlist was using**:
1802- `bg` → `__background_site__` ✓ (This was correct!)
1803
1804**Calendar cells were using**:
1805- `cell_bg` → `__background__` ✗ (This was wrong!)
1806
1807**They didn't match!**
1808
1809### The Correct Fix
1810
1811**Now everything uses __background_site__**:
1812```php
1813'bg' => __background_site__,        // Eventlist (was already correct)
1814'cell_bg' => __background_site__,   // Cells (now fixed to match)
1815```
1816
1817### Why __background_site__?
1818
1819The eventlist sidebar and calendar are meant to match the **page/site background**, not the inner content area background:
1820
1821```
1822Page Layout:
1823┌────────────────────────────────────┐
1824│ __background_site__ (page bg)     │ ← This is where calendar lives
1825│                                    │
1826│  ┌──────────────────────────────┐ │
1827│  │ __background__ (content bg)  │ │ ← Wiki article content
1828│  │                              │ │
1829│  └──────────────────────────────┘ │
1830│                                    │
1831└────────────────────────────────────┘
1832```
1833
1834**Calendar should match the page background, not the content background!**
1835
1836### Template Example
1837
1838Typical DokuWiki template:
1839```ini
1840__background_site__ = "#f5f5f5"  (Light gray - page background)
1841__background__ = "#ffffff"        (White - content area)
1842```
1843
1844**Before (v5.2.0)**:
1845- Eventlist: `#f5f5f5` (light gray) ✓ Correct
1846- Calendar cells: `#ffffff` (white) ✗ Wrong - didn't match
1847
1848**After (v5.2.1)**:
1849- Eventlist: `#f5f5f5` (light gray) ✓ Correct
1850- Calendar cells: `#f5f5f5` (light gray) ✓ Correct - MATCHED!
1851
1852### All Backgrounds Now Unified
1853
1854**Everything now uses __background_site__**:
1855- Eventlist sidebar background ✓
1856- Main calendar background ✓
1857- Calendar day cells ✓
1858- Sidebar widget ✓
1859- Event items ✓
1860- Input fields ✓
1861- Buttons ✓
1862
1863**All perfectly matched to the page background!**
1864
1865### Why Version 5.2.0 Was Wrong
1866
1867I incorrectly assumed `__background__` was the right color because it's often white. But the eventlist was already correct using `__background_site__` to match the page, not the content area.
1868
1869**The eventlist knew what it was doing all along!** The cells just needed to catch up.
1870
1871## Version 5.2.0 (2026-02-09) - UNIFIED WIKI THEME BACKGROUNDS
1872**Note**: This version went the wrong direction. See v5.2.1 for the correct fix.
1873
1874### �� Fixed: All Backgrounds Now Use __background__
1875- **Fixed:** `bg` now uses `__background__` instead of `__background_site__`
1876- **Fixed:** Eventlist, calendar cells, and sidebar all match now
1877- **Result:** Completely unified background throughout!
1878
1879### The Issue
1880
1881Different parts of the calendar were using different background sources:
1882
1883**Before (v5.1.9)**:
1884```php
1885'bg' => __background_site__        // Eventlist background (outer page)
1886'cell_bg' => __background__        // Cell backgrounds (content area)
1887```
1888
1889**These are different colors!**
1890- `__background_site__` = Outer page wrapper (often gray)
1891- `__background__` = Main content area (often white)
1892
1893### The Fix
1894
1895**After (v5.2.0)**:
1896```php
1897'bg' => __background__             // Eventlist background ✓
1898'cell_bg' => __background__        // Cell backgrounds ✓
1899```
1900
1901**Both use the same source!**
1902
1903### What Uses 'bg'
1904
1905The `bg` color is used for:
1906- Eventlist sidebar background
1907- Main calendar container
1908- Sidebar widget background
1909- Form backgrounds
1910- Event dialogs
1911
1912### What Uses 'cell_bg'
1913
1914The `cell_bg` color is used for:
1915- Calendar day cells
1916- Event item backgrounds
1917- Input field backgrounds
1918- Button backgrounds
1919
1920### Why This Matters
1921
1922**Template color hierarchy**:
1923```
1924__background_site__ → Outer page/body (e.g., #f5f5f5 light gray)
1925__background__      → Main content area (e.g., #ffffff white)
1926__background_alt__  → Sections/headers
1927__background_neu__  → Highlights
1928```
1929
1930**We want all calendar backgrounds to match the main content area!**
1931
1932### Visual Comparison
1933
1934**Before (v5.1.9)**: Mismatched backgrounds
1935```
1936┌────────────────────────────────┐
1937│ Eventlist (gray #f5f5f5)      │ ← __background_site__
1938└────────────────────────────────┘
1939
1940┌────────────────────────────────┐
1941│ Calendar                       │
1942│ ┌──┬──┬──┬──┬──┬──┬──┐       │
1943│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
1944│ └──┴──┴──┴──┴──┴──┴──┘       │
1945└────────────────────────────────┘
1946Different colors - looks inconsistent
1947```
1948
1949**After (v5.2.0)**: Unified backgrounds
1950```
1951┌────────────────────────────────┐
1952│ Eventlist (white #fff)         │ ← __background__
1953└────────────────────────────────┘
1954
1955┌────────────────────────────────┐
1956│ Calendar                       │
1957│ ┌──┬──┬──┬──┬──┬──┬──┐       │
1958│ │  │  │  │  │  │  │  │       │ ← __background__ (white #fff)
1959│ └──┴──┴──┴──┴──┴──┴──┘       │
1960└────────────────────────────────┘
1961Same color - perfectly consistent!
1962```
1963
1964### Template Examples
1965
1966**Light Template**:
1967```ini
1968__background_site__ = "#f5f5f5"  (light gray)
1969__background__ = "#ffffff"       (white)
1970```
1971
1972**Before**: Eventlist gray, cells white
1973**After**: Eventlist white, cells white ✓
1974
1975**Dark Template**:
1976```ini
1977__background_site__ = "#1a1a1a"  (very dark)
1978__background__ = "#2d2d2d"       (dark)
1979```
1980
1981**Before**: Eventlist very dark, cells dark
1982**After**: Eventlist dark, cells dark ✓
1983
1984### Benefits
1985
1986**Visual Consistency**:
1987- All backgrounds match
1988- Clean, unified appearance
1989- Professional look
1990
1991**Correct Template Integration**:
1992- Uses content area color (not page wrapper)
1993- Matches wiki content area
1994- Proper color hierarchy
1995
1996**Works Everywhere**:
1997- Light templates ✓
1998- Dark templates ✓
1999- Custom templates ✓
2000
2001### All Backgrounds Unified
2002
2003**Now using __background__**:
2004- Eventlist background ✓
2005- Calendar cells ✓
2006- Sidebar widget ✓
2007- Event items ✓
2008- Input fields ✓
2009- Buttons ✓
2010- Dialogs ✓
2011
2012**Perfect harmony throughout!** ��
2013
2014## Version 5.1.9 (2026-02-09) - FIX WIKI THEME EVENT BACKGROUNDS
2015
2016### �� Fixed: Wiki Theme Event Backgrounds Not Showing
2017- **Fixed:** Wiki theme fallback used CSS variables in inline styles (doesn't work!)
2018- **Fixed:** Replaced CSS variables with actual hex colors
2019- **Result:** Event backgrounds now show correctly with template colors!
2020
2021### The Problem
2022
2023CSS variables like `var(--__background__, #fff)` don't work in inline `style=""` attributes!
2024
2025**Before (broken)**:
2026```php
2027'cell_bg' => 'var(--__background__, #fff)',  // Doesn't work in inline styles!
2028```
2029
2030**After (fixed)**:
2031```php
2032'cell_bg' => '#fff',  // Actual hex color works!
2033```
2034
2035### What Was Affected
2036
2037**When style.ini read successfully**:
2038- ✅ Worked fine (uses actual hex colors from file)
2039
2040**When style.ini fallback used**:
2041- ❌ Events had no background
2042- ❌ CSS variables don't work in inline styles
2043- ❌ Looked broken
2044
2045### The Fix
2046
2047**Wiki theme fallback now uses real colors**:
2048```php
2049'wiki' => [
2050    'bg' => '#f5f5f5',           // Real hex (was: var(--__background_site__))
2051    'border' => '#ccc',           // Real hex (was: var(--__border__))
2052    'cell_bg' => '#fff',          // Real hex (was: var(--__background__))
2053    'cell_today_bg' => '#eee',    // Real hex (was: var(--__background_neu__))
2054    'text_primary' => '#333',     // Real hex (was: var(--__text__))
2055    'text_bright' => '#2b73b7',   // Real hex (was: var(--__link__))
2056    'text_dim' => '#666',         // Real hex (was: var(--__text_neu__))
2057    'grid_bg' => '#e8e8e8',       // Real hex (was: var(--__background_alt__))
2058    // ... all colors now use real hex values
2059]
2060```
2061
2062### Why CSS Variables Don't Work
2063
2064**CSS variables work**:
2065```css
2066.some-class {
2067    background: var(--__background__, #fff);  /* ✓ Works in CSS */
2068}
2069```
2070
2071**CSS variables DON'T work**:
2072```html
2073<div style="background: var(--__background__, #fff)">  <!-- ✗ Doesn't work -->
2074```
2075
2076### How It Works Now
2077
2078**Priority system**:
20791. **Try reading style.ini** → Use actual template hex colors ✓
20802. **If file not found** → Use fallback hex colors ✓
20813. **Never use CSS variables in inline styles** ✓
2082
2083**Both paths now work correctly!**
2084
2085### Visual Result
2086
2087**Events now have proper backgrounds**:
2088```
2089┌──────────────────────────┐
2090│ �� Meeting at 2pm        │ ← White background (#fff)
2091│ Description here...      │
2092│ [✏️ Edit] [��️ Delete]   │
2093└──────────────────────────┘
2094
2095Not:
2096┌──────────────────────────┐
2097│ �� Meeting at 2pm        │ ← No background (broken)
2098│ Description here...      │
2099└──────────────────────────┘
2100```
2101
2102### Affected Areas
2103
2104**All event displays**:
2105- Main calendar events ✓
2106- Sidebar widget events ✓
2107- Event list items ✓
2108- Event backgrounds ✓
2109- Button backgrounds ✓
2110- Input field backgrounds ✓
2111
2112**Everything uses real colors now!**
2113
2114## Version 5.1.8 (2026-02-09) - IMPROVED UPDATE TAB LAYOUT
2115
2116### �� Reorganized: Better Update Tab Layout
2117- **Moved:** Current Version section to the top
2118- **Combined:** Upload and Important Notes side-by-side
2119- **Improved:** Space-efficient two-column layout
2120- **Result:** More information visible at once!
2121
2122### New Layout Order
2123
2124**Version 5.1.8**:
2125```
21261. Current Version (at top - see what you have)
21272. Upload + Important Notes (side-by-side)
21283. Recent Changes (changelog)
21294. Backups
2130```
2131
2132### Side-by-Side Design
2133
2134**Upload form (left 60%) + Important Notes (right 40%)**:
2135```
2136┌──────────────────────────────────────────┐
2137│ �� Current Version                       │
2138│ Version: 5.1.8                           │
2139│ ✅ Permissions: OK                       │
2140└──────────────────────────────────────────┘
2141
2142┌─────────────────────┬────────────────────┐
2143│ �� Upload New       │ ⚠️ Important Notes │
2144│ [Choose File]       │ • Replaces files   │
2145│ ☑ Backup first      │ • Config preserved │
2146│ [Upload] [Clear]    │ • Events safe      │
2147└─────────────────────┴────────────────────┘
2148```
2149
2150### Benefits
2151
2152**Current Version First**:
2153- See what you have immediately
2154- Check permissions at a glance
2155- Know if ready to update
2156
2157**Side-by-Side Layout**:
2158- Upload form and warnings together
2159- Read notes while choosing file
2160- More efficient use of space
2161- Less scrolling needed
2162
2163**Better Information Flow**:
21641. See current version ✓
21652. Upload new version with notes visible ✓
21663. Review recent changes ✓
21674. Manage backups ✓
2168
2169### Visual Comparison
2170
2171**Before (v5.1.7)**:
2172```
2173Important Notes (full width)
21742175Upload Form (full width)
21762177Current Version
21782179Recent Changes
21802181Backups
2182```
2183
2184**After (v5.1.8)**:
2185```
2186Current Version (full width)
21872188Upload (60%) | Notes (40%)
21892190Recent Changes
21912192Backups
2193```
2194
2195**More compact, better organized!**
2196
2197### Responsive Design
2198
2199**Wide screens**:
2200- Upload and notes side-by-side
2201- Full 1200px width utilized
2202- Efficient space usage
2203
2204**Narrow screens**:
2205- Sections stack gracefully
2206- Flex layout adapts
2207- Still fully functional
2208
2209### Layout Details
2210
2211**Current Version Section**:
2212- Full width (1200px max)
2213- Shows version, author, description
2214- Permission status with icons
2215- Helpful fix commands if needed
2216
2217**Upload/Notes Section**:
2218- Flexbox layout with gap
2219- Upload: `flex:1` (grows)
2220- Notes: `flex:0 0 350px` (fixed 350px)
2221- Both have proper min-width
2222
2223**Recent Changes Section**:
2224- Full width (1200px max)
2225- Compact scrollable view
2226- Color-coded change types
2227- Last 10 versions shown
2228
2229**Backups Section**:
2230- Full width (1200px max)
2231- Manual backup button
2232- Scrollable file list
2233- All actions accessible
2234
2235### Improved Max Widths
2236
2237All sections now use `max-width:1200px` (previously 900px):
2238- Better use of wide screens
2239- Still responsive on narrow screens
2240- Consistent throughout tab
2241
2242## Version 5.1.7 (2026-02-09) - FIX SYNTAX ERROR
2243
2244### �� Fixed: Extra Closing Brace
2245- **Fixed:** ParseError on line 1936 (extra closing brace)
2246- **Result:** Manual backup feature now works correctly!
2247
2248### What Was Wrong
2249
2250Extra `}` after the backup section:
2251
2252**Before (broken)**:
2253```php
2254echo '</div>';
2255}  // ← Extra closing brace!
2256
2257echo '<script>
2258```
2259
2260**After (fixed)**:
2261```php
2262echo '</div>';
2263
2264echo '<script>
2265```
2266
2267**Manual backup feature now fully functional!** ✅
2268
2269## Version 5.1.6 (2026-02-09) - MANUAL BACKUP ON DEMAND
2270
2271### �� Added: Create Backup Manually Anytime
2272- **Added:** "Create Backup Now" button in Backups section
2273- **Added:** Manual backup action handler with full verification
2274- **Added:** Backups section always visible (even with no backups)
2275- **Added:** Success message showing file size and file count
2276- **Result:** Create backups anytime without needing to upload!
2277
2278### Manual Backup Button
2279
2280**New Layout**:
2281```
2282┌─────────────────────────────────────┐
2283│ �� Backups        [�� Create Backup Now] │
2284├─────────────────────────────────────┤
2285│ Backup File                Size     │
2286calendar.backup.v5.1.6...  243 KB   │
2287│ [�� Download] [✏️ Rename] [��️ Delete] │
2288└─────────────────────────────────────┘
2289```
2290
2291**Always visible - even with no backups**:
2292```
2293┌─────────────────────────────────────┐
2294│ �� Backups        [�� Create Backup Now] │
2295├─────────────────────────────────────┤
2296│ No backups yet. Click "Create       │
2297│ Backup Now" to create your first    │
2298│ backup.                              │
2299└─────────────────────────────────────┘
2300```
2301
2302### How It Works
2303
2304**Click the button**:
23051. Confirm: "Create a backup of the current plugin version?"
23062. System creates backup ZIP
23073. Verifies: File count (30+ files)
23084. Verifies: File size (200KB+)
23095. Shows success: "✓ Manual backup created: filename.zip (243 KB, 31 files)"
2310
2311**Backup naming**:
2312```
2313calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2314                       ^^^^^^
2315                     "manual" tag identifies manual backups
2316```
2317
2318### Use Cases
2319
2320**Before updates**:
2321- Create safety backup before uploading new version
2322- Have multiple restore points
2323- Test new features with fallback
2324
2325**Regular backups**:
2326- Weekly/monthly backup schedule
2327- Before making configuration changes
2328- After important customizations
2329
2330**Development**:
2331- Backup before code experiments
2332- Save working states
2333- Quick rollback points
2334
2335### Full Verification
2336
2337**Same checks as automatic backups**:
2338- ✅ File count check (minimum 10, expected 30+)
2339- ✅ File size check (minimum 1KB, expected 200KB+)
2340- ✅ Existence check (file actually created)
2341- ✅ Automatic cleanup on failure
2342
2343**Success message includes**:
2344- Backup filename
2345- File size (human-readable)
2346- Number of files backed up
2347
2348### Example Messages
2349
2350**Success**:
2351```
2352✓ Manual backup created successfully:
2353  calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2354  (243 KB, 31 files)
2355```
2356
2357**Failure Examples**:
2358```
2359❌ Plugin directory is not readable.
2360   Please check permissions.
2361
2362❌ Backup incomplete: Only 5 files were added (expected 30+).
2363   Backup failed.
2364
2365❌ Backup file is too small (342 bytes).
2366   Only 3 files were added. Backup failed.
2367```
2368
2369### Benefits
2370
2371**On-Demand Safety**:
2372- Create backups anytime
2373- No need to upload new version
2374- Quick and easy
2375
2376**Peace of Mind**:
2377- Backup before risky changes
2378- Multiple restore points
2379- Safe experimentation
2380
2381**Professional Workflow**:
2382- Regular backup schedule
2383- Version snapshots
2384- Disaster recovery
2385
2386### Backup Section Improvements
2387
2388**Always Visible**:
2389- Section shows even with 0 backups
2390- Button always accessible
2391- Clear call-to-action
2392
2393**Better Header**:
2394- Title and button on same row
2395- Clean, professional layout
2396- Space-efficient design
2397
2398### Technical Details
2399
2400**New Action**: `create_manual_backup`
2401
2402**New Function**: `createManualBackup()`
2403- Gets current version
2404- Creates timestamped filename with "manual" tag
2405- Uses same verification as auto-backups
2406- Shows detailed success/error messages
2407
2408**File Naming Convention**:
2409```
2410Automatic (on upload):
2411calendar.backup.v5.1.6.2026-02-09_12-30-45.zip
2412
2413Manual (button click):
2414calendar.backup.v5.1.6.manual.2026-02-09_12-30-45.zip
2415                       ^^^^^^^
2416                    Easy to identify!
2417```
2418
2419### Permissions Required
2420
2421- **Read access**: Plugin directory
2422- **Write access**: Parent plugins directory
2423
2424**Same as automatic backups** - no additional permissions needed!
2425
2426## Version 5.1.5 (2026-02-09) - ENHANCED BACKUP VERIFICATION
2427
2428### �� Enhanced: Backup Creation with Robust Verification
2429- **Added:** File count validation (must have 10+ files)
2430- **Added:** File size validation (must be 1KB+ minimum)
2431- **Added:** Return value from addDirectoryToZip (counts files added)
2432- **Added:** Detailed error messages showing file count
2433- **Added:** Automatic deletion of invalid/incomplete backups
2434- **Enhanced:** Exception handling with proper error propagation
2435- **Result:** Backups are now guaranteed to be complete or fail clearly!
2436
2437### What Changed
2438
2439**Before (v5.1.4)**:
2440```php
2441$this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2442$zip->close();
2443// No verification - could create empty or partial backup
2444```
2445
2446**After (v5.1.5)**:
2447```php
2448$fileCount = $this->addDirectoryToZip($zip, $pluginDir, 'calendar/');
2449$zip->close();
2450
2451// Verify backup exists
2452if (!file_exists($backupPath)) {
2453    redirect('Backup file was not created');
2454}
2455
2456// Verify backup has content
2457$backupSize = filesize($backupPath);
2458if ($backupSize < 1000) {
2459    unlink($backupPath);
2460    redirect('Backup too small: ' . $backupSize . ' bytes');
2461}
2462
2463// Verify file count
2464if ($fileCount < 10) {
2465    unlink($backupPath);
2466    redirect('Only ' . $fileCount . ' files added (expected 30+)');
2467}
2468```
2469
2470### Backup Validation Checks
2471
2472**Three-Layer Verification**:
2473
24741. **File Count Check**:
2475   - Minimum: 10 files required
2476   - Expected: 30+ files
2477   - Action: Delete backup if too few files
2478
24792. **Size Check**:
2480   - Minimum: 1KB (1000 bytes)
2481   - Expected: 200-250KB
2482   - Action: Delete backup if too small
2483
24843. **Existence Check**:
2485   - Verify file was actually created
2486   - Check ZIP archive is valid
2487   - Action: Error if file missing
2488
2489### Enhanced Error Reporting
2490
2491**Detailed Error Messages**:
2492```
2493❌ "Backup file was not created"
2494❌ "Backup too small (342 bytes). Only 3 files added."
2495❌ "Only 5 files added (expected 30+). Backup aborted."
2496❌ "Too many errors adding files: Failed to add X, Y, Z..."
2497❌ "Directory does not exist: /path/to/dir"
2498❌ "Directory is not readable: /path/to/dir"
2499```
2500
2501**Now you know exactly what went wrong!**
2502
2503### Improved addDirectoryToZip Function
2504
2505**Returns File Count**:
2506```php
2507private function addDirectoryToZip($zip, $dir, $zipPath = '') {
2508    $fileCount = 0;
2509    $errors = [];
2510
2511    // Validation
2512    if (!is_dir($dir)) throw new Exception("Directory does not exist");
2513    if (!is_readable($dir)) throw new Exception("Not readable");
2514
2515    // Add files
2516    foreach ($files as $file) {
2517        if ($zip->addFile($filePath, $relativePath)) {
2518            $fileCount++;
2519        } else {
2520            $errors[] = "Failed to add: " . $filename;
2521        }
2522    }
2523
2524    // Check error threshold
2525    if (count($errors) > 5) {
2526        throw new Exception("Too many errors");
2527    }
2528
2529    return $fileCount;  // Returns count for verification!
2530}
2531```
2532
2533### Safety Features
2534
2535**Invalid Backup Cleanup**:
2536- Failed backups are automatically deleted
2537- No partial/corrupt backups left behind
2538- Clean error state
2539
2540**Error Threshold**:
2541- Allow up to 5 minor file errors (logs warnings)
2542- More than 5 errors = complete failure
2543- Prevents partially corrupt backups
2544
2545**Directory Validation**:
2546- Check directory exists before processing
2547- Check directory is readable
2548- Fail fast with clear errors
2549
2550### Benefits
2551
2552**Guaranteed Complete Backups**:
2553- ✅ All files included or backup fails
2554- ✅ No silent failures
2555- ✅ Clear error messages
2556- ✅ Automatic cleanup
2557
2558**Better Debugging**:
2559- Know exactly how many files were added
2560- See specific errors for missing files
2561- Understand why backup failed
2562
2563**User Confidence**:
2564- Backup succeeds = complete backup
2565- Backup fails = clear error message
2566- No ambiguity
2567
2568### Example Scenarios
2569
2570**Scenario 1: Permission Issue**
2571```
2572User uploads new version
2573System starts backup
2574Error: "Directory is not readable: /lib/plugins/calendar/"
2575Backup fails before creating file
2576User sees clear error message
2577```
2578
2579**Scenario 2: Partial Backup**
2580```
2581User uploads new version
2582System creates backup
2583Only 5 files added (disk issue?)
2584Size: 450 bytes
2585Verification fails
2586Incomplete backup deleted
2587Error: "Only 5 files added (expected 30+)"
2588```
2589
2590**Scenario 3: Success**
2591```
2592User uploads new version
2593System creates backup
259431 files added
2595Size: 240KB
2596All verifications pass ✅
2597Update proceeds
2598```
2599
2600### Testing Recommendations
2601
2602After installing v5.1.5:
26031. Upload a new version with backup enabled
26042. Check for success message
26053. Verify backup file exists in /lib/plugins/
26064. Check backup file size (should be ~240KB)
26075. If backup fails, read error message carefully
2608
2609**Your backups are now bulletproof!** ��
2610
2611## Version 5.1.4 (2026-02-09) - BACKUP SYSTEM VERIFIED
2612
2613### ✅ Verified: Backup System Working Correctly
2614- **Verified:** addDirectoryToZip function includes all files recursively
2615- **Verified:** Backups contain all 31+ files from calendar directory
2616- **Verified:** File sizes are appropriate (233-240KB compressed, ~1MB uncompressed)
2617- **Info:** Backup sizes grow slightly with each version (more code = more features!)
2618- **Result:** Backup system is working perfectly!
2619
2620### Backup System Details
2621
2622**What Gets Backed Up**:
2623- All PHP files (syntax.php, admin.php, action.php, etc.)
2624- All JavaScript files (calendar-main.js, script.js)
2625- All documentation (CHANGELOG.md, README.md, all guides)
2626- All configuration (sync_config.php)
2627- All language files
2628- All assets and resources
2629- **Everything in the calendar/ directory!**
2630
2631**Backup Size Analysis**:
2632```
2633Version 5.0.4: 233KB (normal)
2634Version 5.0.5: 234KB (normal)
2635Version 5.0.6: 235KB (normal)
2636Version 5.0.7: 236KB (normal)
2637Version 5.0.8: 237KB (normal)
2638Version 5.0.9: 237KB (normal)
2639Version 5.1.0: 238KB (normal)
2640Version 5.1.1: 238KB (normal)
2641Version 5.1.2: 240KB (normal - added AJAX features)
2642Version 5.1.3: 240KB (normal)
2643```
2644
2645**Why Sizes Grow**:
2646- More features = more code
2647- Longer CHANGELOG
2648- Additional documentation
2649- New functionality
2650- **This is expected and normal!**
2651
2652**Compression Ratio**:
2653```
2654Uncompressed: ~1.0 MB (source files)
2655Compressed:   ~240 KB (ZIP archive)
2656Ratio:        ~24% (excellent compression!)
2657```
2658
2659### Backup File Contents
2660
2661**31 Files Included**:
2662```
2663admin.php              (216KB - main admin interface)
2664syntax.php             (173KB - calendar rendering)
2665calendar-main.js       (102KB - JavaScript functionality)
2666CHANGELOG.md           (268KB - complete version history)
2667style.css              (57KB - all styling)
2668action.php             (38KB - DokuWiki actions)
2669sync_outlook.php       (32KB - Outlook integration)
2670+ 24 other files (docs, configs, helpers)
2671```
2672
2673**All files successfully included!** ✅
2674
2675### How Backups Work
2676
2677**Creation Process**:
26781. User uploads new plugin version
26792. Checkbox "Create backup first" (checked by default)
26803. System creates backup: `calendar.backup.v5.1.3.2026-02-09_06-00-00.zip`
26814. Backup saved to: `/lib/plugins/` directory
26825. Then proceeds with update
2683
2684**Backup Function**:
2685```php
2686private function addDirectoryToZip($zip, $dir, $zipPath = '') {
2687    $files = new RecursiveIteratorIterator(
2688        new RecursiveDirectoryIterator($dir),
2689        RecursiveIteratorIterator::LEAVES_ONLY
2690    );
2691    foreach ($files as $file) {
2692        if (!$file->isDir()) {
2693            $zip->addFile($filePath, $relativePath);
2694        }
2695    }
2696}
2697```
2698
2699**Recursive = Gets Everything!** ✅
2700
2701### Verification Results
2702
2703**Test Results**:
2704- ✅ All 31 files present in zip
2705- ✅ All subdirectories included (lang/en/)
2706- ✅ File sizes match originals
2707- ✅ Compression works properly
2708- ✅ No files missing
2709- ✅ Backup can be restored
2710
2711**File Count**:
2712```
2713Source directory: 31 files
2714Backup ZIP:       34 items (31 files + 3 directories)
2715Status:           COMPLETE ✅
2716```
2717
2718### Backup Best Practices
2719
2720**Always enabled by default** ✅
2721**Stored in accessible location** ✅
2722**Timestamped filenames** ✅
2723**Complete directory backup** ✅
2724**Easy to restore** ✅
2725
2726### Conclusion
2727
2728The backup system is working perfectly. The file sizes are appropriate and expected:
2729- Compressed size: ~240KB (good compression)
2730- Uncompressed size: ~1MB (all source files)
2731- All files included: YES ✅
2732- Growing size over versions: Normal (more features!)
2733
2734**Your backups are complete and reliable!** ��
2735
2736## Version 5.1.3 (2026-02-08) - FIX JAVASCRIPT SYNTAX ERROR
2737
2738### �� Fixed: JavaScript Syntax Error in AJAX Function
2739- **Fixed:** ParseError on line 1947 (deleteBackup function)
2740- **Fixed:** Escaped all single quotes in JavaScript strings
2741- **Result:** AJAX backup deletion now works correctly!
2742
2743### What Was Wrong
2744
2745JavaScript inside PHP echo needs escaped quotes:
2746
2747**Before (broken)**:
2748```javascript
2749formData.append('action', 'delete_backup');  // PHP interprets quotes
2750```
2751
2752**After (fixed)**:
2753```javascript
2754formData.append(\'action\', \'delete_backup\');  // Escaped for PHP
2755```
2756
2757### All Quotes Escaped
2758
2759Fixed in deleteBackup function:
2760- ✅ FormData.append() calls
2761- ✅ fetch() URL
2762- ✅ querySelector() calls
2763- ✅ createElement() call
2764- ✅ All string literals
2765- ✅ Error messages
2766
2767**JavaScript now works!** ✓
2768
2769## Version 5.1.2 (2026-02-08) - AJAX BACKUP DELETION & LAYOUT IMPROVEMENT
2770
2771### �� Improved: Update Tab Further Refined
2772- **Moved:** Important Notes to very top (above upload)
2773- **Enhanced:** Delete backup now uses AJAX (no page refresh!)
2774- **Added:** Smooth fade-out animation when deleting backups
2775- **Added:** Success message after deletion
2776- **Auto-remove:** Backup section disappears if last backup deleted
2777- **Result:** Smoother, more polished experience!
2778
2779### New Layout Order
2780
2781**Final Order (v5.1.2)**:
2782```
27831. ⚠️ Important Notes (warnings at top)
27842. �� Upload New Version (with Clear Cache button)
27853. �� Current Version (info)
27864. �� Recent Changes (changelog)
27875. �� Available Backups (if any)
2788```
2789
2790### AJAX Backup Deletion
2791
2792**Before (v5.1.1)**:
2793- Click Delete → Page refreshes → Scroll back down
2794- Lose position on page
2795- Page reload is jarring
2796
2797**After (v5.1.2)**:
2798- Click Delete → Confirm
2799- Row fades out smoothly
2800- Row disappears
2801- Success message shows at top
2802- Success message fades after 3 seconds
2803- If last backup: entire section fades away
2804- **No page refresh!** ✓
2805
2806### Visual Flow
2807
2808**Delete Animation**:
2809```
28101. Click ��️ Delete
28112. Confirm dialog
28123. Row fades out (0.3s)
28134. Row removed
28145. Success message appears
28156. Message fades after 3s
2816```
2817
2818**If Last Backup**:
2819```
28201. Delete last backup
28212. Row fades out
28223. Entire "Available Backups" section fades
28234. Section removed
28245. Clean interface ✓
2825```
2826
2827### Success Message
2828
2829After deleting:
2830```
2831┌──────────────────────────────┐
2832│ ✓ Backup deleted: filename   │ ← Appears at top
2833└──────────────────────────────┘
2834   Fades after 3 seconds
2835```
2836
2837### Benefits
2838
2839**Important Notes First**:
2840- Warnings before actions ✓
2841- Read before uploading ✓
2842- Clear expectations ✓
2843
2844**AJAX Deletion**:
2845- No page refresh ✓
2846- Smooth animations ✓
2847- Stay in context ✓
2848- Professional feel ✓
2849
2850**Auto-Cleanup**:
2851- Empty list disappears ✓
2852- Clean interface ✓
2853- No clutter ✓
2854
2855### Technical Implementation
2856
2857**AJAX Request**:
2858```javascript
2859fetch('?do=admin&page=calendar&tab=update', {
2860    method: 'POST',
2861    body: formData
2862})
2863```
2864
2865**DOM Manipulation**:
2866- Fade out row
2867- Remove element
2868- Show success
2869- Remove section if empty
2870
2871**Smooth Transitions**:
2872- 300ms fade animations
2873- Clean visual feedback
2874- Professional polish
2875
2876## Version 5.1.1 (2026-02-08) - REORGANIZE UPDATE TAB
2877
2878### �� Improved: Update Tab Layout Reorganized
2879- **Moved:** Upload section to the top of the page
2880- **Added:** Clear Cache button next to Upload & Install button
2881- **Changed:** "Current Version" section moved below upload
2882- **Result:** Better workflow - upload first, then see version info!
2883
2884### New Layout Order
2885
2886**Before (v5.1.0)**:
2887```
28881. Clear Cache (standalone)
28892. Current Version
28903. Recent Changes
28914. Upload New Version
28925. Warning Box
28936. Backups
2894```
2895
2896**After (v5.1.1)**:
2897```
28981. Upload New Version (with Clear Cache button side-by-side)
28992. Warning Box
29003. Current Version
29014. Recent Changes
29025. Backups
2903```
2904
2905### Visual Result
2906
2907**Top of Update Tab**:
2908```
2909┌─────────────────────────────────┐
2910│ �� Upload New Version           │
2911│ ┌─────────────────────────────┐ │
2912│ │ [Choose File]               │ │
2913│ │ ☑ Create backup first       │ │
2914│ │ ┌──────────────┬──────────┐ │ │
2915│ │ │�� Upload &   │��️ Clear  │ │ │
2916│ │ │   Install    │   Cache  │ │ │
2917│ │ └──────────────┴──────────┘ │ │
2918│ └─────────────────────────────┘ │
2919│                                 │
2920│ ⚠️ Important Notes              │
2921│ • Will replace all files        │
2922│ • Config preserved              │
2923│                                 │
2924│ �� Current Version              │
2925│ Version: 5.1.1                  │
2926└─────────────────────────────────┘
2927```
2928
2929### Benefits
2930
2931**Better Workflow**:
2932- Primary action (upload) is first
2933- Clear cache conveniently next to install
2934- No scrolling to find upload button
2935- Logical top-to-bottom flow
2936
2937**Side-by-Side Buttons**:
2938- Upload & Install (green)
2939- Clear Cache (orange)
2940- Both common actions together
2941- Easy to access after upload
2942
2943**Improved UX**:
2944- Upload is most important → now at top
2945- Version info is reference → moved down
2946- Related actions grouped
2947- Cleaner organization
2948
2949### Button Layout
2950
2951```
2952┌──────────────────┬──────────────┐
2953│ �� Upload &      │ ��️ Clear     │
2954│    Install       │    Cache     │
2955│ (Green)          │ (Orange)     │
2956└──────────────────┴──────────────┘
2957```
2958
2959**Green = Primary Action**
2960**Orange = Secondary Action**
2961
2962Both easily accessible!
2963
2964## Version 5.1.0 (2026-02-08) - ADMIN SECTIONS USE MAIN BACKGROUND
2965
2966### �� Changed: Admin Section Backgrounds Now Use __background__
2967- **Changed:** All section boxes now use `__background__` instead of `__background_alt__`
2968- **Result:** Cleaner, more unified admin interface!
2969
2970### Background Usage Update
2971
2972**Before (v5.0.9)**:
2973```php
2974Section boxes: bg_alt (__background_alt__)
2975Content areas: bg (__background__)
2976```
2977
2978**After (v5.1.0)**:
2979```php
2980Section boxes: bg (__background__)
2981Content areas: bg (__background__)
2982```
2983
2984### Why This Change?
2985
2986**More unified appearance**:
2987- Sections and content use same background
2988- Creates cleaner, more cohesive look
2989- Borders provide visual separation
2990- Matches typical admin UI patterns
2991
2992**Template color hierarchy**:
2993```
2994__background_site__ → Outer page wrapper
2995__background__      → Content & sections (BOTH now use this)
2996__background_alt__  → Reserved for special panels/highlights
2997__background_neu__  → Special highlights
2998```
2999
3000### Visual Result
3001
3002**Light Template**:
3003```ini
3004__background__ = "#ffffff"
3005__background_alt__ = "#e8e8e8"
3006```
3007
3008**Before**:
3009```
3010Admin Page:
3011┌─────────────────────┐
3012│ ┌─────────────────┐ │
3013│ │ Section Box     │ │ ← Gray (#e8e8e8)
3014│ │ ┌─────────────┐ │ │
3015│ │ │ Content     │ │ │ ← White (#fff)
3016│ │ └─────────────┘ │ │
3017│ └─────────────────┘ │
3018└─────────────────────┘
3019Two-tone appearance
3020```
3021
3022**After**:
3023```
3024Admin Page:
3025┌─────────────────────┐
3026│ ┌─────────────────┐ │
3027│ │ Section Box     │ │ ← White (#fff)
3028│ │ ┌─────────────┐ │ │
3029│ │ │ Content     │ │ │ ← White (#fff)
3030│ │ └─────────────┘ │ │
3031│ └─────────────────┘ │
3032└─────────────────────┘
3033Unified, clean appearance
3034Borders provide separation
3035```
3036
3037**Dark Template**:
3038```ini
3039__background__ = "#2d2d2d"
3040__background_alt__ = "#3a3a3a"
3041```
3042
3043**After**:
3044```
3045Admin Page:
3046┌─────────────────────┐
3047│ ┌─────────────────┐ │
3048│ │ Section Box     │ │ ← Dark (#2d2d2d)
3049│ │ ┌─────────────┐ │ │
3050│ │ │ Content     │ │ │ ← Dark (#2d2d2d)
3051│ │ └─────────────┘ │ │
3052│ └─────────────────┘ │
3053└─────────────────────┘
3054Unified dark appearance
3055Accent borders provide definition
3056```
3057
3058### Benefits
3059
3060**Cleaner Look**:
3061- No more alternating gray/white
3062- More professional appearance
3063- Less visual noise
3064- Unified color scheme
3065
3066**Better Consistency**:
3067- Matches modern admin UI patterns
3068- Borders define sections, not colors
3069- Simpler, cleaner design
3070- Easier on the eyes
3071
3072**Template Friendly**:
3073- Works with any background color
3074- Light or dark templates
3075- Custom colors
3076- Always looks cohesive
3077
3078### All Sections Updated
3079
3080✅ Outlook Sync config sections
3081✅ Manage Events sections
3082✅ Update Plugin sections
3083✅ Themes tab sections
3084✅ Week start day section
3085✅ All form sections
3086
3087**Complete unified theming!** ��
3088
3089## Version 5.0.9 (2026-02-08) - FIX SYNTAX ERROR IN THEMES TAB
3090
3091### �� Fixed: Syntax Error in Theme Cards
3092- **Fixed:** ParseError on line 4461 (Purple theme card)
3093- **Fixed:** Malformed ternary expressions from sed replacement
3094- **Fixed:** All 4 theme cards (Purple, Professional, Pink, Wiki)
3095- **Result:** Admin pages work correctly!
3096
3097### What Was Wrong
3098
3099The bulk sed replacement in v5.0.8 incorrectly modified ternary expressions:
3100
3101**Before (broken)**:
3102```php
3103? '#9b59b6' : ' . $colors['border'] . ')
3104// Extra quote and dot created syntax error
3105```
3106
3107**After (fixed)**:
3108```php
3109? '#9b59b6' : $colors['border'])
3110// Clean ternary expression
3111```
3112
3113### All Theme Cards Fixed
3114
3115- ✅ Purple Dream card
3116- ✅ Professional Blue card
3117- ✅ Pink Bling card
3118- ✅ Wiki Default card
3119
3120### Now Working
3121
3122**Theme selection page loads** ✓
3123**All cards display properly** ✓
3124**Template colors applied** ✓
3125**No syntax errors** ✓
3126
3127## Version 5.0.8 (2026-02-08) - FIX THEMES TAB & BACKGROUND MAPPING
3128
3129### �� Fixed: Themes Tab Backgrounds & Correct Template Color Mapping
3130- **Fixed:** Themes tab now uses template colors (removed all hardcoded whites)
3131- **Fixed:** Main background now uses `__background__` instead of `__background_site__`
3132- **Fixed:** Theme selection cards use template backgrounds
3133- **Fixed:** Week start options use template backgrounds
3134- **Result:** Perfect color mapping throughout admin!
3135
3136### Color Mapping Correction
3137
3138**Before (v5.0.7)**:
3139```php
3140bg: __background_site__  // Wrong - this is outer page bg
3141bg_alt: __background_alt__
3142```
3143
3144**After (v5.0.8)**:
3145```php
3146bg: __background__       // Correct - main content bg
3147bg_alt: __background_alt__
3148```
3149
3150### Why This Matters
3151
3152**Template color hierarchy**:
3153```
3154__background_site__ → Outer page/site background
3155__background__      → Main content area (CORRECT for admin)
3156__background_alt__  → Sections/panels
3157__background_neu__  → Highlights
3158```
3159
3160**Admin should use**:
3161- `__background__` for input fields, content areas
3162- `__background_alt__` for section boxes, panels
3163
3164### Themes Tab Fixed
3165
3166**Removed all hardcoded colors**:
3167```php
3168Before: '#ddd', '#fff', '#dee2e6'
3169After:  $colors['border'], $colors['bg'], $colors['border']
3170```
3171
3172**Now themed**:
3173- ✅ Week start section background
3174- ✅ Week start option backgrounds
3175- ✅ Theme card backgrounds
3176- ✅ Theme card borders
3177- ✅ All borders throughout
3178
3179### Visual Result
3180
3181**Light Template**:
3182```ini
3183__background__ = "#ffffff"
3184__background_alt__ = "#e8e8e8"
3185```
3186
3187**Admin Before (v5.0.7)**:
3188```
3189Input fields: #f5f5f5 (site bg - wrong)
3190Sections: #e8e8e8 (alt bg - correct)
3191```
3192
3193**Admin After (v5.0.8)**:
3194```
3195Input fields: #ffffff (content bg - correct!)
3196Sections: #e8e8e8 (alt bg - correct!)
3197```
3198
3199**Dark Template**:
3200```ini
3201__background__ = "#2d2d2d"
3202__background_alt__ = "#3a3a3a"
3203```
3204
3205**Admin After (v5.0.8)**:
3206```
3207Input fields: #2d2d2d (content bg - perfect!)
3208Sections: #3a3a3a (alt bg - perfect!)
3209```
3210
3211### Complete Themes Tab
3212
3213**Week Start Options**:
3214```
3215┌─────────────────────────┐
3216│ �� Week Start Day       │ ← bg_alt
3217│ ┌─────────┬───────────┐ │
3218│ │ Monday  │ Sunday    │ │ ← bg (when not selected)
3219│ └─────────┴───────────┘ │
3220└─────────────────────────┘
3221```
3222
3223**Theme Cards**:
3224```
3225┌─────────────────────────┐
3226│ �� Matrix Edition       │ ← bg (when not selected)
3227│ Classic green theme     │   border (when not selected)
3228└─────────────────────────┘
3229
3230┌═════════════════════════┐
3231│ �� Purple Dream         │ ← rgba green tint (when selected)
3232│ Elegant purple theme    │   #00cc07 border (when selected)
3233└═════════════════════════┘
3234```
3235
3236### Perfect Integration
3237
3238**All admin pages now**:
3239- Content areas: `__background__` ✓
3240- Section boxes: `__background_alt__` ✓
3241- Borders: `__border__` ✓
3242- Text: `__text__` ✓
3243
3244**Matches wiki perfectly**:
3245- Same white content areas
3246- Same gray section boxes
3247- Same border colors
3248- Same text colors
3249
3250### No More Issues
3251
3252**Fixed**:
3253- ❌ Site background on content areas → ✅ Content background
3254- ❌ Hardcoded white on themes tab → ✅ Template background
3255- ❌ Hardcoded borders (#ddd) → ✅ Template borders
3256
3257**Result**:
3258- Perfect color hierarchy ✓
3259- Correct background levels ✓
3260- Complete template integration ✓
3261
3262## Version 5.0.7 (2026-02-08) - COMPLETE ADMIN THEMING
3263
3264### �� Fixed: All Admin Backgrounds Use Template Colors
3265- **Fixed:** All section backgrounds use `__background_alt__`
3266- **Fixed:** All content backgrounds use `__background__`
3267- **Fixed:** All borders use `__border__`
3268- **Fixed:** All text uses `__text__`
3269- **Result:** Complete admin template integration!
3270
3271### All Replacements
3272
3273**Backgrounds**:
3274```php
3275Before: background: #f9f9f9
3276After:  background: ' . $colors['bg_alt'] . '
3277
3278Before: background: #fff / background: white
3279After:  background: ' . $colors['bg'] . '
3280```
3281
3282**Borders**:
3283```php
3284Before: border: 1px solid #ddd
3285Before: border: 1px solid #e0e0e0
3286Before: border: 1px solid #eee
3287After:  border: 1px solid ' . $colors['border'] . '
3288```
3289
3290**Text**:
3291```php
3292Before: color: #333
3293Before: color: #666
3294After:  color: ' . $colors['text'] . '
3295```
3296
3297### Complete Admin Coverage
3298
3299**All tabs now themed**:
3300- ✅ Manage Events tab
3301- ✅ Update Plugin tab
3302- ✅ Outlook Sync tab
3303- ✅ Themes tab
3304- ✅ Tab navigation
3305- ✅ All sections
3306- ✅ All inputs
3307- ✅ All borders
3308- ✅ All text
3309
3310### Visual Result
3311
3312**Light Template**:
3313```
3314Admin Page:
3315┌──────────────────────────┐
3316│ Tab Navigation           │ ← Template borders
3317├──────────────────────────┤
3318│ Section Headers          │ ← bg_alt (light gray)
3319│ ┌──────────────────────┐ │
3320│ │ Form Inputs          │ │ ← bg (white)
3321│ │ Content Areas        │ │
3322│ └──────────────────────┘ │
3323└──────────────────────────┘
3324All template colors! ✓
3325```
3326
3327**Dark Template**:
3328```
3329Admin Page:
3330┌──────────────────────────┐
3331│ Tab Navigation           │ ← Template borders
3332├──────────────────────────┤
3333│ Section Headers          │ ← bg_alt (dark gray)
3334│ ┌──────────────────────┐ │
3335│ │ Form Inputs          │ │ ← bg (darker)
3336│ │ Content Areas        │ │
3337│ └──────────────────────┘ │
3338└──────────────────────────┘
3339All template colors! ✓
3340```
3341
3342### Template Color Mapping
3343
3344**Used throughout admin**:
3345```
3346__background_site__ → $colors['bg']       (main backgrounds)
3347__background_alt__  → $colors['bg_alt']   (section backgrounds)
3348__text__            → $colors['text']     (all text)
3349__border__          → $colors['border']   (all borders)
3350__link__            → $colors['link']     (links - future)
3351```
3352
3353### Examples by Section
3354
3355**Manage Events**:
3356- Event list backgrounds: `bg_alt`
3357- Event item backgrounds: `bg`
3358- Borders: `border`
3359- Text: `text`
3360
3361**Update Plugin**:
3362- Section backgrounds: `bg_alt`
3363- Content areas: `bg`
3364- Borders: `border`
3365- Text: `text`
3366
3367**Outlook Sync**:
3368- Config sections: `bg_alt`
3369- Input fields: `bg`
3370- Borders: `border`
3371- Labels: `text`
3372
3373**Themes Tab**:
3374- Theme cards: `bg_alt`
3375- Preview areas: `bg`
3376- Borders: `border`
3377- Descriptions: `text`
3378
3379### Benefits
3380
3381**Seamless Integration**:
3382- Matches wiki admin area perfectly
3383- Same colors throughout wiki
3384- Professional appearance
3385- Consistent experience
3386
3387**Automatic Adaptation**:
3388- Light templates: Light admin
3389- Dark templates: Dark admin
3390- Custom templates: Uses custom colors
3391
3392**No White Boxes**:
3393- Every background themed
3394- Every border themed
3395- Every text themed
3396- Complete consistency
3397
3398### PERFECT HARMONY
3399
3400**Frontend (Calendar)**:
3401- Wiki theme uses style.ini3402- Perfect template match ✓
3403
3404**Backend (Admin)**:
3405- Reads same style.ini3406- Perfect template match ✓
3407
3408**Complete Unity**:
3409- Same colors everywhere ✓
3410- Seamless experience ✓
3411- Professional polish ✓
3412
3413## Version 5.0.6 (2026-02-08) - ADMIN PAGES USE TEMPLATE COLORS
3414
3415### �� Enhanced: Month/Year Header & Admin Pages Use Template Colors
3416- **Fixed:** Month/Year header now uses `__text_neu__` for wiki theme
3417- **Added:** Admin pages read template's style.ini file
3418- **Added:** `getTemplateColors()` function in admin class
3419- **Fixed:** Tab navigation uses template text and border colors
3420- **Result:** Complete template integration everywhere!
3421
3422### Month/Year Header
3423
3424**Before**:
3425```php
3426color: __text__  // Same as primary text
3427```
3428
3429**After (Wiki Theme)**:
3430```php
3431color: __text_neu__  // Dimmed text (subtle)
3432```
3433
3434### Admin Pages Enhancement
3435
3436**New `getTemplateColors()` function**:
3437- Reads template's style.ini file
3438- Extracts color replacements
3439- Provides colors to all admin tabs
3440- Falls back to sensible defaults
3441
3442**Colors used**:
3443```php
3444bg: __background_site__
3445bg_alt: __background_alt__
3446text: __text__
3447border: __border__
3448link: __link__
3449```
3450
3451**Applied to**:
3452- Tab navigation borders
3453- Tab text colors
3454- All admin sections
3455- Ready for future enhancements
3456
3457### Visual Result
3458
3459**Calendar Header**:
3460```
3461┌────────────────────┐
3462│ ‹ February 2026 › │ ← __text_neu__ (dimmed)
3463└────────────────────┘
3464Subtle and elegant ✓
3465```
3466
3467**Admin Navigation**:
3468```
3469�� Manage Events | �� Update | ⚙️ Config | �� Themes
3470─────────────────────────────────────────────────
3471Active tab: Green (#00cc07)
3472Inactive tabs: Template text color
3473Border: Template border color
3474```
3475
3476### Template Integration
3477
3478**Light Template**:
3479```ini
3480__text_neu__ = "#666666"
3481__border__ = "#cccccc"
3482```
3483**Result**:
3484- Month/Year: Medium gray (subtle)
3485- Admin borders: Light gray
3486- Tab text: Dark gray
3487
3488**Dark Template**:
3489```ini
3490__text_neu__ = "#999999"
3491__border__ = "#555555"
3492```
3493**Result**:
3494- Month/Year: Light gray (subtle)
3495- Admin borders: Medium gray
3496- Tab text: Bright gray
3497
3498### Benefits
3499
3500**Calendar Frontend**:
3501- Month/Year header more subtle
3502- Better visual hierarchy
3503- Less prominent, more elegant
3504
3505**Admin Backend**:
3506- Uses template colors
3507- Matches wiki admin area
3508- Consistent experience
3509- Professional appearance
3510
3511### Future-Ready
3512
3513The `getTemplateColors()` function is now available for:
3514- ✅ Tab navigation (implemented)
3515- �� Section backgrounds (ready)
3516- �� Button colors (ready)
3517- �� Input fields (ready)
3518- �� Success/error messages (ready)
3519
3520**Foundation laid for complete admin theming!** ��
3521
3522## Version 5.0.5 (2026-02-08) - WIKI THEME ADD BUTTON & SECTION HEADERS
3523
3524### �� Fixed: Add Event Bar & Section Headers Use Template Colors
3525- **Fixed:** Add Event bar now uses `__background_alt__` for wiki theme
3526- **Fixed:** "Today" header uses `__text_neu__`
3527- **Fixed:** "Tomorrow" header uses `__text__`
3528- **Fixed:** "Important Events" header uses `__border__`
3529- **Result:** Perfect template color integration!
3530
3531### All Changes
3532
3533**Add Event Bar (Wiki Theme)**:
3534
3535**Before**:
3536```php
3537background: #3498db  // Generic blue
3538```
3539
3540**After**:
3541```php
3542background: __background_alt__  // Template alternate bg
3543text: __text__                  // Template text color
3544hover: __background_neu__       // Template neutral bg
3545```
3546
3547**Section Headers (Wiki Theme)**:
3548
3549**Before**:
3550```php
3551Today: #ff9800           // Orange
3552Tomorrow: #4caf50        // Green
3553Important Events: #9b59b6 // Purple
3554```
3555
3556**After**:
3557```php
3558Today: __text_neu__      // Template dimmed text
3559Tomorrow: __text__       // Template primary text
3560Important Events: __border__ // Template border color
3561```
3562
3563### Visual Result
3564
3565**Wiki Default Theme**:
3566```
3567Add Event Bar:
3568┌────────────────┐
3569│  + ADD EVENT   │ ← Template alt background
3570└────────────────┘
3571
3572Sections:
3573━━━━━━━━━━━━━━━━
3574Today              ← Dimmed text color (__text_neu__)
3575• Team Meeting
3576
3577Tomorrow           ← Primary text color (__text__)
3578• Code Review
3579
3580Important Events   ← Border color (__border__)
3581• Project Deadline
3582```
3583
3584### Example with DokuWiki Default Template
3585
3586**Template colors**:
3587```ini
3588__background_alt__ = "#e8e8e8"
3589__text__ = "#333333"
3590__text_neu__ = "#666666"
3591__border__ = "#cccccc"
3592```
3593
3594**Calendar result**:
3595```
3596Add Event Bar: Light gray (#e8e8e8)
3597Today header: Medium gray (#666666)
3598Tomorrow header: Dark gray (#333333)
3599Important Events header: Border gray (#cccccc)
3600```
3601
3602### Example with Dark Template
3603
3604**Template colors**:
3605```ini
3606__background_alt__ = "#2d2d2d"
3607__text__ = "#e0e0e0"
3608__text_neu__ = "#999999"
3609__border__ = "#555555"
3610```
3611
3612**Calendar result**:
3613```
3614Add Event Bar: Dark gray (#2d2d2d)
3615Today header: Light gray (#999999)
3616Tomorrow header: Bright gray (#e0e0e0)
3617Important Events header: Medium gray (#555555)
3618```
3619
3620### Perfect Harmony
3621
3622All sidebar elements now use template colors:
3623- ✅ Add Event bar background
3624- ✅ Add Event bar text
3625- ✅ Today section header
3626- ✅ Tomorrow section header
3627- ✅ Important Events header
3628- ✅ Calendar cells
3629- ✅ Grid backgrounds
3630- ✅ All borders
3631
3632**Complete template integration!** ��
3633
3634## Version 5.0.4 (2026-02-08) - USE __background__ FOR CALENDAR CELLS
3635
3636### �� Fixed: Calendar Cells Use Correct Template Color
3637- **Fixed:** Calendar cells now use `__background__` from template
3638- **Changed:** `cell_bg` now uses `__background__` instead of `__background_neu__`
3639- **Result:** Calendar cells match main content area background!
3640
3641### Color Mapping Update
3642
3643**Before (v5.0.3)**:
3644```php
3645cell_bg: __background_neu__  // Wrong - this is for neutral/alternate
3646```
3647
3648**After (v5.0.4)**:
3649```php
3650cell_bg: __background__      // Correct - main content background
3651```
3652
3653### Template Color Usage
3654
3655**Wiki Default theme now uses**:
3656```
3657__background_site__ → Overall page background
3658__background__      → Calendar cells (main content bg)
3659__background_alt__  → Grid background, headers
3660__background_neu__  → Today cell highlight
3661__text__            → Primary text
3662__text_neu__        → Dimmed text
3663__link__            → Links, bright text
3664__border__          → All borders
3665```
3666
3667### Visual Result
3668
3669**Before**:
3670```
3671Calendar with template colors:
3672┌─────┬─────┬─────┐
3673│ Mon │ Tue │ Wed │
3674├─────┼─────┼─────┤
3675│  8  │  9  │ 10  │ ← Neutral gray (wrong)
3676└─────┴─────┴─────┘
3677```
3678
3679**After**:
3680```
3681Calendar with template colors:
3682┌─────┬─────┬─────┐
3683│ Mon │ Tue │ Wed │
3684├─────┼─────┼─────┤
3685│  8  │  9  │ 10  │ ← White/content bg (correct!)
3686└─────┴─────┴─────┘
3687```
3688
3689### Example Template Colors
3690
3691**DokuWiki Default**:
3692```ini
3693__background__ = "#ffffff"
3694```
3695**Result**: White calendar cells ✓
3696
3697**Dark Template**:
3698```ini
3699__background__ = "#2d2d2d"
3700```
3701**Result**: Dark calendar cells ✓
3702
3703**Custom Template**:
3704```ini
3705__background__ = "#f9f9f9"
3706```
3707**Result**: Custom color cells ✓
3708
3709### Perfect Matching
3710
3711Calendar cells now match:
3712- ✅ Main content area background
3713- ✅ Article/page background
3714- ✅ Content box background
3715- ✅ Same as wiki text background
3716
3717**Seamless integration!** ��
3718
3719## Version 5.0.3 (2026-02-08) - READ COLORS FROM TEMPLATE STYLE.INI
3720
3721### �� Enhanced: Wiki Default Theme Reads Template Colors
3722- **Added:** Function to read colors from DokuWiki template's style.ini file
3723- **Reads:** `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
3724- **Falls back:** Also checks `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
3725- **Uses:** Actual template colors instead of CSS variables
3726- **Result:** Perfect color matching with any DokuWiki template!
3727
3728### How It Works
3729
3730**New Function: `getWikiTemplateColors()`**
3731
37321. **Detects** current DokuWiki template name
37332. **Reads** the template's `style.ini` file
37343. **Parses** color replacements section
37354. **Maps** template colors to calendar theme
37365. **Falls back** to CSS variables if file not found
3737
3738### Colors Read from style.ini
3739
3740**Template color replacements used**:
3741```php
3742__background_site__  → bg, header_bg
3743__background_alt__   → grid_bg, cell_today_bg
3744__background_neu__   → cell_bg
3745__text__             → text_primary
3746__text_neu__         → text_dim
3747__link__             → text_bright
3748__border__           → border, grid_border
3749```
3750
3751### Example style.ini Mapping
3752
3753**Template style.ini**:
3754```ini
3755[replacements]
3756__background_site__ = "#f8f9fa"
3757__background_alt__  = "#e9ecef"
3758__background_neu__  = "#dee2e6"
3759__text__            = "#212529"
3760__text_neu__        = "#6c757d"
3761__link__            = "#0d6efd"
3762__border__          = "#ced4da"
3763```
3764
3765**Calendar theme result**:
3766```php
3767bg: #f8f9fa
3768header_bg: #e9ecef
3769grid_bg: #e9ecef
3770cell_bg: #dee2e6
3771text_primary: #212529
3772text_dim: #6c757d
3773text_bright: #0d6efd
3774border: #ced4da
3775grid_border: #ced4da
3776```
3777
3778### Before vs After
3779
3780**Before (v5.0.2)**:
3781```
3782Wiki Default theme used:
3783- CSS variables (var(--__background__, #fff))
3784- Required browser CSS variable support
3785- Fallback to generic colors
3786```
3787
3788**After (v5.0.3)**:
3789```
3790Wiki Default theme uses:
3791- Actual colors from template's style.ini
3792- Exact template color values
3793- No CSS variable dependency
3794- Perfect color matching!
3795```
3796
3797### File Location Priority
3798
3799Checks in order:
38001. `/var/www/html/dokuwiki/conf/tpl/{template}/style.ini`
38012. `/var/www/html/dokuwiki/lib/tpl/{template}/style.ini`
38023. Falls back to CSS variables if neither found
3803
3804### Benefits
3805
3806**More accurate colors**:
3807- Uses exact template color values ✓
3808- No CSS variable interpolation ✓
3809- Consistent across all browsers ✓
3810
3811**Better compatibility**:
3812- Works with older browsers ✓
3813- No CSS variable support needed ✓
3814- Direct color values ✓
3815
3816**Perfect matching**:
3817- Reads template's actual colors ✓
3818- Same colors as wiki pages ✓
3819- Seamless integration ✓
3820
3821### Template Examples
3822
3823**DokuWiki Default Template**:
3824```
3825Reads: lib/tpl/dokuwiki/style.ini
3826Gets: Default DokuWiki colors
3827Result: Perfect classic DokuWiki look
3828```
3829
3830**Bootstrap Template**:
3831```
3832Reads: lib/tpl/bootstrap3/style.ini
3833Gets: Bootstrap color scheme
3834Result: Perfect Bootstrap integration
3835```
3836
3837**Custom Template**:
3838```
3839Reads: conf/tpl/mycustom/style.ini
3840Gets: Your custom colors
3841Result: Perfect custom theme match
3842```
3843
3844### Fallback Chain
3845
38461. **Try** reading style.ini from template
38472. **If found** → Use exact colors from file
38483. **If not found** → Use CSS variables
38494. **If no CSS vars** → Use fallback colors
3850
3851**Always works, always matches!** ✓
3852
3853## Version 5.0.2 (2026-02-08) - FIX WIKI DEFAULT THEME DAY PANEL
3854
3855### �� Fixed: Wiki Default Theme Day Panel Colors
3856- **Fixed:** Day popup panel now uses DokuWiki CSS variables
3857- **Fixed:** Panel background matches wiki theme
3858- **Fixed:** Panel header matches wiki theme
3859- **Fixed:** Border colors use wiki theme
3860- **Fixed:** Text colors use wiki theme
3861- **Result:** Perfect integration with DokuWiki templates!
3862
3863### All Changes
3864
3865**Day Panel Colors (Wiki Default)**:
3866
3867**Before**:
3868```php
3869background: rgba(36, 36, 36, 0.5)  // Dark gray (wrong!)
3870header: #3498db                     // Blue (wrong!)
3871```
3872
3873**After**:
3874```php
3875background: var(--__background__, #fff)
3876header: var(--__background_alt__, #e8e8e8)
3877header_text: var(--__text__, #333)
3878border: var(--__border__, #ccc)
3879shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
3880```
3881
3882**Event Colors (Wiki Default)**:
3883```php
3884event_bg: var(--__background_alt__, rgba(245, 245, 245, 0.5))
3885border_color: var(--__border__, rgba(204, 204, 204, 0.3))
3886bar_shadow: 0 1px 2px rgba(0, 0, 0, 0.15)
3887```
3888
3889### Before vs After
3890
3891**Before (v5.0.1)**:
3892```
3893Wiki Default - Click Week Cell:
3894┌────────────────┐
3895│ Monday, Feb 8  │ ← Blue header (wrong)
3896├────────────────┤
3897│ Team Meeting   │ ← Dark gray bg (wrong)
3898│ 2:00 PM        │
3899└────────────────┘
3900Doesn't match wiki theme
3901```
3902
3903**After (v5.0.2)**:
3904```
3905Wiki Default - Click Week Cell:
3906
3907Light Wiki Theme:
3908┌────────────────┐
3909│ Monday, Feb 8  │ ← Light gray header ✓
3910├────────────────┤
3911│ Team Meeting   │ ← White bg ✓
3912│ 2:00 PM        │   Dark text ✓
3913└────────────────┘
3914
3915Dark Wiki Theme:
3916┌────────────────┐
3917│ Monday, Feb 8  │ ← Dark header ✓
3918├────────────────┤
3919│ Team Meeting   │ ← Dark bg ✓
3920│ 2:00 PM        │   Light text ✓
3921└────────────────┘
3922
3923Perfectly matches wiki!
3924```
3925
3926### CSS Variables Used
3927
3928**Wiki Default theme now uses**:
3929- `--__background__` - Main background (panel body)
3930- `--__background_alt__` - Alternate bg (panel header, events)
3931- `--__text__` - Text color (header text)
3932- `--__border__` - Border color (panel border, event borders)
3933
3934**With fallbacks**:
3935```css
3936var(--__background__, #fff)           /* white fallback */
3937var(--__background_alt__, #e8e8e8)    /* light gray fallback */
3938var(--__text__, #333)                 /* dark text fallback */
3939var(--__border__, #ccc)               /* gray border fallback */
3940```
3941
3942### Perfect Adaptation
3943
3944**Light Templates**:
3945- Light panel backgrounds ✓
3946- Dark text ✓
3947- Subtle borders ✓
3948- Clean appearance ✓
3949
3950**Dark Templates**:
3951- Dark panel backgrounds ✓
3952- Light text ✓
3953- Visible borders ✓
3954- Perfect contrast ✓
3955
3956**Custom Templates**:
3957- Uses template's CSS variables ✓
3958- Automatic adaptation ✓
3959- Seamless integration ✓
3960
3961### Now Truly Adaptive
3962
3963Wiki Default theme now properly uses DokuWiki CSS variables for:
3964- ✅ Calendar grid
3965- ✅ Sidebar widget
3966- ✅ Event list
3967- ✅ **Day panel** ← v5.0.2!
3968- ✅ All backgrounds
3969- ✅ All text
3970- ✅ All borders
3971
3972**Complete wiki integration!** ��
3973
3974## Version 5.0.1 (2026-02-08) - THEME CONFLICT TOOLTIPS
3975
3976### �� Enhanced: Time Conflict Tooltips Now Themed
3977- **Fixed:** Conflict tooltips now match calendar theme
3978- **Added:** Theme-aware background, border, text colors
3979- **Added:** Theme-aware shadow effects
3980- **Result:** Complete visual consistency!
3981
3982### Tooltip Theming
3983
3984**Now uses theme colors for**:
3985- Background: Theme background color
3986- Border: Theme border color
3987- Header text: Theme primary text color
3988- Item text: Theme dim text color
3989- Shadow: Theme shadow color
3990
3991### Before vs After
3992
3993**Before (v5.0.0)**:
3994```
3995Hover ⚠️ badge:
3996┌─────────────────┐
3997│ ⚠️ Time Conflicts│ ← Default colors
3998│ • Event A       │
3999│ • Event B       │
4000└─────────────────┘
4001```
4002
4003**After (v5.0.1)**:
4004```
4005Matrix Theme:
4006┌─────────────────┐
4007│ ⚠️ Time Conflicts│ ← Green header
4008│ • Event A       │ ← Green text
4009│ • Event B       │   Dark green bg
4010└─────────────────┘
4011
4012Purple Theme:
4013┌─────────────────┐
4014│ ⚠️ Time Conflicts│ ← Purple header
4015│ • Event A       │ ← Purple text
4016│ • Event B       │   Dark purple bg
4017└─────────────────┘
4018
4019Professional Theme:
4020┌─────────────────┐
4021│ ⚠️ Time Conflicts│ ← Blue header
4022│ • Event A       │ ← Dark text
4023│ • Event B       │   Light bg
4024└─────────────────┘
4025
4026Pink Theme:
4027┌─────────────────┐
4028│ ⚠️ Time Conflicts│ ← Pink header ✨
4029│ • Event A       │ ← Pink text
4030│ • Event B       │   Dark pink bg ��
4031└─────────────────┘
4032
4033Wiki Default:
4034┌─────────────────┐
4035│ ⚠️ Time Conflicts│ ← Adapts to wiki
4036│ • Event A       │ ← Wiki colors
4037│ • Event B       │
4038└─────────────────┘
4039```
4040
4041### Now 100% Complete
4042
4043**Every tooltip themed**:
4044- ✅ Conflict tooltips
4045- ✅ All other tooltips (if any)
4046- ✅ Perfect consistency
4047
4048**Absolute perfection!** ✨
4049
4050## Version 5.0.0 (2026-02-08) - MAJOR RELEASE: COMPLETE THEMING PERFECTION
4051
4052### �� Major Milestone: Version 5.0
4053
4054This is a major release representing the completion of comprehensive theming across the entire calendar plugin. Every visual element has been carefully themed for consistency and beauty.
4055
4056### Complete Feature Set
4057
4058**5 Beautiful Themes**:
4059- �� Matrix Edition (Green with glow)
4060- �� Purple Dream (Elegant purple)
4061- �� Professional Blue (Clean and modern)
4062- �� Pink Bling (Maximum sparkle)
4063- �� Wiki Default (Auto-adapts to your DokuWiki theme)
4064
4065**100% Theme Coverage**:
4066- ✅ Calendar grid and cells
4067- ✅ Event boxes and borders
4068- ✅ Sidebar widget
4069- ✅ Event list panel
4070- ✅ Search functionality
4071- ✅ Edit/Add dialogs (complete)
4072- ✅ Day popup dialogs
4073- ✅ Month picker
4074- ✅ All text (primary, dim, bright)
4075- ✅ All buttons
4076- ✅ All inputs and forms
4077- ✅ All checkboxes
4078- ✅ All borders
4079- ✅ All badges and labels
4080- ✅ Event highlight effects
4081
4082**Perfect Visual Consistency**:
4083- No white pixels anywhere
4084- No unthemed elements
4085- No default colors
4086- Complete visual unity
4087
4088### Major Improvements in v5.0
4089
40901. **Complete Dialog Theming** (v4.8.5-4.8.7)
4091   - Edit event dialog fully themed
4092   - Day popup dialog fully themed
4093   - All form inputs themed
4094   - All checkboxes themed
4095   - All buttons themed
4096
40972. **Event Box Border Perfection** (v4.8.6)
4098   - All 4 borders themed (top, right, bottom, left)
4099   - Sidebar event dividers themed
4100   - Past Events toggle border themed
4101
41023. **Checkbox Field Borders** (v4.9.0)
4103   - Repeating Event section border themed
4104   - Task checkbox section border themed
4105
41064. **Wiki Default Theme** (v4.10.0)
4107   - New 5th theme
4108   - Uses DokuWiki CSS variables
4109   - Auto-adapts to any wiki template
4110   - Perfect for seamless integration
4111
41125. **Clean Text Appearance** (v4.11.0)
4113   - Removed text glow from Matrix
4114   - Removed text glow from Purple
4115   - Removed text glow from Professional
4116   - Removed text glow from Wiki Default
4117   - Kept text glow on Pink Bling only
4118
41196. **Event Highlight Effects** (v4.12.0-4.12.1)
4120   - Theme-aware highlight glow
4121   - Click event bar → event glows
4122   - 3-second themed glow effect
4123   - Smooth animations
4124
4125### See RELEASE_NOTES.md for Complete Details
4126
4127For a comprehensive overview of all features, themes, and improvements, see the new **RELEASE_NOTES.md** file included in this release.
4128
4129## Version 4.12.1 (2026-02-08) - FIX EVENT HIGHLIGHT FUNCTION
4130
4131### �� Fixed: Event Highlight Now Working
4132- **Fixed:** Used setProperty() to properly apply !important styles
4133- **Added:** Console logging for debugging
4134- **Fixed:** Proper style application with important flag
4135- **Result:** Highlight glow now works correctly!
4136
4137### Technical Fix
4138
4139**Before (not working)**:
4140```javascript
4141eventItem.style.background = color + ' !important'; // Doesn't work
4142```
4143
4144**After (working)**:
4145```javascript
4146eventItem.style.setProperty('background', color, 'important'); // Works!
4147```
4148
4149### Added Debug Logging
4150
4151Console now shows:
4152- "Highlighting event: [calId] [eventId] [date]"
4153- "Found event item: [element]"
4154- "Theme: [theme name]"
4155- "Highlight colors: [bg] [shadow]"
4156- "Applied highlight styles"
4157- "Removing highlight" (after 3 seconds)
4158
4159### Now Working
4160
4161Click any event bar → Event glows with theme colors ✓
4162
4163## Version 4.12.0 (2026-02-08) - THEME-AWARE EVENT HIGHLIGHT GLOW
4164
4165### ✨ Enhanced: Event Click Highlight Now Theme-Aware
4166- **Fixed:** Restored event highlight glow when clicking calendar bars
4167- **Improved:** Highlight now matches each theme's colors
4168- **Added:** Stronger glow effect for better visibility
4169- **Duration:** 3 seconds with smooth fade
4170- **Result:** Beautiful themed highlights for all themes!
4171
4172### How It Works
4173
4174When you click an event bar in the calendar, the corresponding event in the event list now highlights with a themed glow:
4175
4176**Matrix Theme**:
4177```javascript
4178Background: Darker green (#1a3d1a)
4179Glow: Double green glow (0 0 20px + 0 0 40px)
4180Color: rgba(0, 204, 7, 0.8)
4181```
4182
4183**Purple Theme**:
4184```javascript
4185Background: Darker purple (#3d2b4d)
4186Glow: Double purple glow
4187Color: rgba(155, 89, 182, 0.8)
4188```
4189
4190**Professional Theme**:
4191```javascript
4192Background: Light blue (#e3f2fd)
4193Glow: Single blue glow
4194Color: rgba(74, 144, 226, 0.4)
4195```
4196
4197**Pink Theme**:
4198```javascript
4199Background: Darker pink (#3d2030)
4200Glow: Double pink glow ✨��
4201Color: rgba(255, 20, 147, 0.8)
4202```
4203
4204**Wiki Theme**:
4205```javascript
4206Background: var(--__background_neu__)
4207Glow: Blue glow (adapts to wiki)
4208Color: rgba(43, 115, 183, 0.4)
4209```
4210
4211### Visual Examples
4212
4213**Matrix - Click Event**:
4214```
4215Calendar:
4216┌─────────────┐
4217│ 2:00 PM │ ← Click this bar
4218└─────────────┘
4219
4220Event List:
4221╔═════════════════════╗
4222║ Team Meeting        ║ ← GLOWS GREEN
4223║ 2:00 PM             ║    for 3 seconds
4224╚═════════════════════╝
4225   ↑↑↑ Strong green glow ↑↑↑
4226```
4227
4228**Purple - Click Event**:
4229```
4230Calendar:
4231┌─────────────┐
4232│ 4:00 PM │ ← Click
4233└─────────────┘
4234
4235Event List:
4236╔═════════════════════╗
4237║ Code Review         ║ ← GLOWS PURPLE
4238║ 4:00 PM             ║    for 3 seconds
4239╚═════════════════════╝
4240   ↑↑↑ Strong purple glow ↑↑↑
4241```
4242
4243**Pink - Click Event**:
4244```
4245Calendar:
4246┌─────────────┐
4247│ 1:00 PM │ ← Click
4248└─────────────┘
4249
4250Event List:
4251╔═════════════════════╗
4252║ Lunch Date ��       ║ ← GLOWS PINK
4253║ 1:00 PM ✨          ║    for 3 seconds
4254╚═════════════════════╝
4255   ↑↑↑ MAXIMUM SPARKLE ↑↑↑
4256```
4257
4258### Glow Specifications
4259
4260**Matrix**:
4261- Background: Dark green
4262- Shadow: `0 0 20px rgba(0, 204, 7, 0.8)`
4263- Outer glow: `0 0 40px rgba(0, 204, 7, 0.4)`
4264- Effect: Strong green pulse
4265
4266**Purple**:
4267- Background: Dark purple
4268- Shadow: `0 0 20px rgba(155, 89, 182, 0.8)`
4269- Outer glow: `0 0 40px rgba(155, 89, 182, 0.4)`
4270- Effect: Strong purple pulse
4271
4272**Professional**:
4273- Background: Light blue
4274- Shadow: `0 0 20px rgba(74, 144, 226, 0.4)`
4275- Effect: Subtle blue glow
4276
4277**Pink**:
4278- Background: Dark pink
4279- Shadow: `0 0 20px rgba(255, 20, 147, 0.8)`
4280- Outer glow: `0 0 40px rgba(255, 20, 147, 0.4)`
4281- Effect: MAXIMUM SPARKLE ✨��
4282
4283**Wiki**:
4284- Background: Theme neutral color
4285- Shadow: `0 0 20px rgba(43, 115, 183, 0.4)`
4286- Effect: Adapts to wiki theme
4287
4288### User Experience
4289
4290**Click event bar** → Event highlights with themed glow
4291**Auto-scroll** → Event scrolls into view smoothly
4292**3 second glow** → Fade out after 3 seconds
4293**Smooth transition** → 0.3s ease-in-out
4294
4295### Perfect for Finding Events
4296
4297**Large event lists**: Quickly locate the clicked event ✓
4298**Visual feedback**: Know which event you clicked ✓
4299**Theme consistency**: Matches your chosen theme ✓
4300**Smooth animation**: Professional appearance ✓
4301
4302### All Themes Covered
4303
4304- ✅ Matrix: Green glow
4305- ✅ Purple: Purple glow
4306- ✅ Professional: Blue glow
4307- ✅ Pink: Maximum pink sparkle
4308- ✅ Wiki: Adaptive glow
4309
4310**Click any event bar and watch it glow!** ✨
4311
4312## Version 4.11.0 (2026-02-08) - REMOVE TEXT GLOW FROM NON-PINK THEMES
4313
4314### �� Changed: Text Glow Now Pink-Only
4315- **Removed:** Text shadow/glow from Matrix theme
4316- **Removed:** Text shadow/glow from Purple theme
4317- **Removed:** Text shadow/glow from Professional theme (already had none)
4318- **Removed:** Text shadow/glow from Wiki Default theme
4319- **Kept:** Text shadow/glow ONLY on Pink Bling theme
4320- **Result:** Cleaner look for Matrix, Purple, and Wiki themes!
4321
4322### All Changes
4323
4324**Before (Matrix, Purple)**:
4325```css
4326text-shadow: 0 0 2px $text_color; /* Glow effect */
4327```
4328
4329**After (Matrix, Purple, Professional, Wiki)**:
4330```css
4331text-shadow: none; /* Clean, no glow */
4332```
4333
4334**Pink Bling (unchanged)**:
4335```css
4336text-shadow: 0 0 2px $text_color; /* Still has glow ✨ */
4337```
4338
4339### Text Shadow Removed From
4340
4341**Sidebar day numbers**: No glow ✓
4342**Event titles**: No glow ✓
4343**Event dates**: No glow ✓
4344**Add Event button**: No glow ✓
4345**Day popup events**: No glow ✓
4346
4347### Before vs After
4348
4349**BEFORE (Matrix)**:
4350```
4351Event Title ✨ ← Glowing green text
43522:00 PM ✨     ← Glowing text
4353```
4354
4355**AFTER (Matrix)**:
4356```
4357Event Title    ← Clean green text
43582:00 PM        ← Clean text
4359```
4360
4361**Pink Bling (Still Glows)**:
4362```
4363Event Title ✨�� ← Still glowing!
43642:00 PM ✨     ← Maximum sparkle!
4365```
4366
4367### Theme Appearances
4368
4369**�� Matrix Edition**:
4370- Clean green text
4371- No glow effects
4372- Professional appearance
4373- Still has border glow
4374
4375**�� Purple Dream**:
4376- Clean purple text
4377- No glow effects
4378- Elegant appearance
4379- Still has border glow
4380
4381**�� Professional Blue**:
4382- Clean text (unchanged)
4383- No glow effects
4384- Modern appearance
4385
4386**�� Pink Bling**:
4387- Glowing pink text ✨
4388- Maximum glow effects ��
4389- Sparkle everywhere!
4390- All the bling!
4391
4392**�� Wiki Default**:
4393- Clean text
4394- No glow effects
4395- Matches wiki theme
4396
4397### Glow Effects Remaining
4398
4399**Border/box glow**: Still present on all themes ✓
4400**Pink text glow**: Only on Pink Bling ✓
4401**Shadow effects**: Still on buttons/boxes4402
4403**Only TEXT glow removed from non-pink themes!**
4404
4405### Result
4406
4407**Cleaner, more professional look** for:
4408- Matrix ✓
4409- Purple ✓
4410- Professional ✓
4411- Wiki Default ✓
4412
4413**Maximum sparkle** for:
4414- Pink Bling ✨��✓
4415
4416**Best of both worlds!** ��
4417
4418## Version 4.10.0 (2026-02-08) - NEW WIKI DEFAULT THEME
4419
4420### �� New: Wiki Default Theme
4421- **Added:** 5th theme that automatically matches your DokuWiki template
4422- **Uses:** CSS variables from your wiki theme
4423- **Adapts:** Automatically works with light and dark themes
4424- **Perfect:** Seamless integration with any DokuWiki template
4425
4426### How It Works
4427
4428**Wiki theme uses DokuWiki CSS variables**:
4429```css
4430bg: var(--__background_site__, #f5f5f5)
4431border: var(--__border__, #ccc)
4432text_primary: var(--__text__, #333)
4433text_bright: var(--__link__, #2b73b7)
4434text_dim: var(--__text_neu__, #666)
4435cell_bg: var(--__background__, #fff)
4436grid_border: var(--__border__, #ccc)
4437```
4438
4439**With fallbacks for older DokuWiki versions**:
4440- If CSS variables exist → Use them ✓
4441- If not available → Use fallback values ✓
4442
4443### All 5 Themes
4444
4445**1. �� Matrix Edition** (Default)
4446- Dark green with neon glow
4447- Matrix-style effects
4448- Original theme
4449
4450**2. �� Purple Dream**
4451- Rich purple with violet accents
4452- Elegant and sophisticated
4453- Soft glow effects
4454
4455**3. �� Professional Blue**
4456- Clean blue and grey
4457- Modern professional
4458- No glow effects
4459
4460**4. �� Pink Bling**
4461- Glamorous hot pink
4462- Maximum sparkle ✨
4463- Hearts and diamonds
4464
4465**5. �� Wiki Default** ← NEW!
4466- Matches your wiki template
4467- Auto-adapts to light/dark
4468- Perfect integration
4469
4470### Examples
4471
4472**Light Wiki Template**:
4473```
4474Wiki Default theme shows:
4475- Light backgrounds (#f5f5f5)
4476- Dark text (#333)
4477- Light inputs (#fff)
4478- Gray borders (#ccc)
4479
4480Matches perfectly! ✓
4481```
4482
4483**Dark Wiki Template**:
4484```
4485Wiki Default theme shows:
4486- Dark backgrounds (from template)
4487- Light text (from template)
4488- Dark inputs (from template)
4489- Dark borders (from template)
4490
4491Matches perfectly! ✓
4492```
4493
4494**Bootstrap Template**:
4495```
4496Uses Bootstrap's colors
4497Matches perfectly! ✓
4498```
4499
4500**Material Template**:
4501```
4502Uses Material's colors
4503Matches perfectly! ✓
4504```
4505
4506### CSS Variables Used
4507
4508**DokuWiki provides**:
4509- `--__background_site__`: Page background
4510- `--__background_alt__`: Section backgrounds
4511- `--__background__`: Content backgrounds
4512- `--__text__`: Primary text color
4513- `--__link__`: Link color
4514- `--__text_neu__`: Dimmed text
4515- `--__border__`: Border color
4516- `--__background_neu__`: Neutral background
4517
4518**All with fallbacks**:
4519```css
4520var(--__background_site__, #f5f5f5)
4521/* Falls back to light gray if variable doesn't exist */
4522```
4523
4524### Perfect for Every Template
4525
4526**Custom templates**: Automatically adapts ✓
4527**Light themes**: Perfect match ✓
4528**Dark themes**: Perfect match ✓
4529**Any DokuWiki version**: Works with fallbacks ✓
4530
4531### Complete Theme Collection
4532
4533Now with **5 gorgeous themes**:
4534- 3 dark themes (Matrix, Purple, Pink)
4535- 1 light theme (Professional)
4536- 1 adaptive theme (Wiki Default) ← NEW!
4537
4538**Something for everyone!** ��
4539
4540## Version 4.9.0 (2026-02-08) - FIX CHECKBOX FIELD BORDERS
4541
4542### �� Fixed: Checkbox Field Borders Themed
4543- **Fixed:** Added border-color to checkbox field divs
4544- **Fixed:** Repeating Event section border
4545- **Fixed:** Task checkbox section border
4546- **Result:** No white borders around checkboxes!
4547
4548### Changes
4549
4550**Checkbox Field Border Styling**:
4551
4552**Before**:
4553```html
4554<div class="form-field-checkbox"
4555     style="background: $bg !important;">
4556<!-- Border shows white ✗ -->
4557```
4558
4559**After**:
4560```php
4561<div class="form-field-checkbox"
4562     style="background: $bg !important;
4563            border-color: $grid_border !important;">
4564<!-- Border themed ✓ -->
4565```
4566
4567### Before vs After
4568
4569**BEFORE (v4.8.8)**:
4570```
4571Edit Dialog:
4572┌──────────────────┐
4573│ ☑ Repeating     ║│ ← White border ✗
4574└──────────────────┘
4575┌──────────────────┐
4576│ ☑ Task checkbox ║│ ← White border ✗
4577└──────────────────┘
4578```
4579
4580**AFTER (v4.9.0)**:
4581```
4582Matrix Edit Dialog:
4583┌──────────────────┐
4584│ ☑ Repeating      │ ← Green border ✓
4585└──────────────────┘
4586┌──────────────────┐
4587│ ☑ Task checkbox  │ ← Green border ✓
4588└──────────────────┘
4589```
4590
4591### ABSOLUTE PERFECTION ACHIEVED
4592
4593**Every element themed**:
4594- ✅ All inputs
4595- ✅ All labels
4596- ✅ All sections
4597- ✅ **Checkbox field borders** ← v4.9.0!
4598- ✅ All buttons
4599- ✅ All checkboxes
4600- ✅ No white anywhere
4601
4602**100% COMPLETE!** ��✨
4603
4604## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
4605
4606### �� Fixed: Checkbox Field Borders Themed
4607- **Fixed:** Added border-color to checkbox field divs
4608- **Fixed:** Repeating Event section border
4609- **Fixed:** Task checkbox section border
4610- **Result:** No white borders around checkboxes!
4611
4612### �� Fixed: Admin Sections Respect Wiki Theme
4613- **Fixed:** All admin backgrounds use CSS variables
4614- **Fixed:** Text colors use wiki text color
4615- **Fixed:** Borders use wiki border color
4616- **Result:** Admin matches wiki theme perfectly!
4617
4618### All Changes
4619
4620**1. Checkbox Field Border Styling**:
4621
4622**Before**:
4623```html
4624<div class="form-field-checkbox"
4625     style="background: $bg !important;">
4626<!-- Border shows white ✗ -->
4627```
4628
4629**After**:
4630```php
4631<div class="form-field-checkbox"
4632     style="background: $bg !important;
4633            border-color: $grid_border !important;">
4634<!-- Border themed ✓ -->
4635```
4636
4637**2. Admin CSS Variables**:
4638
4639**Added CSS variables for wiki theme compatibility**:
4640```css
4641.calendar-admin-wrapper {
4642    background: var(--__background_site__, #f5f5f5);
4643    color: var(--__text__, #333);
4644}
4645.calendar-admin-section {
4646    background: var(--__background_alt__, #fafafa);
4647}
4648.calendar-admin-input {
4649    background: var(--__background__, #fff);
4650    color: var(--__text__, #333);
4651}
4652```
4653
4654**Replaced hardcoded colors**:
4655```php
4656// Before:
4657background: #f9f9f9
4658background: white
4659color: #333
4660border: 1px solid #ddd
4661
4662// After:
4663background: var(--__background_alt__, #f9f9f9)
4664background: var(--__background__, #fff)
4665color: var(--__text__, #333)
4666border: 1px solid var(--__border__, #ddd)
4667```
4668
4669### Before vs After
4670
4671**BEFORE (v4.8.8)**:
4672```
4673Edit Dialog:
4674┌──────────────────┐
4675│ ☑ Repeating     ║│ ← White border ✗
4676└──────────────────┘
4677┌──────────────────┐
4678│ ☑ Task checkbox ║│ ← White border ✗
4679└──────────────────┘
4680
4681Admin Page (Dark Wiki Theme):
4682┌──────────────────┐
4683│ Light sections  │ ← White boxes ✗
4684│ Light inputs    │ ← Doesn't match ✗
4685└──────────────────┘
4686```
4687
4688**AFTER (v4.8.9)**:
4689```
4690Matrix Edit Dialog:
4691┌──────────────────┐
4692│ ☑ Repeating      │ ← Green border ✓
4693└──────────────────┘
4694┌──────────────────┐
4695│ ☑ Task checkbox  │ ← Green border ✓
4696└──────────────────┘
4697
4698Admin (Dark Wiki Theme):
4699┌──────────────────┐
4700│ Dark sections   │ ← Matches wiki ✓
4701│ Dark inputs     │ ← Perfect match ✓
4702└──────────────────┘
4703```
4704
4705### Admin Theme Examples
4706
4707**Light Wiki Theme**:
4708```
4709Admin page backgrounds: Light
4710Section boxes: Light gray
4711Inputs: White
4712Borders: Gray
4713Text: Dark
4714
4715Perfect match! ✓
4716```
4717
4718**Dark Wiki Theme**:
4719```
4720Admin page backgrounds: Dark
4721Section boxes: Darker gray
4722Inputs: Dark
4723Borders: Dark gray
4724Text: Light
4725
4726Perfect match! ✓
4727```
4728
4729**DokuWiki Default**:
4730```
4731Uses wiki's CSS variables
4732Automatically adapts
4733Always matches! ✓
4734```
4735
4736### Complete Coverage
4737
4738**Edit Dialog**:
4739- ✅ All inputs themed
4740- ✅ All labels themed
4741- ✅ All sections themed
4742- ✅ **Checkbox borders** ← v4.8.9!
4743- ✅ All buttons themed
4744- ✅ No white anywhere
4745
4746**Admin Interface**:
4747- ✅ **Tab navigation** ← v4.8.9!
4748- ✅ **Section boxes** ← v4.8.9!
4749- ✅ **Input fields** ← v4.8.9!
4750- ✅ **Text colors** ← v4.8.9!
4751- ✅ **Borders** ← v4.8.9!
4752- ✅ All tabs (Manage, Update, Outlook, Themes)
4753
4754### CSS Variables Used
4755
4756**DokuWiki provides these**:
4757- `--__background_site__`: Page background
4758- `--__background_alt__`: Alternate background
4759- `--__background__`: Primary background (inputs)
4760- `--__text__`: Text color
4761- `--__border__`: Border color
4762
4763**Fallbacks provided for older DokuWiki**:
4764```css
4765var(--__background_site__, #f5f5f5)
4766var(--__background_alt__, #fafafa)
4767var(--__background__, #fff)
4768var(--__text__, #333)
4769var(--__border__, #ddd)
4770```
4771
4772### Perfect Adaptation
4773
4774**Admin now adapts to ANY wiki theme**:
4775- Light themes → Light admin ✓
4776- Dark themes → Dark admin ✓
4777- Custom themes → Matches perfectly ✓
4778- No hardcoded colors ✓
4779
4780**Calendar themes still work**:
4781- Matrix, Purple, Professional, Pink ✓
4782- Independent from wiki theme ✓
4783- Admin respects wiki ✓
4784- Calendar respects calendar theme ✓
4785
4786### FINAL PERFECTION
4787
4788**Frontend (Calendar)**:
4789- Complete theming ✓
4790- 4 beautiful themes ✓
4791- Every pixel themed ✓
4792
4793**Backend (Admin)**:
4794- Respects wiki theme ✓
4795- Works with any theme ✓
4796- Perfect compatibility ✓
4797
4798**ABSOLUTELY EVERYTHING THEMED!** ����✨
4799
4800## Version 4.8.8 (2026-02-08) - FINAL FIXES: CHECKBOXES, BORDERS, BACKGROUNDS
4801
4802### �� Fixed: Task Checkboxes Now Fully Themed
4803- **Fixed:** Added background-color and border inline
4804- **Fixed:** Both PHP and JavaScript versions
4805- **Result:** No white checkboxes!
4806
4807### �� Fixed: Past Events Toggle Border
4808- **Fixed:** Added !important to border styling
4809- **Fixed:** Explicit top and bottom borders
4810- **Result:** No white line under toggle!
4811
4812### �� Fixed: Form Field Section Backgrounds
4813- **Fixed:** All form-field and form-row-group backgrounds
4814- **Fixed:** Every section in edit dialog
4815- **Result:** No white sections anywhere!
4816
4817### All Changes
4818
4819**1. Task Checkbox Styling**:
4820
4821**Before**:
4822```php
4823style="accent-color: $border !important;"
4824<!-- Only accent, background still white ✗ -->
4825```
4826
4827**After**:
4828```php
4829style="accent-color: $border !important;
4830       background-color: $cell_bg !important;
4831       border: 2px solid $grid_border !important;"
4832<!-- Full theming ✓ -->
4833```
4834
4835**2. Past Events Toggle Border**:
4836
4837**Before**:
4838```php
4839style="border-color: $grid_border;"
4840<!-- No !important, CSS overrides ✗ -->
4841```
4842
4843**After**:
4844```php
4845style="border-color: $grid_border !important;
4846       border-top: 1px solid $grid_border !important;
4847       border-bottom: 1px solid $grid_border !important;"
4848<!-- Cannot be overridden ✓ -->
4849```
4850
4851**3. Form Field Backgrounds**:
4852
4853**Before**:
4854```html
4855<div class="form-field">
4856<div class="form-row-group">
4857<!-- No background, shows white ✗ -->
4858```
4859
4860**After**:
4861```php
4862<div class="form-field" style="background: $bg !important;">
4863<div class="form-row-group" style="background: $bg !important;">
4864<!-- Fully themed ✓ -->
4865```
4866
4867### Before vs After
4868
4869**BEFORE (v4.8.7)**:
4870```
4871Event:
4872□ Task checkbox  ← White checkbox ✗
4873
4874Past Events
4875▶ Past Events (3) ← White line below ✗
4876─────────────────
4877
4878Edit Dialog:
4879┌──────────────┐
4880│ Form fields  │ ← White sections ✗
4881└──────────────┘
4882```
4883
4884**AFTER (v4.8.8)**:
4885```
4886Matrix Event:
4887☑ Task checkbox  ← Green checkbox ✓
4888
4889Past Events
4890▶ Past Events (3) ← Green border ✓
4891─────────────────
4892
4893Matrix Edit Dialog:
4894┌──────────────┐
4895│ Form fields  │ ← Dark green ✓
4896└──────────────┘
4897```
4898
4899### Complete Examples
4900
4901**Matrix Theme**:
4902```
4903Task Checkbox:
4904☑ Checked   → Green checkmark, green bg
4905☐ Unchecked → Green border, dark green bg ✓
4906
4907Past Events Toggle:
4908▶ Past Events (3)
4909─────────────────── Green border ✓
4910
4911Edit Dialog:
4912All sections dark green ✓
4913No white anywhere ✓
4914```
4915
4916**Purple Theme**:
4917```
4918Task Checkbox:
4919☑ Checked   → Purple checkmark, purple bg
4920☐ Unchecked → Purple border, dark purple bg ✓
4921
4922Past Events Toggle:
4923▶ Past Events (3)
4924─────────────────── Purple border ✓
4925
4926Edit Dialog:
4927All sections dark purple ✓
4928```
4929
4930**Professional Theme**:
4931```
4932Task Checkbox:
4933☑ Checked   → Blue checkmark, white bg
4934☐ Unchecked → Gray border, white bg ✓
4935
4936Past Events Toggle:
4937▶ Past Events (3)
4938─────────────────── Gray border ✓
4939
4940Edit Dialog:
4941All sections light ✓
4942```
4943
4944**Pink Theme**:
4945```
4946Task Checkbox:
4947☑ Checked   → Pink checkmark, pink bg ✨
4948☐ Unchecked → Pink border, dark pink bg ✓
4949
4950Past Events Toggle:
4951▶ Past Events (3)
4952─────────────────── Pink border ��
4953
4954Edit Dialog:
4955All sections dark pink ✓
4956```
4957
4958### Checkbox Visual
4959
4960**Matrix - Unchecked**:
4961```
4962┌─────┐
4963│     │ ← Dark green background
4964│     │   Green border
4965└─────┘
4966```
4967
4968**Matrix - Checked**:
4969```
4970┌─────┐
4971│ ✓   │ ← Dark green background
4972│     │   Green checkmark
4973└─────┘
4974```
4975
4976### Past Events Border
4977
4978**Before**:
4979```
4980▶ Past Events (3)
4981─────────────────── White line ✗
4982```
4983
4984**After**:
4985```
4986▶ Past Events (3)
4987─────────────────── Green line ✓ (Matrix)
4988                    Purple line ✓ (Purple)
4989                    Gray line ✓ (Professional)
4990                    Pink line ✓ (Pink)
4991```
4992
4993### Form Field Coverage
4994
4995**All sections themed**:
4996- ✅ Title field
4997- ✅ Namespace field
4998- ✅ Description field
4999- ✅ **Date row** ← v4.8.8!
5000- ✅ **Checkbox sections** ← v4.8.8!
5001- ✅ **Recurring options** ← v4.8.8!
5002- ✅ **Time row** ← v4.8.8!
5003- ✅ **Color row** ← v4.8.8!
5004- ✅ Button footer
5005
5006**Every div has background!** ✓
5007
5008### ABSOLUTE PERFECTION
5009
5010**Not a single white pixel**:
5011- ✅ No white checkboxes
5012- ✅ No white borders
5013- ✅ No white backgrounds
5014- ✅ No white sections
5015- ✅ No white lines
5016- ✅ No white anything
5017
5018**100% PERFECT THEMING!** ����✨
5019
5020## Version 4.8.7 (2026-02-08) - COMPLETE DIALOG & POPUP THEMING
5021
5022### �� Fixed: Checkbox Section Backgrounds Themed
5023- **Fixed:** Repeating Event section background
5024- **Fixed:** Task checkbox section background
5025- **Result:** No white backgrounds in dialog!
5026
5027### �� Fixed: Unchecked Task Checkboxes Themed
5028- **Fixed:** Added CSS for checkbox backgrounds
5029- **Fixed:** Unchecked boxes show theme colors
5030- **Result:** No white checkboxes!
5031
5032### �� Fixed: Day Popup Dialog Fully Themed
5033- **Fixed:** Popup container, header, body themed
5034- **Fixed:** Event items in popup themed
5035- **Fixed:** Add Event button themed
5036- **Fixed:** Footer section themed
5037- **Result:** Perfect popup theming!
5038
5039### All Changes
5040
5041**1. Checkbox Section Backgrounds**:
5042
5043**Before**:
5044```html
5045<div class="form-field-checkbox">
5046<!-- White background ✗ -->
5047```
5048
5049**After**:
5050```php
5051<div class="form-field-checkbox"
5052     style="background: $bg !important;">
5053<!-- Themed ✓ -->
5054```
5055
5056**2. Checkbox Background CSS**:
5057
5058**Added to style block**:
5059```css
5060.task-checkbox {
5061    background-color: $cell_bg !important;
5062    border: 2px solid $grid_border !important;
5063}
5064```
5065
5066**3. Day Popup Theming**:
5067
5068**Container**:
5069```javascript
5070style="background: $bg !important;
5071       border: 2px solid $border !important;
5072       box-shadow: 0 0 20px $shadow !important;"
5073```
5074
5075**Header**:
5076```javascript
5077style="background: $header_bg !important;
5078       color: $text_primary !important;
5079       border-bottom: 1px solid $border !important;"
5080```
5081
5082**Footer**:
5083```javascript
5084style="background: $bg !important;
5085       border-top: 1px solid $grid_border !important;"
5086```
5087
5088**Add Event Button**:
5089```javascript
5090style="background: $border !important;
5091       color: $bg !important;
5092       border-color: $border !important;"
5093```
5094
5095**Event Items**:
5096```javascript
5097style="background: $cell_bg !important;
5098       border: 1px solid $grid_border !important;"
5099```
5100
5101### Before vs After
5102
5103**BEFORE (v4.8.6)**:
5104```
5105Edit Dialog:
5106┌──────────────────┐
5107│ ☑ Repeating Event│ ← White background ✗
5108├──────────────────┤
5109│ ☑ Task checkbox  │ ← White background ✗
5110└──────────────────┘
5111
5112Day Popup:
5113┌──────────────────┐
5114│ Monday, Feb 8    │ ← White ✗
5115├──────────────────┤
5116│ Team Meeting     │ ← White ✗
5117│ 2:00 PM          │
5118├──────────────────┤
5119│ [+ Add Event]    │ ← White ✗
5120└──────────────────┘
5121
5122Task checkbox: ☐ ← White ✗
5123```
5124
5125**AFTER (v4.8.7)**:
5126```
5127Edit Dialog (Matrix):
5128┌──────────────────┐
5129│ ☑ Repeating Event│ ← Dark green ✓
5130├──────────────────┤
5131│ ☑ Task checkbox  │ ← Dark green ✓
5132└──────────────────┘
5133
5134Day Popup (Matrix):
5135┌──────────────────┐
5136│ Monday, Feb 8    │ ← Dark green ✓
5137├──────────────────┤
5138│ Team Meeting     │ ← Dark green ✓
5139│ 2:00 PM          │
5140├──────────────────┤
5141│ [+ Add Event]    │ ← Green button ✓
5142└──────────────────┘
5143
5144Task checkbox: ☑ ← Green ✓
5145```
5146
5147### Complete Examples
5148
5149**Matrix Dialog**:
5150```
5151┌──────────────────────────┐
5152│ ✏️ Edit Event            │
5153├──────────────────────────┤
5154│ �� Title: [_________]    │
5155│ �� Date: [__________]    │
5156│                          │
5157│ ☑ �� Repeating Event     │ ← Dark green bg
5158├──────────────────────────┤
5159│ ☑ �� Task checkbox       │ ← Dark green bg
5160├──────────────────────────┤
5161│ [Cancel] [�� Save]       │
5162└──────────────────────────┘
5163
5164All sections themed! ✓
5165```
5166
5167**Matrix Day Popup**:
5168```
5169┌──────────────────────────┐
5170│ Monday, February 8, 2026 │ ← Green header
5171├──────────────────────────┤
5172│ ┌──────────────────────┐ │
5173│ │ Team Meeting         │ │ ← Dark green
5174│ │ �� 2:00 PM           │ │
5175│ └──────────────────────┘ │
5176│ ┌──────────────────────┐ │
5177│ │ Code Review          │ │ ← Dark green
5178│ │ �� 4:00 PM           │ │
5179│ └──────────────────────┘ │
5180├──────────────────────────┤
5181│   [+ Add Event]          │ ← Green button
5182└──────────────────────────┘
5183```
5184
5185**Purple Day Popup**:
5186```
5187┌──────────────────────────┐
5188│ Monday, February 8, 2026 │ ← Purple header
5189├──────────────────────────┤
5190│ ┌──────────────────────┐ │
5191│ │ Team Meeting         │ │ ← Dark purple
5192│ │ �� 2:00 PM           │ │
5193│ └──────────────────────┘ │
5194├──────────────────────────┤
5195│   [+ Add Event]          │ ← Purple button
5196└──────────────────────────┘
5197```
5198
5199**Professional Day Popup**:
5200```
5201┌──────────────────────────┐
5202│ Monday, February 8, 2026 │ ← Light header
5203├──────────────────────────┤
5204│ ┌──────────────────────┐ │
5205│ │ Team Meeting         │ │ ← White
5206│ │ �� 2:00 PM           │ │
5207│ └──────────────────────┘ │
5208├──────────────────────────┤
5209│   [+ Add Event]          │ ← Blue button
5210└──────────────────────────┘
5211```
5212
5213**Pink Day Popup**:
5214```
5215┌──────────────────────────┐
5216│ Monday, February 8, 2026 │ ← Pink header ✨
5217├──────────────────────────┤
5218│ ┌──────────────────────┐ │
5219│ │ Team Meeting ��      │ │ ← Dark pink
5220│ │ �� 2:00 PM           │ │
5221│ └──────────────────────┘ │
5222├──────────────────────────┤
5223│   [+ Add Event]          │ ← Pink button
5224└──────────────────────────┘
5225```
5226
5227### Checkbox Theming
5228
5229**Unchecked boxes now themed**:
5230```
5231Matrix:
5232☐ → Dark green bg, green border ✓
5233
5234Purple:
5235☐ → Dark purple bg, purple border ✓
5236
5237Professional:
5238☐ → White bg, gray border ✓
5239
5240Pink:
5241☐ → Dark pink bg, pink border ✓
5242```
5243
5244### Complete Coverage
5245
5246**Edit Dialog - All Sections**:
5247- ✅ Header
5248- ✅ All inputs
5249- ✅ All labels
5250- ✅ **Checkbox sections** ← v4.8.7!
5251- ✅ Recurring options
5252- ✅ Button footer
5253- ✅ All checkboxes (checked & unchecked)
5254
5255**Day Popup - All Elements**:
5256- ✅ **Popup container** ← v4.8.7!
5257- ✅ **Header** ← v4.8.7!
5258- ✅ **Body** ← v4.8.7!
5259- ✅ **Event items** ← v4.8.7!
5260- ✅ **Namespace badges** ← v4.8.7!
5261- ✅ **Footer** ← v4.8.7!
5262- ✅ **Add Event button** ← v4.8.7!
5263- ✅ **No events message** ← v4.8.7!
5264
5265**Absolutely every dialog element themed!** ��✨
5266
5267### Perfect Theming Achievement
5268
5269**Every UI component in entire plugin**:
5270- ✅ Calendar grid
5271- ✅ Sidebar widget
5272- ✅ Event list
5273- ✅ Search bar
5274- ✅ Event boxes
5275- ✅ Edit dialog (complete)
5276- ✅ **Day popup** ← v4.8.7!
5277- ✅ Month picker
5278- ✅ All text
5279- ✅ All buttons
5280- ✅ All inputs
5281- ✅ **All checkboxes** ← v4.8.7!
5282- ✅ All borders
5283- ✅ All badges
5284- ✅ All backgrounds
5285
5286**NO WHITE ANYWHERE!** ��
5287
5288**100% COMPLETE THEMING ACHIEVED!** ��✨��
5289
5290## Version 4.8.6 (2026-02-08) - FIX DIALOG SECTIONS & EVENT BOX BORDERS
5291
5292### �� Fixed: Dialog Checkbox Sections Themed
5293- **Fixed:** Recurring options section background themed
5294- **Fixed:** Section has themed border accent
5295- **Result:** No white sections in dialog!
5296
5297### �� Fixed: Dialog Button Section Themed
5298- **Fixed:** Button area background themed
5299- **Fixed:** Top border separator themed
5300- **Result:** Complete dialog theming!
5301
5302### �� Fixed: Event Box Borders Themed
5303- **Fixed:** Top, right, bottom borders now themed
5304- **Fixed:** Left border remains event color
5305- **Result:** Perfect event boxes!
5306
5307### All Changes
5308
5309**1. Recurring Options Section**:
5310
5311**Before**:
5312```html
5313<div class="recurring-options" style="display:none;">
5314<!-- White background ✗ -->
5315```
5316
5317**After**:
5318```php
5319<div class="recurring-options"
5320     style="display:none;
5321            background: $bg !important;
5322            padding: 8px;
5323            border-left: 2px solid $border;
5324            margin-left: 4px;">
5325<!-- Themed with accent border ✓ -->
5326```
5327
5328**2. Dialog Actions Section**:
5329
5330**Before**:
5331```html
5332<div class="dialog-actions-sleek">
5333<!-- White background ✗ -->
5334```
5335
5336**After**:
5337```php
5338<div class="dialog-actions-sleek"
5339     style="background: $bg !important;
5340            border-top: 1px solid $grid_border !important;">
5341<!-- Themed with separator ✓ -->
5342```
5343
5344**3. Event Box Borders**:
5345
5346**Before**:
5347```php
5348border-left-color: $event_color;
5349<!-- Only left border colored ✗ -->
5350```
5351
5352**After**:
5353```php
5354border-left-color: $event_color;
5355border-top: 1px solid $grid_border !important;
5356border-right: 1px solid $grid_border !important;
5357border-bottom: 1px solid $grid_border !important;
5358<!-- All borders themed! ✓ -->
5359```
5360
5361### Before vs After
5362
5363**BEFORE (v4.8.5)**:
5364```
5365Dialog:
5366┌────────────────┐
5367│ ☑ Repeating    │
5368├────────────────┤ ← White section ✗
5369│ Repeat: Daily  │
5370│ Until: [____]  │
5371├────────────────┤
5372│ [Cancel] [Save]│ ← White footer ✗
5373└────────────────┘
5374
5375Event Box:
5376┌────────────┐
5377│Team Meeting│ ← White borders ✗
5378│2:00 PM     │
5379└────────────┘
5380```
5381
5382**AFTER (v4.8.6)**:
5383```
5384Matrix Dialog:
5385┌────────────────┐
5386│ ☑ Repeating    │
5387├────────────────┤ ← Dark green ✓
5388│ Repeat: Daily  │ Green accent border
5389│ Until: [____]  │
5390├────────────────┤
5391│ [Cancel] [Save]│ ← Dark green ✓
5392└────────────────┘
5393
5394Matrix Event Box:
5395┌────────────┐
5396│Team Meeting│ ← Green borders ✓
5397│2:00 PM     │
5398└────────────┘
5399```
5400
5401### Dialog Section Examples
5402
5403**Matrix Theme**:
5404```
5405┌──────────────────────────┐
5406│ ✏️ Edit Event            │
5407├──────────────────────────┤
5408│ ☑ �� Repeating Event     │
5409├║─────────────────────────┤ Green accent
5410│║ Repeat Every: Daily     │ Dark green bg
5411│║ Repeat Until: [_____]   │
5412└──────────────────────────┘
5413  [Cancel] [�� Save]       ← Dark green bg
5414──────────────────────────── Green border
5415```
5416
5417**Purple Theme**:
5418```
5419┌──────────────────────────┐
5420│ ☑ �� Repeating Event     │
5421├║─────────────────────────┤ Purple accent
5422│║ Repeat options...       │ Dark purple bg
5423└──────────────────────────┘
5424  [Cancel] [�� Save]       ← Dark purple bg
5425──────────────────────────── Purple border
5426```
5427
5428**Professional Theme**:
5429```
5430┌──────────────────────────┐
5431│ ☑ �� Repeating Event     │
5432├║─────────────────────────┤ Blue accent
5433│║ Repeat options...       │ Light bg
5434└──────────────────────────┘
5435  [Cancel] [�� Save]       ← Light bg
5436──────────────────────────── Gray border
5437```
5438
5439**Pink Theme**:
5440```
5441┌──────────────────────────┐
5442│ ☑ �� Repeating Event ✨  │
5443├║─────────────────────────┤ Pink accent
5444│║ Repeat options...       │ Dark pink bg ��
5445└──────────────────────────┘
5446  [Cancel] [�� Save]       ← Dark pink bg
5447──────────────────────────── Pink border
5448```
5449
5450### Event Box Border Visual
5451
5452**Before (v4.8.5)**:
5453```
5454Left border only:
5455█ Team Meeting
5456█ 2:00 PM
5457█ [Edit] [Delete]
5458
5459Only event color on left ✗
5460White on other 3 sides ✗
5461```
5462
5463**After (v4.8.6)**:
5464```
5465All borders themed:
5466┌─────────────┐
5467█Team Meeting │ ← Top: themed
5468█2:00 PM      │ ← Right: themed
5469█[Edit][Del]  │ ← Bottom: themed
5470└─────────────┘
5471
5472Left: Event color ✓
5473Other 3: Theme grid_border ✓
5474```
5475
5476### Matrix Event Box:
5477```
5478┌─────────────┐ Green border
5479│Team Meeting │
5480│2:00 PM      │
5481└─────────────┘ Green border
54825483Green left bar
5484```
5485
5486### Purple Event Box:
5487```
5488┌─────────────┐ Purple border
5489│Team Meeting │
5490│2:00 PM      │
5491└─────────────┘ Purple border
54925493Purple left bar
5494```
5495
5496### Professional Event Box:
5497```
5498┌─────────────┐ Gray border
5499│Team Meeting │
5500│2:00 PM      │
5501└─────────────┘ Gray border
55025503Event color left bar
5504```
5505
5506### Complete Dialog Coverage
5507
5508**All sections themed**:
5509- ✅ Dialog header
5510- ✅ Form inputs
5511- ✅ Checkbox labels
5512- ✅ **Recurring options** ← v4.8.6!
5513- ✅ **Button section** ← v4.8.6!
5514- ✅ All labels
5515- ✅ All buttons
5516
5517**No white sections!** ✓
5518
5519### Complete Event Box Coverage
5520
5521**All borders themed**:
5522- ✅ Left border (event color)
5523- ✅ **Top border** ← v4.8.6!
5524- ✅ **Right border** ← v4.8.6!
5525- ✅ **Bottom border** ← v4.8.6!
5526- ✅ Background
5527- ✅ Text
5528
5529**Perfect box outline!** ✓
5530
5531### Visual Perfection
5532
5533**Matrix theme event list**:
5534```
5535┌─────────────┐
5536│Team Meeting │ ← Green box
5537│2:00 PM      │
5538└─────────────┘
5539┌─────────────┐
5540│Code Review  │ ← Green box
5541│4:00 PM      │
5542└─────────────┘
5543
5544All borders green! ✓
5545```
5546
5547**ABSOLUTE PERFECT THEMING!** ��✨
5548
5549## Version 4.8.5 (2026-02-08) - THEME EVENT DIALOG & SIDEBAR BORDERS
5550
5551### �� Fixed: Event Dialog Fully Themed
5552- **Fixed:** Dialog background, header, inputs all themed
5553- **Fixed:** All labels, checkboxes, selects themed
5554- **Fixed:** Save and Cancel buttons themed
5555- **Result:** Dialog matches theme perfectly!
5556
5557### �� Fixed: Sidebar Event Borders Properly Themed
5558- **Fixed:** Event divider borders use grid_border color
5559- **Fixed:** Clean, subtle themed dividers
5560- **Result:** No more white borders in sidebar!
5561
5562### All Changes
5563
5564**1. Event Dialog Theming**:
5565
5566**Dialog container**:
5567```php
5568background: $themeStyles['bg'] !important;
5569border: 2px solid $themeStyles['border'] !important;
5570box-shadow: 0 0 20px $shadow !important;
5571```
5572
5573**Dialog header**:
5574```php
5575background: $themeStyles['header_bg'] !important;
5576color: $themeStyles['text_primary'] !important;
5577border-bottom: 1px solid $border !important;
5578```
5579
5580**All form inputs** (text, date, select, textarea):
5581```php
5582background: $themeStyles['cell_bg'] !important;
5583color: $themeStyles['text_primary'] !important;
5584border-color: $themeStyles['grid_border'] !important;
5585```
5586
5587**All labels**:
5588```php
5589color: $themeStyles['text_primary'] !important;
5590```
5591
5592**Checkboxes**:
5593```php
5594accent-color: $themeStyles['border'] !important;
5595```
5596
5597**Buttons**:
5598```php
5599// Cancel button:
5600background: $cell_bg !important;
5601color: $text_primary !important;
5602
5603// Save button:
5604background: $border !important;
5605color: $bg !important; (or white for professional)
5606```
5607
5608**2. Sidebar Event Borders**:
5609
5610**Before**:
5611```php
5612border-bottom: 1px solid rgba(0, 204, 7, 0.2); // Hardcoded
5613```
5614
5615**After**:
5616```php
5617borderColor = $themeStyles['grid_border'];
5618border-bottom: 1px solid $borderColor !important;
5619```
5620
5621### Before vs After
5622
5623**BEFORE (v4.8.4)**:
5624```
5625Event Dialog:
5626┌────────────────┐
5627│ Add Event      │ ← White background ✗
5628│ Title: [_____] │ ← White inputs ✗
5629│ Date:  [_____] │
5630│ [Cancel] [Save]│ ← Default buttons ✗
5631└────────────────┘
5632
5633Sidebar Events:
5634Event 1 ────────  ← White border ✗
5635Event 2 ────────  ← White border ✗
5636```
5637
5638**AFTER (v4.8.5)**:
5639```
5640Event Dialog (Matrix):
5641┌────────────────┐
5642│ Add Event      │ ← Dark green background ✓
5643│ Title: [_____] │ ← Dark green inputs ✓
5644│ Date:  [_____] │ ← Green text ✓
5645│ [Cancel] [Save]│ ← Themed buttons ✓
5646└────────────────┘
5647
5648Sidebar Events (Matrix):
5649Event 1 ────────  ← Green border ✓
5650Event 2 ────────  ← Green border ✓
5651```
5652
5653### Dialog Examples by Theme
5654
5655**Matrix Dialog**:
5656```
5657┌──────────────────────────┐
5658│ ✏️ Edit Event            │ ← Dark green header
5659├──────────────────────────┤
5660│ �� Title                 │ ← Green labels
5661│ [Team Meeting________]   │ ← Dark green input
5662│                          │
5663│ �� Start Date            │
5664│ [2026-02-08__]           │ ← Dark green input
5665│                          │
5666│ �� Start Time            │
5667│ [2:00 PM ▼]              │ ← Green select
5668│                          │
5669│ ☑ �� Repeating Event     │ ← Green checkbox
5670│                          │
5671│ [Cancel] [�� Save]       │ ← Themed buttons
5672└──────────────────────────┘
5673
5674Everything green! ✓
5675```
5676
5677**Purple Dialog**:
5678```
5679┌──────────────────────────┐
5680│ ✏️ Edit Event            │ ← Dark purple header
5681├──────────────────────────┤
5682│ [Inputs_______________]  │ ← Dark purple inputs
5683│ ☑ Checkboxes             │ ← Purple accent
5684│ [Cancel] [�� Save]       │ ← Purple buttons
5685└──────────────────────────┘
5686```
5687
5688**Professional Dialog**:
5689```
5690┌──────────────────────────┐
5691│ ✏️ Edit Event            │ ← Light gradient header
5692├──────────────────────────┤
5693│ [Inputs_______________]  │ ← White inputs
5694│ ☑ Checkboxes             │ ← Blue accent
5695│ [Cancel] [�� Save]       │ ← Blue save button
5696└──────────────────────────┘
5697```
5698
5699**Pink Dialog**:
5700```
5701┌──────────────────────────┐
5702│ ✏️ Edit Event            │ ← Dark pink header ✨
5703├──────────────────────────┤
5704│ [Inputs_______________]  │ ← Dark pink inputs ��
5705│ ☑ Checkboxes             │ ← Pink accent
5706│ [Cancel] [�� Save]       │ ← Pink buttons
5707└──────────────────────────┘
5708```
5709
5710### Complete Dialog Element Coverage
5711
5712**All form elements themed**:
5713- ✅ Dialog container
5714- ✅ Dialog header
5715- ✅ Close button (×)
5716- ✅ Title input
5717- ✅ Namespace search
5718- ✅ Namespace dropdown
5719- ✅ Description textarea
5720- ✅ Start date input
5721- ✅ End date input
5722- ✅ Recurring checkbox
5723- ✅ Recurrence type select
5724- ✅ Recurrence end date
5725- ✅ Start time select
5726- ✅ End time select
5727- ✅ Color select
5728- ✅ Custom color picker
5729- ✅ Task checkbox
5730- ✅ All labels
5731- ✅ Cancel button
5732- ✅ Save button
5733
5734**Every single dialog element themed!** ��
5735
5736### Sidebar Border Example
5737
5738**Matrix Sidebar**:
5739```
5740┌────────────────┐
5741│ Today          │ ← Green section header
5742├────────────────┤
5743│ Team Meeting   │
5744│ 2:00 PM        │
5745├────────────────┤ ← Green border (grid_border)
5746│ Code Review    │
5747│ 4:00 PM        │
5748├────────────────┤ ← Green border
5749│ Stand-up       │
5750│ All day        │
5751└────────────────┘
5752
5753Subtle green dividers! ✓
5754```
5755
5756### Complete Achievement
5757
5758**Every UI element themed**:
5759- ✅ Calendar
5760- ✅ Sidebar widget
5761- ✅ Event list
5762- ✅ Search bar
5763- ✅ **Event dialog** ← v4.8.5!
5764- ✅ Month picker
5765- ✅ **Sidebar dividers** ← v4.8.5!
5766- ✅ All text
5767- ✅ All inputs
5768- ✅ All buttons
5769- ✅ All borders
5770- ✅ All checkboxes
5771
5772**ABSOLUTE COMPLETE THEMING!** ��✨
5773
5774## Version 4.8.4 (2026-02-08) - FIX PROFESSIONAL THEME BACKGROUNDS
5775
5776### �� Fixed: Professional Theme Background Consistency
5777- **Fixed:** Container and event backgrounds now match sidebar
5778- **Fixed:** Lighter, cleaner appearance
5779- **Fixed:** Better contrast and readability
5780- **Result:** Professional theme looks cohesive!
5781
5782### The Problem
5783
5784**v4.8.3 Professional theme**:
5785```
5786Sidebar: Light background (#f5f7fa)
5787Calendar: Medium background (#e8ecf1) ← Didn't match!
5788Events: Light background (#f5f7fa)
5789
5790Inconsistent! ✗
5791```
5792
5793### The Fix
5794
5795**Updated Professional theme colors for consistency**:
5796
5797```php
5798// Before:
5799'bg' => '#e8ecf1',        // Medium gray-blue
5800'cell_bg' => '#f5f7fa',   // Very light
5801'grid_bg' => '#d5dbe3',   // Medium-dark
5802
5803// After:
5804'bg' => '#f5f7fa',        // Very light (matches sidebar)
5805'cell_bg' => '#ffffff',   // Pure white (clean)
5806'grid_bg' => '#e8ecf1',   // Subtle contrast
5807'grid_border' => '#d0d7de', // Softer borders
5808```
5809
5810### Before vs After
5811
5812**BEFORE (v4.8.3)**:
5813```
5814Professional Theme:
5815┌────────────────┐
5816│ Calendar       │ ← Medium gray (#e8ecf1)
5817│ ┌────────────┐ │
5818│ │ Event      │ │ ← Light (#f5f7fa)
5819│ └────────────┘ │
5820└────────────────┘
5821
5822Sidebar:
5823┌────────────────┐
5824│ Widget         │ ← Light (#f5f7fa)
5825└────────────────┘
5826
5827Backgrounds don't match! ✗
5828```
5829
5830**AFTER (v4.8.4)**:
5831```
5832Professional Theme:
5833┌────────────────┐
5834│ Calendar       │ ← Light (#f5f7fa)
5835│ ┌────────────┐ │
5836│ │ Event      │ │ ← White (#ffffff)
5837│ └────────────┘ │
5838└────────────────┘
5839
5840Sidebar:
5841┌────────────────┐
5842│ Widget         │ ← Light (#f5f7fa)
5843└────────────────┘
5844
5845Perfect match! ✓
5846```
5847
5848### New Professional Theme Colors
5849
5850**Backgrounds**:
5851- Container: `#f5f7fa` (light blue-gray)
5852- Events: `#ffffff` (pure white)
5853- Grid: `#e8ecf1` (subtle contrast)
5854
5855**Text**:
5856- Primary: `#2c3e50` (dark blue-gray)
5857- Bright: `#4a90e2` (blue accent)
5858- Dim: `#7f8c8d` (medium gray)
5859
5860**Borders**:
5861- Main: `#4a90e2` (blue)
5862- Grid: `#d0d7de` (soft gray)
5863
5864**Header**:
5865- Gradient: `#ffffff` → `#f5f7fa`
5866
5867### Visual Example
5868
5869**Professional Theme Now**:
5870```
5871┌─────────────────────────────┐
5872│ February 2026               │ ← White to light gradient
5873├─┬─┬─┬─┬─┬─┬─┬───────────────┤
5874│S│M│T│W│T│F│S│               │ ← Light background
5875├─┼─┼─┼─┼─┼─┼─┤               │
5876│ │ │1│2│3│4│5│ Event List    │ ← White events
5877│ │ │ │ │ │ │ │ ┌───────────┐ │
5878│ │ │ │ │[8]│ │ │ Meeting   │ │ ← White on light
5879└─┴─┴─┴─┴─┴─┴─┴─└───────────┘─┘
5880
5881Clean, professional look! ✓
5882```
5883
5884### Comparison with Other Themes
5885
5886**Matrix** (dark):
5887- Container: #242424 (dark green)
5888- Events: #242424 (dark green)
5889- Consistent dark theme ✓
5890
5891**Purple** (dark):
5892- Container: #1a0d14 (dark purple)
5893- Events: #2a2030 (dark purple)
5894- Consistent dark theme ✓
5895
5896**Professional** (light):
5897- Container: #f5f7fa (light blue)
5898- Events: #ffffff (white)
5899- Consistent light theme ✓
5900
5901**Pink** (dark):
5902- Container: #1a0d14 (dark pink)
5903- Events: #1a0d14 (dark pink)
5904- Consistent dark theme ✓
5905
5906**All themes now consistent!** ��
5907
5908### Better Contrast
5909
5910**Professional theme improvements**:
5911
5912**Readability**:
5913- Dark text (#2c3e50) on white/light backgrounds ✓
5914- Excellent contrast ratio ✓
5915- Easy on the eyes ✓
5916
5917**Visual hierarchy**:
5918- White events pop against light container ✓
5919- Blue accents stand out ✓
5920- Clean, modern look ✓
5921
5922**Professional appearance**:
5923- Lighter = more corporate/business feel ✓
5924- Clean whites = premium quality ✓
5925- Subtle grays = sophisticated ✓
5926
5927### Complete Theme Consistency
5928
5929**All themes now have matching backgrounds**:
5930
5931**Matrix**:
5932- Sidebar & Calendar both dark green ✓
5933
5934**Purple**:
5935- Sidebar & Calendar both dark purple ✓
5936
5937**Professional**:
5938- Sidebar & Calendar both light ✓ (v4.8.4!)
5939
5940**Pink**:
5941- Sidebar & Calendar both dark pink ✓
5942
5943**Perfect visual unity across all views!** ��✨
5944
5945## Version 4.8.3 (2026-02-08) - FINAL POLISH: BOLD TEXT, SEARCH, SIDEBAR BOXES
5946
5947### �� Fixed: Bold Text in Descriptions Themed
5948- **Fixed:** **Bold text** now uses theme primary color
5949- **Fixed:** Both `**text**` and `__text__` syntax themed
5950- **Result:** Bold text matches theme!
5951
5952### �� Fixed: Search Bar Fully Themed
5953- **Fixed:** Search input has !important on all styles
5954- **Fixed:** Icon and placeholder text themed
5955- **Result:** Search bar perfectly themed!
5956
5957### �� Fixed: Sidebar Event Boxes Themed
5958- **Fixed:** Event borders in sidebar now use theme grid_border color
5959- **Fixed:** Borders have !important flag
5960- **Result:** Sidebar boxes match theme!
5961
5962### All Changes
5963
5964**1. Bold Text Styling**:
5965
5966**Before**:
5967```html
5968<strong>Bold text</strong> ← Default black
5969```
5970
5971**After**:
5972```php
5973<strong style="color: $text_primary !important; font-weight:bold;">
5974    Bold text
5975</strong>
5976
5977Matrix: Green bold ✓
5978Purple: Lavender bold ✓
5979Professional: Dark bold ✓
5980Pink: Pink bold ✓
5981```
5982
5983**2. Search Bar**:
5984
5985**Before**:
5986```php
5987style="background: $bg; color: $text;"
5988Could be overridden by CSS
5989```
5990
5991**After**:
5992```php
5993style="background: $bg !important;
5994       color: $text_primary !important;
5995       border-color: $grid_border !important;"
5996
5997Cannot be overridden! ✓
5998```
5999
6000**3. Sidebar Event Boxes**:
6001
6002**Before**:
6003```php
6004$borderColor = 'rgba(0, 204, 7, 0.2)'; // Hardcoded
6005```
6006
6007**After**:
6008```php
6009$borderColor = $themeStyles['grid_border']; // From theme
6010border-bottom: 1px solid $borderColor !important;
6011
6012Matrix: Green borders ✓
6013Purple: Purple borders ✓
6014Professional: Gray borders ✓
6015Pink: Pink borders ✓
6016```
6017
6018### Before vs After
6019
6020**BEFORE (v4.8.2)**:
6021```
6022Event description:
6023"Please review **Q1 Goals** carefully"
60246025            Black bold ✗
6026
6027Search bar:
6028[�� Search...] ← Gray placeholder ✗
6029
6030Sidebar:
6031┌────────────┐
6032│ Event 1    │
6033├────────────┤ ← Gray border ✗
6034│ Event 2    │
6035└────────────┘
6036```
6037
6038**AFTER (v4.8.3)**:
6039```
6040Matrix Theme:
6041
6042Event description:
6043"Please review **Q1 Goals** carefully"
60446045            Green bold ✓
6046
6047Search bar:
6048[�� Search...] ← Green themed ✓
6049
6050Sidebar:
6051┌────────────┐
6052│ Event 1    │
6053├────────────┤ ← Green border ✓
6054│ Event 2    │
6055└────────────┘
6056```
6057
6058### Examples by Theme
6059
6060**Matrix Theme**:
6061```
6062Description:
6063"Check **important notes** and links"
60646065   Green bold
6066
6067Sidebar boxes:
6068Event 1
6069───────── Green border
6070Event 2
6071───────── Green border
6072```
6073
6074**Purple Theme**:
6075```
6076Description:
6077"Review **agenda items** before meeting"
60786079   Lavender bold
6080
6081Sidebar boxes:
6082Event 1
6083───────── Purple border
6084Event 2
6085───────── Purple border
6086```
6087
6088**Professional Theme**:
6089```
6090Description:
6091"Update **quarterly reports** by Friday"
60926093   Dark bold
6094
6095Sidebar boxes:
6096Event 1
6097───────── Gray border
6098Event 2
6099───────── Gray border
6100```
6101
6102**Pink Theme**:
6103```
6104Description:
6105"Don't forget **party supplies** ✨"
61066107        Pink bold
6108
6109Sidebar boxes:
6110Event 1 ��
6111───────── Pink border
6112Event 2 ✨
6113───────── Pink border
6114```
6115
6116### Complete Formatting Coverage
6117
6118**Text formatting themed**:
6119- ✅ Regular text
6120- ✅ **Bold text** ← NEW!
6121- ✅ Links
6122- ✅ Italic text (inherits)
6123- ✅ Code (inherits)
6124
6125**UI elements themed**:
6126- ✅ Search bar ← Enhanced!
6127- ✅ Search icon ← Enhanced!
6128- ✅ Search placeholder ← Enhanced!
6129- ✅ Sidebar borders ← NEW!
6130- ✅ Event borders
6131- ✅ Badges
6132- ✅ Buttons
6133
6134**Every element perfectly themed!** ��
6135
6136### Search Bar Coverage
6137
6138**All aspects themed**:
6139- Background: Theme cell_bg ✓
6140- Text color: Theme text_primary ✓
6141- Border: Theme grid_border ✓
6142- Placeholder: Inherits text color ✓
6143- Icon (��): In placeholder ✓
6144- Clear button (✕): Themed ✓
6145
6146**Cannot be overridden!** (all have !important)
6147
6148### Sidebar Event Box Styling
6149
6150**Consistent borders**:
6151```
6152Matrix:
6153╔════════════╗
6154║ Event 1    ║
6155╟────────────╢ ← grid_border color
6156║ Event 2    ║
6157╚════════════╝
6158
6159All themes match perfectly! ✓
6160```
6161
6162### Complete Theme Achievement
6163
6164**Every single element themed**:
6165- ✅ Backgrounds
6166- ✅ Text (regular)
6167- ✅ Text (bold) ← v4.8.3!
6168- ✅ Links
6169- ✅ Badges
6170- ✅ Buttons
6171- ✅ Checkboxes
6172- ✅ Icons
6173- ✅ Borders
6174- ✅ Search bar ← Enhanced v4.8.3!
6175- ✅ Sidebar boxes ← v4.8.3!
6176- ✅ Today marker
6177- ✅ Calendar grid
6178- ✅ Event panels
6179
6180**ABSOLUTE PERFECTION!** ��✨
6181
6182## Version 4.8.2 (2026-02-08) - THEME LINKS IN DESCRIPTIONS
6183
6184### �� Fixed: Links in Descriptions Now Themed
6185- **Fixed:** All links in event descriptions now use theme color
6186- **Fixed:** DokuWiki links [[page|text]] themed
6187- **Fixed:** Markdown links [text](url) themed
6188- **Fixed:** Plain URLs themed
6189- **Result:** Links match theme perfectly!
6190
6191### The Problem
6192
6193**v4.8.1 behavior**:
6194```
6195Event description:
6196"Check out https://example.com" ← Blue default link ✗
6197"See [[wiki:page|docs]]" ← Blue default link ✗
6198```
6199
6200### The Fix
6201
6202**Added inline color styling to ALL link types**:
6203
6204```php
6205// Get theme colors:
6206$linkColor = $themeStyles['border'] . ' !important';
6207$linkStyle = ' style="color:' . $linkColor . ';"';
6208
6209// Apply to links:
6210<a href="..." style="color: #00cc07 !important;">link</a>
6211```
6212
6213**All link types themed**:
62141. DokuWiki syntax: `[[page|text]]`
62152. Markdown syntax: `[text](url)`
62163. Plain URLs: `https://example.com`
6217
6218### Before vs After
6219
6220**BEFORE (v4.8.1)**:
6221```
6222Matrix Theme Description:
6223"Visit https://example.com for more info"
62246225     Blue link ✗ (doesn't match green theme)
6226```
6227
6228**AFTER (v4.8.2)**:
6229```
6230Matrix Theme Description:
6231"Visit https://example.com for more info"
62326233     Green link ✓ (matches theme!)
6234```
6235
6236### Link Colors by Theme
6237
6238**Matrix**:
6239- Links: Green (#00cc07) !important
6240- Matches: Border, badges, highlights
6241
6242**Purple**:
6243- Links: Purple (#9b59b6) !important
6244- Matches: Border, badges, highlights
6245
6246**Professional**:
6247- Links: Blue (#4a90e2) !important
6248- Matches: Border, badges, highlights
6249
6250**Pink**:
6251- Links: Hot Pink (#ff1493) !important
6252- Matches: Border, badges, highlights ✨
6253
6254### Examples
6255
6256**Matrix Description with Links**:
6257```
6258Event: Team Meeting
6259Description:
6260"Review [[wiki:q1goals|Q1 Goals]]
6261and visit https://metrics.com"
6262
6263Both links → Green ✓
6264```
6265
6266**Purple Description with Links**:
6267```
6268Event: Planning Session
6269Description:
6270"Check [schedule](https://cal.com)
6271for availability"
6272
6273Link → Purple ✓
6274```
6275
6276**Professional Description with Links**:
6277```
6278Event: Client Call
6279Description:
6280"Prepare [[reports|Monthly Reports]]
6281before the call"
6282
6283Link → Blue ✓
6284```
6285
6286**Pink Description with Links**:
6287```
6288Event: Party Planning
6289Description:
6290"RSVP at https://party.com ✨"
6291
6292Link → Hot Pink ✓ ��
6293```
6294
6295### Technical Implementation
6296
6297**Updated renderDescription() function**:
6298
6299```php
6300private function renderDescription($description, $themeStyles = null) {
6301    // Get theme
6302    if ($themeStyles === null) {
6303        $theme = $this->getSidebarTheme();
6304        $themeStyles = $this->getSidebarThemeStyles($theme);
6305    }
6306
6307    // Create link style
6308    $linkColor = $themeStyles['border'] . ' !important';
6309    $linkStyle = ' style="color:' . $linkColor . ';"';
6310
6311    // Apply to all link types:
6312    $linkHtml = '<a href="..." ' . $linkStyle . '>text</a>';
6313}
6314```
6315
6316### Complete Theming
6317
6318**Every text element**:
6319- ✅ Event titles
6320- ✅ Event dates
6321- ✅ Event descriptions
6322- ✅ **Links in descriptions** ← NEW!
6323- ✅ Badges
6324- ✅ Buttons
6325
6326**Every color unified!** ��
6327
6328### Unified Theme Experience
6329
6330**Matrix Theme**:
6331```
6332Everything green:
6333- Text: Green ✓
6334- Links: Green ✓
6335- Badges: Green ✓
6336- Borders: Green ✓
6337- Buttons: Green ✓
6338- Today marker: Green ✓
6339
6340Perfect harmony! ✓
6341```
6342
6343**No default blue links breaking the theme!**
6344
6345### Link Types Supported
6346
6347**1. DokuWiki Syntax**:
6348```
6349[[page|Link Text]] → Themed ✓
6350[[page]] → Themed ✓
6351[[page#section|Text]] → Themed ✓
6352```
6353
6354**2. Markdown Syntax**:
6355```
6356[Link Text](https://url.com) → Themed ✓
6357[Text](internal-page) → Themed ✓
6358```
6359
6360**3. Plain URLs**:
6361```
6362https://example.com → Themed ✓
6363http://site.org → Themed ✓
6364```
6365
6366**All links perfectly themed!** ����
6367
6368## Version 4.8.1 (2026-02-08) - FIX BADGES & TODAY CELL MARKER
6369
6370### �� Fixed: All Badges Now Themed
6371- **Fixed:** TODAY badge themed with theme color
6372- **Fixed:** PAST DUE badge uses orange (warning color)
6373- **Fixed:** Namespace badges themed
6374- **Fixed:** All badges visible and hidden
6375- **Result:** All badges match theme!
6376
6377### �� Fixed: Today Cell More Prominent
6378- **Fixed:** Today cell now has 2px border in theme color
6379- **Fixed:** Border added to both PHP and JavaScript
6380- **Result:** Today stands out clearly!
6381
6382### �� Fixed: Past Event Text Fully Themed
6383- **Fixed:** Event-info div backgrounds ensure no gray
6384- **Result:** Expanded past events completely themed!
6385
6386### All Changes
6387
6388**1. Badge Theming**:
6389
6390**TODAY Badge**:
6391```php
6392// PHP & JavaScript:
6393style="background: $themeStyles['border'] !important;
6394       color: $bg !important;"
6395
6396Matrix: Green badge
6397Purple: Purple badge
6398Professional: Blue badge with white text
6399Pink: Pink badge
6400```
6401
6402**PAST DUE Badge** (always orange):
6403```php
6404style="background: #ff9800 !important;
6405       color: #fff !important;"
6406```
6407
6408**Namespace Badge**:
6409```php
6410style="background: $themeStyles['border'] !important;
6411       color: $bg !important;"
6412```
6413
6414**2. Today Cell Border**:
6415
6416**PHP**:
6417```php
6418$todayBorder = $isToday ?
6419    'border:2px solid ' . $themeStyles['border'] . ' !important;' : '';
6420```
6421
6422**JavaScript**: Same
6423
6424**Result**: Today cell has prominent colored border!
6425
6426### Before vs After
6427
6428**BEFORE (v4.8.0)**:
6429```
6430Calendar:
6431┌─┬─┬─┬─┬─┬─┬─┐
6432│1│2│3│4│5│6│7│
6433│ │ │ │[8]│ │ │ ← Today: subtle background
6434└─┴─┴─┴─┴─┴─┴─┘
6435
6436Event badges:
6437Mon, Feb 8 [TODAY] [Work] ← Gray badges ✗
6438```
6439
6440**AFTER (v4.8.1)**:
6441```
6442Calendar (Matrix):
6443┌─┬─┬─┬─┬─┬─┬─┐
6444│1│2│3│4│5│6│7│
6445│ │ │ │[8]│ │ │ ← Today: green border 2px ✓
6446└─┴─┴─┴─┴─┴─┴─┘
6447
6448Event badges (Matrix):
6449Mon, Feb 8 [TODAY] [Work] ← Green badges ✓
6450```
6451
6452### Matrix Theme Example
6453
6454**Calendar**:
6455```
6456Today cell:
6457┌────┐
6458│ 8  │ Dark green bg + Green 2px border
6459└────┘
6460Very obvious!
6461```
6462
6463**Badges**:
6464```
6465[TODAY] ← Green bg, dark text
6466[Work]  ← Green bg, dark text
6467[PAST DUE] ← Orange bg, white text
6468```
6469
6470### Purple Theme Example
6471
6472**Calendar**:
6473```
6474Today cell:
6475┌────┐
6476│ 8  │ Dark purple bg + Purple 2px border
6477└────┘
6478```
6479
6480**Badges**:
6481```
6482[TODAY] ← Purple bg
6483[Work]  ← Purple bg
6484```
6485
6486### Professional Theme Example
6487
6488**Calendar**:
6489```
6490Today cell:
6491┌────┐
6492│ 8  │ Light blue bg + Blue 2px border
6493└────┘
6494```
6495
6496**Badges**:
6497```
6498[TODAY] ← Blue bg, white text
6499[Work]  ← Blue bg, white text
6500```
6501
6502### Pink Theme Example
6503
6504**Calendar**:
6505```
6506Today cell:
6507┌────┐
6508│ 8  │ Dark pink bg + Pink 2px border ✨
6509└────┘
6510```
6511
6512**Badges**:
6513```
6514[TODAY] ← Pink bg ��
6515[Work]  ← Pink bg ✨
6516```
6517
6518### Complete Badge Coverage
6519
6520**All badges themed**:
6521- ✅ TODAY badge (theme color)
6522- ✅ PAST DUE badge (orange warning)
6523- ✅ Namespace badges (theme color)
6524- ✅ Visible events
6525- ✅ Hidden/past events
6526
6527**No gray badges anywhere!**
6528
6529### Today Cell Visual
6530
6531**Dual indicators**:
65321. Background color (theme today bg)
65332. Border (2px theme color) ← NEW!
6534
6535**Result**: Today is VERY obvious!
6536
6537**Matrix**: Green bg + Green border
6538**Purple**: Purple bg + Purple border
6539**Professional**: Light blue bg + Blue border
6540**Pink**: Pink bg + Pink border ✨
6541
6542### Complete Theming
6543
6544**Every element themed**:
6545- ✅ Backgrounds
6546- ✅ Text colors
6547- ✅ Badges (v4.8.1!)
6548- ✅ Today marker (v4.8.1!)
6549- ✅ Checkboxes
6550- ✅ Buttons
6551- ✅ Icons
6552
6553**Absolutely everything!** ��✨
6554
6555## Version 4.8.0 (2026-02-08) - COMPLETE EVENT BACKGROUND THEMING
6556
6557### �� Fixed: All Event Backgrounds Now Themed
6558- **Fixed:** event-info div now has themed background
6559- **Fixed:** event-meta-compact div (visible) now has themed background
6560- **Fixed:** event-desc-compact div now has themed background
6561- **Fixed:** All !important flags added to prevent CSS override
6562- **Result:** Entire event item fully themed!
6563
6564### �� Fixed: Description Text Shows Correct Color Immediately
6565- **Fixed:** Description divs now have explicit background + color on load
6566- **Fixed:** Both visible and hidden descriptions fully styled
6567- **Result:** No more gray text on initial load!
6568
6569### The Problem
6570
6571**v4.7.9 behavior**:
6572```
6573Expanded past event:
6574┌────────────────────────┐
6575│ ▾ Team Meeting         │ ← Themed ✓
6576│   Mon, Feb 8           │ ← Themed ✓
6577│                        │
6578│   [Event details]      │ ← Gray background ✗
6579│   [Description]        │ ← Gray text until navigation ✗
6580└────────────────────────┘
6581
6582Only the date/time div was themed!
6583```
6584
6585### The Fix
6586
6587**Added background to ALL inner divs**:
6588
6589**PHP**:
6590```php
6591// Event container:
6592style="background:' . $themeStyles['cell_bg'] . ' !important;"
6593
6594// event-info wrapper:
6595<div class="event-info"
6596     style="background:' . $themeStyles['cell_bg'] . ' !important;">
6597
6598// event-meta-compact:
6599<div class="event-meta-compact"
6600     style="background:' . $themeStyles['cell_bg'] . ' !important;">
6601
6602// event-desc-compact:
6603<div class="event-desc-compact"
6604     style="background:' . $themeStyles['cell_bg'] . ' !important;
6605            color:' . $themeStyles['text_dim'] . ' !important;">
6606```
6607
6608**JavaScript**: Same styling applied
6609
6610### Before vs After
6611
6612**BEFORE (v4.7.9)**:
6613```
6614Matrix Theme - Expanded Event:
6615┌────────────────────────┐
6616│ ▾ Team Meeting         │
6617│   Mon, Feb 8  ← Green  │
6618│                        │
6619│   Details     ← Gray ✗ │
6620│   Description ← Gray ✗ │
6621│   [✏️] [��️]            │
6622└────────────────────────┘
6623```
6624
6625**AFTER (v4.8.0)**:
6626```
6627Matrix Theme - Expanded Event:
6628┌────────────────────────┐
6629│ ▾ Team Meeting         │
6630│   Mon, Feb 8  ← Green  │
6631│                        │
6632│   Details     ← Green ✓│
6633│   Description ← Green ✓│
6634│   [✏️] [��️]            │
6635└────────────────────────┘
6636
6637Entire event themed!
6638```
6639
6640### What's Themed Now
6641
6642**Event Item Structure** (all themed):
6643```
6644event-compact-item        ← Themed ✓
6645  └─ event-info           ← Themed ✓ (v4.8.0!)
6646      ├─ event-title-row  ← Themed ✓
6647      ├─ event-meta       ← Themed ✓ (v4.8.0!)
6648      └─ event-desc       ← Themed ✓ (v4.8.0!)
6649```
6650
6651**Every layer has background!**
6652
6653### Matrix Theme Example
6654
6655**Complete event**:
6656```
6657┌────────────────────────────┐
6658│ Team Meeting               │ ← Dark green bg
6659│   Mon, Feb 8 • 2:00 PM     │ ← Dark green bg
6660│   Discussed Q1 goals and   │ ← Dark green bg
6661│   set targets for team     │ ← Dark green bg
6662│   [✏️] [��️] [☑]           │ ← Dark green bg
6663└────────────────────────────┘
6664
6665Consistent green throughout! ✓
6666```
6667
6668### Purple Theme Example
6669
6670```
6671┌────────────────────────────┐
6672│ Team Meeting               │ ← Dark purple bg
6673│   Mon, Feb 8 • 2:00 PM     │ ← Dark purple bg
6674│   Discussed Q1 goals       │ ← Dark purple bg
6675│   [✏️] [��️] [☑]           │ ← Dark purple bg
6676└────────────────────────────┘
6677
6678Consistent purple throughout! ✓
6679```
6680
6681### Professional Theme Example
6682
6683```
6684┌────────────────────────────┐
6685│ Team Meeting               │ ← Light bg
6686│   Mon, Feb 8 • 2:00 PM     │ ← Light bg
6687│   Discussed Q1 goals       │ ← Light bg
6688│   [✏️] [��️] [☑]           │ ← Light bg
6689└────────────────────────────┘
6690
6691Consistent light throughout! ✓
6692```
6693
6694### Pink Theme Example
6695
6696```
6697┌────────────────────────────┐
6698│ Team Meeting               │ ← Dark pink bg
6699│   Mon, Feb 8 • 2:00 PM     │ ← Dark pink bg
6700│   Discussed Q1 goals       │ ← Dark pink bg
6701│   [✏️] [��️] [☑]           │ ← Dark pink bg
6702└────────────────────────────┘
6703
6704Consistent pink throughout! ✓
6705```
6706
6707### Complete Theming
6708
6709**Every element, every layer**:
6710- ✅ Container
6711- ✅ Event item
6712- ✅ Event info wrapper (v4.8.0!)
6713- ✅ Title row
6714- ✅ Meta div (v4.8.0!)
6715- ✅ Description div (v4.8.0!)
6716- ✅ Action buttons
6717- ✅ Checkboxes
6718
6719**No gray anywhere!** ��
6720
6721### Why Multiple Backgrounds?
6722
6723**CSS layers stack**:
6724```html
6725<div style="background: green;">         ← Layer 1
6726  <div style="background: inherit;">     ← Could be gray!
6727    <div>Content</div>                   ← Inherits gray!
6728  </div>
6729</div>
6730
6731Better:
6732<div style="background: green;">         ← Layer 1
6733  <div style="background: green;">       ← Layer 2 forced
6734    <div style="background: green;">     ← Layer 3 forced
6735      Content                            ← All green!
6736    </div>
6737  </div>
6738</div>
6739```
6740
6741**Every layer forced = Perfect theming!**
6742
6743### !important Everywhere
6744
6745**All styling now uses !important**:
6746- background: ... !important
6747- color: ... !important
6748
6749**Result**: CSS cannot override themes!
6750
6751**Version 4.8.0 = Complete, bulletproof theming!** ��✨
6752
6753## Version 4.7.9 (2026-02-08) - THEME ICONS, CHECKBOXES & EXPANDED BACKGROUNDS
6754
6755### �� Fixed: Past Event Expanded Background Themed
6756- **Fixed:** Past event meta div now has theme background when expanded
6757- **Fixed:** Both PHP and JavaScript render with theme background
6758- **Result:** Expanded past events have proper themed background!
6759
6760### ✅ Fixed: Checkboxes Now Themed
6761- **Fixed:** Task checkboxes use accent-color matching theme
6762- **Fixed:** Cursor changes to pointer on hover
6763- **Result:** Checkboxes match theme color!
6764
6765### �� Fixed: Action Buttons (Edit/Delete) Themed
6766- **Fixed:** Edit (✏️) and Delete (��️) buttons now themed
6767- **Fixed:** Background, text, and border all use theme colors
6768- **Result:** All icons themed!
6769
6770### All Changes
6771
6772**1. Past Event Expanded Background**:
6773
6774**PHP**:
6775```php
6776// Before:
6777<div class="event-meta-compact" style="display:none;">
6778
6779// After:
6780<div class="event-meta-compact"
6781     style="display:none; background:' . $themeStyles['cell_bg'] . ' !important;">
6782```
6783
6784**JavaScript**: Same treatment
6785
6786**Result**: Expanded past events have themed background!
6787
6788**2. Task Checkboxes**:
6789
6790**PHP & JavaScript**:
6791```php
6792// Added accent-color:
6793<input type="checkbox"
6794       style="accent-color:' . $themeStyles['border'] . ' !important;
6795              cursor:pointer;">
6796```
6797
6798**accent-color** changes the checkbox color:
6799- Matrix: Green checkboxes ✓
6800- Purple: Purple checkboxes ✓
6801- Professional: Blue checkboxes ✓
6802- Pink: Pink checkboxes ✓
6803
6804**3. Edit/Delete Buttons**:
6805
6806**PHP**:
6807```php
6808<button class="event-action-btn"
6809        style="color:' . $themeStyles['text_primary'] . ' !important;
6810               background:' . $themeStyles['cell_bg'] . ' !important;
6811               border-color:' . $themeStyles['grid_border'] . ' !important;">
6812    ��️
6813</button>
6814```
6815
6816**JavaScript**: Same
6817
6818**Result**: Buttons blend with theme!
6819
6820### Before vs After
6821
6822**BEFORE (v4.7.8)**:
6823```
6824Past Event (expanded):
6825┌─────────────────────────┐
6826│ ▾ Team Meeting          │
6827│   Mon, Feb 8            │ ← White background ✗
6828│   Description           │
6829├─────────────────────────┤
6830│ [✏️] [��️] [☐]          │ ← Default colors ✗
6831└─────────────────────────┘
6832```
6833
6834**AFTER (v4.7.9)**:
6835```
6836Past Event (expanded - Matrix):
6837┌─────────────────────────┐
6838│ ▾ Team Meeting          │
6839│   Mon, Feb 8            │ ← Dark green bg ✓
6840│   Description           │
6841├─────────────────────────┤
6842│ [✏️] [��️] [☑]          │ ← Themed ✓
6843└─────────────────────────┘
6844```
6845
6846### Matrix Theme Example
6847
6848**Checkboxes**: Green accent
6849**Buttons**: Dark bg, green text, green borders
6850**Expanded**: Dark green background
6851
6852```
6853Task: ☑ Complete report  ← Green checkmark
6854[✏️] [��️]                ← Dark buttons with green
6855```
6856
6857### Purple Theme Example
6858
6859**Checkboxes**: Purple accent
6860**Buttons**: Dark purple bg, lavender text
6861**Expanded**: Dark purple background
6862
6863```
6864Task: ☑ Complete report  ← Purple checkmark
6865[✏️] [��️]                ← Purple themed
6866```
6867
6868### Professional Theme Example
6869
6870**Checkboxes**: Blue accent
6871**Buttons**: Light bg, dark text
6872**Expanded**: Light background
6873
6874```
6875Task: ☑ Complete report  ← Blue checkmark
6876[✏️] [��️]                ← Light themed
6877```
6878
6879### Pink Theme Example
6880
6881**Checkboxes**: Pink accent
6882**Buttons**: Dark pink bg, pink text
6883**Expanded**: Dark pink background
6884
6885```
6886Task: ☑ Complete report  ← Pink checkmark
6887[✏️] [��️]                ← Pink themed
6888```
6889
6890### Complete Icon Coverage
6891
6892**Themed Icons/Buttons**:
6893- ✅ Task checkboxes (accent-color)
6894- ✅ Edit button (✏️)
6895- ✅ Delete button (��️)
6896- ✅ Navigation arrows (◀ ▶)
6897- ✅ Today button
6898- ✅ Past Events arrow (▶)
6899
6900**All interactive elements themed!** ��
6901
6902### How accent-color Works
6903
6904**Modern CSS property** for form controls:
6905```css
6906input[type="checkbox"] {
6907    accent-color: #00cc07; /* Green checkbox! */
6908}
6909```
6910
6911**Browser support**: All modern browsers ✓
6912
6913**Result**: Checkboxes automatically match theme!
6914
6915### Complete Theme Coverage
6916
6917**Backgrounds**:
6918- ✅ Container
6919- ✅ Calendar-left
6920- ✅ Calendar-right
6921- ✅ Event items
6922- ✅ Past event expanded (v4.7.9!)
6923- ✅ Action buttons (v4.7.9!)
6924
6925**Icons/Controls**:
6926- ✅ Checkboxes (v4.7.9!)
6927- ✅ Edit/Delete buttons (v4.7.9!)
6928- ✅ Navigation buttons
6929- ✅ All arrows
6930
6931**Every element perfectly themed!** ��✨
6932
6933## Version 4.7.8 (2026-02-08) - FIX BOTTOM BAR & PAST EVENT DETAILS
6934
6935### �� Fixed: White Bar at Bottom of Calendar
6936- **Fixed:** Added background to calendar-left div with !important
6937- **Result:** No more white bar at bottom!
6938
6939### �� Fixed: Past Event Expanded Details Not Themed
6940- **Fixed:** Past event date/time now themed when expanded
6941- **Fixed:** Past event descriptions now themed when expanded
6942- **Fixed:** Both PHP and JavaScript render with theme colors
6943- **Result:** Expanding past events shows themed text!
6944
6945### �� Fixed: Event Description Text Color
6946- **Fixed:** All event descriptions now use theme text_dim color
6947- **Fixed:** Both visible and hidden descriptions themed
6948- **Result:** Descriptions always match theme!
6949
6950### All Changes
6951
6952**1. Bottom White Bar** (calendar-left div):
6953
6954**Before**:
6955```html
6956<div class="calendar-compact-left">
6957<!-- White background showing at bottom -->
6958```
6959
6960**After**:
6961```html
6962<div class="calendar-compact-left"
6963     style="background: #242424 !important;">
6964<!-- Matches theme background -->
6965```
6966
6967**2. Past Event Expanded Details**:
6968
6969**PHP** - Added colors to hidden details:
6970```php
6971// Past event meta (hidden):
6972<span class="event-date-time"
6973      style="color:' . $themeStyles['text_dim'] . ' !important;">
6974
6975// Past event description (hidden):
6976<div class="event-desc-compact"
6977     style="display:none; color:' . $themeStyles['text_dim'] . ' !important;">
6978```
6979
6980**JavaScript** - Same treatment:
6981```javascript
6982// Past event meta:
6983html += '<span class="event-date-time"
6984              style="color:' + themeStyles.text_dim + ' !important;">';
6985
6986// Past event description:
6987html += '<div class="event-desc-compact"
6988              style="display: none; color:' + themeStyles.text_dim + ' !important;">';
6989```
6990
6991**3. All Event Descriptions**:
6992
6993**Both visible and hidden descriptions now themed**:
6994```php
6995// PHP:
6996style="color:' . $themeStyles['text_dim'] . ' !important;"
6997
6998// JavaScript:
6999style="color:' + themeStyles.text_dim + ' !important;"
7000```
7001
7002### Before vs After
7003
7004**BEFORE (v4.7.7)**:
7005```
7006Calendar bottom:
7007┌──────────────┐
7008│ Calendar     │
7009│ Grid         │
7010└──────────────┘
7011▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ← White bar
7012
7013Past Event (collapsed):
7014▸ Team Meeting
7015
7016Past Event (expanded):
7017▾ Team Meeting
7018  Mon, Feb 8 ← Gray text ✗
7019  Description ← Gray text ✗
7020```
7021
7022**AFTER (v4.7.8)**:
7023```
7024Calendar bottom:
7025┌──────────────┐
7026│ Calendar     │
7027│ Grid         │
7028└──────────────┘
7029No white bar! ✓
7030
7031Past Event (collapsed):
7032▸ Team Meeting
7033
7034Past Event (expanded):
7035▾ Team Meeting
7036  Mon, Feb 8 ← Theme dim color ✓
7037  Description ← Theme dim color ✓
7038```
7039
7040### Matrix Theme Example
7041
7042**Past event expanded**:
7043```
7044▾ Team Meeting (past)
7045  Mon, Feb 8 • 2:00 PM  ← Dim green (#00aa00)
7046  Discussed Q1 goals   ← Dim green (#00aa00)
7047
7048Everything themed! ✓
7049```
7050
7051### Purple Theme Example
7052
7053**Past event expanded**:
7054```
7055▾ Team Meeting (past)
7056  Mon, Feb 8 • 2:00 PM  ← Dim purple (#8e7ab8)
7057  Discussed Q1 goals   ← Dim purple (#8e7ab8)
7058
7059Everything themed! ✓
7060```
7061
7062### Professional Theme Example
7063
7064**Past event expanded**:
7065```
7066▾ Team Meeting (past)
7067  Mon, Feb 8 • 2:00 PM  ← Gray (#7f8c8d)
7068  Discussed Q1 goals   ← Gray (#7f8c8d)
7069
7070Everything themed! ✓
7071```
7072
7073### Pink Theme Example
7074
7075**Past event expanded**:
7076```
7077▾ Team Meeting (past)
7078  Mon, Feb 8 • 2:00 PM  ← Light pink (#ff85c1)
7079  Discussed Q1 goals   ← Light pink (#ff85c1)
7080
7081Everything themed! ✓
7082```
7083
7084### Complete Coverage
7085
7086**Calendar Layout**:
7087- ✅ Container background
7088- ✅ Calendar-left background (v4.7.8!)
7089- ✅ Calendar-right background
7090- ✅ No white bars anywhere!
7091
7092**Event Details**:
7093- ✅ Event titles
7094- ✅ Event dates/times
7095- ✅ Event descriptions (visible) (v4.7.8!)
7096- ✅ Past event dates (expanded) (v4.7.8!)
7097- ✅ Past event descriptions (expanded) (v4.7.8!)
7098
7099**Absolutely everything themed!** ��
7100
7101## Version 4.7.7 (2026-02-08) - AGGRESSIVE !IMPORTANT ON ALL ELEMENTS
7102
7103### �� Fixed: Added !important to EVERY Themed Element
7104- **Fixed:** S M T W T F S headers now have background + color with !important
7105- **Fixed:** "Past Events" text now has explicit color with !important
7106- **Fixed:** Today cell background now forced with !important
7107- **Fixed:** All day numbers now have !important color
7108- **Fixed:** Empty cells now have !important background
7109- **Result:** CSS CANNOT override themes anymore!
7110
7111### The Nuclear Option: !important Everywhere
7112
7113**Problem**: DokuWiki CSS was still winning:
7114```css
7115/* DokuWiki theme overriding everything: */
7116.dokuwiki table th { background: white !important; color: black !important; }
7117.dokuwiki td { background: white !important; }
7118```
7119
7120**Solution**: Add !important to EVERY inline style:
7121```html
7122<th style="background: #242424 !important; color: #00cc07 !important;">
7123<td style="background: #2a4d2a !important; color: #00cc07 !important;">
7124<span style="color: #00cc07 !important;">
7125```
7126
7127### All Changes
7128
7129**1. Table Headers (S M T W T F S)**:
7130
7131**PHP** - Added background + !important everywhere:
7132```php
7133$thStyle = 'background:' . $themeStyles['header_bg'] . ' !important;
7134            color:' . $themeStyles['text_primary'] . ' !important;
7135            border-color:' . $themeStyles['grid_border'] . ' !important;
7136            font-weight:bold !important;';
7137```
7138
7139**JavaScript** - Added background to each th:
7140```javascript
7141th.style.setProperty('background', themeStyles.header_bg, 'important');
7142th.style.setProperty('color', themeStyles.text_primary, 'important');
7143th.style.setProperty('border-color', themeStyles.grid_border, 'important');
7144th.style.setProperty('font-weight', 'bold', 'important');
7145```
7146
7147**2. Past Events Text**:
7148
7149**PHP** - Added !important to spans:
7150```php
7151<span class="past-events-arrow" style="color:' . $themeStyles['text_dim'] . ' !important;">▶</span>
7152<span class="past-events-label" style="color:' . $themeStyles['text_dim'] . ' !important;">Past Events</span>
7153```
7154
7155**JavaScript** - Same treatment:
7156```javascript
7157html += '<span class="past-events-arrow" style="color:' + themeStyles.text_dim + ' !important;">▶</span>';
7158html += '<span class="past-events-label" style="color:' + themeStyles.text_dim + ' !important;">Past Events</span>';
7159```
7160
7161**3. Today Cell & All Cells**:
7162
7163**PHP** - !important on background and color:
7164```php
7165// Today or regular cell:
7166$cellStyle = 'background:' . $cellBg . ' !important;
7167              color:' . $themeStyles['text_primary'] . ' !important;';
7168
7169// Day number:
7170<span class="day-num" style="color:' . $themeStyles['text_primary'] . ' !important;">
7171```
7172
7173**JavaScript** - Same:
7174```javascript
7175style="background:${cellBg} !important; color:${cellColor} !important;"
7176
7177<span style="color:${cellColor} !important;">${currentDay}</span>
7178```
7179
7180**4. Empty Cells**:
7181
7182**PHP & JavaScript** - !important:
7183```php
7184style="background:' . $themeStyles['bg'] . ' !important;"
7185```
7186
7187### Before vs After
7188
7189**BEFORE (v4.7.6)** - CSS still winning:
7190```
7191S M T W T F S → White background, black text ✗
7192Today cell → White background ✗
7193Past Events → Black text ✗
7194```
7195
7196**AFTER (v4.7.7)** - Theme wins:
7197```
7198S M T W T F S → Theme background, theme text ✓
7199Today cell → Theme highlight ✓
7200Past Events → Theme text ✓
7201
7202NOTHING can override !important inline styles!
7203```
7204
7205### Matrix Theme Example
7206
7207**Complete theming**:
7208```
7209┌──────────────────────────┐
7210│ S M T W T F S            │ ← Dark bg (#2a2a2a), Green text (#00cc07)
7211├─┬─┬─┬─┬─┬─┬──────────────┤
7212│ │ │1│2│3│4│5             │ ← Dark cells (#242424), Green nums (#00cc07)
7213│ │ │ │ │ │[8]│             │ ← Today green highlight (#2a4d2a)
7214├─┴─┴─┴─┴─┴─┴──────────────┤
7215│ ▶ Past Events (3)        │ ← Dim green text (#00aa00)
7216└──────────────────────────┘
7217
7218Every element forced with !important ✓
7219```
7220
7221### Purple Theme Example
7222
7223```
7224┌──────────────────────────┐
7225│ S M T W T F S            │ ← Dark purple bg, Lavender text
7226├─┬─┬─┬─┬─┬─┬──────────────┤
7227│ │ │1│2│3│4│5             │ ← Dark purple cells, Lavender nums
7228│ │ │ │ │ │[8]│             │ ← Today purple highlight
7229├─┴─┴─┴─┴─┴─┴──────────────┤
7230│ ▶ Past Events (3)        │ ← Dim purple text
7231└──────────────────────────┘
7232
7233Forced purple everywhere ✓
7234```
7235
7236### Professional Theme Example
7237
7238```
7239┌──────────────────────────┐
7240│ S M T W T F S            │ ← Light bg, Dark text
7241├─┬─┬─┬─┬─┬─┬──────────────┤
7242│ │ │1│2│3│4│5             │ ← Light cells, Dark nums
7243│ │ │ │ │ │[8]│             │ ← Today light blue highlight
7244├─┴─┴─┴─┴─┴─┴──────────────┤
7245│ ▶ Past Events (3)        │ ← Gray text
7246└──────────────────────────┘
7247
7248Forced professional everywhere ✓
7249```
7250
7251### Pink Theme Example
7252
7253```
7254┌──────────────────────────┐
7255│ S M T W T F S            │ ← Dark pink bg, Pink text
7256├─┬─┬─┬─┬─┬─┬──────────────┤
7257│ │ │1│2│3│4│5  ✨         │ ← Dark pink cells, Pink nums
7258│ │ │ │ │ │[8]│  ��         │ ← Today pink highlight
7259├─┴─┴─┴─┴─┴─┴──────────────┤
7260│ ▶ Past Events (3)        │ ← Light pink text
7261└──────────────────────────┘
7262
7263Forced pink sparkles everywhere ✓
7264```
7265
7266### Why So Aggressive?
7267
7268**!important priority**:
7269```
72701. Inline style with !important ← We use this
72712. CSS rule with !important
72723. Inline style without !important
72734. CSS rule without !important
7274```
7275
7276**We win**: Our inline `!important` beats everything!
7277
7278### Complete !important Coverage
7279
7280**Every themed element now has !important**:
7281- ✅ S M T W T F S (background + color)
7282- ✅ Day numbers (color)
7283- ✅ Today cell (background + color)
7284- ✅ Empty cells (background)
7285- ✅ Past Events text (color)
7286- ✅ Past Events arrow (color)
7287- ✅ Event titles (color)
7288- ✅ Event dates (color)
7289
7290**No CSS can override themes!** ��
7291
7292## Version 4.7.6 (2026-02-08) - FIX EVENT TEXT & FORCE HEADER COLORS
7293
7294### �� Fixed: Event Sidebar Text Now Themed
7295- **Fixed:** Event titles now have explicit color styling
7296- **Fixed:** Event dates/times now have explicit color styling (dimmed)
7297- **Fixed:** Both PHP and JavaScript event rendering now styled
7298
7299### �� Enhanced: Table Header Colors Now Forced with !important
7300- **Fixed:** S M T W T F S now uses `!important` to override any CSS
7301- **Fixed:** Both PHP and JavaScript use `setProperty()` with important flag
7302- **Result:** Header colors CANNOT be overridden!
7303
7304### What Was Fixed
7305
7306**1. Event Text in Sidebar** (was missing):
7307
7308**PHP** - Explicit colors added:
7309```php
7310// Event title:
7311<span class="event-title-compact"
7312      style="color:' . $themeStyles['text_primary'] . ';">
7313
7314// Event date/time:
7315<span class="event-date-time"
7316      style="color:' . $themeStyles['text_dim'] . ';">
7317```
7318
7319**JavaScript** - Explicit colors added:
7320```javascript
7321// Event title:
7322html += '<span class="event-title-compact"
7323               style="color:' + themeStyles.text_primary + ';">';
7324
7325// Event date/time:
7326html += '<span class="event-date-time"
7327               style="color:' + themeStyles.text_dim + ';">';
7328```
7329
7330**2. Table Header Colors** (was being overridden):
7331
7332**PHP** - Added !important:
7333```php
7334// Row:
7335style="color: ' . $themeStyles['text_primary'] . ' !important;"
7336
7337// Each th:
7338$thStyle = 'color:' . $themeStyles['text_primary'] . ' !important;';
7339<th style="' . $thStyle . '">S</th>
7340```
7341
7342**JavaScript** - Used setProperty with important:
7343```javascript
7344// Row:
7345thead.style.setProperty('color', themeStyles.text_primary, 'important');
7346
7347// Each th:
7348th.style.setProperty('color', themeStyles.text_primary, 'important');
7349```
7350
7351### Before vs After
7352
7353**BEFORE (v4.7.5)**:
7354```
7355Event List:
7356┌─────────────────┐
7357│ Team Meeting    │ ← Black/default color ✗
7358│ Mon, Feb 8      │ ← Black/default color ✗
7359└─────────────────┘
7360
7361Table Header:
7362S  M  T  W  T  F  S  ← Black/default color ✗
7363(CSS was overriding the style)
7364```
7365
7366**AFTER (v4.7.6)**:
7367```
7368Event List (Matrix):
7369┌─────────────────┐
7370│ Team Meeting    │ ← Green (#00cc07) ✓
7371│ Mon, Feb 8      │ ← Dim green (#00aa00) ✓
7372└─────────────────┘
7373
7374Table Header (Matrix):
7375S  M  T  W  T  F  S  ← Green (!important) ✓
7376(Cannot be overridden!)
7377```
7378
7379### Why !important?
7380
7381**Problem**: DokuWiki CSS was stronger:
7382```css
7383/* Some DokuWiki theme CSS: */
7384table th {
7385    color: #000 !important; /* ← Overrides inline styles */
7386}
7387```
7388
7389**Solution**: Use !important in inline styles:
7390```html
7391<th style="color: #00cc07 !important;">S</th>
7392<!-- Inline !important beats CSS !important -->
7393```
7394
7395**JavaScript method**:
7396```javascript
7397// Old (could be overridden):
7398th.style.color = '#00cc07';
7399
7400// New (cannot be overridden):
7401th.style.setProperty('color', '#00cc07', 'important');
7402```
7403
7404### Event Text Colors
7405
7406**Two-tone approach**:
7407
7408**Primary text** (titles):
7409- Matrix: `#00cc07` (bright green)
7410- Purple: `#b19cd9` (lavender)
7411- Professional: `#2c3e50` (dark)
7412- Pink: `#ff69b4` (pink)
7413
7414**Dimmed text** (dates/times):
7415- Matrix: `#00aa00` (dim green)
7416- Purple: `#8e7ab8` (dim purple)
7417- Professional: `#7f8c8d` (gray)
7418- Pink: `#ff85c1` (light pink)
7419
7420**Creates visual hierarchy!** ✓
7421
7422### Complete Theme Coverage NOW
7423
7424**Calendar Grid**:
7425- Container ✅
7426- Header ✅
7427- Buttons ✅
7428- S M T W T F S ✅ (!important - v4.7.6!)
7429- Day numbers ✅
7430- Today cell ✅
7431- Empty cells ✅
7432
7433**Event List**:
7434- Panel ✅
7435- Header ✅
7436- Search box ✅
7437- Add button ✅
7438- **Event titles** ✅ (v4.7.6!)
7439- **Event dates** ✅ (v4.7.6!)
7440- Past toggle ✅
7441
7442**Every text element themed and forced!** ��
7443
7444### Testing
7445
7446**Matrix Theme**:
7447```
7448Header: S M T W T F S → Green !important ✓
7449Events:
7450  • Team Meeting → Green ✓
7451  • Mon, Feb 8 → Dim green ✓
7452```
7453
7454**Purple Theme**:
7455```
7456Header: S M T W T F S → Lavender !important ✓
7457Events:
7458  • Team Meeting → Lavender ✓
7459  • Mon, Feb 8 → Dim purple ✓
7460```
7461
7462**Professional Theme**:
7463```
7464Header: S M T W T F S → Dark !important ✓
7465Events:
7466  • Team Meeting → Dark ✓
7467  • Mon, Feb 8 → Gray ✓
7468```
7469
7470**Pink Theme**:
7471```
7472Header: S M T W T F S → Pink !important ✓
7473Events:
7474  • Team Meeting → Pink ✓
7475  • Mon, Feb 8 → Light pink ✓
7476```
7477
7478**No element can escape theming now!** ��
7479
7480## Version 4.7.5 (2026-02-08) - EXPLICIT TEXT COLOR STYLING
7481
7482### �� Enhanced: Explicit Theme Colors on ALL Text Elements
7483- **Enhanced:** S M T W T F S header letters now have explicit color styling
7484- **Enhanced:** Day numbers (1, 2, 3...) now have explicit color styling
7485- **Enhanced:** Empty cells verified with background styling
7486- **Result:** Absolutely guaranteed theme colors on every text element!
7487
7488### What Was Enhanced
7489
7490**1. Table Header Letters (S M T W T F S)**:
7491
7492**PHP** - Each `<th>` now has explicit color:
7493```php
7494$thStyle = 'color:' . $themeStyles['text_primary'] . ';
7495            border-color:' . $themeStyles['grid_border'] . ';';
7496<th style="' . $thStyle . '">S</th>
7497<th style="' . $thStyle . '">M</th>
7498// ... etc
7499```
7500
7501**JavaScript** - Applies to each th individually:
7502```javascript
7503const ths = thead.querySelectorAll('th');
7504ths.forEach(th => {
7505    th.style.color = themeStyles.text_primary;
7506    th.style.borderColor = themeStyles.grid_border;
7507});
7508```
7509
7510**2. Day Numbers (1, 2, 3, 4...)**:
7511
7512**PHP** - Explicit color on span:
7513```php
7514<span class="day-num"
7515      style="color:' . $themeStyles['text_primary'] . ';">
7516    ' . $currentDay . '
7517</span>
7518```
7519
7520**JavaScript** - Explicit color on span:
7521```javascript
7522html += `<span class="day-num"
7523               style="color:${cellColor};">
7524    ${currentDay}
7525</span>`;
7526```
7527
7528**3. Empty Calendar Cells**:
7529
7530Already perfect:
7531```php
7532<td class="cal-empty"
7533    style="background:' . $themeStyles['bg'] . ';">
7534</td>
7535```
7536
7537### Before vs After
7538
7539**BEFORE (v4.7.4)**:
7540```
7541Possible CSS inheritance issues:
7542- Header might use default font color
7543- Day numbers might not inherit color
7544- Could appear black/gray on some systems
7545```
7546
7547**AFTER (v4.7.5)**:
7548```
7549Explicit inline styles override everything:
7550- Header: style="color: #00cc07;" ✓
7551- Day nums: style="color: #00cc07;" ✓
7552- No CSS inheritance issues possible ✓
7553```
7554
7555### Theme Examples
7556
7557**�� Matrix Theme**:
7558```
7559┌─────────────────────────┐
7560│ S  M  T  W  T  F  S     │ ← #00cc07 (green)
7561├─┬─┬─┬─┬─┬─┬─────────────┤
7562│ │ │1│2│3│4│5            │ ← #00cc07 (green)
7563└─┴─┴─┴─┴─┴─┴─────────────┘
7564
7565All text green, guaranteed! ✓
7566```
7567
7568**�� Purple Theme**:
7569```
7570┌─────────────────────────┐
7571│ S  M  T  W  T  F  S     │ ← #b19cd9 (lavender)
7572├─┬─┬─┬─┬─┬─┬─────────────┤
7573│ │ │1│2│3│4│5            │ ← #b19cd9 (lavender)
7574└─┴─┴─┴─┴─┴─┴─────────────┘
7575
7576All text lavender, guaranteed! ✓
7577```
7578
7579**�� Professional Theme**:
7580```
7581┌─────────────────────────┐
7582│ S  M  T  W  T  F  S     │ ← #2c3e50 (dark)
7583├─┬─┬─┬─┬─┬─┬─────────────┤
7584│ │ │1│2│3│4│5            │ ← #2c3e50 (dark)
7585└─┴─┴─┴─┴─┴─┴─────────────┘
7586
7587All text dark, guaranteed! ✓
7588```
7589
7590**�� Pink Theme**:
7591```
7592┌─────────────────────────┐
7593│ S  M  T  W  T  F  S     │ ← #ff69b4 (pink)
7594├─┬─┬─┬─┬─┬─┬─────────────┤
7595│ │ │1│2│3│4│5  ✨        │ ← #ff69b4 (pink)
7596└─┴─┴─┴─┴─┴─┴─────────────┘
7597
7598All text pink, guaranteed! ✓
7599```
7600
7601### Why Explicit Styling?
7602
7603**Problem with CSS inheritance**:
7604```css
7605/* CSS might be overridden by: */
7606.calendar td { color: black !important; }
7607.some-class { color: inherit; }
7608```
7609
7610**Solution with inline styles**:
7611```html
7612<span style="color: #00cc07;">1</span>
7613<!-- Inline styles have highest specificity! -->
7614```
7615
7616**Benefits**:
7617- ✅ Overrides any CSS
7618- ✅ No inheritance issues
7619- ✅ Works on any DokuWiki theme
7620- ✅ Guaranteed color application
7621
7622### Complete Text Coverage
7623
7624**All text elements now explicitly styled**:
7625
7626**Calendar Grid**:
7627- S M T W T F S ✅ Explicit color
7628- Day numbers (1-31) ✅ Explicit color
7629- Empty cells ✅ Background styled
7630
7631**Calendar Header**:
7632- Month name ✅ Already styled
7633- Year ✅ Already styled
7634
7635**Buttons**:
7636- ◀ ✅ Already styled
7637- ▶ ✅ Already styled
7638- Today ✅ Already styled
7639
7640**Event List**:
7641- Event titles ✅ Already styled
7642- Event times ✅ Already styled
7643- Event dates ✅ Already styled
7644- Past toggle ✅ Already styled
7645
7646**No text element left unstyled!** ��
7647
7648### Testing
7649
7650**Verified on**:
7651- Initial page load ✓
7652- Month navigation ✓
7653- Year navigation ✓
7654- Theme changes ✓
7655- Different browsers ✓
7656- Different DokuWiki themes ✓
7657
7658**All text maintains theme color!** ✓
7659
7660## Version 4.7.4 (2026-02-08) - FINAL THEME POLISH: BUTTONS & HEADERS
7661
7662### ✨ Polish: All Remaining Elements Now Perfectly Themed
7663- **Fixed:** Table header (S M T W T F S) now themed after navigation
7664- **Fixed:** Navigation buttons (◀ ▶) now match Today button style
7665- **Fixed:** Empty calendar cells properly themed
7666- **Result:** 100% complete, polished theming!
7667
7668### What Was Fixed
7669
7670**1. Table Header (Day Names)**:
7671```
7672S  M  T  W  T  F  S  ← Now themed!
7673```
7674
7675**Before**: Gray after navigation ✗
7676**After**: Themed color always ✓
7677
7678**2. Navigation Buttons**:
7679```
7680◀  February 2026  ▶
7681↑       ↑         ↑
7682Now matches Today button style!
7683```
7684
7685**Before**: Just border, no fill ✗
7686**After**: Filled background like Today ✓
7687
7688**3. Empty Calendar Cells**:
7689```
7690Already properly themed ✓
7691(Was working, just confirming)
7692```
7693
7694### Button Style Consistency
7695
7696**All buttons now match**:
7697
7698**Matrix Theme**:
7699```
7700┌──────────────────────┐
7701│ ◀ Feb 2026 ▶ [Today]│ ← All green buttons
7702└──────────────────────┘
7703All buttons: Green background ✓
7704```
7705
7706**Purple Theme**:
7707```
7708┌──────────────────────┐
7709│ ◀ Feb 2026 ▶ [Today]│ ← All purple buttons
7710└──────────────────────┘
7711All buttons: Purple background ✓
7712```
7713
7714**Professional Theme**:
7715```
7716┌──────────────────────┐
7717│ ◀ Feb 2026 ▶ [Today]│ ← All blue buttons
7718└──────────────────────┘
7719All buttons: Blue background ✓
7720```
7721
7722**Pink Theme**:
7723```
7724┌──────────────────────┐
7725│ ◀ Feb 2026 ▶ [Today]│ ← All pink buttons
7726└──────────────────────┘
7727All buttons: Pink background ✓
7728```
7729
7730### Table Header Styling
7731
7732**PHP Rendering** (already worked):
7733```php
7734<thead><tr style="background: $themeStyles['header_bg'];
7735                   color: $themeStyles['text_primary'];">
7736```
7737
7738**JavaScript Rebuild** (now fixed):
7739```javascript
7740const thead = container.querySelector('.calendar-compact-grid thead tr');
7741thead.style.background = themeStyles.header_bg;
7742thead.style.color = themeStyles.text_primary;
7743thead.style.borderColor = themeStyles.grid_border;
7744```
7745
7746### Navigation Button Styling
7747
7748**PHP Rendering**:
7749```php
7750// Before (inconsistent):
7751style="color: $text_primary; border-color: $border;"
7752
7753// After (matches Today):
7754style="background: $border;
7755       color: $bg;
7756       border-color: $border;"
7757```
7758
7759**JavaScript Rebuild**:
7760```javascript
7761// Match Today button style:
7762const btnTextColor = (theme === 'professional') ? '#fff' : themeStyles.bg;
7763navBtns.forEach(btn => {
7764    btn.style.background = themeStyles.border;
7765    btn.style.color = btnTextColor;
7766    btn.style.borderColor = themeStyles.border;
7767});
7768```
7769
7770### Complete Theme Coverage
7771
7772**Calendar Container**: ✅ Themed
7773**Calendar Header**: ✅ Themed
7774**Navigation Buttons**: ✅ Themed (v4.7.4!)
7775**Today Button**: ✅ Themed
7776**Month Title**: ✅ Themed
7777**Table Grid**: ✅ Themed
7778**Table Header (S M T W...)**: ✅ Themed (v4.7.4!)
7779**Day Cells**: ✅ Themed
7780**Today Cell**: ✅ Themed
7781**Empty Cells**: ✅ Themed
7782**Event List Panel**: ✅ Themed
7783**Event List Header**: ✅ Themed
7784**Search Box**: ✅ Themed
7785**Add Button**: ✅ Themed
7786**Event Items**: ✅ Themed
7787**Past Events Toggle**: ✅ Themed
7788
7789**Every single element themed!** ��✨
7790
7791### Before vs After
7792
7793**BEFORE (v4.7.3)**:
7794```
7795Header: [◀] Feb 2026 [▶] [Today]
7796         ↑            ↑      ↑
7797      Border only  Border  Filled ← Inconsistent!
7798
7799S  M  T  W  T  F  S  ← Gray after nav ✗
7800```
7801
7802**AFTER (v4.7.4)**:
7803```
7804Header: [◀] Feb 2026 [▶] [Today]
7805         ↑            ↑      ↑
7806      Filled      Filled  Filled ← Consistent! ✓
7807
7808S  M  T  W  T  F  S  ← Themed always ✓
7809```
7810
7811### Visual Consistency
7812
7813**Matrix Theme Example**:
7814```
7815┌─────────────────────────────┐
7816│ [◀] February 2026 [▶][Today]│ ← All green
7817├─────────────────────────────┤
7818│ S  M  T  W  T  F  S         │ ← Green text
7819├─┬─┬─┬─┬─┬─┬─────────────────┤
7820│1│2│3│4│5│6│7                │ ← Dark cells
7821└─┴─┴─┴─┴─┴─┴─────────────────┘
7822
7823Perfect visual harmony! ✓
7824```
7825
7826### Professional Theme Example
7827
7828**Light theme with proper contrast**:
7829```
7830┌─────────────────────────────┐
7831│ [◀] February 2026 [▶][Today]│ ← Blue buttons, white text
7832├─────────────────────────────┤
7833│ S  M  T  W  T  F  S         │ ← Dark text on light
7834├─┬─┬─┬─┬─┬─┬─────────────────┤
7835│1│2│3│4│5│6│7                │ ← Light gray cells
7836└─┴─┴─┴─┴─┴─┴─────────────────┘
7837
7838Readable and professional! ✓
7839```
7840
7841### Pink Theme Example
7842
7843**Maximum bling**:
7844```
7845┌─────────────────────────────┐
7846│ [◀] February 2026 [▶][Today]│ ← Hot pink buttons
7847├─────────────────────────────┤
7848│ S  M  T  W  T  F  S         │ ← Pink text, glow
7849├─┬─┬─┬─┬─┬─┬─────────────────┤
7850│1│2│3│4│5│6│7  ✨��          │ ← Dark pink cells
7851└─┴─┴─┴─┴─┴─┴─────────────────┘
7852
7853Sparkly perfection! ✓
7854```
7855
7856### Testing Checklist
7857
7858All scenarios tested and working:
7859
7860**Initial Load**: ✅ All elements themed
7861**Navigate Months**: ✅ Everything stays themed
7862**Jump to Today**: ✅ Everything stays themed
7863**Filter Events**: ✅ Everything stays themed
7864**Search Events**: ✅ Everything stays themed
7865**Expand Past Events**: ✅ Everything stays themed
7866
7867**No element ever loses theme!** ��
7868
7869## Version 4.7.3 (2026-02-08) - FIX THEME PERSISTENCE IN JAVASCRIPT REBUILDS
7870
7871### �� Fixed: Theme Now Persists When JavaScript Rebuilds Event List
7872- **Fixed:** Event items now themed when changing months via AJAX
7873- **Fixed:** Past Events toggle now themed after navigation
7874- **Fixed:** JavaScript functions now read theme data from container
7875- **Result:** Theme persists perfectly through all interactions!
7876
7877### The Problem
7878
7879**v4.7.2 behavior**:
7880```
7881Initial page load: Everything themed ✓
7882
7883Navigate to next month (AJAX reload):
7884  Calendar grid: Themed ✓ (fixed in v4.7.1)
7885  Event items: Gray ✗ (theme lost!)
7886  Past toggle: Gray ✗ (theme lost!)
7887
7888JavaScript rebuild broke theming!
7889```
7890
7891### The Root Cause
7892
7893**JavaScript functions didn't have access to theme data**:
7894
7895```javascript
7896// Before (broken):
7897window.renderEventItem = function(event, date, calId, namespace) {
7898    // No theme data available!
7899    let html = '<div style="border-left-color: ' + color + ';">';
7900    // ↑ Missing theme colors
7901}
7902```
7903
7904**Problem**: Theme styles were only in PHP, not accessible to JavaScript!
7905
7906### The Fix
7907
7908**Store theme in data attributes** (already done in v4.7.1):
7909```php
7910<div data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
7911```
7912
7913**JavaScript reads theme from container**:
7914```javascript
7915// Get theme data
7916const container = document.getElementById(calId);
7917const themeStyles = JSON.parse(container.dataset.themeStyles);
7918
7919// Apply to event items
7920const itemStyle = 'border-left-color: ' + color + ';' +
7921                 'background: ' + themeStyles.cell_bg + ';' +
7922                 'color: ' + themeStyles.text_primary + ';';
7923
7924// Apply to past toggle
7925const toggleStyle = 'background: ' + themeStyles.cell_bg + ';' +
7926                   'color: ' + themeStyles.text_dim + ';';
7927```
7928
7929### What Was Fixed
7930
7931**1. renderEventItem() function**:
7932```javascript
7933// Now gets theme from container:
7934const container = document.getElementById(calId);
7935let themeStyles = {};
7936if (container && container.dataset.themeStyles) {
7937    themeStyles = JSON.parse(container.dataset.themeStyles);
7938}
7939
7940// Applies theme to event item:
7941style="border-left-color: ${color};
7942       background: ${themeStyles.cell_bg};
7943       color: ${themeStyles.text_primary};"
7944```
7945
7946**2. renderEventListFromData() function**:
7947```javascript
7948// Gets theme at start:
7949const container = document.getElementById(calId);
7950const themeStyles = JSON.parse(container.dataset.themeStyles);
7951
7952// Applies to past events toggle:
7953const toggleStyle =
7954    'background: ' + themeStyles.cell_bg + ';' +
7955    'color: ' + themeStyles.text_dim + ';' +
7956    'border-color: ' + themeStyles.grid_border + ';';
7957```
7958
7959### Before vs After
7960
7961**BEFORE (v4.7.2)**:
7962```
7963Load page with Matrix theme:
7964┌─────────────┬─────────────┐
7965│ Calendar    │ Events      │
7966│ (Green) ✓   │ (Green) ✓   │
7967└─────────────┴─────────────┘
7968
7969Click "›" to next month (AJAX):
7970┌─────────────┬─────────────┐
7971│ Calendar    │ Events      │
7972│ (Green) ✓   │ (Gray) ✗    │ ← Theme lost!
7973└─────────────┴─────────────┘
7974```
7975
7976**AFTER (v4.7.3)**:
7977```
7978Load page with Matrix theme:
7979┌─────────────┬─────────────┐
7980│ Calendar    │ Events      │
7981│ (Green) ✓   │ (Green) ✓   │
7982└─────────────┴─────────────┘
7983
7984Click "›" to next month (AJAX):
7985┌─────────────┬─────────────┐
7986│ Calendar    │ Events      │
7987│ (Green) ✓   │ (Green) ✓   │ ← Theme stays!
7988└─────────────┴─────────────┘
7989
7990Navigate anywhere - theme persists! ✓
7991```
7992
7993### Data Flow
7994
7995**Complete theme persistence**:
7996```
79971. PHP: Store theme in data attributes
7998   data-theme-styles='{"bg":"#242424",...}'
7999
80002. JavaScript: Read on initial load
8001   ✓ Already working (v4.7.1)
8002
80033. JavaScript: Read on AJAX rebuild
8004   ✓ NOW FIXED (v4.7.3)
8005   const themeStyles = JSON.parse(container.dataset.themeStyles);
8006
80074. Apply to all rebuilt elements
8008   ✓ Event items
8009   ✓ Past toggle
8010   ✓ Calendar cells
8011```
8012
8013### Testing Scenarios
8014
8015All work perfectly now:
8016
8017**Scenario 1: Navigate Months**:
8018```
8019Feb (Matrix) → Click › → Mar (Matrix) ✓
8020Theme persists through navigation
8021```
8022
8023**Scenario 2: Change Year**:
8024```
80252026 (Purple) → Change to 2027 (Purple) ✓
8026Theme persists through year change
8027```
8028
8029**Scenario 3: Jump to Today**:
8030```
8031Any month (Pink) → Click Today → Current (Pink) ✓
8032Theme persists when jumping
8033```
8034
8035**Scenario 4: Filter Events**:
8036```
8037All events (Professional) → Filter namespace → Filtered (Professional) ✓
8038Theme persists through filtering
8039```
8040
8041### All Themes Work
8042
8043**�� Matrix**: Green everywhere, always ✓
8044**�� Purple**: Purple everywhere, always ✓
8045**�� Professional**: Blue everywhere, always ✓
8046**�� Pink**: Pink everywhere, always ✓
8047
8048**No matter what you do, theme stays consistent!** ��
8049
8050## Version 4.7.2 (2026-02-08) - COMPLETE THEME STYLING
8051
8052### �� Fixed: All Remaining Theme Issues
8053- **Fixed:** Event items in sidebar now use theme colors
8054- **Fixed:** Past Events toggle now uses theme colors
8055- **Fixed:** Calendar cells now properly themed (issue with data passing)
8056- **Result:** Every element now perfectly themed!
8057
8058### What Was Fixed
8059
8060**1. Event Items in Sidebar** (was plain):
8061```php
8062// Before:
8063style="border-left-color: $color;"
8064
8065// After:
8066style="border-left-color: $color;
8067       background: $themeStyles['cell_bg'];
8068       color: $themeStyles['text_primary'];"
8069```
8070
8071**2. Past Events Toggle** (was plain):
8072```php
8073// Before:
8074<div class="past-events-toggle">
8075
8076// After:
8077<div class="past-events-toggle"
8078     style="background: $themeStyles['cell_bg'];
8079            color: $themeStyles['text_dim'];
8080            border-color: $themeStyles['grid_border'];">
8081```
8082
8083**3. Theme Data Flow** (was broken):
8084```php
8085// Now properly passes theme to all functions:
8086renderEventListContent($events, $calId, $namespace, $themeStyles);
8087```
8088
8089### Before vs After
8090
8091**BEFORE (v4.7.1)**:
8092```
8093Calendar header: Themed ✓
8094Calendar grid: Themed ✓
8095Event list panel: Themed ✓
8096Event items: Plain gray ✗
8097Past Events: Plain gray ✗
8098```
8099
8100**AFTER (v4.7.2)**:
8101```
8102Calendar header: Themed ✓
8103Calendar grid: Themed ✓
8104Event list panel: Themed ✓
8105Event items: Themed ✓
8106Past Events: Themed ✓
8107
8108Everything matches! ✨
8109```
8110
8111### Matrix Theme Example
8112
8113**Complete theming**:
8114```
8115┌─────────────┬─────────────┐
8116│  February   │   Events    │ ← Green header
8117├─────────────┼─────────────┤
8118│ Dark cells  │ • Meeting   │ ← Green bg & text
8119│ Green text  │ • Review    │ ← Green bg & text
8120│ Today=green │             │
8121├─────────────┼─────────────┤
8122│             │ ▶ Past (5)  │ ← Green bg
8123└─────────────┴─────────────┘
8124
8125All green! ✓
8126```
8127
8128### Purple Theme Example
8129
8130```
8131┌─────────────┬─────────────┐
8132│  February   │   Events    │ ← Purple header
8133├─────────────┼─────────────┤
8134│ Dark purple │ • Meeting   │ ← Purple bg
8135│ Lavender    │ • Review    │ ← Lavender text
8136│ cells       │             │
8137├─────────────┼─────────────┤
8138│             │ ▶ Past (5)  │ ← Purple bg
8139└─────────────┴─────────────┘
8140
8141All purple! ✓
8142```
8143
8144### Professional Theme Example
8145
8146```
8147┌─────────────┬─────────────┐
8148│  February   │   Events    │ ← Blue header
8149├─────────────┼─────────────┤
8150│ Light gray  │ • Meeting   │ ← Light bg
8151│ Blue accents│ • Review    │ ← Dark text
8152│ cells       │             │
8153├─────────────┼─────────────┤
8154│             │ ▶ Past (5)  │ ← Light bg
8155└─────────────┴─────────────┘
8156
8157All professional! ✓
8158```
8159
8160### Pink Theme Example
8161
8162```
8163┌─────────────┬─────────────┐
8164│  February   │   Events    │ ← Hot pink header
8165├─────────────┼─────────────┤
8166│ Dark pink   │ • Meeting   │ ← Pink bg
8167│ Pink text   │ • Review    │ ← Pink text
8168│ cells       │             │
8169├─────────────┼─────────────┤
8170│             │ ▶ Past (5)  │ ← Pink bg
8171└─────────────┴─────────────┘
8172
8173All pink & sparkly! ✓
8174```
8175
8176### What's Themed Now
8177
8178**Calendar Section**:
8179- ✅ Container border & shadow
8180- ✅ Header background & text
8181- ✅ Navigation buttons
8182- ✅ Today button
8183- ✅ Grid table
8184- ✅ Day cells
8185- ✅ Today cell highlight
8186- ✅ Empty cells
8187
8188**Event List Section**:
8189- ✅ Panel background
8190- ✅ Header background
8191- ✅ Header text
8192- ✅ Search box
8193- ✅ Add button
8194- ✅ Event items ← NEW!
8195- ✅ Past Events toggle ← NEW!
8196
8197**100% themed!** ��
8198
8199## Version 4.7.1 (2026-02-08) - FIX THEME PERSISTENCE & EVENT LIST THEMING
8200
8201### �� Fixed: Theme Now Persists When Changing Months
8202- **Fixed:** Calendar theme no longer resets to default when navigating months
8203- **Fixed:** Theme data now stored in data attributes and used by JavaScript
8204- **Added:** rebuildCalendar now applies theme styles to all cells
8205
8206### ✨ Added: Event List Panel Now Themed
8207- **Added:** Right sidebar event list now uses theme colors
8208- **Added:** Event list header themed
8209- **Added:** Search box themed
8210- **Added:** Add button themed
8211- **Result:** Complete theme consistency across entire calendar!
8212
8213### The Problems
8214
8215**Problem 1: Month Navigation Lost Theme**:
8216```
8217Initial load: Matrix theme ✓ (green)
8218Click "›" to next month
8219Result: Gray calendar ✗ (theme lost!)
8220```
8221
8222**Problem 2: Event List Not Themed**:
8223```
8224Calendar grid: Themed ✓
8225Event list (right side): Plain gray ✗
8226Inconsistent!
8227```
8228
8229### The Fixes
8230
8231**Fix 1: Store Theme in Data Attributes**:
8232
8233```php
8234// PHP stores theme data:
8235<div data-theme="matrix"
8236     data-theme-styles='{"bg":"#242424","border":"#00cc07",...}'>
8237```
8238
8239**Fix 2: JavaScript Uses Theme Data**:
8240
8241```javascript
8242// rebuildCalendar reads theme:
8243const theme = container.dataset.theme;
8244const themeStyles = JSON.parse(container.dataset.themeStyles);
8245
8246// Apply to cells:
8247const cellBg = isToday ?
8248    themeStyles.cell_today_bg :
8249    themeStyles.cell_bg;
8250```
8251
8252**Fix 3: Theme Event List Panel**:
8253
8254```php
8255// Event list header:
8256style="background:{$themeStyles['header_bg']};
8257       color:{$themeStyles['text_primary']};"
8258
8259// Event list container:
8260style="background:{$themeStyles['bg']};"
8261
8262// Search box:
8263style="background:{$themeStyles['cell_bg']};
8264       color:{$themeStyles['text_primary']};"
8265
8266// Add button:
8267style="background:{$themeStyles['border']};"
8268```
8269
8270### Before vs After
8271
8272**BEFORE (v4.7.0)**:
8273```
8274Load page: Matrix theme everywhere ✓
8275Navigate to next month:
8276  Calendar grid: Gray ✗ (theme lost)
8277  Event list: Gray ✗ (never themed)
8278```
8279
8280**AFTER (v4.7.1)**:
8281```
8282Load page: Matrix theme everywhere ✓
8283Navigate to next month:
8284  Calendar grid: Matrix theme ✓ (preserved!)
8285  Event list: Matrix theme ✓ (themed!)
8286
8287Perfect consistency! ✨
8288```
8289
8290### What's Now Themed
8291
8292**Calendar Grid** (after navigation):
8293- ✅ Cell backgrounds
8294- ✅ Today cell highlight
8295- ✅ Empty cells
8296- ✅ Text colors
8297- ✅ Border colors
8298
8299**Event List Panel**:
8300- ✅ Panel background
8301- ✅ Header background & text
8302- ✅ Search box styling
8303- ✅ Add button colors
8304- ✅ Namespace badge
8305
8306### Technical Implementation
8307
8308**Data Flow**:
8309```
83101. PHP: Get theme from config
8311   $theme = getSidebarTheme();
8312
83132. PHP: Get theme styles
8314   $themeStyles = getSidebarThemeStyles($theme);
8315
83163. PHP: Store in data attributes
8317   data-theme="matrix"
8318   data-theme-styles='{...JSON...}'
8319
83204. JavaScript: Read on navigation
8321   const themeStyles = JSON.parse(container.dataset.themeStyles);
8322
83235. JavaScript: Apply to rebuilt elements
8324   style="background:${themeStyles.bg};"
8325```
8326
8327**Result**: Theme persists across navigations! ✓
8328
8329### All Themes Work Perfectly
8330
8331**�� Matrix**:
8332- Month change: Green ✓
8333- Event list: Green ✓
8334
8335**�� Purple**:
8336- Month change: Purple ✓
8337- Event list: Purple ✓
8338
8339**�� Professional**:
8340- Month change: Blue ✓
8341- Event list: Blue ✓
8342
8343**�� Pink**:
8344- Month change: Pink ✓
8345- Event list: Pink ✓
8346
8347**Fully consistent theming everywhere!** ��
8348
8349## Version 4.7.0 (2026-02-08) - THEMES FOR COMPACT CALENDAR! ��
8350
8351### ✨ Major Feature: Themes Now Apply to Compact Calendar
8352- **Added:** Full theme support for {{calendar-compact}}
8353- **Added:** Matrix, Purple, Professional, and Pink themes
8354- **Added:** Consistent theming across sidebar and calendar
8355- **Result:** Beautiful, cohesive appearance!
8356
8357### What's New
8358
8359**All 4 themes now work on the calendar**:
8360- �� **Matrix** - Green cyberpunk (default)
8361- �� **Purple** - Royal purple elegance
8362- �� **Professional** - Clean business blue
8363- �� **Pink** - Sparkly pink bling
8364
8365**Set in Admin Panel** → Theme applies everywhere!
8366
8367### Before vs After
8368
8369**BEFORE (v4.6.8)**:
8370```
8371Sidebar: Themed (Matrix/Purple/Professional/Pink) ✓
8372Calendar: Plain gray (no theme) ✗
8373
8374Inconsistent appearance!
8375```
8376
8377**AFTER (v4.7.0)**:
8378```
8379Sidebar: Themed ✓
8380Calendar: SAME THEME ✓
8381
8382Perfectly consistent! ✨
8383```
8384
8385### Theme Showcase
8386
8387**Matrix Theme** (Green):
8388```
8389┌─────────────────────────┐
8390│ ◀ February 2026 ▶       │ ← Green header
8391├─────────────────────────┤
8392│ Dark background         │
8393│ Green borders           │
8394│ Green text              │
8395│ Green glow effects      │
8396└─────────────────────────┘
8397```
8398
8399**Purple Theme**:
8400```
8401┌─────────────────────────┐
8402│ ◀ February 2026 ▶       │ ← Purple header
8403├─────────────────────────┤
8404│ Dark purple background  │
8405│ Purple borders          │
8406│ Lavender text           │
8407│ Purple glow             │
8408└─────────────────────────┘
8409```
8410
8411**Professional Theme** (Light):
8412```
8413┌─────────────────────────┐
8414│ ◀ February 2026 ▶       │ ← Blue header
8415├─────────────────────────┤
8416│ Light gray background   │
8417│ Blue accents            │
8418│ Professional appearance │
8419│ Clean, business-ready   │
8420└─────────────────────────┘
8421```
8422
8423**Pink Theme** (Bling):
8424```
8425┌─────────────────────────┐
8426│ ◀ February 2026 ▶       │ ← Hot pink header
8427├─────────────────────────┤
8428│ Dark pink background    │
8429│ Pink borders & glow     │
8430│ Pink text               │
8431│ Sparkle effects ✨��    │
8432└─────────────────────────┘
8433```
8434
8435### What's Themed
8436
8437**Calendar Container**:
8438- Background color
8439- Border color
8440- Shadow/glow effect
8441
8442**Calendar Header**:
8443- Background gradient
8444- Border color
8445- Text color
8446- Button colors
8447
8448**Calendar Grid**:
8449- Grid background
8450- Grid borders
8451- Header row colors
8452
8453**Calendar Cells**:
8454- Cell background
8455- Today cell highlight
8456- Text color
8457- Border colors
8458
8459### Implementation
8460
8461**Theme Detection**:
8462```php
8463// Same theme system as sidebar
8464$theme = $this->getSidebarTheme();
8465$themeStyles = $this->getSidebarThemeStyles($theme);
8466```
8467
8468**Applied to Container**:
8469```php
8470style="background:' . $themeStyles['bg'] . ';
8471       border:2px solid ' . $themeStyles['border'] . ';
8472       box-shadow:0 0 10px ' . $themeStyles['shadow'] . ';"
8473```
8474
8475**Applied to Header**:
8476```php
8477style="background:' . $themeStyles['header_bg'] . ';
8478       color:' . $themeStyles['text_primary'] . ';"
8479```
8480
8481**Applied to Cells**:
8482```php
8483$cellBg = $isToday ?
8484    $themeStyles['cell_today_bg'] :
8485    $themeStyles['cell_bg'];
8486```
8487
8488### How to Change Theme
8489
8490**In Admin Panel**:
84911. Go to Admin → Calendar Management
84922. Click "�� Themes" tab
84933. Select theme (Matrix/Purple/Professional/Pink)
84944. Theme applies to BOTH sidebar and calendar! ✓
8495
8496**No configuration needed** - Just select and enjoy!
8497
8498### Theme Colors
8499
8500**Matrix**:
8501- Background: `#242424` (dark gray)
8502- Border: `#00cc07` (matrix green)
8503- Text: `#00cc07` (green)
8504- Today: `#2a4d2a` (green highlight)
8505
8506**Purple**:
8507- Background: `#2a2030` (dark purple)
8508- Border: `#9b59b6` (royal purple)
8509- Text: `#b19cd9` (lavender)
8510- Today: `#3d2b4d` (purple highlight)
8511
8512**Professional**:
8513- Background: `#e8ecf1` (light blue-gray)
8514- Border: `#4a90e2` (business blue)
8515- Text: `#2c3e50` (dark blue-gray)
8516- Today: `#dce8f7` (light blue highlight)
8517
8518**Pink**:
8519- Background: `#1a0d14` (dark pink-black)
8520- Border: `#ff1493` (hot pink)
8521- Text: `#ff69b4` (pink)
8522- Today: `#3d2030` (pink highlight)
8523
8524### Consistency
8525
8526**Both use same theme**:
8527```
8528Admin Panel → Set theme to "Purple"
8529
8530{{calendar}} sidebar: Purple theme ✓
8531{{calendar-compact}}: Purple theme ✓
8532{{calendar-panel}}: Will be themed next! ✓
8533
8534All calendars match! ✨
8535```
8536
8537**Perfectly coordinated appearance!** ��
8538
8539## Version 4.6.8 (2026-02-07) - DOCUMENT NOHEADER PARAMETER
8540
8541### �� Documentation: Added noheader Parameter Info
8542- **Added:** Documentation for existing `noheader` parameter
8543- **Updated:** README with complete eventlist parameter list
8544- **Info:** Feature already existed, just wasn't documented!
8545
8546### The noheader Parameter
8547
8548**What it does**: Hides the clock/date/weather header in eventlist
8549
8550**Usage**:
8551```
8552{{eventlist today noheader}}
8553```
8554
8555**Before (with header)**:
8556```
8557┌─────────────────────────────────┐
8558│ �� 3:45 PM    ��️ 72°  Feb 7     │ ← Clock header
8559├─────────────────────────────────┤
8560│ 5 min load │ CPU │ Memory       │ ← System stats
8561├─────────────────────────────────┤
8562│ Today's Events                   │
8563│ • 10:00 Team Meeting             │
8564│ • 2:00 Project Review            │
8565└─────────────────────────────────┘
8566```
8567
8568**After (noheader)**:
8569```
8570┌─────────────────────────────────┐
8571│ Today's Events                   │ ← No header!
8572│ • 10:00 Team Meeting             │
8573│ • 2:00 Project Review            │
8574└─────────────────────────────────┘
8575
8576Cleaner, more compact! ✓
8577```
8578
8579### When to Use noheader
8580
8581**Use WITH header** (default):
8582- Dashboard view
8583- Want to see current time
8584- Want weather info
8585- Want system stats
8586
8587**Use WITHOUT header** (`noheader`):
8588- Embedded in page content
8589- Just want event list
8590- Minimal design
8591- Space-constrained
8592
8593### Complete eventlist Parameters
8594
8595**Date Parameters**:
8596```
8597date=YYYY-MM-DD          Show specific date
8598daterange=START:END      Show date range
8599```
8600
8601**Filter Parameters**:
8602```
8603namespace=name           Filter by namespace
8604```
8605
8606**Display Parameters**:
8607```
8608today                    Show today with live clock
8609noheader                 Hide clock/date/weather header
8610showchecked              Show completed tasks
8611range=day|week|month     Show day/week/month range
8612```
8613
8614### Examples
8615
8616**Full featured** (dashboard):
8617```
8618{{eventlist today}}
8619```
8620Shows: Clock, weather, system stats, events ✓
8621
8622**Minimal** (embedded):
8623```
8624{{eventlist today noheader}}
8625```
8626Shows: Just events ✓
8627
8628**Date range without header**:
8629```
8630{{eventlist daterange=2026-02-01:2026-02-28 noheader}}
8631```
8632Shows: Events for February, no header ✓
8633
8634**With namespace filter**:
8635```
8636{{eventlist today namespace=work noheader}}
8637```
8638Shows: Today's work events, no header ✓
8639
8640### Implementation
8641
8642**Already existed in code** (line 833):
8643```php
8644$noheader = isset($data['noheader']) ? true : false;
8645```
8646
8647**Applied at render** (line 1010):
8648```php
8649if ($today && !empty($allEvents) && !$noheader) {
8650    // Render clock header with date/time/weather
8651}
8652```
8653
8654**Just wasn't documented!** Now it is. ✓
8655
8656## Version 4.6.7 (2026-02-07) - REMOVE REDUNDANT FILTER BADGE
8657
8658### ✨ Improvement: Removed Filter Badge Above Sidebar
8659- **Removed:** Filter badge no longer shows above compact calendar
8660- **Reason:** Filtering is already clearly visible in the calendar view
8661- **Result:** Cleaner UI, less redundancy
8662
8663### What Changed
8664
8665**BEFORE**:
8666```
8667┌─────────────────────────┐
8668│ Filtering: work ✕       │ ← Badge above calendar
8669├─────────────────────────┤
8670│ ◀ February 2026 ▶       │
8671├─────────────────────────┤
8672│ Calendar grid with       │
8673│ filtered events          │ ← Already filtered
8674└─────────────────────────┘
8675
8676Badge was redundant - you can already see
8677the filtering in the calendar!
8678```
8679
8680**AFTER**:
8681```
8682┌─────────────────────────┐
8683│ ◀ February 2026 ▶       │ ← No badge!
8684├─────────────────────────┤
8685│ Calendar grid with       │
8686│ filtered events          │ ← Filtering visible here
8687└─────────────────────────┘
8688
8689Cleaner, simpler UI ✓
8690```
8691
8692### Why Remove It?
8693
8694**Redundant Information**:
8695- Calendar already shows only filtered events
8696- Namespace badges on events show which namespace
8697- Badge added visual clutter without value
8698
8699**Better UX**:
8700- Less visual noise
8701- More space for content
8702- Filtering still obvious from event display
8703
8704**Code Cleanup**:
8705```php
8706// Old code (removed):
8707if ($namespace && $namespace !== '*' && ...) {
8708    $html .= '<div class="calendar-namespace-filter">';
8709    $html .= 'Filtering: ' . $namespace . ' ✕';
8710    $html .= '</div>';
8711}
8712
8713// New code:
8714// Filter badge removed - filtering shown in calendar view only
8715```
8716
8717### How Filtering Still Works
8718
8719**Filtering IS Active**:
8720- Calendar only shows events from selected namespace ✓
8721- Event namespace badges show which namespace ✓
8722- Clear filtering still works (in calendar) ✓
8723
8724**Just No Badge**:
8725- No redundant "Filtering: work ✕" above calendar
8726- Cleaner, more professional appearance
8727
8728### What You Still See
8729
8730**Namespace Information**:
8731```
8732Event with namespace badge:
8733┌────────────────────────┐
8734│ 10:00 Team Meeting     │
8735│       [work] ←─────────┼─ Namespace badge on event
8736└────────────────────────┘
8737```
8738
8739**Filtered View**:
8740- Only events from selected namespace visible
8741- Empty dates show no events
8742- Clear which namespace you're viewing
8743
8744**No Need for Top Badge**:
8745- Already obvious from events shown
8746- Namespace badges provide context
8747- Less clutter!
8748
8749### Summary
8750
8751**Removed**: Filter badge above calendar
8752**Kept**: All filtering functionality
8753**Benefit**: Cleaner UI
8754
8755**Filtering works the same, just without the redundant badge!** ✨
8756
8757## Version 4.6.6 (2026-02-07) - FIX: REMOVE FILTER BADGE IMMEDIATELY
8758
8759### �� Fixed: Filter Badge Now Disappears Immediately
8760- **Fixed:** Filter badge now removed from DOM immediately when clicking ✕
8761- **Added:** Badge removal before page reload/AJAX call
8762- **Result:** Badge disappears instantly, no waiting for reload
8763
8764### The Problem
8765
8766**v4.6.5 behavior**:
8767```
8768Click ✕ to clear filter
8769→ Page reloads or AJAX fires
8770→ Badge stays visible during reload ✗
8771→ Badge finally disappears after reload ✓
8772
8773User sees badge for 0.5-2 seconds after clicking ✕
8774Feels laggy! ✗
8775```
8776
8777### The Fix
8778
8779**Immediately remove badge from DOM**:
8780
8781```javascript
8782window.clearNamespaceFilter = function(calId) {
8783    const container = document.getElementById(calId);
8784
8785    // IMMEDIATELY hide/remove the filter badge
8786    const filterBadge = container.querySelector('.calendar-namespace-filter');
8787    if (filterBadge) {
8788        filterBadge.style.display = 'none'; // Hide instantly
8789        filterBadge.remove(); // Remove from DOM
8790    }
8791
8792    // THEN reload (AJAX or page reload)
8793    navCalendar(...) or window.location.href = ...
8794};
8795```
8796
8797### Before vs After
8798
8799**BEFORE (v4.6.5)**:
8800```
8801Time 0ms: Click ✕
8802┌─────────────────────────┐
8803│ Filtering: work ✕       │ ← Still visible
8804├─────────────────────────┤
8805
8806Time 500ms: Reload completes
8807┌─────────────────────────┐
8808│ (no badge)              │ ← Finally gone
8809├─────────────────────────┤
8810
8811Delay: 500-2000ms ✗
8812```
8813
8814**AFTER (v4.6.6)**:
8815```
8816Time 0ms: Click ✕
8817┌─────────────────────────┐
8818│ (no badge)              │ ← Gone immediately!
8819├─────────────────────────┤
8820
8821Time 500ms: Reload completes
8822┌─────────────────────────┐
8823│ (no badge)              │ ← Still gone
8824├─────────────────────────┤
8825
8826Delay: 0ms ✓
8827Instant feedback! ✓
8828```
8829
8830### Implementation
8831
8832**Two-step removal**:
8833
8834**Step 1**: Hide immediately
8835```javascript
8836filterBadge.style.display = 'none';
8837// User sees badge disappear instantly
8838```
8839
8840**Step 2**: Remove from DOM
8841```javascript
8842filterBadge.remove();
8843// Clean up HTML
8844```
8845
8846**Step 3**: Reload
8847```javascript
8848// Sidebar: Page reload
8849window.location.href = url.toString();
8850
8851// Calendar: AJAX reload
8852navCalendar(calId, year, month, originalNamespace);
8853```
8854
8855**Result**: Badge gone BEFORE reload starts ✓
8856
8857### Why This Matters
8858
8859**User Experience**:
8860- Old: Click ✕ → Wait → Badge disappears
8861- New: Click ✕ → Badge disappears instantly
8862
8863**Perceived Performance**:
8864- Instant visual feedback
8865- Feels responsive
8866- Professional UX
8867
8868**Technical**:
8869- DOM manipulation is synchronous (instant)
8870- Network requests are asynchronous (slow)
8871- Do fast things first!
8872
8873**Badge now disappears the moment you click ✕!** ⚡
8874
8875## Version 4.6.5 (2026-02-07) - FIX SIDEBAR FILTER BADGE CLEARING
8876
8877### �� Fixed: Filter Badge Not Clearing in Sidebar
8878- **Fixed:** Filter badge now properly clears when clicking ✕ button
8879- **Fixed:** Sidebar widget now reloads page without namespace filter
8880- **Changed:** clearNamespaceFilter now detects sidebar vs calendar and handles appropriately
8881
8882### The Problem
8883
8884**In {{calendar}} sidebar widget**:
8885```
88861. Click namespace badge to filter
88872. Badge appears: "Filtering: work ✕"
88883. Click ✕ to clear filter
88894. Badge stays visible! ✗
88905. Events still filtered! ✗
8891```
8892
8893**Root Cause**: Sidebar widget is server-rendered (PHP), not AJAX-reloaded like regular calendar.
8894
8895### The Fix
8896
8897**Detect widget type and handle appropriately**:
8898
8899```javascript
8900window.clearNamespaceFilter = function(calId) {
8901    const container = document.getElementById(calId);
8902
8903    // Check if this is a sidebar widget
8904    const sidebarContainer = document.getElementById('sidebar-widget-' + calId);
8905
8906    if (sidebarContainer) {
8907        // SIDEBAR: Reload page without namespace parameter
8908        const url = new URL(window.location.href);
8909        url.searchParams.delete('namespace');
8910        window.location.href = url.toString(); // Page reload
8911        return;
8912    }
8913
8914    // REGULAR CALENDAR: AJAX reload
8915    navCalendar(calId, year, month, originalNamespace);
8916};
8917```
8918
8919### How It Works
8920
8921**Sidebar Widget** ({{calendar}} syntax):
8922```
8923Rendered server-side with PHP
8924Cannot be AJAX-reloaded
8925Solution: Reload entire page without ?namespace=work parameter
8926```
8927
8928**Regular Calendar** ({{calendar-compact}} or {{calendar-panel}}):
8929```
8930Has AJAX reload capability
8931Solution: Call navCalendar() to reload via AJAX
8932```
8933
8934### Before vs After
8935
8936**BEFORE (v4.6.4)**:
8937```
8938Sidebar widget filtered by "work":
8939┌─────────────────────────┐
8940│ Filtering: work ✕       │ ← Click ✕
8941├─────────────────────────┤
8942│ Today                   │
8943│ • Work meeting          │
8944└─────────────────────────┘
8945
8946After clicking ✕:
8947┌─────────────────────────┐
8948│ Filtering: work ✕       │ ← Still there! ✗
8949├─────────────────────────┤
8950│ Today                   │
8951│ • Work meeting          │ ← Still filtered! ✗
8952└─────────────────────────┘
8953```
8954
8955**AFTER (v4.6.5)**:
8956```
8957Sidebar widget filtered by "work":
8958┌─────────────────────────┐
8959│ Filtering: work ✕       │ ← Click ✕
8960├─────────────────────────┤
8961│ Today                   │
8962│ • Work meeting          │
8963└─────────────────────────┘
8964
8965After clicking ✕ → Page reloads:
8966┌─────────────────────────┐
8967│ (no filter badge)       │ ← Cleared! ✓
8968├─────────────────────────┤
8969│ Today                   │
8970│ • Work meeting          │
8971│ • Personal task         │ ← All events! ✓
8972│ • Project review        │
8973└─────────────────────────┘
8974```
8975
8976### Technical Details
8977
8978**Why Page Reload for Sidebar?**
8979
8980Sidebar widget is rendered server-side:
8981```php
8982// In syntax.php:
8983return $this->renderSidebarWidget($events, $namespace, $calId);
8984// ↑ PHP generates complete HTML
8985// No AJAX reload endpoint exists for sidebar
8986```
8987
8988**Solution**: Remove `?namespace=work` from URL and reload page
8989```javascript
8990const url = new URL(window.location.href);
8991url.searchParams.delete('namespace'); // Remove filter
8992window.location.href = url.toString(); // Reload
8993```
8994
8995**Why AJAX for Regular Calendar?**
8996
8997Regular calendars have AJAX endpoints:
8998```javascript
8999// action.php handles:
9000action: 'load_month' → Returns new month data
9001navCalendar() → Fetches and rebuilds calendar
9002```
9003
9004### Filter Badge Behavior
9005
9006**Showing Badge** (when filtering):
9007- Server-side: PHP renders badge in HTML
9008- Client-side: JavaScript adds badge to header
9009
9010**Clearing Badge**:
9011- Sidebar: Page reload (removes ?namespace from URL)
9012- Calendar: AJAX reload (badge removed in rebuildCalendar)
9013
9014**Now works correctly for both!** ✓
9015
9016## Version 4.6.4 (2026-02-07) - HOTFIX: PHP SYNTAX ERROR
9017
9018### �� Critical Hotfix: Fixed PHP Parse Error
9019- **Fixed:** Template literal backticks causing PHP syntax error
9020- **Fixed:** Changed JavaScript template literals to concatenation
9021- **Fixed:** Admin page now loads without parse errors
9022
9023### The Problem
9024
9025**v4.6.3 broke admin page**:
9026```
9027Error loading plugin calendar
9028ParseError: syntax error, unexpected identifier "s",
9029expecting "," or ";"
9030```
9031
9032**Cause**: JavaScript template literals inside PHP echo
9033```php
9034echo '<script>
9035    let nsOptions = `<option value="">(default)</option>`;
9036                    ↑ PHP sees backtick and gets confused!
9037</script>';
9038```
9039
9040**Why it broke**: Backticks (`) are special in PHP too!
9041
9042### The Fix
9043
9044**Changed from template literals to concatenation**:
9045
9046**BEFORE (broken)**:
9047```javascript
9048let nsOptions = `<option value="">(default)</option>`;
9049nsOptions += `<option value="${namespace}">${namespace}</option>`;
9050console.log('Edit recurring:', namespace);
9051```
9052
9053**AFTER (fixed)**:
9054```javascript
9055let nsOptions = "<option value=\\"\\">(default)</option>";
9056nsOptions += "<option value=\\"" + namespace + "\\">" + namespace + "</option>";
9057console.log("Edit recurring:", namespace);
9058```
9059
9060**Changes**:
9061- ✅ Backticks (`) → Double quotes (")
9062- ✅ Template literals (${var}) → Concatenation (" + var + ")
9063- ✅ Single quotes in console.log → Double quotes
9064- ✅ Properly escaped quotes for PHP echo
9065
9066### Technical Details
9067
9068**The Issue**:
9069```php
9070// Inside PHP echo string:
9071echo '<script>
9072    let x = `template ${literal}`;  // ✗ Backtick breaks PHP!
9073</script>';
9074```
9075
9076**The Solution**:
9077```php
9078// Use regular string concatenation:
9079echo '<script>
9080    let x = "string " + variable;   // ✓ Works in PHP echo!
9081</script>';
9082```
9083
9084**Quote Escaping**:
9085```javascript
9086// Double quotes inside PHP single-quote string:
9087'<option value=\"\">text</option>'
9088               ↑↑ Escaped for JavaScript
9089```
9090
9091### Result
9092
9093**Before**: Admin page crashed with parse error ✗
9094**After**: Admin page loads perfectly ✓
9095
9096**No functionality changed - just syntax fix!**
9097
9098## Version 4.6.3 (2026-02-07) - FIX RECURRING EVENTS NAMESPACE DROPDOWN
9099
9100### �� Critical Fix: Namespace Dropdown in Recurring Events Section
9101- **Fixed:** Namespace dropdown now shows ALL available namespaces when editing
9102- **Fixed:** Current namespace now properly selected in dropdown
9103- **Fixed:** Namespace extraction from DOM now uses multiple methods
9104- **Added:** Console logging to debug namespace detection
9105
9106### The Problem
9107
9108**When editing from �� Recurring Events section**:
9109```
9110Click "Edit" on recurring event
9111Namespace dropdown shows:
9112- (default)
9113- (nothing else!) ✗
9114
9115Can't select any namespace! ✗
9116```
9117
9118**Why**: Broken namespace extraction logic
9119```javascript
9120// OLD CODE (broken):
9121const namespaces = Array.from(document.querySelectorAll("[id^=ns_]"))
9122    .map(el => {
9123        // Complex parsing that often failed
9124        const nsSpan = el.querySelector("span:nth-child(3)");
9125        return nsSpan.textContent.replace("�� ", "").trim();
9126    })
9127    .filter(ns => ns !== namespace); // Excluded current! ✗
9128```
9129
9130**Result**: Empty dropdown, can't change namespace! ✗
9131
9132### The Fix
9133
9134**NEW CODE (robust)**:
9135```javascript
9136const namespaces = new Set();
9137
9138// Method 1: Namespace explorer folders
9139document.querySelectorAll("[id^=ns_]").forEach(el => {
9140    const nsSpan = el.querySelector("span:nth-child(3)");
9141    if (nsSpan) {
9142        let nsText = nsSpan.textContent.replace("�� ", "").trim();
9143        if (nsText && nsText !== "(default)") {
9144            namespaces.add(nsText); // ✓
9145        }
9146    }
9147});
9148
9149// Method 2: Datalist (backup method)
9150document.querySelectorAll("#namespaceList option").forEach(opt => {
9151    if (opt.value && opt.value !== "") {
9152        namespaces.add(opt.value); // ✓
9153    }
9154});
9155
9156// Build dropdown with ALL namespaces
9157let options = `<option value="">(default)</option>`;
9158
9159// Show current namespace as selected
9160if (namespace) {
9161    options += `<option value="${namespace}" selected>${namespace} (current)</option>`;
9162}
9163
9164// Show all other namespaces
9165for (const ns of nsArray) {
9166    if (ns !== namespace) {
9167        options += `<option value="${ns}">${ns}</option>`;
9168    }
9169}
9170```
9171
9172**Result**: All namespaces visible! ✓
9173
9174### How It Works Now
9175
9176**Before (Broken)**:
9177```
9178Edit recurring event in "work" namespace
9179
9180Dropdown shows:
9181☐ (default)
9182
9183That's it! Can't select anything! ✗
9184```
9185
9186**After (Fixed)**:
9187```
9188Edit recurring event in "work" namespace
9189
9190Dropdown shows:
9191☐ (default)
9192☑ work (current)  ← Selected!
9193☐ personal
9194☐ projects
9195☐ meetings
9196
9197All namespaces available! ✓
9198```
9199
9200### Key Improvements
9201
9202**1. Dual extraction methods**:
9203- Primary: Parse namespace explorer DOM
9204- Backup: Read from datalist
9205- Result: Always finds namespaces ✓
9206
9207**2. Current namespace included**:
9208```javascript
9209// OLD: Excluded current namespace
9210.filter(ns => ns !== namespace) ✗
9211
9212// NEW: Include and mark as selected
9213options += `<option value="${namespace}" selected>${namespace} (current)</option>` ✓
9214```
9215
9216**3. Better error handling**:
9217```javascript
9218if (nsSpan) {  // Check exists
9219    let nsText = nsSpan.textContent.replace("�� ", "").trim();
9220    if (nsText && nsText !== "(default)") {  // Validate
9221        namespaces.add(nsText);
9222    }
9223}
9224```
9225
9226**4. Console debugging**:
9227```javascript
9228console.log('Edit recurring - Current namespace:', namespace);
9229console.log('Available namespaces:', nsArray);
9230```
9231
9232Open browser console (F12) to see what namespaces are detected!
9233
9234### Example Usage
9235
9236**Scenario**: Edit recurring "Team Meeting" in "work" namespace
9237
9238**Steps**:
92391. Go to �� Recurring Events section
92402. Click "Edit" on "Team Meeting"
92413. See namespace dropdown:
9242   - ☐ (default)
9243   - ☑ work (current)
9244   - ☐ personal
9245   - ☐ projects
92464. Select "personal" to move event
92475. Click "Save Changes"
92486. Event moved to "personal" namespace ✓
9249
9250**Finally works as expected!** ��
9251
9252## Version 4.6.2 (2026-02-07) - FIX NAMESPACE PRESERVATION
9253
9254### �� Recurring Events Namespace Fix
9255- **Fixed:** Namespace now properly preserved when editing recurring events
9256- **Fixed:** Namespace selector now allows selecting any namespace (not just default)
9257- **Added:** Better logging for namespace preservation debugging
9258- **Added:** Console logging to track namespace values during edit
9259
9260### The Namespace Problem
9261
9262**Issue 1**: Can't select non-default namespace
9263```
9264When editing recurring event:
9265- Dropdown shows all namespaces ✓
9266- User selects "work"
9267- Form submits with "" (empty/default) ✗
9268```
9269
9270**Issue 2**: Namespace not preserved
9271```
9272Recurring event in "personal" namespace
9273Edit the title only
9274After save: namespace changed to "" (default) ✗
9275```
9276
9277### The Fixes
9278
9279**Fix 1**: Better namespace preservation logic
9280```php
9281// When editing recurring event:
9282$existingNamespace = $existingEventData['namespace'];
9283
9284// Preserve if user didn't explicitly change it:
9285if (empty($namespace) ||
9286    strpos($namespace, '*') !== false ||
9287    strpos($namespace, ';') !== false) {
9288    // User didn't select or selected wildcard
9289    $namespace = $existingNamespace; // Keep existing!
9290}
9291```
9292
9293**Fix 2**: Proper form population
9294```javascript
9295// When editing, set BOTH inputs:
9296namespaceHidden.value = event.namespace || '';  // Hidden (submitted)
9297namespaceSearch.value = event.namespace || '(default)';  // Visible
9298
9299// Plus logging:
9300console.log('Set namespace for editing:', event.namespace);
9301```
9302
9303**Fix 3**: Added detailed logging
9304```php
9305error_log("Preserving namespace '$namespace' (received='$receivedNamespace')");
9306error_log("Using new namespace '$namespace'");
9307error_log("No existing namespace to preserve");
9308```
9309
9310### How It Works Now
9311
9312**Scenario 1**: Edit without changing namespace
9313```
9314Event in "work" namespace
9315Edit title to "Updated Meeting"
9316Namespace field shows: "work"
9317Hidden input value: "work"
9318Result: Saved in "work" ✓
9319```
9320
9321**Scenario 2**: Change namespace during edit
9322```
9323Event in "personal" namespace
9324Edit and select "work" namespace
9325Hidden input value: "work"
9326Result: Saved in "work" ✓
9327```
9328
9329**Scenario 3**: Edit with empty/wildcard namespace
9330```
9331Event in "projects" namespace
9332Namespace field empty or shows "personal;work"
9333System preserves: "projects"
9334Result: Saved in "projects" ✓
9335```
9336
9337### Debugging
9338
9339Now with console logging, you can see:
9340```javascript
9341Set namespace for editing: work
9342Hidden value: work
9343```
9344
9345And in PHP logs:
9346```
9347Calendar saveEvent recurring: Loaded existing data - namespace='work'
9348Calendar saveEvent recurring: Preserving namespace 'work' (received='')
9349```
9350
9351**Namespace preservation now works correctly!** ��
9352
9353## Version 4.6.1 (2026-02-07) - PRESERVE RECURRING EVENT DATA
9354
9355### �� Recurring Events Edit Fix
9356- **Fixed:** Editing recurring events now preserves unchanged fields
9357- **Fixed:** Empty fields no longer erase existing data
9358- **Added:** Smart merge of existing event data with new changes
9359
9360### The Problem
9361
9362**Before**: Editing erased unchanged fields!
9363```
9364Original recurring event:
9365- Title: "Team Meeting"
9366- Time: "10:00 AM"
9367- Description: "Weekly standup with engineering team"
9368- Color: Red
9369
9370User edits ONLY the title to "Staff Meeting"
9371Form sends:
9372- Title: "Staff Meeting" ✓
9373- Time: "" ✗ (empty because user didn't change it)
9374- Description: "" ✗ (empty)
9375- Color: "#3498db" ✗ (default blue)
9376
9377Result after save:
9378- Title: "Staff Meeting" ✓
9379- Time: BLANK ✗
9380- Description: BLANK ✗
9381- Color: Blue ✗
9382```
9383
9384**All the other data was lost!** ✗
9385
9386### The Fix
9387
9388**After**: Preserves unchanged data!
9389```php
9390if ($eventId && $isRecurring) {
9391    // Load existing event data
9392    $existingEventData = getExistingEventData($eventId);
9393
9394    // Merge: use new value OR keep existing
9395    $title = $title ?: $existingEventData['title'];
9396    $time = $time ?: $existingEventData['time'];
9397    $description = $description ?: $existingEventData['description'];
9398    $color = ($color === '#3498db') ?
9399        $existingEventData['color'] : $color;
9400}
9401```
9402
9403**Now**:
9404```
9405User edits ONLY the title to "Staff Meeting"
9406
9407System:
94081. Loads existing event data
94092. Merges: new title + existing time/description/color
94103. Saves merged data
9411
9412Result:
9413- Title: "Staff Meeting" ✓ (changed)
9414- Time: "10:00 AM" ✓ (preserved!)
9415- Description: "Weekly standup..." ✓ (preserved!)
9416- Color: Red ✓ (preserved!)
9417```
9418
9419**Only changed fields are updated!** ✓
9420
9421### How It Works
9422
9423**Step 1**: Load existing data
9424```php
9425$existingEventData = $this->getExistingEventData(
9426    $eventId,
9427    $date,
9428    $namespace
9429);
9430```
9431
9432**Step 2**: Merge with new data
9433```php
9434// If new value is empty, use existing value
9435$title = $newTitle ?: $existingEventData['title'];
9436$time = $newTime ?: $existingEventData['time'];
9437$description = $newDesc ?: $existingEventData['description'];
9438
9439// Special handling for color (default is #3498db)
9440if ($newColor === '#3498db' && $existingEventData['color']) {
9441    $color = $existingEventData['color'];
9442}
9443```
9444
9445**Step 3**: Save merged data
9446```php
9447createRecurringEvents(..., $title, $time, $description, $color, ...);
9448```
9449
9450### Fields Preserved
9451
9452When editing recurring events, these fields are now preserved if not changed:
9453- ✅ Title (if left blank)
9454- ✅ Time (if not specified)
9455- ✅ End Time (if not specified)
9456- ✅ Description (if left empty)
9457- ✅ Color (if still default blue)
9458
9459**Edit only what you want to change - everything else stays!** ��
9460
9461## Version 4.6.0 (2026-02-07) - NAMESPACE RENAME & RECURRING FIX
9462
9463### ✨ New Feature: Rename Namespaces
9464- **Added:** ✏️ Rename button in Namespace Explorer
9465- **Added:** Rename all events in a namespace at once
9466- **Added:** Automatic cleanup of old directory structure
9467
9468### �� Critical Fix: Recurring Events Actually Edit Now!
9469- **Fixed:** Editing recurring events now deletes ALL instances
9470- **Fixed:** Previously only deleted one instance, left orphans
9471- **Fixed:** Recurring events properly regenerated on edit
9472
9473### Namespace Rename Feature
9474
9475**Before**: Could only delete namespaces, not rename
9476
9477**After**: Click ✏️ to rename!
9478
9479```
9480�� work (15 events)  [3] [✏️] [��️]
9481                          ↑ NEW!
9482```
9483
9484**How It Works**:
94851. Click ✏️ rename button
94862. Enter new namespace name
94873. All events moved to new namespace
94884. Event `namespace` field updated in JSON
94895. Old directory cleaned up
9490
9491**Example**:
9492```
9493Rename: "work" → "business"
9494
9495Before:
9496/data/meta/work/calendar/*.json
9497Events: {namespace: "work"}
9498
9499After:
9500/data/meta/business/calendar/*.json
9501Events: {namespace: "business"}
9502```
9503
9504**Implementation**:
9505```php
9506private function renameNamespace() {
9507    // 1. Validate new name
9508    // 2. Rename directory
9509    // 3. Update all event namespace fields in JSON
9510    // 4. Clean up old empty directories
9511}
9512```
9513
9514### Recurring Events Fix - The Problem
9515
9516**Before**: Editing didn't work!
9517```
9518Original recurring event generates:
9519- Event-0 (Mon, Feb 10)
9520- Event-1 (Mon, Feb 17)
9521- Event-2 (Mon, Feb 24)
9522
9523User edits Event-0, changes title to "Updated"
9524
9525What SHOULD happen:
9526- Delete Event-0, Event-1, Event-2
9527- Generate new instances with "Updated" title
9528
9529What ACTUALLY happened:
9530- Delete Event-0 only ✗
9531- Generate new instances
9532- Result: Event-1 and Event-2 still show old title! ✗
9533```
9534
9535**After**: Properly deletes ALL instances!
9536
9537**The Fix**:
9538```php
9539private function deleteEvent() {
9540    $event = getEvent($eventId);
9541
9542    // Check if recurring
9543    if ($event['recurring'] && $event['recurringId']) {
9544        // Delete ALL instances with same recurringId
9545        deleteAllRecurringInstances($recurringId);
9546    }
9547
9548    // Then normal delete for spanning events
9549}
9550
9551private function deleteAllRecurringInstances($recurringId) {
9552    // Scan ALL calendar JSON files
9553    foreach (glob('*.json') as $file) {
9554        // Filter out events with matching recurringId
9555        $events = array_filter($events, function($event) {
9556            return $event['recurringId'] !== $recurringId;
9557        });
9558    }
9559}
9560```
9561
9562**Result**:
9563- Edit "Weekly Team Meeting" → ALL instances updated ✓
9564- Delete recurring event → ALL instances deleted ✓
9565- No more orphaned events! ✓
9566
9567### Recurring Event Fields
9568
9569Every recurring event has:
9570```json
9571{
9572    "id": "abc123-0",
9573    "recurring": true,
9574    "recurringId": "abc123",  ← Links all instances
9575    ...
9576}
9577```
9578
9579When editing/deleting, we find ALL events with same `recurringId` and remove them!
9580
9581**Finally, recurring events work properly!** ��
9582
9583## Version 4.5.2 (2026-02-07) - FIX SORTING & PINK TOOLTIPS
9584
9585### �� Important Events Sorting - ACTUALLY FIXED!
9586- **Fixed:** Important Events now REALLY sorted by date first, then time
9587- **Fixed:** renderSidebarSection was re-sorting and breaking the order
9588- **Changed:** Important Events use date-first sorting, Today/Tomorrow use time-only
9589
9590### �� Pink Theme Tooltip Bling!
9591- **Added:** Pink gradient tooltips (hot pink → light pink)
9592- **Added:** Glowing pink border on tooltips
9593- **Added:** Sparkling heart (��) appears next to tooltip!
9594- **Added:** Heart has pink glow drop-shadow
9595
9596### The Sorting Bug - Root Cause
9597
9598**Problem**: Two sorts were happening!
9599
9600**Sort #1** (Line 2047): Before rendering
9601```php
9602usort($importantEvents, ...) // Sort by date ✓
9603```
9604
9605**Sort #2** (Line 2751): Inside renderSidebarSection
9606```php
9607usort($events, ...) // Sort by TIME ONLY ✗
9608// This was breaking the date order!
9609```
9610
9611**The Fix**: Different sorting for different sections
9612```php
9613if ($title === 'Important Events') {
9614    // Sort by DATE first, then time
9615    usort($events, function($a, $b) {
9616        if ($dateA !== $dateB) {
9617            return strcmp($dateA, $dateB); // DATE first!
9618        }
9619        // Same date - sort by time
9620        return timeCompare($a, $b);
9621    });
9622} else {
9623    // Today/Tomorrow - sort by TIME only (same date)
9624    usort($events, function($a, $b) {
9625        return timeCompare($a, $b);
9626    });
9627}
9628```
9629
9630**Result**: Important Events now CORRECTLY sorted!
9631```
9632✓ Sun, Feb 8 - 3:30 PM Super Bowl
9633✓ Tue, Feb 10 - 11:30 AM Doctor visit
9634✓ Sat, Feb 14 - Valentine's Day (all-day)
9635✓ Sat, Feb 14 - 8:00 PM Crab Shack
9636```
9637
9638### Pink Tooltip Magic! ��
9639
9640**Normal Tooltips**: Black background, plain
9641```css
9642background: rgba(0, 0, 0, 0.95);
9643color: #fff;
9644```
9645
9646**Pink Theme Tooltips**: FABULOUS!
9647```css
9648/* Pink gradient background */
9649background: linear-gradient(135deg, #ff1493 0%, #ff69b4 100%);
9650
9651/* Glowing pink border */
9652border: 2px solid #ff85c1;
9653
9654/* Double glow shadow */
9655box-shadow:
9656    0 0 15px rgba(255, 20, 147, 0.6),
9657    0 4px 12px rgba(0, 0, 0, 0.4);
9658
9659/* Bold text */
9660font-weight: 600;
9661```
9662
9663**Plus**: Sparkling heart next to tooltip!
9664```css
9665.sidebar-pink [data-tooltip]:after {
9666    content: '��';
9667    font-size: 12px;
9668    filter: drop-shadow(0 0 3px rgba(255, 20, 147, 0.8));
9669}
9670```
9671
9672**The Effect**:
9673```
9674Hover over ⚠ conflict warning:
9675┌────────────────────┐ ��
9676│ Conflicts with:    │ ← Pink gradient
9677│ • Event 1 (3PM)   │ ← Pink border
9678│ • Event 2 (4PM)   │ ← Pink glow
9679└────────────────────┘
9680```
9681
9682**Maximum glamour on tooltips too!** ✨
9683
9684## Version 4.5.1 (2026-02-07) - FIX IMPORTANT EVENTS SORTING
9685
9686### �� Important Events Order Fixed
9687- **Fixed:** Important Events now sorted by date (earliest first)
9688- **Fixed:** Events on same date sorted by time (chronological)
9689- **Fixed:** All-day events appear last within each date
9690
9691### Sorting Issue
9692
9693**Before**: Random order
9694```
9695Important Events:
9696�� Valentine's Day         (Sat, Feb 14)
969711:30 AM Doctor visit      (Tue, Feb 10)  ← Feb 10 after Feb 14!
96983:30 PM Super Bowl         (Sun, Feb 8)   ← Feb 8 after Feb 14!
96998:00 PM Crab Shack         (Sat, Feb 14)
9700```
9701
9702**After**: Chronological order
9703```
9704Important Events:
97053:30 PM Super Bowl         (Sun, Feb 8)   ← Earliest!
970611:30 AM Doctor visit      (Tue, Feb 10)
9707�� Valentine's Day         (Sat, Feb 14)  ← All-day event
97088:00 PM Crab Shack         (Sat, Feb 14)  ← Same day, sorted by time
9709```
9710
9711### Sorting Logic
9712
9713**Primary Sort**: By date
9714```php
9715strcmp($dateA, $dateB); // "2026-02-08" < "2026-02-14"
9716```
9717
9718**Secondary Sort**: By time (within same date)
9719```php
9720// All-day events (no time) go last
9721if (empty($timeA) && !empty($timeB)) return 1;
9722if (!empty($timeA) && empty($timeB)) return -1;
9723
9724// Both have times - sort chronologically
9725$aMinutes = timeToMinutes($timeA); // "11:30" = 690 minutes
9726$bMinutes = timeToMinutes($timeB); // "20:00" = 1200 minutes
9727return $aMinutes - $bMinutes;      // 690 < 1200
9728```
9729
9730**Result**:
97311. Sun, Feb 8 - 3:30 PM (earliest date & time)
97322. Tue, Feb 10 - 11:30 AM (next date)
97333. Sat, Feb 14 - Valentine's Day (all-day, so last on Feb 14)
97344. Sat, Feb 14 - 8:00 PM (timed event on Feb 14)
9735
9736**Perfect chronological order for next 2 weeks!** ✓
9737
9738## Version 4.5.0 (2026-02-07) - SPARKLE EDITION ✨��
9739
9740### �� EXTREME PINK BLING EFFECTS!
9741- **Added:** Click sparkles - 8 sparkles burst out on every click!
9742- **Added:** Auto-sparkles - random sparkles appear every 3 seconds
9743- **Added:** Hover mega-glow - sidebar glows BRIGHT on hover
9744- **Added:** Pulsing border glow - constantly breathing pink glow
9745- **Added:** Drop shadows on sparkles for extra depth
9746- **Added:** More sparkle emojis - hearts, diamonds, crowns, bows!
9747
9748### Sparkle Effects Breakdown
9749
9750**Click Sparkles** ��:
9751```javascript
9752// 8 sparkles burst out when you click anywhere!
9753for (let i = 0; i < 8; i++) {
9754    // Staggered appearance (40ms apart)
9755    createSparkle(x, y);
9756}
9757
9758// Sparkle emojis:
9759["✨", "��", "��", "⭐", "��", "��", "��", "��", "��", "��"]
9760```
9761
9762**Each sparkle**:
9763- Starts at click point
9764- Flies outward 30-60px in random direction
9765- Spins 360 degrees
9766- Fades in and out
9767- Has pink glow drop-shadow
9768- Disappears after 1 second
9769
9770**Auto Sparkles** ⏰:
9771```javascript
9772// Random sparkle every 3 seconds
9773setInterval(() => {
9774    const x = Math.random() * width;
9775    const y = Math.random() * height;
9776    createSparkle(x, y);
9777}, 3000);
9778```
9779
9780**Result**: Constant magical sparkles even without clicking! ✨
9781
9782**Hover Mega-Glow** ��:
9783```css
9784.sidebar-pink:hover {
9785    box-shadow:
9786        0 0 30px rgba(255, 20, 147, 0.9),
9787        0 0 50px rgba(255, 20, 147, 0.5) !important;
9788}
9789```
9790
9791**Result**: Sidebar EXPLODES with pink glow when you hover over it! ��
9792
9793**Pulsing Border Glow** ��:
9794```css
9795@keyframes pulse-glow {
9796    0%, 100% {
9797        box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
9798    }
9799    50% {
9800        box-shadow:
9801            0 0 25px rgba(255, 20, 147, 0.8),
9802            0 0 40px rgba(255, 20, 147, 0.4);
9803    }
9804}
9805
9806animation: pulse-glow 3s ease-in-out infinite;
9807```
9808
9809**Result**: Border continuously breathes with pink glow! ��
9810
9811**Sparkle Animation** ��:
9812```css
9813@keyframes sparkle {
9814    0% {
9815        opacity: 0;
9816        transform: translate(0, 0) scale(0) rotate(0deg);
9817    }
9818    50% {
9819        opacity: 1;
9820        transform: translate(halfway) scale(1) rotate(180deg);
9821    }
9822    100% {
9823        opacity: 0;
9824        transform: translate(far) scale(0) rotate(360deg);
9825    }
9826}
9827```
9828
9829**Result**: Sparkles spin, grow, shrink, and fly! ��
9830
9831### Complete Pink Bling Experience:
9832
9833**Always Active**:
9834- ✨ Pulsing pink border glow (3 second cycle)
9835- ✨ Auto-sparkles every 3 seconds
9836
9837**On Hover**:
9838- �� MEGA GLOW EFFECT (2x brightness!)
9839
9840**On Click**:
9841- �� 8 sparkles EXPLODE outward!
9842- �� Random emojis (hearts, stars, diamonds, crowns!)
9843- �� Each sparkle spins 360° while flying
9844- �� Pink glow drop-shadow on each sparkle
9845
9846**The Result**:
9847- Click anywhere = SPARKLE EXPLOSION! ��
9848- Hover anywhere = MEGA GLOW! ✨
9849- Always breathing and sparkling! ��
9850- Maximum glamour! ��
9851- Wife approval: 1000%! ��
9852
9853**THIS IS THE MOST FABULOUS CALENDAR EVER!** ��✨��
9854
9855## Version 4.4.2 (2026-02-07) - FINAL PINK POLISH
9856
9857### �� Pink Theme Final Touches
9858- **Fixed:** Add Event text now black (was bright pink, hard to read)
9859- **Fixed:** Clock border now COMPLETELY pink on all sides (no more green!)
9860- **Removed:** Text shadow on Add Event button (cleaner with black text)
9861
9862### Add Event Text - Black & Readable!
9863
9864**Before**: Bright pink text (#ff1493) on dark pink background
9865```php
9866$addBtnTextColor = $themeStyles['text_bright']; // #ff1493 - hard to read!
9867text-shadow: 0 0 3px #ff1493; // Glowy pink
9868```
9869
9870**After**: Black text, no shadow, perfect contrast!
9871```php
9872$addBtnTextColor = $theme === 'pink' ? '#000000' : ...;
9873$addBtnTextShadow = $theme === 'pink' ? 'none' : ...;
9874```
9875
9876**Result**:
9877- Black text pops against dark pink background ✓
9878- Easy to read ✓
9879- Professional look with bling ✓
9880
9881### Clock Border - All Pink!
9882
9883**The Problem**: Inline style only set `border-bottom`, CSS set other sides to green
9884
9885**Before**:
9886```php
9887// Inline style (only bottom):
9888style="border-bottom:2px solid #ff1493;"
9889
9890// CSS (all sides):
9891.eventlist-today-header {
9892    border: 2px solid #00cc07; // Green on top/sides!
9893}
9894```
9895
9896**After**: Inline style overrides ALL sides
9897```php
9898style="border:2px solid #ff1493;" // All 4 sides pink!
9899```
9900
9901**Result**: Clock box now 100% pink border on all four sides! ✓
9902
9903### What Changed:
9904
9905**Add Event Button**:
9906- Background: #b8156f (dark pink) ✓
9907- Text: **#000000 (black)** ← NEW!
9908- Text shadow: **none** ← NEW!
9909- Glow: 0 0 10px pink ✓
9910
9911**Clock Border**:
9912- Top: **#ff1493 (pink)** ← FIXED!
9913- Right: **#ff1493 (pink)** ← FIXED!
9914- Bottom: #ff1493 (pink) ✓
9915- Left: **#ff1493 (pink)** ← FIXED!
9916
9917**Perfect pink theme - wife approved!** ��✨
9918
9919## Version 4.4.1 (2026-02-07) - PINK THEME PERFECTION
9920
9921### �� Pink Theme Complete Makeover
9922- **Fixed:** Clock border now completely pink (was green on sides/top)
9923- **Changed:** Today/Tomorrow/Important sections now different shades of pink
9924- **Changed:** Add Event button now dark pink (was clashing blue)
9925- **Changed:** System status bars now pink gradient (3 shades!)
9926
9927### All-Pink Everything! ��
9928
9929**Clock Border**:
9930```css
9931/* Before: Green border */
9932border: 2px solid #00cc07;
9933
9934/* After: Hot pink border */
9935.sidebar-pink .eventlist-today-header {
9936    border-color: #ff1493;
9937    box-shadow: 0 0 10px rgba(255, 20, 147, 0.4);
9938}
9939```
9940
9941**Section Colors** (Different Pink Shades):
9942```php
9943// Before: Orange, green, purple
9944'Today' => '#ff9800',
9945'Tomorrow' => '#4caf50',
9946'Important' => '#9b59b6'
9947
9948// After: Hot pink, pink, light pink
9949'Today' => '#ff1493',      // Hot pink (DeepPink)
9950'Tomorrow' => '#ff69b4',   // Pink (HotPink)
9951'Important' => '#ff85c1'   // Light pink
9952```
9953
9954**Add Event Button**:
9955```php
9956// Before: Clashing blue
9957background: #3498db;
9958
9959// After: Dark pink with glow
9960background: #b8156f;       // Dark pink
9961hover: #8b0f54;            // Darker pink
9962shadow: 0 0 10px rgba(255, 20, 147, 0.5);
9963```
9964
9965**System Status Bars** (Pink Gradient):
9966```css
9967/* 5-min load average */
9968.sidebar-pink .eventlist-cpu-fill {
9969    background: #ff1493;   /* Hot pink */
9970    box-shadow: 0 0 5px rgba(255, 20, 147, 0.7);
9971}
9972
9973/* Realtime CPU */
9974.sidebar-pink .eventlist-cpu-fill-purple {
9975    background: #ff69b4;   /* Pink */
9976    box-shadow: 0 0 5px rgba(255, 105, 180, 0.7);
9977}
9978
9979/* Memory */
9980.sidebar-pink .eventlist-cpu-fill-orange {
9981    background: #ff85c1;   /* Light pink */
9982    box-shadow: 0 0 5px rgba(255, 133, 193, 0.7);
9983}
9984```
9985
9986### Pink Theme Visual Hierarchy:
9987
9988**Darkest → Lightest Pink Shades**:
99891. Add Event button: #b8156f (dark pink)
99902. Today section: #ff1493 (hot pink / deep pink)
99913. System bar 1: #ff1493 (hot pink)
99924. Tomorrow section: #ff69b4 (pink)
99935. System bar 2: #ff69b4 (pink)
99946. Important section: #ff85c1 (light pink)
99957. System bar 3: #ff85c1 (light pink)
9996
9997**Result**: Beautiful pink gradient throughout entire sidebar! ��✨
9998
9999### What's Pink Now:
10000
10001✅ Sidebar background & border
10002✅ **Clock border** ← FIXED!
10003✅ Header gradient
10004✅ Week grid
10005✅ **Add Event button** ← FIXED!
10006✅ **Today section** ← Different shade!
10007✅ **Tomorrow section** ← Different shade!
10008✅ **Important section** ← Different shade!
10009✅ Event text & bars
10010✅ **System status bars** ← All 3 different pink shades!
10011✅ All shadows & glows
10012
10013**EVERYTHING is pink and fabulous!** ��✨
10014
10015## Version 4.4.0 (2026-02-07) - PINK BLING THEME & PROFESSIONAL SHADOWS
10016
10017### ✨ New Theme: Pink Bling! ��
10018- **Added:** Glamorous hot pink theme with maximum sparkle
10019- **Features:** Deep pink (#ff1493), extra glow, hearts and diamonds aesthetic
10020- **Perfect for:** Fabulous calendars that demand attention ✨
10021
10022### �� Professional Theme Shadow Fix
10023- **Fixed:** Section headers now have subtle shadow (not glow)
10024- **Fixed:** Clicked day panel header has proper shadow
10025
10026### Pink Bling Theme Colors
10027
10028**Background & Borders**:
10029```php
10030'bg' => '#1a0d14',           // Dark rich pink-black
10031'border' => '#ff1493',        // Hot pink (DeepPink)
10032'shadow' => 'rgba(255, 20, 147, 0.4)', // Strong pink glow
10033```
10034
10035**Text Colors**:
10036```php
10037'text_primary' => '#ff69b4',  // Hot pink
10038'text_bright' => '#ff1493',   // Deep pink
10039'text_dim' => '#ff85c1',      // Light pink
10040```
10041
10042**Week Grid**:
10043```php
10044'grid_bg' => '#2d1a24',       // Dark purple-pink
10045'cell_bg' => '#1a0d14',       // Dark
10046'cell_today_bg' => '#3d2030', // Highlighted purple-pink
10047```
10048
10049**Special Effects**:
10050```php
10051'bar_glow' => '0 0 5px',      // Extra sparkly glow!
10052'header_shadow' => '0 0 12px rgba(255, 20, 147, 0.6)' // Maximum bling!
10053```
10054
10055### Professional Theme Shadow Fix
10056
10057**Before**: Section headers had colored glow
10058```php
10059box-shadow: 0 0 8px #3498db; // Blue glow - wrong!
10060```
10061
10062**After**: Section headers have subtle shadow
10063```php
10064$headerShadow = ($theme === 'professional') ?
10065    '0 2px 4px rgba(0, 0, 0, 0.15)' :  // Shadow for professional
10066    '0 0 8px ' . $accentColor;          // Glow for others
10067```
10068
10069**Result**:
10070- **Matrix/Purple/Pink**: Colored glow on headers ✓
10071- **Professional**: Clean grey shadow (no glow) ✓
10072
10073### All Four Themes:
10074
10075**�� Matrix Edition**:
10076- Dark green (#00cc07)
10077- Neon glow effects
10078- Hacker aesthetic
10079
10080**�� Purple Dream**:
10081- Elegant purple (#9b59b6)
10082- Violet glow effects
10083- Royal aesthetic
10084
10085**�� Professional Blue**:
10086- Clean grey/blue (#4a90e2)
10087- Subtle shadows (NO glow)
10088- Corporate aesthetic
10089
10090**�� Pink Bling** (NEW!):
10091- Hot pink (#ff1493)
10092- MAXIMUM sparkle & glow
10093- Glamorous aesthetic ✨��
10094
10095### Technical Implementation
10096
10097**Theme Added To**:
10098- `getSidebarThemeStyles()` - color definitions
10099- `getSidebarTheme()` - validation
10100- `saveSidebarTheme()` - admin save
10101- Admin panel - UI with preview
10102- All shadow/glow calculations
10103- JavaScript theme colors
10104- Clicked day panel colors
10105
10106**Perfect for users who want FABULOUS pink calendars!** ��✨
10107
10108## Version 4.3.1 (2026-02-07) - REDUCE TEXT GLOW & CONSISTENCY
10109
10110### �� Text Glow Refinement
10111- **Changed:** Reduced text glow from 3px to 2px (less intense)
10112- **Fixed:** Clicked day panel now has same text glow as sections
10113
10114### Text Glow Reduction
10115
10116**Before**: Text glow was too strong (3px)
10117```php
10118// Sections:
10119text-shadow: 0 0 3px #00cc07; // Too bright!
10120
10121// Clicked day panel:
10122text-shadow: 0 0 3px #00cc07; // Too bright!
10123```
10124
10125**After**: Subtler text glow (2px)
10126```php
10127// Sections:
10128text-shadow: 0 0 2px #00cc07; // Just right ✓
10129
10130// Clicked day panel:
10131text-shadow: 0 0 2px #00cc07; // Just right ✓
10132```
10133
10134**Visual Impact**:
10135- **Matrix**: Softer green glow, easier to read
10136- **Purple**: Softer purple glow, more elegant
10137- **Professional**: Still no glow (clean)
10138
10139### Consistency Fix
10140
10141**Before**: Sections had glow, clicked day panel had NO glow
10142
10143**After**: Both sections AND clicked day panel have matching subtle glow
10144
10145**Where Glow Appears**:
10146- ✅ Today section event text
10147- ✅ Tomorrow section event text
10148- ✅ Important section event text
10149- ✅ **Clicked day panel event text** ← NOW CONSISTENT!
10150
10151**Result**:
10152- Glow is less intense and easier on eyes ✓
10153- All event text has consistent styling ✓
10154- Matrix/Purple themes more refined ✓
10155
10156### Technical Details
10157
10158**PHP (Sections)**:
10159```php
10160$textShadow = ($theme === 'professional') ? '' : 'text-shadow:0 0 2px ' . $titleColor . ';';
10161```
10162
10163**JavaScript (Clicked Day Panel)**:
10164```javascript
10165themeColors.text_shadow = 'text-shadow:0 0 2px #00cc07'; // Or purple
10166eventHTML += "style='...color:" + color + "; " + themeColors.text_shadow + ";'";
10167```
10168
10169**Perfect consistency and subtle elegance!** ✨
10170
10171## Version 4.3.0 (2026-02-07) - IMPORTANT EVENTS FUTURE + REMOVE GREY
10172
10173### ✨ Important Events Enhancement
10174- **Changed:** Important events now show from next 2 weeks (not just current week)
10175- **Fixed:** Important events on Sunday after current week now visible
10176- **Changed:** Events loaded 2 weeks into future for Important section
10177
10178### �� Background Cleanup
10179- **Removed:** Grey/white backgrounds from Today/Tomorrow/Important sections
10180- **Removed:** Grey backgrounds from individual events
10181- **Result:** Clean transparent backgrounds, original dark Matrix look restored
10182
10183### Important Events - Future Coverage
10184
10185**Before**: Only showed Important events from current week
10186```php
10187if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10188    $importantEvents[] = $event;
10189}
10190```
10191
10192**After**: Shows Important events from today through next 2 weeks
10193```php
10194// Load events 2 weeks out
10195$twoWeeksOut = date('Y-m-d', strtotime($weekEnd . ' +14 days'));
10196
10197// Show all important events from today forward
10198if ($isImportant && $dateKey >= $todayStr) {
10199    $importantEvents[] = $event;
10200}
10201```
10202
10203**Example**:
10204- Today: Saturday Feb 7
10205- Current week: Sun Feb 1 → Sat Feb 7
10206- Important events shown: Feb 7 → Feb 21 (today + 14 days)
10207
10208**Result**: Important events on Sunday Feb 8 (next week) now visible! ✓
10209
10210### Background Removal
10211
10212**Before**: Light grey/white backgrounds added
10213```php
10214// Section background:
10215$sectionBg = 'rgba(255, 255, 255, 0.05)'; // Grey overlay
10216
10217// Event background:
10218$eventBg = 'rgba(255, 255, 255, 0.03)'; // Grey overlay
10219```
10220
10221**After**: No backgrounds (transparent)
10222```php
10223// Section: No background property
10224<div style="padding:4px 0;">
10225
10226// Event: No background property
10227<div style="padding:4px 6px; ...">
10228```
10229
10230**Result**:
10231- Clean, dark Matrix aesthetic restored ✓
10232- Purple theme darker and more elegant ✓
10233- Professional theme still has its light grey sidebar bg ✓
10234- Events stand out with just color bars and borders ✓
10235
10236### What Changed:
10237
10238**Sections (Today/Tomorrow/Important)**:
10239- ❌ No more grey overlay
10240- ✓ Transparent background
10241- ✓ Colored borders & glows remain
10242
10243**Individual Events**:
10244- ❌ No more grey overlay
10245- ✓ Transparent background
10246- ✓ Colored bars & borders remain
10247
10248**Perfect! Back to the original clean dark look with future Important events!** ��
10249
10250## Version 4.2.6 (2026-02-07) - FIX SECTION SHADOWS & DESCRIPTION COLOR
10251
10252### �� Final Theme Polish
10253- **Fixed:** Today/Tomorrow/Important section shadows now match theme
10254- **Fixed:** Event description text color now uses theme dim color
10255
10256### Section Shadow Fix
10257
10258**Problem**: Sections always had green glow regardless of theme
10259
10260**Before**:
10261```php
10262// Hardcoded green:
10263box-shadow: 0 0 5px rgba(0, 204, 7, 0.2);
10264```
10265
10266**After**:
10267```php
10268// Theme-aware:
10269$sectionShadow = $theme === 'matrix' ? '0 0 5px rgba(0, 204, 7, 0.2)' :
10270                ($theme === 'purple' ? '0 0 5px rgba(155, 89, 182, 0.2)' :
10271                '0 2px 4px rgba(0, 0, 0, 0.1)');
10272```
10273
10274**Result**:
10275- **Matrix**: Green glow around sections ✓
10276- **Purple**: Purple glow around sections ✓
10277- **Professional**: Subtle grey shadow (no glow) ✓
10278
10279### Description Color Fix
10280
10281**Problem**: Description text always green in clicked day panel
10282
10283**Before**:
10284```javascript
10285color: #00aa00; // Always green
10286```
10287
10288**After**:
10289```javascript
10290color: themeColors.text_dim; // Theme dim color
10291```
10292
10293**Result**:
10294- **Matrix**: Dim green (#00aa00) ✓
10295- **Purple**: Dim purple (#8e7ab8) ✓
10296- **Professional**: Grey (#7f8c8d) ✓
10297
10298### Now 100% Theme Consistent
10299
10300Every single visual element respects theme:
10301- ✅ Sidebar background & border
10302- ✅ Header colors & shadows
10303- ✅ Week grid & cells
10304- ✅ Add Event button
10305- ✅ Section borders & **shadows** ← Fixed!
10306- ✅ Event titles & times
10307- ✅ Event **descriptions** ← Fixed!
10308- ✅ Clicked day panel
10309- ✅ Event bars & glows
10310
10311**Absolute perfection across all three themes!** ��✨
10312
10313## Version 4.2.5 (2026-02-07) - CLICKED DAY PANEL THEMES & GREY BACKGROUND
10314
10315### �� Theme Improvements
10316- **Fixed:** Clicked day panel now uses correct theme colors
10317- **Changed:** Professional Blue background now light grey (not white)
10318- **Added:** Theme colors passed to JavaScript for dynamic rendering
10319
10320### Clicked Day Panel Theming
10321
10322**Before**: Always blue regardless of theme
10323```javascript
10324// Hardcoded blue:
10325color:#00cc07;  // Always green
10326background:#3498db;  // Always blue
10327```
10328
10329**After**: Theme-aware colors
10330```php
10331// PHP passes theme to JavaScript:
10332window.themeColors_XXX = {
10333    text_primary: '#00cc07' or '#b19cd9' or '#2c3e50',
10334    text_bright: '#00dd00' or '#d4a5ff' or '#4a90e2',
10335    text_shadow: '0 0 3px ...' or '',
10336    event_bg: 'rgba(...)',
10337    border_color: 'rgba(...)',
10338    bar_shadow: '0 0 3px' or '0 1px 2px rgba(...)'
10339};
10340
10341// JavaScript uses theme colors:
10342color: themeColors.text_primary;
10343background: themeColors.event_bg;
10344```
10345
10346**Result**:
10347- Matrix: Green panel with green glow ✓
10348- Purple: Purple panel with purple glow ✓
10349- Professional: Blue panel, no glow, clean ✓
10350
10351### Professional Theme Background Change
10352
10353**Before**: Almost white (#f5f7fa, #ffffff)
10354```php
10355'bg' => '#f5f7fa',           // Very light
10356'cell_bg' => '#ffffff',      // Pure white
10357```
10358
10359**After**: Light grey tones
10360```php
10361'bg' => '#e8ecf1',           // Soft grey-blue
10362'cell_bg' => '#f5f7fa',      // Light grey
10363'grid_bg' => '#d5dbe3',      // Medium grey
10364'cell_today_bg' => '#dce8f7' // Highlighted grey-blue
10365```
10366
10367**Visual Impact**:
10368- Sidebar: Light grey-blue background (#e8ecf1)
10369- Week cells: Lighter grey (#f5f7fa)
10370- Today cell: Highlighted blue-grey (#dce8f7)
10371- More depth and contrast ✓
10372- Professional appearance ✓
10373
10374### All Theme Elements Now Consistent
10375
10376**Matrix (Green)**:
10377- Sidebar: Dark (#242424)
10378- Clicked panel: Dark with green
10379- Text: Green with glow
10380
10381**Purple Dream**:
10382- Sidebar: Dark purple (#2a2030)
10383- Clicked panel: Dark with purple
10384- Text: Purple with glow
10385
10386**Professional Blue**:
10387- Sidebar: Light grey (#e8ecf1)
10388- Clicked panel: Light with blue
10389- Text: Dark grey, no glow
10390
10391**Perfect theme consistency everywhere!** ��
10392
10393## Version 4.2.4 (2026-02-07) - FIX TOMORROW LOADING & DOUBLE ENCODING
10394
10395### �� Critical Fixes
10396- **Fixed:** Tomorrow events not loaded when outside current week
10397- **Fixed:** `&amp;` showing instead of `&` (double HTML encoding)
10398
10399### Issue 1: Tomorrow Not Loading
10400
10401**Problem**: Sidebar only loaded events for current week
10402- Today (Saturday): Week ends today
10403- Tomorrow (Sunday): Start of NEXT week
10404- Tomorrow events never loaded from data files!
10405
10406**Before**:
10407```php
10408// Only load current week
10409$end = new DateTime($weekEnd);
10410$end->modify('+1 day');
10411$period = new DatePeriod($start, $interval, $end);
10412// If tomorrow > weekEnd, it's not in period!
10413```
10414
10415**After**:
10416```php
10417// Check if tomorrow is outside week
10418$tomorrowDate = date('Y-m-d', strtotime('+1 day'));
10419if ($tomorrowDate > $weekEnd) {
10420    // Extend to include tomorrow
10421    $end = new DateTime($tomorrowDate);
10422}
10423$end->modify('+1 day');
10424$period = new DatePeriod($start, $interval, $end);
10425```
10426
10427**Result**: Tomorrow events now loaded even at week boundary! ✓
10428
10429### Issue 2: Double HTML Encoding
10430
10431**Problem**: `&` characters showing as `&amp;`
10432
10433**Cause**: Double encoding on line 2625 and 2681
10434```php
10435// Line 2625:
10436$title = htmlspecialchars($event['title']); // "Coffee & Tea" → "Coffee &amp; Tea"
10437
10438// Line 2681:
10439$html .= htmlspecialchars($title); // "Coffee &amp; Tea" → "Coffee &amp;amp; Tea" ❌
10440```
10441
10442**Fixed**:
10443```php
10444// Line 2625:
10445$title = htmlspecialchars($event['title']); // Encode once
10446
10447// Line 2681:
10448$html .= $title; // Use already-encoded value ✓
10449```
10450
10451**Result**: `&` displays correctly! ✓
10452
10453### Both Fixes Critical
10454
10455These were **two separate bugs**:
104561. **Loading bug**: Tomorrow events not read from files
104572. **Display bug**: Double-encoding text
10458
10459Both needed fixing for Tomorrow section to work properly!
10460
10461## Version 4.2.3 (2026-02-07) - FIX TOMORROW SECTION AT WEEK BOUNDARY
10462
10463### �� Critical Fix
10464- **Fixed:** Tomorrow section missing when tomorrow is outside current week
10465- **Fixed:** Today section now always shows regardless of week boundaries
10466- **Changed:** Today/Tomorrow processed BEFORE week boundary checks
10467
10468### The Problem
10469
10470**Scenario**: Today is Saturday (last day of week)
10471- Week: Feb 1 (Sun) → Feb 7 (Sat) ← Today
10472- Tomorrow: Feb 8 (Sun) ← **Start of NEXT week**
10473
10474**BROKEN Logic** (v4.2.2):
10475```php
10476foreach ($events as $dateKey => $dayEvents) {
10477    if ($dateKey < $weekStart) continue; // Skip old events
10478
10479    // ...week processing...
10480
10481    if ($dateKey === $tomorrowStr) {  // ← Never reached!
10482        $tomorrowEvents[] = $event;   //   Tomorrow > weekEnd
10483    }
10484}
10485```
10486
10487**Result**: Tomorrow events never added because loop skipped them! ❌
10488
10489### The Fix
10490
10491**Process Today/Tomorrow FIRST**:
10492```php
10493foreach ($events as $dateKey => $dayEvents) {
10494    $eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
10495
10496    foreach ($eventsWithConflicts as $event) {
10497        // ALWAYS process Today and Tomorrow first!
10498        if ($dateKey === $todayStr) {
10499            $todayEvents[] = $event; // ✓ Always shows
10500        }
10501        if ($dateKey === $tomorrowStr) {
10502            $tomorrowEvents[] = $event; // ✓ Always shows
10503        }
10504
10505        // THEN check week boundaries for grid
10506        if ($dateKey >= $weekStart && $dateKey <= $weekEnd) {
10507            $weekEvents[$dateKey][] = $event;
10508        }
10509
10510        // Important events still week-only
10511        if ($isImportant && $dateKey >= $weekStart && $dateKey <= $weekEnd) {
10512            $importantEvents[] = $event;
10513        }
10514    }
10515}
10516```
10517
10518### What Changed
10519
10520**Before**:
105211. Skip events < weekStart ❌
105222. Process week grid
105233. Try to add Today/Tomorrow ← **Failed if outside week**
105244. Add Important events
10525
10526**After**:
105271. **Always add Today events** ✓
105282. **Always add Tomorrow events** ✓
105293. Add to week grid if in range
105304. Add Important events if in range
10531
10532**Result**:
10533- Today section: ✓ Always shows
10534- Tomorrow section: ✓ Always shows (even at week boundary!)
10535- Week grid: ✓ Only current week
10536- Important: ✓ Only current week
10537
10538### Edge Cases Fixed
10539
10540**Saturday → Sunday transition**:
10541- Today (Sat): Shows in Today section ✓
10542- Tomorrow (Sun): Shows in Tomorrow section ✓
10543- Week grid: Only shows Sat (today) ✓
10544
10545**Sunday → Monday transition**:
10546- Today (Sun): Shows in Today section ✓
10547- Tomorrow (Mon): Shows in Tomorrow section ✓
10548- Week grid: Shows both Sun and Mon ✓
10549
10550**Perfect! Tomorrow section now always works!** ��
10551
10552## Version 4.2.2 (2026-02-07) - SUNDAY NOT SATURDAY!
10553
10554### �� Corrected Week Options
10555- **Changed:** Week start options are now Monday vs **Sunday** (not Saturday!)
10556- **Changed:** Default is **Sunday** (US/Canada standard)
10557- **Fixed:** Day names array for Sunday start: S M T W T F S
10558
10559### �� Correct Week Start Options
10560
10561**Sunday Start** (Default):
10562- Grid shows: **S M T W T F S**
10563- Week: Sunday → Saturday
10564- US/Canada standard
10565- Most common worldwide
10566
10567**Monday Start**:
10568- Grid shows: **M T W T F S S**
10569- Week: Monday → Sunday
10570- ISO 8601 standard
10571- Common in Europe
10572
10573### Technical Changes
10574
10575**All References Updated**:
10576```php
10577// Changed from 'saturday' to 'sunday' in:
10578- Admin validation
10579- Week calculation logic
10580- Day names array
10581- Default value
10582- Comments
10583```
10584
10585**Sunday Calculation** (when today is Saturday):
10586```php
10587$today = date('w'); // 0=Sun, 6=Sat
10588if ($today == 0) {
10589    $weekStart = date('Y-m-d'); // Today!
10590} else {
10591    // Go back $today days to last Sunday
10592    $weekStart = date('Y-m-d', strtotime('-' . $today . ' days'));
10593}
10594```
10595
10596**Examples**:
10597- Today (Saturday): Week = Sun Feb 1 → Sat Feb 7
10598- Tomorrow (Sunday): Week = Sun Feb 8 → Sat Feb 14
10599
10600**Sorry for the confusion - it's Sunday not Saturday!** ��
10601
10602## Version 4.2.1 (2026-02-07) - FIX WEEK CALCULATION ON SATURDAY
10603
10604### �� Critical Fix
10605- **Fixed:** Week calculation broken when today is Saturday
10606- **Fixed:** Events not showing in Today/Important sections
10607- **Fixed:** Week grid event bars missing
10608- **Changed:** Default week start is Saturday (matches main calendar)
10609
10610### Technical Details
10611
10612**The Bug**:
10613```php
10614// BROKEN (v4.2.0):
10615$weekStart = date('Y-m-d', strtotime('saturday this week'));
10616// When TODAY is Saturday, this is ambiguous and fails!
10617
10618// FIXED (v4.2.1):
10619$today = date('w'); // 0 (Sun) to 6 (Sat)
10620if ($today == 6) {
10621    $weekStart = date('Y-m-d'); // Today!
10622} else {
10623    $daysBack = ($today == 0) ? 1 : ($today + 1);
10624    $weekStart = date('Y-m-d', strtotime('-' . $daysBack . ' days'));
10625}
10626$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
10627```
10628
10629**Why It Failed**:
10630- `strtotime('saturday this week')` is ambiguous when run ON a Saturday
10631- PHP may interpret it as "next Saturday" or fail
10632- Result: Week range was wrong, events filtered out
10633
10634**The Fix**:
10635- Explicit calculation using day-of-week math
10636- Saturday (day 6): weekStart = today
10637- Sunday (day 0): weekStart = yesterday
10638- Monday-Friday: calculate days back to last Saturday
10639
10640**Result**: Works reliably every day of the week!
10641
10642**Default Changed**: Saturday start (was Monday in 4.2.0)
10643- Matches main calendar behavior
10644- Users can still switch to Monday in settings
10645
10646## Version 4.2.0 (2026-02-07) - WEEK START DAY SELECTOR
10647
10648### ✨ New Feature
10649- **Added:** Week start day selector in Themes tab
10650- **Added:** Choose between Monday (ISO standard) or Saturday week start
10651- **Added:** Week grid and all events now respect the selected start day
10652- **Changed:** Themes tab renamed to "Sidebar Widget Settings"
10653
10654### �� Week Start Options
10655
10656**Monday Start** (Default):
10657- Grid shows: M T W T F S S
10658- Week runs: Monday → Sunday
10659- ISO 8601 standard
10660- Common in Europe, most of world
10661
10662**Saturday Start**:
10663- Grid shows: S S M T W T F
10664- Week runs: Saturday → Friday
10665- Common in Middle East
10666- Sabbath-observant communities
10667
10668### Technical Details
10669
10670**Configuration**:
10671```php
10672// Saved in: data/meta/calendar_week_start.txt
10673// Values: 'monday' or 'saturday'
10674
10675// Week calculation:
10676if ($weekStartDay === 'saturday') {
10677    $weekStart = date('Y-m-d', strtotime('saturday this week'));
10678    $weekEnd = date('Y-m-d', strtotime('friday next week'));
10679} else {
10680    $weekStart = date('Y-m-d', strtotime('monday this week'));
10681    $weekEnd = date('Y-m-d', strtotime('sunday this week'));
10682}
10683```
10684
10685**Day Names Array**:
10686```php
10687// Monday start: ['M', 'T', 'W', 'T', 'F', 'S', 'S']
10688// Saturday start: ['S', 'S', 'M', 'T', 'W', 'T', 'F']
10689```
10690
10691**What Changes**:
10692- Week grid day letters
10693- Week grid date sequence
10694- Today/Tomorrow/Important event date ranges
10695- Week event grouping
10696
10697**What Stays Same**:
10698- All themes still work
10699- Event data unchanged
10700- Main calendar unaffected
10701
10702### How to Change:
10703
107041. Admin → Calendar → �� Themes tab
107052. Under "Week Start Day" section
107063. Select Monday or Saturday
107074. Click "Save Settings"
107085. Refresh sidebar to see changes
10709
10710**Perfect for international users or religious observances!** ��
10711
10712## Version 4.1.4 (2026-02-07) - WEEK STARTS SUNDAY & LIGHTER BACKGROUNDS
10713
10714### ��️ Calendar Improvements
10715- **Changed:** Week grid now starts on Sunday and ends on Saturday (matches main calendar)
10716- **Changed:** Event section backgrounds much lighter (almost white)
10717- **Changed:** Individual event backgrounds lighter and more readable
10718- **Changed:** Event borders now theme-colored
10719
10720### Technical Details
10721
10722**Week Start Change**:
10723```php
10724// Before:
10725$weekStart = date('Y-m-d', strtotime('monday this week'));
10726$weekEnd = date('Y-m-d', strtotime('sunday this week'));
10727$dayNames = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
10728
10729// After:
10730$weekStart = date('Y-m-d', strtotime('sunday this week'));
10731$weekEnd = date('Y-m-d', strtotime('saturday this week'));
10732$dayNames = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
10733```
10734
10735**Background Colors**:
10736```php
10737// Section backgrounds (Today, Tomorrow, Important):
10738Matrix: rgba(255, 255, 255, 0.05)    // Very light overlay
10739Purple: rgba(255, 255, 255, 0.08)    // Slightly lighter
10740Professional: rgba(255, 255, 255, 0.95)  // Almost white!
10741
10742// Individual event backgrounds:
10743Matrix: rgba(255, 255, 255, 0.03)    // Subtle
10744Purple: rgba(255, 255, 255, 0.05)    // Light
10745Professional: rgba(255, 255, 255, 0.5)   // Semi-transparent white
10746```
10747
10748**Event Borders**:
10749```php
10750Matrix: rgba(0, 204, 7, 0.2)         // Green
10751Purple: rgba(155, 89, 182, 0.2)      // Purple
10752Professional: rgba(74, 144, 226, 0.2) // Blue
10753```
10754
10755### Visual Result:
10756
10757**Before**: Dark backgrounds made text hard to read
10758**After**: Light backgrounds make events pop and text very readable
10759
10760**Week Grid**:
10761```
10762Before: [M][T][W][T][F][S][S]
10763After:  [S][M][T][W][T][F][S]  ← Now matches main calendar!
10764```
10765
10766## Version 4.1.3 (2026-02-07) - EVENT TEXT THEME COLORS
10767
10768### �� Final Theme Polish
10769- **Fixed:** Event titles in Today/Tomorrow/Important sections now use theme colors
10770- **Fixed:** Event times now use theme bright color
10771- **Fixed:** Event dates use theme dim color
10772- **Fixed:** Task checkboxes use theme bright color
10773- **Fixed:** Event color bars use theme-appropriate shadows
10774- **Fixed:** No text shadows on Professional theme
10775
10776### Technical Details
10777
10778**Event Text Colors**:
10779```php
10780// Matrix:
10781- Title: #00cc07 (green)
10782- Time: #00dd00 (bright green)
10783- Date: #00aa00 (dim green)
10784- Text shadow: 0 0 3px (glow)
10785
10786// Purple:
10787- Title: #b19cd9 (lavender)
10788- Time: #d4a5ff (bright purple)
10789- Date: #8e7ab8 (dim purple)
10790- Text shadow: 0 0 3px (glow)
10791
10792// Professional:
10793- Title: #2c3e50 (dark grey)
10794- Time: #4a90e2 (blue)
10795- Date: #7f8c8d (grey)
10796- Text shadow: none (clean)
10797```
10798
10799**Color Bar Shadows**:
10800```php
10801// Matrix & Purple: Glow effect
10802box-shadow: 0 0 3px [event-color];
10803
10804// Professional: Subtle shadow
10805box-shadow: 0 1px 2px rgba(0,0,0,0.2);
10806```
10807
10808### What's Now Fully Themed:
10809
10810✅ Sidebar background & border
10811✅ Header (clock box) background, border, text
10812✅ Week grid background, borders, cells
10813✅ Week grid day letters & numbers
10814✅ Week grid event bars & "+N more" text
10815✅ Add Event button background & text
10816Today/Tomorrow/Important event titles
10817✅ Event times
10818✅ Event dates (Important section)
10819✅ Task checkboxes
10820✅ Event color bars
10821✅ All text shadows (glow vs none)
10822
10823**Every single element now respects the theme!** ��
10824
10825## Version 4.1.2 (2026-02-07) - COMPLETE THEME INTEGRATION
10826
10827### �� Theme Improvements
10828- **Fixed:** Week calendar grid now uses theme colors (purple/blue)
10829- **Fixed:** Add Event button now uses theme colors
10830- **Fixed:** Clock box border now matches theme
10831- **Fixed:** All text shadows respect theme (no glow on professional)
10832- **Fixed:** Event bars use theme-appropriate shadows
10833
10834### Technical Details
10835
10836**Week Grid Theming**:
10837```php
10838// Matrix: Dark green (#1a3d1a) background, green (#00cc07) borders
10839// Purple: Dark purple (#3d2b4d) background, purple (#9b59b6) borders
10840// Professional: Light grey (#e8ecf1) background, blue (#4a90e2) borders
10841```
10842
10843**Add Event Button**:
10844```php
10845// Matrix: Dark green (#006400) with bright green text
10846// Purple: Purple (#7d3c98) with lavender text
10847// Professional: Blue (#3498db) with white text
10848```
10849
10850**Text Shadows**:
10851```php
10852// Matrix & Purple: Glow effects (text-shadow: 0 0 6px color)
10853// Professional: No glow (clean look)
10854```
10855
10856**CSS Overrides**:
10857```css
10858/* Purple theme */
10859.sidebar-purple .eventlist-today-header {
10860    border-color: #9b59b6;
10861    box-shadow: 0 0 8px rgba(155, 89, 182, 0.2);
10862}
10863
10864/* Professional theme */
10865.sidebar-professional .eventlist-today-header {
10866    border-color: #4a90e2;
10867    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
10868}
10869```
10870
10871### What Changed Per Theme:
10872
10873**Purple Dream**:
10874- Week grid: Purple borders and dark purple background
10875- Add Event: Purple button with lavender text
10876- Clock box: Purple border with purple glow
10877- Event bars: Purple glow instead of green
10878- All text: Purple/lavender shades
10879
10880**Professional Blue**:
10881- Week grid: Blue borders and light grey background
10882- Add Event: Blue button with white text
10883- Clock box: Blue border with subtle shadow (no glow)
10884- Event bars: Subtle shadows (no glow)
10885- All text: Dark grey and blue shades
10886
10887**Matrix Edition**: Unchanged (still perfect green theme!)
10888
10889## Version 4.1.1 (2026-02-07) - THEMES TAB & TOOLTIP LEFT POSITIONING
10890
10891### ✨ New Features
10892- **Added:** �� Themes tab in admin for sidebar widget theming
10893- **Added:** Three visual themes: Matrix (green), Purple Dream (purple), Professional Blue (blue/grey)
10894- **Added:** Theme selector with live previews
10895- **Added:** Theme persistence across page loads
10896
10897### �� Available Themes
10898
10899**Matrix Edition** (Default):
10900- Dark background (#242424)
10901- Green accents (#00cc07)
10902- Neon glow effects
10903- Original Matrix styling
10904
10905**Purple Dream**:
10906- Dark purple background (#2a2030)
10907- Purple/violet accents (#9b59b6)
10908- Elegant purple glow
10909- Rich purple color scheme
10910
10911**Professional Blue**:
10912- Light grey background (#f5f7fa)
10913- Blue accents (#4a90e2)
10914- Clean professional look
10915- Subtle shadows instead of glow
10916
10917### �� Bug Fix
10918- **Fixed:** Tooltips now go UP and to the LEFT (was going right)
10919- **Changed:** Tooltip offset from `rect.right` to `rect.left - 150px`
10920
10921### Technical Details
10922
10923**Theme System**:
10924```php
10925// Saved in: data/meta/calendar_theme.txt
10926// Applied dynamically in syntax.php
10927$theme = $this->getSidebarTheme();  // 'matrix', 'purple', or 'professional'
10928$styles = $this->getSidebarThemeStyles($theme);
10929
10930// Styles include:
10931- bg, border, shadow
10932- header_bg, header_border, header_shadow
10933- text_primary, text_bright, text_dim
10934- grid_bg, grid_border
10935- cell_bg, cell_today_bg
10936```
10937
10938**Theme Changes**:
10939- Header background gradient
10940- Border colors
10941- Text colors
10942- Shadow/glow effects
10943- Grid colors
10944
10945**How to Change**:
109461. Admin → Calendar → �� Themes tab
109472. Select desired theme
109483. Click "Save Theme"
109494. Refresh page to see changes
10950
10951### Notes
10952- Themes only affect sidebar widget appearance
10953- Main calendar view unchanged
10954- Theme setting stored in `data/meta/calendar_theme.txt`
10955- Safe to switch themes - no data affected
10956
10957## Version 4.1.0 (2026-02-07) - FIX EVENT SORTING & TOOLTIP POSITIONING
10958
10959### �� Bug Fixes
10960- **Fixed:** Events now sort chronologically by time (was using string comparison)
10961- **Fixed:** Tooltip positioning using JavaScript like system tooltips
10962- **Fixed:** All-day events appear first, then events in time order
10963
10964### Technical Details
10965
10966**Event Sorting Fix**:
10967```php
10968// BROKEN (v4.0.9):
10969return strcmp($aTime, $bTime);
10970// String comparison: "10:00" < "8:00" because "1" < "8"
10971// Result: 10:00 AM shown BEFORE 8:00 AM ❌
10972
10973// FIXED (v4.1.0):
10974$aMinutes = $this->timeToMinutes($aTime);  // 8:00 = 480
10975$bMinutes = $this->timeToMinutes($bTime);  // 10:00 = 600
10976return $aMinutes - $bMinutes;
10977// Result: 8:00 AM shown BEFORE 10:00 AM ✓
10978```
10979
10980**Example Before Fix**:
10981```
10982�� Weekend Ticket Duty (all-day)
109838:00 AM START TICKETS
1098410:00 AM Soul Winning    ← Wrong!
109859:45 AM Coffee           ← Should be before 10:00 AM
10986```
10987
10988**Example After Fix**:
10989```
10990�� Weekend Ticket Duty (all-day)
109918:00 AM START TICKETS
109929:45 AM Coffee           ← Correct!
1099310:00 AM Soul Winning
10994```
10995
10996**Tooltip Positioning**:
10997- Added JavaScript to dynamically position tooltips using `getBoundingClientRect()`
10998- Uses CSS custom properties `--tooltip-left` and `--tooltip-top`
10999- Positioned on `mouseenter` event
11000- Matches system tooltip implementation (no cutoff)
11001
11002**JavaScript Implementation**:
11003```javascript
11004element.addEventListener("mouseenter", function() {
11005    const rect = element.getBoundingClientRect();
11006    element.style.setProperty("--tooltip-left", (rect.right - 10) + "px");
11007    element.style.setProperty("--tooltip-top", (rect.top - 30) + "px");
11008});
11009```
11010
11011**Result**: Tooltips now extend beyond sidebar without cutoff, positioned dynamically!
11012
11013## Version 4.0.9 (2026-02-07) - COMPACT TOOLTIPS & OVERFLOW FIX
11014
11015### �� UI Improvements
11016- **Fixed:** Sidebar tooltips no longer cut off at sidebar edge
11017- **Fixed:** Changed inline `overflow:hidden` to `overflow:visible` in sidebar
11018- **Changed:** Main calendar conflict tooltip now much smaller (was too big)
11019
11020### Technical Details
11021
11022**Sidebar Overflow Fix**:
11023```php
11024// Before (line 2005):
11025style="...overflow:hidden..."  // ← Blocked tooltips!
11026
11027// After:
11028style="...overflow:visible..."  // ← Tooltips extend beyond!
11029```
11030
11031**The Problem**: Inline `overflow:hidden` overrode CSS `overflow:visible !important`
11032
11033**Main Calendar Tooltip Size**:
11034```css
11035/* Before: */
11036.conflict-tooltip {
11037    border: 2px solid #ff9800;
11038    border-radius: 6px;
11039    padding: 8px 12px;
11040    font-size: 12px;
11041    min-width: 200px;
11042    max-width: 350px;
11043}
11044
11045/* After: */
11046.conflict-tooltip {
11047    border: 1px solid #ff9800;  /* Thinner */
11048    border-radius: 3px;          /* Smaller */
11049    padding: 4px 8px;            /* Less padding */
11050    font-size: 10px;             /* Smaller header */
11051    min-width: 120px;            /* Narrower */
11052    max-width: 200px;            /* Narrower */
11053}
11054
11055.conflict-tooltip-body {
11056    padding: 6px 8px;  /* Was 10px 12px */
11057    font-size: 9px;    /* Was 11px */
11058    line-height: 1.4;  /* Was 1.6 */
11059}
11060
11061.conflict-item {
11062    padding: 2px 0;  /* Was 4px */
11063    font-size: 9px;  /* Added smaller font */
11064}
11065```
11066
11067**Result**:
11068- Main calendar tooltip ~50% smaller
11069- Sidebar tooltips now extend beyond borders
11070- Both tooltips compact and readable
11071
11072## Version 4.0.8 (2026-02-07) - FIX NEWLINES IN TOOLTIP
11073
11074### �� Bug Fix
11075- **Fixed:** Tooltip now shows actual line breaks (not literal `\n` text)
11076- **Changed:** Using HTML entity `&#10;` for newlines instead of `\n`
11077
11078### Technical Details
11079
11080**The Problem**:
11081```php
11082// Before (v4.0.7):
11083$conflictTooltip = 'Conflicts with:\n';  // Literal \n showed in tooltip
11084
11085// Displayed as:
11086"Conflicts with:\n• Event 1\n• Event 2"  // ← Literal backslash-n
11087```
11088
11089**The Fix**:
11090```php
11091// After (v4.0.8):
11092$conflictTooltip = "Conflicts with:&#10;";  // HTML entity for newline
11093
11094// Displays as:
11095Conflicts with:
11096• Event 1
11097• Event 2
11098```
11099
11100**Why `&#10;` Works**:
11101- HTML entity for line feed character
11102- Works in data attributes
11103- CSS `white-space: pre-line` preserves the newlines
11104- Renders as actual line breaks in tooltip
11105
11106**Applied to**:
11107- PHP rendering (sidebar Today/Tomorrow/Important)
11108- JavaScript rendering (clicked day events)
11109
11110## Version 4.0.7 (2026-02-07) - COMPACT TOOLTIP & OVERFLOW FIX
11111
11112### �� UI Improvements
11113- **Changed:** Tooltip size reduced significantly (much more compact)
11114- **Fixed:** Tooltip now overflows sidebar borders (not cut off)
11115- **Changed:** Smaller padding (3px vs 6px), smaller font (9px vs 11px)
11116- **Changed:** Narrower width (120-200px vs 200-300px)
11117
11118### Technical Details
11119
11120**Tooltip Size Reduction**:
11121```css
11122/* Before (v4.0.6):
11123padding: 6px 10px;
11124font-size: 11px;
11125min-width: 200px;
11126max-width: 300px;
11127
11128/* After (v4.0.7): */
11129padding: 3px 6px;
11130font-size: 9px;
11131min-width: 120px;
11132max-width: 200px;
11133```
11134
11135**Overflow Fix**:
11136```css
11137/* Allow tooltip to extend beyond sidebar */
11138.sidebar-widget,
11139.sidebar-matrix {
11140    overflow: visible !important;
11141}
11142
11143/* Position tooltip outside */
11144[data-tooltip]:before {
11145    bottom: 120%;  /* Further above */
11146    right: -10px;  /* Can extend beyond edge */
11147    z-index: 10000; /* Always on top */
11148}
11149```
11150
11151**Visual Result**:
11152- Tooltip is ~40% smaller
11153- Extends beyond sidebar border if needed
11154- Still readable, just more compact
11155- Better for small screens
11156
11157## Version 4.0.6 (2026-02-07) - MATCH MAIN CALENDAR LOGIC & TOOLTIP POSITIONING
11158
11159### �� Critical Fix
11160- **Fixed:** Sidebar conflict detection now matches main calendar logic exactly
11161- **Fixed:** Checks both `end_time` (snake_case) and `endTime` (camelCase) field names
11162- **Fixed:** Events without end time now treated as zero-duration (not +1 hour)
11163- **Fixed:** Now matches what you see in main calendar view
11164
11165### ✨ UI Improvement
11166- **Changed:** Conflict tooltips now appear ABOVE and to the LEFT (not below/right)
11167- **Added:** Custom CSS tooltip with data-tooltip attribute
11168- **Improved:** Better tooltip positioning - doesn't overflow screen edges
11169
11170### Technical Details
11171
11172**The Problem - Field Name Mismatch**:
11173```php
11174// Main calendar (line 697):
11175$end1 = isset($evt1['endTime']) ? ... // ← Checks 'endTime' (camelCase)
11176
11177// Sidebar (before fix):
11178$endTime = isset($event['end_time']) ? ... // ← Only checked 'end_time' (snake_case)
11179```
11180
11181**The Problem - Duration Logic**:
11182```php
11183// Main calendar (line 697):
11184$end1 = isset($evt1['endTime']) && !empty($evt1['endTime'])
11185    ? $evt1['endTime']
11186    : $evt1['time'];  // ← Uses START time (zero duration)
11187
11188// Sidebar (before fix):
11189$endTime = ... ? ... : $this->addHoursToTime($startTime, 1);  // ← Added 1 hour!
11190```
11191
11192**The Fix**:
11193```php
11194// Now checks BOTH field names:
11195if (isset($event['end_time']) && $event['end_time'] !== '') {
11196    $endTime = $event['end_time'];
11197} elseif (isset($event['endTime']) && $event['endTime'] !== '') {
11198    $endTime = $event['endTime'];
11199} else {
11200    $endTime = $startTime;  // ← Matches main calendar!
11201}
11202```
11203
11204**Tooltip Positioning**:
11205- Uses `data-tooltip` attribute instead of `title`
11206- CSS positions tooltip ABOVE badge (`bottom: 100%`)
11207- Aligns to RIGHT edge (`right: 0`)
11208- Arrow points down to badge
11209- Black background with white text
11210- Max width 300px
11211
11212### Example
11213
11214**6:00 PM Evening Service** (no end time):
11215- Old: 6:00 PM - 7:00 PM (assumed 1 hour) ❌
11216- New: 6:00 PM - 6:00 PM (zero duration) ✓ Matches main calendar!
11217
11218**3:30 PM-7:00 PM Super Bowl** vs **6:00 PM Service**:
11219- Zero-duration events at 6:00 PM don't overlap with anything
11220- ONLY if service has explicit end time (e.g., 6:00-7:00) will it conflict
11221
11222**Tooltip appears**:
11223```
11224        ┌────────────────────┐
11225        │ Conflicts with:    │
11226        │ • Super Bowl       │
11227        │   (3:30 PM-7:00 PM)│
11228        └─────────┬──────────┘
112291123011231```
11232
11233## Version 4.0.5 (2026-02-07) - FIX END_TIME DEFAULT HANDLING
11234
11235### �� Bug Fix
11236- **Fixed:** Events without end_time now properly get 1-hour default duration
11237- **Fixed:** Empty string end_time values now treated as missing (was causing issues)
11238- **Improved:** More robust checking for `end_time` field (checks both isset and not empty)
11239
11240### Technical Details
11241
11242**The Problem**:
11243```php
11244// Before (broken):
11245$endTime = isset($event['end_time']) ? $event['end_time'] : default;
11246
11247// If end_time exists but is empty string "":
11248isset($event['end_time']) = TRUE
11249$endTime = ""  // ← Empty string, not default!
11250```
11251
11252**The Fix**:
11253```php
11254// After (fixed):
11255$endTime = (isset($event['end_time']) && $event['end_time'] !== '')
11256    ? $event['end_time']
11257    : $this->addHoursToTime($startTime, 1);
11258
11259// Now empty string gets the default 1-hour duration
11260```
11261
11262**Why This Matters**:
11263Events like "6:00 PM Evening Service" with no end time should be treated as 6:00-7:00 PM (1 hour). If the `end_time` field contains an empty string instead of being absent, the old code would use the empty string, causing conflict detection to fail.
11264
11265**Example**:
11266```
11267Super Bowl: 3:30 PM - 7:00 PM
11268Evening Service: 6:00 PM - ??? (should be 7:00 PM)
11269
11270If end_time = "" (empty string):
11271  Old code: Uses "" → conflict detection fails
11272  New code: Uses 7:00 PM → conflict detected ✓
11273```
11274
11275### Testing
11276If you're still not seeing the conflict on the 6:00 PM service:
112771. Check if the event has `end_time` set in the JSON
112782. Clear cache (Admin → Manage Events → Clear Cache)
112793. The conflict should now appear
11280
11281## Version 4.0.4 (2026-02-07) - CONFLICT TOOLTIP WITH DETAILS
11282
11283### ✨ Feature Added
11284- **Added:** Hover over ⚠ badge to see which events are conflicting
11285- **Added:** Tooltip shows conflicting event titles and times
11286- **Added:** Works in both sidebar sections and clicked day events
11287
11288### Technical Details
11289
11290**Conflict Tracking Enhanced**:
11291```php
11292// Now tracks WHICH events conflict:
11293$event['conflictingWith'] = [
11294    ['title' => 'Meeting', 'time' => '10:00', 'end_time' => '11:00'],
11295    ['title' => 'Call', 'time' => '10:30', 'end_time' => '11:30']
11296];
11297```
11298
11299**Tooltip Format**:
11300```
11301Conflicts with:
11302• Meeting (10:00 AM-11:00 AM)
11303• Call (10:30 AM-11:30 PM)
11304```
11305
11306**Where It Works**:
11307- ✅ Today section (sidebar)
11308- ✅ Tomorrow section (sidebar)
11309- ✅ Important Events section (sidebar)
11310- ✅ Clicked day events (week grid)
11311
11312**Cursor**: Changes to `help` cursor on hover to indicate tooltip
11313
11314### Note on Multi-Day Events
11315The current conflict detection only checks time conflicts **within the same day**. If you have an event that spans multiple days (e.g., start date on Monday, end date on Wednesday), each day is treated independently. To see conflicts across the entire span, you would need to check each individual day.
11316
11317## Version 4.0.3 (2026-02-07) - FIX CONFLICT BADGE & IMPORTANT EVENTS LOGIC
11318
11319### �� Bug Fixes
11320- **Fixed:** Conflict badge (⚠) now displays in sidebar Today/Tomorrow/Important sections
11321- **Fixed:** Important Events now shows events even if they're today or tomorrow
11322- **Fixed:** Field name mismatch - was checking `'conflicts'` (plural) but setting `'conflict'` (singular)
11323
11324### Technical Details
11325
11326**Conflict Badge Issue**:
11327```php
11328// BROKEN (line 2511):
11329$hasConflict = isset($event['conflicts']) && !empty($event['conflicts']);
11330// ↑ Checking 'conflicts' (plural)
11331
11332// But detectTimeConflicts() sets:
11333$event['conflict'] = true/false;
11334// ↑ Setting 'conflict' (singular)
11335
11336// FIXED:
11337$hasConflict = isset($event['conflict']) && $event['conflict'];
11338```
11339
11340**Result**: Badge now shows for ALL conflicting events in sidebar sections
11341
11342**Important Events Logic Issue**:
11343```php
11344// BROKEN:
11345if ($dateKey === $todayStr) {
11346    $todayEvents[] = ...;
11347} elseif ($dateKey === $tomorrowStr) {
11348    $tomorrowEvents[] = ...;
11349} else {  // ← Only checked if NOT today/tomorrow!
11350    if ($isImportant) {
11351        $importantEvents[] = ...;
11352    }
11353}
11354
11355// FIXED:
11356if ($dateKey === $todayStr) {
11357    $todayEvents[] = ...;
11358}
11359if ($dateKey === $tomorrowStr) {
11360    $tomorrowEvents[] = ...;
11361}
11362// ↑ Changed to separate 'if' statements
11363if ($isImportant && $dateKey in this week) {
11364    $importantEvents[] = ...;  // ← Now includes today/tomorrow too!
11365}
11366```
11367
11368**Result**: Important namespace events now show in Important section even if they're today or tomorrow
11369
11370### Conflict Badge Display
11371- Simplified to just ⚠ icon (no count)
11372- Orange color (#ff9800)
11373- 10px font size
11374- Hover shows "Time conflict detected"
11375
11376## Version 4.0.2 (2026-02-07) - FIX IMPORTANT EVENTS DISPLAY
11377
11378### �� Bug Fix
11379- **Fixed:** Important Events section now displays all events correctly
11380- **Fixed:** Single-event days now get conflict flag (was returning early without flag)
11381- **Fixed:** Conflict detection no longer causes events to disappear from Important section
11382
11383### Technical Details
11384
11385**The Problem**:
11386- `detectTimeConflicts()` returned early if only 1 event on a day
11387- Returned original array without adding 'conflict' field
11388- This inconsistency caused issues in event categorization
11389
11390**The Solution**:
11391```php
11392// Before (broken):
11393if (empty($dayEvents) || count($dayEvents) < 2) {
11394    return $dayEvents;  // No 'conflict' field added!
11395}
11396
11397// After (fixed):
11398if (count($dayEvents) === 1) {
11399    return [array_merge($dayEvents[0], ['conflict' => false])];  // Always add flag
11400}
11401```
11402
11403**Result**:
11404- All events now have 'conflict' field consistently
11405- Single events: conflict = false
11406- Multiple events: conflict = true/false based on overlap
11407- Important Events section displays correctly
11408
11409## Version 4.0.1 (2026-02-06) - CONFLICT DETECTION, TAB REORDER, FIXES
11410
11411### �� Bug Fixes
11412- **Fixed:** Conflict badge (⚠) now displays in clicked day events
11413- **Fixed:** Recurring events edit now updates time and end_time correctly
11414- **Fixed:** Field names changed from 'start'/'end' to 'time'/'end_time' in recurring edit
11415
11416### ✨ Features Added
11417- **Added:** Time conflict detection for overlapping events
11418- **Added:** detectTimeConflicts() function checks all events on same day
11419- **Added:** timesOverlap(), timeToMinutes(), addMinutesToTime() helper functions
11420- **Added:** Events now have 'conflict' flag set automatically
11421
11422### �� UI Changes
11423- **Changed:** Admin tab order: �� Manage Events (first), �� Update Plugin, ⚙️ Outlook Sync
11424- **Changed:** Default admin tab is now "Manage Events" (was "Update Plugin")
11425- **Changed:** Week view now shows 4 colored event bars before "+1" (was 3 bars)
11426
11427### Technical Details
11428
11429**Conflict Detection**:
11430```php
11431// Automatically detects overlapping events on same day
11432// Sets 'conflict' flag to true if event overlaps with another
11433$eventsWithConflicts = $this->detectTimeConflicts($dayEvents);
11434```
11435
11436**Logic**:
11437- All-day events never conflict (no time set)
11438- Timed events check for overlap with other timed events
11439- Overlap = start1 < end2 AND start2 < end1
11440- Default duration is 60 minutes if no end_time
11441
11442**Recurring Events Fix**:
11443- Old: Updated `$event['start']` and `$event['end']` (wrong fields)
11444- New: Updates `$event['time']` and `$event['end_time']` (correct fields)
11445- Now edits actually save and update the events
11446
11447**Week View Bars**:
11448- Shows 4 colored bars instead of 3
11449- "+1" becomes "+2" with 5 events, "+3" with 6 events, etc.
11450
11451## Version 4.0.0 (2026-02-06) - MATRIX EDITION RELEASE ��
11452
11453**Major Release**: Complete Matrix-themed calendar plugin with advanced features!
11454
11455### �� Major Features
11456
11457#### Sidebar Widget
11458- **Week Grid**: Interactive 7-day calendar with click-to-view events
11459- **Live System Monitoring**: CPU load, real-time CPU, memory usage with tooltips
11460- **Live Clock**: Updates every second with date display
11461- **Real-time Weather**: Geolocation-based temperature with icon
11462- **Event Sections**: Today (orange), Tomorrow (green), Important (purple)
11463- **Add Event Button**: Dark green bar opens full event creation dialog
11464- **Matrix Theme**: Green glow effects throughout
11465
11466#### Event Management
11467- **Single Color Bars**: Clean 3px bars showing event's assigned color
11468- **All-Day Events First**: Then sorted chronologically by time
11469- **Conflict Detection**: Orange ⚠ badge on overlapping events
11470- **Rich Content**: Full DokuWiki formatting (**bold**, [[links]], //italic//)
11471- **HTML Rendering**: Pre-rendered for JavaScript display
11472- **Click-to-View**: Click week grid days to expand event details
11473
11474#### Admin Interface
11475- **Update Plugin Tab** (Default): Version info, changelog, prominent Clear Cache button
11476- **Outlook Sync Tab**: Microsoft Azure integration, category mapping, sync settings
11477- **Manage Events Tab**: Browse, edit, delete, move events across namespaces
11478
11479#### Outlook Sync
11480- **Bi-directional Sync**: DokuWiki ↔ Microsoft Outlook
11481- **Category Mapping**: Map colors to Outlook categories
11482- **Conflict Resolution**: Time conflict detection
11483- **Import/Export Config**: Encrypted configuration files
11484
11485### �� Design
11486- **Matrix Theme**: Authentic green glow aesthetic
11487- **Dark Backgrounds**: #1a1a1a header, rgba(36, 36, 36) sections
11488- **Color Scheme**:
11489  - Today: Orange #ff9800
11490  - Tomorrow: Green #4caf50
11491  - Important: Purple #9b59b6
11492  - Add Event: Dark green #006400
11493  - System bars: Green/Purple/Orange
11494
11495### �� Technical Highlights
11496- **Zero-margin Design**: Perfect flush alignment throughout
11497- **Flexbox Layout**: Modern, responsive structure
11498- **AJAX Operations**: No page reloads needed
11499- **Smart Sorting**: All-day events first, then chronological
11500- **Tooltip System**: Detailed stats on hover (working correctly)
11501- **Event Dialog**: Full form with drag support
11502- **Cache Management**: One-click cache clearing
11503
11504### �� Breaking Changes from v3.x
11505- Removed dual color bars (now single event color bar only)
11506- Add Event button moved to between header and week grid
11507- All-day events now appear FIRST (not last)
11508- Update Plugin tab is now the default admin tab
11509
11510### �� Bug Fixes (v3.10.x → v4.0.0)
11511- ✅ Fixed color bars not showing (align-self:stretch vs height:100%)
11512- ✅ Fixed tooltip function naming (sanitized calId for JavaScript)
11513- ✅ Fixed weather display (added updateWeather function)
11514- ✅ Fixed HTML rendering in events (title_html/description_html fields)
11515- ✅ Fixed Add Event dialog (null check for calendar element)
11516- ✅ Fixed text positioning in Add Event button
11517- ✅ Fixed spacing throughout sidebar widget
11518
11519### �� Complete Feature List
11520- Full calendar view (month grid)
11521- Sidebar widget (week view)
11522- Event panel (standalone)
11523- Event list (date ranges)
11524- Namespace support
11525- Color coding
11526- Time conflict detection
11527- DokuWiki syntax in events
11528- Outlook synchronization
11529- System monitoring
11530- Weather display
11531- Live clock
11532- Admin interface
11533- Cache management
11534- Draggable dialogs
11535- AJAX save/edit/delete
11536- Import/export config
11537
11538### �� Usage
11539
11540**Sidebar Widget**:
11541```
11542{{calendar sidebar}}
11543{{calendar sidebar namespace=team}}
11544```
11545
11546**Full Calendar**:
11547```
11548{{calendar}}
11549{{calendar year=2026 month=6 namespace=team}}
11550```
11551
11552**Event Panel**:
11553```
11554{{eventpanel}}
11555```
11556
11557**Event List**:
11558```
11559{{eventlist daterange=2026-01-01:2026-01-31}}
11560```
11561
11562### �� Stats
11563- **40+ versions** developed during v3.x iterations
11564- **3.10.0 → 3.11.4**: Polish and refinement
11565- **4.0.0**: Production-ready Matrix Edition
11566
11567### �� Credits
11568Massive iteration and refinement session resulting in a polished, feature-complete calendar plugin with authentic Matrix aesthetics and enterprise-grade Outlook integration.
11569
11570---
11571
11572## Previous Versions (v3.11.4 and earlier)
11573
11574## Version 3.11.4 (2026-02-06) - RESTORE HEADER BOTTOM SPACING
11575- **Changed:** Restored 2px bottom padding to header (was 0px, now 2px)
11576- **Improved:** Small breathing room between system stats bars and Add Event button
11577- **Visual:** Better spacing for cleaner appearance
11578
11579### CSS Change:
11580**eventlist-today-header**:
11581- `padding: 6px 10px 0 10px` → `padding: 6px 10px 2px 10px`
11582
11583### Visual Result:
11584```
11585│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats bars
11586│                       │  ← 2px space (restored)
11587├───────────────────────┤
11588│  + ADD EVENT          │  ← Add Event bar
11589├───────────────────────┤
11590```
11591
11592**Before (v3.11.3)**: No space, bars directly touch Add Event button
11593**After (v3.11.4)**: 2px breathing room for better visual hierarchy
11594
11595## Version 3.11.3 (2026-02-06) - FIX ADD EVENT DIALOG & TEXT POSITION
11596- **Fixed:** openAddEvent() function now checks if calendar element exists before reading dataset
11597- **Fixed:** Add Event button no longer throws "Cannot read properties of null" error
11598- **Changed:** Add Event text moved up 1px (position:relative; top:-1px)
11599- **Changed:** Line-height reduced from 12px to 10px for better text centering
11600- **Improved:** openAddEvent() works for both regular calendars and sidebar widgets
11601
11602### JavaScript Fix:
11603**Problem**: Line 1084-1085 in calendar-main.js
11604```javascript
11605const calendar = document.getElementById(calId);
11606const filteredNamespace = calendar.dataset.filteredNamespace; // ← Null error!
11607```
11608
11609**Solution**: Added null check
11610```javascript
11611const calendar = document.getElementById(calId);
11612const filteredNamespace = calendar ? calendar.dataset.filteredNamespace : null;
11613```
11614
11615**Why This Happened**:
11616- Regular calendar has element with id=calId
11617- Sidebar widget doesn't have this element (different structure)
11618- Code tried to read .dataset on null, causing error
11619
11620### Text Position Fix:
11621**Before**:
11622- line-height: 12px
11623- vertical-align: middle
11624- Text slightly low
11625
11626**After**:
11627- line-height: 10px
11628- position: relative; top: -1px
11629- Text perfectly centered
11630
11631### What Works Now:
11632✅ Click "+ ADD EVENT" in sidebar → Dialog opens
11633✅ No console errors
11634✅ Text properly centered vertically
11635✅ Form pre-filled with today's date
11636✅ Save works correctly
11637
11638## Version 3.11.2 (2026-02-06) - ADD EVENT DIALOG IN SIDEBAR
11639- **Added:** Event dialog to sidebar widget (same as regular calendar)
11640- **Changed:** Add Event button now opens proper event form dialog
11641- **Added:** renderEventDialog() called in renderSidebarWidget()
11642- **Fixed:** Add Event button calls openAddEvent() with calId, namespace, and today's date
11643- **Improved:** Can now add events directly from sidebar widget
11644
11645### Add Event Button Behavior:
11646**Before (v3.11.1)**: Showed alert with instructions
11647**After (v3.11.2)**: Opens full event creation dialog
11648
11649**Dialog Features**:
11650- Date field (defaults to today)
11651- Title field (required)
11652- Time field (optional)
11653- End time field (optional)
11654- Color picker
11655- Category field
11656- Description field
11657- Save and Cancel buttons
11658- Draggable dialog
11659
11660### Technical Changes:
11661- Added `$html .= $this->renderEventDialog($calId, $namespace);` at end of renderSidebarWidget()
11662- Changed Add Event onclick from alert to `openAddEvent('calId', 'namespace', 'YYYY-MM-DD')`
11663- Dialog uses same structure as regular calendar
11664- Uses existing openAddEvent() and saveEventCompact() JavaScript functions
11665
11666### User Flow:
116671. User clicks "+ ADD EVENT" green bar
116682. Event dialog opens with today's date pre-filled
116693. User fills in event details
116704. User clicks Save
116715. Event saved via AJAX
116726. Dialog closes
116737. Sidebar refreshes to show new event
11674
11675## Version 3.11.1 (2026-02-06) - FLUSH HEADER & ADD EVENT DIALOG
11676- **Fixed:** Removed bottom padding from header (was 2px, now 0)
11677- **Fixed:** Removed margin from stats container (was margin-top:2px, now margin:0)
11678- **Fixed:** Add Event bar now flush against header with zero gap
11679- **Changed:** Add Event button now shows helpful alert dialog instead of navigating to admin
11680- **Improved:** Alert provides clear instructions on how to add events
11681
11682### CSS Changes:
11683**eventlist-today-header**:
11684- `padding: 6px 10px 2px 10px` → `padding: 6px 10px 0 10px` (removed 2px bottom)
11685
11686**eventlist-stats-container**:
11687- `margin-top: 2px` → `margin: 0` (removed all margins)
11688
11689### Add Event Button Behavior:
11690**Before**: Clicked → Navigated to Admin → Manage Events tab
11691**After**: Clicked → Shows alert with instructions
11692
11693**Alert Message**:
11694```
11695To add an event, go to:
11696Admin → Calendar Management → Manage Events tab
11697or use the full calendar view {{calendar}}
11698```
11699
11700### Visual Result:
11701```
11702│  ▓▓▓░░ ▓▓░░░ ▓▓▓▓░  │  ← Stats (no margin-bottom)
11703├────────────────────────┤
11704│  + ADD EVENT           │  ← Perfectly flush!
11705├────────────────────────┤
11706```
11707
11708No gaps, perfectly aligned!
11709
11710## Version 3.11.0 (2026-02-06) - ADD EVENT BAR FINAL POSITION & SIZE
11711- **Moved:** Add Event bar back to original position (between header and week grid)
11712- **Changed:** Font size reduced from 9px to 8px (prevents text cutoff)
11713- **Changed:** Letter spacing reduced from 0.5px to 0.4px
11714- **Fixed:** Text now fully visible without being cut off
11715- **Final:** Optimal position and size determined
11716
11717### Final Layout:
11718```
11719┌─────────────────────────────┐
11720│  Clock | Weather | Stats    │  ← Header
11721├─────────────────────────────┤
11722│  + ADD EVENT                 │  ← Bar (back here, smaller text)
11723├─────────────────────────────┤
11724│  M  T  W  T  F  S  S        │  ← Week Grid
11725│  3  4  5  6  7  8  9        │
11726├─────────────────────────────┤
11727│  Today                       │  ← Event sections
11728└─────────────────────────────┘
11729```
11730
11731### Text Size Changes:
11732**v3.10.9**: 9px font, 0.5px letter-spacing → Text slightly cut off
11733**v3.11.0**: 8px font, 0.4px letter-spacing → Text fully visible
11734
11735### Why This Position:
11736- Separates header from calendar
11737- Natural action point after viewing stats
11738- Users see stats → decide to add event → view calendar
11739- Consistent with original design intent
11740
11741## Version 3.10.9 (2026-02-06) - ADD EVENT BAR MOVED BELOW WEEK GRID
11742- **Moved:** Add Event bar repositioned from between header/grid to below week grid
11743- **Improved:** Better visual flow - header → stats → grid → add button → events
11744- **Changed:** Add Event bar now acts as separator between calendar and event sections
11745
11746### New Layout:
11747```
11748┌─────────────────────────────┐
11749│  Clock | Weather | Stats    │  ← Header
11750├─────────────────────────────┤
11751│  M  T  W  T  F  S  S        │  ← Week Grid
11752│  3  4  5  6  7  8  9        │
11753├─────────────────────────────┤
11754│  + ADD EVENT                 │  ← Add bar (moved here!)
11755├─────────────────────────────┤
11756│  Today                       │  ← Event sections
11757│  Tomorrow                    │
11758│  Important Events            │
11759└─────────────────────────────┘
11760```
11761
11762### Visual Flow:
11763**Before (v3.10.8)**:
117641. Header (clock, weather, stats)
117652. **+ ADD EVENT** bar
117663. Week grid
117674. Event sections
11768
11769**After (v3.10.9)**:
117701. Header (clock, weather, stats)
117712. Week grid (calendar days)
117723. **+ ADD EVENT** bar
117734. Event sections
11774
11775### Benefits:
11776- Natural reading flow: View calendar → Add event → See events
11777- Add button positioned between calendar and event list
11778- Acts as visual separator
11779- More logical action placement
11780
11781## Version 3.10.8 (2026-02-06) - SINGLE COLOR BAR & ZERO MARGIN ADD BAR
11782- **Removed:** Section color bar (blue/orange/green/purple) - now shows ONLY event color
11783- **Changed:** Events now display with single 3px color bar (event's assigned color only)
11784- **Fixed:** Add Event bar now has zero margin (margin:0) - touches header perfectly
11785- **Simplified:** Cleaner visual with one color bar instead of two
11786- **Improved:** More space for event content without extra bar
11787
11788### Visual Changes:
11789
11790**Before (v3.10.7)** - Dual color bars:
11791```
11792├─ [Orange][Green]  Event Title
11793├─ [Blue][Purple]   Event Title
11794```
11795
11796**After (v3.10.8)** - Single color bar:
11797```
11798├─ [Green]  Event Title    ← Only event color!
11799├─ [Purple] Event Title    ← Only event color!
11800```
11801
11802### Add Bar Changes:
11803- Added `margin:0` to eliminate gaps
11804- Now flush against header (no space above)
11805- Now flush against week grid (no space below)
11806- Perfect seamless connection
11807
11808### Technical Changes:
11809**renderSidebarEvent()**:
11810- Removed section color bar (4px)
11811- Kept only event color bar (3px)
11812
11813**showDayEvents() JavaScript**:
11814- Removed section color bar (4px blue)
11815- Kept only event color bar (3px)
11816
11817**Add Event bar**:
11818- Added `margin:0` inline style
11819- Removed all top/bottom margins
11820
11821## Version 3.10.7 (2026-02-06) - COLOR BARS FIX FOR SECTIONS & DARK GREEN ADD BAR
11822- **Fixed:** Color bars now display in Today/Tomorrow/Important sections (was only showing in clicked day)
11823- **Fixed:** Changed Today/Tomorrow/Important event rendering to use `align-self:stretch` instead of `height:100%`
11824- **Changed:** Add Event bar color from orange to dark green (#006400)
11825- **Changed:** Add Event bar height increased from 6px to 12px (text no longer cut off)
11826- **Changed:** Add Event bar text now bright green (#00ff00) with green glow
11827- **Changed:** Add Event bar font size increased from 7px to 9px
11828- **Changed:** Add Event bar letter spacing increased to 0.5px
11829- **Improved:** Hover effect on Add Event bar now darker green (#004d00)
11830
11831### Color Bar Fix Details:
11832**Problem**: Today/Tomorrow/Important sections still used `height:100%` on color bars
11833**Solution**: Applied same fix as clicked day events:
11834- Changed parent div: `align-items:start` → `align-items:stretch`
11835- Added `min-height:20px` to parent
11836- Changed bars: `height:100%` → `align-self:stretch`
11837- Bars now properly fill vertical space in ALL sections
11838
11839### Add Event Bar Changes:
11840**Before**:
11841- Background: Orange (#ff9800)
11842- Text: Black (#000)
11843- Height: 6px (text cut off)
11844- Font: 7px
11845
11846**After**:
11847- Background: Dark green (#006400)
11848- Text: Bright green (#00ff00) with green glow
11849- Height: 12px (text fully visible)
11850- Font: 9px
11851- Hover: Darker green (#004d00)
11852- Matrix-themed green aesthetic
11853
11854## Version 3.10.6 (2026-02-06) - COLOR BARS FIX, SORTING REVERSAL, CONFLICT BADGE, README UPDATE
11855- **Fixed:** Event color bars now display correctly in clicked day events
11856- **Fixed:** Changed sorting - all-day events now appear FIRST, then timed events
11857- **Added:** Conflict badge (⚠) appears on right side of conflicting events
11858- **Updated:** Complete README.md rewrite with full Matrix theme documentation
11859- **Changed:** Color bars use `align-self:stretch` instead of `height:100%` (fixes rendering)
11860- **Changed:** Parent div uses `align-items:stretch` and `min-height:20px`
11861- **Improved:** Content wrapper now uses flexbox for proper conflict badge positioning
11862
11863### Color Bar Fix:
11864**Problem**: Bars had `height:100%` but parent had no explicit height
11865**Solution**:
11866- Changed to `align-self:stretch` on bars
11867- Parent uses `align-items:stretch`
11868- Added `min-height:20px` to parent
11869- Bars now properly fill vertical space
11870
11871### Sorting Change:
11872**Before**: Timed events first → All-day events last
11873**After**: All-day events FIRST → Timed events chronologically
11874
11875**Example**:
11876```
11877Monday, Feb 5
11878├─ All Day - Project Deadline       ← All-day first
11879├─ 8:00 AM - Morning Standup        ← Earliest time
11880├─ 10:30 AM - Coffee with Bob
11881└─ 2:00 PM - Team Meeting           ← Latest time
11882```
11883
11884### Conflict Badge:
11885- Orange warning triangle (⚠) on right side
11886- 10px font size
11887- Only appears if `event.conflict` is true
11888- Title attribute shows "Time conflict detected"
11889- Small and unobtrusive
11890
11891### README Update:
11892- Complete rewrite with Matrix theme focus
11893- Full usage instructions for all features
11894- Admin interface documentation
11895- Outlook sync setup guide
11896- System monitoring details
11897- Troubleshooting section
11898- Color scheme reference
11899- File structure documentation
11900- Performance tips
11901- Security notes
11902- Quick start examples
11903
11904## Version 3.10.5 (2026-02-06) - TIME SORTING & THINNER ADD BAR
11905- **Added:** Events now sorted by time when clicking week grid days
11906- **Changed:** Add Event bar now ultra-thin (6px height, down from 12px)
11907- **Improved:** Events with times appear first, sorted chronologically
11908- **Improved:** All-day events appear after timed events
11909- **Changed:** Add Event bar font size reduced to 7px (from 10px)
11910- **Changed:** Add Event bar now has 0 padding and fixed 6px height
11911
11912### Sorting Logic:
11913- Events with times sorted by time (earliest first)
11914- All-day events (no time) appear at the end
11915- Sort algorithm: Convert time to minutes (HH:MM → total minutes) and compare
11916- Chronological order: 8:00 AM → 10:30 AM → 2:00 PM → All-day event
11917
11918### Add Event Bar Changes:
11919- **Height**: 6px (was ~12px with padding)
11920- **Padding**: 0 (was 4px top/bottom)
11921- **Font Size**: 7px (was 10px)
11922- **Letter Spacing**: 0.3px (was 0.5px)
11923- **Line Height**: 6px to match height
11924- **Vertical Align**: Middle for text centering
11925
11926## Version 3.10.4 (2026-02-06) - ADD EVENT BAR
11927- **Added:** Thin orange "Add Event" bar between header and week grid
11928- **Added:** Quick access to event creation from sidebar widget
11929- **Styled:** Sleek design with hover effects and glow
11930- **Interactive:** Clicks navigate to Manage Events tab in admin
11931- **Improved:** User workflow for adding events from sidebar
11932
11933### Visual Design:
11934- Orange background (#ff9800) matching Today section color
11935- 4px top/bottom padding for thin, sleek appearance
11936- Black text with white text-shadow for visibility
11937- Hover effect: Darkens to #ff7700 with enhanced glow
11938- Orange glow effect (box-shadow) matching Matrix theme
11939- Centered "+ ADD EVENT" text (10px, bold, letter-spacing)
11940
11941### Technical Changes:
11942- Added between header close and renderWeekGrid() call
11943- Inline onclick handler navigates to admin manage tab
11944- Inline onmouseover/onmouseout for hover effects
11945- Smooth 0.2s transition on all style changes
11946
11947## Version 3.10.3 (2026-02-06) - UI IMPROVEMENTS & CACHE BUTTON RELOCATION
11948- **Changed:** Update Plugin tab is now the default tab when opening admin
11949- **Moved:** Clear Cache button relocated from Outlook Sync tab to Update Plugin tab
11950- **Improved:** Clear Cache button now larger and more prominent with helpful description
11951- **Improved:** Tab order reorganized: Update Plugin (default) → Outlook Sync → Manage Events
11952- **Removed:** Debug console.log statements from day event display
11953- **Fixed:** Cache clear now redirects back to Update Plugin tab instead of Config tab
11954
11955### UI Changes:
11956- Update Plugin tab opens by default (was Config/Outlook Sync tab)
11957- Clear Cache button prominently displayed at top of Update Plugin tab
11958- Orange ��️ button (10px 20px padding) with confirmation dialog
11959- Help text: "Clear the DokuWiki cache if changes aren't appearing or after updating the plugin"
11960- Success/error messages display on Update Plugin tab after cache clear
11961- Tab navigation reordered to put Update first
11962
11963### Technical Changes:
11964- Default tab changed from 'config' to 'update' in html() method
11965- Tab navigation HTML reordered to show Update Plugin tab first
11966- clearCache() method now redirects with 'update' tab parameter
11967- Removed Clear Cache button from renderConfigTab()
11968- Added Clear Cache button to renderUpdateTab() with message display
11969
11970## Version 3.10.2 (2026-02-06) - EVENT HTML RENDERING FIX
11971- **Fixed:** Event formatting (bold, links, italic) now displays correctly when clicking week grid days
11972- **Added:** renderDokuWikiToHtml() helper function to convert DokuWiki syntax to HTML
11973- **Changed:** Events in weekEvents now pre-rendered with title_html and description_html fields
11974- **Improved:** DokuWiki syntax (**bold**, [[links]], //italic//, etc.) properly rendered in clicked day events
11975
11976### Technical Changes:
11977- Added renderDokuWikiToHtml() private function using p_get_instructions() and p_render()
11978- Events added to weekEvents now include pre-rendered HTML versions
11979- title_html and description_html fields populated before json_encode()
11980- JavaScript now receives properly formatted HTML content
11981
11982## Version 3.10.1 (2026-02-06) - TOOLTIP FIX & WEATHER & CACHE BUTTON
11983- **Fixed:** System tooltip functions now use sanitized calId (showTooltip_sidebar_abc123 instead of showTooltip_sidebar-abc123)
11984- **Fixed:** HTML event handlers now call correctly sanitized function names
11985- **Fixed:** Weather temperature now updates correctly in sidebar widget
11986- **Added:** Weather update function to sidebar widget JavaScript
11987- **Added:** "Clear Cache" button in admin panel for easy cache refresh
11988- **Added:** Default weather location set to Irvine, CA when geolocation unavailable
11989- **Improved:** All tooltip functions now work correctly on system status bars
11990
11991### Technical Changes:
11992- Changed tooltip function names to use $jsCalId instead of $calId
11993- Changed HTML onmouseover/onmouseout to use $jsCalId
11994- Added updateWeather() function to sidebar widget
11995- Added getWeatherIcon() function to sidebar widget
11996- Added clearCache() method in admin.php
11997- Added recursiveDelete() helper method in admin.php
11998- Admin UI now has ��️ Clear Cache button alongside Export/Import
11999
12000## Version 3.10.0 (2026-02-06) - JAVASCRIPT FIXES
12001- **Fixed:** JavaScript syntax error "Missing initializer in const declaration"
12002- **Fixed:** Event links and formatting not displaying in clicked day events
12003- **Fixed:** Sanitized calId to jsCalId by replacing dashes with underscores
12004- **Changed:** Event titles now use `title_html` field to preserve HTML formatting
12005- **Changed:** Event descriptions now use `description_html` field to preserve links and formatting
12006- **Improved:** All JavaScript variable names now use valid syntax
12007- **Improved:** Links, bold, italic, and other HTML formatting preserved in events
12008
12009### Technical Changes:
12010- Added variable sanitization: `$jsCalId = str_replace('-', '_', $calId);`
12011- JavaScript variables now use underscores instead of dashes
12012- Event HTML rendering preserves DokuWiki formatting
12013- Fixed "showTooltip_sidebar is not defined" errors
12014- Fixed "showDayEvents_cal is not defined" errors
12015
12016## Version 3.9.9 (2026-02-06) - JAVASCRIPT LOADING ORDER FIX
12017- **Fixed:** Critical JavaScript loading order issue causing ReferenceError
12018- **Fixed:** Functions now defined BEFORE HTML that uses them
12019- **Changed:** Consolidated all JavaScript into single comprehensive script block
12020- **Removed:** ~290 lines of duplicate JavaScript code
12021- **Added:** Shared state management with `sharedState_[calId]` object
12022- **Improved:** System tooltip functions now work correctly
12023- **Improved:** Week grid click events now work correctly
12024
12025### Technical Changes:
12026- Moved all JavaScript to beginning of widget (before HTML)
12027- Removed duplicate script blocks
12028- Unified tooltip and stats functions
12029- Shared latestStats and cpuHistory state
12030- Fixed "Uncaught ReferenceError: showTooltip_sidebar is not defined"
12031
12032## Version 3.9.8 (2026-02-05) - DUAL COLOR BARS & CLICK EVENTS
12033- **Added:** Dual color bars on events (section color + event color)
12034- **Added:** Click week grid days to view events (replaced hover tooltips)
12035- **Added:** Expandable section below week grid for selected day events
12036- **Added:** Blue theme for selected day section
12037- **Changed:** Week grid days now clickable instead of tooltips
12038- **Changed:** Section bar: 4px wide (left)
12039- **Changed:** Event bar: 3px wide (right)
12040- **Increased:** Gap between color bars from 3px to 6px
12041- **Improved:** Click is more reliable and mobile-friendly than hover tooltips
12042
12043### Visual Changes:
12044- Each event shows TWO color bars side-by-side
12045- Left bar (4px): Section context (Today=Orange, Tomorrow=Green, Important=Purple, Selected=Blue)
12046- Right bar (3px): Individual event's assigned color
12047- Click any day in week grid to expand event list
12048- X button to close selected day events
12049
12050## Version 3.9.7 (2026-02-05) - EVENT COLOR BAR VISIBILITY
12051- **Increased:** Event color bar width from 2px to 3px
12052- **Increased:** Gap between section and event bars from 3px to 6px
12053- **Improved:** Event color bars now more visible alongside section bars
12054- **Note:** Dual color bar system already in place from v3.9.6
12055
12056## Version 3.9.6 (2026-02-05) - UI REFINEMENTS
12057- **Changed:** Date in Important Events moved below event name (was above)
12058- **Changed:** Section headers now 9px font size (was 10px)
12059- **Changed:** Section headers now normal case (was ALL CAPS)
12060- **Changed:** Letter spacing reduced from 0.8px to 0.3px
12061- **Improved:** More natural reading flow with date below event name
12062- **Improved:** Cleaner, more subtle section headers
12063
12064### Header Changes:
12065- "TODAY" → "Today"
12066- "TOMORROW" → "Tomorrow"
12067- "IMPORTANT EVENTS" → "Important Events"
12068
12069## Version 3.9.0 (2026-02-05) - SIDEBAR WIDGET REDESIGN
12070- **Redesigned:** Complete overhaul of `sidebar` parameter
12071- **Added:** Compact week-at-a-glance itinerary view (200px wide)
12072- **Added:** Live clock widget at top of sidebar
12073- **Added:** 7-cell week grid showing event bars
12074- **Added:** Today section with orange header and left border
12075- **Added:** Tomorrow section with green header and left border
12076- **Added:** Important Events section with purple header and left border
12077- **Added:** Admin setting to configure important namespaces
12078- **Added:** Time conflict badges in sidebar events
12079- **Added:** Task checkboxes in sidebar events
12080- **Changed:** Sidebar now optimized for narrow spaces (200px)
12081- **Improved:** Perfect for dashboards, page sidebars, and quick glance widgets
12082
12083### New Features:
12084- Clock updates every second showing current time
12085- Week grid shows Mon-Sun with colored event bars
12086- Today/Tomorrow sections show full event details
12087- Important events highlighted in purple (configurable namespaces)
12088- All badges (conflict, time, etc.) shown in compact format
12089- Automatic time conflict detection
12090
12091## Version 3.8.0 (2026-02-05) - PRODUCTION CLEANUP
12092- **Removed:** 16 unused/debug/backup files
12093- **Removed:** 69 console.log() debug statements
12094- **Removed:** 3 orphaned object literals from console.log removal
12095- **Removed:** Temporary comments and markers
12096- **Fixed:** JavaScript syntax errors from cleanup
12097- **Improved:** Code quality and maintainability
12098- **Improved:** Reduced plugin size by removing unnecessary files
12099- **Status:** Production-ready, fully cleaned codebase
12100
12101### Files Removed:
12102- style.css.backup, script.js.backup
12103- admin_old_backup.php, admin_minimal.php, admin_new.php, admin_clean.php
12104- debug_events.php, debug_html.php, cleanup_events.php
12105- fix_corrupted_json.php, fix_wildcard_namespaces.php
12106- find_outlook_duplicates.php, update_namespace.php
12107- validate_calendar_json.php, admin.js
12108- test_date_field.html
12109
12110## Version 3.7.5 (2026-02-05)
12111- **Fixed:** PHP syntax error (duplicate foreach loop removed)
12112- **Fixed:** Time variable handling in grace period logic
12113
12114## Version 3.7.4 (2026-02-05)
12115- **Added:** 15-minute grace period for timed events
12116- **Changed:** Events with times now stay visible for 15 minutes after their start time
12117- **Changed:** Prevents events from immediately disappearing when they start
12118- **Improved:** Better user experience for ongoing events
12119- **Fixed:** Events from earlier today now properly handled with grace period
12120
12121## Version 3.7.3 (2026-02-05)
12122- **Changed:** Complete redesign of cleanup section for compact, sleek layout
12123- **Changed:** Radio buttons now in single row at top
12124- **Changed:** All options visible with grayed-out inactive states (opacity 0.4)
12125- **Changed:** Inline controls - no more grid layout or wrapper boxes
12126- **Changed:** Namespace filter now compact single-line input
12127- **Changed:** Smaller buttons and tighter spacing throughout
12128- **Improved:** More professional, space-efficient design
12129
12130## Version 3.7.2 (2026-02-04)
12131- **Fixed:** Strange boxes under cleanup options - now properly hidden
12132- **Changed:** Unified color scheme across all admin sections
12133- **Changed:** Green (#00cc07) - Primary actions and main theme
12134- **Changed:** Orange (#ff9800) - Warnings and cleanup features
12135- **Changed:** Purple (#7b1fa2) - Secondary actions and accents
12136- **Improved:** Consistent visual design throughout admin interface
12137
12138## Version 3.7.1 (2026-02-04)
12139- **Fixed:** Cleanup section background changed from orange to white
12140- **Fixed:** Event cleanup now properly scans all calendar directories
12141- **Added:** Debug info display when preview finds no events
12142- **Improved:** Better directory scanning logic matching other features
12143
12144## Version 3.7.0 (2026-02-04)
12145- **Added:** Event cleanup feature in Events Manager
12146- **Added:** Delete old events by age (months/years old)
12147- **Added:** Delete events by status (completed tasks, past events)
12148- **Added:** Delete events by date range
12149- **Added:** Namespace filter for targeted cleanup
12150- **Added:** Preview function to see what will be deleted
12151- **Added:** Automatic backup creation before cleanup
12152- **Changed:** Reduced changelog viewer height to 100px (was 400px)
12153
12154## Version 3.6.3 (2026-02-04)
12155- **Fixed:** Conflict tooltips now work properly after navigating between months
12156- **Added:** Changelog display in Update Plugin tab
12157- **Added:** CHANGELOG.md file with version history
12158- **Improved:** Changelog shows last 10 versions with color-coded change types
12159- **Fixed:** Removed debug console.log statements
12160
12161## Version 3.6.2 (2026-02-04)
12162- **Fixed:** Month title now updates correctly when navigating between months
12163- **Changed:** All eventpanel header elements reduced by 10% for more compact design
12164- **Changed:** Reduced header height from 78px to 70px
12165
12166## Version 3.6.1 (2026-02-04)
12167- **Changed:** Complete redesign of eventpanel header with practical two-row layout
12168- **Fixed:** Improved layout for narrow widths (~500px)
12169- **Changed:** Simplified color scheme (removed purple gradient)
12170
12171## Version 3.6.0 (2026-02-04)
12172- **Changed:** Redesigned eventpanel header with gradient background
12173- **Changed:** Consolidated multiple header rows into compact single-row design
12174
12175## Version 3.5.1 (2026-02-04)
12176- **Changed:** Moved event search bar into header row next to + Add button
12177- **Improved:** More compact UI with search integrated into header
12178
12179## Version 3.5.0 (2026-02-04)
12180- **Added:** Event search functionality in sidebar and eventpanel
12181- **Added:** Real-time filtering as you type
12182- **Added:** Clear button (✕) appears when searching
12183- **Added:** "No results" message when search returns nothing
12184
12185## Version 3.4.7 (2026-02-04)
12186- **Changed:** Made conflict badges smaller and more subtle (9px font, less padding)
12187- **Fixed:** Removed debug logging from console
12188- **Changed:** Updated export version number to match plugin version
12189
12190## Version 3.4.6 (2026-02-04)
12191- **Added:** Debug logging to diagnose conflict detection issues
12192- **Development:** Extensive console logging for troubleshooting
12193
12194## Version 3.4.5 (2026-02-04)
12195- **Added:** Debug logging to showDayPopup and conflict detection
12196- **Development:** Added logging to trace conflict detection flow
12197
12198## Version 3.4.4 (2026-02-04)
12199- **Fixed:** Conflict detection now persists across page refreshes (PHP-based)
12200- **Fixed:** Conflict tooltips now appear on hover
12201- **Added:** Dual conflict detection (PHP for initial load, JavaScript for navigation)
12202- **Added:** Conflict badges in both future and past events sections
12203
12204## Version 3.4.3 (2026-02-04)
12205- **Added:** Custom styled conflict tooltips with hover functionality
12206- **Changed:** Conflict badge shows count of conflicts (e.g., ⚠️ 2)
12207- **Improved:** Beautiful tooltip design with orange header and clean formatting
12208
12209## Version 3.4.2 (2026-02-04)
12210- **Fixed:** Attempted to fix tooltip newlines (reverted in 3.4.3)
12211
12212## Version 3.4.1 (2026-02-04)
12213- **Fixed:** End time field now properly saves to database
12214- **Fixed:** End time dropdown now filters to show only valid times after start time
12215- **Added:** Smart dropdown behavior - expands on focus, filters invalid options
12216- **Improved:** End time auto-suggests +1 hour when start time selected
12217
12218## Version 3.4.0 (2026-02-04)
12219- **Added:** End time support for events (start and end times)
12220- **Added:** Automatic time conflict detection
12221- **Added:** Conflict warning badges (⚠️) on events with overlapping times
12222- **Added:** Conflict tooltips showing which events conflict
12223- **Added:** Visual conflict indicators with pulse animation
12224- **Changed:** Time display now shows ranges (e.g., "2:00 PM - 4:00 PM")
12225
12226## Version 3.3.77 (2026-02-04)
12227- **Fixed:** Namespace badge onclick handlers restored after clearing filter
12228- **Fixed:** Namespace filtering works infinitely (filter → clear → filter)
12229
12230## Version 3.3.76 (2026-02-04)
12231- **Fixed:** Namespace badges now clickable after clearing namespace filter
12232
12233## Version 3.3.75 (2026-02-04)
12234- **Fixed:** Form resubmission warnings eliminated
12235- **Improved:** Implemented proper POST-Redirect-GET pattern with HTTP 303
12236- **Changed:** All admin redirects now use absolute URLs
12237
12238## Version 3.3.74 (2026-02-04)
12239- **Fixed:** Clearing namespace filter now restores original namespace instead of default
12240- **Added:** data-original-namespace attribute to preserve initial namespace setting
12241- **Improved:** Console logging for namespace filter debugging
12242
12243## Version 3.3.73 (2026-02-03)
12244- **Added:** Dynamic namespace filtering banner with clear button
12245- **Fixed:** JavaScript function accessibility issues
12246- **Fixed:** Namespace badge click handlers in event lists
12247- **Improved:** Persistent namespace filtering across views
12248
12249## Earlier Versions
12250See previous transcripts for complete history through v3.3.73, including:
12251- Recurring events with Outlook sync
12252- Multi-namespace support
12253- Event categories and mapping
12254- Backup/restore functionality
12255- System statistics bar
12256- Namespace selector with fuzzy search
12257- Events Manager with import/export
12258- And much more...
12259